Loading src/com/android/settings/mobilenetwork/MobileSettingsActivity.java +50 −11 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.telephony.SubscriptionManager; import android.view.Menu; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; Loading @@ -41,13 +42,23 @@ public class MobileSettingsActivity extends SettingsBaseActivity { @VisibleForTesting static final String MOBILE_SETTINGS_TAG = "mobile_settings:"; public static final String KEY_SUBSCRIPTION_ID = "key_subscription_id"; public static final String KEY_CUR_SUBSCRIPTION_ID = "key_cur_subscription_id"; private SubscriptionManager mSubscriptionManager; @VisibleForTesting int mPrevSubscriptionId; Integer mCurSubscriptionId; @VisibleForTesting List<SubscriptionInfo> mSubscriptionInfos; private final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener = new SubscriptionManager.OnSubscriptionsChangedListener() { @Override public void onSubscriptionsChanged() { updateSubscriptions(null); } }; @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Loading @@ -58,18 +69,42 @@ public class MobileSettingsActivity extends SettingsBaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mobile_settings_container); mSubscriptionManager = getSystemService(SubscriptionManager.class); mSubscriptionInfos = mSubscriptionManager.getActiveSubscriptionInfoList(); mPrevSubscriptionId = CollectionUtils.isEmpty(mSubscriptionInfos) mCurSubscriptionId = savedInstanceState != null ? savedInstanceState.getInt(KEY_CUR_SUBSCRIPTION_ID) : null; mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener); updateSubscriptions(savedInstanceState); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); saveInstanceState(outState); } @VisibleForTesting void saveInstanceState(@NonNull Bundle outState) { outState.putInt(KEY_CUR_SUBSCRIPTION_ID, mCurSubscriptionId); } @VisibleForTesting void updateSubscriptions(Bundle savedInstanceState) { //TODO(b/114749736): Sort it by phoneId mSubscriptionInfos = mSubscriptionManager.getActiveSubscriptionInfoList(); final int subId = CollectionUtils.isEmpty(mSubscriptionInfos) ? SubscriptionManager.INVALID_SUBSCRIPTION_ID : mSubscriptionInfos.get(0).getSubscriptionId(); setContentView(R.layout.mobile_settings_container); updateBottomNavigationView(); if (savedInstanceState == null) { switchFragment(new MobileNetworkFragment(), mPrevSubscriptionId); switchFragment(new MobileNetworkFragment(), subId); } } Loading @@ -89,25 +124,28 @@ public class MobileSettingsActivity extends SettingsBaseActivity { } navigation.setOnNavigationItemSelectedListener(item -> { switchFragment(new MobileNetworkFragment(), item.getItemId()); mPrevSubscriptionId = item.getItemId(); return true; }); } } @VisibleForTesting void switchFragment(Fragment fragment, int subscriptionId) { if (mCurSubscriptionId != null && subscriptionId == mCurSubscriptionId) { return; } final FragmentManager fragmentManager = getSupportFragmentManager(); final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); final Bundle bundle = new Bundle(); bundle.putInt(KEY_SUBSCRIPTION_ID, subscriptionId); if (mCurSubscriptionId != null) { final Fragment hideFragment = fragmentManager.findFragmentByTag( buildFragmentTag(mPrevSubscriptionId)); buildFragmentTag(mCurSubscriptionId)); if (hideFragment != null) { fragmentTransaction.hide(hideFragment); } } Fragment showFragment = fragmentManager.findFragmentByTag(buildFragmentTag(subscriptionId)); if (showFragment == null) { Loading @@ -118,6 +156,7 @@ public class MobileSettingsActivity extends SettingsBaseActivity { fragmentTransaction.show(showFragment); } fragmentTransaction.commit(); mCurSubscriptionId = subscriptionId; } private String buildFragmentTag(int subscriptionId) { Loading tests/robotests/src/com/android/settings/mobilenetwork/MobileSettingsActivityTest.java +17 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import android.content.Context; import android.os.Bundle; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.view.Menu; Loading @@ -45,6 +46,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; Loading Loading @@ -120,7 +122,7 @@ public class MobileSettingsActivityTest { @Test public void switchFragment_hidePreviousFragment() { mMobileSettingsActivity.mPrevSubscriptionId = PREV_SUB_ID; mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID; mMobileSettingsActivity.switchFragment(mShowFragment, CURRENT_SUB_ID); Loading @@ -129,7 +131,7 @@ public class MobileSettingsActivityTest { @Test public void switchFragment_fragmentExist_showItWithArguments() { mMobileSettingsActivity.mPrevSubscriptionId = PREV_SUB_ID; mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID; mMobileSettingsActivity.switchFragment(mShowFragment, CURRENT_SUB_ID); Loading @@ -137,4 +139,17 @@ public class MobileSettingsActivityTest { MobileSettingsActivity.KEY_SUBSCRIPTION_ID)).isEqualTo(CURRENT_SUB_ID); verify(mFragmentTransaction).show(mShowFragment); } @Test public void onSaveInstanceState_saveCurrentSubId() { mMobileSettingsActivity = Robolectric.buildActivity( MobileSettingsActivity.class).get(); mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID; final Bundle bundle = new Bundle(); mMobileSettingsActivity.saveInstanceState(bundle); assertThat(bundle.getInt(MobileSettingsActivity.KEY_CUR_SUBSCRIPTION_ID)).isEqualTo( PREV_SUB_ID); } } Loading
src/com/android/settings/mobilenetwork/MobileSettingsActivity.java +50 −11 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.telephony.SubscriptionManager; import android.view.Menu; import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; Loading @@ -41,13 +42,23 @@ public class MobileSettingsActivity extends SettingsBaseActivity { @VisibleForTesting static final String MOBILE_SETTINGS_TAG = "mobile_settings:"; public static final String KEY_SUBSCRIPTION_ID = "key_subscription_id"; public static final String KEY_CUR_SUBSCRIPTION_ID = "key_cur_subscription_id"; private SubscriptionManager mSubscriptionManager; @VisibleForTesting int mPrevSubscriptionId; Integer mCurSubscriptionId; @VisibleForTesting List<SubscriptionInfo> mSubscriptionInfos; private final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener = new SubscriptionManager.OnSubscriptionsChangedListener() { @Override public void onSubscriptionsChanged() { updateSubscriptions(null); } }; @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Loading @@ -58,18 +69,42 @@ public class MobileSettingsActivity extends SettingsBaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mobile_settings_container); mSubscriptionManager = getSystemService(SubscriptionManager.class); mSubscriptionInfos = mSubscriptionManager.getActiveSubscriptionInfoList(); mPrevSubscriptionId = CollectionUtils.isEmpty(mSubscriptionInfos) mCurSubscriptionId = savedInstanceState != null ? savedInstanceState.getInt(KEY_CUR_SUBSCRIPTION_ID) : null; mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener); updateSubscriptions(savedInstanceState); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); saveInstanceState(outState); } @VisibleForTesting void saveInstanceState(@NonNull Bundle outState) { outState.putInt(KEY_CUR_SUBSCRIPTION_ID, mCurSubscriptionId); } @VisibleForTesting void updateSubscriptions(Bundle savedInstanceState) { //TODO(b/114749736): Sort it by phoneId mSubscriptionInfos = mSubscriptionManager.getActiveSubscriptionInfoList(); final int subId = CollectionUtils.isEmpty(mSubscriptionInfos) ? SubscriptionManager.INVALID_SUBSCRIPTION_ID : mSubscriptionInfos.get(0).getSubscriptionId(); setContentView(R.layout.mobile_settings_container); updateBottomNavigationView(); if (savedInstanceState == null) { switchFragment(new MobileNetworkFragment(), mPrevSubscriptionId); switchFragment(new MobileNetworkFragment(), subId); } } Loading @@ -89,25 +124,28 @@ public class MobileSettingsActivity extends SettingsBaseActivity { } navigation.setOnNavigationItemSelectedListener(item -> { switchFragment(new MobileNetworkFragment(), item.getItemId()); mPrevSubscriptionId = item.getItemId(); return true; }); } } @VisibleForTesting void switchFragment(Fragment fragment, int subscriptionId) { if (mCurSubscriptionId != null && subscriptionId == mCurSubscriptionId) { return; } final FragmentManager fragmentManager = getSupportFragmentManager(); final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); final Bundle bundle = new Bundle(); bundle.putInt(KEY_SUBSCRIPTION_ID, subscriptionId); if (mCurSubscriptionId != null) { final Fragment hideFragment = fragmentManager.findFragmentByTag( buildFragmentTag(mPrevSubscriptionId)); buildFragmentTag(mCurSubscriptionId)); if (hideFragment != null) { fragmentTransaction.hide(hideFragment); } } Fragment showFragment = fragmentManager.findFragmentByTag(buildFragmentTag(subscriptionId)); if (showFragment == null) { Loading @@ -118,6 +156,7 @@ public class MobileSettingsActivity extends SettingsBaseActivity { fragmentTransaction.show(showFragment); } fragmentTransaction.commit(); mCurSubscriptionId = subscriptionId; } private String buildFragmentTag(int subscriptionId) { Loading
tests/robotests/src/com/android/settings/mobilenetwork/MobileSettingsActivityTest.java +17 −2 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import android.content.Context; import android.os.Bundle; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.view.Menu; Loading @@ -45,6 +46,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; import java.util.ArrayList; Loading Loading @@ -120,7 +122,7 @@ public class MobileSettingsActivityTest { @Test public void switchFragment_hidePreviousFragment() { mMobileSettingsActivity.mPrevSubscriptionId = PREV_SUB_ID; mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID; mMobileSettingsActivity.switchFragment(mShowFragment, CURRENT_SUB_ID); Loading @@ -129,7 +131,7 @@ public class MobileSettingsActivityTest { @Test public void switchFragment_fragmentExist_showItWithArguments() { mMobileSettingsActivity.mPrevSubscriptionId = PREV_SUB_ID; mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID; mMobileSettingsActivity.switchFragment(mShowFragment, CURRENT_SUB_ID); Loading @@ -137,4 +139,17 @@ public class MobileSettingsActivityTest { MobileSettingsActivity.KEY_SUBSCRIPTION_ID)).isEqualTo(CURRENT_SUB_ID); verify(mFragmentTransaction).show(mShowFragment); } @Test public void onSaveInstanceState_saveCurrentSubId() { mMobileSettingsActivity = Robolectric.buildActivity( MobileSettingsActivity.class).get(); mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID; final Bundle bundle = new Bundle(); mMobileSettingsActivity.saveInstanceState(bundle); assertThat(bundle.getInt(MobileSettingsActivity.KEY_CUR_SUBSCRIPTION_ID)).isEqualTo( PREV_SUB_ID); } }