OSDN Git Service

Merge "fix issue when cancelling OEM unlocking change" into nyc-dev
authorAndres Morales <anmorales@google.com>
Wed, 24 Feb 2016 16:05:21 +0000 (16:05 +0000)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Wed, 24 Feb 2016 16:05:21 +0000 (16:05 +0000)
1  2 
src/com/android/settings/DevelopmentSettings.java

@@@ -53,7 -53,6 +53,7 @@@ import android.os.RemoteException
  import android.os.ServiceManager;
  import android.os.StrictMode;
  import android.os.SystemProperties;
 +import android.os.UserHandle;
  import android.os.UserManager;
  import android.os.storage.IMountService;
  import android.provider.SearchIndexableResource;
@@@ -76,6 -75,7 +76,6 @@@ import android.view.accessibility.Acces
  import android.webkit.IWebViewUpdateService;
  import android.webkit.WebViewProviderInfo;
  import android.widget.Switch;
 -import android.widget.TextView;
  import android.widget.Toast;
  
  import com.android.internal.app.LocalePicker;
@@@ -94,7 -94,7 +94,7 @@@ import java.util.List
  /*
   * Displays preferences for application developers.
   */
 -public class DevelopmentSettings extends SettingsPreferenceFragment
 +public class DevelopmentSettings extends RestrictedSettingsFragment
          implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
                  OnPreferenceChangeListener, SwitchBar.OnSwitchChangeListener, Indexable {
      private static final String TAG = "DevelopmentSettings";
      private static final String KEEP_SCREEN_ON = "keep_screen_on";
      private static final String BT_HCI_SNOOP_LOG = "bt_hci_snoop_log";
      private static final String WEBVIEW_PROVIDER_KEY = "select_webview_provider";
 +    private static final String WEBVIEW_MULTIPROCESS_KEY = "enable_webview_multiprocess";
      private static final String ENABLE_OEM_UNLOCK = "oem_unlock_enable";
      private static final String HDCP_CHECKING_KEY = "hdcp_checking";
      private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
      private static final String WIFI_AGGRESSIVE_HANDOVER_KEY = "wifi_aggressive_handover";
      private static final String WIFI_ALLOW_SCAN_WITH_TRAFFIC_KEY = "wifi_allow_scan_with_traffic";
      private static final String USB_CONFIGURATION_KEY = "select_usb_configuration";
 -    private static final String WIFI_LEGACY_DHCP_CLIENT_KEY = "legacy_dhcp_client";
      private static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
      private static final String KEY_COLOR_MODE = "color_mode";
      private static final String FORCE_RESIZABLE_KEY = "force_resizable_activities";
 -    private static final String ENABLE_FREEFORM_SUPPORT_KEY = "enable_freeform_support";
      private static final String COLOR_TEMPERATURE_KEY = "color_temperature";
  
      private static final String BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY =
  
      private static final String TERMINAL_APP_PACKAGE = "com.android.terminal";
  
 -    private static final String KEY_NIGHT_MODE = "night_mode";
      private static final String KEY_CONVERT_FBE = "convert_to_file_encryption";
  
 +    private static final String OTA_DISABLE_AUTOMATIC_UPDATE_KEY = "ota_disable_automatic_update";
 +
      private static final int RESULT_DEBUG_APP = 1000;
      private static final int RESULT_MOCK_LOCATION_APP = 1001;
  
  
      private IWindowManager mWindowManager;
      private IBackupManager mBackupManager;
 +    private IWebViewUpdateService mWebViewUpdateService;
      private DevicePolicyManager mDpm;
      private UserManager mUm;
      private WifiManager mWifiManager;
      private SwitchPreference mWifiDisplayCertification;
      private SwitchPreference mWifiVerboseLogging;
      private SwitchPreference mWifiAggressiveHandover;
 -    private SwitchPreference mLegacyDhcpClient;
      private SwitchPreference mMobileDataAlwaysOn;
      private SwitchPreference mBluetoothDisableAbsVolume;
 +    private SwitchPreference mOtaDisableAutomaticUpdate;
  
      private SwitchPreference mWifiAllowScansWithTraffic;
      private SwitchPreference mStrictMode;
      private ListPreference mAnimatorDurationScale;
      private ListPreference mOverlayDisplayDevices;
      private ListPreference mOpenGLTraces;
 +
 +    private SwitchPreference mWebViewMultiprocess;
      private ListPreference mWebViewProvider;
  
      private ListPreference mSimulateColorSpace;
  
      private SwitchPreference mShowAllANRs;
  
 -    private DropDownPreference mNightModePreference;
 -
      private ColorModePreference mColorModePreference;
  
      private SwitchPreference mForceResizable;
  
 -    private SwitchPreference mEnableFreeformSupport;
 -
      private SwitchPreference mColorTemperaturePreference;
  
      private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
      private Dialog mAdbKeysDialog;
      private boolean mUnavailable;
  
 +    public DevelopmentSettings() {
 +        super(UserManager.DISALLOW_DEBUGGING_FEATURES);
 +    }
 +
      @Override
      protected int getMetricsCategory() {
          return MetricsEvent.DEVELOPMENT;
          mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
          mBackupManager = IBackupManager.Stub.asInterface(
                  ServiceManager.getService(Context.BACKUP_SERVICE));
 +        mWebViewUpdateService  =
 +            IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
 +
          mDpm = (DevicePolicyManager)getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE);
          mUm = (UserManager) getSystemService(Context.USER_SERVICE);
  
          mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
  
 -        if (!mUm.isAdminUser()
 -                || mUm.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)
 +        setIfOnlyAvailableForAdmins(true);
 +        if (isUiRestricted()
                  || Settings.Global.getInt(getActivity().getContentResolver(),
                          Settings.Global.DEVICE_PROVISIONED, 0) == 0) {
              // Block access to developer options if the user is not the owner, if user policy
          mWifiVerboseLogging = findAndInitSwitchPref(WIFI_VERBOSE_LOGGING_KEY);
          mWifiAggressiveHandover = findAndInitSwitchPref(WIFI_AGGRESSIVE_HANDOVER_KEY);
          mWifiAllowScansWithTraffic = findAndInitSwitchPref(WIFI_ALLOW_SCAN_WITH_TRAFFIC_KEY);
 -        mLegacyDhcpClient = findAndInitSwitchPref(WIFI_LEGACY_DHCP_CLIENT_KEY);
          mMobileDataAlwaysOn = findAndInitSwitchPref(MOBILE_DATA_ALWAYS_ON);
          mLogdSize = addListPreference(SELECT_LOGD_SIZE_KEY);
          mUsbConfiguration = addListPreference(USB_CONFIGURATION_KEY);
          mWebViewProvider = addListPreference(WEBVIEW_PROVIDER_KEY);
 +        mWebViewMultiprocess = findAndInitSwitchPref(WEBVIEW_MULTIPROCESS_KEY);
          mBluetoothDisableAbsVolume = findAndInitSwitchPref(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY);
  
          mWindowAnimationScale = addListPreference(WINDOW_ANIMATION_SCALE_KEY);
          mSimulateColorSpace = addListPreference(SIMULATE_COLOR_SPACE);
          mUSBAudio = findAndInitSwitchPref(USB_AUDIO_KEY);
          mForceResizable = findAndInitSwitchPref(FORCE_RESIZABLE_KEY);
 -        mEnableFreeformSupport = findAndInitSwitchPref(ENABLE_FREEFORM_SUPPORT_KEY);
  
          mImmediatelyDestroyActivities = (SwitchPreference) findPreference(
                  IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
              removePreference(KEY_CONVERT_FBE);
          }
  
 -        mNightModePreference = (DropDownPreference) findPreference(KEY_NIGHT_MODE);
 -        final UiModeManager uiManager = (UiModeManager) getSystemService(
 -                Context.UI_MODE_SERVICE);
 -        final int currentNightMode = uiManager.getNightMode();
 -        mNightModePreference.setValue(String.valueOf(currentNightMode));
 -        mNightModePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
 -            @Override
 -            public boolean onPreferenceChange(Preference preference, Object newValue) {
 -                try {
 -                    final int value = Integer.parseInt((String) newValue);
 -                    final UiModeManager uiManager = (UiModeManager) getSystemService(
 -                            Context.UI_MODE_SERVICE);
 -                    uiManager.setNightMode(value);
 -                    return true;
 -                } catch (NumberFormatException e) {
 -                    Log.e(TAG, "could not persist night mode setting", e);
 -                    return false;
 -                }
 -            }
 -        });
 +        mOtaDisableAutomaticUpdate = findAndInitSwitchPref(OTA_DISABLE_AUTOMATIC_UPDATE_KEY);
  
          mColorModePreference = (ColorModePreference) findPreference(KEY_COLOR_MODE);
          mColorModePreference.updateCurrentAndSupported();
  
          if (mUnavailable) {
              // Show error message
 -            TextView emptyView = (TextView) getView().findViewById(android.R.id.empty);
 -            setEmptyView(emptyView);
 -            if (emptyView != null) {
 -                emptyView.setText(R.string.development_settings_not_available);
 +            if (!isUiRestrictedByOnlyAdmin()) {
 +                getEmptyTextView().setText(R.string.development_settings_not_available);
              }
 +            getPreferenceScreen().removeAll();
              return;
          }
  
          updateAppProcessLimitOptions();
          updateShowAllANRsOptions();
          updateVerifyAppsOverUsbOptions();
 +        updateOtaDisableAutomaticUpdateOptions();
          updateBugreportOptions();
          updateForceRtlOptions();
          updateLogdSizeValues();
          updateWifiVerboseLoggingOptions();
          updateWifiAggressiveHandoverOptions();
          updateWifiAllowScansWithTrafficOptions();
 -        updateLegacyDhcpClientOptions();
          updateMobileDataAlwaysOnOptions();
          updateSimulateColorSpace();
          updateUSBAudioOptions();
          updateForceResizableOptions();
 -        updateEnableFreeformWindowsSupportOptions();
 +        updateWebViewMultiprocessOptions();
          updateWebViewProviderOptions();
          updateOemUnlockOptions();
          if (mColorTemperaturePreference != null) {
      }
  
      private void updateWebViewProviderOptions() {
 -        IWebViewUpdateService webViewUpdateService  =
 -            IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
          try {
 -            WebViewProviderInfo[] providers = webViewUpdateService.getValidWebViewPackages();
 +            WebViewProviderInfo[] providers = mWebViewUpdateService.getValidWebViewPackages();
              if (providers == null) {
                  Log.e(TAG, "No WebView providers available");
                  return;
              }
 -            String[] options = new String[providers.length];
 -            String[] values = new String[providers.length];
 +            ArrayList<String> options = new ArrayList<String>();
 +            ArrayList<String> values = new ArrayList<String>();
              for(int n = 0; n < providers.length; n++) {
 -                options[n] = providers[n].description;
 -                values[n] = providers[n].packageName;
 +                if (isPackageEnabled(providers[n].packageName)) {
 +                    options.add(providers[n].description);
 +                    values.add(providers[n].packageName);
 +                }
              }
 -            mWebViewProvider.setEntries(options);
 -            mWebViewProvider.setEntryValues(values);
 +            mWebViewProvider.setEntries(options.toArray(new String[options.size()]));
 +            mWebViewProvider.setEntryValues(values.toArray(new String[values.size()]));
  
 -            String value = webViewUpdateService.getCurrentWebViewPackageName();
 +            String value = mWebViewUpdateService.getCurrentWebViewPackageName();
              if (value == null) {
                  value = "";
              }
  
 -            for (int i = 0; i < values.length; i++) {
 -                if (value.contentEquals(values[i])) {
 +            for (int i = 0; i < values.size(); i++) {
 +                if (value.contentEquals(values.get(i))) {
                      mWebViewProvider.setValueIndex(i);
                      return;
                  }
          }
      }
  
 +    private void updateWebViewMultiprocessOptions() {
 +        updateSwitchPreference(mWebViewMultiprocess,
 +                Settings.Global.getInt(getActivity().getContentResolver(),
 +                        Settings.Global.WEBVIEW_MULTIPROCESS, 0) != 0);
 +    }
 +
 +    private void writeWebViewMultiprocessOptions() {
 +        boolean value = mWebViewMultiprocess.isChecked();
 +        Settings.Global.putInt(getActivity().getContentResolver(),
 +                Settings.Global.WEBVIEW_MULTIPROCESS, value ? 1 : 0);
 +
 +        try {
 +            String wv_package = mWebViewUpdateService.getCurrentWebViewPackageName();
 +            ActivityManagerNative.getDefault().killPackageDependents(
 +                    wv_package, UserHandle.USER_ALL);
 +        } catch(RemoteException e) {
 +        }
 +    }
 +
      private void updateHdcpValues() {
          ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
          if (hdcpChecking != null) {
      }
  
      private void writeWebViewProviderOptions(Object newValue) {
 -        IWebViewUpdateService webViewUpdateService  =
 -            IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
 -
          try {
 -            webViewUpdateService.changeProviderAndSetting(
 +            mWebViewUpdateService.changeProviderAndSetting(
                      newValue == null ? "" : newValue.toString());
              updateWebViewProviderOptions();
          } catch(RemoteException e) {
                  mVerifyAppsOverUsb.isChecked() ? 1 : 0);
      }
  
 +    private void updateOtaDisableAutomaticUpdateOptions() {
 +        // We use the "disabled status" in code, but show the opposite text
 +        // "Automatic system updates" on screen. So a value 0 indicates the
 +        // automatic update is enabled.
 +        updateSwitchPreference(mOtaDisableAutomaticUpdate, Settings.Global.getInt(
 +                getActivity().getContentResolver(),
 +                Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE, 0) != 1);
 +    }
 +
 +    private void writeOtaDisableAutomaticUpdateOptions() {
 +        // We use the "disabled status" in code, but show the opposite text
 +        // "Automatic system updates" on screen. So a value 0 indicates the
 +        // automatic update is enabled.
 +        Settings.Global.putInt(getActivity().getContentResolver(),
 +                Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE,
 +                mOtaDisableAutomaticUpdate.isChecked() ? 0 : 1);
 +    }
 +
      private boolean enableVerifierSetting() {
          final ContentResolver cr = getActivity().getContentResolver();
          if (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) == 0) {
                  mForceResizable.isChecked() ? 1 : 0);
      }
  
 -    private void updateEnableFreeformWindowsSupportOptions() {
 -        updateSwitchPreference(mEnableFreeformSupport, Settings.Global.getInt(getContentResolver(),
 -                Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0);
 -    }
 -
 -    private void writeEnableFreeformWindowsSupportOptions() {
 -        Settings.Global.putInt(getContentResolver(),
 -                Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT,
 -                mEnableFreeformSupport.isChecked() ? 1 : 0);
 -    }
 -
      private void updateForceRtlOptions() {
          updateSwitchPreference(mForceRtlLayout,
                  Settings.Global.getInt(getActivity().getContentResolver(),
          mWifiManager.setAllowScansWithTraffic(mWifiAllowScansWithTraffic.isChecked() ? 1 : 0);
      }
  
 -    private void updateLegacyDhcpClientOptions() {
 -        updateSwitchPreference(mLegacyDhcpClient, Settings.Global.getInt(
 -                getActivity().getContentResolver(),
 -                Settings.Global.LEGACY_DHCP_CLIENT, 0) != 0);
 -    }
 -
 -    private void writeLegacyDhcpClientOptions() {
 -        Settings.Global.putInt(getActivity().getContentResolver(),
 -                Settings.Global.LEGACY_DHCP_CLIENT,
 -                mLegacyDhcpClient.isChecked() ? 1 : 0);
 -    }
 -
      private void updateBluetoothDisableAbsVolumeOptions() {
          updateSwitchPreference(mBluetoothDisableAbsVolume,
                  SystemProperties.getBoolean(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_PROPERTY, false));
      }
  
      private void confirmEnableOemUnlock() {
-         DialogInterface.OnClickListener onConfirmListener = new DialogInterface.OnClickListener() {
+         DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
              @Override
              public void onClick(DialogInterface dialog, int which) {
-                 Utils.setOemUnlockEnabled(getActivity(), true);
+                 if (which == DialogInterface.BUTTON_POSITIVE) {
+                     Utils.setOemUnlockEnabled(getActivity(), true);
+                 }
+             }
+         };
+         DialogInterface.OnDismissListener onDismissListener = new DialogInterface.OnDismissListener() {
+             @Override
+             public void onDismiss(DialogInterface dialog) {
                  updateAllOptions();
              }
          };
          new AlertDialog.Builder(getActivity())
                  .setTitle(R.string.confirm_enable_oem_unlock_title)
                  .setMessage(R.string.confirm_enable_oem_unlock_text)
-                 .setPositiveButton(R.string.enable_text, onConfirmListener)
+                 .setPositiveButton(R.string.enable_text, onClickListener)
                  .setNegativeButton(android.R.string.cancel, null)
+                 .setOnDismissListener(onDismissListener)
                  .create()
                  .show();
      }
              writeDebuggerOptions();
          } else if (preference == mVerifyAppsOverUsb) {
              writeVerifyAppsOverUsbOptions();
 +        } else if (preference == mOtaDisableAutomaticUpdate) {
 +            writeOtaDisableAutomaticUpdateOptions();
          } else if (preference == mStrictMode) {
              writeStrictModeVisualOptions();
          } else if (preference == mPointerLocation) {
              writeWifiAggressiveHandoverOptions();
          } else if (preference == mWifiAllowScansWithTraffic) {
              writeWifiAllowScansWithTrafficOptions();
 -        } else if (preference == mLegacyDhcpClient) {
 -            writeLegacyDhcpClientOptions();
          } else if (preference == mMobileDataAlwaysOn) {
              writeMobileDataAlwaysOnOptions();
          } else if (preference == mColorTemperaturePreference) {
              writeUSBAudioOptions();
          } else if (preference == mForceResizable) {
              writeForceResizableOptions();
 -        } else if (preference == mEnableFreeformSupport){
 -            writeEnableFreeformWindowsSupportOptions();
          } else if (INACTIVE_APPS_KEY.equals(preference.getKey())) {
              startInactiveAppsFragment();
          } else if (BACKGROUND_CHECK_KEY.equals(preference.getKey())) {
              startBackgroundCheckFragment();
          } else if (preference == mBluetoothDisableAbsVolume) {
              writeBluetoothDisableAbsVolumeOptions();
 +        } else if (preference == mWebViewMultiprocess) {
 +            writeWebViewMultiprocessOptions();
          } else {
              return super.onPreferenceTreeClick(preference);
          }
  
      private boolean isPackageEnabled(String packageName) {
          try {
 -            PackageManager pm = getActivity().getPackageManager();
 -            int enabled_state = pm.getApplicationEnabledSetting(packageName);
 -            switch (enabled_state) {
 -                case PackageManager.COMPONENT_ENABLED_STATE_ENABLED:
 -                    return true;
 -                case PackageManager.COMPONENT_ENABLED_STATE_DEFAULT:
 -                    return pm.getPackageInfo(packageName, 0).applicationInfo.enabled;
 -                default:
 -                    return false;
 -            }
 +            return getActivity().getPackageManager().getApplicationInfo(packageName, 0).enabled;
          } catch (NameNotFoundException e) {
 -            // Thrown by PackageManager.getPackageInfo if the package does not exist
 -        } catch (IllegalArgumentException e) {
 -            // Thrown by PackageManager.getApplicationEnabledSetting if the package does not exist
 +            // Thrown by PackageManager.getApplicationInfo if the package does not exist
          }
          return false;
      }