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

Commit 86551e4d authored by Betty Chang's avatar Betty Chang Committed by Android (Google) Code Review
Browse files

Merge "[Telephony Setting] Add Preferred Network observer for Auto Select...

Merge "[Telephony Setting] Add Preferred Network observer for Auto Select Network Mode" into rvc-dev
parents 78ad8741 787c420c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -196,7 +196,7 @@
        <PreferenceCategory
            android:key="network_operators_category_key"
            android:title="@string/network_operator_category"
            settings:controller="com.android.settings.widget.PreferenceCategoryController">
            settings:controller="com.android.settings.network.telephony.NetworkPreferenceCategoryController">

            <SwitchPreference
                android:key="auto_select_key"
+66 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.network;

import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.provider.Settings;

import androidx.annotation.VisibleForTesting;

/**
 * {@link ContentObserver} to listen to Preferred Network Mode change
 */
public class PreferredNetworkModeContentObserver extends ContentObserver {
    @VisibleForTesting
    OnPreferredNetworkModeChangedListener mListener;

    public PreferredNetworkModeContentObserver(Handler handler) {
        super(handler);
    }

    public void setPreferredNetworkModeChangedListener(OnPreferredNetworkModeChangedListener lsn) {
        mListener = lsn;
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        if (mListener != null) {
            mListener.onPreferredNetworkModeChanged();
        }
    }

    public void register(Context context, int subId) {
        final Uri uri = Settings.Global.getUriFor(
                Settings.Global.PREFERRED_NETWORK_MODE + subId);
        context.getContentResolver().registerContentObserver(uri, false, this);
    }

    public void unregister(Context context) {
        context.getContentResolver().unregisterContentObserver(this);
    }

    /**
     * Listener for update of Preferred Network Mode change
     */
    public interface OnPreferredNetworkModeChangedListener {
        void onPreferredNetworkModeChanged();
    }
}
+19 −15
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static androidx.lifecycle.Lifecycle.Event.ON_START;
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;

import android.content.Context;
import android.database.ContentObserver;
import android.os.Handler;
import android.os.Looper;
import android.os.PersistableBundle;
@@ -38,6 +37,7 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.network.PreferredNetworkModeContentObserver;
import com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants;

import java.util.ArrayList;
@@ -52,23 +52,29 @@ public class EnabledNetworkModePreferenceController extends
        ListPreference.OnPreferenceChangeListener, LifecycleObserver {

    private static final String LOG_TAG = "EnabledNetworkMode";
    private ContentObserver mPreferredNetworkModeObserver;
    private PreferredNetworkModeContentObserver mPreferredNetworkModeObserver;
    private Preference mPreference;
    private PreferenceScreen mPreferenceScreen;
    private TelephonyManager mTelephonyManager;
    private CarrierConfigManager mCarrierConfigManager;
    private PreferenceEntriesBuilder mBuilder;

    public EnabledNetworkModePreferenceController(Context context, String key) {
        super(context, key);
        mPreferredNetworkModeObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
            @Override
            public void onChange(boolean selfChange) {
        mPreferredNetworkModeObserver = new PreferredNetworkModeContentObserver(
                new Handler(Looper.getMainLooper()));
        mPreferredNetworkModeObserver.setPreferredNetworkModeChangedListener(
                () -> updatePreference());
    }

    private void updatePreference() {
        if (mPreferenceScreen != null) {
            displayPreference(mPreferenceScreen);
        }
        if (mPreference != null) {
            updateState(mPreference);
        }
    }
        };
    }

    @Override
    public int getAvailabilityStatus(int subId) {
@@ -94,20 +100,18 @@ public class EnabledNetworkModePreferenceController extends

    @OnLifecycleEvent(ON_START)
    public void onStart() {
        mContext.getContentResolver().registerContentObserver(
                Settings.Global.getUriFor(Settings.Global.PREFERRED_NETWORK_MODE + mSubId),
                true,
                mPreferredNetworkModeObserver);
        mPreferredNetworkModeObserver.register(mContext, mSubId);
    }

    @OnLifecycleEvent(ON_STOP)
    public void onStop() {
        mContext.getContentResolver().unregisterContentObserver(mPreferredNetworkModeObserver);
        mPreferredNetworkModeObserver.unregister(mContext);
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreferenceScreen = screen;
        mPreference = screen.findPreference(getPreferenceKey());
    }

+4 −6
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ import com.android.settings.network.telephony.cdma.CdmaSystemSelectPreferenceCon
import com.android.settings.network.telephony.gsm.AutoSelectPreferenceController;
import com.android.settings.network.telephony.gsm.OpenNetworkSelectPagePreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.PreferenceCategoryController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.search.SearchIndexable;

@@ -155,14 +154,13 @@ public class MobileNetworkSettings extends RestrictedDashboardFragment {
                use(WifiCallingPreferenceController.class).init(mSubId);

        final OpenNetworkSelectPagePreferenceController openNetworkSelectPagePreferenceController =
                use(OpenNetworkSelectPagePreferenceController.class).init(mSubId);
                use(OpenNetworkSelectPagePreferenceController.class).init(getLifecycle(), mSubId);
        final AutoSelectPreferenceController autoSelectPreferenceController =
                use(AutoSelectPreferenceController.class)
                        .init(mSubId)
                        .init(getLifecycle(), mSubId)
                        .addListener(openNetworkSelectPagePreferenceController);
        use(PreferenceCategoryController.class).setChildren(
                Arrays.asList(autoSelectPreferenceController));

        use(NetworkPreferenceCategoryController.class).init(getLifecycle(), mSubId)
                .setChildren(Arrays.asList(autoSelectPreferenceController));
        mCdmaSystemSelectPreferenceController = use(CdmaSystemSelectPreferenceController.class);
        mCdmaSystemSelectPreferenceController.init(getPreferenceManager(), mSubId);
        mCdmaSubscriptionPreferenceController = use(CdmaSubscriptionPreferenceController.class);
+80 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.network.telephony;

import static androidx.lifecycle.Lifecycle.Event.ON_START;
import static androidx.lifecycle.Lifecycle.Event.ON_STOP;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.telephony.SubscriptionManager;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.PreferenceScreen;

import com.android.settings.network.PreferredNetworkModeContentObserver;
import com.android.settings.widget.PreferenceCategoryController;

/**
 * Preference controller for "Network" category
 */
public class NetworkPreferenceCategoryController extends PreferenceCategoryController
        implements LifecycleObserver {

    private PreferenceScreen mPreferenceScreen;
    private PreferredNetworkModeContentObserver mPreferredNetworkModeObserver;
    protected int mSubId;

    public NetworkPreferenceCategoryController(Context context, String key) {
        super(context, key);
        mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
        mPreferredNetworkModeObserver = new PreferredNetworkModeContentObserver(
                new Handler(Looper.getMainLooper()));
        mPreferredNetworkModeObserver.setPreferredNetworkModeChangedListener(
                () -> updatePreference());
    }

    private void updatePreference() {
        displayPreference(mPreferenceScreen);
    }

    @OnLifecycleEvent(ON_START)
    public void onStart() {
        mPreferredNetworkModeObserver.register(mContext, mSubId);
    }

    @OnLifecycleEvent(ON_STOP)
    public void onStop() {
        mPreferredNetworkModeObserver.unregister(mContext);
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreferenceScreen = screen;
    }

    public NetworkPreferenceCategoryController init(Lifecycle lifecycle, int subId) {
        mSubId = subId;

        lifecycle.addObserver(this);
        return this;
    }
}
Loading