Revert "[Settings] Remove dependency of TelephonyIntents"

This reverts commit 6a6b416c3d.

Reason for revert: b/148838390

Change-Id: I9be2c370c6923e9d7293e4eff5306bc54d49ade2
This commit is contained in:
Morten Krogh-Jespersen
2020-02-04 13:10:59 +00:00
parent 6a6b416c3d
commit 36d1c17c71
3 changed files with 20 additions and 109 deletions

View File

@@ -17,18 +17,17 @@
package com.android.settings.homepage.contextualcards.conditional; package com.android.settings.homepage.contextualcards.conditional;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.telephony.PhoneStateListener;
import android.telephony.PreciseDataConnectionState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import com.android.internal.telephony.TelephonyIntents;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Settings; import com.android.settings.Settings;
import com.android.settings.homepage.contextualcards.ContextualCard; import com.android.settings.homepage.contextualcards.ContextualCard;
import com.android.settings.network.GlobalSettingsChangeListener;
import java.util.Objects; import java.util.Objects;
@@ -36,35 +35,22 @@ public class CellularDataConditionController implements ConditionalCardControlle
static final int ID = Objects.hash("CellularDataConditionController"); static final int ID = Objects.hash("CellularDataConditionController");
private static final IntentFilter DATA_CONNECTION_FILTER =
new IntentFilter(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
private final Context mAppContext; private final Context mAppContext;
private final ConditionManager mConditionManager; private final ConditionManager mConditionManager;
private final GlobalSettingsChangeListener mDefaultDataSubscriptionIdListener; private final Receiver mReceiver;
private final TelephonyManager mTelephonyManager;
private final ConnectivityManager mConnectivityManager; private final ConnectivityManager mConnectivityManager;
private int mSubId;
private TelephonyManager mTelephonyManager;
private boolean mIsListeningConnectionChange;
public CellularDataConditionController(Context appContext, ConditionManager conditionManager) { public CellularDataConditionController(Context appContext, ConditionManager conditionManager) {
mAppContext = appContext; mAppContext = appContext;
mConditionManager = conditionManager; mConditionManager = conditionManager;
mSubId = getDefaultDataSubscriptionId(appContext); mReceiver = new Receiver();
mTelephonyManager = getTelephonyManager(appContext, mSubId);
mDefaultDataSubscriptionIdListener = new GlobalSettingsChangeListener(appContext,
android.provider.Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION) {
public void onChanged(String field) {
final int subId = getDefaultDataSubscriptionId(mAppContext);
if (subId == mSubId) {
return;
}
mSubId = subId;
if (mIsListeningConnectionChange) {
restartPhoneStateListener(mAppContext, subId);
}
}
};
mConnectivityManager = appContext.getSystemService( mConnectivityManager = appContext.getSystemService(
ConnectivityManager.class); ConnectivityManager.class);
mTelephonyManager = appContext.getSystemService(TelephonyManager.class);
} }
@Override @Override
@@ -109,50 +95,21 @@ public class CellularDataConditionController implements ConditionalCardControlle
@Override @Override
public void startMonitoringStateChange() { public void startMonitoringStateChange() {
restartPhoneStateListener(mAppContext, mSubId); mAppContext.registerReceiver(mReceiver, DATA_CONNECTION_FILTER);
} }
@Override @Override
public void stopMonitoringStateChange() { public void stopMonitoringStateChange() {
stopPhoneStateListener(); mAppContext.unregisterReceiver(mReceiver);
} }
private int getDefaultDataSubscriptionId(Context context) { public class Receiver extends BroadcastReceiver {
final SubscriptionManager subscriptionManager =
context.getSystemService(SubscriptionManager.class);
return subscriptionManager.getDefaultDataSubscriptionId();
}
private TelephonyManager getTelephonyManager(Context context, int subId) {
final TelephonyManager telephonyManager =
context.getSystemService(TelephonyManager.class);
return telephonyManager.createForSubscriptionId(subId);
}
private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
@Override @Override
public void onPreciseDataConnectionStateChanged( public void onReceive(Context context, Intent intent) {
PreciseDataConnectionState dataConnectionState) { if (TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED.equals(
intent.getAction())) {
mConditionManager.onConditionChanged(); mConditionManager.onConditionChanged();
} }
};
private void stopPhoneStateListener() {
mIsListeningConnectionChange = false;
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
} }
// restart monitoring when subscription has been changed
private void restartPhoneStateListener(Context context, int subId) {
stopPhoneStateListener();
mIsListeningConnectionChange = true;
// switch mTelephonyManager only when subscription been updated to valid ones
if (SubscriptionManager.isValidSubscriptionId(subId)) {
mTelephonyManager = getTelephonyManager(context, subId);
}
mTelephonyManager.listen(mPhoneStateListener,
PhoneStateListener.LISTEN_PRECISE_DATA_CONNECTION_STATE);
} }
} }

