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