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

Commit 95b1d7cb authored by tom hsu's avatar tom hsu Committed by Tom Hsu
Browse files

Internet Picker implementation.

This version is to resolve the Reverted CL, ag/13127781
and make NetworkProviderSettingsTest passed

 Show mobile network on internet page

 With mobile network
  - https://screenshot.googleplex.com/7HzGhnbpitErynY

 Without mobile network
  - https://screenshot.googleplex.com/8sNVggTpKEhKeRh

Class diff: https://diff.googleplex.com/#key=WosyTF0ANVMf

Doc: https://docs.google.com/presentation/d/1azrZVS54pxM2lt9LkZHtFh_6W3fyDw_kTTPVQ_mJCi4/edit#slide=id.g9c7123c172_0_448

Bug: 173105859
Test: atest NetworkMobileProviderControllerTest passed
Test: make RunSettingsRoboTests ROBOTEST_FILTER=SubscriptionsPreferenceControllerTest passed
Test: make RunSettingsRoboTests ROBOTEST_FILTER=NetworkProviderSettingsTest passed

Change-Id: Ib0bdd148424881353f18307cb83798b4217060fc
parent caec4911
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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"/>
+8 −3
Original line number Diff line number Diff line
@@ -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 {
+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);
    }
}
+22 −0
Original line number Diff line number Diff line
@@ -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.
@@ -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
@@ -340,6 +356,12 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

    }

    @Override
    public void onDestroyView() {
        mWorkerThread.quit();
+2 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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