From: Malcolm Chen Date: Fri, 15 Mar 2019 03:34:50 +0000 (-0700) Subject: Move SIM select logic from SimSelectNotification to Telephony. X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=5cc16b2cc0dfc1730ac733d1aaa55affa5958a0f;p=android-x86%2Fpackages-apps-Settings.git Move SIM select logic from SimSelectNotification to Telephony. SimSelectNotification used to listen to SIM_STATE_CHANGED from Telephony and do checkings to decide whether to pop up notification and SimDialogActivity. The logic needs updated and only Telephony knows it well. So this change moves the logic into Telephony. SimSelectNotification only listens to Telephony's decision, brings up notification and trigger SimDialogActivity. Bug: 128645056 Test: sanity and manual Change-Id: I6153e27dd00dd9cdf8682f135eb39f8af3a75608 Merged-In: I6153e27dd00dd9cdf8682f135eb39f8af3a75608 --- diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0271c92c32..0a0e403419 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2812,7 +2812,7 @@ - + diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java index ebf34e5ca7..891d1719e6 100644 --- a/src/com/android/settings/sim/SimSelectNotification.java +++ b/src/com/android/settings/sim/SimSelectNotification.java @@ -16,6 +16,12 @@ package com.android.settings.sim; +import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_ID; +import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_FOR_ALL_TYPES; +import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE; +import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA; +import static android.telephony.TelephonyManager.EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE; + import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; @@ -23,19 +29,12 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.res.Resources; -import android.provider.Settings; -import androidx.core.app.NotificationCompat; -import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; -import android.telephony.TelephonyManager; -import android.util.Log; -import com.android.internal.telephony.IccCardConstants; import com.android.settings.R; import com.android.settings.Settings.SimSettingsActivity; -import com.android.settings.Utils; -import java.util.List; +import androidx.core.app.NotificationCompat; public class SimSelectNotification extends BroadcastReceiver { private static final String TAG = "SimSelectNotification"; @@ -46,71 +45,24 @@ public class SimSelectNotification extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { - final TelephonyManager telephonyManager = (TelephonyManager) - context.getSystemService(Context.TELEPHONY_SERVICE); - final SubscriptionManager subscriptionManager = SubscriptionManager.from(context); - final int numSlots = telephonyManager.getSimCount(); - - // Do not create notifications on single SIM devices or when provisioning i.e. Setup Wizard. - if (numSlots < 2 || !Utils.isDeviceProvisioned(context)) { - return; - } - // Cancel any previous notifications cancelNotification(context); - - // If sim state is not ABSENT or LOADED then ignore - String simStatus = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE); - if (!(IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(simStatus) || - IccCardConstants.INTENT_VALUE_ICC_LOADED.equals(simStatus))) { - Log.d(TAG, "sim state is not Absent or Loaded"); - return; - } else { - Log.d(TAG, "simstatus = " + simStatus); - } - - int state; - for (int i = 0; i < numSlots; i++) { - state = telephonyManager.getSimState(i); - if (!(state == TelephonyManager.SIM_STATE_ABSENT - || state == TelephonyManager.SIM_STATE_READY - || state == TelephonyManager.SIM_STATE_UNKNOWN)) { - Log.d(TAG, "All sims not in valid state yet"); - return; - } - } - - List sil = subscriptionManager.getActiveSubscriptionInfoList(); - if (sil == null || sil.size() < 1) { - Log.d(TAG, "Subscription list is empty"); - return; - } - - // Clear defaults for any subscriptions which no longer exist - subscriptionManager.clearDefaultsForInactiveSubIds(); - - boolean dataSelected = SubscriptionManager.isUsableSubIdValue( - SubscriptionManager.getDefaultDataSubscriptionId()); - boolean smsSelected = SubscriptionManager.isUsableSubIdValue( - SubscriptionManager.getDefaultSmsSubscriptionId()); - - // If data and sms defaults are selected, dont show notification (Calls default is optional) - if (dataSelected && smsSelected) { - Log.d(TAG, "Data & SMS default sims are selected. No notification"); - return; - } - // Create a notification to tell the user that some defaults are missing createNotification(context); - if (sil.size() == 1) { + int dialogType = intent.getIntExtra(EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE, + EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE); + if (dialogType == EXTRA_DEFAULT_SUBSCRIPTION_SELECT_FOR_ALL_TYPES) { + int subId = intent.getIntExtra(EXTRA_DEFAULT_SUBSCRIPTION_ID, + SubscriptionManager.DEFAULT_SUBSCRIPTION_ID); + int slotIndex = SubscriptionManager.getSlotIndex(subId); // If there is only one subscription, ask if user wants to use if for everything Intent newIntent = new Intent(context, SimDialogActivity.class); newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); newIntent.putExtra(SimDialogActivity.DIALOG_TYPE_KEY, SimDialogActivity.PREFERRED_PICK); - newIntent.putExtra(SimDialogActivity.PREFERRED_SIM, sil.get(0).getSimSlotIndex()); + newIntent.putExtra(SimDialogActivity.PREFERRED_SIM, slotIndex); context.startActivity(newIntent); - } else if (!dataSelected) { + } else if (dialogType == EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA) { // If there are mulitple, ensure they pick default data Intent newIntent = new Intent(context, SimDialogActivity.class); newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);