View File

@@ -33,19 +33,14 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.robolectric.Shadows.shadowOf;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.ArrayMap; import android.util.ArrayMap;
import android.util.FeatureFlagUtils; import android.util.FeatureFlagUtils;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settings.core.FeatureFlags; import com.android.settings.core.FeatureFlags;
import com.android.settings.homepage.contextualcards.conditional.ConditionContextualCardController; import com.android.settings.homepage.contextualcards.conditional.ConditionContextualCardController;
import com.android.settings.homepage.contextualcards.conditional.ConditionFooterContextualCard; import com.android.settings.homepage.contextualcards.conditional.ConditionFooterContextualCard;
@@ -63,9 +58,8 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadows.ShadowSubscriptionManager;
import org.robolectric.shadows.ShadowTelephonyManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -73,9 +67,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@RunWith(AndroidJUnit4.class) @RunWith(RobolectricTestRunner.class)
public class ContextualCardManagerTest { public class ContextualCardManagerTest {
private static final int SUB_ID = 2;
private static final String TEST_SLICE_URI = "context://test/test"; private static final String TEST_SLICE_URI = "context://test/test";
private static final String TEST_SLICE_NAME = "test_name"; private static final String TEST_SLICE_NAME = "test_name";
@@ -86,8 +79,6 @@ public class ContextualCardManagerTest {
Lifecycle mLifecycle; Lifecycle mLifecycle;
private Context mContext; private Context mContext;
private ShadowSubscriptionManager mShadowSubscriptionManager;
private ShadowTelephonyManager mShadowTelephonyManager;
private ContextualCardManager mManager; private ContextualCardManager mManager;
@Before @Before
@@ -95,16 +86,6 @@ public class ContextualCardManagerTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
FeatureFlagUtils.setEnabled(mContext, FeatureFlags.CONDITIONAL_CARDS, true); FeatureFlagUtils.setEnabled(mContext, FeatureFlags.CONDITIONAL_CARDS, true);
mShadowSubscriptionManager = shadowOf(
mContext.getSystemService(SubscriptionManager.class));
mShadowSubscriptionManager.setDefaultDataSubscriptionId(SUB_ID);
final TelephonyManager telephonyManager =
mContext.getSystemService(TelephonyManager.class);
mShadowTelephonyManager = shadowOf(telephonyManager);
mShadowTelephonyManager.setTelephonyManagerForSubscriptionId(SUB_ID, telephonyManager);
mManager = new ContextualCardManager(mContext, mLifecycle, null /* bundle */); mManager = new ContextualCardManager(mContext, mLifecycle, null /* bundle */);
} }

View File

@@ -18,13 +18,7 @@ package com.android.settings.homepage.contextualcards;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.when;
import static org.robolectric.Shadows.shadowOf;
import android.content.Context; import android.content.Context;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
@@ -33,17 +27,11 @@ import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowSubscriptionManager;
import org.robolectric.shadows.ShadowTelephonyManager;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class ControllerRendererPoolTest { public class ControllerRendererPoolTest {
private static final int SUB_ID = 1;
private static final int UNSUPPORTED_CARD_TYPE = -99999; private static final int UNSUPPORTED_CARD_TYPE = -99999;
private static final int UNSUPPORTED_VIEW_TYPE = -99999; private static final int UNSUPPORTED_VIEW_TYPE = -99999;
@@ -53,27 +41,12 @@ public class ControllerRendererPoolTest {
private Lifecycle mLifecycle; private Lifecycle mLifecycle;
private LifecycleOwner mLifecycleOwner; private LifecycleOwner mLifecycleOwner;
@Mock
private TelephonyManager mTelephonyMgr;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mLifecycleOwner = () -> mLifecycle; mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner); mLifecycle = new Lifecycle(mLifecycleOwner);
// SubscriptionManager and TelephonyManager for CellularDataConditionController
ShadowSubscriptionManager shadowSubscriptionMgr = shadowOf(
mContext.getSystemService(SubscriptionManager.class));
shadowSubscriptionMgr.setDefaultDataSubscriptionId(SUB_ID);
ShadowTelephonyManager shadowTelephonyMgr = Shadow.extract(
mContext.getSystemService(TelephonyManager.class));
shadowTelephonyMgr.setTelephonyManagerForSubscriptionId(SUB_ID, mTelephonyMgr);
when(mTelephonyMgr.createForSubscriptionId(anyInt())).thenReturn(mTelephonyMgr);
mPool = new ControllerRendererPool(); mPool = new ControllerRendererPool();
} }