Merge "Apply Setup styles to the a11y edit shortcut full screen." into main

This commit is contained in:
Chun-Ku Lin
2023-12-14 22:51:31 +00:00
committed by Android (Google) Code Review
4 changed files with 75 additions and 6 deletions

View File

@@ -17,8 +17,10 @@ package com.android.settings.accessibility;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.widget.LinearLayout;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.google.android.setupcompat.template.FooterBarMixin;
@@ -29,7 +31,7 @@ import com.google.android.setupdesign.R;
import com.google.android.setupdesign.util.ThemeHelper;
/** Provides utility methods to accessibility settings for Setup Wizard only. */
class AccessibilitySetupWizardUtils {
public class AccessibilitySetupWizardUtils {
private AccessibilitySetupWizardUtils(){}
@@ -45,10 +47,19 @@ class AccessibilitySetupWizardUtils {
* @param icon The icon to be set
*/
public static void updateGlifPreferenceLayout(Context context, GlifPreferenceLayout layout,
CharSequence title, CharSequence description, Drawable icon) {
layout.setHeaderText(title);
layout.setDescriptionText(description);
layout.setIcon(icon);
@Nullable CharSequence title, @Nullable CharSequence description,
@Nullable Drawable icon) {
if (!TextUtils.isEmpty(title)) {
layout.setHeaderText(title);
}
if (!TextUtils.isEmpty(description)) {
layout.setDescriptionText(description);
}
if (icon != null) {
layout.setIcon(icon);
}
layout.setDividerInsets(Integer.MAX_VALUE, 0);
if (ThemeHelper.shouldApplyMaterialYouStyle(context)) {

View File

@@ -16,6 +16,7 @@
package com.android.settings.accessibility.shortcuts;
import static android.app.Activity.RESULT_CANCELED;
import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE;
import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS;
import static android.provider.Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED;
@@ -24,6 +25,7 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SER
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME;
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
@@ -35,19 +37,27 @@ import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.recyclerview.widget.RecyclerView;
import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
import com.android.settings.accessibility.AccessibilitySetupWizardUtils;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.core.AbstractPreferenceController;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.GlifPreferenceLayout;
import java.util.Collection;
import java.util.Set;
@@ -157,6 +167,42 @@ public class EditShortcutsPreferenceFragment extends DashboardFragment {
registerSettingsObserver();
}
@NonNull
@Override
public RecyclerView onCreateRecyclerView(
@NonNull LayoutInflater inflater, @NonNull ViewGroup parent,
@Nullable Bundle savedInstanceState) {
if (parent instanceof GlifPreferenceLayout layout) {
// Usually for setup wizard
return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
} else {
return super.onCreateRecyclerView(inflater, parent, savedInstanceState);
}
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (view instanceof GlifPreferenceLayout layout) {
// Usually for setup wizard
String title = null;
Intent intent = getIntent();
if (intent != null) {
title = intent.getStringExtra(EXTRA_SHOW_FRAGMENT_TITLE);
}
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
/* description= */ null, /* icon= */ null);
FooterBarMixin mixin = layout.getMixin(FooterBarMixin.class);
AccessibilitySetupWizardUtils.setPrimaryButton(getContext(), mixin, R.string.done,
() -> {
setResult(RESULT_CANCELED);
finish();
});
}
}
@Override
public void onResume() {
super.onResume();

View File

@@ -15,7 +15,9 @@
*/
package com.android.settings.accessibility;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import android.content.Context;
@@ -50,4 +52,14 @@ public class AccessibilitySetupWizardUtilsTest {
verify(layout).setIcon(icon);
verify(layout).setHeaderText(title);
}
@Test
public void setupGlifPreferenceLayout_descriptionIsNull_doesNotCallSetDescriptionText() {
GlifPreferenceLayout layout = mock(GlifPreferenceLayout.class);
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(mContext, layout, "title",
/* description= */ null, /* icon= */ null);
verify(layout, times(0)).setDescriptionText(any());
}
}

View File

@@ -16,7 +16,6 @@
package com.android.settings.accessibility.shortcuts;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
@@ -416,6 +415,7 @@ public class EditShortcutsPreferenceFragmentTest {
/* themeResId= */ 0, Lifecycle.State.INITIALIZED);
scenario.onFragment(fragment -> {
Intent intent = fragment.requireActivity().getIntent();
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, SCREEN_TITLE);
fragment.requireActivity().setIntent(createSuwIntent(intent, isInSuw));
// Since the fragment is attached before we have a chance
// to modify the activity's intent; initialize controllers again