Loading res/xml/network_provider_settings.xml +6 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,12 @@ android:key="connected_access_point" android:layout="@layout/preference_category_no_label"/> <PreferenceCategory android:key="provider_model_mobile_network" android:title="@string/summary_placeholder" android:layout="@layout/preference_category_no_label" settings:controller="com.android.settings.network.NetworkMobileProviderController"/> <PreferenceCategory android:key="access_points" android:layout="@layout/preference_category_no_label"/> Loading src/com/android/settings/network/MultiNetworkHeaderController.java +8 −3 Original line number Diff line number Diff line Loading @@ -27,9 +27,14 @@ import com.android.settings.core.BasePreferenceController; import com.android.settings.wifi.WifiConnectionPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; // This controls a header at the top of the Network & internet page that only appears when there // are two or more active mobile subscriptions. It shows an overview of available network // connections with an entry for wifi (if connected) and an entry for each subscription. /** * This controls a header at the top of the Network & internet page that only appears when there * are two or more active mobile subscriptions. It shows an overview of available network * connections with an entry for wifi (if connected) and an entry for each subscription. * * TODO(tomhsu) when provider model is completed, this class will be replaced * by {@link NetworkMobileProviderController} */ public class MultiNetworkHeaderController extends BasePreferenceController implements WifiConnectionPreferenceController.UpdateListener, SubscriptionsPreferenceController.UpdateListener { Loading src/com/android/settings/network/NetworkMobileProviderController.java 0 → 100644 +118 −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.util.Log; import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; /** * This controls mobile network display of the internet page that only appears when there * are active mobile subscriptions. It shows an overview of available mobile network * connections with an entry for each subscription. * * {@link NetworkMobileProviderController} is used to show subscription status on internet * page for provider model. This original class can refer to {@link MultiNetworkHeaderController}, * */ public class NetworkMobileProviderController extends BasePreferenceController implements SubscriptionsPreferenceController.UpdateListener { private static final String TAG = NetworkMobileProviderController.class.getSimpleName(); public static final String PREF_KEY_PROVIDER_MOBILE_NETWORK = "provider_model_mobile_network"; private static final int PREFERENCE_START_ORDER = 10; private PreferenceCategory mPreferenceCategory; private PreferenceScreen mPreferenceScreen; private SubscriptionsPreferenceController mSubscriptionsController; private int mOriginalExpandedChildrenCount; public NetworkMobileProviderController(Context context, String key) { super(context, key); } /** * Initialize NetworkMobileProviderController * @param lifecycle Lifecycle of Settings */ public void init(Lifecycle lifecycle) { mSubscriptionsController = createSubscriptionsController(lifecycle); } @VisibleForTesting SubscriptionsPreferenceController createSubscriptionsController(Lifecycle lifecycle) { if (mSubscriptionsController == null) { return new SubscriptionsPreferenceController( mContext, lifecycle, this, PREF_KEY_PROVIDER_MOBILE_NETWORK, PREFERENCE_START_ORDER); } return mSubscriptionsController; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); if (mSubscriptionsController == null) { Log.e(TAG, "[displayPreference] SubscriptionsController is null."); return; } mPreferenceScreen = screen; mOriginalExpandedChildrenCount = mPreferenceScreen.getInitialExpandedChildrenCount(); mPreferenceCategory = screen.findPreference(PREF_KEY_PROVIDER_MOBILE_NETWORK); mPreferenceCategory.setVisible(isAvailable()); // TODO(tomhsu) For the provider model, subscriptionsController shall do more // implementation of preference type change and summary control. mSubscriptionsController.displayPreference(screen); } @Override public int getAvailabilityStatus() { if (mSubscriptionsController == null) { return CONDITIONALLY_UNAVAILABLE; } return mSubscriptionsController.isAvailable() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override public void onChildrenUpdated() { final boolean available = isAvailable(); // TODO(b/129893781) we need a better way to express where the advanced collapsing starts // for preference groups that have items dynamically added/removed in the top expanded // section. if (mOriginalExpandedChildrenCount != Integer.MAX_VALUE) { if (available) { mPreferenceScreen.setInitialExpandedChildrenCount( mOriginalExpandedChildrenCount + mPreferenceCategory.getPreferenceCount()); } else { mPreferenceScreen.setInitialExpandedChildrenCount(mOriginalExpandedChildrenCount); } } mPreferenceCategory.setVisible(available); } } src/com/android/settings/network/NetworkProviderSettings.java +22 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,12 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment DataUsagePreference mDataUsagePreference; private LinkablePreference mStatusMessagePreference; /** * Mobile networks list for provider model */ private static final String PREF_KEY_PROVIDER_MOBILE_NETWORK = "provider_model_mobile_network"; private NetworkMobileProviderController mNetworkMobileProviderController; /** * Tracks whether the user initiated a connection via clicking in order to autoscroll to the * network once connected. Loading Loading @@ -255,6 +261,16 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mDataUsagePreference.setTemplate(NetworkTemplate.buildTemplateWifiWildcard(), 0 /*subId*/, null /*service*/); addNetworkMobileProviderController(); } private void addNetworkMobileProviderController() { if (mNetworkMobileProviderController == null) { mNetworkMobileProviderController = new NetworkMobileProviderController( getContext(), PREF_KEY_PROVIDER_MOBILE_NETWORK); } mNetworkMobileProviderController.init(getSettingsLifecycle()); mNetworkMobileProviderController.displayPreference(getPreferenceScreen()); } @Override Loading Loading @@ -340,6 +356,12 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } @Override public void onAttach(Context context) { super.onAttach(context); } @Override public void onDestroyView() { mWorkerThread.quit(); Loading src/com/android/settings/network/SubscriptionsPreferenceController.java +2 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import androidx.preference.PreferenceGroup; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.network.telephony.DataConnectivityListener; import com.android.settings.network.telephony.MobileNetworkActivity; import com.android.settings.network.telephony.MobileNetworkUtils; Loading Loading @@ -77,7 +78,6 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl // Map of subscription id to Preference private Map<Integer, Preference> mSubscriptionPreferences; private int mStartOrder; /** * This interface lets a parent of this class know that some change happened - this could * either be because overall availability changed, or because we've added/removed/updated some Loading Loading @@ -291,7 +291,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl // subscriptions with same group UUID. .filter(subInfo -> isSubscriptionCanBeDisplayed(mContext, subInfo.getSubscriptionId())) .count() >= 2; .count() >= (Utils.isProviderModelEnabled(mContext) ? 1 : 2); } @Override Loading Loading
res/xml/network_provider_settings.xml +6 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,12 @@ android:key="connected_access_point" android:layout="@layout/preference_category_no_label"/> <PreferenceCategory android:key="provider_model_mobile_network" android:title="@string/summary_placeholder" android:layout="@layout/preference_category_no_label" settings:controller="com.android.settings.network.NetworkMobileProviderController"/> <PreferenceCategory android:key="access_points" android:layout="@layout/preference_category_no_label"/> Loading
src/com/android/settings/network/MultiNetworkHeaderController.java +8 −3 Original line number Diff line number Diff line Loading @@ -27,9 +27,14 @@ import com.android.settings.core.BasePreferenceController; import com.android.settings.wifi.WifiConnectionPreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; // This controls a header at the top of the Network & internet page that only appears when there // are two or more active mobile subscriptions. It shows an overview of available network // connections with an entry for wifi (if connected) and an entry for each subscription. /** * This controls a header at the top of the Network & internet page that only appears when there * are two or more active mobile subscriptions. It shows an overview of available network * connections with an entry for wifi (if connected) and an entry for each subscription. * * TODO(tomhsu) when provider model is completed, this class will be replaced * by {@link NetworkMobileProviderController} */ public class MultiNetworkHeaderController extends BasePreferenceController implements WifiConnectionPreferenceController.UpdateListener, SubscriptionsPreferenceController.UpdateListener { Loading
src/com/android/settings/network/NetworkMobileProviderController.java 0 → 100644 +118 −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.util.Log; import androidx.annotation.VisibleForTesting; import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceScreen; import com.android.settings.core.BasePreferenceController; import com.android.settingslib.core.lifecycle.Lifecycle; /** * This controls mobile network display of the internet page that only appears when there * are active mobile subscriptions. It shows an overview of available mobile network * connections with an entry for each subscription. * * {@link NetworkMobileProviderController} is used to show subscription status on internet * page for provider model. This original class can refer to {@link MultiNetworkHeaderController}, * */ public class NetworkMobileProviderController extends BasePreferenceController implements SubscriptionsPreferenceController.UpdateListener { private static final String TAG = NetworkMobileProviderController.class.getSimpleName(); public static final String PREF_KEY_PROVIDER_MOBILE_NETWORK = "provider_model_mobile_network"; private static final int PREFERENCE_START_ORDER = 10; private PreferenceCategory mPreferenceCategory; private PreferenceScreen mPreferenceScreen; private SubscriptionsPreferenceController mSubscriptionsController; private int mOriginalExpandedChildrenCount; public NetworkMobileProviderController(Context context, String key) { super(context, key); } /** * Initialize NetworkMobileProviderController * @param lifecycle Lifecycle of Settings */ public void init(Lifecycle lifecycle) { mSubscriptionsController = createSubscriptionsController(lifecycle); } @VisibleForTesting SubscriptionsPreferenceController createSubscriptionsController(Lifecycle lifecycle) { if (mSubscriptionsController == null) { return new SubscriptionsPreferenceController( mContext, lifecycle, this, PREF_KEY_PROVIDER_MOBILE_NETWORK, PREFERENCE_START_ORDER); } return mSubscriptionsController; } @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); if (mSubscriptionsController == null) { Log.e(TAG, "[displayPreference] SubscriptionsController is null."); return; } mPreferenceScreen = screen; mOriginalExpandedChildrenCount = mPreferenceScreen.getInitialExpandedChildrenCount(); mPreferenceCategory = screen.findPreference(PREF_KEY_PROVIDER_MOBILE_NETWORK); mPreferenceCategory.setVisible(isAvailable()); // TODO(tomhsu) For the provider model, subscriptionsController shall do more // implementation of preference type change and summary control. mSubscriptionsController.displayPreference(screen); } @Override public int getAvailabilityStatus() { if (mSubscriptionsController == null) { return CONDITIONALLY_UNAVAILABLE; } return mSubscriptionsController.isAvailable() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override public void onChildrenUpdated() { final boolean available = isAvailable(); // TODO(b/129893781) we need a better way to express where the advanced collapsing starts // for preference groups that have items dynamically added/removed in the top expanded // section. if (mOriginalExpandedChildrenCount != Integer.MAX_VALUE) { if (available) { mPreferenceScreen.setInitialExpandedChildrenCount( mOriginalExpandedChildrenCount + mPreferenceCategory.getPreferenceCount()); } else { mPreferenceScreen.setInitialExpandedChildrenCount(mOriginalExpandedChildrenCount); } } mPreferenceCategory.setVisible(available); } }
src/com/android/settings/network/NetworkProviderSettings.java +22 −0 Original line number Diff line number Diff line Loading @@ -207,6 +207,12 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment DataUsagePreference mDataUsagePreference; private LinkablePreference mStatusMessagePreference; /** * Mobile networks list for provider model */ private static final String PREF_KEY_PROVIDER_MOBILE_NETWORK = "provider_model_mobile_network"; private NetworkMobileProviderController mNetworkMobileProviderController; /** * Tracks whether the user initiated a connection via clicking in order to autoscroll to the * network once connected. Loading Loading @@ -255,6 +261,16 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mDataUsagePreference.setTemplate(NetworkTemplate.buildTemplateWifiWildcard(), 0 /*subId*/, null /*service*/); addNetworkMobileProviderController(); } private void addNetworkMobileProviderController() { if (mNetworkMobileProviderController == null) { mNetworkMobileProviderController = new NetworkMobileProviderController( getContext(), PREF_KEY_PROVIDER_MOBILE_NETWORK); } mNetworkMobileProviderController.init(getSettingsLifecycle()); mNetworkMobileProviderController.displayPreference(getPreferenceScreen()); } @Override Loading Loading @@ -340,6 +356,12 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } @Override public void onAttach(Context context) { super.onAttach(context); } @Override public void onDestroyView() { mWorkerThread.quit(); Loading
src/com/android/settings/network/SubscriptionsPreferenceController.java +2 −2 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ import androidx.preference.PreferenceGroup; import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.network.telephony.DataConnectivityListener; import com.android.settings.network.telephony.MobileNetworkActivity; import com.android.settings.network.telephony.MobileNetworkUtils; Loading Loading @@ -77,7 +78,6 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl // Map of subscription id to Preference private Map<Integer, Preference> mSubscriptionPreferences; private int mStartOrder; /** * This interface lets a parent of this class know that some change happened - this could * either be because overall availability changed, or because we've added/removed/updated some Loading Loading @@ -291,7 +291,7 @@ public class SubscriptionsPreferenceController extends AbstractPreferenceControl // subscriptions with same group UUID. .filter(subInfo -> isSubscriptionCanBeDisplayed(mContext, subInfo.getSubscriptionId())) .count() >= 2; .count() >= (Utils.isProviderModelEnabled(mContext) ? 1 : 2); } @Override Loading