• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.settings.network;
17 
18 import static com.android.settings.network.MobilePlanPreferenceController.MANAGE_MOBILE_PLAN_DIALOG_ID;
19 
20 import android.app.Dialog;
21 import android.app.settings.SettingsEnums;
22 import android.content.Context;
23 import android.content.Intent;
24 import android.os.Bundle;
25 import android.provider.SearchIndexableResource;
26 import android.util.Log;
27 
28 import androidx.appcompat.app.AlertDialog;
29 import androidx.fragment.app.Fragment;
30 import androidx.lifecycle.LifecycleOwner;
31 
32 import com.android.settings.R;
33 import com.android.settings.SettingsDumpService;
34 import com.android.settings.Utils;
35 import com.android.settings.core.OnActivityResultListener;
36 import com.android.settings.dashboard.DashboardFragment;
37 import com.android.settings.network.MobilePlanPreferenceController.MobilePlanPreferenceHost;
38 import com.android.settings.search.BaseSearchIndexProvider;
39 import com.android.settings.wifi.WifiPrimarySwitchPreferenceController;
40 import com.android.settingslib.core.AbstractPreferenceController;
41 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
42 import com.android.settingslib.core.lifecycle.Lifecycle;
43 import com.android.settingslib.search.SearchIndexable;
44 
45 import java.util.ArrayList;
46 import java.util.Arrays;
47 import java.util.List;
48 
49 @SearchIndexable
50 public class NetworkDashboardFragment extends DashboardFragment implements
51         MobilePlanPreferenceHost, OnActivityResultListener {
52 
53     private static final String TAG = "NetworkDashboardFrag";
54 
55     @Override
getMetricsCategory()56     public int getMetricsCategory() {
57         return SettingsEnums.SETTINGS_NETWORK_CATEGORY;
58     }
59 
60     @Override
getLogTag()61     protected String getLogTag() {
62         return TAG;
63     }
64 
65     @Override
getPreferenceScreenResId()66     protected int getPreferenceScreenResId() {
67         return R.xml.network_provider_internet;
68     }
69 
70     @Override
onAttach(Context context)71     public void onAttach(Context context) {
72         super.onAttach(context);
73 
74         use(AirplaneModePreferenceController.class).setFragment(this);
75         getSettingsLifecycle().addObserver(use(AllInOneTetherPreferenceController.class));
76     }
77 
78     @Override
onCreatePreferences(Bundle savedInstanceState, String rootKey)79     public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
80         super.onCreatePreferences(savedInstanceState, rootKey);
81         use(AllInOneTetherPreferenceController.class).initEnabler(getSettingsLifecycle());
82     }
83 
84     @Override
getHelpResource()85     public int getHelpResource() {
86         return R.string.help_url_network_dashboard;
87     }
88 
89     @Override
createPreferenceControllers(Context context)90     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
91         return buildPreferenceControllers(context, getSettingsLifecycle(), mMetricsFeatureProvider,
92                 this /* fragment */, this /* mobilePlanHost */, this /* LifecycleOwner */);
93     }
94 
buildPreferenceControllers(Context context, Lifecycle lifecycle, MetricsFeatureProvider metricsFeatureProvider, Fragment fragment, MobilePlanPreferenceHost mobilePlanHost, LifecycleOwner lifecycleOwner)95     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
96             Lifecycle lifecycle, MetricsFeatureProvider metricsFeatureProvider, Fragment fragment,
97             MobilePlanPreferenceHost mobilePlanHost, LifecycleOwner lifecycleOwner) {
98         final MobilePlanPreferenceController mobilePlanPreferenceController =
99                 new MobilePlanPreferenceController(context, mobilePlanHost);
100         final InternetPreferenceController internetPreferenceController =
101                 new InternetPreferenceController(context, lifecycle, lifecycleOwner);
102 
103         final VpnPreferenceController vpnPreferenceController =
104                 new VpnPreferenceController(context);
105         final PrivateDnsPreferenceController privateDnsPreferenceController =
106                 new PrivateDnsPreferenceController(context);
107 
108         if (lifecycle != null) {
109             lifecycle.addObserver(mobilePlanPreferenceController);
110             lifecycle.addObserver(vpnPreferenceController);
111             lifecycle.addObserver(privateDnsPreferenceController);
112         }
113 
114         final List<AbstractPreferenceController> controllers = new ArrayList<>();
115 
116         controllers.add(new MobileNetworkSummaryController(context, lifecycle, lifecycleOwner));
117         controllers.add(new TetherPreferenceController(context, lifecycle));
118         controllers.add(vpnPreferenceController);
119         controllers.add(new ProxyPreferenceController(context));
120         controllers.add(mobilePlanPreferenceController);
121         if (internetPreferenceController != null) {
122             controllers.add(internetPreferenceController);
123         }
124         controllers.add(privateDnsPreferenceController);
125         controllers.add(new NetworkProviderCallsSmsController(context, lifecycle, lifecycleOwner));
126 
127         // Start SettingsDumpService after the MobileNetworkRepository is created.
128         Intent intent = new Intent(context, SettingsDumpService.class);
129         intent.putExtra(SettingsDumpService.EXTRA_KEY_SHOW_NETWORK_DUMP, true);
130         context.startService(intent);
131         return controllers;
132     }
133 
134     @Override
showMobilePlanMessageDialog()135     public void showMobilePlanMessageDialog() {
136         showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
137     }
138 
139     @Override
onCreateDialog(int dialogId)140     public Dialog onCreateDialog(int dialogId) {
141         Log.d(TAG, "onCreateDialog: dialogId=" + dialogId);
142         switch (dialogId) {
143             case MANAGE_MOBILE_PLAN_DIALOG_ID:
144                 final MobilePlanPreferenceController controller =
145                         use(MobilePlanPreferenceController.class);
146                 return new AlertDialog.Builder(getActivity())
147                         .setMessage(controller.getMobilePlanDialogMessage())
148                         .setCancelable(false)
149                         .setPositiveButton(com.android.internal.R.string.ok,
150                                 (dialog, id) -> controller.setMobilePlanDialogMessage(null))
151                         .create();
152         }
153         return super.onCreateDialog(dialogId);
154     }
155 
156     @Override
getDialogMetricsCategory(int dialogId)157     public int getDialogMetricsCategory(int dialogId) {
158         if (MANAGE_MOBILE_PLAN_DIALOG_ID == dialogId) {
159             return SettingsEnums.DIALOG_MANAGE_MOBILE_PLAN;
160         }
161         return 0;
162     }
163 
onActivityResult(int requestCode, int resultCode, Intent data)164     public void onActivityResult(int requestCode, int resultCode, Intent data) {
165         super.onActivityResult(requestCode, resultCode, data);
166 
167         switch (requestCode) {
168             case AirplaneModePreferenceController.REQUEST_CODE_EXIT_ECM:
169                 use(AirplaneModePreferenceController.class)
170                         .onActivityResult(requestCode, resultCode, data);
171                 break;
172         }
173     }
174 
175     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
176             new BaseSearchIndexProvider(R.xml.network_provider_internet) {
177                 @Override
178                 public List<AbstractPreferenceController> createPreferenceControllers(Context
179                         context) {
180                     return buildPreferenceControllers(context, null /* lifecycle */,
181                             null /* metricsFeatureProvider */, null /* fragment */,
182                             null /* mobilePlanHost */, null /* LifecycleOwner */);
183                 }
184             };
185 }
186