summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2012-05-15 11:39:17 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2012-05-15 11:39:17 -0700
commitcda0663eb9c3a324c543c504647c7661f2ac7b35 (patch)
treeb70b25f3804e6cba6c0a5d9a7e976fd9b91ecd36 /src
parent53fa78fcb237e52733d00a93a29485c4b3d7d290 (diff)
parentcaf15613c29870850da952e51aaebb8b84867c49 (diff)
downloadpackages_apps_settings-cda0663eb9c3a324c543c504647c7661f2ac7b35.zip
packages_apps_settings-cda0663eb9c3a324c543c504647c7661f2ac7b35.tar.gz
packages_apps_settings-cda0663eb9c3a324c543c504647c7661f2ac7b35.tar.bz2
Merge "Enforce READ_EXTERNAL in Developer Options." into jb-dev
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/DevelopmentSettings.java80
-rw-r--r--src/com/android/settings/deviceinfo/Memory.java29
2 files changed, 76 insertions, 33 deletions
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index e5fea54..29c58ab 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -16,17 +16,20 @@
package com.android.settings;
-import java.util.ArrayList;
+import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import android.app.ActionBar;
import android.app.Activity;
import android.app.ActivityManagerNative;
+import android.app.ActivityThread;
import android.app.AlertDialog;
import android.app.Dialog;
+import android.app.DialogFragment;
import android.app.backup.IBackupManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
@@ -45,12 +48,11 @@ import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.MultiCheckPreference;
import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
-import android.preference.Preference.OnPreferenceChangeListener;
import android.provider.Settings;
import android.text.TextUtils;
-import android.util.Log;
import android.view.Gravity;
import android.view.HardwareRenderer;
import android.view.IWindowManager;
@@ -58,6 +60,8 @@ import android.view.View;
import android.widget.CompoundButton;
import android.widget.Switch;
+import java.util.ArrayList;
+
/*
* Displays preferences for application developers.
*/
@@ -70,6 +74,7 @@ public class DevelopmentSettings extends PreferenceFragment
private static final String ALLOW_MOCK_LOCATION = "allow_mock_location";
private static final String HDCP_CHECKING_KEY = "hdcp_checking";
private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
+ private static final String ENFORCE_READ_EXTERNAL = "enforce_read_external";
private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
@@ -97,6 +102,8 @@ public class DevelopmentSettings extends PreferenceFragment
private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
+ private static final String TAG_CONFIRM_ENFORCE = "confirm_enforce";
+
private static final int RESULT_DEBUG_APP = 1000;
private IWindowManager mWindowManager;
@@ -109,6 +116,7 @@ public class DevelopmentSettings extends PreferenceFragment
private CheckBoxPreference mEnableAdb;
private CheckBoxPreference mKeepScreenOn;
+ private CheckBoxPreference mEnforceReadExternal;
private CheckBoxPreference mAllowMockLocation;
private PreferenceScreen mPassword;
@@ -157,6 +165,7 @@ public class DevelopmentSettings extends PreferenceFragment
mEnableAdb = findAndInitCheckboxPref(ENABLE_ADB);
mKeepScreenOn = findAndInitCheckboxPref(KEEP_SCREEN_ON);
+ mEnforceReadExternal = findAndInitCheckboxPref(ENFORCE_READ_EXTERNAL);
mAllowMockLocation = findAndInitCheckboxPref(ALLOW_MOCK_LOCATION);
mPassword = (PreferenceScreen) findPreference(LOCAL_BACKUP_PASSWORD);
mAllPrefs.add(mPassword);
@@ -302,12 +311,14 @@ public class DevelopmentSettings extends PreferenceFragment
}
private void updateAllOptions() {
- final ContentResolver cr = getActivity().getContentResolver();
+ final Context context = getActivity();
+ final ContentResolver cr = context.getContentResolver();
mHaveDebugSettings = false;
updateCheckBox(mEnableAdb, Settings.Secure.getInt(cr,
Settings.Secure.ADB_ENABLED, 0) != 0);
updateCheckBox(mKeepScreenOn, Settings.System.getInt(cr,
Settings.System.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
+ updateCheckBox(mEnforceReadExternal, isPermissionEnforced(context, READ_EXTERNAL_STORAGE));
updateCheckBox(mAllowMockLocation, Settings.Secure.getInt(cr,
Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0);
updateHdcpValues();
@@ -786,6 +797,12 @@ public class DevelopmentSettings extends PreferenceFragment
Settings.System.STAY_ON_WHILE_PLUGGED_IN,
mKeepScreenOn.isChecked() ?
(BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB) : 0);
+ } else if (preference == mEnforceReadExternal) {
+ if (mEnforceReadExternal.isChecked()) {
+ ConfirmEnforceFragment.show(this);
+ } else {
+ setPermissionEnforced(getActivity(), READ_EXTERNAL_STORAGE, false);
+ }
} else if (preference == mAllowMockLocation) {
Settings.Secure.putInt(getActivity().getContentResolver(),
Settings.Secure.ALLOW_MOCK_LOCATION,
@@ -934,4 +951,59 @@ public class DevelopmentSettings extends PreferenceFragment
return null;
}
}
+
+ /**
+ * Dialog to confirm enforcement of {@link #READ_EXTERNAL_STORAGE}.
+ */
+ public static class ConfirmEnforceFragment extends DialogFragment {
+ public static void show(DevelopmentSettings parent) {
+ final ConfirmEnforceFragment dialog = new ConfirmEnforceFragment();
+ dialog.setTargetFragment(parent, 0);
+ dialog.show(parent.getFragmentManager(), TAG_CONFIRM_ENFORCE);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final Context context = getActivity();
+
+ final AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ builder.setTitle(R.string.enforce_read_external_confirm_title);
+ builder.setMessage(R.string.enforce_read_external_confirm_message);
+
+ builder.setPositiveButton(android.R.string.ok, new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ setPermissionEnforced(context, READ_EXTERNAL_STORAGE, true);
+ ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ ((DevelopmentSettings) getTargetFragment()).updateAllOptions();
+ }
+ });
+
+ return builder.create();
+ }
+ }
+
+ private static boolean isPermissionEnforced(Context context, String permission) {
+ try {
+ return ActivityThread.getPackageManager().isPermissionEnforced(READ_EXTERNAL_STORAGE);
+ } catch (RemoteException e) {
+ throw new RuntimeException("Problem talking with PackageManager", e);
+ }
+ }
+
+ private static void setPermissionEnforced(
+ Context context, String permission, boolean enforced) {
+ try {
+ // TODO: offload to background thread
+ ActivityThread.getPackageManager()
+ .setPermissionEnforced(READ_EXTERNAL_STORAGE, enforced);
+ } catch (RemoteException e) {
+ throw new RuntimeException("Problem talking with PackageManager", e);
+ }
+ }
}
diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java
index b9ea432..cb344bf 100644
--- a/src/com/android/settings/deviceinfo/Memory.java
+++ b/src/com/android/settings/deviceinfo/Memory.java
@@ -16,9 +16,6 @@
package com.android.settings.deviceinfo;
-import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
-
-import android.app.ActivityThread;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.BroadcastReceiver;
@@ -26,7 +23,6 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.pm.IPackageManager;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.Environment;
@@ -68,7 +64,6 @@ public class Memory extends SettingsPreferenceFragment {
private IMountService mMountService = null;
private StorageManager mStorageManager = null;
- private IPackageManager mPackageService;
private StorageVolumePreferenceCategory mInternalStorageVolumePreferenceCategory;
private StorageVolumePreferenceCategory[] mStorageVolumePreferenceCategories;
@@ -82,8 +77,6 @@ public class Memory extends SettingsPreferenceFragment {
mStorageManager.registerListener(mStorageListener);
}
- mPackageService = ActivityThread.getPackageManager();
-
addPreferencesFromResource(R.xml.device_info_memory);
mResources = getResources();
@@ -178,16 +171,6 @@ public class Memory extends SettingsPreferenceFragment {
public void onPrepareOptionsMenu(Menu menu) {
final MenuItem usb = menu.findItem(R.id.storage_usb);
usb.setVisible(!isMassStorageEnabled());
-
- final boolean enforced;
- try {
- enforced = mPackageService.isPermissionEnforced(READ_EXTERNAL_STORAGE);
- } catch (RemoteException e) {
- throw new RuntimeException("Problem talking with PackageManager", e);
- }
-
- final MenuItem enforceReadExternal = menu.findItem(R.id.storage_enforce_read_external);
- enforceReadExternal.setChecked(enforced);
}
@Override
@@ -204,18 +187,6 @@ public class Memory extends SettingsPreferenceFragment {
startFragment(this, UsbSettings.class.getCanonicalName(), -1, null);
}
return true;
- case R.id.storage_enforce_read_external: {
- final boolean checked = !item.isChecked();
- item.setChecked(checked);
-
- try {
- // TODO: offload to background thread
- mPackageService.setPermissionEnforced(READ_EXTERNAL_STORAGE, checked);
- } catch (RemoteException e) {
- throw new RuntimeException("Problem talking with PackageManager", e);
- }
- return true;
- }
}
return super.onOptionsItemSelected(item);
}