From 1d18d453d8574f351b4ff82f171d32b787cb8ab5 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Wed, 6 Mar 2013 11:22:02 -0800 Subject: [PATCH 1/7] Guard against missing terminal app. Bug: 8328852 Change-Id: Icbc8942729af5a525f55b8c90513ff724c6f90e0 --- .../android/settings/DevelopmentSettings.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java index a1c6c903316..89dc8bac82d 100644 --- a/src/com/android/settings/DevelopmentSettings.java +++ b/src/com/android/settings/DevelopmentSettings.java @@ -34,6 +34,7 @@ import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.hardware.usb.IUsbManager; import android.os.AsyncTask; @@ -211,16 +212,21 @@ public class DevelopmentSettings extends PreferenceFragment addPreferencesFromResource(R.xml.development_prefs); + final PreferenceGroup debugDebuggingCategory = (PreferenceGroup) + findPreference(DEBUG_DEBUGGING_CATEGORY_KEY); + mEnableAdb = findAndInitCheckboxPref(ENABLE_ADB); mClearAdbKeys = findPreference(CLEAR_ADB_KEYS); if (!SystemProperties.getBoolean("ro.adb.secure", false)) { - PreferenceGroup debugDebuggingCategory = (PreferenceGroup) - findPreference(DEBUG_DEBUGGING_CATEGORY_KEY); if (debugDebuggingCategory != null) { debugDebuggingCategory.removePreference(mClearAdbKeys); } } mEnableTerminal = findAndInitCheckboxPref(ENABLE_TERMINAL); + if (!isPackageInstalled(getActivity(), TERMINAL_APP_PACKAGE)) { + debugDebuggingCategory.removePreference(mEnableTerminal); + mEnableTerminal = null; + } mBugreport = findPreference(BUGREPORT); mBugreportInPower = findAndInitCheckboxPref(BUGREPORT_IN_POWER_KEY); @@ -242,8 +248,6 @@ public class DevelopmentSettings extends PreferenceFragment mWaitForDebugger = findAndInitCheckboxPref(WAIT_FOR_DEBUGGER_KEY); mVerifyAppsOverUsb = findAndInitCheckboxPref(VERIFY_APPS_OVER_USB_KEY); if (!showVerifierSetting()) { - PreferenceGroup debugDebuggingCategory = (PreferenceGroup) - findPreference(DEBUG_DEBUGGING_CATEGORY_KEY); if (debugDebuggingCategory != null) { debugDebuggingCategory.removePreference(mVerifyAppsOverUsb); } else { @@ -408,9 +412,11 @@ public class DevelopmentSettings extends PreferenceFragment mHaveDebugSettings = false; updateCheckBox(mEnableAdb, Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) != 0); - updateCheckBox(mEnableTerminal, - context.getPackageManager().getApplicationEnabledSetting(TERMINAL_APP_PACKAGE) - == PackageManager.COMPONENT_ENABLED_STATE_ENABLED); + if (mEnableTerminal != null) { + updateCheckBox(mEnableTerminal, + context.getPackageManager().getApplicationEnabledSetting(TERMINAL_APP_PACKAGE) + == PackageManager.COMPONENT_ENABLED_STATE_ENABLED); + } updateCheckBox(mBugreportInPower, Settings.Secure.getInt(cr, Settings.Secure.BUGREPORT_IN_POWER_MENU, 0) != 0); updateCheckBox(mKeepScreenOn, Settings.Global.getInt(cr, @@ -1298,4 +1304,12 @@ public class DevelopmentSettings extends PreferenceFragment throw new RuntimeException("Problem talking with PackageManager", e); } } + + private static boolean isPackageInstalled(Context context, String packageName) { + try { + return context.getPackageManager().getPackageInfo(packageName, 0) != null; + } catch (NameNotFoundException e) { + return false; + } + } } From 4bba940721845d1fc886cedf748d8ce9c982b081 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Wed, 5 Jun 2013 17:51:38 -0700 Subject: [PATCH 2/7] Always allow formatting of physical storage. Also rebuild UI when volume state changes after a format finishes. Bug: 8985206 Change-Id: I6208e385711b883fb6fc77cc76cbe425d740b0a8 --- .../deviceinfo/StorageVolumePreferenceCategory.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java index 61188ec1c2c..1992facf60e 100644 --- a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java +++ b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java @@ -137,6 +137,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { public void init() { final Context context = getContext(); + removeAll(); + final UserInfo currentUser; try { currentUser = ActivityManagerNative.getDefault().getCurrentUser(); @@ -242,9 +244,6 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { mItemAvailable.setTitle(R.string.memory_available_read_only); - if (mFormatPreference != null) { - removePreference(mFormatPreference); - } } else { mItemAvailable.setTitle(R.string.memory_available); } @@ -269,9 +268,6 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { removePreference(mUsageBarPreference); removePreference(mItemTotal); removePreference(mItemAvailable); - if (mFormatPreference != null) { - removePreference(mFormatPreference); - } } if (mUsbConnected && (UsbManager.USB_FUNCTION_MTP.equals(mUsbFunction) || @@ -374,6 +370,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { } public void onStorageStateChanged() { + init(); measure(); } From 9a424cc8cc7072c530019e7c49563413e34c0295 Mon Sep 17 00:00:00 2001 From: Svetoslav Date: Mon, 24 Jun 2013 17:49:38 -0700 Subject: [PATCH 3/7] Fix broken strings in Settings Change-Id: I97b3b140b96894982d5d7753b6b3fc6dde2994a8 --- res/values/strings.xml | 13 +++++++++---- src/com/android/settings/AccessibilitySettings.java | 4 ++-- src/com/android/settings/PrintingSettings.java | 4 ++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 87b191167cd..e5aa0f8036e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -3189,10 +3189,10 @@ Settings - - On - - Off + + On + + Off @@ -3261,6 +3261,11 @@ Add printers + + On + + Off + diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java index 5d3fb425c26..f4188f1ae6d 100644 --- a/src/com/android/settings/AccessibilitySettings.java +++ b/src/com/android/settings/AccessibilitySettings.java @@ -405,9 +405,9 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements final boolean serviceEnabled = accessibilityEnabled && enabledServices.contains(componentName); if (serviceEnabled) { - preference.setSummary(getString(R.string.feature_state_on)); + preference.setSummary(getString(R.string.accessibility_feature_state_on)); } else { - preference.setSummary(getString(R.string.feature_state_off)); + preference.setSummary(getString(R.string.accessibility_feature_state_off)); } preference.setOrder(i); diff --git a/src/com/android/settings/PrintingSettings.java b/src/com/android/settings/PrintingSettings.java index cd22366db0f..723bdc92858 100644 --- a/src/com/android/settings/PrintingSettings.java +++ b/src/com/android/settings/PrintingSettings.java @@ -159,9 +159,9 @@ public class PrintingSettings extends SettingsPreferenceFragment implements Dial final boolean serviceEnabled = sEnabledServiceNameSet.contains(componentName); if (serviceEnabled) { - preference.setSummary(getString(R.string.feature_state_on)); + preference.setSummary(getString(R.string.print_feature_state_on)); } else { - preference.setSummary(getString(R.string.feature_state_off)); + preference.setSummary(getString(R.string.print_feature_state_off)); } preference.setOrder(i); From 0fa0239b7d7fa8f0bcfe621c3a19f91825ba440a Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Tue, 9 Jul 2013 11:28:40 -0700 Subject: [PATCH 4/7] Fix accidental creation of restriction entry for required apps When entering Settings->Restrictions, don't automatically query restriction entries for required apps. Bug: 9681399 Change-Id: Idcc773bf4793b3e7e2b328a15881b7ecf930c6c3 --- src/com/android/settings/users/AppRestrictionsFragment.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/users/AppRestrictionsFragment.java b/src/com/android/settings/users/AppRestrictionsFragment.java index 827458ff9b6..2f99d115f78 100644 --- a/src/com/android/settings/users/AppRestrictionsFragment.java +++ b/src/com/android/settings/users/AppRestrictionsFragment.java @@ -601,7 +601,8 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen if (!hasSettings && !isSettingsApp) continue; // Get and populate the defaults, since the user is not going to be // able to toggle this app ON (it's ON by default and immutable). - if (hasSettings) { + // Only do this for restricted profiles, not single-user restrictions + if (hasSettings && mRestrictedProfile) { requestRestrictionsForApp(packageName, p); } } else if (!mNewUser && isAppEnabledForUser(pi)) { /*appInfoListHasPackage(mUserApps, packageName)*/ From c838e3a59d04b77fa55789816ffc0b94ba5354b0 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Mon, 15 Jul 2013 15:35:29 -0700 Subject: [PATCH 5/7] Potential fix for Settings instability on x-large. Bug: 9752185 Change-Id: I1b2af6661a601e1d487a35a53f5d01e58529a34d --- src/com/android/settings/users/RestrictionSettings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/android/settings/users/RestrictionSettings.java b/src/com/android/settings/users/RestrictionSettings.java index adcfb1faa79..789cee42490 100644 --- a/src/com/android/settings/users/RestrictionSettings.java +++ b/src/com/android/settings/users/RestrictionSettings.java @@ -109,7 +109,7 @@ public class RestrictionSettings extends AppRestrictionsFragment { if (resultCode == Activity.RESULT_OK) { getListView().setEnabled(true); mChallengeSucceeded = true; - } else { + } else if (!isDetached()) { finishFragment(); } return; From 00d7a0ce0717f370d2adc4c6bed11d3ae5aa4974 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Mon, 5 Aug 2013 11:02:16 -0700 Subject: [PATCH 6/7] Add some missing fragments to the whitelist Bug: 10184429 Change-Id: I4b4da5d5f2f4ec64992012e9d15799d195870a8a --- src/com/android/settings/Settings.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 5d9349171d1..720af590373 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -325,6 +325,8 @@ public class Settings extends PreferenceActivity DreamSettings.class.getName(), UserSettings.class.getName(), NotificationAccessSettings.class.getName(), + ManageAccountsSettings.class.getName(), + PrintingSettings.class.getName() }; @Override From 90e68b95f597cd1ad4cccbbaeaeba8fe58744f87 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Tue, 6 Aug 2013 10:46:51 -0700 Subject: [PATCH 7/7] Remove Restrictions UI Bug: 10200097 Change-Id: Ifaa8aaa9aa5ad17a948bf18f184a131295112a30 --- res/xml/settings_headers.xml | 8 - src/com/android/settings/Settings.java | 6 - .../settings/users/RestrictionSettings.java | 152 ------------------ 3 files changed, 166 deletions(-) delete mode 100644 src/com/android/settings/users/RestrictionSettings.java diff --git a/res/xml/settings_headers.xml b/res/xml/settings_headers.xml index 9a1d3b830e2..867fc191832 100644 --- a/res/xml/settings_headers.xml +++ b/res/xml/settings_headers.xml @@ -97,13 +97,6 @@ android:title="@string/applications_settings" android:id="@+id/application_settings" /> - -
-
-
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java index 720af590373..4221059b6a7 100644 --- a/src/com/android/settings/Settings.java +++ b/src/com/android/settings/Settings.java @@ -136,7 +136,6 @@ public class Settings extends PreferenceActivity R.id.location_settings, R.id.security_settings, R.id.language_settings, - R.id.restriction_settings, R.id.user_settings, R.id.account_settings, R.id.account_add, @@ -560,11 +559,6 @@ public class Settings extends PreferenceActivity if (um.hasUserRestriction(UserManager.DISALLOW_MODIFY_ACCOUNTS)) { target.remove(i); } - } else if (id == R.id.restriction_settings) { - if (um.isLinkedUser() - || um.hasUserRestriction(UserManager.DISALLOW_APP_RESTRICTIONS)) { - target.remove(i); - } } if (i < target.size() && target.get(i) == header diff --git a/src/com/android/settings/users/RestrictionSettings.java b/src/com/android/settings/users/RestrictionSettings.java deleted file mode 100644 index 91b8bd3dbca..00000000000 --- a/src/com/android/settings/users/RestrictionSettings.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.settings.users; - -import android.app.Activity; -import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.os.Bundle; -import android.os.UserHandle; -import android.os.UserManager; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; - -import com.android.settings.R; - -import java.util.List; - -/** - * Used for restricting regular users, including single-user devices. - */ -public class RestrictionSettings extends AppRestrictionsFragment { - - private static final int REQUEST_PIN_CHALLENGE = 10; - - private static final int MENU_RESET = Menu.FIRST + 1; - private static final int MENU_CHANGE_PIN = Menu.FIRST + 2; - - private static final String KEY_CHALLENGE_SUCCEEDED = "chsc"; - private static final String KEY_CHALLENGE_REQUESTED = "chrq"; - - private boolean mChallengeSucceeded; - private boolean mChallengeRequested; - private boolean mDisableSelf; - - public void onCreate(Bundle icicle) { - super.onCreate(icicle); - if (UserManager.get(getActivity()).hasUserRestriction( - UserManager.DISALLOW_APP_RESTRICTIONS)) { - mDisableSelf = true; - return; - } - init(icicle); - if (icicle != null) { - mChallengeSucceeded = icicle.getBoolean(KEY_CHALLENGE_SUCCEEDED, false); - mChallengeRequested = icicle.getBoolean(KEY_CHALLENGE_REQUESTED, false); - } - setHasOptionsMenu(true); - } - - public void onResume() { - super.onResume(); - if (!mDisableSelf) { - ensurePin(); - } - } - - private void ensurePin() { - if (!mChallengeSucceeded) { - getListView().setEnabled(false); - final UserManager um = UserManager.get(getActivity()); - if (!mChallengeRequested) { - if (um.hasRestrictionsPin()) { - Intent requestPin = - new Intent(Intent.ACTION_RESTRICTIONS_PIN_CHALLENGE); - startActivityForResult(requestPin, REQUEST_PIN_CHALLENGE); - } else { - Intent requestPin = - new Intent("android.intent.action.RESTRICTIONS_PIN_CREATE"); - startActivityForResult(requestPin, REQUEST_PIN_CHALLENGE); - } - mChallengeRequested = true; - } - } - mChallengeSucceeded = false; - } - - private void resetAndRemovePin() { - final UserManager um = UserManager.get(getActivity()); - um.removeRestrictions(); - clearSelectedApps(); - finishFragment(); - } - - private void changePin() { - final UserManager um = UserManager.get(getActivity()); - Intent requestPin = new Intent("android.intent.action.RESTRICTIONS_PIN_CREATE"); - startActivityForResult(requestPin, REQUEST_PIN_CHALLENGE); - } - - public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == REQUEST_PIN_CHALLENGE) { - mChallengeRequested = false; - if (resultCode == Activity.RESULT_OK) { - getListView().setEnabled(true); - mChallengeSucceeded = true; - } else if (!isDetached()) { - finishFragment(); - } - return; - } - - super.onActivityResult(requestCode, resultCode, data); - } - - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - - outState.putBoolean(KEY_CHALLENGE_REQUESTED, mChallengeRequested); - if (getActivity().isChangingConfigurations()) { - outState.putBoolean(KEY_CHALLENGE_SUCCEEDED, mChallengeSucceeded); - } - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - if (!mDisableSelf) { - menu.add(0, MENU_RESET, 0, R.string.restriction_menu_reset); - menu.add(0, MENU_CHANGE_PIN, 0, R.string.restriction_menu_change_pin); - } - super.onCreateOptionsMenu(menu, inflater); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case MENU_RESET: - resetAndRemovePin(); - return true; - case MENU_CHANGE_PIN: - changePin(); - return true; - } - - return super.onOptionsItemSelected(item); - } -}