Snap for 8995964 from 94859d0642 to udc-release
Change-Id: I9349ef44186aac4f2c9dc4cea3bb13573b64f3e5
This commit is contained in:
@@ -56,6 +56,17 @@
|
||||
android:layout_toStartOf="@+id/dragHandle"
|
||||
android:layout_below="@id/label"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/default_locale"
|
||||
style="@style/LanguageCheckboxAndLabel"
|
||||
android:layout_marginTop="-28dp"
|
||||
android:paddingStart="56dp"
|
||||
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
|
||||
android:textColor="?android:textColorSecondary"
|
||||
android:text="@string/desc_current_default_language"
|
||||
android:layout_toStartOf="@+id/dragHandle"
|
||||
android:layout_below="@id/label"/>
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/dragHandle"
|
||||
android:layout_width="wrap_content"
|
||||
|
||||
@@ -401,6 +401,12 @@
|
||||
<!-- Title for the locale picker activity. [CHAR LIMIT=30]-->
|
||||
<string name="language_picker_title">Languages</string>
|
||||
|
||||
<!-- Title for category of the locale picker . [CHAR LIMIT=50]-->
|
||||
<string name="language_picker_category_title">Preferred language order</string>
|
||||
|
||||
<!-- Description for indication of current system default language. [CHAR LIMIT=50]-->
|
||||
<string name="desc_current_default_language">System language</string>
|
||||
|
||||
<!-- Menu item in the locale menu. Will remove the selected locales. [CHAR LIMIT=30] -->
|
||||
<string name="locale_remove_menu">Remove</string>
|
||||
|
||||
@@ -414,13 +420,13 @@
|
||||
<string name="locale_picker_category_title">Preferred Language</string>
|
||||
|
||||
<!-- Title for the Apps' locale menu entry [CHAR LIMIT=50]-->
|
||||
<string name="app_locales_picker_menu_title">App Languages</string>
|
||||
<string name="app_locales_picker_menu_title">App languages</string>
|
||||
|
||||
<!-- Summary for the app's locale picker activity. [CHAR LIMIT=50]-->
|
||||
<string name="app_locale_picker_summary">Set the language for each app</string>
|
||||
|
||||
<!-- Title for the App's locale picker activity. [CHAR LIMIT=50]-->
|
||||
<string name="app_locale_picker_title">App Language</string>
|
||||
<string name="app_locale_picker_title">App language</string>
|
||||
|
||||
<!-- Category for the suggested app's locales. [CHAR LIMIT=50]-->
|
||||
<string name="suggested_app_locales_title">Suggested languages</string>
|
||||
@@ -443,6 +449,18 @@
|
||||
<!-- Description for introduction of the locale selection supported of app list [CHAR LIMIT=NONE]-->
|
||||
<string name="desc_app_locale_selection_supported">Only apps that support language selection are shown here.</string>
|
||||
|
||||
<!-- Description for the introduction to language picker activity. [CHAR LIMIT=NONE]-->
|
||||
<string name="desc_introduction_of_language_picker">Your system, apps, and websites use the first supported language from your preferred languages.</string>
|
||||
|
||||
<!-- Description for the notice of language picker. [CHAR LIMIT=NONE]-->
|
||||
<string name="desc_notice_of_language_picker">To select a language for each app, go to app language settings.</string>
|
||||
|
||||
<!-- Title for locale helper page [CHAR LIMIT=NONE] -->
|
||||
<string name="desc_locale_helper_footer_general">Learn more about languages</string>
|
||||
|
||||
<!-- Link for Locale helper page. [CHAR LIMIT=NONE]-->
|
||||
<string name="link_locale_picker_footer_learn_more" translatable="false">https://support.google.com/android?p=per_language_app_settings</string>
|
||||
|
||||
<!-- The title of the confirmation dialog shown when the user selects one / several languages and tries to remove them [CHAR LIMIT=60] -->
|
||||
<plurals name="dlg_remove_locales_title">
|
||||
<item quantity="one">Remove selected language?</item>
|
||||
@@ -458,7 +476,7 @@
|
||||
<string name="dlg_remove_locales_error_message">Keep at least one preferred language</string>
|
||||
|
||||
<!-- This text shows in the language picker when the system is not translated into that languages [CHAR LIMIT=80] -->
|
||||
<string name="locale_not_translated">May not be available in some apps</string>
|
||||
<string name="locale_not_translated">Not available as system language</string>
|
||||
|
||||
<!-- Label for an accessibility action that moves a language up in the ordered language list [CHAR LIMIT=20] -->
|
||||
<string name="action_drag_label_move_up">Move up</string>
|
||||
@@ -1064,11 +1082,11 @@
|
||||
<!-- Title shown in fingerprint enrollment dialog once enrollment is completed [CHAR LIMIT=29] -->
|
||||
<string name="security_settings_fingerprint_enroll_finish_title">Fingerprint added</string>
|
||||
<!-- Message shown in fingerprint enrollment dialog once enrollment is completed (tablet) [CHAR LIMIT=NONE] -->
|
||||
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet">Fingerprint Unlock improves the more you use it to unlock your tablet or verify it\u2019s you in apps</string>
|
||||
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet">Now you can use your fingerprint to unlock your tablet or verify it\u2019s you, like when you sign in to apps</string>
|
||||
<!-- Message shown in fingerprint enrollment dialog once enrollment is completed (device) [CHAR LIMIT=NONE] -->
|
||||
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Fingerprint Unlock improves the more you use it to unlock your device or verify it\u2019s you in apps</string>
|
||||
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="device">Now you can use your fingerprint to unlock your device or verify it\u2019s you, like when you sign in to apps</string>
|
||||
<!-- Message shown in fingerprint enrollment dialog once enrollment is completed (default) [CHAR LIMIT=NONE] -->
|
||||
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Fingerprint Unlock improves the more you use it to unlock your phone or verify it\u2019s you in apps</string>
|
||||
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="default">Now you can use your fingerprint to unlock your phone or verify it\u2019s you, like when you sign in to apps</string>
|
||||
<!-- Button text to skip enrollment of fingerprint [CHAR LIMIT=40] -->
|
||||
<string name="security_settings_fingerprint_enroll_enrolling_skip">Do it later</string>
|
||||
<!-- Accessibility message for fingerprint enrollment asking the user to place the tip of their finger on the fingerprint sensor [CHAR LIMIT=NONE] -->
|
||||
@@ -1870,6 +1888,21 @@
|
||||
<!-- Nfc developer settings: The description of the setting. -->
|
||||
<string name="nfc_stack_debuglog_summary">Increase NFC stack logging level</string>
|
||||
|
||||
<!-- Nfc developer settings: The title of the setting to enable nfc verbose vendor log. [CHAR LIMIT=60] -->
|
||||
<string name="nfc_verbose_vendor_log_title">NFC verbose vendor debug log</string>
|
||||
<!-- Nfc developer settings: The description of the setting to enable nfc verbose vendor log. [CHAR_LIMIT=NONE] -->
|
||||
<string name="nfc_verbose_vendor_log_summary">Include additional device-specific vendor logs in bugreports, which may contain private information. </string>
|
||||
<!-- Nfc developer settings: The title of the setting to enable full nfc snoop log. [CHAR LIMIT=60] -->
|
||||
<string name="nfc_snoop_log_title">NFC NCI unfiltered snoop log</string>
|
||||
<!-- Nfc developer settings: The description of the setting to enable full nfc snoop log. [CHAR_LIMIT=NONE] -->
|
||||
<string name="nfc_snoop_log_summary">Capture detail NFC packets, which may contain private information. </string>
|
||||
<!-- Nfc developer settings: The title of the popup dialog. [CHAR_LIMIT=60] -->
|
||||
<string name="nfc_reboot_dialog_title">Restart Device?</string>
|
||||
<!-- Nfc developer settings: The content of the popup dialog. [CHAR_LIMIT=NONE] -->
|
||||
<string name="nfc_reboot_dialog_message">Detail NFC logging is intended for development purposes only. Additional NFC data is included in bug reports, which may contain private information. Restart your device to change this setting. </string>
|
||||
<!-- Nfc developer settings: The confirm button of the popup dialog. [CHAR_LIMIT=60] -->
|
||||
<string name="nfc_reboot_dialog_confirm">Restart</string>
|
||||
|
||||
<!-- Wifi Display settings. The title of the screen. [CHAR LIMIT=40] -->
|
||||
<string name="wifi_display_settings_title">Cast</string>
|
||||
<!-- Wifi Display settings. The keywords of the setting. [CHAR LIMIT=NONE] -->
|
||||
|
||||
@@ -402,6 +402,16 @@
|
||||
android:title="@string/nfc_stack_debuglog_title"
|
||||
android:summary="@string/nfc_stack_debuglog_summary" />
|
||||
|
||||
<SwitchPreference
|
||||
android:key="nfc_verbose_vendor_log"
|
||||
android:title="@string/nfc_verbose_vendor_log_title"
|
||||
android:summary="@string/nfc_verbose_vendor_log_summary" />
|
||||
|
||||
<SwitchPreference
|
||||
android:key="nfc_snoop_log"
|
||||
android:title="@string/nfc_snoop_log_title"
|
||||
android:summary="@string/nfc_snoop_log_summary"/>
|
||||
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory
|
||||
|
||||
42
res/xml/languages.xml
Normal file
42
res/xml/languages.xml
Normal file
@@ -0,0 +1,42 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2022 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.
|
||||
-->
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:title="@string/language_settings">
|
||||
|
||||
<com.android.settingslib.widget.TopIntroPreference
|
||||
android:title="@string/desc_introduction_of_language_picker"
|
||||
android:persistent="false"
|
||||
android:selectable="false"/>
|
||||
|
||||
<PreferenceCategory
|
||||
android:title="@string/language_picker_category_title">
|
||||
<com.android.settingslib.widget.LayoutPreference
|
||||
android:key="languages_picker"
|
||||
android:layout="@layout/locale_order_list" />
|
||||
</PreferenceCategory>
|
||||
|
||||
<com.android.settingslib.widget.FooterPreference
|
||||
android:key="footer_languages_picker"
|
||||
android:title="@string/desc_notice_of_language_picker"
|
||||
android:persistent="false"
|
||||
android:selectable="false"
|
||||
settings:controller="com.android.settings.localepicker.LocaleHelperPreferenceController"/>
|
||||
|
||||
</PreferenceScreen>
|
||||
@@ -52,11 +52,17 @@ public class ToggleScreenMagnificationPreferenceFragmentForSetupWizard
|
||||
*/
|
||||
private void hidePreferenceSettingComponents() {
|
||||
// Intro
|
||||
mTopIntroPreference.setVisible(false);
|
||||
if (mTopIntroPreference != null) {
|
||||
mTopIntroPreference.setVisible(false);
|
||||
}
|
||||
// Setting of magnification type
|
||||
mSettingsPreference.setVisible(false);
|
||||
if (mSettingsPreference != null) {
|
||||
mSettingsPreference.setVisible(false);
|
||||
}
|
||||
// Setting of following typing
|
||||
mFollowingTypingSwitchPreference.setVisible(false);
|
||||
if (mFollowingTypingSwitchPreference != null) {
|
||||
mFollowingTypingSwitchPreference.setVisible(false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -100,8 +100,8 @@ public class AppLocaleUtil {
|
||||
*/
|
||||
public static boolean isAppLocaleSupported(Context context, String packageName) {
|
||||
LocaleList localeList = getPackageLocales(context, packageName);
|
||||
if (localeList != null && localeList.size() > 0) {
|
||||
return true;
|
||||
if (localeList != null) {
|
||||
return localeList.size() > 0;
|
||||
}
|
||||
|
||||
if (FeatureFlagUtils.isEnabled(
|
||||
|
||||
@@ -22,7 +22,6 @@ import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
import android.net.Uri;
|
||||
import android.text.TextUtils;
|
||||
import android.util.FeatureFlagUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
@@ -51,9 +50,7 @@ public class AppLocalePreferenceController extends AppInfoPreferenceControllerBa
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus() {
|
||||
boolean isFeatureOn = FeatureFlagUtils
|
||||
.isEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION);
|
||||
return isFeatureOn && canDisplayLocaleUi() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||
return canDisplayLocaleUi() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.applications.appinfo;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.FeatureFlagUtils;
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
/**
|
||||
* A controller to update current locale information of application
|
||||
* and a entry to launch {@link ManageApplications}.
|
||||
* TODO(209775925) After feature release, this class may be removed.
|
||||
*/
|
||||
public class ManageAppLocalePreferenceController extends BasePreferenceController {
|
||||
public ManageAppLocalePreferenceController(Context context, String key) {
|
||||
super(context, key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus() {
|
||||
return FeatureFlagUtils
|
||||
.isEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION)
|
||||
? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
|
||||
}
|
||||
}
|
||||
@@ -77,7 +77,7 @@ public class SetupFingerprintEnrollFindSensor extends FingerprintEnrollFindSenso
|
||||
|
||||
@NonNull
|
||||
public AlertDialog.Builder onCreateDialogBuilder() {
|
||||
return new AlertDialog.Builder(getContext())
|
||||
return new AlertDialog.Builder(getActivity(), R.style.GlifV2ThemeAlertDialog)
|
||||
.setTitle(R.string.setup_fingerprint_enroll_skip_title)
|
||||
.setPositiveButton(R.string.skip_anyway_button_label, this)
|
||||
.setNegativeButton(R.string.go_back_button_label, this)
|
||||
|
||||
@@ -81,7 +81,8 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
|
||||
implements OnMainSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
|
||||
AdbClearKeysDialogHost, LogPersistDialogHost,
|
||||
BluetoothRebootDialog.OnRebootDialogListener,
|
||||
AbstractBluetoothPreferenceController.Callback {
|
||||
AbstractBluetoothPreferenceController.Callback,
|
||||
NfcRebootDialog.OnNfcRebootDialogConfirmedListener {
|
||||
|
||||
private static final String TAG = "DevSettingsDashboard";
|
||||
|
||||
@@ -299,10 +300,19 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
|
||||
final BluetoothLeAudioHwOffloadPreferenceController leAudioController =
|
||||
getDevelopmentOptionsController(
|
||||
BluetoothLeAudioHwOffloadPreferenceController.class);
|
||||
final NfcSnoopLogPreferenceController nfcSnoopLogController =
|
||||
getDevelopmentOptionsController(
|
||||
NfcSnoopLogPreferenceController.class);
|
||||
final NfcVerboseVendorLogPreferenceController nfcVerboseLogController =
|
||||
getDevelopmentOptionsController(
|
||||
NfcVerboseVendorLogPreferenceController.class);
|
||||
// If hardware offload isn't default value, we must reboot after disable
|
||||
// developer options. Show a dialog for the user to confirm.
|
||||
if ((a2dpController == null || a2dpController.isDefaultValue())
|
||||
&& (leAudioController == null || leAudioController.isDefaultValue())) {
|
||||
&& (leAudioController == null || leAudioController.isDefaultValue())
|
||||
&& (nfcSnoopLogController == null || nfcSnoopLogController.isDefaultValue())
|
||||
&& (nfcVerboseLogController == null
|
||||
|| nfcVerboseLogController.isDefaultValue())) {
|
||||
disableDeveloperOptions();
|
||||
} else {
|
||||
DisableDevSettingsDialogFragment.show(this /* host */);
|
||||
@@ -395,6 +405,28 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
|
||||
leAudioFeatureController.onRebootDialogCanceled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNfcRebootDialogConfirmed() {
|
||||
final NfcSnoopLogPreferenceController controller =
|
||||
getDevelopmentOptionsController(NfcSnoopLogPreferenceController.class);
|
||||
controller.onNfcRebootDialogConfirmed();
|
||||
|
||||
final NfcVerboseVendorLogPreferenceController vendorLogController =
|
||||
getDevelopmentOptionsController(NfcVerboseVendorLogPreferenceController.class);
|
||||
vendorLogController.onNfcRebootDialogConfirmed();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNfcRebootDialogCanceled() {
|
||||
final NfcSnoopLogPreferenceController controller =
|
||||
getDevelopmentOptionsController(NfcSnoopLogPreferenceController.class);
|
||||
controller.onNfcRebootDialogCanceled();
|
||||
|
||||
final NfcVerboseVendorLogPreferenceController vendorLogController =
|
||||
getDevelopmentOptionsController(NfcVerboseVendorLogPreferenceController.class);
|
||||
vendorLogController.onNfcRebootDialogCanceled();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
boolean handledResult = false;
|
||||
@@ -555,6 +587,8 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
|
||||
controllers.add(new BluetoothLeAudioHwOffloadPreferenceController(context, fragment));
|
||||
controllers.add(new BluetoothMaxConnectedAudioDevicesPreferenceController(context));
|
||||
controllers.add(new NfcStackDebugLogPreferenceController(context));
|
||||
controllers.add(new NfcSnoopLogPreferenceController(context, fragment));
|
||||
controllers.add(new NfcVerboseVendorLogPreferenceController(context, fragment));
|
||||
controllers.add(new ShowTapsPreferenceController(context));
|
||||
controllers.add(new PointerLocationPreferenceController(context));
|
||||
controllers.add(new ShowSurfaceUpdatesPreferenceController(context));
|
||||
|
||||
99
src/com/android/settings/development/NfcRebootDialog.java
Normal file
99
src/com/android/settings/development/NfcRebootDialog.java
Normal file
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright 2022 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 androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||
|
||||
/**
|
||||
* The NFC log type switch should reboot the device to take effect,
|
||||
* the dialog is to ask the user to reboot the device.
|
||||
*/
|
||||
public class NfcRebootDialog extends InstrumentedDialogFragment
|
||||
implements DialogInterface.OnClickListener {
|
||||
|
||||
public static final String TAG = "NfcRebootDialog";
|
||||
|
||||
/**
|
||||
* The function to show the Dialog.
|
||||
*/
|
||||
public static void show(DevelopmentSettingsDashboardFragment host) {
|
||||
final FragmentManager manager = host.getActivity().getSupportFragmentManager();
|
||||
if (manager.findFragmentByTag(TAG) == null) {
|
||||
final NfcRebootDialog dialog = new NfcRebootDialog();
|
||||
dialog.setTargetFragment(host, 0 /* requestCode */);
|
||||
dialog.show(manager, TAG);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
return SettingsEnums.DIALOG_NFC_ENABLE_DETAIL_LOG;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
return new AlertDialog.Builder(getActivity())
|
||||
.setMessage(R.string.nfc_reboot_dialog_message)
|
||||
.setTitle(R.string.nfc_reboot_dialog_title)
|
||||
.setPositiveButton(
|
||||
R.string.nfc_reboot_dialog_confirm, this)
|
||||
.setNegativeButton(
|
||||
android.R.string.cancel, this)
|
||||
.create();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
final OnNfcRebootDialogConfirmedListener host =
|
||||
(OnNfcRebootDialogConfirmedListener) getTargetFragment();
|
||||
if (host == null) {
|
||||
return;
|
||||
}
|
||||
if (which == DialogInterface.BUTTON_POSITIVE) {
|
||||
host.onNfcRebootDialogConfirmed();
|
||||
PowerManager pm = getContext().getSystemService(PowerManager.class);
|
||||
pm.reboot(null);
|
||||
} else {
|
||||
host.onNfcRebootDialogCanceled();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface for EnableAdbWarningDialog callbacks.
|
||||
*/
|
||||
public interface OnNfcRebootDialogConfirmedListener {
|
||||
/**
|
||||
* Called when the user presses enable on the warning dialog.
|
||||
*/
|
||||
void onNfcRebootDialogConfirmed();
|
||||
|
||||
/**
|
||||
* Called when the user presses cancel on the warning dialog.
|
||||
*/
|
||||
void onNfcRebootDialogCanceled();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.content.Context;
|
||||
import android.os.SystemProperties;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
|
||||
|
||||
/**
|
||||
* Preference controller to control NFCSNOOP data payload
|
||||
*/
|
||||
public class NfcSnoopLogPreferenceController extends
|
||||
DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
|
||||
private static final String TAG = "NfcSnoopLog";
|
||||
private static final String NFC_NFCSNOOP_LOG_KEY =
|
||||
"nfc_snoop_log";
|
||||
@VisibleForTesting
|
||||
static final String NFC_NFCSNOOP_LOG_MODE_PROPERTY =
|
||||
"persist.nfc.nfcsnooplogmode";
|
||||
@VisibleForTesting
|
||||
static final String NFCSNOOP_MODE_FILTERED = "filtered";
|
||||
@VisibleForTesting
|
||||
static final String NFCSNOOP_MODE_FULL = "full";
|
||||
|
||||
@VisibleForTesting
|
||||
boolean mChanged = false;
|
||||
|
||||
private final DevelopmentSettingsDashboardFragment mFragment;
|
||||
|
||||
public NfcSnoopLogPreferenceController(Context context,
|
||||
DevelopmentSettingsDashboardFragment fragment) {
|
||||
super(context);
|
||||
mFragment = fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
return NFC_NFCSNOOP_LOG_KEY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
NfcRebootDialog.show(mFragment);
|
||||
mChanged = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
try {
|
||||
final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
|
||||
((SwitchPreference) mPreference).setChecked(currentValue.equals(NFCSNOOP_MODE_FULL));
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Fail to get nfc system property: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDeveloperOptionsSwitchDisabled() {
|
||||
super.onDeveloperOptionsSwitchDisabled();
|
||||
try {
|
||||
SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
|
||||
((SwitchPreference) mPreference).setChecked(false);
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Fail to set nfc system property: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current setting is the default value or not.
|
||||
*/
|
||||
public boolean isDefaultValue() {
|
||||
try {
|
||||
final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
|
||||
return !currentValue.equals(NFCSNOOP_MODE_FULL);
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Fail to get nfc system property: " + e.getMessage());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the NfcRebootDialog confirm is clicked.
|
||||
*/
|
||||
public void onNfcRebootDialogConfirmed() {
|
||||
if (!mChanged) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
final String currentValue =
|
||||
SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
|
||||
if (currentValue.equals(NFCSNOOP_MODE_FILTERED)) {
|
||||
SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FULL);
|
||||
} else {
|
||||
SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
|
||||
}
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Fail to set nfc system property: " + e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the NfcRebootDialog cancel is clicked.
|
||||
*/
|
||||
public void onNfcRebootDialogCanceled() {
|
||||
mChanged = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.content.Context;
|
||||
import android.os.SystemProperties;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
|
||||
|
||||
/**
|
||||
* Preference controller to control NFC vendor verbose logging enable and disable
|
||||
*/
|
||||
public class NfcVerboseVendorLogPreferenceController
|
||||
extends DeveloperOptionsPreferenceController
|
||||
implements Preference.OnPreferenceChangeListener {
|
||||
private static final String TAG = "NfcVerboseVendorLog";
|
||||
private static final String NFC_VERBOSE_VENDOR_LOG_KEY = "nfc_verbose_vendor_log";
|
||||
@VisibleForTesting
|
||||
static final String NFC_VERBOSE_VENDOR_LOG_PROPERTY =
|
||||
"persist.nfc.verbosevendorlog";
|
||||
@VisibleForTesting
|
||||
static final String VERBOSE_VENDOR_LOG_ENABLED = "enabled";
|
||||
@VisibleForTesting
|
||||
static final String VERBOSE_VENDOR_LOG_DISABLED = "disabled";
|
||||
|
||||
@VisibleForTesting
|
||||
boolean mChanged = false;
|
||||
|
||||
private final DevelopmentSettingsDashboardFragment mFragment;
|
||||
|
||||
public NfcVerboseVendorLogPreferenceController(Context context,
|
||||
DevelopmentSettingsDashboardFragment fragment) {
|
||||
super(context);
|
||||
mFragment = fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
return NFC_VERBOSE_VENDOR_LOG_KEY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
NfcRebootDialog.show(mFragment);
|
||||
mChanged = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateState(Preference preference) {
|
||||
try {
|
||||
final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
|
||||
((SwitchPreference) mPreference)
|
||||
.setChecked(currentValue.equals(VERBOSE_VENDOR_LOG_ENABLED));
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Fail to get nfc system property: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDeveloperOptionsSwitchDisabled() {
|
||||
super.onDeveloperOptionsSwitchDisabled();
|
||||
try {
|
||||
SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
|
||||
((SwitchPreference) mPreference).setChecked(false);
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Fail to set nfc system property: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether the current setting is the default value or not.
|
||||
*/
|
||||
public boolean isDefaultValue() {
|
||||
try {
|
||||
final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
|
||||
return !currentValue.equals(VERBOSE_VENDOR_LOG_ENABLED);
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Fail to get nfc system property: " + e.getMessage());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the NfcRebootDialog confirm is clicked.
|
||||
*/
|
||||
public void onNfcRebootDialogConfirmed() {
|
||||
if (!mChanged) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
final String currentValue = SystemProperties
|
||||
.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
|
||||
if (currentValue.equals(VERBOSE_VENDOR_LOG_DISABLED)) {
|
||||
SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_ENABLED);
|
||||
} else {
|
||||
SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
|
||||
}
|
||||
updateState(mPreference);
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Fail to set nfc system property: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the NfcRebootDialog cancel is clicked.
|
||||
*/
|
||||
public void onNfcRebootDialogCanceled() {
|
||||
mChanged = false;
|
||||
}
|
||||
}
|
||||
@@ -697,12 +697,13 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
|
||||
|
||||
final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageData =
|
||||
DataProcessor.getBatteryUsageData(context, batteryHistoryMap);
|
||||
return batteryUsageData == null
|
||||
? null
|
||||
: batteryUsageData
|
||||
.get(BatteryChartViewModel.SELECTED_INDEX_ALL)
|
||||
.get(BatteryChartViewModel.SELECTED_INDEX_ALL)
|
||||
.getAppDiffEntryList();
|
||||
if (batteryUsageData == null) {
|
||||
return null;
|
||||
}
|
||||
BatteryDiffData allBatteryDiffData = batteryUsageData.get(
|
||||
BatteryChartViewModel.SELECTED_INDEX_ALL).get(
|
||||
BatteryChartViewModel.SELECTED_INDEX_ALL);
|
||||
return allBatteryDiffData == null ? null : allBatteryDiffData.getAppDiffEntryList();
|
||||
}
|
||||
|
||||
/** Used for {@link AppBatteryPreferenceController}. */
|
||||
|
||||
@@ -595,11 +595,13 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick
|
||||
|
||||
// Searches the corresponding trapezoid index from x location.
|
||||
private int getTrapezoidIndex(float x) {
|
||||
for (int index = 0; index < mTrapezoidSlots.length; index++) {
|
||||
final TrapezoidSlot slot = mTrapezoidSlots[index];
|
||||
if (x >= slot.mLeft - mTrapezoidHOffset
|
||||
&& x <= slot.mRight + mTrapezoidHOffset) {
|
||||
return index;
|
||||
if (mTrapezoidSlots != null) {
|
||||
for (int index = 0; index < mTrapezoidSlots.length; index++) {
|
||||
final TrapezoidSlot slot = mTrapezoidSlots[index];
|
||||
if (x >= slot.mLeft - mTrapezoidHOffset
|
||||
&& x <= slot.mRight + mTrapezoidHOffset) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
}
|
||||
return BatteryChartViewModel.SELECTED_INDEX_INVALID;
|
||||
|
||||
@@ -43,7 +43,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
|
||||
class LocaleDragAndDropAdapter
|
||||
extends RecyclerView.Adapter<LocaleDragAndDropAdapter.CustomViewHolder> {
|
||||
|
||||
@@ -154,8 +153,10 @@ class LocaleDragAndDropAdapter
|
||||
final LocaleDragCell dragCell = holder.getLocaleDragCell();
|
||||
final String label = feedItem.getFullNameNative();
|
||||
final String description = feedItem.getFullNameInUiLanguage();
|
||||
|
||||
dragCell.setLabelAndDescription(label, description);
|
||||
dragCell.setLocalized(feedItem.isTranslated());
|
||||
dragCell.setCurrentDefault(feedItem.getLocale().equals(Locale.getDefault()));
|
||||
dragCell.setMiniLabel(mNumberFormatter.format(i + 1));
|
||||
dragCell.setShowCheckbox(mRemoveMode);
|
||||
dragCell.setShowMiniLabel(!mRemoveMode);
|
||||
|
||||
@@ -33,6 +33,7 @@ class LocaleDragCell extends RelativeLayout {
|
||||
private CheckBox mCheckbox;
|
||||
private TextView mMiniLabel;
|
||||
private TextView mLocalized;
|
||||
private TextView mCurrentDefault;
|
||||
private ImageView mDragHandle;
|
||||
|
||||
public LocaleDragCell(Context context, AttributeSet attrs) {
|
||||
@@ -44,6 +45,7 @@ class LocaleDragCell extends RelativeLayout {
|
||||
super.onFinishInflate();
|
||||
mLabel = (TextView) findViewById(R.id.label);
|
||||
mLocalized = (TextView) findViewById(R.id.l10nWarn);
|
||||
mCurrentDefault = (TextView) findViewById(R.id.default_locale);
|
||||
mMiniLabel = (TextView) findViewById(R.id.miniLabel);
|
||||
mCheckbox = (CheckBox) findViewById(R.id.checkbox);
|
||||
mDragHandle = (ImageView) findViewById(R.id.dragHandle);
|
||||
@@ -100,6 +102,14 @@ class LocaleDragCell extends RelativeLayout {
|
||||
invalidate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate current locale is system default.
|
||||
*/
|
||||
public void setCurrentDefault(boolean isCurrentDefault) {
|
||||
mCurrentDefault.setVisibility(isCurrentDefault ? VISIBLE : GONE);
|
||||
invalidate();
|
||||
}
|
||||
|
||||
public ImageView getDragHandle() {
|
||||
return mDragHandle;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.localepicker;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settingslib.HelpUtils;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
import com.android.settingslib.widget.FooterPreference;
|
||||
|
||||
/**
|
||||
* A controller to update current locale information of application.
|
||||
*/
|
||||
public class LocaleHelperPreferenceController extends AbstractPreferenceController {
|
||||
private static final String TAG = LocaleHelperPreferenceController.class.getSimpleName();
|
||||
|
||||
private static final String KEY_FOOTER_LANGUAGE_PICKER = "footer_languages_picker";
|
||||
|
||||
public LocaleHelperPreferenceController(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAvailable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPreferenceKey() {
|
||||
return KEY_FOOTER_LANGUAGE_PICKER;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void displayPreference(PreferenceScreen screen) {
|
||||
super.displayPreference(screen);
|
||||
FooterPreference footerPreference = screen.findPreference(getPreferenceKey());
|
||||
updateFooterPreference(footerPreference);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void updateFooterPreference(FooterPreference footerPreference) {
|
||||
if (footerPreference != null) {
|
||||
footerPreference.setLearnMoreAction(v -> openLocaleLearnMoreLink());
|
||||
footerPreference.setLearnMoreText(mContext.getString(
|
||||
R.string.desc_locale_helper_footer_general));
|
||||
}
|
||||
}
|
||||
|
||||
private void openLocaleLearnMoreLink() {
|
||||
mContext.startActivity(
|
||||
HelpUtils.getHelpIntent(
|
||||
mContext,
|
||||
mContext.getString(R.string.link_locale_picker_footer_learn_more),
|
||||
/*backupContext=*/""));
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,7 @@ import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.android.internal.app.LocalePicker;
|
||||
@@ -46,6 +47,7 @@ import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.search.BaseSearchIndexProvider;
|
||||
import com.android.settingslib.search.SearchIndexable;
|
||||
import com.android.settingslib.search.SearchIndexableRaw;
|
||||
import com.android.settingslib.widget.LayoutPreference;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -64,6 +66,7 @@ public class LocaleListEditor extends RestrictedSettingsFragment {
|
||||
private static final int REQUEST_LOCALE_PICKER = 0;
|
||||
|
||||
private static final String INDEX_KEY_ADD_LANGUAGE = "add_language";
|
||||
private static final String KEY_LANGUAGES_PICKER = "languages_picker";
|
||||
|
||||
private LocaleDragAndDropAdapter mAdapter;
|
||||
private Menu mMenu;
|
||||
@@ -72,6 +75,9 @@ public class LocaleListEditor extends RestrictedSettingsFragment {
|
||||
private boolean mShowingRemoveDialog;
|
||||
private boolean mIsUiRestricted;
|
||||
|
||||
private LayoutPreference mLocalePickerPreference;
|
||||
private LocaleHelperPreferenceController mLocaleHelperPreferenceController;
|
||||
|
||||
public LocaleListEditor() {
|
||||
super(DISALLOW_CONFIG_LOCALE);
|
||||
}
|
||||
@@ -86,6 +92,14 @@ public class LocaleListEditor extends RestrictedSettingsFragment {
|
||||
super.onCreate(savedInstanceState);
|
||||
setHasOptionsMenu(true);
|
||||
|
||||
addPreferencesFromResource(R.xml.languages);
|
||||
final Activity activity = getActivity();
|
||||
activity.setTitle(R.string.language_picker_title);
|
||||
mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(activity);
|
||||
final PreferenceScreen screen = getPreferenceScreen();
|
||||
mLocalePickerPreference = screen.findPreference(KEY_LANGUAGES_PICKER);
|
||||
mLocaleHelperPreferenceController.displayPreference(screen);
|
||||
|
||||
LocaleStore.fillCache(this.getContext());
|
||||
final List<LocaleStore.LocaleInfo> feedsList = getUserLocaleList();
|
||||
mAdapter = new LocaleDragAndDropAdapter(this.getContext(), feedsList);
|
||||
@@ -93,11 +107,8 @@ public class LocaleListEditor extends RestrictedSettingsFragment {
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstState) {
|
||||
final View result = super.onCreateView(inflater, container, savedInstState);
|
||||
final View myLayout = inflater.inflate(R.layout.locale_order_list, (ViewGroup) result);
|
||||
|
||||
configureDragAndDrop(myLayout);
|
||||
return result;
|
||||
configureDragAndDrop(mLocalePickerPreference);
|
||||
return super.onCreateView(inflater, container, savedInstState);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -287,8 +298,8 @@ public class LocaleListEditor extends RestrictedSettingsFragment {
|
||||
return result;
|
||||
}
|
||||
|
||||
private void configureDragAndDrop(View view) {
|
||||
final RecyclerView list = view.findViewById(R.id.dragList);
|
||||
private void configureDragAndDrop(LayoutPreference layout) {
|
||||
final RecyclerView list = layout.findViewById(R.id.dragList);
|
||||
final LocaleLinearLayoutManager llm = new LocaleLinearLayoutManager(getContext(), mAdapter);
|
||||
llm.setAutoMeasureEnabled(true);
|
||||
list.setLayoutManager(llm);
|
||||
@@ -297,7 +308,7 @@ public class LocaleListEditor extends RestrictedSettingsFragment {
|
||||
mAdapter.setRecyclerView(list);
|
||||
list.setAdapter(mAdapter);
|
||||
|
||||
mAddLanguage = view.findViewById(R.id.add_language);
|
||||
mAddLanguage = layout.findViewById(R.id.add_language);
|
||||
mAddLanguage.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
|
||||
@@ -22,7 +22,6 @@ import static org.robolectric.RuntimeEnvironment.application;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.widget.Button;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
|
||||
@@ -66,6 +65,23 @@ public class SetupFingerprintEnrollFindSensorTest {
|
||||
|
||||
@Test
|
||||
public void fingerprintEnroll_showsAlert_whenClickingSkip() {
|
||||
final AlertDialog alertDialog = setupAlertDialog();
|
||||
final ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(
|
||||
alertDialog);
|
||||
final int titleRes = R.string.setup_fingerprint_enroll_skip_title;
|
||||
|
||||
assertThat(application.getString(titleRes)).isEqualTo(shadowAlertDialog.getTitle());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fingerprintEnroll_showsAlert_setSudTheme() {
|
||||
final AlertDialog alertDialog = setupAlertDialog();
|
||||
|
||||
assertThat(alertDialog.getContext().getThemeResId()).isEqualTo(
|
||||
R.style.GlifV2ThemeAlertDialog);
|
||||
}
|
||||
|
||||
private AlertDialog setupAlertDialog() {
|
||||
final Intent intent = new Intent()
|
||||
// Set the challenge token so the confirm screen will not be shown
|
||||
.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, new byte[0]);
|
||||
@@ -80,9 +96,6 @@ public class SetupFingerprintEnrollFindSensorTest {
|
||||
final AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
assertThat(alertDialog).isNotNull();
|
||||
|
||||
final ShadowAlertDialogCompat shadowAlertDialog = ShadowAlertDialogCompat.shadowOf(
|
||||
alertDialog);
|
||||
final int titleRes = R.string.setup_fingerprint_enroll_skip_title;
|
||||
assertThat(application.getString(titleRes)).isEqualTo(shadowAlertDialog.getTitle());
|
||||
return alertDialog;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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 static com.android.settings.development.NfcSnoopLogPreferenceController
|
||||
.NFCSNOOP_MODE_FILTERED;
|
||||
import static com.android.settings.development.NfcSnoopLogPreferenceController
|
||||
.NFCSNOOP_MODE_FULL;
|
||||
import static com.android.settings.development.NfcSnoopLogPreferenceController
|
||||
.NFC_NFCSNOOP_LOG_MODE_PROPERTY;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.SystemProperties;
|
||||
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class NfcSnoopLogPreferenceControllerTest {
|
||||
@Mock
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
@Mock
|
||||
private DevelopmentSettingsDashboardFragment mFragment;
|
||||
|
||||
private Context mContext;
|
||||
private SwitchPreference mPreference;
|
||||
private NfcSnoopLogPreferenceController mController;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mPreference = new SwitchPreference(mContext);
|
||||
mController = spy(new NfcSnoopLogPreferenceController(mContext, mFragment));
|
||||
when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
|
||||
.thenReturn(mPreference);
|
||||
mController.displayPreference(mPreferenceScreen);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onNfcRebootDialogConfirmed_nfcSnoopLogDisabled_shouldChangeProperty() {
|
||||
SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
|
||||
mController.mChanged = true;
|
||||
|
||||
mController.onNfcRebootDialogConfirmed();
|
||||
|
||||
final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
|
||||
assertThat(currentValue.equals(NFCSNOOP_MODE_FULL)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onNfcRebootDialogConfirmed_nfcSnoopLogEnabled_shouldChangeProperty() {
|
||||
SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FULL);
|
||||
mController.mChanged = true;
|
||||
|
||||
mController.onNfcRebootDialogConfirmed();
|
||||
|
||||
final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
|
||||
assertThat(currentValue.equals(NFCSNOOP_MODE_FILTERED)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onNfcRebootDialogCanceled_shouldNotChangeProperty() {
|
||||
SystemProperties.set(NFC_NFCSNOOP_LOG_MODE_PROPERTY, NFCSNOOP_MODE_FILTERED);
|
||||
mController.mChanged = true;
|
||||
|
||||
mController.onNfcRebootDialogCanceled();
|
||||
|
||||
final String currentValue = SystemProperties.get(NFC_NFCSNOOP_LOG_MODE_PROPERTY);
|
||||
assertThat(currentValue.equals(NFCSNOOP_MODE_FILTERED)).isTrue();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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 static com.android.settings.development.NfcVerboseVendorLogPreferenceController
|
||||
.NFC_VERBOSE_VENDOR_LOG_PROPERTY;
|
||||
import static com.android.settings.development.NfcVerboseVendorLogPreferenceController
|
||||
.VERBOSE_VENDOR_LOG_DISABLED;
|
||||
import static com.android.settings.development.NfcVerboseVendorLogPreferenceController
|
||||
.VERBOSE_VENDOR_LOG_ENABLED;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.SystemProperties;
|
||||
|
||||
import androidx.preference.PreferenceScreen;
|
||||
import androidx.preference.SwitchPreference;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class NfcVerboseVendorLogPreferenceControllerTest {
|
||||
@Mock
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
@Mock
|
||||
private DevelopmentSettingsDashboardFragment mFragment;
|
||||
|
||||
private Context mContext;
|
||||
private SwitchPreference mPreference;
|
||||
private NfcVerboseVendorLogPreferenceController mController;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mPreference = new SwitchPreference(mContext);
|
||||
mController = spy(new NfcVerboseVendorLogPreferenceController(mContext, mFragment));
|
||||
when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
|
||||
.thenReturn(mPreference);
|
||||
mController.displayPreference(mPreferenceScreen);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onNfcRebootDialogConfirmed_nfcVendorLogDisabled_shouldChangeProperty() {
|
||||
SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
|
||||
mController.mChanged = true;
|
||||
|
||||
mController.onNfcRebootDialogConfirmed();
|
||||
|
||||
final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
|
||||
assertThat(currentValue.equals(VERBOSE_VENDOR_LOG_ENABLED)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onNfcRebootDialogConfirmed_nfcVendorLogEnabled_shouldChangeProperty() {
|
||||
SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_ENABLED);
|
||||
mController.mChanged = true;
|
||||
|
||||
mController.onNfcRebootDialogConfirmed();
|
||||
|
||||
final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
|
||||
assertThat(currentValue.equals(VERBOSE_VENDOR_LOG_DISABLED)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onNfcRebootDialogCanceled_shouldNotChangeProperty() {
|
||||
SystemProperties.set(NFC_VERBOSE_VENDOR_LOG_PROPERTY, VERBOSE_VENDOR_LOG_DISABLED);
|
||||
mController.mChanged = true;
|
||||
|
||||
mController.onNfcRebootDialogCanceled();
|
||||
|
||||
final String currentValue = SystemProperties.get(NFC_VERBOSE_VENDOR_LOG_PROPERTY);
|
||||
assertThat(currentValue.equals(VERBOSE_VENDOR_LOG_DISABLED)).isTrue();
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,6 @@ package com.android.settings.applications.appinfo;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.FeatureFlagUtils;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
@@ -49,22 +48,10 @@ public class AppLocalePreferenceControllerTest {
|
||||
return mCanDisplayLocaleUi;
|
||||
}
|
||||
};
|
||||
FeatureFlagUtils
|
||||
.setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_canShowUiButFeatureFlagOff_shouldReturnUnavailable() {
|
||||
mCanDisplayLocaleUi = true;
|
||||
FeatureFlagUtils
|
||||
.setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, false);
|
||||
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_canShowUiAndFeatureFlagOn_shouldReturnAvailable() {
|
||||
public void getAvailabilityStatus_canShowUi_shouldReturnAvailable() {
|
||||
mCanDisplayLocaleUi = true;
|
||||
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
@@ -72,20 +59,10 @@ public class AppLocalePreferenceControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_featureFlagOnButCanNotShowUi_shouldReturnUnavailable() {
|
||||
public void getAvailabilityStatus_canNotShowUi_shouldReturnUnavailable() {
|
||||
mCanDisplayLocaleUi = false;
|
||||
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_featureFlagOffAndCanNotShowUi_shouldReturnUnavailable() {
|
||||
mCanDisplayLocaleUi = false;
|
||||
FeatureFlagUtils
|
||||
.setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, false);
|
||||
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2021 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.applications.appinfo;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.spy;
|
||||
|
||||
import android.content.Context;
|
||||
import android.util.FeatureFlagUtils;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ManageAppLocalePreferenceControllerTest {
|
||||
private Context mContext;
|
||||
private ManageAppLocalePreferenceController mController;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||
mController = spy(new ManageAppLocalePreferenceController(mContext, "a key"));
|
||||
|
||||
FeatureFlagUtils
|
||||
.setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_featureFlagOff_shouldReturnUnavailable() {
|
||||
FeatureFlagUtils
|
||||
.setEnabled(mContext, FeatureFlagUtils.SETTINGS_APP_LANGUAGE_SELECTION, false);
|
||||
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_featureFlagOn_shouldReturnAvailable() {
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.AVAILABLE);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (C) 2022 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.localepicker;
|
||||
|
||||
import static org.mockito.Mockito.anyString;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
import android.content.Context;
|
||||
import android.os.Looper;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import com.android.settingslib.widget.FooterPreference;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class LocaleHelperPreferenceControllerTest {
|
||||
private Context mContext;
|
||||
private LocaleHelperPreferenceController mLocaleHelperPreferenceController;
|
||||
|
||||
@Mock
|
||||
private FooterPreference mMockFooterPreference;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
if (Looper.myLooper() == null) {
|
||||
Looper.prepare();
|
||||
}
|
||||
mContext = ApplicationProvider.getApplicationContext();
|
||||
mLocaleHelperPreferenceController = new LocaleHelperPreferenceController(mContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateFooterPreference_setFooterPreference_hasClickAction() {
|
||||
mLocaleHelperPreferenceController.updateFooterPreference(mMockFooterPreference);
|
||||
verify(mMockFooterPreference).setLearnMoreText(anyString());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user