[Settings] Refactor PhoneStateListener
Remove Looper and update of mSubId Bug: 144542981 Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=Enhanced4gBasePreferenceControllerTest make RunSettingsRoboTests -j ROBOTEST_FILTER=VideoCallingPreferenceControllerTest make RunSettingsRoboTests -j ROBOTEST_FILTER=WifiCallingPreferenceControllerTest Change-Id: Ie6ae5b5914322644f2655e585b03a6b685bbc84a
This commit is contained in:
@@ -17,7 +17,6 @@
|
|||||||
package com.android.settings.network.telephony;
|
package com.android.settings.network.telephony;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Looper;
|
|
||||||
import android.os.PersistableBundle;
|
import android.os.PersistableBundle;
|
||||||
import android.telephony.CarrierConfigManager;
|
import android.telephony.CarrierConfigManager;
|
||||||
import android.telephony.PhoneStateListener;
|
import android.telephony.PhoneStateListener;
|
||||||
@@ -47,7 +46,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
|
|||||||
implements LifecycleObserver, OnStart, OnStop {
|
implements LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
private TelephonyManager mTelephonyManager;
|
|
||||||
private CarrierConfigManager mCarrierConfigManager;
|
private CarrierConfigManager mCarrierConfigManager;
|
||||||
private PersistableBundle mCarrierConfig;
|
private PersistableBundle mCarrierConfig;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -67,7 +65,7 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
|
|||||||
super(context, key);
|
super(context, key);
|
||||||
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
||||||
m4gLteListeners = new ArrayList<>();
|
m4gLteListeners = new ArrayList<>();
|
||||||
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
|
mPhoneStateListener = new PhoneCallStateListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Enhanced4gBasePreferenceController init(int subId) {
|
public Enhanced4gBasePreferenceController init(int subId) {
|
||||||
@@ -75,8 +73,6 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
mSubId = subId;
|
mSubId = subId;
|
||||||
mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
|
|
||||||
.createForSubscriptionId(mSubId);
|
|
||||||
mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
mCarrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
|
||||||
if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
|
mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
|
||||||
@@ -123,7 +119,7 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
mPhoneStateListener.register(mSubId);
|
mPhoneStateListener.register(mContext, mSubId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -192,18 +188,23 @@ public class Enhanced4gBasePreferenceController extends TelephonyTogglePreferenc
|
|||||||
|
|
||||||
private class PhoneCallStateListener extends PhoneStateListener {
|
private class PhoneCallStateListener extends PhoneStateListener {
|
||||||
|
|
||||||
public PhoneCallStateListener(Looper looper) {
|
PhoneCallStateListener() {
|
||||||
super(looper);
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TelephonyManager mTelephonyManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCallStateChanged(int state, String incomingNumber) {
|
public void onCallStateChanged(int state, String incomingNumber) {
|
||||||
mCallState = state;
|
mCallState = state;
|
||||||
updateState(mPreference);
|
updateState(mPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(int subId) {
|
public void register(Context context, int subId) {
|
||||||
Enhanced4gBasePreferenceController.this.mSubId = subId;
|
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
||||||
|
if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
|
mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
|
||||||
|
}
|
||||||
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
|
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,7 +17,6 @@
|
|||||||
package com.android.settings.network.telephony;
|
package com.android.settings.network.telephony;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Looper;
|
|
||||||
import android.os.PersistableBundle;
|
import android.os.PersistableBundle;
|
||||||
import android.telephony.CarrierConfigManager;
|
import android.telephony.CarrierConfigManager;
|
||||||
import android.telephony.PhoneStateListener;
|
import android.telephony.PhoneStateListener;
|
||||||
@@ -47,7 +46,6 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
|
|||||||
Enhanced4gBasePreferenceController.On4gLteUpdateListener {
|
Enhanced4gBasePreferenceController.On4gLteUpdateListener {
|
||||||
|
|
||||||
private Preference mPreference;
|
private Preference mPreference;
|
||||||
private TelephonyManager mTelephonyManager;
|
|
||||||
private CarrierConfigManager mCarrierConfigManager;
|
private CarrierConfigManager mCarrierConfigManager;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
ImsManager mImsManager;
|
ImsManager mImsManager;
|
||||||
@@ -60,7 +58,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
|
|||||||
super(context, key);
|
super(context, key);
|
||||||
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
||||||
mDataContentObserver = new MobileDataEnabledListener(context, this);
|
mDataContentObserver = new MobileDataEnabledListener(context, this);
|
||||||
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
|
mPhoneStateListener = new PhoneCallStateListener();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -79,7 +77,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
mPhoneStateListener.register(mSubId);
|
mPhoneStateListener.register(mContext, mSubId);
|
||||||
mDataContentObserver.start(mSubId);
|
mDataContentObserver.start(mSubId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,9 +118,7 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
|
|||||||
|
|
||||||
public VideoCallingPreferenceController init(int subId) {
|
public VideoCallingPreferenceController init(int subId) {
|
||||||
mSubId = subId;
|
mSubId = subId;
|
||||||
mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
|
|
||||||
if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
if (mSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId);
|
|
||||||
mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
|
mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,18 +173,23 @@ public class VideoCallingPreferenceController extends TelephonyTogglePreferenceC
|
|||||||
|
|
||||||
private class PhoneCallStateListener extends PhoneStateListener {
|
private class PhoneCallStateListener extends PhoneStateListener {
|
||||||
|
|
||||||
public PhoneCallStateListener(Looper looper) {
|
PhoneCallStateListener() {
|
||||||
super(looper);
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TelephonyManager mTelephonyManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCallStateChanged(int state, String incomingNumber) {
|
public void onCallStateChanged(int state, String incomingNumber) {
|
||||||
mCallState = state;
|
mCallState = state;
|
||||||
updateState(mPreference);
|
updateState(mPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(int subId) {
|
public void register(Context context, int subId) {
|
||||||
VideoCallingPreferenceController.this.mSubId = subId;
|
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
||||||
|
if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
|
mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
|
||||||
|
}
|
||||||
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
|
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -20,7 +20,6 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.os.Looper;
|
|
||||||
import android.os.PersistableBundle;
|
import android.os.PersistableBundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.telecom.PhoneAccountHandle;
|
import android.telecom.PhoneAccountHandle;
|
||||||
@@ -49,7 +48,8 @@ import java.util.List;
|
|||||||
public class WifiCallingPreferenceController extends TelephonyBasePreferenceController implements
|
public class WifiCallingPreferenceController extends TelephonyBasePreferenceController implements
|
||||||
LifecycleObserver, OnStart, OnStop {
|
LifecycleObserver, OnStart, OnStop {
|
||||||
|
|
||||||
private TelephonyManager mTelephonyManager;
|
@VisibleForTesting
|
||||||
|
Integer mCallState;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
CarrierConfigManager mCarrierConfigManager;
|
CarrierConfigManager mCarrierConfigManager;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -63,8 +63,7 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
|
|||||||
public WifiCallingPreferenceController(Context context, String key) {
|
public WifiCallingPreferenceController(Context context, String key) {
|
||||||
super(context, key);
|
super(context, key);
|
||||||
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class);
|
||||||
mTelephonyManager = context.getSystemService(TelephonyManager.class);
|
mPhoneStateListener = new PhoneCallStateListener();
|
||||||
mPhoneStateListener = new PhoneCallStateListener(Looper.getMainLooper());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -77,7 +76,7 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
mPhoneStateListener.register(mSubId);
|
mPhoneStateListener.register(mContext, mSubId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -98,6 +97,9 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
|
|||||||
@Override
|
@Override
|
||||||
public void updateState(Preference preference) {
|
public void updateState(Preference preference) {
|
||||||
super.updateState(preference);
|
super.updateState(preference);
|
||||||
|
if (mCallState == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (mSimCallManager != null) {
|
if (mSimCallManager != null) {
|
||||||
final Intent intent = MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext,
|
final Intent intent = MobileNetworkUtils.buildPhoneAccountConfigureIntent(mContext,
|
||||||
mSimCallManager);
|
mSimCallManager);
|
||||||
@@ -126,7 +128,8 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
|
|||||||
.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL);
|
.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final boolean isRoaming = mTelephonyManager.isNetworkRoaming();
|
final boolean isRoaming = getTelephonyManager(mContext, mSubId)
|
||||||
|
.isNetworkRoaming();
|
||||||
final int wfcMode = (isRoaming && !useWfcHomeModeForRoaming)
|
final int wfcMode = (isRoaming && !useWfcHomeModeForRoaming)
|
||||||
? mImsMmTelManager.getVoWiFiRoamingModeSetting() :
|
? mImsMmTelManager.getVoWiFiRoamingModeSetting() :
|
||||||
mImsMmTelManager.getVoWiFiModeSetting();
|
mImsMmTelManager.getVoWiFiModeSetting();
|
||||||
@@ -147,14 +150,11 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
|
|||||||
}
|
}
|
||||||
preference.setSummary(resId);
|
preference.setSummary(resId);
|
||||||
}
|
}
|
||||||
preference.setEnabled(
|
preference.setEnabled(mCallState == TelephonyManager.CALL_STATE_IDLE);
|
||||||
mTelephonyManager.getCallState(mSubId) == TelephonyManager.CALL_STATE_IDLE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public WifiCallingPreferenceController init(int subId) {
|
public WifiCallingPreferenceController init(int subId) {
|
||||||
mSubId = subId;
|
mSubId = subId;
|
||||||
mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
|
|
||||||
.createForSubscriptionId(mSubId);
|
|
||||||
mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
|
mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
|
||||||
mImsMmTelManager = getImsMmTelManager(mSubId);
|
mImsMmTelManager = getImsMmTelManager(mSubId);
|
||||||
mSimCallManager = mContext.getSystemService(TelecomManager.class)
|
mSimCallManager = mContext.getSystemService(TelecomManager.class)
|
||||||
@@ -167,23 +167,39 @@ public class WifiCallingPreferenceController extends TelephonyBasePreferenceCont
|
|||||||
return ImsMmTelManager.createForSubscriptionId(subId);
|
return ImsMmTelManager.createForSubscriptionId(subId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
TelephonyManager getTelephonyManager(Context context, int subId) {
|
||||||
|
final TelephonyManager telephonyMgr = context.getSystemService(TelephonyManager.class);
|
||||||
|
if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
|
||||||
|
return telephonyMgr;
|
||||||
|
}
|
||||||
|
final TelephonyManager subscriptionTelephonyMgr =
|
||||||
|
telephonyMgr.createForSubscriptionId(subId);
|
||||||
|
return (subscriptionTelephonyMgr == null) ? telephonyMgr : subscriptionTelephonyMgr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private class PhoneCallStateListener extends PhoneStateListener {
|
private class PhoneCallStateListener extends PhoneStateListener {
|
||||||
|
|
||||||
public PhoneCallStateListener(Looper looper) {
|
PhoneCallStateListener() {
|
||||||
super(looper);
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private TelephonyManager mTelephonyManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCallStateChanged(int state, String incomingNumber) {
|
public void onCallStateChanged(int state, String incomingNumber) {
|
||||||
|
mCallState = state;
|
||||||
updateState(mPreference);
|
updateState(mPreference);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void register(int subId) {
|
public void register(Context context, int subId) {
|
||||||
WifiCallingPreferenceController.this.mSubId = subId;
|
mTelephonyManager = getTelephonyManager(context, subId);
|
||||||
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
|
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_CALL_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregister() {
|
public void unregister() {
|
||||||
|
mCallState = null;
|
||||||
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_NONE);
|
mTelephonyManager.listen(this, PhoneStateListener.LISTEN_NONE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -71,7 +71,7 @@ public class Enhanced4gBasePreferenceControllerTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
|
doReturn(mTelephonyManager).when(mContext).getSystemService(TelephonyManager.class);
|
||||||
doReturn(mSubscriptionManager).when(mContext).getSystemService(SubscriptionManager.class);
|
doReturn(mSubscriptionManager).when(mContext).getSystemService(SubscriptionManager.class);
|
||||||
doReturn(mCarrierConfigManager).when(mContext).getSystemService(CarrierConfigManager.class);
|
doReturn(mCarrierConfigManager).when(mContext).getSystemService(CarrierConfigManager.class);
|
||||||
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
|
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
|
||||||
|
@@ -72,22 +72,22 @@ public class WifiCallingPreferenceControllerTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
|
|
||||||
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
|
|
||||||
when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager);
|
|
||||||
|
|
||||||
mPreference = new Preference(mContext);
|
mPreference = new Preference(mContext);
|
||||||
mController = new WifiCallingPreferenceController(mContext, "wifi_calling") {
|
mController = spy(new WifiCallingPreferenceController(mContext, "wifi_calling") {
|
||||||
@Override
|
@Override
|
||||||
protected ImsMmTelManager getImsMmTelManager(int subId) {
|
protected ImsMmTelManager getImsMmTelManager(int subId) {
|
||||||
return mImsMmTelManager;
|
return mImsMmTelManager;
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
mController.mCarrierConfigManager = mCarrierConfigManager;
|
mController.mCarrierConfigManager = mCarrierConfigManager;
|
||||||
mController.init(SUB_ID);
|
mController.init(SUB_ID);
|
||||||
mController.mImsManager = mImsManager;
|
mController.mImsManager = mImsManager;
|
||||||
|
mController.mCallState = TelephonyManager.CALL_STATE_IDLE;
|
||||||
mPreference.setKey(mController.getPreferenceKey());
|
mPreference.setKey(mController.getPreferenceKey());
|
||||||
|
|
||||||
|
when(mController.getTelephonyManager(mContext, SUB_ID)).thenReturn(mTelephonyManager);
|
||||||
|
|
||||||
mCarrierConfig = new PersistableBundle();
|
mCarrierConfig = new PersistableBundle();
|
||||||
when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);
|
when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);
|
||||||
|
|
||||||
@@ -112,8 +112,7 @@ public class WifiCallingPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateState_notCallIdle_disable() {
|
public void updateState_notCallIdle_disable() {
|
||||||
when(mTelephonyManager.getCallState(SUB_ID)).thenReturn(
|
mController.mCallState = TelephonyManager.CALL_STATE_RINGING;
|
||||||
TelephonyManager.CALL_STATE_RINGING);
|
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user