From 41855ec8b918bcbb025a95e238982c9f57908a94 Mon Sep 17 00:00:00 2001 From: Malcolm Chen Date: Thu, 14 Mar 2019 20:34:50 -0700 Subject: [PATCH] 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 --- AndroidManifest.xml | 2 +- .../settings/sim/SimSelectNotification.java | 78 +++++----------------- 2 files changed, 16 insertions(+), 64 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7625e78530..484e16157a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2540,7 +2540,7 @@ - + diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java index cf67f5ec18..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.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; -import android.telephony.TelephonyManager; -import android.util.Log; - -import androidx.core.app.NotificationCompat; -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(true); - 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); -- 2.11.0