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

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

Merge "Update the mobile activity"

parents 6f5b4d31 400e13cc
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Intent;
import android.os.Bundle;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -106,7 +107,7 @@ public class MobileNetworkFragment extends RestrictedDashboardFragment {
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mSubId = getArguments().getInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID,
        mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);

        use(MobileDataPreferenceController.class).init(getFragmentManager(), mSubId);
+90 −46
Original line number Diff line number Diff line
@@ -17,10 +17,15 @@
package com.android.settings.network.telephony;

import android.app.ActionBar;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.util.Log;
import android.view.Menu;
import android.view.View;

@@ -30,68 +35,83 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.util.CollectionUtils;
import com.android.settings.R;
import com.android.settings.core.SettingsBaseActivity;

import com.google.android.material.bottomnavigation.BottomNavigationView;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;

public class MobileSettingsActivity extends SettingsBaseActivity {

    private static final String TAG = "MobileSettingsActivity";
    @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";
    @VisibleForTesting
    static final int SUB_ID_NULL = Integer.MIN_VALUE;

    private SubscriptionManager mSubscriptionManager;
    @VisibleForTesting
    Integer mCurSubscriptionId;
    SubscriptionManager mSubscriptionManager;
    @VisibleForTesting
    int mCurSubscriptionId;
    @VisibleForTesting
    List<SubscriptionInfo> mSubscriptionInfos;
    List<SubscriptionInfo> mSubscriptionInfos = new ArrayList<>();
    private PhoneChangeReceiver mPhoneChangeReceiver;

    private final SubscriptionManager.OnSubscriptionsChangedListener
            mOnSubscriptionsChangeListener
            = new SubscriptionManager.OnSubscriptionsChangedListener() {
        @Override
        public void onSubscriptionsChanged() {
            if (!Objects.equals(mSubscriptionInfos,
                    mSubscriptionManager.getActiveSubscriptionInfoList())) {
                updateSubscriptions(null);
            }
    };

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        //TODO(b/114749736): update fragment by new intent, or at least make sure this page shows
        // current tab for sim card
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //TODO(b/114749736): add phone change receiver here: ACTION_RADIO_TECHNOLOGY_CHANGED

        setContentView(R.layout.mobile_settings_container);
        setActionBar(findViewById(R.id.mobile_action_bar));
        mPhoneChangeReceiver = new PhoneChangeReceiver();
        mSubscriptionManager = getSystemService(SubscriptionManager.class);
        mSubscriptionInfos = mSubscriptionManager.getActiveSubscriptionInfoList();
        mCurSubscriptionId = savedInstanceState != null
                ? savedInstanceState.getInt(KEY_CUR_SUBSCRIPTION_ID)
                : null;

        mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
                ? savedInstanceState.getInt(Settings.EXTRA_SUB_ID, SUB_ID_NULL)
                : SUB_ID_NULL;

        final ActionBar actionBar = getActionBar();
        if (actionBar != null) {
            // android.R.id.home will be triggered in onOptionsItemSelected()
            actionBar.setDisplayHomeAsUpEnabled(true);
        }

        updateSubscriptions(savedInstanceState);
    }

