Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 303d536c authored by Riley Jones's avatar Riley Jones
Browse files

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
parent 23afe222
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ android_app {
        "androidx.preference_preference",
        "androidx.viewpager_viewpager",
        "SettingsLibDisplayUtils",
        "com_android_a11y_menu_flags_lib",
    ],

    optimize: {
+12 −0
Original line number Diff line number Diff line
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",
}
+8 −0
Original line number Diff line number Diff line
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
+19 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.provider.Browser;
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.Preference;
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 @@ public class A11yMenuSettingsActivity extends FragmentActivity {

        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 @@ public class A11yMenuSettingsActivity extends FragmentActivity {
                        | ActionBar.DISPLAY_HOME_AS_UP);
    }

    @Override
    public boolean onNavigateUp() {
        if (Flags.a11yMenuSettingsBackButtonFixAndLargeButtonSizing()) {
            mCallback.onBackInvoked();
            return true;
        } else {
            return false;
        }
    }

    /**
     * Settings/preferences fragment for AccessibilityMenu.
     */
+22 −3
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.widget.ImageButton;
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 class A11yMenuAdapter extends BaseAdapter {
    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 @@ public class A11yMenuAdapter extends BaseAdapter {
                });
    }

    private void configureShortcutSize(View convertView, boolean isLargeButtonsEnabled) {
        ImageButton shortcutIconButton = convertView.findViewById(R.id.shortcutIconBtn);
        TextView shortcutLabel = convertView.findViewById(R.id.shortcutLabel);
        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.