• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 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 
17 package com.android.settings.deviceinfo;
18 
19 import android.app.Activity;
20 import android.app.Fragment;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.provider.SearchIndexableResource;
24 import android.support.annotation.VisibleForTesting;
25 import android.telephony.TelephonyManager;
26 
27 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
28 import com.android.settings.R;
29 import com.android.settings.dashboard.DashboardFragment;
30 import com.android.settings.dashboard.SummaryLoader;
31 import com.android.settings.deviceinfo.firmwareversion.FirmwareVersionPreferenceController;
32 import com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController;
33 import com.android.settings.deviceinfo.simstatus.SimStatusPreferenceController;
34 import com.android.settings.search.BaseSearchIndexProvider;
35 import com.android.settings.search.Indexable;
36 import com.android.settingslib.core.AbstractPreferenceController;
37 import com.android.settingslib.core.lifecycle.Lifecycle;
38 
39 import java.util.ArrayList;
40 import java.util.Arrays;
41 import java.util.List;
42 
43 public class DeviceInfoSettings extends DashboardFragment implements Indexable {
44 
45     private static final String LOG_TAG = "DeviceInfoSettings";
46 
47     private static final String KEY_LEGAL_CONTAINER = "legal_container";
48 
49     @VisibleForTesting
50     static final int SIM_PREFERENCES_COUNT = 3;
51     @VisibleForTesting
52     static final int NON_SIM_PREFERENCES_COUNT = 2;
53 
54     @Override
getMetricsCategory()55     public int getMetricsCategory() {
56         return MetricsEvent.DEVICEINFO;
57     }
58 
59     @Override
getHelpResource()60     public int getHelpResource() {
61         return R.string.help_uri_about;
62     }
63 
64     @Override
getInitialExpandedChildCount()65     public int getInitialExpandedChildCount() {
66         final TelephonyManager telephonyManager = (TelephonyManager) getContext()
67                 .getSystemService(Context.TELEPHONY_SERVICE);
68         return Math.max(SIM_PREFERENCES_COUNT,
69                 SIM_PREFERENCES_COUNT * telephonyManager.getPhoneCount())
70                 + NON_SIM_PREFERENCES_COUNT;
71     }
72 
73     @Override
onActivityResult(int requestCode, int resultCode, Intent data)74     public void onActivityResult(int requestCode, int resultCode, Intent data) {
75         final BuildNumberPreferenceController buildNumberPreferenceController =
76                 use(BuildNumberPreferenceController.class);
77         if (buildNumberPreferenceController.onActivityResult(requestCode, resultCode, data)) {
78             return;
79         }
80         super.onActivityResult(requestCode, resultCode, data);
81     }
82 
83     @Override
getLogTag()84     protected String getLogTag() {
85         return LOG_TAG;
86     }
87 
88     @Override
getPreferenceScreenResId()89     protected int getPreferenceScreenResId() {
90         return R.xml.device_info_settings;
91     }
92 
93     @Override
createPreferenceControllers(Context context)94     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
95         return buildPreferenceControllers(context, getActivity(), this /* fragment */,
96                 getLifecycle());
97     }
98 
99     private static class SummaryProvider implements SummaryLoader.SummaryProvider {
100 
101         private final SummaryLoader mSummaryLoader;
102 
SummaryProvider(SummaryLoader summaryLoader)103         public SummaryProvider(SummaryLoader summaryLoader) {
104             mSummaryLoader = summaryLoader;
105         }
106 
107         @Override
setListening(boolean listening)108         public void setListening(boolean listening) {
109             if (listening) {
110                 mSummaryLoader.setSummary(this, DeviceModelPreferenceController.getDeviceModel());
111             }
112         }
113     }
114 
115     public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
116             = new SummaryLoader.SummaryProviderFactory() {
117         @Override
118         public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
119                 SummaryLoader summaryLoader) {
120             return new SummaryProvider(summaryLoader);
121         }
122     };
123 
buildPreferenceControllers(Context context, Activity activity, Fragment fragment, Lifecycle lifecycle)124     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
125             Activity activity, Fragment fragment, Lifecycle lifecycle) {
126         final List<AbstractPreferenceController> controllers = new ArrayList<>();
127         controllers.add(new PhoneNumberPreferenceController(context));
128         controllers.add(new SimStatusPreferenceController(context, fragment));
129         controllers.add(new DeviceModelPreferenceController(context, fragment));
130         controllers.add(new ImeiInfoPreferenceController(context, fragment));
131         controllers.add(new FirmwareVersionPreferenceController(context, fragment));
132         controllers.add(new IpAddressPreferenceController(context, lifecycle));
133         controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
134         controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));
135         controllers.add(new RegulatoryInfoPreferenceController(context));
136         controllers.add(new SafetyInfoPreferenceController(context));
137         controllers.add(new ManualPreferenceController(context));
138         controllers.add(new FeedbackPreferenceController(fragment, context));
139         controllers.add(new FccEquipmentIdPreferenceController(context));
140         controllers.add(
141                 new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
142         return controllers;
143     }
144 
145     /**
146      * For Search.
147      */
148     public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
149             new BaseSearchIndexProvider() {
150 
151                 @Override
152                 public List<SearchIndexableResource> getXmlResourcesToIndex(
153                         Context context, boolean enabled) {
154                     final SearchIndexableResource sir = new SearchIndexableResource(context);
155                     sir.xmlResId = R.xml.device_info_settings;
156                     return Arrays.asList(sir);
157                 }
158 
159                 @Override
160                 public List<AbstractPreferenceController> createPreferenceControllers(
161                         Context context) {
162                     return buildPreferenceControllers(context, null /*activity */,
163                             null /* fragment */, null /* lifecycle */);
164                 }
165 
166                 @Override
167                 public List<String> getNonIndexableKeys(Context context) {
168                     List<String> keys = super.getNonIndexableKeys(context);
169                     keys.add(KEY_LEGAL_CONTAINER);
170                     return keys;
171                 }
172             };
173 }
174