    @Override
    protected void onStart() {
        super.onStart();
        final IntentFilter intentFilter = new IntentFilter(
                TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
        registerReceiver(mPhoneChangeReceiver, intentFilter);
        mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
    }

    @Override
    protected void onStop() {
        super.onStop();
        unregisterReceiver(mPhoneChangeReceiver);
        mSubscriptionManager.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener);
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
@@ -100,24 +120,42 @@ public class MobileSettingsActivity extends SettingsBaseActivity {

    @VisibleForTesting
    void saveInstanceState(@NonNull Bundle outState) {
        outState.putInt(KEY_CUR_SUBSCRIPTION_ID, mCurSubscriptionId);
        outState.putInt(Settings.EXTRA_SUB_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();

        updateBottomNavigationView();

        if (savedInstanceState == null) {
            switchFragment(new MobileNetworkFragment(), subId);
            switchFragment(new MobileNetworkFragment(), getSubscriptionId());
        }
    }

    /**
     * Get the current subId to display. First check whether intent has {@link
     * Settings#EXTRA_SUB_ID}. If not, just display first one in list
     * since it is already sorted by sim slot.
     */
    @VisibleForTesting
    int getSubscriptionId() {
        final Intent intent = getIntent();
        if (intent != null) {
            final int subId = intent.getIntExtra(Settings.EXTRA_SUB_ID, SUB_ID_NULL);
            if (subId != SUB_ID_NULL && mSubscriptionManager.isActiveSubscriptionId(subId)) {
                return subId;
            }
        }

        if (CollectionUtils.isEmpty(mSubscriptionInfos)) {
            return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
        }

        return mSubscriptionInfos.get(0).getSubscriptionId();
    }

    @VisibleForTesting
    void updateBottomNavigationView() {
        final BottomNavigationView navigation = findViewById(R.id.bottom_nav);
@@ -130,7 +168,8 @@ public class MobileSettingsActivity extends SettingsBaseActivity {
            for (int i = 0, size = mSubscriptionInfos.size(); i < size; i++) {
                final SubscriptionInfo subscriptionInfo = mSubscriptionInfos.get(i);
                menu.add(0, subscriptionInfo.getSubscriptionId(), i,
                        subscriptionInfo.getDisplayName());
                        subscriptionInfo.getDisplayName())
                        .setIcon(R.drawable.ic_settings_sim);
            }
            navigation.setOnNavigationItemSelectedListener(item -> {
                switchFragment(new MobileNetworkFragment(), item.getItemId());
@@ -141,30 +180,23 @@ public class MobileSettingsActivity extends SettingsBaseActivity {

    @VisibleForTesting
    void switchFragment(Fragment fragment, int subscriptionId) {
        if (mCurSubscriptionId != null && subscriptionId == mCurSubscriptionId) {
        switchFragment(fragment, subscriptionId, false /* forceUpdate */);
    }

    @VisibleForTesting
    void switchFragment(Fragment fragment, int subscriptionId, boolean forceUpdate) {
        if (mCurSubscriptionId != SUB_ID_NULL && subscriptionId == mCurSubscriptionId
                && !forceUpdate) {
            return;
        }
        final FragmentManager fragmentManager = getSupportFragmentManager();
        final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        final Bundle bundle = new Bundle();
        bundle.putInt(KEY_SUBSCRIPTION_ID, subscriptionId);
        bundle.putInt(Settings.EXTRA_SUB_ID, subscriptionId);

        if (mCurSubscriptionId != null) {
            final Fragment hideFragment = fragmentManager.findFragmentByTag(
                    buildFragmentTag(mCurSubscriptionId));
            if (hideFragment != null) {
                fragmentTransaction.hide(hideFragment);
            }
        }

        Fragment showFragment = fragmentManager.findFragmentByTag(buildFragmentTag(subscriptionId));
        if (showFragment == null) {
        fragment.setArguments(bundle);
            fragmentTransaction.add(R.id.main_content, fragment, buildFragmentTag(subscriptionId));
        } else {
            showFragment.setArguments(bundle);
            fragmentTransaction.show(showFragment);
        }
        fragmentTransaction.replace(R.id.main_content, fragment,
                buildFragmentTag(subscriptionId));
        fragmentTransaction.commit();
        mCurSubscriptionId = subscriptionId;
    }
@@ -172,4 +204,16 @@ public class MobileSettingsActivity extends SettingsBaseActivity {
    private String buildFragmentTag(int subscriptionId) {
        return MOBILE_SETTINGS_TAG + subscriptionId;
    }

    private class PhoneChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // When the radio changes (ex: CDMA->GSM), refresh the fragment.
            // This is very rare to happen.
            if (mCurSubscriptionId != SUB_ID_NULL) {
                switchFragment(new MobileNetworkFragment(), mCurSubscriptionId,
                        true /* forceUpdate */);
            }
        }
    }
}
 No newline at end of file
+2 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.telephony.AccessNetworkConstants;
import android.telephony.CarrierConfigManager;
import android.telephony.CellIdentity;
@@ -93,7 +94,7 @@ public class NetworkSelectSettings extends DashboardFragment {

        mUseNewApi = getContext().getResources().getBoolean(
                com.android.internal.R.bool.config_enableNewAutoSelectNetworkUI);
        mSubId = getArguments().getInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID);
        mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID);

        mConnectedPreferenceCategory =
                (PreferenceCategory) findPreference(PREF_KEY_CONNECTED_NETWORK_OPERATOR);
+2 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.settings.network.telephony.gsm;
import android.content.Context;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -96,7 +97,7 @@ public class AutoSelectPreferenceController extends TogglePreferenceController {
                    == TelephonyManager.NETWORK_SELECTION_MODE_AUTO;
        } else {
            final Bundle bundle = new Bundle();
            bundle.putInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID, mSubId);
            bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
            new SubSettingLauncher(mContext)
                    .setDestination(NetworkSelectSettings.class.getName())
                    .setSourceMetricsCategory(MetricsProto.MetricsEvent.MOBILE_NETWORK_SELECT)
+2 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.network.telephony.gsm;

import android.content.Context;
import android.os.Bundle;
import android.provider.Settings;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -84,7 +85,7 @@ public class OpenNetworkSelectPagePreferenceController extends BasePreferenceCon
    public boolean handlePreferenceTreeClick(Preference preference) {
        if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
            final Bundle bundle = new Bundle();
            bundle.putInt(MobileSettingsActivity.KEY_SUBSCRIPTION_ID, mSubId);
            bundle.putInt(Settings.EXTRA_SUB_ID, mSubId);
            new SubSettingLauncher(mContext)
                    .setDestination(NetworkSelectSettings.class.getName())
                    .setSourceMetricsCategory(MetricsProto.MetricsEvent.MOBILE_NETWORK_SELECT)
Loading