A11yMenu fix to Settings back button and Large Button sizing
Sets up a handler for invocations of the back action
on the A11yMenu Settings page, enabling use of its back button.
Also separates sizing logic in the adapter so that the same view
does not get resized multiple times.
Bug: 298467628
Test: install APK, enable feature flag and restart A11yMenu
Change-Id: I3bed900d6d14461d88ab363fa1646ce15a049927
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/Android.bp b/packages/SystemUI/accessibility/accessibilitymenu/Android.bp
index f358417..ff723e3 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/Android.bp
+++ b/packages/SystemUI/accessibility/accessibilitymenu/Android.bp
@@ -36,6 +36,7 @@
"androidx.preference_preference",
"androidx.viewpager_viewpager",
"SettingsLibDisplayUtils",
+ "com_android_a11y_menu_flags_lib",
],
optimize: {
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/aconfig/Android.bp b/packages/SystemUI/accessibility/accessibilitymenu/aconfig/Android.bp
new file mode 100644
index 0000000..6d63409
--- /dev/null
+++ b/packages/SystemUI/accessibility/accessibilitymenu/aconfig/Android.bp
@@ -0,0 +1,12 @@
+aconfig_declarations {
+ name: "com_android_a11y_menu_flags",
+ package: "com.android.systemui.accessibility.accessibilitymenu",
+ srcs: [
+ "accessibility.aconfig",
+ ],
+}
+
+java_aconfig_library {
+ name: "com_android_a11y_menu_flags_lib",
+ aconfig_declarations: "com_android_a11y_menu_flags",
+}
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/aconfig/accessibility.aconfig b/packages/SystemUI/accessibility/accessibilitymenu/aconfig/accessibility.aconfig
new file mode 100644
index 0000000..03cbc16
--- /dev/null
+++ b/packages/SystemUI/accessibility/accessibilitymenu/aconfig/accessibility.aconfig
@@ -0,0 +1,8 @@
+package: "com.android.systemui.accessibility.accessibilitymenu"
+
+flag {
+ name: "a11y_menu_settings_back_button_fix_and_large_button_sizing"
+ namespace: "accessibility"
+ description: "Provides/restores back button functionality for the a11yMenu settings page. Also, fixes sizing problems with large shortcut buttons."
+ bug: "298467628"
+}
\ No newline at end of file
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/activity/A11yMenuSettingsActivity.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/activity/A11yMenuSettingsActivity.java
index c26cd12..bf51e23 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/activity/A11yMenuSettingsActivity.java
+++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/activity/A11yMenuSettingsActivity.java
@@ -27,6 +27,7 @@
import android.provider.Settings;
import android.view.View;
import android.widget.TextView;
+import android.window.OnBackInvokedCallback;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
@@ -34,12 +35,16 @@
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceManager;
+import com.android.systemui.accessibility.accessibilitymenu.Flags;
import com.android.systemui.accessibility.accessibilitymenu.R;
/**
* Settings activity for AccessibilityMenu.
*/
public class A11yMenuSettingsActivity extends FragmentActivity {
+ private OnBackInvokedCallback mCallback = () -> {
+ finish();
+ };
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -51,6 +56,10 @@
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowCustomEnabled(true);
+
+ if (Flags.a11yMenuSettingsBackButtonFixAndLargeButtonSizing()) {
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
actionBar.setCustomView(R.layout.preferences_action_bar);
((TextView) findViewById(R.id.action_bar_title)).setText(
getResources().getString(R.string.accessibility_menu_settings_name)
@@ -61,6 +70,16 @@
| ActionBar.DISPLAY_HOME_AS_UP);
}
+ @Override
+ public boolean onNavigateUp() {
+ if (Flags.a11yMenuSettingsBackButtonFixAndLargeButtonSizing()) {
+ mCallback.onBackInvoked();
+ return true;
+ } else {
+ return false;
+ }
+ }
+
/**
* Settings/preferences fragment for AccessibilityMenu.
*/
diff --git a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuAdapter.java b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuAdapter.java
index c64ec6f..c4f372c 100644
--- a/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuAdapter.java
+++ b/packages/SystemUI/accessibility/accessibilitymenu/src/com/android/systemui/accessibility/accessibilitymenu/view/A11yMenuAdapter.java
@@ -28,6 +28,7 @@
import android.widget.TextView;
import com.android.systemui.accessibility.accessibilitymenu.AccessibilityMenuService;
+import com.android.systemui.accessibility.accessibilitymenu.Flags;
import com.android.systemui.accessibility.accessibilitymenu.R;
import com.android.systemui.accessibility.accessibilitymenu.activity.A11yMenuSettingsActivity.A11yMenuPreferenceFragment;
import com.android.systemui.accessibility.accessibilitymenu.model.A11yMenuShortcut;
@@ -79,6 +80,11 @@
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.grid_item, parent, false);
+
+ if (Flags.a11yMenuSettingsBackButtonFixAndLargeButtonSizing()) {
+ configureShortcutSize(convertView,
+ A11yMenuPreferenceFragment.isLargeButtonsEnabled(mService));
+ }
}
A11yMenuShortcut shortcutItem = (A11yMenuShortcut) getItem(position);
@@ -126,16 +132,29 @@
});
}
- private void configureShortcutView(View convertView, A11yMenuShortcut shortcutItem) {
+ private void configureShortcutSize(View convertView, boolean isLargeButtonsEnabled) {
ImageButton shortcutIconButton = convertView.findViewById(R.id.shortcutIconBtn);
TextView shortcutLabel = convertView.findViewById(R.id.shortcutLabel);
-
- if (A11yMenuPreferenceFragment.isLargeButtonsEnabled(mService)) {
+ if (isLargeButtonsEnabled) {
ViewGroup.LayoutParams params = shortcutIconButton.getLayoutParams();
params.width = (int) (params.width * LARGE_BUTTON_SCALE);
params.height = (int) (params.height * LARGE_BUTTON_SCALE);
shortcutLabel.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, mLargeTextSize);
}
+ }
+
+ private void configureShortcutView(View convertView, A11yMenuShortcut shortcutItem) {
+ ImageButton shortcutIconButton = convertView.findViewById(R.id.shortcutIconBtn);
+ TextView shortcutLabel = convertView.findViewById(R.id.shortcutLabel);
+
+ if (!Flags.a11yMenuSettingsBackButtonFixAndLargeButtonSizing()) {
+ if (A11yMenuPreferenceFragment.isLargeButtonsEnabled(mService)) {
+ ViewGroup.LayoutParams params = shortcutIconButton.getLayoutParams();
+ params.width = (int) (params.width * LARGE_BUTTON_SCALE);
+ params.height = (int) (params.height * LARGE_BUTTON_SCALE);
+ shortcutLabel.setTextSize(android.util.TypedValue.COMPLEX_UNIT_PX, mLargeTextSize);
+ }
+ }
if (shortcutItem.getId() == A11yMenuShortcut.ShortcutId.UNSPECIFIED_ID_VALUE.ordinal()) {
// Sets empty shortcut icon and label when the shortcut is ADD_ITEM.