From 5560882548ce46f57cd09c296f370b2655838524 Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Mon, 11 Nov 2019 15:05:06 +0800 Subject: [PATCH] [Settings] Replace getSimCount() API Change design of monitor change in Settings.Global.MOBILE_DATA and Settings.Global.DATA_ROAMING in order to avoid from accessing getSimCount(). Bug: 144251589 Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=RoamingPreferenceControllerTest make RunSettingsRoboTests -j ROBOTEST_FILTER=VideoCallingPreferenceControllerTest Merged-In: I965a0c07c7c9ef5897b33809bae6a7921977db18 Change-Id: I8010f74c41826b081aa9f599d33a9519a1888215 --- .../VideoCallingPreferenceController.java | 60 +++++++------------ .../VideoCallingPreferenceControllerTest.java | 2 + 2 files changed, 25 insertions(+), 37 deletions(-) diff --git a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java index 5b1ad4acdce..c70ade6266f 100644 --- a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java +++ b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java @@ -17,12 +17,8 @@ package com.android.settings.network.telephony; import android.content.Context; -import android.database.ContentObserver; -import android.net.Uri; -import android.os.Handler; import android.os.Looper; import android.os.PersistableBundle; -import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.PhoneStateListener; import android.telephony.SubscriptionManager; @@ -34,6 +30,7 @@ import androidx.preference.PreferenceScreen; import androidx.preference.SwitchPreference; import com.android.ims.ImsManager; +import com.android.settings.network.MobileDataEnabledListener; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnStart; import com.android.settingslib.core.lifecycle.events.OnStop; @@ -43,6 +40,7 @@ import com.android.settingslib.core.lifecycle.events.OnStop; */ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceController implements LifecycleObserver, OnStart, OnStop, + MobileDataEnabledListener.Client, Enhanced4gLtePreferenceController.On4gLteUpdateListener { private Preference mPreference; @@ -51,12 +49,14 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC @VisibleForTesting ImsManager mImsManager; private PhoneCallStateListener mPhoneStateListener; - private DataContentObserver mDataContentObserver; + @VisibleForTesting + Integer mCallState; + private MobileDataEnabledListener mDataContentObserver; public VideoCallingPreferenceController(Context context, String key) { super(context, key); mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); - mDataContentObserver = new DataContentObserver(new Handler(Looper.getMainLooper())); + mDataContentObserver = new MobileDataEnabledListener(context, this); mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper()); } @@ -77,18 +77,21 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC @Override public void onStart() { mPhoneStateListener.register(mSubId); - mDataContentObserver.register(mContext, mSubId); + mDataContentObserver.start(mSubId); } @Override public void onStop() { mPhoneStateListener.unregister(); - mDataContentObserver.unRegister(mContext); + mDataContentObserver.stop(); } @Override public void updateState(Preference preference) { super.updateState(preference); + if (mCallState == null) { + return; + } final SwitchPreference switchPreference = (SwitchPreference) preference; final boolean videoCallEnabled = isVideoCallEnabled(mSubId, mImsManager); switchPreference.setVisible(videoCallEnabled); @@ -96,7 +99,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC final boolean is4gLteEnabled = mImsManager.isEnhanced4gLteModeSettingEnabledByUser() && mImsManager.isNonTtyOrTtyOnVolteEnabled(); preference.setEnabled(is4gLteEnabled && - mTelephonyManager.getCallState(mSubId) == TelephonyManager.CALL_STATE_IDLE); + mCallState == TelephonyManager.CALL_STATE_IDLE); switchPreference.setChecked(is4gLteEnabled && mImsManager.isVtEnabledByUser()); } } @@ -114,8 +117,9 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC public VideoCallingPreferenceController init(int subId) { mSubId = subId; - mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId); + mTelephonyManager = mContext.getSystemService(TelephonyManager.class); if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId); mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId)); } @@ -132,8 +136,10 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC @VisibleForTesting boolean isVideoCallEnabled(int subId, ImsManager imsManager) { final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(subId); - final TelephonyManager telephonyManager = TelephonyManager - .from(mContext).createForSubscriptionId(subId); + TelephonyManager telephonyManager = mContext.getSystemService(TelephonyManager.class); + if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + telephonyManager = telephonyManager.createForSubscriptionId(subId); + } return carrierConfig != null && imsManager != null && imsManager.isVtEnabledByPlatform() && imsManager.isVtProvisionedOnDevice() @@ -156,6 +162,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC @Override public void onCallStateChanged(int state, String incomingNumber) { + mCallState = state; updateState(mPreference); } @@ -165,36 +172,15 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC } public void unregister() { + mCallState = null; mTelephonyManager.listen(this, PhoneStateListener.LISTEN_NONE); } } /** - * Listener that listens mobile data state change. + * Implementation of MobileDataEnabledListener.Client */ - public class DataContentObserver extends ContentObserver { - - public DataContentObserver(Handler handler) { - super(handler); - } - - @Override - public void onChange(boolean selfChange) { - super.onChange(selfChange); - updateState(mPreference); - } - - public void register(Context context, int subId) { - Uri uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA); - if (TelephonyManager.getDefault().getSimCount() != 1) { - uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA + subId); - } - context.getContentResolver().registerContentObserver(uri, - false /* notifyForDescendants */, this /* observer */); - } - - public void unRegister(Context context) { - context.getContentResolver().unregisterContentObserver(this); - } + public void onMobileDataEnabledChange() { + updateState(mPreference); } } diff --git a/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java index 3ada5193372..7b715655058 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java @@ -83,6 +83,8 @@ public class VideoCallingPreferenceControllerTest { doReturn(true).when(mImsManager).isVtProvisionedOnDevice(); doReturn(ImsFeature.STATE_READY).when(mImsManager).getImsServiceState(); doReturn(true).when(mTelephonyManager).isDataEnabled(); + + mController.mCallState = TelephonyManager.CALL_STATE_IDLE; } @Test