• 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
19         .MANAGE_MOBILE_PLAN_DIALOG_ID;
20 
21 import android.app.Activity;
22 import android.app.AlertDialog;
23 import android.app.Dialog;
24 import android.app.Fragment;
25 import android.content.Context;
26 import android.provider.SearchIndexableResource;
27 import android.support.annotation.VisibleForTesting;
28 import android.text.BidiFormatter;
29 import android.util.Log;
30 
31 import com.android.internal.logging.nano.MetricsProto;
32 import com.android.settings.R;
33 import com.android.settings.dashboard.DashboardFragment;
34 import com.android.settings.dashboard.SummaryLoader;
35 import com.android.settings.network.MobilePlanPreferenceController.MobilePlanPreferenceHost;
36 import com.android.settings.search.BaseSearchIndexProvider;
37 import com.android.settings.wifi.WifiMasterSwitchPreferenceController;
38 import com.android.settingslib.core.AbstractPreferenceController;
39 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
40 import com.android.settingslib.core.lifecycle.Lifecycle;
41 
42 import java.util.ArrayList;
43 import java.util.Arrays;
44 import java.util.List;
45 
46 public class NetworkDashboardFragment extends DashboardFragment implements
47         MobilePlanPreferenceHost {
48 
49     private static final String TAG = "NetworkDashboardFrag";
50 
51     @Override
getMetricsCategory()52     public int getMetricsCategory() {
53         return MetricsProto.MetricsEvent.SETTINGS_NETWORK_CATEGORY;
54     }
55 
56     @Override
getLogTag()57     protected String getLogTag() {
58         return TAG;
59     }
60 
61     @Override
getPreferenceScreenResId()62     protected int getPreferenceScreenResId() {
63         return R.xml.network_and_internet;
64     }
65 
66     @Override
onAttach(Context context)67     public void onAttach(Context context) {
68         super.onAttach(context);
69 
70         use(AirplaneModePreferenceController.class).setFragment(this);
71     }
72 
73     @Override
getHelpResource()74     public int getHelpResource() {
75         return R.string.help_url_network_dashboard;
76     }
77 
78     @Override
createPreferenceControllers(Context context)79     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
80         return buildPreferenceControllers(context, getLifecycle(), mMetricsFeatureProvider, this
81                 /* fragment */,
82                 this /* mobilePlanHost */);
83     }
84 
buildPreferenceControllers(Context context, Lifecycle lifecycle, MetricsFeatureProvider metricsFeatureProvider, Fragment fragment, MobilePlanPreferenceHost mobilePlanHost)85     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
86             Lifecycle lifecycle, MetricsFeatureProvider metricsFeatureProvider, Fragment fragment,
87             MobilePlanPreferenceHost mobilePlanHost) {
88         final MobilePlanPreferenceController mobilePlanPreferenceController =
89                 new MobilePlanPreferenceController(context, mobilePlanHost);
90         final WifiMasterSwitchPreferenceController wifiPreferenceController =
91                 new WifiMasterSwitchPreferenceController(context, metricsFeatureProvider);
92         final MobileNetworkPreferenceController mobileNetworkPreferenceController =
93                 new MobileNetworkPreferenceController(context);
94         final VpnPreferenceController vpnPreferenceController =
95                 new VpnPreferenceController(context);
96         final PrivateDnsPreferenceController privateDnsPreferenceController =
97                 new PrivateDnsPreferenceController(context);
98 
99         if (lifecycle != null) {
100             lifecycle.addObserver(mobilePlanPreferenceController);
101             lifecycle.addObserver(wifiPreferenceController);
102             lifecycle.addObserver(mobileNetworkPreferenceController);
103             lifecycle.addObserver(vpnPreferenceController);
104             lifecycle.addObserver(privateDnsPreferenceController);
105         }
106 
107         final List<AbstractPreferenceController> controllers = new ArrayList<>();
108         controllers.add(mobileNetworkPreferenceController);
109         controllers.add(new TetherPreferenceController(context, lifecycle));
110         controllers.add(vpnPreferenceController);
111         controllers.add(new ProxyPreferenceController(context));
112         controllers.add(mobilePlanPreferenceController);
113         controllers.add(wifiPreferenceController);
114         controllers.add(privateDnsPreferenceController);
115         return controllers;
116     }
117 
118     @Override
showMobilePlanMessageDialog()119     public void showMobilePlanMessageDialog() {
120         showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
121     }
122 
123     @Override
onCreateDialog(int dialogId)124     public Dialog onCreateDialog(int dialogId) {
125         Log.d(TAG, "onCreateDialog: dialogId=" + dialogId);
126         switch (dialogId) {
127             case MANAGE_MOBILE_PLAN_DIALOG_ID:
128                 final MobilePlanPreferenceController controller =
129                         use(MobilePlanPreferenceController.class);
130                 return new AlertDialog.Builder(getActivity())
131                         .setMessage(controller.getMobilePlanDialogMessage())
132                         .setCancelable(false)
133                         .setPositiveButton(com.android.internal.R.string.ok,
134                                 (dialog, id) -> controller.setMobilePlanDialogMessage(null))
135                         .create();
136         }
137         return super.onCreateDialog(dialogId);
138     }
139 
140     @Override
getDialogMetricsCategory(int dialogId)141     public int getDialogMetricsCategory(int dialogId) {
142         if (MANAGE_MOBILE_PLAN_DIALOG_ID == dialogId) {
143             return MetricsProto.MetricsEvent.DIALOG_MANAGE_MOBILE_PLAN;
144         }
145         return 0;
146     }
147 
148     @VisibleForTesting
149     static class SummaryProvider implements SummaryLoader.SummaryProvider {
150 
151         private final Context mContext;
152         private final SummaryLoader mSummaryLoader;
153         private final MobileNetworkPreferenceController mMobileNetworkPreferenceController;
154         private final TetherPreferenceController mTetherPreferenceController;
155 
SummaryProvider(Context context, SummaryLoader summaryLoader)156         public SummaryProvider(Context context, SummaryLoader summaryLoader) {
157             this(context, summaryLoader,
158                     new MobileNetworkPreferenceController(context),
159                     new TetherPreferenceController(context, null /* lifecycle */));
160         }
161 
162         @VisibleForTesting(otherwise = VisibleForTesting.NONE)
SummaryProvider(Context context, SummaryLoader summaryLoader, MobileNetworkPreferenceController mobileNetworkPreferenceController, TetherPreferenceController tetherPreferenceController)163         SummaryProvider(Context context, SummaryLoader summaryLoader,
164                 MobileNetworkPreferenceController mobileNetworkPreferenceController,
165                 TetherPreferenceController tetherPreferenceController) {
166             mContext = context;
167             mSummaryLoader = summaryLoader;
168             mMobileNetworkPreferenceController = mobileNetworkPreferenceController;
169             mTetherPreferenceController = tetherPreferenceController;
170         }
171 
172 
173         @Override
setListening(boolean listening)174         public void setListening(boolean listening) {
175             if (listening) {
176                 String summary = BidiFormatter.getInstance()
177                         .unicodeWrap(mContext.getString(R.string.wifi_settings_title));
178                 if (mMobileNetworkPreferenceController.isAvailable()) {
179                     final String mobileSettingSummary = mContext.getString(
180                             R.string.network_dashboard_summary_mobile);
181                     summary = mContext.getString(R.string.join_many_items_middle, summary,
182                             mobileSettingSummary);
183                 }
184                 final String dataUsageSettingSummary = mContext.getString(
185                         R.string.network_dashboard_summary_data_usage);
186                 summary = mContext.getString(R.string.join_many_items_middle, summary,
187                         dataUsageSettingSummary);
188                 if (mTetherPreferenceController.isAvailable()) {
189                     final String hotspotSettingSummary = mContext.getString(
190                             R.string.network_dashboard_summary_hotspot);
191                     summary = mContext.getString(R.string.join_many_items_middle, summary,
192                             hotspotSettingSummary);
193                 }
194                 mSummaryLoader.setSummary(this, summary);
195             }
196         }
197     }
198 
199     public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
200             = new SummaryLoader.SummaryProviderFactory() {
201         @Override
202         public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
203                 SummaryLoader summaryLoader) {
204             return new SummaryProvider(activity, summaryLoader);
205         }
206     };
207 
208 
209     public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
210             new BaseSearchIndexProvider() {
211                 @Override
212                 public List<SearchIndexableResource> getXmlResourcesToIndex(
213                         Context context, boolean enabled) {
214                     final SearchIndexableResource sir = new SearchIndexableResource(context);
215                     sir.xmlResId = R.xml.network_and_internet;
216                     return Arrays.asList(sir);
217                 }
218 
219                 @Override
220                 public List<AbstractPreferenceController> createPreferenceControllers(Context
221                         context) {
222                     return buildPreferenceControllers(context, null /* lifecycle */,
223                             null /* metricsFeatureProvider */, null /* fragment */,
224                             null /* mobilePlanHost */);
225                 }
226 
227                 @Override
228                 public List<String> getNonIndexableKeys(Context context) {
229                     List<String> keys = super.getNonIndexableKeys(context);
230                     // Remove master switch as a result
231                     keys.add(WifiMasterSwitchPreferenceController.KEY_TOGGLE_WIFI);
232                     return keys;
233                 }
234             };
235 }
236