[Large Screen] Launch MobileNetworkActivity as a fragment for split mode

Receive intent in MobileNetworkActivity and launch a activity which extend SettingsActivity

Test: atest
Bug: 197609014
Bug: 209606859
Change-Id: Ic07b18b3ea11744f240b25a0986474df763a199b
This commit is contained in:
Zoey Chen
2021-11-19 21:22:21 +08:00
parent 4f9fca877a
commit 989dd669b2
7 changed files with 213 additions and 496 deletions

View File

@@ -16,13 +16,10 @@
package com.android.settings.network.telephony;
import static androidx.lifecycle.Lifecycle.State;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.robolectric.Shadows.shadowOf;
import android.content.Context;
@@ -30,21 +27,17 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.UserManager;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import androidx.test.core.app.ActivityScenario;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.internal.telephony.TelephonyIntents;
import com.android.settings.network.ProxySubscriptionManager;
import com.android.settings.SettingsActivity;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -58,22 +51,16 @@ import org.robolectric.shadows.ShadowSubscriptionManager.SubscriptionInfoBuilder
@RunWith(AndroidJUnit4.class)
public class MobileNetworkActivityTest {
private static final int CURRENT_SUB_ID = 3;
private static final int PREV_SUB_ID = 1;
private static final int SUB_ID = 1;
private static final String DISPLAY_NAME = "SUB_ID";
private Context mContext;
private ShadowContextImpl mShadowContextImpl;
private Intent mTestIntent;
@Mock
private UserManager mUserManager;
@Mock
private TelephonyManager mTelephonyManager;
private ShadowSubscriptionManager mSubscriptionManager;
private SubscriptionInfo mSubscriptionInfo1;
private SubscriptionInfo mSubscriptionInfo2;
private SubscriptionInfo mSubscriptionInfo;
private ActivityScenario<MobileNetworkActivity> mMobileNetworkActivity;
@Before
@@ -82,20 +69,16 @@ public class MobileNetworkActivityTest {
mContext = ApplicationProvider.getApplicationContext();
mShadowContextImpl = Shadow.extract(RuntimeEnvironment.application.getBaseContext());
mSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class));
mShadowContextImpl.setSystemService(Context.USER_SERVICE, mUserManager);
doReturn(true).when(mUserManager).isAdminUser();
mShadowContextImpl.setSystemService(Context.TELEPHONY_SERVICE, mTelephonyManager);
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(anyInt());
mTestIntent = new Intent(mContext, MockMobileNetworkActivity.class);
mSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class));
mSubscriptionInfo1 = SubscriptionInfoBuilder.newBuilder()
.setId(PREV_SUB_ID).buildSubscriptionInfo();
mSubscriptionInfo2 = SubscriptionInfoBuilder.newBuilder()
.setId(CURRENT_SUB_ID).buildSubscriptionInfo();
mTestIntent = new Intent(mContext, MobileNetworkActivity.class);
mSubscriptionInfo = SubscriptionInfoBuilder.newBuilder()
.setId(SUB_ID).setDisplayName(DISPLAY_NAME).buildSubscriptionInfo();
mTestIntent.putExtra(Settings.EXTRA_SUB_ID, SUB_ID);
mTestIntent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE,
mSubscriptionInfo.getDisplayName());
}
@After
@@ -105,116 +88,21 @@ public class MobileNetworkActivityTest {
}
}
private static class MockMobileNetworkActivity extends MobileNetworkActivity {
private MockMobileNetworkActivity() {
super();
}
private SubscriptionInfo mSubscriptionInFragment;
@Override
ProxySubscriptionManager getProxySubscriptionManager() {
if (mProxySubscriptionMgr == null) {
mProxySubscriptionMgr = mock(ProxySubscriptionManager.class);
}
return mProxySubscriptionMgr;
}
@Override
void registerActiveSubscriptionsListener() {
onChanged();
}
@Override
void switchFragment(SubscriptionInfo subInfo) {
mSubscriptionInFragment = subInfo;
}
}
private ActivityScenario<MobileNetworkActivity> createTargetActivity(Intent activityIntent) {
return ActivityScenario.launch(activityIntent);
}
@Test
@Ignore
public void updateBottomNavigationView_oneSubscription_shouldNotCrash() {
mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1);
public void onCreate_getExtraFromIntent() {
mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo);
mMobileNetworkActivity = createTargetActivity(mTestIntent);
mMobileNetworkActivity.moveToState(State.STARTED);
}
@Test
@Ignore
public void updateBottomNavigationView_twoSubscription_shouldNotCrash() {
mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
mMobileNetworkActivity = createTargetActivity(mTestIntent);
mMobileNetworkActivity.moveToState(State.STARTED);
}
@Test
@Ignore
public void switchFragment_switchBetweenTwoSubscriptions() {
mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
mTestIntent.putExtra(Settings.EXTRA_SUB_ID, PREV_SUB_ID);
mMobileNetworkActivity = createTargetActivity(mTestIntent);
mMobileNetworkActivity.moveToState(State.STARTED);
mMobileNetworkActivity.onActivity(activity -> {
final MockMobileNetworkActivity mockActivity = (MockMobileNetworkActivity) activity;
mockActivity.switchFragment(mSubscriptionInfo1);
assertThat(mockActivity.mSubscriptionInFragment).isEqualTo(mSubscriptionInfo1);
});
}
@Test
@Ignore
public void switchFragment_subscriptionsUpdate_notifyByIntent() {
mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
mTestIntent.putExtra(Settings.EXTRA_SUB_ID, PREV_SUB_ID);
mMobileNetworkActivity = createTargetActivity(mTestIntent);
mMobileNetworkActivity.moveToState(State.STARTED);
mMobileNetworkActivity.onActivity(activity -> {
final MockMobileNetworkActivity mockActivity = (MockMobileNetworkActivity) activity;
mockActivity.switchFragment(mSubscriptionInfo1);
assertThat(mockActivity.mSubscriptionInFragment).isEqualTo(mSubscriptionInfo1);
mContext.sendBroadcast(new Intent(
CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED), null);
mockActivity.switchFragment(mSubscriptionInfo2);
assertThat(mockActivity.mSubscriptionInFragment).isEqualTo(mSubscriptionInfo2);
mContext.sendBroadcast(new Intent(
TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED), null);
mockActivity.switchFragment(mSubscriptionInfo1);
assertThat(mockActivity.mSubscriptionInFragment).isEqualTo(mSubscriptionInfo1);
});
}
@Test
@Ignore
public void onSaveInstanceState_saveCurrentSubId() {
mSubscriptionManager.setActiveSubscriptionInfos(mSubscriptionInfo1, mSubscriptionInfo2);
mTestIntent.putExtra(Settings.EXTRA_SUB_ID, PREV_SUB_ID);
mMobileNetworkActivity = createTargetActivity(mTestIntent);
mMobileNetworkActivity.moveToState(State.STARTED);
mMobileNetworkActivity.onActivity(activity -> {
final Bundle bundle = new Bundle();
activity.saveInstanceState(bundle);
assertThat(bundle.getInt(Settings.EXTRA_SUB_ID)).isEqualTo(PREV_SUB_ID);
activity.onCreate(bundle);
assertThat(bundle.getInt(Settings.EXTRA_SUB_ID)).isEqualTo(SUB_ID);
assertThat(bundle.getString(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE)).isEqualTo(
DISPLAY_NAME);
});
}
}