Fix below bugs: 1) When developer option switch is turned off, "Enable ANGLE" switch is not disabled. Fixed it in GraphicsDriverEnableAngleAsSystemDriverController::update(). 2) When user turns off developer option switch, a restart is not always mandatory. However, we should ask user to restart the device is "Enable ANGLE" is forced to change due to developer option switch turning off. Fixed it in DevelopmentSettingsDashboardFragment::onSwitchChanged(). 3) When user turns off developer option switch and the reboot dialog pops up, user can dismiss the dialog by not clicking either POSITIVE_BUTTON or NEGATIVE_BUTTON. We should enforce user to click the button and disallow the option to dimiss the dialog by touching screen areas outside the window's bounds. Fixed it in DisableDevSettingsDialogFragment.java. Did a few clean-up and in GraphicsDriverEnableAngleAsSystemDriverController.java, and updated unit test to reflect new code behavior. Bug: b/270994705 Test: m; flash and device can boot. Test: atest -c GraphicsDriverEnableAngleAsSystemDriverControllerJUnitTest Test: atest GraphicsDriverEnableAngleAsSystemDriverControllerTest Test: atest SettingsRoboTests:FreeformWindowsPreferenceControllerTest Test: atest SettingsRoboTests:DesktopModePreferenceControllerTest Change-Id: I199b2fe59b6ad948b753793254c822a293d8b40d
93 lines
3.6 KiB
Java
93 lines
3.6 KiB
Java
/*
|
|
* Copyright (C) 2018 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.development;
|
|
|
|
import android.app.Dialog;
|
|
import android.app.settings.SettingsEnums;
|
|
import android.content.DialogInterface;
|
|
import android.os.Bundle;
|
|
import android.os.PowerManager;
|
|
import android.util.Log;
|
|
|
|
import androidx.annotation.VisibleForTesting;
|
|
import androidx.appcompat.app.AlertDialog;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.fragment.app.FragmentManager;
|
|
|
|
import com.android.settings.R;
|
|
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
|
|
|
public class DisableDevSettingsDialogFragment extends InstrumentedDialogFragment
|
|
implements DialogInterface.OnClickListener {
|
|
|
|
public static final String TAG = "DisableDevSettingDlg";
|
|
|
|
@VisibleForTesting
|
|
static DisableDevSettingsDialogFragment newInstance() {
|
|
final DisableDevSettingsDialogFragment dialog = new DisableDevSettingsDialogFragment();
|
|
return dialog;
|
|
}
|
|
|
|
public static void show(DevelopmentSettingsDashboardFragment host) {
|
|
final DisableDevSettingsDialogFragment dialog = new DisableDevSettingsDialogFragment();
|
|
dialog.setTargetFragment(host, 0 /* requestCode */);
|
|
// We need to handle data changes and switch state based on which button user clicks,
|
|
// therefore we should enforce user to click one of the buttons
|
|
// by disallowing dialog dismiss through tapping outside of dialog bounds.
|
|
dialog.setCancelable(false);
|
|
final FragmentManager manager = host.getActivity().getSupportFragmentManager();
|
|
dialog.show(manager, TAG);
|
|
}
|
|
|
|
@Override
|
|
public int getMetricsCategory() {
|
|
return SettingsEnums.DIALOG_DISABLE_DEVELOPMENT_OPTIONS;
|
|
}
|
|
|
|
@Override
|
|
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
|
// Reuse the same text of disable_hw_offload_dialog.
|
|
// The text is generic enough to be used for turning off Dev options.
|
|
return new AlertDialog.Builder(getActivity())
|
|
.setMessage(R.string.bluetooth_disable_hw_offload_dialog_message)
|
|
.setTitle(R.string.bluetooth_disable_hw_offload_dialog_title)
|
|
.setPositiveButton(
|
|
R.string.bluetooth_disable_hw_offload_dialog_confirm, this)
|
|
.setNegativeButton(
|
|
R.string.bluetooth_disable_hw_offload_dialog_cancel, this)
|
|
.create();
|
|
}
|
|
|
|
@Override
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
Fragment fragment = getTargetFragment();
|
|
if (!(fragment instanceof DevelopmentSettingsDashboardFragment)){
|
|
Log.e(TAG, "getTargetFragment return unexpected type");
|
|
}
|
|
|
|
final DevelopmentSettingsDashboardFragment host =
|
|
(DevelopmentSettingsDashboardFragment) fragment;
|
|
if (which == DialogInterface.BUTTON_POSITIVE) {
|
|
host.onDisableDevelopmentOptionsConfirmed();
|
|
PowerManager pm = getContext().getSystemService(PowerManager.class);
|
|
pm.reboot(null);
|
|
} else {
|
|
host.onDisableDevelopmentOptionsRejected();
|
|
}
|
|
}
|
|
}
|