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 android.app.AlertDialog;
19 import android.app.Dialog;
20 import android.content.Context;
21 import android.provider.SearchIndexableResource;
22 import android.util.Log;
23 import android.view.Menu;
24 import android.view.MenuInflater;
25 
26 import com.android.internal.logging.nano.MetricsProto;
27 import com.android.settings.R;
28 import com.android.settings.core.PreferenceController;
29 import com.android.settings.core.lifecycle.Lifecycle;
30 import com.android.settings.dashboard.DashboardFragment;
31 import com.android.settings.overlay.FeatureFactory;
32 import com.android.settings.search.BaseSearchIndexProvider;
33 import com.android.settings.wifi.WifiMasterSwitchPreferenceController;
34 
35 import java.util.ArrayList;
36 import java.util.Arrays;
37 import java.util.List;
38 
39 import static com.android.settings.network.MobilePlanPreferenceController
40         .MANAGE_MOBILE_PLAN_DIALOG_ID;
41 
42 public class NetworkDashboardFragment extends DashboardFragment implements
43         MobilePlanPreferenceController.MobilePlanPreferenceHost {
44 
45     private static final String TAG = "NetworkDashboardFrag";
46 
47     private NetworkResetActionMenuController mNetworkResetController;
48 
49     @Override
getMetricsCategory()50     public int getMetricsCategory() {
51         return MetricsProto.MetricsEvent.SETTINGS_NETWORK_CATEGORY;
52     }
53 
54     @Override
getLogTag()55     protected String getLogTag() {
56         return TAG;
57     }
58 
59     @Override
getPreferenceScreenResId()60     protected int getPreferenceScreenResId() {
61         return R.xml.network_and_internet;
62     }
63 
64     @Override
onAttach(Context context)65     public void onAttach(Context context) {
66         super.onAttach(context);
67         mNetworkResetController = new NetworkResetActionMenuController(context);
68     }
69 
70     @Override
onCreateOptionsMenu(Menu menu, MenuInflater inflater)71     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
72         super.onCreateOptionsMenu(menu, inflater);
73         mNetworkResetController.buildMenuItem(menu);
74     }
75 
76     @Override
getPreferenceControllers(Context context)77     protected List<PreferenceController> getPreferenceControllers(Context context) {
78         final AirplaneModePreferenceController airplaneModePreferenceController =
79                 new AirplaneModePreferenceController(context, this /* fragment */);
80         final MobilePlanPreferenceController mobilePlanPreferenceController =
81                 new MobilePlanPreferenceController(context, this);
82         final WifiMasterSwitchPreferenceController wifiPreferenceController =
83                 new WifiMasterSwitchPreferenceController(context, mMetricsFeatureProvider);
84         final MobileNetworkPreferenceController mobileNetworkPreferenceController =
85                 new MobileNetworkPreferenceController(context);
86         final VpnPreferenceController vpnPreferenceController =
87                 new VpnPreferenceController(context);
88         final Lifecycle lifecycle = getLifecycle();
89         lifecycle.addObserver(airplaneModePreferenceController);
90         lifecycle.addObserver(mobilePlanPreferenceController);
91         lifecycle.addObserver(wifiPreferenceController);
92         lifecycle.addObserver(mobileNetworkPreferenceController);
93         lifecycle.addObserver(vpnPreferenceController);
94 
95         final List<PreferenceController> controllers = new ArrayList<>();
96         controllers.add(airplaneModePreferenceController);
97         controllers.add(mobileNetworkPreferenceController);
98         controllers.add(new TetherPreferenceController(context, lifecycle));
99         controllers.add(vpnPreferenceController);
100         controllers.add(new ProxyPreferenceController(context));
101         controllers.add(mobilePlanPreferenceController);
102         controllers.add(wifiPreferenceController);
103         return controllers;
104     }
105 
106     @Override
showMobilePlanMessageDialog()107     public void showMobilePlanMessageDialog() {
108         showDialog(MANAGE_MOBILE_PLAN_DIALOG_ID);
109     }
110 
111     @Override
onCreateDialog(int dialogId)112     public Dialog onCreateDialog(int dialogId) {
113         Log.d(TAG, "onCreateDialog: dialogId=" + dialogId);
114         switch (dialogId) {
115             case MANAGE_MOBILE_PLAN_DIALOG_ID:
116                 final MobilePlanPreferenceController controller =
117                         getPreferenceController(MobilePlanPreferenceController.class);
118                 return new AlertDialog.Builder(getActivity())
119                         .setMessage(controller.getMobilePlanDialogMessage())
120                         .setCancelable(false)
121                         .setPositiveButton(com.android.internal.R.string.ok,
122                                 (dialog, id) -> controller.setMobilePlanDialogMessage(null))
123                         .create();
124         }
125         return super.onCreateDialog(dialogId);
126     }
127 
128     @Override
getDialogMetricsCategory(int dialogId)129     public int getDialogMetricsCategory(int dialogId) {
130         if (MANAGE_MOBILE_PLAN_DIALOG_ID == dialogId) {
131             return MetricsProto.MetricsEvent.DIALOG_MANAGE_MOBILE_PLAN;
132         }
133         return 0;
134     }
135 
136     public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
137             new BaseSearchIndexProvider() {
138                 @Override
139                 public List<SearchIndexableResource> getXmlResourcesToIndex(
140                         Context context, boolean enabled) {
141                     final SearchIndexableResource sir = new SearchIndexableResource(context);
142                     sir.xmlResId = R.xml.network_and_internet;
143                     return Arrays.asList(sir);
144                 }
145 
146                 @Override
147                 public List<String> getNonIndexableKeys(Context context) {
148                     List<String> keys = new ArrayList<>();
149                     // Remove master switch as a result
150                     keys.add(WifiMasterSwitchPreferenceController.KEY_TOGGLE_WIFI);
151                     return keys;
152                 }
153             };
154 }
155