extend isBusyState to check phone state as well
This commit is contained in:
		
							parent
							
								
									15b323ee69
								
							
						
					
					
						commit
						91e94db747
					
				| 
						 | 
				
			
			@ -7,6 +7,7 @@
 | 
			
		|||
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 | 
			
		||||
    <uses-permission android:name="android.permission.READ_CONTACTS" />
 | 
			
		||||
    <uses-permission android:name="android.permission.READ_PROFILE" />
 | 
			
		||||
    <uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="22" />
 | 
			
		||||
    <uses-permission android:name="android.permission.INTERNET" />
 | 
			
		||||
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 | 
			
		||||
    <uses-permission android:name="android.permission.WAKE_LOCK" />
 | 
			
		||||
| 
						 | 
				
			
			@ -36,10 +37,6 @@
 | 
			
		|||
    <uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT" />
 | 
			
		||||
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
 | 
			
		||||
 | 
			
		||||
    <uses-permission
 | 
			
		||||
        android:name="android.permission.READ_PHONE_STATE"
 | 
			
		||||
        tools:node="remove" />
 | 
			
		||||
 | 
			
		||||
    <uses-sdk tools:overrideLibrary="net.ypresto.androidtranscoder" />
 | 
			
		||||
 | 
			
		||||
    <uses-feature
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,6 +36,8 @@ import android.support.annotation.BoolRes;
 | 
			
		|||
import android.support.annotation.IntegerRes;
 | 
			
		||||
import android.support.v4.app.RemoteInput;
 | 
			
		||||
import android.support.v4.content.ContextCompat;
 | 
			
		||||
import android.telephony.PhoneStateListener;
 | 
			
		||||
import android.telephony.TelephonyManager;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.DisplayMetrics;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
| 
						 | 
				
			
			@ -262,6 +264,13 @@ public class XmppConnectionService extends Service {
 | 
			
		|||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
    private final AtomicBoolean isPhoneInCall = new AtomicBoolean(false);
 | 
			
		||||
    private final PhoneStateListener phoneStateListener = new PhoneStateListener() {
 | 
			
		||||
        @Override
 | 
			
		||||
        public void onCallStateChanged(final int state, final String phoneNumber) {
 | 
			
		||||
            isPhoneInCall.set(state != 0);
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    private boolean destroyed = false;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1156,6 +1165,19 @@ public class XmppConnectionService extends Service {
 | 
			
		|||
        registerReceiver(this.mInternalEventReceiver, intentFilter);
 | 
			
		||||
        mForceDuringOnCreate.set(false);
 | 
			
		||||
        toggleForegroundService();
 | 
			
		||||
        setupPhoneStateListener();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    private void setupPhoneStateListener() {
 | 
			
		||||
        final TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
 | 
			
		||||
        if (telephonyManager != null) {
 | 
			
		||||
            telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isPhoneInCall() {
 | 
			
		||||
        return isPhoneInCall.get();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void checkForDeletedFiles() {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,7 +90,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
 | 
			
		|||
            final AbstractJingleConnection connection;
 | 
			
		||||
            if (FileTransferDescription.NAMESPACES.contains(descriptionNamespace)) {
 | 
			
		||||
                connection = new JingleFileTransferConnection(this, id, from);
 | 
			
		||||
            } else if (Namespace.JINGLE_APPS_RTP.equals(descriptionNamespace) && !usesTor(account)) {
 | 
			
		||||
            } else if (Namespace.JINGLE_APPS_RTP.equals(descriptionNamespace) && isUsingClearNet(account)) {
 | 
			
		||||
                final boolean sessionEnded = this.terminatedSessions.asMap().containsKey(PersistableSessionId.of(id));
 | 
			
		||||
                final boolean stranger = isWithStrangerAndStrangerNotificationsAreOff(account, id.with);
 | 
			
		||||
                if (isBusy() || sessionEnded || stranger) {
 | 
			
		||||
| 
						 | 
				
			
			@ -116,11 +116,14 @@ public class JingleConnectionManager extends AbstractConnectionManager {
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean usesTor(final Account account) {
 | 
			
		||||
        return account.isOnion() || mXmppConnectionService.useTorToConnect();
 | 
			
		||||
    private boolean isUsingClearNet(final Account account) {
 | 
			
		||||
        return !account.isOnion() && !mXmppConnectionService.useTorToConnect();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isBusy() {
 | 
			
		||||
        if (mXmppConnectionService.isPhoneInCall()) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        for (AbstractJingleConnection connection : this.connections.values()) {
 | 
			
		||||
            if (connection instanceof JingleRtpConnection) {
 | 
			
		||||
                if (((JingleRtpConnection) connection).isTerminated()) {
 | 
			
		||||
| 
						 | 
				
			
			@ -257,7 +260,7 @@ public class JingleConnectionManager extends AbstractConnectionManager {
 | 
			
		|||
                    Collections2.filter(descriptions, d -> d instanceof RtpDescription),
 | 
			
		||||
                    input -> (RtpDescription) input
 | 
			
		||||
            );
 | 
			
		||||
            if (rtpDescriptions.size() > 0 && rtpDescriptions.size() == descriptions.size() && !usesTor(account)) {
 | 
			
		||||
            if (rtpDescriptions.size() > 0 && rtpDescriptions.size() == descriptions.size() && isUsingClearNet(account)) {
 | 
			
		||||
                final Collection<Media> media = Collections2.transform(rtpDescriptions, RtpDescription::getMedia);
 | 
			
		||||
                if (media.contains(Media.UNKNOWN)) {
 | 
			
		||||
                    Log.d(Config.LOGTAG, account.getJid().asBareJid() + ": encountered unknown media in session proposal. " + propose);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue