From 3446cfebfa6af99b462ae246963c1eb09e6d0ef5 Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Thu, 2 Jan 2020 22:01:41 +0800 Subject: [PATCH] [Settings] Replacing accessing of PhoneConstants$DataState Replaced by PhoneStateListner#onPreciseDataConnectionStateChanged(). Bug: 147080692 Test: manual Change-Id: I0a00bac335a62079913a95bf5ab6cdb9fbcd069d --- .../android/settings/network/ApnSettings.java | 65 ++++++++++++------- 1 file changed, 43 insertions(+), 22 deletions(-) diff --git a/src/com/android/settings/network/ApnSettings.java b/src/com/android/settings/network/ApnSettings.java index b31154fad6f..88a13ae4522 100755 --- a/src/com/android/settings/network/ApnSettings.java +++ b/src/com/android/settings/network/ApnSettings.java @@ -38,6 +38,8 @@ import android.os.UserHandle; import android.os.UserManager; import android.provider.Telephony; import android.telephony.CarrierConfigManager; +import android.telephony.PhoneStateListener; +import android.telephony.PreciseDataConnectionState; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -52,8 +54,6 @@ import android.widget.Toast; import androidx.preference.Preference; import androidx.preference.PreferenceGroup; -import com.android.internal.telephony.PhoneConstants; -import com.android.internal.telephony.TelephonyIntents; import com.android.settings.R; import com.android.settings.RestrictedSettingsFragment; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; @@ -107,6 +107,7 @@ public class ApnSettings extends RestrictedSettingsFragment private static boolean mRestoreDefaultApnMode; private UserManager mUserManager; + private TelephonyManager mTelephonyManager; private RestoreApnUiHandler mRestoreApnUiHandler; private RestoreApnProcessHandler mRestoreApnProcessHandler; private HandlerThread mRestoreDefaultApnThread; @@ -130,22 +131,24 @@ public class ApnSettings extends RestrictedSettingsFragment super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS); } + private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() { + @Override + public void onPreciseDataConnectionStateChanged( + PreciseDataConnectionState dataConnectionState) { + if (dataConnectionState.getState() == TelephonyManager.DATA_CONNECTED) { + if (!mRestoreDefaultApnMode) { + fillList(); + } else { + showDialog(DIALOG_RESTORE_DEFAULTAPN); + } + } + } + }; + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals( - TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) { - PhoneConstants.DataState state = getMobileDataState(intent); - switch (state) { - case CONNECTED: - if (!mRestoreDefaultApnMode) { - fillList(); - } else { - showDialog(DIALOG_RESTORE_DEFAULTAPN); - } - break; - } - } else if(intent.getAction().equals( TelephonyManager.ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED)) { if (!mRestoreDefaultApnMode) { int extraSubId = intent.getIntExtra(TelephonyManager.EXTRA_SUBSCRIPTION_ID, @@ -156,6 +159,7 @@ public class ApnSettings extends RestrictedSettingsFragment // subscription has changed mSubId = extraSubId; mSubscriptionInfo = getSubscriptionInfo(mSubId); + restartPhoneStateListener(mSubId); } fillList(); } @@ -163,13 +167,25 @@ public class ApnSettings extends RestrictedSettingsFragment } }; - private static PhoneConstants.DataState getMobileDataState(Intent intent) { - String str = intent.getStringExtra(PhoneConstants.STATE_KEY); - if (str != null) { - return Enum.valueOf(PhoneConstants.DataState.class, str); - } else { - return PhoneConstants.DataState.DISCONNECTED; + private void restartPhoneStateListener(int subId) { + if (mRestoreDefaultApnMode) { + return; } + + final TelephonyManager updatedTelephonyManager = + mTelephonyManager.createForSubscriptionId(subId); + if (updatedTelephonyManager == null) { + return; + } + + // restart monitoring when subscription has been changed + mTelephonyManager.listen(mPhoneStateListener, + PhoneStateListener.LISTEN_NONE); + + mTelephonyManager = updatedTelephonyManager; + + mTelephonyManager.listen(mPhoneStateListener, + PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE); } @Override @@ -185,12 +201,12 @@ public class ApnSettings extends RestrictedSettingsFragment SubscriptionManager.INVALID_SUBSCRIPTION_ID); mPhoneId = SubscriptionUtil.getPhoneId(activity, mSubId); mIntentFilter = new IntentFilter( - TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED); - mIntentFilter.addAction(TelephonyManager.ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED); + TelephonyManager.ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED); setIfOnlyAvailableForAdmins(true); mSubscriptionInfo = getSubscriptionInfo(mSubId); + mTelephonyManager = activity.getSystemService(TelephonyManager.class); CarrierConfigManager configManager = (CarrierConfigManager) getSystemService(Context.CARRIER_CONFIG_SERVICE); @@ -235,6 +251,8 @@ public class ApnSettings extends RestrictedSettingsFragment getActivity().registerReceiver(mReceiver, mIntentFilter); + restartPhoneStateListener(mSubId); + if (!mRestoreDefaultApnMode) { fillList(); } @@ -249,6 +267,9 @@ public class ApnSettings extends RestrictedSettingsFragment } getActivity().unregisterReceiver(mReceiver); + + mTelephonyManager.listen(mPhoneStateListener, + PhoneStateListener.LISTEN_NONE); } @Override