summaryrefslogtreecommitdiff
path: root/src/com/android/settings/development/LocalTerminalPreferenceController.java
diff options
context:
space:
mode:
authorjeffreyhuang <jeffreyhuang@google.com>2017-09-21 15:37:14 -0700
committerjeffreyhuang <jeffreyhuang@google.com>2017-09-21 16:23:04 -0700
commit2ebb0dd1d6c416561005a05a124605ad123b763c (patch)
tree358fd83a6fc14c59b3266aa4bc5a0efac322d52d /src/com/android/settings/development/LocalTerminalPreferenceController.java
parentb9a1f1a56357c48e44fabe3badbd506ac08178eb (diff)
Introduce LocalTerminalPreferenceController
- Create new LocalTerminalPreferenceController - Create controller inside the DashboardFragment - Port logic from DevelopmentSettings into the controller Bug: 34203528 Test: make RunSettingsRoboTests -j40 Change-Id: Ib4a375181af9367a4aef74fd9889de2de1c8652d
Diffstat (limited to 'src/com/android/settings/development/LocalTerminalPreferenceController.java')
-rw-r--r--src/com/android/settings/development/LocalTerminalPreferenceController.java100
1 files changed, 100 insertions, 0 deletions
diff --git a/src/com/android/settings/development/LocalTerminalPreferenceController.java b/src/com/android/settings/development/LocalTerminalPreferenceController.java
new file mode 100644
index 0000000000..cda6e27d22
--- /dev/null
+++ b/src/com/android/settings/development/LocalTerminalPreferenceController.java
@@ -0,0 +1,100 @@
+package com.android.settings.development;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.UserManager;
+import android.support.annotation.VisibleForTesting;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
+public class LocalTerminalPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+
+ private static final String ENABLE_TERMINAL_KEY = "enable_terminal";
+
+ @VisibleForTesting
+ static final String TERMINAL_APP_PACKAGE = "com.android.terminal";
+
+ private PackageManagerWrapper mPackageManager;
+ private SwitchPreference mPreference;
+ private UserManager mUserManager;
+
+ public LocalTerminalPreferenceController(Context context) {
+ super(context);
+
+ mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return isPackageInstalled(TERMINAL_APP_PACKAGE);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return ENABLE_TERMINAL_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (SwitchPreference) screen.findPreference(getPreferenceKey());
+ mPackageManager = getPackageManagerWrapper();
+
+ if (isAvailable() && !isEnabled()) {
+ mPreference.setEnabled(false);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final boolean terminalEnabled = (Boolean) newValue;
+ mPackageManager.setApplicationEnabledSetting(TERMINAL_APP_PACKAGE,
+ terminalEnabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+ : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0 /* flags */);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ final boolean isTerminalEnabled = mPackageManager.getApplicationEnabledSetting(
+ TERMINAL_APP_PACKAGE) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+ mPreference.setChecked(isTerminalEnabled);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ if (isEnabled()) {
+ mPreference.setEnabled(true);
+ }
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ mPackageManager.setApplicationEnabledSetting(TERMINAL_APP_PACKAGE,
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0 /* flags */);
+ mPreference.setEnabled(false);
+ mPreference.setChecked(false);
+ }
+
+ @VisibleForTesting
+ PackageManagerWrapper getPackageManagerWrapper() {
+ return new PackageManagerWrapper(mContext.getPackageManager());
+ }
+
+ private boolean isPackageInstalled(String packageName) {
+ try {
+ return mContext.getPackageManager().getPackageInfo(packageName, 0 /* flags */) != null;
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ }
+
+ private boolean isEnabled() {
+ return mUserManager.isAdminUser();
+ }
+}