Merge "Remove usage of PER_PROFILE_IME_ENABLED property in settings"
diff --git a/OWNERS b/OWNERS
index ccf8e81..2d421ac 100644
--- a/OWNERS
+++ b/OWNERS
@@ -2,21 +2,18 @@
pixel-sw-exp-reviews+gerrit@google.com
# People who can approve changes for submission
-asapperstein@google.com
-asargent@google.com
-dehboxturtle@google.com
-dhnishi@google.com
+chiujason@google.com
edgarwang@google.com
emilychuang@google.com
-jackqdyulei@google.com
-lindatseng@google.com
-mfritze@google.com
+millchen@google.com
rafftsai@google.com
+stanleytfwang@google.com
+sunnyshao@google.com
tmfang@google.com
-zhfan@google.com
+yantingyang@google.com
# Emergency approvers in case the above are not available
-miket@google.com
+zhfan@google.com
# Exempt resource files (because they are in a flat directory and too hard to manage via OWNERS)
per-file *.xml=*
diff --git a/res/drawable/tile_icon_sensors_off.xml b/res/drawable/tile_icon_sensors_off.xml
index 890fa83..b9b3500 100644
--- a/res/drawable/tile_icon_sensors_off.xml
+++ b/res/drawable/tile_icon_sensors_off.xml
@@ -18,7 +18,8 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
- android:viewportHeight="24.0">
+ android:viewportHeight="24.0"
+ android:tint="?android:attr/colorControlNormal">
<path
android:pathData="M21.966,2 L2,22"
android:strokeLineCap="round"
diff --git a/res/layout/edit_user_info_dialog_content.xml b/res/layout/edit_user_info_dialog_content.xml
index 4d76e13..30ae1d8 100644
--- a/res/layout/edit_user_info_dialog_content.xml
+++ b/res/layout/edit_user_info_dialog_content.xml
@@ -44,6 +44,7 @@
android:labelFor="@id/user_photo"
android:inputType="text|textCapWords"
android:selectAllOnFocus="true"
- android:hint="@string/user_nickname"/>
+ android:hint="@string/user_nickname"
+ android:maxLength="100"/>
</LinearLayout>
diff --git a/res/layout/wifi_dpp_add_device_fragment.xml b/res/layout/wifi_dpp_add_device_fragment.xml
index b7232f6..8ad6391 100644
--- a/res/layout/wifi_dpp_add_device_fragment.xml
+++ b/res/layout/wifi_dpp_add_device_fragment.xml
@@ -35,7 +35,8 @@
android:layout_height="wrap_content"
android:layout_marginStart="?attr/sudMarginSides"
android:layout_marginEnd="?attr/sudMarginSides"
- android:textAlignment="center"/>
+ android:textAlignment="center"
+ android:accessibilityLiveRegion="polite"/>
<LinearLayout
android:layout_width="match_parent"
diff --git a/res/layout/wifi_dpp_choose_saved_wifi_network_fragment.xml b/res/layout/wifi_dpp_choose_saved_wifi_network_fragment.xml
index 397520b..534f32e 100644
--- a/res/layout/wifi_dpp_choose_saved_wifi_network_fragment.xml
+++ b/res/layout/wifi_dpp_choose_saved_wifi_network_fragment.xml
@@ -35,7 +35,8 @@
android:layout_height="wrap_content"
android:layout_marginStart="?attr/sudMarginSides"
android:layout_marginEnd="?attr/sudMarginSides"
- android:textAlignment="center"/>
+ android:textAlignment="center"
+ android:accessibilityLiveRegion="polite"/>
<LinearLayout android:id="@+id/wifi_network_list_container"
android:layout_width="match_parent"
diff --git a/res/layout/wifi_dpp_qrcode_generator_fragment.xml b/res/layout/wifi_dpp_qrcode_generator_fragment.xml
index 2512f06..1f8b37c 100644
--- a/res/layout/wifi_dpp_qrcode_generator_fragment.xml
+++ b/res/layout/wifi_dpp_qrcode_generator_fragment.xml
@@ -35,7 +35,8 @@
android:layout_height="wrap_content"
android:layout_marginStart="?attr/sudMarginSides"
android:layout_marginEnd="?attr/sudMarginSides"
- android:textAlignment="center"/>
+ android:textAlignment="center"
+ android:accessibilityLiveRegion="polite"/>
<LinearLayout
android:layout_width="match_parent"
diff --git a/res/layout/wifi_dpp_qrcode_scanner_fragment.xml b/res/layout/wifi_dpp_qrcode_scanner_fragment.xml
index c9f41ac..3d1e99b 100644
--- a/res/layout/wifi_dpp_qrcode_scanner_fragment.xml
+++ b/res/layout/wifi_dpp_qrcode_scanner_fragment.xml
@@ -35,7 +35,8 @@
android:layout_height="wrap_content"
android:layout_marginStart="?attr/sudMarginSides"
android:layout_marginEnd="?attr/sudMarginSides"
- android:textAlignment="center"/>
+ android:textAlignment="center"
+ android:accessibilityLiveRegion="polite"/>
<LinearLayout
android:layout_width="match_parent"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index db2231f..cacb882 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4950,6 +4950,8 @@
<string name="accessibility_daltonizer_master_switch_title">Use color correction</string>
<!-- Used in the Captions settings screen to control turning on/off the feature entirely -->
<string name="accessibility_caption_master_switch_title">Use captions</string>
+ <!-- Used in the Captions preference to tell users that the setting doesn't support all apps. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_caption_preference_summary">Not all apps support this setting.</string>
<!-- Button text for the accessibility dialog continue to the next screen for hearing aid. [CHAR LIMIT=32] -->
<string name="accessibility_hearingaid_instruction_continue_button">Continue</string>
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index ec8e31d..13bc330 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -40,8 +40,7 @@
android:key="tts_settings_preference"
android:title="@string/tts_settings_title"
android:fragment="com.android.settings.tts.TextToSpeechSettings"
- settings:controller="com.android.settings.language.TtsPreferenceController"
- settings:searchable="false"/>
+ settings:controller="com.android.settings.language.TtsPreferenceController"/>
</PreferenceCategory>
<PreferenceCategory
@@ -101,8 +100,7 @@
android:title="@string/accessibility_power_button_ends_call_prerefence_title"
android:persistent="false"
settings:controller="com.android.settings.accessibility.PowerButtonEndsCallPreferenceController"/>
-
-
+
<SwitchPreference
android:key="toggle_lock_screen_rotation_preference"
android:title="@string/accelerometer_title"
@@ -156,7 +154,8 @@
<Preference
android:key="hearing_aid_preference"
android:summary="@string/accessibility_hearingaid_not_connected_summary"
- android:title="@string/accessibility_hearingaid_title"/>
+ android:title="@string/accessibility_hearingaid_title"
+ settings:controller="com.android.settings.accessibility.AccessibilityHearingAidPreferenceController"/>
<Preference
android:key="captioning_preference_screen"
diff --git a/res/xml/captioning_settings.xml b/res/xml/captioning_settings.xml
index 715a506..d8dabdc 100644
--- a/res/xml/captioning_settings.xml
+++ b/res/xml/captioning_settings.xml
@@ -92,4 +92,8 @@
android:title="@string/captioning_window_opacity" />
</PreferenceCategory>
+ <com.android.settingslib.widget.FooterPreference
+ android:title="@string/accessibility_caption_preference_summary"
+ android:selectable="false" />
+
</PreferenceScreen>
diff --git a/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceController.java
index 641d8ca..8f0ca3e 100644
--- a/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceController.java
@@ -31,9 +31,6 @@
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.FragmentManager;
-import androidx.lifecycle.Lifecycle.Event;
-import androidx.lifecycle.LifecycleObserver;
-import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -43,6 +40,9 @@
import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
import java.util.Iterator;
import java.util.List;
@@ -53,7 +53,7 @@
* Controller that shows and updates the bluetooth device name
*/
public class AccessibilityHearingAidPreferenceController extends BasePreferenceController
- implements LifecycleObserver {
+ implements LifecycleObserver, OnStart, OnStop {
private static final String TAG = "AccessibilityHearingAidPreferenceController";
private Preference mHearingAidPreference;
@@ -104,8 +104,8 @@
return mHearingAidProfileSupported ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
- @OnLifecycleEvent(Event.ON_RESUME)
- public void onResume() {
+ @Override
+ public void onStart() {
if (mHearingAidProfileSupported) {
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
@@ -114,8 +114,8 @@
}
}
- @OnLifecycleEvent(Event.ON_PAUSE)
- public void onPause() {
+ @Override
+ public void onStop() {
if (mHearingAidProfileSupported) {
mContext.unregisterReceiver(mHearingAidChangedReceiver);
}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index afbde7f..e4df675 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -94,17 +94,10 @@
private static final String TOGGLE_LARGE_POINTER_ICON =
"toggle_large_pointer_icon";
private static final String TOGGLE_DISABLE_ANIMATIONS = "toggle_disable_animations";
- private static final String HEARING_AID_PREFERENCE =
- "hearing_aid_preference";
private static final String DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN =
"magnification_preference_screen";
private static final String DISPLAY_DALTONIZER_PREFERENCE_SCREEN =
"daltonizer_preference";
- private static final String DARK_UI_MODE_PREFERENCE =
- "dark_ui_mode_accessibility";
- private static final String LIVE_CAPTION_PREFERENCE_KEY =
- "live_caption";
-
// Extras passed to sub-fragments.
static final String EXTRA_PREFERENCE_KEY = "preference_key";
@@ -178,13 +171,7 @@
private SwitchPreference mToggleDisableAnimationsPreference;
private Preference mDisplayMagnificationPreferenceScreen;
private Preference mDisplayDaltonizerPreferenceScreen;
- private Preference mHearingAidPreference;
- private Preference mLiveCaptionPreference;
private SwitchPreference mToggleInversionPreference;
- private AccessibilityHearingAidPreferenceController mHearingAidPreferenceController;
- private SwitchPreference mDarkUIModePreference;
- private DarkUIPreferenceController mDarkUIPreferenceController;
- private LiveCaptionPreferenceController mLiveCaptionPreferenceController;
private DevicePolicyManager mDpm;
@@ -236,13 +223,9 @@
@Override
public void onAttach(Context context) {
super.onAttach(context);
- mHearingAidPreferenceController = new AccessibilityHearingAidPreferenceController
- (context, HEARING_AID_PREFERENCE);
- mHearingAidPreferenceController.setFragmentManager(getFragmentManager());
- getLifecycle().addObserver(mHearingAidPreferenceController);
-
- mLiveCaptionPreferenceController = new LiveCaptionPreferenceController(context,
- LIVE_CAPTION_PREFERENCE_KEY);
+ use(DarkUIPreferenceController.class).setParentFragment(this);
+ use(AccessibilityHearingAidPreferenceController.class)
+ .setFragmentManager(getFragmentManager());
}
@Override
@@ -262,14 +245,6 @@
}
@Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (mHearingAidPreferenceController.handlePreferenceTreeClick(preference)) {
- return true;
- }
- return super.onPreferenceTreeClick(preference);
- }
-
- @Override
protected int getPreferenceScreenResId() {
return R.xml.accessibility_settings;
}
@@ -318,27 +293,12 @@
mToggleDisableAnimationsPreference =
(SwitchPreference) findPreference(TOGGLE_DISABLE_ANIMATIONS);
- // Hearing Aid.
- mHearingAidPreference = findPreference(HEARING_AID_PREFERENCE);
- mHearingAidPreferenceController.displayPreference(getPreferenceScreen());
-
- // Live caption
- mLiveCaptionPreference = findPreference(LIVE_CAPTION_PREFERENCE_KEY);
- mLiveCaptionPreferenceController.displayPreference(getPreferenceScreen());
-
// Display magnification.
mDisplayMagnificationPreferenceScreen = findPreference(
DISPLAY_MAGNIFICATION_PREFERENCE_SCREEN);
// Display color adjustments.
mDisplayDaltonizerPreferenceScreen = findPreference(DISPLAY_DALTONIZER_PREFERENCE_SCREEN);
-
- // Dark Mode.
- mDarkUIModePreference = findPreference(DARK_UI_MODE_PREFERENCE);
- mDarkUIPreferenceController = new DarkUIPreferenceController(getContext(),
- DARK_UI_MODE_PREFERENCE);
- mDarkUIPreferenceController.setParentFragment(this);
- mDarkUIPreferenceController.displayPreference(getPreferenceScreen());
}
private void updateAllPreferences() {
@@ -544,13 +504,6 @@
displayCategory.addPreference(mToggleInversionPreference);
displayCategory.addPreference(mDisplayDaltonizerPreferenceScreen);
}
-
- // Dark Mode
- mDarkUIPreferenceController.updateState(mDarkUIModePreference);
-
- mHearingAidPreferenceController.updateState(mHearingAidPreference);
-
- mLiveCaptionPreferenceController.updateState(mLiveCaptionPreference);
}
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
index 5b30870..99d96dd 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
@@ -212,12 +212,12 @@
} else {
intent.setClass(this, FaceEnrollEnrolling.class);
}
- intent.putExtra(EXTRA_KEY_REQUIRE_DIVERSITY, !mSwitchDiversity.isChecked());
+ WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
if (mResultIntent != null) {
intent.putExtras(mResultIntent);
}
mNextClicked = true;
- WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
+ intent.putExtra(EXTRA_KEY_REQUIRE_DIVERSITY, !mSwitchDiversity.isChecked());
startActivityForResult(intent, BIOMETRIC_FIND_SENSOR_REQUEST);
}
diff --git a/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java b/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
index 18138d5..5015fba 100644
--- a/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
@@ -32,6 +32,13 @@
}
@Override
+ public int getAvailabilityStatus() {
+ // Make the profile unsearchable so the user preference controller gets highlighted
+ // when searched for.
+ return AVAILABLE_UNSEARCHABLE;
+ }
+
+ @Override
protected boolean isUserSupported() {
return mProfileChallengeUserId != UserHandle.USER_NULL
&& mLockPatternUtils.isSeparateProfileChallengeAllowed(mProfileChallengeUserId);
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java
index 70c00e5..a54171e 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsAppPreferenceController.java
@@ -78,6 +78,19 @@
@Override
public int getAvailabilityStatus() {
- return AVAILABLE;
+ if(mFaceManager == null){
+ return AVAILABLE_UNSEARCHABLE;
+ }
+
+ // By only allowing this preference controller to be searchable when the feature is turned
+ // off, it will give preference to the face setup controller.
+ final boolean hasEnrolledUser = mFaceManager.hasEnrolledTemplates(getUserId());
+ final boolean appUnlockEnabled = Settings.Secure.getIntForUser(
+ mContext.getContentResolver(), FACE_UNLOCK_APP_ENABLED, OFF, getUserId()) == ON;
+ if (hasEnrolledUser && !appUnlockEnabled) {
+ return AVAILABLE;
+ } else {
+ return AVAILABLE_UNSEARCHABLE;
+ }
}
}
diff --git a/src/com/android/settings/development/OemUnlockPreferenceController.java b/src/com/android/settings/development/OemUnlockPreferenceController.java
index 529970a..f8a245f 100644
--- a/src/com/android/settings/development/OemUnlockPreferenceController.java
+++ b/src/com/android/settings/development/OemUnlockPreferenceController.java
@@ -22,11 +22,13 @@
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
-import android.os.Build;
+import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
import android.service.oemlock.OemLockManager;
import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -43,6 +45,9 @@
private static final String PREFERENCE_KEY = "oem_unlock_enable";
private static final String TAG = "OemUnlockPreferenceController";
+ private static final String OEM_UNLOCK_SUPPORTED_KEY = "ro.oem_unlock_supported";
+ private static final String UNSUPPORTED = "-9999";
+ private static final String SUPPORTED = "1";
private final OemLockManager mOemLockManager;
private final UserManager mUserManager;
@@ -55,8 +60,10 @@
DevelopmentSettingsDashboardFragment fragment) {
super(context);
- if (Build.IS_EMULATOR && Build.IS_ENG) {
+ if (!TextUtils.equals(SystemProperties.get(OEM_UNLOCK_SUPPORTED_KEY, UNSUPPORTED),
+ SUPPORTED)) {
mOemLockManager = null;
+ Log.w(TAG, "oem_unlock not supported.");
} else {
mOemLockManager = (OemLockManager) context.getSystemService(Context.OEM_LOCK_SERVICE);
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 880255b..b0ab5ee 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -291,6 +291,8 @@
switch (item.getItemId()) {
case MENU_STATS_TYPE:
if (mStatsType == BatteryStats.STATS_SINCE_CHARGED) {
+ // TODO: STATS_SINCE_UNPLUGGED is deprecated in Q, so this accomplishes nothing,
+ // but mStatsType doesn't seem to be hooked up to anything anyway.
mStatsType = BatteryStats.STATS_SINCE_UNPLUGGED;
} else {
mStatsType = BatteryStats.STATS_SINCE_CHARGED;
diff --git a/src/com/android/settings/password/SetupChooseLockGeneric.java b/src/com/android/settings/password/SetupChooseLockGeneric.java
index 9a165297..aa17f8e 100644
--- a/src/com/android/settings/password/SetupChooseLockGeneric.java
+++ b/src/com/android/settings/password/SetupChooseLockGeneric.java
@@ -111,7 +111,7 @@
layout.setIcon(getContext().getDrawable(R.drawable.ic_lock));
- int titleResource = mForFingerprint ?
+ int titleResource = isForBiometric() ?
R.string.lock_settings_picker_title : R.string.setup_lock_settings_picker_title;
if (getActivity() != null) {
getActivity().setTitle(titleResource);
@@ -125,7 +125,7 @@
@Override
protected void addHeaderView() {
- if (mForFingerprint || mForFace) {
+ if (isForBiometric()) {
setHeaderView(R.layout.setup_choose_lock_generic_biometrics_header);
} else {
setHeaderView(R.layout.setup_choose_lock_generic_header);
@@ -183,7 +183,7 @@
@Override
protected void addPreferences() {
- if (mForFingerprint) {
+ if (isForBiometric()) {
super.addPreferences();
} else {
addPreferencesFromResource(R.xml.setup_security_settings_picker);
@@ -240,6 +240,10 @@
SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent);
return intent;
}
+
+ private boolean isForBiometric() {
+ return mForFingerprint || mForFace;
+ }
}
public static class InternalActivity extends ChooseLockGeneric.InternalActivity {
@@ -261,5 +265,4 @@
}
}
}
-
}
diff --git a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
index fcd9978..4e6337a 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppAddDeviceFragment.java
@@ -100,21 +100,24 @@
}
private void showErrorUi(int code, boolean isConfigurationChange) {
+ CharSequence summaryCharSequence;
switch (code) {
case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_INVALID_URI:
- mSummary.setText(R.string.wifi_dpp_qr_code_is_not_valid_format);
+ summaryCharSequence = getText(R.string.wifi_dpp_qr_code_is_not_valid_format);
break;
case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_AUTHENTICATION:
- mSummary.setText(R.string.wifi_dpp_failure_authentication_or_configuration);
+ summaryCharSequence = getText(
+ R.string.wifi_dpp_failure_authentication_or_configuration);
break;
case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_NOT_COMPATIBLE:
- mSummary.setText(R.string.wifi_dpp_failure_not_compatible);
+ summaryCharSequence = getText(R.string.wifi_dpp_failure_not_compatible);
break;
case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_CONFIGURATION:
- mSummary.setText(R.string.wifi_dpp_failure_authentication_or_configuration);
+ summaryCharSequence = getText(
+ R.string.wifi_dpp_failure_authentication_or_configuration);
break;
case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_BUSY:
@@ -135,15 +138,16 @@
return;
case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_TIMEOUT:
- mSummary.setText(R.string.wifi_dpp_failure_timeout);
+ summaryCharSequence = getText(R.string.wifi_dpp_failure_timeout);
break;
case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_GENERIC:
- mSummary.setText(R.string.wifi_dpp_failure_generic);
+ summaryCharSequence = getText(R.string.wifi_dpp_failure_generic);
break;
case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_NOT_SUPPORTED:
- mSummary.setText(getString(R.string.wifi_dpp_failure_not_supported, getSsid()));
+ summaryCharSequence = getString(
+ R.string.wifi_dpp_failure_not_supported, getSsid());
break;
case EasyConnectStatusCallback.EASY_CONNECT_EVENT_FAILURE_INVALID_NETWORK:
@@ -155,6 +159,7 @@
}
setHeaderTitle(R.string.wifi_dpp_could_not_add_device);
+ mSummary.setText(summaryCharSequence);
mWifiApPictureView.setImageResource(R.drawable.wifi_dpp_error);
mChooseDifferentNetwork.setVisibility(View.INVISIBLE);
if (hasRetryButton(code)) {
diff --git a/src/com/android/settings/wifi/dpp/WifiDppBaseActivity.java b/src/com/android/settings/wifi/dpp/WifiDppBaseActivity.java
new file mode 100644
index 0000000..a7daee6
--- /dev/null
+++ b/src/com/android/settings/wifi/dpp/WifiDppBaseActivity.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2019 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.wifi.dpp;
+
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+
+import androidx.fragment.app.FragmentManager;
+
+import com.android.settings.R;
+import com.android.settings.SetupWizardUtils;
+import com.android.settings.core.InstrumentedActivity;
+
+abstract class WifiDppBaseActivity extends InstrumentedActivity {
+ protected FragmentManager mFragmentManager;
+
+ protected abstract void handleIntent(Intent intent);
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.wifi_dpp_activity);
+ mFragmentManager = getSupportFragmentManager();
+
+ if (savedInstanceState == null) {
+ handleIntent(getIntent());
+ }
+ }
+
+ @Override
+ protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
+ resid = SetupWizardUtils.getTheme(getIntent());
+ theme.applyStyle(R.style.SetupWizardPartnerResource, /* force */ true);
+ super.onApplyThemeResource(theme, resid, first);
+ }
+}
diff --git a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
index 4a5566d..e7ea704 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
@@ -18,7 +18,6 @@
import android.app.settings.SettingsEnums;
import android.content.Intent;
-import android.content.res.Resources;
import android.net.Uri;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
@@ -29,12 +28,9 @@
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.android.settings.R;
-import com.android.settings.SetupWizardUtils;
-import com.android.settings.core.InstrumentedActivity;
import java.util.List;
@@ -55,9 +51,8 @@
* For intent action {@link Settings#ACTION_PROCESS_WIFI_EASY_CONNECT_URI}, specify Wi-Fi
* Easy Connect bootstrapping information string in Intent's data URI.
*/
-public class WifiDppConfiguratorActivity extends InstrumentedActivity implements
+public class WifiDppConfiguratorActivity extends WifiDppBaseActivity implements
WifiNetworkConfig.Retriever,
- WifiDppQrCodeGeneratorFragment.OnQrCodeGeneratorFragmentAddButtonClickedListener,
WifiDppQrCodeScannerFragment.OnScanWifiDppSuccessListener,
WifiDppAddDeviceFragment.OnClickChooseDifferentNetworkListener,
WifiNetworkListFragment.OnChooseNetworkListener {
@@ -78,8 +73,6 @@
private static final String KEY_WIFI_NETWORK_ID = "key_wifi_network_id";
private static final String KEY_IS_HOTSPOT = "key_is_hotspot";
- private FragmentManager mFragmentManager;
-
/** The Wi-Fi network which will be configured */
private WifiNetworkConfig mWifiNetworkConfig;
@@ -95,19 +88,9 @@
}
@Override
- protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
- resid = SetupWizardUtils.getTheme(getIntent());
- theme.applyStyle(R.style.SetupWizardPartnerResource, /* force */ true);
- super.onApplyThemeResource(theme, resid, first);
- }
-
- @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.wifi_dpp_activity);
- mFragmentManager = getSupportFragmentManager();
-
if (savedInstanceState != null) {
String qrCode = savedInstanceState.getString(KEY_QR_CODE);
@@ -122,12 +105,11 @@
mWifiNetworkConfig = WifiNetworkConfig.getValidConfigOrNull(security, ssid,
preSharedKey, hiddenSsid, networkId, isHotspot);
- } else {
- handleIntent(getIntent());
}
}
- private void handleIntent(Intent intent) {
+ @Override
+ protected void handleIntent(Intent intent) {
boolean cancelActivity = false;
WifiNetworkConfig config;
switch (intent.getAction()) {
@@ -137,7 +119,7 @@
cancelActivity = true;
} else {
mWifiNetworkConfig = config;
- showQrCodeScannerFragment(/* addToBackStack= */ false);
+ showQrCodeScannerFragment();
}
break;
case ACTION_CONFIGURATOR_QR_CODE_GENERATOR:
@@ -180,7 +162,7 @@
}
}
- private void showQrCodeScannerFragment(boolean addToBackStack) {
+ private void showQrCodeScannerFragment() {
WifiDppQrCodeScannerFragment fragment =
(WifiDppQrCodeScannerFragment) mFragmentManager.findFragmentByTag(
WifiDppUtils.TAG_FRAGMENT_QR_CODE_SCANNER);
@@ -201,9 +183,6 @@
fragmentTransaction.replace(R.id.fragment_container, fragment,
WifiDppUtils.TAG_FRAGMENT_QR_CODE_SCANNER);
- if (addToBackStack) {
- fragmentTransaction.addToBackStack(/* name */ null);
- }
fragmentTransaction.commit();
}
@@ -324,11 +303,6 @@
}
@Override
- public void onQrCodeGeneratorFragmentAddButtonClicked() {
- showQrCodeScannerFragment(/* addToBackStack */ true);
- }
-
- @Override
public void onScanWifiDppSuccess(WifiQrCode wifiQrCode) {
mWifiDppQrCode = wifiQrCode;
diff --git a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
index d299649..55af79d 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppEnrolleeActivity.java
@@ -18,17 +18,12 @@
import android.app.settings.SettingsEnums;
import android.content.Intent;
-import android.content.res.Resources;
-import android.os.Bundle;
import android.util.Log;
import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.android.settings.R;
-import com.android.settings.SetupWizardUtils;
-import com.android.settings.core.InstrumentedActivity;
/**
* To provision "this" device with specified Wi-Fi network.
@@ -36,40 +31,20 @@
* To use intent action {@code ACTION_ENROLLEE_QR_CODE_SCANNER}, specify the SSID string of the
* Wi-Fi network to be provisioned in {@code WifiDppUtils.EXTRA_WIFI_SSID}.
*/
-public class WifiDppEnrolleeActivity extends InstrumentedActivity implements
+public class WifiDppEnrolleeActivity extends WifiDppBaseActivity implements
WifiDppQrCodeScannerFragment.OnScanWifiDppSuccessListener {
private static final String TAG = "WifiDppEnrolleeActivity";
public static final String ACTION_ENROLLEE_QR_CODE_SCANNER =
"android.settings.WIFI_DPP_ENROLLEE_QR_CODE_SCANNER";
- private FragmentManager mFragmentManager;
-
@Override
public int getMetricsCategory() {
return SettingsEnums.SETTINGS_WIFI_DPP_ENROLLEE;
}
@Override
- protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) {
- resid = SetupWizardUtils.getTheme(getIntent());
- theme.applyStyle(R.style.SetupWizardPartnerResource, /* force */ true);
- super.onApplyThemeResource(theme, resid, first);
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.wifi_dpp_activity);
- mFragmentManager = getSupportFragmentManager();
-
- if (savedInstanceState == null) {
- handleIntent(getIntent());
- }
- }
-
- private void handleIntent(Intent intent) {
+ protected void handleIntent(Intent intent) {
switch (intent.getAction()) {
case ACTION_ENROLLEE_QR_CODE_SCANNER:
String ssid = intent.getStringExtra(WifiDppUtils.EXTRA_WIFI_SSID);
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeBaseFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeBaseFragment.java
index acdff9d..c5b2e8b 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeBaseFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeBaseFragment.java
@@ -72,6 +72,9 @@
.build();
mGlifLayout.getMixin(FooterBarMixin.class).setPrimaryButton(mRightButton);
}
+
+ mGlifLayout.getHeaderTextView().setAccessibilityLiveRegion(
+ View.ACCESSIBILITY_LIVE_REGION_POLITE);
}
protected void setHeaderIconImageResource(@DrawableRes int iconResId) {
diff --git a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
index 99fa6fc..2105408 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppQrCodeGeneratorFragment.java
@@ -52,12 +52,6 @@
return SettingsEnums.SETTINGS_WIFI_DPP_CONFIGURATOR;
}
- // Container Activity must implement this interface
- public interface OnQrCodeGeneratorFragmentAddButtonClickedListener {
- public void onQrCodeGeneratorFragmentAddButtonClicked();
- }
- OnQrCodeGeneratorFragmentAddButtonClickedListener mListener;
-
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
@@ -72,20 +66,6 @@
}
@Override
- public void onAttach(Context context) {
- super.onAttach(context);
-
- mListener = (OnQrCodeGeneratorFragmentAddButtonClickedListener) context;
- }
-
- @Override
- public void onDetach() {
- mListener = null;
-
- super.onDetach();
- }
-
- @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
final MenuItem menuItem = menu.findItem(Menu.FIRST);
if (menuItem != null) {
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceControllerTest.java
index 3f4e82d..0b739f4 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidPreferenceControllerTest.java
@@ -111,7 +111,7 @@
@Test
public void onHearingAidStateChanged_connected_updateHearingAidSummary() {
when(mHearingAidProfile.getConnectedDevices()).thenReturn(generateHearingAidDeviceList());
- mPreferenceController.onResume();
+ mPreferenceController.onStart();
Intent intent = new Intent(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
intent.putExtra(BluetoothHearingAid.EXTRA_STATE, BluetoothHearingAid.STATE_CONNECTED);
sendIntent(intent);
@@ -121,7 +121,7 @@
@Test
public void onHearingAidStateChanged_disconnected_updateHearingAidSummary() {
- mPreferenceController.onResume();
+ mPreferenceController.onStart();
Intent intent = new Intent(BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED);
intent.putExtra(BluetoothHearingAid.EXTRA_STATE, BluetoothHearingAid.STATE_DISCONNECTED);
sendIntent(intent);
@@ -132,7 +132,7 @@
@Test
public void onBluetoothStateChanged_bluetoothOff_updateHearingAidSummary() {
- mPreferenceController.onResume();
+ mPreferenceController.onStart();
Intent intent = new Intent(BluetoothAdapter.ACTION_STATE_CHANGED);
intent.putExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.STATE_OFF);
sendIntent(intent);
@@ -173,11 +173,11 @@
HEARING_AID_PREFERENCE);
mPreferenceController.setPreference(mHearingAidPreference);
//not call registerReceiver()
- mPreferenceController.onResume();
+ mPreferenceController.onStart();
verify(mContext, never()).registerReceiver(any(), any());
//not call unregisterReceiver()
- mPreferenceController.onPause();
+ mPreferenceController.onStop();
verify(mContext, never()).unregisterReceiver(any());
}
diff --git a/tests/robotests/src/com/android/settings/development/OemUnlockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/OemUnlockPreferenceControllerTest.java
index a9c2d79..c762349 100644
--- a/tests/robotests/src/com/android/settings/development/OemUnlockPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/OemUnlockPreferenceControllerTest.java
@@ -32,7 +32,7 @@
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
-import android.os.Build;
+import android.os.SystemProperties;
import android.os.UserManager;
import android.service.oemlock.OemLockManager;
import android.telephony.TelephonyManager;
@@ -49,12 +49,14 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.Config;
-import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class)
public class OemUnlockPreferenceControllerTest {
+ private static final String OEM_UNLOCK_SUPPORTED_KEY = "ro.oem_unlock_supported";
+ private static final String UNSUPPORTED = "-9999";
+ private static final String SUPPORTED = "1";
+
@Mock
private Context mContext;
@Mock
@@ -80,6 +82,7 @@
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
+ SystemProperties.set(OEM_UNLOCK_SUPPORTED_KEY, SUPPORTED);
when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mContext.getPackageManager().hasSystemFeature(PackageManager
.FEATURE_TELEPHONY_CARRIERLOCK)).thenReturn(true);
@@ -96,20 +99,14 @@
}
@Test
- @Config(qualifiers = "mcc999")
- public void OemUnlockPreferenceController_shouldNotCrashInEmulatorEngBuild() {
- ReflectionHelpers.setStaticField(Build.class, "IS_EMULATOR", true);
- ReflectionHelpers.setStaticField(Build.class, "IS_ENG", true);
+ public void OemUnlockPreferenceController_oemUnlockUnsupported_shouldNotCrash() {
+ SystemProperties.set(OEM_UNLOCK_SUPPORTED_KEY, UNSUPPORTED);
new OemUnlockPreferenceController(mContext, mActivity, mFragment);
}
@Test
- @Config(qualifiers = "mcc999")
- public void OemUnlockPreferenceController_shouldNotCrashInOtherBuild() {
- ReflectionHelpers.setStaticField(Build.class, "IS_EMULATOR", false);
- ReflectionHelpers.setStaticField(Build.class, "IS_ENG", false);
-
+ public void OemUnlockPreferenceController_oemUnlockSupported_shouldNotCrash() {
new OemUnlockPreferenceController(mContext, mActivity, mFragment);
}
diff --git a/tests/robotests/src/com/android/settings/users/EditUserInfoControllerTest.java b/tests/robotests/src/com/android/settings/users/EditUserInfoControllerTest.java
index b9dfbbb..a6a76f8 100644
--- a/tests/robotests/src/com/android/settings/users/EditUserInfoControllerTest.java
+++ b/tests/robotests/src/com/android/settings/users/EditUserInfoControllerTest.java
@@ -18,7 +18,6 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.same;
import static org.mockito.Mockito.mock;
@@ -26,18 +25,20 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
-import android.view.LayoutInflater;
-import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import com.android.settings.R;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
+
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.junit.Before;
import org.junit.Test;
@@ -47,20 +48,15 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.android.controller.ActivityController;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
public class EditUserInfoControllerTest {
+ private static final int MAX_USER_NAME_LENGTH = 100;
+
@Mock
private Fragment mFragment;
@Mock
- private LayoutInflater mInflater;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private View mDialogContent;
- @Mock
- private EditText mUserName;
- @Mock
- private ImageView mPhotoView;
- @Mock
private Drawable mCurrentIcon;
private FragmentActivity mActivity;
@@ -86,12 +82,6 @@
MockitoAnnotations.initMocks(this);
mActivity = spy(ActivityController.of(new FragmentActivity()).get());
when(mFragment.getActivity()).thenReturn(mActivity);
- when(mActivity.getLayoutInflater()).thenReturn(mInflater);
- when(mInflater.inflate(eq(R.layout.edit_user_info_dialog_content), any())).thenReturn(
- mDialogContent);
- when(mDialogContent.findViewById(eq(R.id.user_name))).thenReturn(mUserName);
- when(mDialogContent.findViewById(eq(R.id.user_photo))).thenReturn(mPhotoView);
- when(mPhotoView.getContext()).thenReturn((Context) mActivity);
mController = new TestEditUserInfoController();
}
@@ -106,4 +96,21 @@
assertThat(photoController).isNotNull();
verify(photoController).onActivityResult(eq(0), eq(0), same(resultData));
}
+
+ @Test
+ @Config(shadows = ShadowAlertDialogCompat.class)
+ public void userNameView_inputLongName_shouldBeConstrained() {
+ // generate a string of 200 'A's
+ final String longName = Stream.generate(
+ () -> String.valueOf('A')).limit(200).collect(Collectors.joining());
+ final AlertDialog dialog = (AlertDialog) mController.createDialog(mFragment, mCurrentIcon,
+ "test user", R.string.profile_info_settings_title, null,
+ android.os.Process.myUserHandle());
+ final EditText userName = ShadowAlertDialogCompat.shadowOf(dialog).getView()
+ .findViewById(R.id.user_name);
+
+ userName.setText(longName);
+
+ assertThat(userName.getText().length()).isEqualTo(MAX_USER_NAME_LENGTH);
+ }
}
diff --git a/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java b/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java
index 7f0e7e1..7c87e7d 100644
--- a/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java
+++ b/tests/unit/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java
@@ -108,14 +108,6 @@
}
@Test
- public void testActivity_shouldImplementsQrCodeGeneratorFragmentCallback() {
- WifiDppConfiguratorActivity activity = mActivityRule.getActivity();
-
- assertThat(activity instanceof WifiDppQrCodeGeneratorFragment
- .OnQrCodeGeneratorFragmentAddButtonClickedListener).isTrue();
- }
-
- @Test
public void testActivity_shouldImplementsOnScanWifiDppSuccessCallback() {
WifiDppConfiguratorActivity activity = mActivityRule.getActivity();