/** Connect to sip service by flagging itself as the component to consider as outgoing activity */ private void connectService() { PreferencesProviderWrapper prefsWrapper = new PreferencesProviderWrapper(this); Intent sipService = new Intent(SipManager.INTENT_SIP_SERVICE); if (prefsWrapper.isValidConnectionForOutgoing()) { sipService.putExtra(SipManager.EXTRA_OUTGOING_ACTIVITY, getComponentName()); startService(sipService); } bindService(sipService, connection, Context.BIND_AUTO_CREATE); }
@Override public void onReceive(Context context, Intent intent) { PreferencesProviderWrapper prefWrapper = new PreferencesProviderWrapper(context); String intentAction = intent.getAction(); // // ACTION_DATA_STATE_CHANGED // Data state change is used to detect changes in the mobile // network such as a switch of network type (GPRS, EDGE, 3G) // which are not detected by the Connectivity changed broadcast. // // // ACTION_CONNECTIVITY_CHANGED // Connectivity change is used to detect changes in the overall // data network status as well as a switch between wifi and mobile // networks. // if ( /*intentAction.equals(ACTION_DATA_STATE_CHANGED) ||*/ intentAction.equals(ConnectivityManager.CONNECTIVITY_ACTION) || intentAction.equals(Intent.ACTION_BOOT_COMPLETED)) { if (prefWrapper.isValidConnectionForIncoming() && !prefWrapper.getPreferenceBooleanValue(PreferencesProviderWrapper.HAS_BEEN_QUIT)) { Log.d(THIS_FILE, "Try to start service if not already started"); Intent sip_service_intent = new Intent(context, SipService.class); context.startService(sip_service_intent); } } else if (intentAction.equals(SipManager.INTENT_SIP_ACCOUNT_ACTIVATE)) { context.enforceCallingOrSelfPermission(SipManager.PERMISSION_CONFIGURE_SIP, null); long accId; accId = intent.getLongExtra(SipProfile.FIELD_ID, SipProfile.INVALID_ID); if (accId == SipProfile.INVALID_ID) { // allow remote side to send us integers. // previous call will warn, but that's fine, no worries accId = intent.getIntExtra(SipProfile.FIELD_ID, (int) SipProfile.INVALID_ID); } if (accId != SipProfile.INVALID_ID) { boolean active = intent.getBooleanExtra(SipProfile.FIELD_ACTIVE, true); ContentValues cv = new ContentValues(); cv.put(SipProfile.FIELD_ACTIVE, active); int done = context .getContentResolver() .update( ContentUris.withAppendedId(SipProfile.ACCOUNT_ID_URI_BASE, accId), cv, null, null); if (done > 0) { if (prefWrapper.isValidConnectionForIncoming()) { Intent sipServiceIntent = new Intent(context, SipService.class); context.startService(sipServiceIntent); } } } } else if (Intent.ACTION_PACKAGE_ADDED.equalsIgnoreCase(intentAction) || Intent.ACTION_PACKAGE_REMOVED.equalsIgnoreCase(intentAction)) { CallHandlerPlugin.clearAvailableCallHandlers(); RewriterPlugin.clearAvailableRewriters(); ExtraPlugins.clearDynPlugins(); PhoneCapabilityTester.deinit(); } else if (APPLY_NIGHTLY_UPLOAD.equals(intentAction)) { NightlyUpdater nu = new NightlyUpdater(context); nu.applyUpdate(intent); } }