diff --git a/aconfig/keyboard/settings_keyboard_layout_picker_features.aconfig b/aconfig/keyboard/settings_keyboard_layout_picker_features.aconfig new file mode 100644 index 00000000000..18684ab7344 --- /dev/null +++ b/aconfig/keyboard/settings_keyboard_layout_picker_features.aconfig @@ -0,0 +1,9 @@ +package: "com.android.settings.keyboard" +container: "system" + +flag { + name: "keyboard_layout_picker_activity_enabled" + namespace: "input" + description: "This flag enables or disables exposed page of keyboard layout picker" + bug: "345399212" +} \ No newline at end of file diff --git a/res/xml/accessibility_button_settings.xml b/res/xml/accessibility_button_settings.xml index 2b1392d4498..5be0cdb8124 100644 --- a/res/xml/accessibility_button_settings.xml +++ b/res/xml/accessibility_button_settings.xml @@ -20,7 +20,8 @@ + android:title="@string/accessibility_button_intro_text" + settings:searchable="false" /> createAccessibilityActivityPreferenceList( List installedShortcuts) { - final Set enabledServices = - AccessibilityUtils.getEnabledServicesFromSettings(mContext); - final List permittedServices = mDpm.getPermittedAccessibilityServices( - UserHandle.myUserId()); final int installedShortcutsSize = installedShortcuts.size(); final List preferenceList = new ArrayList<>( @@ -124,17 +120,12 @@ public class RestrictedPreferenceHelper { final ActivityInfo activityInfo = info.getActivityInfo(); final ComponentName componentName = info.getComponentName(); - final boolean serviceEnabled = enabledServices.contains(componentName); AccessibilityActivityPreference preference = new AccessibilityActivityPreference( mContext, componentName.getPackageName(), activityInfo.applicationInfo.uid, info); - if (Flags.neverRestrictAccessibilityActivity()) { - // Accessibility Activities do not have elevated privileges so restricting - // them based on ECM or device admin does not give any value. - preference.setEnabled(true); - } else { - setRestrictedPreferenceEnabled(preference, permittedServices, serviceEnabled); - } + // Accessibility Activities do not have elevated privileges so restricting + // them based on ECM or device admin does not give any value. + preference.setEnabled(true); preferenceList.add(preference); } return preferenceList; diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java index 1de8379bd76..2cbf8d089ff 100644 --- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java +++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java @@ -270,7 +270,8 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { R.integer.config_biometrics_header_scroll_duration); layoutView.adjustScrollableHeaderHeight( headerScrollView, mShouldShowLottie); - layoutView.headerVerticalScrolling(headerScrollView, headerScrollDuration); + layoutView.headerVerticalScrolling(headerScrollView, headerScrollDuration, + mIsAccessibilityEnabled); } } } @@ -547,6 +548,9 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { } private void updateTitleAndDescriptionForUdfps() { + final UdfpsEnrollEnrollingView layoutView = (UdfpsEnrollEnrollingView) getLayout(); + final boolean shouldSetFocusOnDescription = Flags.enrollLayoutTruncateImprovement() + && mIsAccessibilityEnabled; switch (getCurrentStage()) { case STAGE_CENTER: setHeaderText(R.string.security_settings_fingerprint_enroll_repeat_title); @@ -560,6 +564,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { ); configureEnrollmentStage(R.raw.udfps_center_hint_lottie); } + + if (shouldSetFocusOnDescription) { + layoutView.setFocusOnDescription(); + } break; case STAGE_GUIDED: @@ -574,6 +582,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { // TODO(b/228100413) Could customize guided lottie animation configureEnrollmentStage(R.raw.udfps_center_hint_lottie); } + + if (shouldSetFocusOnDescription) { + layoutView.setFocusOnDescription(); + } break; case STAGE_FINGERTIP: setHeaderText(R.string.security_settings_udfps_enroll_fingertip_title); @@ -584,6 +596,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { ); configureEnrollmentStage(R.raw.udfps_tip_hint_lottie); } + + if (shouldSetFocusOnDescription) { + layoutView.setFocusOnDescription(); + } break; case STAGE_LEFT_EDGE: setHeaderText(R.string.security_settings_udfps_enroll_left_edge_title); @@ -601,6 +617,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { setDescriptionText(R.string.security_settings_udfps_enroll_edge_message); } } + + if (shouldSetFocusOnDescription) { + layoutView.setFocusOnDescription(); + } break; case STAGE_RIGHT_EDGE: setHeaderText(R.string.security_settings_udfps_enroll_right_edge_title); @@ -619,6 +639,10 @@ public class FingerprintEnrollEnrolling extends BiometricsEnrollEnrolling { setDescriptionText(R.string.security_settings_udfps_enroll_edge_message); } } + + if (shouldSetFocusOnDescription) { + layoutView.setFocusOnDescription(); + } break; case STAGE_UNKNOWN: diff --git a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java index 5b29fa5f1f6..931974eaf15 100644 --- a/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java +++ b/src/com/android/settings/biometrics/fingerprint/UdfpsEnrollEnrollingView.java @@ -25,6 +25,7 @@ import android.graphics.Insets; import android.graphics.Point; import android.graphics.Rect; import android.hardware.fingerprint.FingerprintSensorPropertiesInternal; +import android.os.Handler; import android.text.TextUtils; import android.util.AttributeSet; import android.util.DisplayMetrics; @@ -44,6 +45,7 @@ import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; +import android.widget.TextView; import androidx.annotation.ColorInt; import androidx.annotation.LayoutRes; @@ -200,7 +202,26 @@ public class UdfpsEnrollEnrollingView extends GlifLayout { return footerBarMinHeight; } - void headerVerticalScrolling(ScrollView headerScrollView, long duration) { + void setFocusOnDescription() { + final ScrollView headerScrollView = findViewById(R.id.sud_header_scroll_view); + final TextView descriptionView = getDescriptionTextView(); + if (descriptionView != null && !descriptionView.getText().isEmpty()) { + descriptionView.post( + () -> { + Rect scrollBounds = new Rect(); + headerScrollView.getHitRect(scrollBounds); + boolean isVisible = descriptionView.getLocalVisibleRect(scrollBounds); + if (!isVisible) { + descriptionView.setFocusable(true); + descriptionView.setFocusableInTouchMode(true); + descriptionView.requestFocus(); + } + }); + } + } + + void headerVerticalScrolling(ScrollView headerScrollView, long duration, + boolean isAccessibilityEnabled) { headerScrollView.post(new Runnable() { @Override public void run() { @@ -216,13 +237,23 @@ public class UdfpsEnrollEnrollingView extends GlifLayout { @Override public void onAnimationEnd(@NonNull Animator animation) { - mHeaderScrollAnimator.removeAllListeners(); - headerScrollView.post(new Runnable() { - @Override - public void run() { - mHeaderScrollAnimator.reverse(); - } - }); + headerScrollView.post(new Runnable() { + @Override + public void run() { + mHeaderScrollAnimator.removeAllListeners(); + mHeaderScrollAnimator.reverse(); + if (isAccessibilityEnabled) { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + if (!mHeaderScrollAnimator.isRunning()) { + setFocusOnDescription(); + } + } + }, duration + 200); + } + } + }); } @Override @@ -320,6 +351,19 @@ public class UdfpsEnrollEnrollingView extends GlifLayout { R.id.udfps_enroll_animation_fp_view); fingerprintView.setPadding(0, -layoutLottieAnimationPadding, 0, layoutLottieAnimationPadding); + + // TODO(b/260970216) Instead of hiding the description text view, we should + // make the header view scrollable if the text is too long. + // If description text view has overlap with udfps progress view, hide it. + if (!Flags.enrollLayoutTruncateImprovement()) { + final View descView = getDescriptionTextView(); + getViewTreeObserver().addOnDrawListener(() -> { + if (descView.getVisibility() == View.VISIBLE + && hasOverlap(descView, mUdfpsEnrollView)) { + descView.setVisibility(View.GONE); + } + }); + } } private void setOnHoverListener() { diff --git a/src/com/android/settings/inputmethod/NewKeyboardSettingsUtils.java b/src/com/android/settings/inputmethod/InputPeripheralsSettingsUtils.java similarity index 98% rename from src/com/android/settings/inputmethod/NewKeyboardSettingsUtils.java rename to src/com/android/settings/inputmethod/InputPeripheralsSettingsUtils.java index 587370b19a2..6e3d11caa58 100644 --- a/src/com/android/settings/inputmethod/NewKeyboardSettingsUtils.java +++ b/src/com/android/settings/inputmethod/InputPeripheralsSettingsUtils.java @@ -44,9 +44,9 @@ import java.util.Arrays; import java.util.Comparator; /** - * Utilities of keyboard settings + * Utilities of input peripherals settings */ -public class NewKeyboardSettingsUtils { +public class InputPeripheralsSettingsUtils { static final String EXTRA_TITLE = "keyboard_layout_picker_title"; static final String EXTRA_USER_ID = "user_id"; diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java b/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java index 54c608cf309..a4baa917c84 100644 --- a/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java +++ b/src/com/android/settings/inputmethod/KeyboardLayoutDialogFragment.java @@ -308,7 +308,7 @@ public class KeyboardLayoutDialogFragment extends InstrumentedDialogFragment public Keyboards loadInBackground() { Keyboards keyboards = new Keyboards(); InputManager im = (InputManager)getContext().getSystemService(Context.INPUT_SERVICE); - if (mInputDeviceIdentifier == null || NewKeyboardSettingsUtils.getInputDevice( + if (mInputDeviceIdentifier == null || InputPeripheralsSettingsUtils.getInputDevice( im, mInputDeviceIdentifier) == null) { keyboards.keyboardLayouts.add(null); // default layout keyboards.current = 0; diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java b/src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java index 1f29a2b153d..97d8ffcff84 100644 --- a/src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java +++ b/src/com/android/settings/inputmethod/KeyboardLayoutPickerController.java @@ -68,11 +68,13 @@ public class KeyboardLayoutPickerController extends BasePreferenceController imp public void onStart() { mIm.registerInputDeviceListener(this, null); if (mInputDeviceIdentifier == null - || NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) { + || InputPeripheralsSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) + == null) { return; } mInputDeviceId = - NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier).getId(); + InputPeripheralsSettingsUtils.getInputDevice(mIm, + mInputDeviceIdentifier).getId(); updateCheckedState(); } diff --git a/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java b/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java index 8abde7e35b4..c21ac636f09 100644 --- a/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java +++ b/src/com/android/settings/inputmethod/KeyboardLayoutPickerFragment.java @@ -46,7 +46,7 @@ public class KeyboardLayoutPickerFragment extends DashboardFragment { final InputDeviceIdentifier inputDeviceIdentifier = getActivity().getIntent(). getParcelableExtra(EXTRA_INPUT_DEVICE_IDENTIFIER); final InputManager im = context.getSystemService(InputManager.class); - if (NewKeyboardSettingsUtils.getInputDevice(im, inputDeviceIdentifier) == null) { + if (InputPeripheralsSettingsUtils.getInputDevice(im, inputDeviceIdentifier) == null) { return; } use(KeyboardLayoutPickerController.class).initialize(this /*parent*/, diff --git a/src/com/android/settings/inputmethod/NewKeyboardLayoutEnabledLocalesFragment.java b/src/com/android/settings/inputmethod/NewKeyboardLayoutEnabledLocalesFragment.java index 7a5885756dd..08aacf8c833 100644 --- a/src/com/android/settings/inputmethod/NewKeyboardLayoutEnabledLocalesFragment.java +++ b/src/com/android/settings/inputmethod/NewKeyboardLayoutEnabledLocalesFragment.java @@ -40,7 +40,7 @@ import com.android.settings.Utils; import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.dashboard.profileselector.ProfileSelectFragment; -import com.android.settings.inputmethod.NewKeyboardSettingsUtils.KeyboardInfo; +import com.android.settings.inputmethod.InputPeripheralsSettingsUtils.KeyboardInfo; import java.util.ArrayList; import java.util.Collections; @@ -117,14 +117,15 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment return; } mInputDeviceIdentifier = - arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER, + arguments.getParcelable( + InputPeripheralsSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER, InputDeviceIdentifier.class); if (mInputDeviceIdentifier == null) { Log.e(TAG, "The inputDeviceIdentifier should not be null"); return; } InputDevice inputDevice = - NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier); + InputPeripheralsSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier); if (inputDevice == null) { Log.e(TAG, "inputDevice is null"); return; @@ -138,7 +139,7 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment super.onStart(); mIm.registerInputDeviceListener(this, null); InputDevice inputDevice = - NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier); + InputPeripheralsSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier); if (inputDevice == null) { Log.e(TAG, "Unable to start: input device is null"); getActivity().finish(); @@ -161,7 +162,7 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment } private void updateCheckedState() { - if (NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) { + if (InputPeripheralsSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) { return; } @@ -207,9 +208,9 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment private void mapLanguageWithLayout(InputMethodInfo info, InputMethodSubtype subtype) { CharSequence subtypeLabel = getSubtypeLabel(mContext, info, subtype); KeyboardLayout[] keyboardLayouts = - NewKeyboardSettingsUtils.getKeyboardLayouts( + InputPeripheralsSettingsUtils.getKeyboardLayouts( mIm, mUserId, mInputDeviceIdentifier, info, subtype); - KeyboardLayoutSelectionResult result = NewKeyboardSettingsUtils.getKeyboardLayout( + KeyboardLayoutSelectionResult result = InputPeripheralsSettingsUtils.getKeyboardLayout( mIm, mUserId, mInputDeviceIdentifier, info, subtype); if (result.getLayoutDescriptor() != null) { for (int i = 0; i < keyboardLayouts.length; i++) { @@ -316,13 +317,14 @@ public class NewKeyboardLayoutEnabledLocalesFragment extends DashboardFragment InputMethodSubtype inputMethodSubtype) { Bundle arguments = new Bundle(); arguments.putParcelable( - NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER, inputDeviceIdentifier); + InputPeripheralsSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER, + inputDeviceIdentifier); arguments.putParcelable( - NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_INFO, inputMethodInfo); + InputPeripheralsSettingsUtils.EXTRA_INPUT_METHOD_INFO, inputMethodInfo); arguments.putParcelable( - NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE, inputMethodSubtype); - arguments.putInt(NewKeyboardSettingsUtils.EXTRA_USER_ID, userId); - arguments.putCharSequence(NewKeyboardSettingsUtils.EXTRA_TITLE, subtypeLabel); + InputPeripheralsSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE, inputMethodSubtype); + arguments.putInt(InputPeripheralsSettingsUtils.EXTRA_USER_ID, userId); + arguments.putCharSequence(InputPeripheralsSettingsUtils.EXTRA_TITLE, subtypeLabel); new SubSettingLauncher(mContext) .setSourceMetricsCategory(getMetricsCategory()) .setDestination(NewKeyboardLayoutPickerFragment.class.getName()) diff --git a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerContent.java b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerContent.java index e9349644be1..e9701aa0760 100644 --- a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerContent.java +++ b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerContent.java @@ -48,9 +48,9 @@ public class NewKeyboardLayoutPickerContent extends DashboardFragment { InputManager im = getContext().getSystemService(InputManager.class); InputDeviceIdentifier identifier = getArguments().getParcelable( - NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER); + InputPeripheralsSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER); if (identifier == null - || NewKeyboardSettingsUtils.getInputDevice(im, identifier) == null) { + || InputPeripheralsSettingsUtils.getInputDevice(im, identifier) == null) { getActivity().finish(); return; } diff --git a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerController.java b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerController.java index ec727e8a55b..e8a645f2b5e 100644 --- a/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerController.java +++ b/src/com/android/settings/inputmethod/NewKeyboardLayoutPickerController.java @@ -73,19 +73,21 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController public void initialize(Fragment parent) { mParent = parent; Bundle arguments = parent.getArguments(); - mTitle = arguments.getCharSequence(NewKeyboardSettingsUtils.EXTRA_TITLE); - mUserId = arguments.getInt(NewKeyboardSettingsUtils.EXTRA_USER_ID); + mTitle = arguments.getCharSequence(InputPeripheralsSettingsUtils.EXTRA_TITLE); + mUserId = arguments.getInt(InputPeripheralsSettingsUtils.EXTRA_USER_ID); mInputDeviceIdentifier = - arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER); + arguments.getParcelable( + InputPeripheralsSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER); mInputMethodInfo = - arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_INFO); + arguments.getParcelable(InputPeripheralsSettingsUtils.EXTRA_INPUT_METHOD_INFO); mInputMethodSubtype = - arguments.getParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE); + arguments.getParcelable( + InputPeripheralsSettingsUtils.EXTRA_INPUT_METHOD_SUBTYPE); mLayout = getSelectedLayoutLabel(); mFinalSelectedLayout = mLayout; mKeyboardLayouts = mIm.getKeyboardLayoutListForInputDevice( mInputDeviceIdentifier, mUserId, mInputMethodInfo, mInputMethodSubtype); - NewKeyboardSettingsUtils.sortKeyboardLayoutsByLabel(mKeyboardLayouts); + InputPeripheralsSettingsUtils.sortKeyboardLayoutsByLabel(mKeyboardLayouts); parent.getActivity().setTitle(mTitle); } @@ -93,11 +95,13 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController public void onStart() { mIm.registerInputDeviceListener(this, null); if (mInputDeviceIdentifier == null - || NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) == null) { + || InputPeripheralsSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier) + == null) { return; } mInputDeviceId = - NewKeyboardSettingsUtils.getInputDevice(mIm, mInputDeviceIdentifier).getId(); + InputPeripheralsSettingsUtils.getInputDevice(mIm, + mInputDeviceIdentifier).getId(); } @Override @@ -202,9 +206,9 @@ public class NewKeyboardLayoutPickerController extends BasePreferenceController private String getSelectedLayoutLabel() { String label = mContext.getString(R.string.keyboard_default_layout); - KeyboardLayoutSelectionResult result = NewKeyboardSettingsUtils.getKeyboardLayout( + KeyboardLayoutSelectionResult result = InputPeripheralsSettingsUtils.getKeyboardLayout( mIm, mUserId, mInputDeviceIdentifier, mInputMethodInfo, mInputMethodSubtype); - KeyboardLayout[] keyboardLayouts = NewKeyboardSettingsUtils.getKeyboardLayouts( + KeyboardLayout[] keyboardLayouts = InputPeripheralsSettingsUtils.getKeyboardLayouts( mIm, mUserId, mInputDeviceIdentifier, mInputMethodInfo, mInputMethodSubtype); if (result.getLayoutDescriptor() != null) { for (KeyboardLayout keyboardLayout : keyboardLayouts) { diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java index 910a1d6e845..fcb672da404 100644 --- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java +++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java @@ -317,7 +317,7 @@ public final class PhysicalKeyboardFragment extends DashboardFragment final Preference pref = new Preference(getPrefContext()); pref.setTitle(hardKeyboardDeviceInfo.mDeviceName); String currentLayout = - NewKeyboardSettingsUtils.getSelectedKeyboardLayoutLabelForUser(context, + InputPeripheralsSettingsUtils.getSelectedKeyboardLayoutLabelForUser(context, UserHandle.myUserId(), hardKeyboardDeviceInfo.mDeviceIdentifier); if (currentLayout != null) { pref.setSummary(currentLayout); @@ -369,7 +369,7 @@ public final class PhysicalKeyboardFragment extends DashboardFragment private void showEnabledLocalesKeyboardLayoutList(InputDeviceIdentifier inputDeviceIdentifier) { Bundle arguments = new Bundle(); - arguments.putParcelable(NewKeyboardSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER, + arguments.putParcelable(InputPeripheralsSettingsUtils.EXTRA_INPUT_DEVICE_IDENTIFIER, inputDeviceIdentifier); new SubSettingLauncher(getContext()) .setSourceMetricsCategory(getMetricsCategory()) diff --git a/src/com/android/settings/inputmethod/PointerColorCustomizationFragment.java b/src/com/android/settings/inputmethod/PointerColorCustomizationFragment.java index 2324c5ec2a6..49c0413dfe8 100644 --- a/src/com/android/settings/inputmethod/PointerColorCustomizationFragment.java +++ b/src/com/android/settings/inputmethod/PointerColorCustomizationFragment.java @@ -16,8 +16,8 @@ package com.android.settings.inputmethod; -import static com.android.settings.inputmethod.NewKeyboardSettingsUtils.isMouse; -import static com.android.settings.inputmethod.NewKeyboardSettingsUtils.isTouchpad; +import static com.android.settings.inputmethod.InputPeripheralsSettingsUtils.isMouse; +import static com.android.settings.inputmethod.InputPeripheralsSettingsUtils.isTouchpad; import android.app.settings.SettingsEnums; import android.content.Context; diff --git a/src/com/android/settings/inputmethod/PointerTouchpadFragment.java b/src/com/android/settings/inputmethod/PointerTouchpadFragment.java index fc069caf604..890d9b68479 100644 --- a/src/com/android/settings/inputmethod/PointerTouchpadFragment.java +++ b/src/com/android/settings/inputmethod/PointerTouchpadFragment.java @@ -16,8 +16,8 @@ package com.android.settings.inputmethod; -import static com.android.settings.inputmethod.NewKeyboardSettingsUtils.isMouse; -import static com.android.settings.inputmethod.NewKeyboardSettingsUtils.isTouchpad; +import static com.android.settings.inputmethod.InputPeripheralsSettingsUtils.isMouse; +import static com.android.settings.inputmethod.InputPeripheralsSettingsUtils.isTouchpad; import android.app.settings.SettingsEnums; import android.content.Context; diff --git a/src/com/android/settings/inputmethod/PointerTouchpadPreferenceController.java b/src/com/android/settings/inputmethod/PointerTouchpadPreferenceController.java index b6ea063237a..9c44d1eed9c 100644 --- a/src/com/android/settings/inputmethod/PointerTouchpadPreferenceController.java +++ b/src/com/android/settings/inputmethod/PointerTouchpadPreferenceController.java @@ -32,8 +32,8 @@ public class PointerTouchpadPreferenceController extends BasePreferenceControlle @Override public int getAvailabilityStatus() { - boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad(); - boolean isMouse = NewKeyboardSettingsUtils.isMouse(); + boolean isTouchpad = InputPeripheralsSettingsUtils.isTouchpad(); + boolean isMouse = InputPeripheralsSettingsUtils.isMouse(); return (isTouchpad || isMouse) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } } diff --git a/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java b/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java index 71fa28bf5ca..5154623ade4 100644 --- a/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java +++ b/src/com/android/settings/inputmethod/TouchGesturesButtonPreferenceController.java @@ -74,7 +74,7 @@ public class TouchGesturesButtonPreferenceController extends BasePreferenceContr @Override public int getAvailabilityStatus() { - boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad(); + boolean isTouchpad = InputPeripheralsSettingsUtils.isTouchpad(); return isTouchpad ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/inputmethod/TouchpadThreeFingerTapFragment.java b/src/com/android/settings/inputmethod/TouchpadThreeFingerTapFragment.java index c9a2b5f0984..3aee4bf8927 100644 --- a/src/com/android/settings/inputmethod/TouchpadThreeFingerTapFragment.java +++ b/src/com/android/settings/inputmethod/TouchpadThreeFingerTapFragment.java @@ -16,7 +16,7 @@ package com.android.settings.inputmethod; -import static com.android.settings.inputmethod.NewKeyboardSettingsUtils.isTouchpad; +import static com.android.settings.inputmethod.InputPeripheralsSettingsUtils.isTouchpad; import android.app.settings.SettingsEnums; import android.content.Context; diff --git a/src/com/android/settings/inputmethod/TouchpadThreeFingerTapPreferenceController.java b/src/com/android/settings/inputmethod/TouchpadThreeFingerTapPreferenceController.java index 99db0e74ce1..7afd266b7ac 100644 --- a/src/com/android/settings/inputmethod/TouchpadThreeFingerTapPreferenceController.java +++ b/src/com/android/settings/inputmethod/TouchpadThreeFingerTapPreferenceController.java @@ -65,7 +65,7 @@ public class TouchpadThreeFingerTapPreferenceController extends BasePreferenceCo @Override public int getAvailabilityStatus() { - boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad(); + boolean isTouchpad = InputPeripheralsSettingsUtils.isTouchpad(); return (InputSettings.isTouchpadThreeFingerTapShortcutFeatureFlagEnabled() && isTouchpad) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java index a92ebd434a3..8e77e0cc2c2 100644 --- a/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java +++ b/src/com/android/settings/inputmethod/TrackpadBottomPreferenceController.java @@ -49,7 +49,7 @@ public class TrackpadBottomPreferenceController extends TogglePreferenceControll @Override public int getAvailabilityStatus() { - boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad(); + boolean isTouchpad = InputPeripheralsSettingsUtils.isTouchpad(); return isTouchpad ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java index ca086a98728..e752c1edbd0 100644 --- a/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java +++ b/src/com/android/settings/inputmethod/TrackpadReverseScrollingPreferenceController.java @@ -49,7 +49,7 @@ public class TrackpadReverseScrollingPreferenceController extends TogglePreferen @Override public int getAvailabilityStatus() { - boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad(); + boolean isTouchpad = InputPeripheralsSettingsUtils.isTouchpad(); return isTouchpad ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/inputmethod/TrackpadSettings.java b/src/com/android/settings/inputmethod/TrackpadSettings.java index 0f9e9cf64a5..757a9540957 100644 --- a/src/com/android/settings/inputmethod/TrackpadSettings.java +++ b/src/com/android/settings/inputmethod/TrackpadSettings.java @@ -43,7 +43,7 @@ public class TrackpadSettings extends DashboardFragment { public void onCreate(@NonNull Bundle icicle) { super.onCreate(icicle); getPreferenceScreen().setTitle( - NewKeyboardSettingsUtils.getTouchpadAndMouseTitleTitleResId()); + InputPeripheralsSettingsUtils.getTouchpadAndMouseTitleTitleResId()); } @Override @@ -67,7 +67,7 @@ public class TrackpadSettings extends DashboardFragment { protected boolean isPageSearchEnabled(Context context) { return FeatureFlagUtils .isEnabled(context, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_TRACKPAD) - && NewKeyboardSettingsUtils.isTouchpad(); + && InputPeripheralsSettingsUtils.isTouchpad(); } }; } diff --git a/src/com/android/settings/inputmethod/TrackpadSettingsController.java b/src/com/android/settings/inputmethod/TrackpadSettingsController.java index 9a549ead4f2..ba2ab99c092 100644 --- a/src/com/android/settings/inputmethod/TrackpadSettingsController.java +++ b/src/com/android/settings/inputmethod/TrackpadSettingsController.java @@ -77,17 +77,17 @@ public class TrackpadSettingsController extends BasePreferenceController return; } mPreference.setVisible(isAvailable()); - mPreference.setTitle(NewKeyboardSettingsUtils.getTouchpadAndMouseTitleTitleResId()); + mPreference.setTitle(InputPeripheralsSettingsUtils.getTouchpadAndMouseTitleTitleResId()); } @Override public int getAvailabilityStatus() { boolean isFeatureOn = FeatureFlagUtils .isEnabled(mContext, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_TRACKPAD); - boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad(); + boolean isTouchpad = InputPeripheralsSettingsUtils.isTouchpad(); boolean isPointerCustomizationEnabled = android.view.flags.Flags.enableVectorCursorA11ySettings(); - boolean isMouse = NewKeyboardSettingsUtils.isMouse(); + boolean isMouse = InputPeripheralsSettingsUtils.isMouse(); return (isFeatureOn && isTouchpad) || (isPointerCustomizationEnabled && isMouse) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/inputmethod/TrackpadTapDraggingPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadTapDraggingPreferenceController.java index b2bb61702a0..71c1638d30c 100644 --- a/src/com/android/settings/inputmethod/TrackpadTapDraggingPreferenceController.java +++ b/src/com/android/settings/inputmethod/TrackpadTapDraggingPreferenceController.java @@ -49,7 +49,7 @@ public class TrackpadTapDraggingPreferenceController extends TogglePreferenceCon @Override public int getAvailabilityStatus() { - boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad(); + boolean isTouchpad = InputPeripheralsSettingsUtils.isTouchpad(); return (InputSettings.isTouchpadTapDraggingFeatureFlagEnabled() && isTouchpad) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java b/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java index c25cc4ec2bf..86d73112598 100644 --- a/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java +++ b/src/com/android/settings/inputmethod/TrackpadTapToClickPreferenceController.java @@ -49,7 +49,7 @@ public class TrackpadTapToClickPreferenceController extends TogglePreferenceCont @Override public int getAvailabilityStatus() { - boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad(); + boolean isTouchpad = InputPeripheralsSettingsUtils.isTouchpad(); return isTouchpad ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } diff --git a/src/com/android/settings/inputmethod/TrackpadTouchGestureSettings.java b/src/com/android/settings/inputmethod/TrackpadTouchGestureSettings.java index a6af3f651ba..14bb484d470 100644 --- a/src/com/android/settings/inputmethod/TrackpadTouchGestureSettings.java +++ b/src/com/android/settings/inputmethod/TrackpadTouchGestureSettings.java @@ -59,7 +59,7 @@ public class TrackpadTouchGestureSettings extends DashboardFragment { .isEnabled( context, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_TRACKPAD_GESTURE) - && NewKeyboardSettingsUtils.isTouchpad(); + && InputPeripheralsSettingsUtils.isTouchpad(); } }; } diff --git a/src/com/android/settings/inputmethod/TrackpadTouchGestureSettingsController.java b/src/com/android/settings/inputmethod/TrackpadTouchGestureSettingsController.java index 79497276aba..ff6899049c0 100644 --- a/src/com/android/settings/inputmethod/TrackpadTouchGestureSettingsController.java +++ b/src/com/android/settings/inputmethod/TrackpadTouchGestureSettingsController.java @@ -31,7 +31,7 @@ public class TrackpadTouchGestureSettingsController extends BasePreferenceContro public int getAvailabilityStatus() { boolean isFeatureOn = FeatureFlagUtils .isEnabled(mContext, FeatureFlagUtils.SETTINGS_NEW_KEYBOARD_TRACKPAD_GESTURE); - boolean isTouchpad = NewKeyboardSettingsUtils.isTouchpad(); + boolean isTouchpad = InputPeripheralsSettingsUtils.isTouchpad(); return (isFeatureOn && isTouchpad) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } } diff --git a/src/com/android/settings/network/CellularSecurityPreferenceController.java b/src/com/android/settings/network/CellularSecurityPreferenceController.java index 0b0c2a7e948..e515339c68c 100644 --- a/src/com/android/settings/network/CellularSecurityPreferenceController.java +++ b/src/com/android/settings/network/CellularSecurityPreferenceController.java @@ -125,7 +125,7 @@ public class CellularSecurityPreferenceController extends BasePreferenceControll return super.handlePreferenceTreeClick(preference); } boolean isSafetyCenterSupported = isSafetyCenterSupported(); - if (isSafetyCenterSupported) { + if (isSafetyCenterSupported && areNotificationsEnabled()) { Intent safetyCenterIntent = new Intent(Intent.ACTION_SAFETY_CENTER); safetyCenterIntent.putExtra(SafetyCenterManager.EXTRA_SAFETY_SOURCES_GROUP_ID, "AndroidCellularNetworkSecuritySources"); diff --git a/src/com/android/settings/users/UserCapabilities.java b/src/com/android/settings/users/UserCapabilities.java index 60e92a8c2ce..9dd1f84c86a 100644 --- a/src/com/android/settings/users/UserCapabilities.java +++ b/src/com/android/settings/users/UserCapabilities.java @@ -36,6 +36,7 @@ public class UserCapabilities { boolean mIsAdmin; boolean mIsGuest; boolean mIsEphemeral; + boolean mUserSwitchingUiEnabled; boolean mUserSwitcherEnabled; boolean mCanAddGuest; boolean mDisallowAddUser; @@ -68,7 +69,8 @@ public class UserCapabilities { caps.mCanAddRestrictedProfile = offerRestricted && !dpm.isDeviceManaged() && userManager.isUserTypeEnabled( UserManager.USER_TYPE_FULL_RESTRICTED); - + caps.mUserSwitchingUiEnabled = context.getResources().getBoolean( + com.android.internal.R.bool.config_allowChangeUserSwitcherEnabled); caps.updateAddUserCapabilities(context); return caps; } @@ -134,6 +136,7 @@ public class UserCapabilities { ", mEnforcedAdmin=" + mEnforcedAdmin + ", mDisallowSwitchUser=" + mDisallowSwitchUser + ", mDisallowAddUserSetByAdmin=" + mDisallowAddUserSetByAdmin + + ", mUserSwitchingUiEnabled=" + mUserSwitchingUiEnabled + ", mUserSwitcherEnabled=" + mUserSwitcherEnabled + '}'; } diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java index 8afab9678f4..ec4a4ff2558 100644 --- a/src/com/android/settings/users/UserDetailsSettings.java +++ b/src/com/android/settings/users/UserDetailsSettings.java @@ -354,6 +354,8 @@ public class UserDetailsSettings extends SettingsPreferenceFragment mGrantAdminPref.setChecked(mUserInfo.isAdmin()); + mSwitchUserPref.setVisible(mUserCaps.mUserSwitchingUiEnabled); + mSwitchUserPref.setTitle( context.getString(com.android.settingslib.R.string.user_switch_to_user, mUserInfo.name)); diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java index 589f512ac23..28d2f4f33bd 100644 --- a/src/com/android/settings/users/UserSettings.java +++ b/src/com/android/settings/users/UserSettings.java @@ -287,7 +287,7 @@ public class UserSettings extends SettingsPreferenceFragment final SettingsActivity activity = (SettingsActivity) getActivity(); final SettingsMainSwitchBar switchBar = activity.getSwitchBar(); switchBar.setTitle(getContext().getString(R.string.multiple_users_main_switch_title)); - if (!mUserCaps.mIsGuest) { + if (!mUserCaps.mIsGuest && mUserCaps.mUserSwitchingUiEnabled) { switchBar.show(); } else { switchBar.hide(); diff --git a/tests/robotests/src/com/android/settings/accessibility/RestrictedPreferenceHelperTest.java b/tests/robotests/src/com/android/settings/accessibility/RestrictedPreferenceHelperTest.java index 2a41e62e7ae..4eda58ebaf2 100644 --- a/tests/robotests/src/com/android/settings/accessibility/RestrictedPreferenceHelperTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/RestrictedPreferenceHelperTest.java @@ -31,7 +31,6 @@ import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; -import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; @@ -141,27 +140,10 @@ public class RestrictedPreferenceHelperTest { assertThat(preference.getKey()).isEqualTo(key); } - @Test - @EnableFlags(value = {android.security.Flags.FLAG_EXTEND_ECM_TO_ALL_SETTINGS, - android.permission.flags.Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED}) - @DisableFlags(Flags.FLAG_NEVER_RESTRICT_ACCESSIBILITY_ACTIVITY) - public void createAccessibilityActivityPreference_ecmRestricted_prefIsEcmRestricted() { - setMockAccessibilityShortcutInfo(mShortcutInfo); - ShadowRestrictedLockUtilsInternal.setEcmRestrictedPkgs(PACKAGE_NAME); - - final List preferenceList = - mHelper.createAccessibilityActivityPreferenceList(List.of(mShortcutInfo)); - assertThat(preferenceList).hasSize(1); - final RestrictedPreference preference = preferenceList.get(0); - - assertThat(preference.isDisabledByEcm()).isTrue(); - } - @Test @EnableFlags(value = { android.security.Flags.FLAG_EXTEND_ECM_TO_ALL_SETTINGS, android.permission.flags.Flags.FLAG_ENHANCED_CONFIRMATION_MODE_APIS_ENABLED, - Flags.FLAG_NEVER_RESTRICT_ACCESSIBILITY_ACTIVITY, }) public void createAccessibilityActivityPreference_ecmRestricted_prefIsNotEcmRestricted() { setMockAccessibilityShortcutInfo(mShortcutInfo); diff --git a/tests/robotests/src/com/android/settings/inputmethod/TrackpadSettingsControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/TrackpadSettingsControllerTest.java index 5308d1f8f78..727363f175c 100644 --- a/tests/robotests/src/com/android/settings/inputmethod/TrackpadSettingsControllerTest.java +++ b/tests/robotests/src/com/android/settings/inputmethod/TrackpadSettingsControllerTest.java @@ -72,7 +72,7 @@ public class TrackpadSettingsControllerTest { InputDevice.SOURCE_TOUCHPAD); ShadowInputDevice.addDevice(deviceId, device); String expectedTitle = mContext.getString( - NewKeyboardSettingsUtils.getTouchpadAndMouseTitleTitleResId()); + InputPeripheralsSettingsUtils.getTouchpadAndMouseTitleTitleResId()); mController.updateState(mPreference); diff --git a/tests/unit/src/com/android/settings/network/CellularSecurityPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/CellularSecurityPreferenceControllerTest.java index 59e10c36ec7..7f05913cd82 100644 --- a/tests/unit/src/com/android/settings/network/CellularSecurityPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/CellularSecurityPreferenceControllerTest.java @@ -152,6 +152,10 @@ public final class CellularSecurityPreferenceControllerTest { public void handlePreferenceTreeClick_safetyCenterSupported_shouldRedirectToSafetyCenter() { final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); + doReturn(true).when(mTelephonyManager).isNullCipherNotificationsEnabled(); + doReturn(true).when(mTelephonyManager) + .isCellularIdentifierDisclosureNotificationsEnabled(); + doReturn(true).when(mTelephonyManager).isNullCipherAndIntegrityPreferenceEnabled(); boolean prefHandled = mController.handlePreferenceTreeClick(mPreference); assertThat(prefHandled).isTrue();