Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 62dc9bb7 authored by Lei Yu's avatar Lei Yu Committed by Android (Google) Code Review
Browse files

Merge "Add network listener in MobileSettingsActivity"

parents 7c570c8b 1a478188
Loading
Loading
Loading
Loading
+50 −11
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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);
        }
    }

@@ -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) {
@@ -118,6 +156,7 @@ public class MobileSettingsActivity extends SettingsBaseActivity {
            fragmentTransaction.show(showFragment);
        }
        fragmentTransaction.commit();
        mCurSubscriptionId = subscriptionId;
    }

    private String buildFragmentTag(int subscriptionId) {
+17 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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);

@@ -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);

@@ -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);
    }
}