1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/* 2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License. 6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at 7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * 10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and 14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License. 15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings; 18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 19d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport android.app.Activity; 20caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackbornimport android.content.Context; 21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent; 22afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Build; 23afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle; 249d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajanimport android.os.PersistableBundle; 25b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalleyimport android.os.SELinux; 264749fcf762de0e34ac28f927501d42555062c521Dianne Hackbornimport android.os.SystemClock; 27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.SystemProperties; 28ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shankaimport android.os.UserHandle; 296c088cb221bb43d47be065387231ffa7192ff211Julia Reynoldsimport android.os.UserManager; 30b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport android.provider.SearchIndexableResource; 313daa259d8042b614539cc307c79ef07b526adb0dJeff Sharkeyimport android.provider.Settings; 3239b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference; 3339b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceGroup; 349d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajanimport android.telephony.CarrierConfigManager; 35b42573d0e6870b026110ece22f13dc15452d507cRajat Dewanimport android.text.TextUtils; 36afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.util.Log; 37caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackbornimport android.widget.Toast; 38ffe701dc0e52ee95bf6c54291ed1b574d389019cChristopher Tate 399d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent; 409d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monkimport com.android.settings.dashboard.SummaryLoader; 41b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport com.android.settings.search.BaseSearchIndexProvider; 422ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglioimport com.android.settings.search.Index; 43b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport com.android.settings.search.Indexable; 444559b5d62fc0ee6c1bb4feb9fe007e2599af378aTony Mantlerimport com.android.settingslib.DeviceInfoUtils; 45ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils; 46afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 47b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport java.util.ArrayList; 48b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglioimport java.util.Arrays; 49b42573d0e6870b026110ece22f13dc15452d507cRajat Dewanimport java.util.List; 50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 51ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shankaimport static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; 52ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka 53b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Megliopublic class DeviceInfoSettings extends SettingsPreferenceFragment implements Indexable { 54c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 55362bd107a11e4cb74c53e8058fe0dfaf9baac65fGilles Debunne private static final String LOG_TAG = "DeviceInfoSettings"; 562397a7391e2ba9434ee89345c1d3a47948d8f226Amith Yamasani 575adcb3d353b066a056b86ae66946a06a251ff1fbZachary Kuznia private static final String KEY_MANUAL = "manual"; 58a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu private static final String KEY_REGULATORY_INFO = "regulatory_info"; 59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings"; 60a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville private static final String PROPERTY_URL_SAFETYLEGAL = "ro.url.safetylegal"; 61b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley private static final String PROPERTY_SELINUX_STATUS = "ro.build.selinux"; 62c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani private static final String KEY_KERNEL_VERSION = "kernel_version"; 63c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani private static final String KEY_BUILD_NUMBER = "build_number"; 64c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani private static final String KEY_DEVICE_MODEL = "device_model"; 65b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley private static final String KEY_SELINUX_STATUS = "selinux_status"; 66c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani private static final String KEY_BASEBAND_VERSION = "baseband_version"; 67c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani private static final String KEY_FIRMWARE_VERSION = "firmware_version"; 68b9a8e277d94827a16e7366d60914de34533b23a6Dianne Hackborn private static final String KEY_SECURITY_PATCH = "security_patch"; 693feacdf3969800d6c53c6ca6f8ced2f8fc637f7fMeng Hu private static final String KEY_UPDATE_SETTING = "additional_system_update_settings"; 70b0b45c02ec73c87f78a8358a7e98747bd96ec103John Wang private static final String KEY_EQUIPMENT_ID = "fcc_equipment_id"; 71b0b45c02ec73c87f78a8358a7e98747bd96ec103John Wang private static final String PROPERTY_EQUIPMENT_ID = "ro.ril.fccid"; 72b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan private static final String KEY_DEVICE_FEEDBACK = "device_feedback"; 73b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio private static final String KEY_SAFETY_LEGAL = "safetylegal"; 742fc2ba11fedd529340eefc042d3a00ef6f70e7b6Freeman Ng 75d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn static final int TAPS_TO_BE_A_DEVELOPER = 7; 76d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn 774749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn long[] mHits = new long[3]; 78caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn int mDevHitCountdown; 79caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn Toast mDevHitToast; 802fc2ba11fedd529340eefc042d3a00ef6f70e7b6Freeman Ng 8144879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen private UserManager mUm; 8244879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen 83ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka private EnforcedAdmin mFunDisallowedAdmin; 849e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka private boolean mFunDisallowedBySystem; 85ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka private EnforcedAdmin mDebuggingFeaturesDisallowedAdmin; 869e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka private boolean mDebuggingFeaturesDisallowedBySystem; 87ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka 88afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project @Override 898a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren protected int getMetricsCategory() { 909d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.DEVICEINFO; 918a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 928a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 938a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 9423acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk protected int getHelpResource() { 9523acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk return R.string.help_uri_about; 9623acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk } 9723acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk 9823acc2bb8af7da000d72a8c1d8c28a2792200348Jason Monk @Override 99d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani public void onCreate(Bundle icicle) { 100afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project super.onCreate(icicle); 10144879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen mUm = UserManager.get(getActivity()); 1022fc2ba11fedd529340eefc042d3a00ef6f70e7b6Freeman Ng 103afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project addPreferencesFromResource(R.xml.device_info_settings); 1042fc2ba11fedd529340eefc042d3a00ef6f70e7b6Freeman Ng 105c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setStringSummary(KEY_FIRMWARE_VERSION, Build.VERSION.RELEASE); 106c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani findPreference(KEY_FIRMWARE_VERSION).setEnabled(true); 1074559b5d62fc0ee6c1bb4feb9fe007e2599af378aTony Mantler 1084559b5d62fc0ee6c1bb4feb9fe007e2599af378aTony Mantler final String patch = DeviceInfoUtils.getSecurityPatch(); 1093cf07c849bcc65958acc2361d2dbc4492fe70f24Tony Mantler if (!TextUtils.isEmpty(patch)) { 110b9a8e277d94827a16e7366d60914de34533b23a6Dianne Hackborn setStringSummary(KEY_SECURITY_PATCH, patch); 111b9a8e277d94827a16e7366d60914de34533b23a6Dianne Hackborn } else { 112b9a8e277d94827a16e7366d60914de34533b23a6Dianne Hackborn getPreferenceScreen().removePreference(findPreference(KEY_SECURITY_PATCH)); 113b9a8e277d94827a16e7366d60914de34533b23a6Dianne Hackborn } 1144559b5d62fc0ee6c1bb4feb9fe007e2599af378aTony Mantler 115c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setValueSummary(KEY_BASEBAND_VERSION, "gsm.version.baseband"); 1164559b5d62fc0ee6c1bb4feb9fe007e2599af378aTony Mantler setStringSummary(KEY_DEVICE_MODEL, Build.MODEL + DeviceInfoUtils.getMsvSuffix()); 117b0b45c02ec73c87f78a8358a7e98747bd96ec103John Wang setValueSummary(KEY_EQUIPMENT_ID, PROPERTY_EQUIPMENT_ID); 118b0b45c02ec73c87f78a8358a7e98747bd96ec103John Wang setStringSummary(KEY_DEVICE_MODEL, Build.MODEL); 119c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani setStringSummary(KEY_BUILD_NUMBER, Build.DISPLAY); 120caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn findPreference(KEY_BUILD_NUMBER).setEnabled(true); 1214559b5d62fc0ee6c1bb4feb9fe007e2599af378aTony Mantler findPreference(KEY_KERNEL_VERSION).setSummary(DeviceInfoUtils.getFormattedKernelVersion()); 122afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 123b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley if (!SELinux.isSELinuxEnabled()) { 124b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley String status = getResources().getString(R.string.selinux_status_disabled); 125b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley setStringSummary(KEY_SELINUX_STATUS, status); 126b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley } else if (!SELinux.isSELinuxEnforced()) { 127b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley String status = getResources().getString(R.string.selinux_status_permissive); 128b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley setStringSummary(KEY_SELINUX_STATUS, status); 129b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley } 130b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley 131b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley // Remove selinux information if property is not present 132b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley removePreferenceIfPropertyMissing(getPreferenceScreen(), KEY_SELINUX_STATUS, 133b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley PROPERTY_SELINUX_STATUS); 134b4e84f34e095ad423b854f66f75aeb36514d49f0Stephen Smalley 135a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville // Remove Safety information preference if PROPERTY_URL_SAFETYLEGAL is not set 136b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio removePreferenceIfPropertyMissing(getPreferenceScreen(), KEY_SAFETY_LEGAL, 137a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville PROPERTY_URL_SAFETYLEGAL); 138a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville 139b0b45c02ec73c87f78a8358a7e98747bd96ec103John Wang // Remove Equipment id preference if FCC ID is not set by RIL 140b0b45c02ec73c87f78a8358a7e98747bd96ec103John Wang removePreferenceIfPropertyMissing(getPreferenceScreen(), KEY_EQUIPMENT_ID, 141b0b45c02ec73c87f78a8358a7e98747bd96ec103John Wang PROPERTY_EQUIPMENT_ID); 142b0b45c02ec73c87f78a8358a7e98747bd96ec103John Wang 143c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani // Remove Baseband version if wifi-only device 1448af88fb8387259e51615709b2d1ea0260f7057fdRobert Greenwalt if (Utils.isWifiOnly(getActivity())) { 145c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani getPreferenceScreen().removePreference(findPreference(KEY_BASEBAND_VERSION)); 146c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani } 147c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani 148b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan // Dont show feedback option if there is no reporter. 1494559b5d62fc0ee6c1bb4feb9fe007e2599af378aTony Mantler if (TextUtils.isEmpty(DeviceInfoUtils.getFeedbackReporterPackage(getActivity()))) { 150b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan getPreferenceScreen().removePreference(findPreference(KEY_DEVICE_FEEDBACK)); 151b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan } 152b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan 153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project /* 154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Settings is a generic app and should not contain any device-specific 155afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * info. 156afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */ 157d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani final Activity act = getActivity(); 1582fc2ba11fedd529340eefc042d3a00ef6f70e7b6Freeman Ng 159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project // These are contained by the root preference screen 160f94023216accd128b06acdc50950e455a60a9c4eJason Monk PreferenceGroup parentPreference = getPreferenceScreen(); 16144879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen 16244879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen if (mUm.isAdminUser()) { 1639627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani Utils.updatePreferenceToSpecificActivityOrRemove(act, parentPreference, 1649627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani KEY_SYSTEM_UPDATE_SETTINGS, 1659627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani Utils.UPDATE_PREFERENCE_FLAG_SET_TITLE_TO_MATCHING_ACTIVITY); 1669627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } else { 1679627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani // Remove for secondary users 1689627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani removePreference(KEY_SYSTEM_UPDATE_SETTINGS); 1699627a8ea151c1f27e5e9f34592c7b34fea3101c3Amith Yamasani } 1703feacdf3969800d6c53c6ca6f8ced2f8fc637f7fMeng Hu 1713feacdf3969800d6c53c6ca6f8ced2f8fc637f7fMeng Hu // Read platform settings for additional system update setting 172a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu removePreferenceIfBoolFalse(KEY_UPDATE_SETTING, 173a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu R.bool.config_additional_system_update_setting_enable); 174a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu 1755adcb3d353b066a056b86ae66946a06a251ff1fbZachary Kuznia // Remove manual entry if none present. 1765adcb3d353b066a056b86ae66946a06a251ff1fbZachary Kuznia removePreferenceIfBoolFalse(KEY_MANUAL, R.bool.config_show_manual); 1775adcb3d353b066a056b86ae66946a06a251ff1fbZachary Kuznia 1781fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein // Remove regulatory labels if no activity present to handle intent. 1791fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein removePreferenceIfActivityMissing( 1801fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein KEY_REGULATORY_INFO, Settings.ACTION_SHOW_REGULATORY_INFO); 1811fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein 1821fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein removePreferenceIfActivityMissing( 1831fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein "safety_info", "android.settings.SHOW_SAFETY_AND_REGULATORY_INFO"); 184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 1852fc2ba11fedd529340eefc042d3a00ef6f70e7b6Freeman Ng 1863673546205ebf1b4c83c212c1032eea38c8adbe7Dianne Hackborn @Override 187caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn public void onResume() { 188caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn super.onResume(); 189caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitCountdown = getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE, 190caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn Context.MODE_PRIVATE).getBoolean(DevelopmentSettings.PREF_SHOW, 191d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn android.os.Build.TYPE.equals("eng")) ? -1 : TAPS_TO_BE_A_DEVELOPER; 192caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitToast = null; 193ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka mFunDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced( 194ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka getActivity(), UserManager.DISALLOW_FUN, UserHandle.myUserId()); 1959e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka mFunDisallowedBySystem = RestrictedLockUtils.hasBaseUserRestriction( 1969e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka getActivity(), UserManager.DISALLOW_FUN, UserHandle.myUserId()); 197ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka mDebuggingFeaturesDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced( 198ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka getActivity(), UserManager.DISALLOW_DEBUGGING_FEATURES, UserHandle.myUserId()); 1999e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka mDebuggingFeaturesDisallowedBySystem = RestrictedLockUtils.hasBaseUserRestriction( 2009e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka getActivity(), UserManager.DISALLOW_DEBUGGING_FEATURES, UserHandle.myUserId()); 201caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn } 202caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn 203caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn @Override 20439b467482d1bf256a111c757e9b7621c6f523271Jason Monk public boolean onPreferenceTreeClick(Preference preference) { 205c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani if (preference.getKey().equals(KEY_FIRMWARE_VERSION)) { 2064749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn System.arraycopy(mHits, 1, mHits, 0, mHits.length-1); 2074749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn mHits[mHits.length-1] = SystemClock.uptimeMillis(); 2084749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn if (mHits[0] >= (SystemClock.uptimeMillis()-500)) { 2099e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka if (mUm.hasUserRestriction(UserManager.DISALLOW_FUN)) { 2109e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka if (mFunDisallowedAdmin != null && !mFunDisallowedBySystem) { 2119e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), 2129e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka mFunDisallowedAdmin); 2139e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka } 2149a5550e9e6efe211b03d067eae2689f6ef5eb2d1Jeff Sharkey Log.d(LOG_TAG, "Sorry, no fun for you!"); 2159a5550e9e6efe211b03d067eae2689f6ef5eb2d1Jeff Sharkey return false; 2169a5550e9e6efe211b03d067eae2689f6ef5eb2d1Jeff Sharkey } 2179a5550e9e6efe211b03d067eae2689f6ef5eb2d1Jeff Sharkey 2184749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn Intent intent = new Intent(Intent.ACTION_MAIN); 2194749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn intent.setClassName("android", 2204749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn com.android.internal.app.PlatLogoActivity.class.getName()); 2214749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn try { 2224749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn startActivity(intent); 2234749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn } catch (Exception e) { 224362bd107a11e4cb74c53e8058fe0dfaf9baac65fGilles Debunne Log.e(LOG_TAG, "Unable to start activity " + intent.toString()); 2254749fcf762de0e34ac28f927501d42555062c521Dianne Hackborn } 2263673546205ebf1b4c83c212c1032eea38c8adbe7Dianne Hackborn } 227caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn } else if (preference.getKey().equals(KEY_BUILD_NUMBER)) { 228b02b26e3cb4a8a3aa7b3dd718fbc2cc7c6ac8016Amith Yamasani // Don't enable developer options for secondary users. 22944879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen if (!mUm.isAdminUser()) return true; 230b02b26e3cb4a8a3aa7b3dd718fbc2cc7c6ac8016Amith Yamasani 2314836ab6df4d4e82f6b2839b6b9faf3e794d66d5fRussell Brenner // Don't enable developer options until device has been provisioned 232679f7ad07e4e2a4b4c6645d05bca92790394c2fdUdam Saini if (!Utils.isDeviceProvisioned(getActivity())) { 2334836ab6df4d4e82f6b2839b6b9faf3e794d66d5fRussell Brenner return true; 2344836ab6df4d4e82f6b2839b6b9faf3e794d66d5fRussell Brenner } 2354836ab6df4d4e82f6b2839b6b9faf3e794d66d5fRussell Brenner 2369e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka if (mUm.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)) { 2379e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka if (mDebuggingFeaturesDisallowedAdmin != null && 2389e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka !mDebuggingFeaturesDisallowedBySystem) { 2399e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), 2409e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka mDebuggingFeaturesDisallowedAdmin); 2419e9e63b7b3b31fcae7242eb07f528487e0913402Sudheer Shanka } 242ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka return true; 243ef550767b0b469534a94c293ea517a19778b58b0Sudheer Shanka } 2446c088cb221bb43d47be065387231ffa7192ff211Julia Reynolds 245caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn if (mDevHitCountdown > 0) { 246caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitCountdown--; 247caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn if (mDevHitCountdown == 0) { 248caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE, 249caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn Context.MODE_PRIVATE).edit().putBoolean( 250caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn DevelopmentSettings.PREF_SHOW, true).apply(); 251caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn if (mDevHitToast != null) { 252caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitToast.cancel(); 253caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn } 254caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_on, 255caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn Toast.LENGTH_LONG); 256caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitToast.show(); 2572ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio // This is good time to index the Developer Options 2582ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio Index.getInstance( 2592ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio getActivity().getApplicationContext()).updateFromClassNameResource( 2602ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio DevelopmentSettings.class.getName(), true, true); 2612ec78636f75964a48be5e95fe9b7e71f2270f917Fabrice Di Meglio 262d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn } else if (mDevHitCountdown > 0 263d6a24d505a237c26a280cfbeb5a3bedaca8a3f7dDianne Hackborn && mDevHitCountdown < (TAPS_TO_BE_A_DEVELOPER-2)) { 264caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn if (mDevHitToast != null) { 265caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitToast.cancel(); 266caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn } 267673130bbf8017cf0e082dc65a24609290da4daa4Evan Charlton mDevHitToast = Toast.makeText(getActivity(), getResources().getQuantityString( 268673130bbf8017cf0e082dc65a24609290da4daa4Evan Charlton R.plurals.show_dev_countdown, mDevHitCountdown, mDevHitCountdown), 269caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn Toast.LENGTH_SHORT); 270caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitToast.show(); 271caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn } 272caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn } else if (mDevHitCountdown < 0) { 273caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn if (mDevHitToast != null) { 274caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitToast.cancel(); 275caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn } 276caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_already, 277caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn Toast.LENGTH_LONG); 278caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn mDevHitToast.show(); 279caefa9b5f03b595b81729407e4123fee18a4342cDianne Hackborn } 280013da34209877ed2d1169a860a72ee776f978fd0jackqdyulei } else if (preference.getKey().equals(KEY_SECURITY_PATCH)) { 281013da34209877ed2d1169a860a72ee776f978fd0jackqdyulei if (getPackageManager().queryIntentActivities(preference.getIntent(), 0).isEmpty()) { 282013da34209877ed2d1169a860a72ee776f978fd0jackqdyulei // Don't send out the intent to stop crash 283013da34209877ed2d1169a860a72ee776f978fd0jackqdyulei Log.w(LOG_TAG, "Stop click action on " + KEY_SECURITY_PATCH + ": " 284013da34209877ed2d1169a860a72ee776f978fd0jackqdyulei + "queryIntentActivities() returns empty" ); 285013da34209877ed2d1169a860a72ee776f978fd0jackqdyulei return true; 286013da34209877ed2d1169a860a72ee776f978fd0jackqdyulei } 287b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan } else if (preference.getKey().equals(KEY_DEVICE_FEEDBACK)) { 288b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan sendFeedback(); 2899d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan } else if(preference.getKey().equals(KEY_SYSTEM_UPDATE_SETTINGS)) { 2909d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan CarrierConfigManager configManager = 2919d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan (CarrierConfigManager) getSystemService(Context.CARRIER_CONFIG_SERVICE); 2929d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan PersistableBundle b = configManager.getConfig(); 293934a400ddce71f873c2de2564fb51981d57128e2Jason Monk if (b != null && b.getBoolean(CarrierConfigManager.KEY_CI_ACTION_ON_SYS_UPDATE_BOOL)) { 2949d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan ciActionOnSysUpdate(b); 2959d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan } 2963673546205ebf1b4c83c212c1032eea38c8adbe7Dianne Hackborn } 29739b467482d1bf256a111c757e9b7621c6f523271Jason Monk return super.onPreferenceTreeClick(preference); 2983673546205ebf1b4c83c212c1032eea38c8adbe7Dianne Hackborn } 299a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville 3009d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan /** 3019d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan * Trigger client initiated action (send intent) on system update 3029d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan */ 3039d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan private void ciActionOnSysUpdate(PersistableBundle b) { 3049d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan String intentStr = b.getString(CarrierConfigManager. 3059d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan KEY_CI_ACTION_ON_SYS_UPDATE_INTENT_STRING); 3069d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan if (!TextUtils.isEmpty(intentStr)) { 3079d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan String extra = b.getString(CarrierConfigManager. 3089d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_STRING); 3099d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan String extraVal = b.getString(CarrierConfigManager. 3109d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan KEY_CI_ACTION_ON_SYS_UPDATE_EXTRA_VAL_STRING); 3119d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan 3129d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan Intent intent = new Intent(intentStr); 3139d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan if (!TextUtils.isEmpty(extra)) { 3149d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan intent.putExtra(extra, extraVal); 3159d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan } 3169d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan Log.d(LOG_TAG, "ciActionOnSysUpdate: broadcasting intent " + intentStr + 3179d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan " with extra " + extra + ", " + extraVal); 3189d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan getActivity().getApplicationContext().sendBroadcast(intent); 3199d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan } 3209d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan } 3219d4b5486198a16053e5fdeba6b34268104faead2Amit Mahajan 322a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville private void removePreferenceIfPropertyMissing(PreferenceGroup preferenceGroup, 323a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville String preference, String property ) { 324a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu if (SystemProperties.get(property).equals("")) { 325a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville // Property is missing so remove preference from group 326a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville try { 327a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville preferenceGroup.removePreference(findPreference(preference)); 328a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville } catch (RuntimeException e) { 329362bd107a11e4cb74c53e8058fe0dfaf9baac65fGilles Debunne Log.d(LOG_TAG, "Property '" + property + "' missing and no '" 330a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville + preference + "' preference"); 331a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville } 332a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville } 333a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville } 334a40fb23734cc5d5ac6e69a060cbb488269ad8af3Wink Saville 3351fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein private void removePreferenceIfActivityMissing(String preferenceKey, String action) { 3361fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein final Intent intent = new Intent(action); 3371fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein if (getPackageManager().queryIntentActivities(intent, 0).isEmpty()) { 3381fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein Preference pref = findPreference(preferenceKey); 3391fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein if (pref != null) { 3401fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein getPreferenceScreen().removePreference(pref); 3411fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein } 3421fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein } 3431fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein } 3441fad9af3c7b16669fc5d31f442fbd85e380001e9Andrew Sapperstein 345a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu private void removePreferenceIfBoolFalse(String preference, int resId) { 346a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu if (!getResources().getBoolean(resId)) { 347185ba407bab02c1442d02b82800f0220779ecb10Brian Muramatsu Preference pref = findPreference(preference); 348185ba407bab02c1442d02b82800f0220779ecb10Brian Muramatsu if (pref != null) { 349185ba407bab02c1442d02b82800f0220779ecb10Brian Muramatsu getPreferenceScreen().removePreference(pref); 350185ba407bab02c1442d02b82800f0220779ecb10Brian Muramatsu } 351a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu } 352a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu } 353a6dbaea2dacaaef7c91f89aae8d5f1ed7580b893Brian Muramatsu 354afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void setStringSummary(String preference, String value) { 355afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project try { 356afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project findPreference(preference).setSummary(value); 357afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } catch (RuntimeException e) { 358afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project findPreference(preference).setSummary( 359afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getResources().getString(R.string.device_info_default)); 360afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 361afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 3622fc2ba11fedd529340eefc042d3a00ef6f70e7b6Freeman Ng 363afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project private void setValueSummary(String preference, String property) { 364afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project try { 365afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project findPreference(preference).setSummary( 3662fc2ba11fedd529340eefc042d3a00ef6f70e7b6Freeman Ng SystemProperties.get(property, 367afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project getResources().getString(R.string.device_info_default))); 368afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } catch (RuntimeException e) { 369362bd107a11e4cb74c53e8058fe0dfaf9baac65fGilles Debunne // No recovery 370afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 371afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project } 372afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project 373b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan private void sendFeedback() { 3744559b5d62fc0ee6c1bb4feb9fe007e2599af378aTony Mantler String reporterPackage = DeviceInfoUtils.getFeedbackReporterPackage(getActivity()); 375b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan if (TextUtils.isEmpty(reporterPackage)) { 376b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan return; 377b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan } 378b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan Intent intent = new Intent(Intent.ACTION_BUG_REPORT); 379b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan intent.setPackage(reporterPackage); 380b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan startActivityForResult(intent, 0); 381b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan } 382b42573d0e6870b026110ece22f13dc15452d507cRajat Dewan 3839d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk private static class SummaryProvider implements SummaryLoader.SummaryProvider { 3849d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk 3859d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk private final Context mContext; 3869d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk private final SummaryLoader mSummaryLoader; 3879d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk 3889d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk public SummaryProvider(Context context, SummaryLoader summaryLoader) { 3899d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk mContext = context; 3909d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk mSummaryLoader = summaryLoader; 3919d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk } 3929d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk 3939d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk @Override 3949d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk public void setListening(boolean listening) { 3959d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk if (listening) { 396fd4f729e1fb40372d218cf6385c2c7db478f80bdFan Zhang mSummaryLoader.setSummary(this, mContext.getString(R.string.about_summary, 397fd4f729e1fb40372d218cf6385c2c7db478f80bdFan Zhang Build.VERSION.RELEASE)); 3989d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk } 3999d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk } 4009d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk } 4019d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk 4029d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY 4039d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk = new SummaryLoader.SummaryProviderFactory() { 4049d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk @Override 4059d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, 4069d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk SummaryLoader summaryLoader) { 4079d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk return new SummaryProvider(activity, summaryLoader); 4089d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk } 4099d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk }; 4109d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk 4112397a7391e2ba9434ee89345c1d3a47948d8f226Amith Yamasani /** 412b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio * For Search. 413b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio */ 414b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 415b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio new BaseSearchIndexProvider() { 416b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio 417b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio @Override 418b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio public List<SearchIndexableResource> getXmlResourcesToIndex( 419b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio Context context, boolean enabled) { 420b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio final SearchIndexableResource sir = new SearchIndexableResource(context); 421b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio sir.xmlResId = R.xml.device_info_settings; 422b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio return Arrays.asList(sir); 423b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 424b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio 425b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio @Override 426b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio public List<String> getNonIndexableKeys(Context context) { 427b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio final List<String> keys = new ArrayList<String>(); 428b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio if (isPropertyMissing(PROPERTY_SELINUX_STATUS)) { 429b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio keys.add(KEY_SELINUX_STATUS); 430b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 431b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio if (isPropertyMissing(PROPERTY_URL_SAFETYLEGAL)) { 432b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio keys.add(KEY_SAFETY_LEGAL); 433b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 434b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio if (isPropertyMissing(PROPERTY_EQUIPMENT_ID)) { 435b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio keys.add(KEY_EQUIPMENT_ID); 436b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 437b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio // Remove Baseband version if wifi-only device 438b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio if (Utils.isWifiOnly(context)) { 439b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio keys.add((KEY_BASEBAND_VERSION)); 440b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 441b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio // Dont show feedback option if there is no reporter. 4424559b5d62fc0ee6c1bb4feb9fe007e2599af378aTony Mantler if (TextUtils.isEmpty(DeviceInfoUtils.getFeedbackReporterPackage(context))) { 443b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio keys.add(KEY_DEVICE_FEEDBACK); 444b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 44544879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen final UserManager um = UserManager.get(context); 44644879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen // TODO: system update needs to be fixed for non-owner user b/22760654 44744879a387a6be6b93cdcc8894227d68af7dbbb1aXiaohui Chen if (!um.isAdminUser()) { 448b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio keys.add(KEY_SYSTEM_UPDATE_SETTINGS); 449b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 450b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio if (!context.getResources().getBoolean( 451b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio R.bool.config_additional_system_update_setting_enable)) { 452b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio keys.add(KEY_UPDATE_SETTING); 453b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 454b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio return keys; 455b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 456b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio 457b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio private boolean isPropertyMissing(String property) { 458b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio return SystemProperties.get(property).equals(""); 459b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio } 460b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio }; 461b2385ea46286933add8ea3fb86db7870fe294334Fabrice Di Meglio 462afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project} 463