From c26eb7fd2442f9304c27108a7e0c32fa2da9e3af Mon Sep 17 00:00:00 2001 From: Menghan Li Date: Thu, 27 Feb 2025 08:02:33 +0000 Subject: [PATCH 1/4] feat(A11yFeedback): Implements page ID to feedback bucket ID mapping This change adds a new API to a Pixel overlay feature provider, allowing Android to map page IDs to feedback bucket IDs. Bug: 393980229 Test: Manual testing for Pixel and non-Pixel overlay in real device Test: atest AccessibilitySettingsTest FeedbackManagerTest Flag: com.android.server.accessibility.enable_low_vision_generic_feedback Change-Id: I8a110b08816cac9c8a8e8c3e1218530fffb6f121 --- .../AccessibilityFeedbackFeatureProvider.java | 10 ++++------ ...AccessibilityFeedbackFeatureProviderImpl.java | 6 ++---- .../accessibility/AccessibilitySettings.java | 4 ++-- .../settings/accessibility/FeedbackManager.java | 16 +++------------- .../accessibility/AccessibilitySettingsTest.java | 13 ++----------- 5 files changed, 13 insertions(+), 36 deletions(-) diff --git a/src/com/android/settings/accessibility/AccessibilityFeedbackFeatureProvider.java b/src/com/android/settings/accessibility/AccessibilityFeedbackFeatureProvider.java index 018bd2e2ec1..7d03230ba96 100644 --- a/src/com/android/settings/accessibility/AccessibilityFeedbackFeatureProvider.java +++ b/src/com/android/settings/accessibility/AccessibilityFeedbackFeatureProvider.java @@ -15,8 +15,6 @@ */ package com.android.settings.accessibility; -import android.content.ComponentName; - import androidx.annotation.Nullable; /** @@ -25,11 +23,11 @@ import androidx.annotation.Nullable; public interface AccessibilityFeedbackFeatureProvider { /** - * Returns value according to the {@code componentName}. + * Returns value according to the {@code pageId}. * - * @param componentName the component name of the downloaded service or activity - * @return Feedback bucket ID + * @param pageId The unique identifier of the page. + * @return Feedback bucket ID associated with the page, or {@code null} if is not found. */ @Nullable - String getCategory(@Nullable ComponentName componentName); + String getCategory(int pageId); } diff --git a/src/com/android/settings/accessibility/AccessibilityFeedbackFeatureProviderImpl.java b/src/com/android/settings/accessibility/AccessibilityFeedbackFeatureProviderImpl.java index 917c5f64146..23818878327 100644 --- a/src/com/android/settings/accessibility/AccessibilityFeedbackFeatureProviderImpl.java +++ b/src/com/android/settings/accessibility/AccessibilityFeedbackFeatureProviderImpl.java @@ -15,8 +15,6 @@ */ package com.android.settings.accessibility; -import android.content.ComponentName; - import androidx.annotation.Nullable; /** Default implementation of {@link AccessibilityFeedbackFeatureProvider}. */ @@ -25,7 +23,7 @@ public class AccessibilityFeedbackFeatureProviderImpl implements @Override @Nullable - public String getCategory(@Nullable ComponentName componentName) { - return ""; + public String getCategory(int pageId) { + return null; } } diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index 57eb4d5fba4..127906bf1c8 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -255,7 +255,7 @@ public class AccessibilitySettings extends DashboardFragment implements public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { if (getFeedbackManager().isAvailable()) { menu.add(Menu.NONE, MENU_ID_SEND_FEEDBACK, Menu.NONE, - getPrefContext().getText(R.string.accessibility_send_feedback_title)); + R.string.accessibility_send_feedback_title); } super.onCreateOptionsMenu(menu, inflater); } @@ -286,7 +286,7 @@ public class AccessibilitySettings extends DashboardFragment implements private FeedbackManager getFeedbackManager() { if (mFeedbackManager == null) { - mFeedbackManager = new FeedbackManager(getActivity()); + mFeedbackManager = new FeedbackManager(getActivity(), SettingsEnums.ACCESSIBILITY); } return mFeedbackManager; } diff --git a/src/com/android/settings/accessibility/FeedbackManager.java b/src/com/android/settings/accessibility/FeedbackManager.java index 52aefd22d31..dc4baa77d3b 100644 --- a/src/com/android/settings/accessibility/FeedbackManager.java +++ b/src/com/android/settings/accessibility/FeedbackManager.java @@ -16,7 +16,6 @@ package com.android.settings.accessibility; import android.app.Activity; -import android.content.ComponentName; import android.content.Intent; import android.text.TextUtils; @@ -46,23 +45,14 @@ public class FeedbackManager { * Constructs a new FeedbackManager. * * @param activity The activity context. A WeakReference is used to prevent memory leaks. + * @param pageId The unique identifier of the page associated with the feedback. */ - public FeedbackManager(@Nullable Activity activity) { - this(activity, /* componentName= */ null); - } - - /** - * Constructs a new FeedbackManager. - * - * @param activity The activity context. A WeakReference is used to prevent memory leaks. - * @param componentName The component name associated with the feedback. - */ - public FeedbackManager(@Nullable Activity activity, @Nullable ComponentName componentName) { + public FeedbackManager(@Nullable Activity activity, int pageId) { this(activity, DeviceInfoUtils.getFeedbackReporterPackage(activity), FeatureFactory.getFeatureFactory() .getAccessibilityFeedbackFeatureProvider() - .getCategory(componentName)); + .getCategory(pageId)); } /** diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java index e590a80b27d..6710da90788 100644 --- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java @@ -22,7 +22,6 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -458,12 +457,10 @@ public class AccessibilitySettingsTest { setupFragment(); mFragment.setFeedbackManager( new FeedbackManager(mFragment.getActivity(), PACKAGE_NAME, DEFAULT_CATEGORY)); - when(mMenu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mMenuItem); mFragment.onCreateOptionsMenu(mMenu, /* inflater= */ null); - verify(mMenu).add(anyInt(), eq(AccessibilitySettings.MENU_ID_SEND_FEEDBACK), - anyInt(), eq(mContext.getText(R.string.accessibility_send_feedback_title))); + verify(mMenu).add(anyInt(), anyInt(), anyInt(), anyInt()); } @Test @@ -472,12 +469,10 @@ public class AccessibilitySettingsTest { setupFragment(); mFragment.setFeedbackManager( new FeedbackManager(mFragment.getActivity(), PACKAGE_NAME, DEFAULT_CATEGORY)); - when(mMenu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mMenuItem); mFragment.onCreateOptionsMenu(mMenu, /* inflater= */ null); - verify(mMenu, never()).add(anyInt(), eq(AccessibilitySettings.MENU_ID_SEND_FEEDBACK), - anyInt(), eq(mContext.getText(R.string.accessibility_send_feedback_title))); + verify(mMenu, never()).add(anyInt(), anyInt(), anyInt(), anyInt()); } @Test @@ -486,8 +481,6 @@ public class AccessibilitySettingsTest { setupFragment(); mFragment.setFeedbackManager( new FeedbackManager(mFragment.getActivity(), PACKAGE_NAME, DEFAULT_CATEGORY)); - when(mMenu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mMenuItem); - mFragment.onCreateOptionsMenu(mMenu, /* inflater= */ null); when(mMenuItem.getItemId()).thenReturn(AccessibilitySettings.MENU_ID_SEND_FEEDBACK); mFragment.onOptionsItemSelected(mMenuItem); @@ -502,8 +495,6 @@ public class AccessibilitySettingsTest { setupFragment(); mFragment.setFeedbackManager( new FeedbackManager(mFragment.getActivity(), PACKAGE_NAME, DEFAULT_CATEGORY)); - when(mMenu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mMenuItem); - mFragment.onCreateOptionsMenu(mMenu, /* inflater= */ null); when(mMenuItem.getItemId()).thenReturn(AccessibilitySettings.MENU_ID_SEND_FEEDBACK); mFragment.onOptionsItemSelected(mMenuItem); From bcddc529baf6695ee793ee293fa54e8214f4715d Mon Sep 17 00:00:00 2001 From: Menghan Li Date: Tue, 4 Mar 2025 08:54:43 +0000 Subject: [PATCH 2/4] chore(A11yFeedback): Removing Legacy Android M Menu Behavior Removed legacy code that suppressed search and help menus for accessibility features. This workaround was implemented in Android M (ag/10438579) and is no longer needed. Bug: 393980229 Test: Manual testing on Pixel and non-Pixel devices Flag: EXEMPT cleanup Change-Id: Ide4978bb5d2fdacad48399fb8525c6a0dfcd4277 --- .../LaunchAccessibilityActivityPreferenceFragment.java | 9 --------- .../ToggleAccessibilityServicePreferenceFragment.java | 9 --------- 2 files changed, 18 deletions(-) diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java index 013fdeeb215..3287ce8ec51 100644 --- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java +++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java @@ -31,8 +31,6 @@ import android.os.UserHandle; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityManager; @@ -115,13 +113,6 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature return mTileComponentName; } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - // Do not call super. We don't want to see the "Help & feedback" option on this page so as - // not to confuse users who think they might be able to send feedback about a specific - // accessibility service from this page. - } - // IMPORTANT: Refresh the info since there are dynamically changing capabilities. private AccessibilityShortcutInfo getAccessibilityShortcutInfo() { final List infos = AccessibilityManager.getInstance( diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java index 06bcdb7c2eb..3cd4bb6b3ed 100644 --- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -39,8 +39,6 @@ import android.os.SystemClock; import android.text.BidiFormatter; import android.text.TextUtils; import android.util.Log; -import android.view.Menu; -import android.view.MenuInflater; import android.view.accessibility.AccessibilityManager; import android.widget.CompoundButton; @@ -75,13 +73,6 @@ public class ToggleAccessibilityServicePreferenceFragment extends return getArguments().getInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY); } - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - // Do not call super. We don't want to see the "Help & feedback" option on this page so as - // not to confuse users who think they might be able to send feedback about a specific - // accessibility service from this page. - } - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); From 9ffca7cbfc4d077754ac711984229496313219bd Mon Sep 17 00:00:00 2001 From: Menghan Li Date: Tue, 4 Mar 2025 09:20:33 +0000 Subject: [PATCH 3/4] feat(A11yFeedback): Add feedback entry for downloaded Accessibility This entry point allows users to access in the action bar. Visibility is controlled by the aconfig and FeedbackManager#isAvailable Bug: 393980229 Test: Manual testing on Pixel and non-Pixel devices Test: atest ToggleFeaturePreferenceFragmentTest Flag: com.android.server.accessibility.enable_low_vision_generic_feedback Change-Id: Ie6dfb6a887fe5a894622e86bab39878f8adea758 --- .../AccessibilityDetailsSettingsFragment.java | 1 + .../accessibility/AccessibilitySettings.java | 1 + ...cessibilityActivityPreferenceFragment.java | 5 ++ .../RestrictedPreferenceHelper.java | 1 + ...ccessibilityServicePreferenceFragment.java | 5 ++ .../ToggleFeaturePreferenceFragment.java | 48 +++++++++++++ ...eaderPreferenceFragmentForSetupWizard.java | 6 ++ ...SpeakPreferenceFragmentForSetupWizard.java | 6 ++ .../ToggleFeaturePreferenceFragmentTest.java | 72 ++++++++++++++++++- 9 files changed, 143 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java b/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java index 4e9cd92d6c0..be7a73ba85a 100644 --- a/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java +++ b/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java @@ -232,6 +232,7 @@ public class AccessibilityDetailsSettingsFragment extends InstrumentedFragment { .getAccessibilityMetricsFeatureProvider() .getDownloadedFeatureMetricsCategory(componentName); extras.putInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY, metricsCategory); + extras.putInt(AccessibilitySettings.EXTRA_FEEDBACK_CATEGORY, metricsCategory); extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName); extras.putInt(AccessibilitySettings.EXTRA_ANIMATED_IMAGE_RES, info.getAnimatedImageRes()); diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index 127906bf1c8..2c8247f959c 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -97,6 +97,7 @@ public class AccessibilitySettings extends DashboardFragment implements static final String EXTRA_HTML_DESCRIPTION = "html_description"; static final String EXTRA_TIME_FOR_LOGGING = "start_time_to_log_a11y_tool"; static final String EXTRA_METRICS_CATEGORY = "metrics_category"; + static final String EXTRA_FEEDBACK_CATEGORY = "feedback_category"; // Timeout before we update the services if packages are added/removed // since the AccessibilityManagerService has to do that processing first diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java index 3287ce8ec51..c6995b01af7 100644 --- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java +++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java @@ -57,6 +57,11 @@ public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeature return getArguments().getInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY); } + @Override + public int getFeedbackCategory() { + return getArguments().getInt(AccessibilitySettings.EXTRA_FEEDBACK_CATEGORY); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { diff --git a/src/com/android/settings/accessibility/RestrictedPreferenceHelper.java b/src/com/android/settings/accessibility/RestrictedPreferenceHelper.java index 5c18be8626c..ae6239af562 100644 --- a/src/com/android/settings/accessibility/RestrictedPreferenceHelper.java +++ b/src/com/android/settings/accessibility/RestrictedPreferenceHelper.java @@ -217,6 +217,7 @@ public class RestrictedPreferenceHelper { extras.putInt(AccessibilitySettings.EXTRA_ANIMATED_IMAGE_RES, imageRes); extras.putString(AccessibilitySettings.EXTRA_HTML_DESCRIPTION, htmlDescription); extras.putInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY, metricsCategory); + extras.putInt(AccessibilitySettings.EXTRA_FEEDBACK_CATEGORY, metricsCategory); } /** diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java index 3cd4bb6b3ed..a11ad466003 100644 --- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -73,6 +73,11 @@ public class ToggleAccessibilityServicePreferenceFragment extends return getArguments().getInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY); } + @Override + public int getFeedbackCategory() { + return getArguments().getInt(AccessibilitySettings.EXTRA_FEEDBACK_CATEGORY); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java index 93672516339..66c32df1798 100644 --- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java @@ -40,6 +40,9 @@ import android.service.quicksettings.TileService; import android.text.Html; import android.text.TextUtils; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityManager; @@ -48,6 +51,7 @@ import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.ImageView; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; @@ -89,6 +93,7 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment // , a11y settings will get the resources successfully. private static final String IMG_PREFIX = "R.drawable."; private static final String DRAWABLE_FOLDER = "drawable"; + static final int MENU_ID_SEND_FEEDBACK = 0; protected TopIntroPreference mTopIntroPreference; protected SettingsMainSwitchPreference mToggleServiceSwitchPreference; @@ -102,6 +107,7 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment protected Intent mSettingsIntent; // The mComponentName maybe null, such as Magnify protected ComponentName mComponentName; + @Nullable private FeedbackManager mFeedbackManager; protected CharSequence mFeatureName; protected Uri mImageUri; protected CharSequence mHtmlDescription; @@ -240,6 +246,24 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment removeActionBarToggleSwitch(); } + @Override + public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { + if (getFeedbackManager().isAvailable()) { + menu.add(Menu.NONE, MENU_ID_SEND_FEEDBACK, Menu.NONE, + R.string.accessibility_send_feedback_title); + } + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + if (item.getItemId() == MENU_ID_SEND_FEEDBACK) { + getFeedbackManager().sendFeedback(); + return true; + } + return super.onOptionsItemSelected(item); + } + @Override public int getDialogMetricsCategory(int dialogId) { switch (dialogId) { @@ -739,4 +763,28 @@ public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment super.onCreateRecyclerView(inflater, parent, savedInstanceState); return AccessibilityFragmentUtils.addCollectionInfoToAccessibilityDelegate(recyclerView); } + + @VisibleForTesting + void setFeedbackManager(FeedbackManager feedbackManager) { + this.mFeedbackManager = feedbackManager; + } + + private FeedbackManager getFeedbackManager() { + if (mFeedbackManager == null) { + mFeedbackManager = new FeedbackManager(getActivity(), getFeedbackCategory()); + } + return mFeedbackManager; + } + + /** + * Returns the category of the feedback page. + * + *

By default, this method returns {@link SettingsEnums#PAGE_UNKNOWN}. This indicates that + * the feedback category is unknown, and the absence of a feedback menu. + * + * @return The feedback category, which is {@link SettingsEnums#PAGE_UNKNOWN} by default. + */ + protected int getFeedbackCategory() { + return SettingsEnums.PAGE_UNKNOWN; + } } diff --git a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java index 10813a7e262..eb0c93b755f 100644 --- a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java +++ b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java @@ -79,6 +79,12 @@ public class ToggleScreenReaderPreferenceFragmentForSetupWizard return SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SCREEN_READER; } + @Override + public int getFeedbackCategory() { + // The feedback options should not be displayed on the setup wizard page. + return SettingsEnums.PAGE_UNKNOWN; + } + @Override public void onStop() { // Log the final choice in value if it's different from the previous value. diff --git a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java index 10796b5d218..14dc0bc1caf 100644 --- a/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java +++ b/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizard.java @@ -79,6 +79,12 @@ public class ToggleSelectToSpeakPreferenceFragmentForSetupWizard return SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SELECT_TO_SPEAK; } + @Override + public int getFeedbackCategory() { + // The feedback options should not be displayed on the setup wizard page. + return SettingsEnums.PAGE_UNKNOWN; + } + @Override public void onStop() { // Log the final choice in value if it's different from the previous value. diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java index 8f9d2e1fbd0..571075cba31 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java @@ -23,9 +23,12 @@ import static com.android.internal.accessibility.common.ShortcutConstants.UserSh import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.argThat; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -37,10 +40,13 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.icu.text.CaseMap; import android.os.Bundle; +import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityManager; @@ -66,8 +72,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; -import org.mockito.MockitoAnnotations; import org.mockito.Spy; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.robolectric.shadow.api.Shadow; @@ -83,6 +90,8 @@ import java.util.Locale; ShadowAccessibilityManager.class }) public class ToggleFeaturePreferenceFragmentTest { + @Rule + public final MockitoRule mocks = MockitoJUnit.rule(); @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); @@ -96,6 +105,7 @@ public class ToggleFeaturePreferenceFragmentTest { PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME); private static final String PLACEHOLDER_TILE_TOOLTIP_CONTENT = PLACEHOLDER_PACKAGE_NAME + "tooltip_content"; + private static final String PLACEHOLDER_CATEGORY = "category"; private static final String PLACEHOLDER_DIALOG_TITLE = "title"; private static final String DEFAULT_SUMMARY = "default summary"; private static final String DEFAULT_DESCRIPTION = "default description"; @@ -120,10 +130,13 @@ public class ToggleFeaturePreferenceFragmentTest { private ContentResolver mContentResolver; @Mock private PackageManager mPackageManager; + @Mock + private Menu mMenu; + @Mock + private MenuItem mMenuItem; @Before public void setUpTestFragment() { - MockitoAnnotations.initMocks(this); mShadowAccessibilityManager = Shadow.extract( mContext.getSystemService(AccessibilityManager.class)); @@ -169,6 +182,61 @@ public class ToggleFeaturePreferenceFragmentTest { any(AccessibilitySettingsContentObserver.class)); } + @Test + @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_LOW_VISION_GENERIC_FEEDBACK) + public void onCreateOptionsMenu_enableLowVisionGenericFeedback_shouldAddSendFeedbackMenu() { + mFragment.setFeedbackManager( + new FeedbackManager(mActivity, PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_CATEGORY)); + + mFragment.onCreateOptionsMenu(mMenu, /* inflater= */ null); + + verify(mMenu).add(anyInt(), eq(ToggleFeaturePreferenceFragment.MENU_ID_SEND_FEEDBACK), + anyInt(), eq(R.string.accessibility_send_feedback_title)); + } + + @Test + @DisableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_LOW_VISION_GENERIC_FEEDBACK) + public void onCreateOptionsMenu_disableLowVisionGenericFeedback_shouldNotAddSendFeedbackMenu() { + mFragment.setFeedbackManager( + new FeedbackManager(mActivity, PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_CATEGORY)); + + mFragment.onCreateOptionsMenu(mMenu, /* inflater= */ null); + + verify(mMenu, never()).add(anyInt(), + eq(ToggleFeaturePreferenceFragment.MENU_ID_SEND_FEEDBACK), anyInt(), + eq(R.string.accessibility_send_feedback_title)); + } + + @Test + @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_LOW_VISION_GENERIC_FEEDBACK) + public void onOptionsItemSelected_enableLowVisionGenericFeedback_shouldStartSendFeedback() { + mFragment.setFeedbackManager( + new FeedbackManager(mActivity, PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_CATEGORY)); + when(mMenuItem.getItemId()).thenReturn( + ToggleFeaturePreferenceFragment.MENU_ID_SEND_FEEDBACK); + + mFragment.onOptionsItemSelected(mMenuItem); + + verify(mActivity).startActivityForResult( + argThat(intent -> intent != null + && Intent.ACTION_BUG_REPORT.equals(intent.getAction())), anyInt()); + } + + @Test + @DisableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_LOW_VISION_GENERIC_FEEDBACK) + public void onOptionsItemSelected_disableLowVisionGenericFeedback_shouldNotStartSendFeedback() { + mFragment.setFeedbackManager( + new FeedbackManager(mActivity, PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_CATEGORY)); + when(mMenuItem.getItemId()).thenReturn( + ToggleFeaturePreferenceFragment.MENU_ID_SEND_FEEDBACK); + + mFragment.onOptionsItemSelected(mMenuItem); + + verify(mActivity, never()).startActivityForResult( + argThat(intent -> intent != null + && Intent.ACTION_BUG_REPORT.equals(intent.getAction())), anyInt()); + } + @Test public void updateShortcutPreferenceData_assignDefaultValueToVariable() { mFragment.mComponentName = PLACEHOLDER_COMPONENT_NAME; From b511fe690bcf3a051e8149655bbc422777cfc6f1 Mon Sep 17 00:00:00 2001 From: Menghan Li Date: Mon, 3 Mar 2025 02:58:50 +0000 Subject: [PATCH 4/4] refactor(A11yFeedback): Rename AccessibilityMetricsFeatureProvider The AccessibilityMetricsFeatureProvider currently provides page IDs derived from component names, primarily for metrics purposes. However, its functionality should be expanded to also support feedback needs, not just metrics collection, by returning appropriate settings enum values. Bug: 393980229 Test: atest AccessibilityMetricsFeatureProviderGoogleImplTest Flag: com.android.server.accessibility.enable_low_vision_generic_feedback Change-Id: I2d64db866010ae5e3c6a9738f92860df3d0b86aa --- .../accessibility/AccessibilityActivityPreference.java | 7 +++---- .../AccessibilityDetailsSettingsFragment.java | 9 ++++----- ...er.java => AccessibilityPageIdFeatureProvider.java} | 6 +++--- ...ava => AccessibilityPageIdFeatureProviderImpl.java} | 10 ++++++---- .../accessibility/AccessibilityServicePreference.java | 7 +++---- src/com/android/settings/overlay/FeatureFactory.kt | 6 +++--- src/com/android/settings/overlay/FeatureFactoryImpl.kt | 8 ++++---- .../android/settings/testutils/FakeFeatureFactory.java | 10 +++++----- .../android/settings/testutils/FakeFeatureFactory.kt | 4 ++-- .../android/settings/testutils/FakeFeatureFactory.java | 10 +++++----- 10 files changed, 38 insertions(+), 39 deletions(-) rename src/com/android/settings/accessibility/{AccessibilityMetricsFeatureProvider.java => AccessibilityPageIdFeatureProvider.java} (84%) rename src/com/android/settings/accessibility/{AccessibilityMetricsFeatureProviderImpl.java => AccessibilityPageIdFeatureProviderImpl.java} (75%) diff --git a/src/com/android/settings/accessibility/AccessibilityActivityPreference.java b/src/com/android/settings/accessibility/AccessibilityActivityPreference.java index a8e456d3e35..3ae64fcb873 100644 --- a/src/com/android/settings/accessibility/AccessibilityActivityPreference.java +++ b/src/com/android/settings/accessibility/AccessibilityActivityPreference.java @@ -127,14 +127,13 @@ public class AccessibilityActivityPreference extends RestrictedPreference { final String htmlDescription = mA11yShortcutInfo.loadHtmlDescription(mPm); final String settingsClassName = mA11yShortcutInfo.getSettingsActivityName(); final String tileServiceClassName = mA11yShortcutInfo.getTileServiceName(); - final int metricsCategory = FeatureFactory.getFeatureFactory() - .getAccessibilityMetricsFeatureProvider() - .getDownloadedFeatureMetricsCategory(mComponentName); + final int pageIdCategory = FeatureFactory.getFeatureFactory() + .getAccessibilityPageIdFeatureProvider().getCategory(mComponentName); ThreadUtils.getUiThreadHandler().post(() -> { RestrictedPreferenceHelper.putBasicExtras( this, prefKey, getTitle(), intro, description, imageRes, - htmlDescription, mComponentName, metricsCategory); + htmlDescription, mComponentName, pageIdCategory); RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName); RestrictedPreferenceHelper.putTileServiceExtras( this, getPackageName(), tileServiceClassName); diff --git a/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java b/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java index be7a73ba85a..347c7693356 100644 --- a/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java +++ b/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragment.java @@ -228,11 +228,10 @@ public class AccessibilityDetailsSettingsFragment extends InstrumentedFragment { new ComponentName(packageName, tileServiceClassName).flattenToString()); } - final int metricsCategory = FeatureFactory.getFeatureFactory() - .getAccessibilityMetricsFeatureProvider() - .getDownloadedFeatureMetricsCategory(componentName); - extras.putInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY, metricsCategory); - extras.putInt(AccessibilitySettings.EXTRA_FEEDBACK_CATEGORY, metricsCategory); + final int pageIdCategory = FeatureFactory.getFeatureFactory() + .getAccessibilityPageIdFeatureProvider().getCategory(componentName); + extras.putInt(AccessibilitySettings.EXTRA_METRICS_CATEGORY, pageIdCategory); + extras.putInt(AccessibilitySettings.EXTRA_FEEDBACK_CATEGORY, pageIdCategory); extras.putParcelable(AccessibilitySettings.EXTRA_COMPONENT_NAME, componentName); extras.putInt(AccessibilitySettings.EXTRA_ANIMATED_IMAGE_RES, info.getAnimatedImageRes()); diff --git a/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java b/src/com/android/settings/accessibility/AccessibilityPageIdFeatureProvider.java similarity index 84% rename from src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java rename to src/com/android/settings/accessibility/AccessibilityPageIdFeatureProvider.java index a9d7c0551d1..698efbeee90 100644 --- a/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProvider.java +++ b/src/com/android/settings/accessibility/AccessibilityPageIdFeatureProvider.java @@ -21,9 +21,9 @@ import android.content.ComponentName; import androidx.annotation.Nullable; /** - * Provider for Accessibility metrics related features. + * Provider for Accessibility page id related features. */ -public interface AccessibilityMetricsFeatureProvider { +public interface AccessibilityPageIdFeatureProvider { /** * Returns {@link android.app.settings.SettingsEnums} value according to the {@code @@ -32,5 +32,5 @@ public interface AccessibilityMetricsFeatureProvider { * @param componentName the component name of the downloaded service or activity * @return value in {@link android.app.settings.SettingsEnums} */ - int getDownloadedFeatureMetricsCategory(@Nullable ComponentName componentName); + int getCategory(@Nullable ComponentName componentName); } diff --git a/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java b/src/com/android/settings/accessibility/AccessibilityPageIdFeatureProviderImpl.java similarity index 75% rename from src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java rename to src/com/android/settings/accessibility/AccessibilityPageIdFeatureProviderImpl.java index 0f85f38f571..acd8aab3291 100644 --- a/src/com/android/settings/accessibility/AccessibilityMetricsFeatureProviderImpl.java +++ b/src/com/android/settings/accessibility/AccessibilityPageIdFeatureProviderImpl.java @@ -19,14 +19,16 @@ package com.android.settings.accessibility; import android.app.settings.SettingsEnums; import android.content.ComponentName; +import androidx.annotation.Nullable; + /** - * Provider implementation for Accessibility metrics related features. + * Provider implementation for Accessibility page id related features. */ -public class AccessibilityMetricsFeatureProviderImpl implements - AccessibilityMetricsFeatureProvider { +public class AccessibilityPageIdFeatureProviderImpl implements + AccessibilityPageIdFeatureProvider { @Override - public int getDownloadedFeatureMetricsCategory(ComponentName componentName) { + public int getCategory(@Nullable ComponentName componentName) { return SettingsEnums.ACCESSIBILITY_SERVICE; } } diff --git a/src/com/android/settings/accessibility/AccessibilityServicePreference.java b/src/com/android/settings/accessibility/AccessibilityServicePreference.java index 8a22d820af9..703277422d6 100644 --- a/src/com/android/settings/accessibility/AccessibilityServicePreference.java +++ b/src/com/android/settings/accessibility/AccessibilityServicePreference.java @@ -123,13 +123,12 @@ public class AccessibilityServicePreference extends RestrictedPreference { final String settingsClassName = mA11yServiceInfo.getSettingsActivityName(); final String tileServiceClassName = mA11yServiceInfo.getTileServiceName(); final ResolveInfo resolveInfo = mA11yServiceInfo.getResolveInfo(); - final int metricsCategory = FeatureFactory.getFeatureFactory() - .getAccessibilityMetricsFeatureProvider() - .getDownloadedFeatureMetricsCategory(mComponentName); + final int pageIdCategory = FeatureFactory.getFeatureFactory() + .getAccessibilityPageIdFeatureProvider().getCategory(mComponentName); ThreadUtils.getUiThreadHandler().post(() -> { RestrictedPreferenceHelper.putBasicExtras( this, prefKey, getTitle(), intro, description, imageRes, - htmlDescription, mComponentName, metricsCategory); + htmlDescription, mComponentName, pageIdCategory); RestrictedPreferenceHelper.putServiceExtras(this, resolveInfo, mServiceEnabled); RestrictedPreferenceHelper.putSettingsExtras(this, getPackageName(), settingsClassName); RestrictedPreferenceHelper.putTileServiceExtras( diff --git a/src/com/android/settings/overlay/FeatureFactory.kt b/src/com/android/settings/overlay/FeatureFactory.kt index 46aa19b0d05..7e04f0d4373 100644 --- a/src/com/android/settings/overlay/FeatureFactory.kt +++ b/src/com/android/settings/overlay/FeatureFactory.kt @@ -17,7 +17,7 @@ package com.android.settings.overlay import android.content.Context import com.android.settings.accessibility.AccessibilityFeedbackFeatureProvider -import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider +import com.android.settings.accessibility.AccessibilityPageIdFeatureProvider import com.android.settings.accessibility.AccessibilitySearchFeatureProvider import com.android.settings.accounts.AccountFeatureProvider import com.android.settings.applications.ApplicationFeatureProvider @@ -145,9 +145,9 @@ abstract class FeatureFactory { abstract val accessibilitySearchFeatureProvider: AccessibilitySearchFeatureProvider /** - * Retrieves implementation for Accessibility metrics category feature. + * Retrieves implementation for Accessibility page id category feature. */ - abstract val accessibilityMetricsFeatureProvider: AccessibilityMetricsFeatureProvider + abstract val accessibilityPageIdFeatureProvider: AccessibilityPageIdFeatureProvider /** * Retrieves implementation for advanced vpn feature. diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.kt b/src/com/android/settings/overlay/FeatureFactoryImpl.kt index 08abf2bd466..4949c3f7f0c 100644 --- a/src/com/android/settings/overlay/FeatureFactoryImpl.kt +++ b/src/com/android/settings/overlay/FeatureFactoryImpl.kt @@ -22,8 +22,8 @@ import android.net.VpnManager import android.os.UserManager import com.android.settings.accessibility.AccessibilityFeedbackFeatureProvider import com.android.settings.accessibility.AccessibilityFeedbackFeatureProviderImpl -import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider -import com.android.settings.accessibility.AccessibilityMetricsFeatureProviderImpl +import com.android.settings.accessibility.AccessibilityPageIdFeatureProvider +import com.android.settings.accessibility.AccessibilityPageIdFeatureProviderImpl import com.android.settings.accessibility.AccessibilitySearchFeatureProvider import com.android.settings.accessibility.AccessibilitySearchFeatureProviderImpl import com.android.settings.accounts.AccountFeatureProvider @@ -174,8 +174,8 @@ open class FeatureFactoryImpl : FeatureFactory() { AccessibilitySearchFeatureProviderImpl() } - override val accessibilityMetricsFeatureProvider: AccessibilityMetricsFeatureProvider by lazy { - AccessibilityMetricsFeatureProviderImpl() + override val accessibilityPageIdFeatureProvider: AccessibilityPageIdFeatureProvider by lazy { + AccessibilityPageIdFeatureProviderImpl() } override val advancedVpnFeatureProvider by lazy { AdvancedVpnFeatureProviderImpl() } diff --git a/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java index c5d4c36228a..e002de1e391 100644 --- a/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/robotests/testutils/com/android/settings/testutils/FakeFeatureFactory.java @@ -20,7 +20,7 @@ import static org.mockito.Mockito.mock; import android.content.Context; import com.android.settings.accessibility.AccessibilityFeedbackFeatureProvider; -import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider; +import com.android.settings.accessibility.AccessibilityPageIdFeatureProvider; import com.android.settings.accessibility.AccessibilitySearchFeatureProvider; import com.android.settings.accounts.AccountFeatureProvider; import com.android.settings.applications.ApplicationFeatureProvider; @@ -94,7 +94,7 @@ public class FakeFeatureFactory extends FeatureFactory { public WifiTrackerLibProvider wifiTrackerLibProvider; public SecuritySettingsFeatureProvider securitySettingsFeatureProvider; public AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider; - public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider; + public AccessibilityPageIdFeatureProvider mAccessibilityPageIdFeatureProvider; public AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider; public WifiFeatureProvider mWifiFeatureProvider; public KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider; @@ -145,7 +145,7 @@ public class FakeFeatureFactory extends FeatureFactory { wifiTrackerLibProvider = mock(WifiTrackerLibProvider.class); securitySettingsFeatureProvider = mock(SecuritySettingsFeatureProvider.class); mAccessibilitySearchFeatureProvider = mock(AccessibilitySearchFeatureProvider.class); - mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class); + mAccessibilityPageIdFeatureProvider = mock(AccessibilityPageIdFeatureProvider.class); mAdvancedVpnFeatureProvider = mock(AdvancedVpnFeatureProvider.class); mWifiFeatureProvider = mock(WifiFeatureProvider.class); mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class); @@ -294,8 +294,8 @@ public class FakeFeatureFactory extends FeatureFactory { } @Override - public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() { - return mAccessibilityMetricsFeatureProvider; + public AccessibilityPageIdFeatureProvider getAccessibilityPageIdFeatureProvider() { + return mAccessibilityPageIdFeatureProvider; } @Override diff --git a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt index 56dd444b474..7b1bdc0ed9c 100644 --- a/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt +++ b/tests/spa_unit/src/com/android/settings/testutils/FakeFeatureFactory.kt @@ -18,7 +18,7 @@ package com.android.settings.testutils import android.content.Context import com.android.settings.accessibility.AccessibilityFeedbackFeatureProvider -import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider +import com.android.settings.accessibility.AccessibilityPageIdFeatureProvider import com.android.settings.accessibility.AccessibilitySearchFeatureProvider import com.android.settings.accounts.AccountFeatureProvider import com.android.settings.applications.ApplicationFeatureProvider @@ -130,7 +130,7 @@ class FakeFeatureFactory : FeatureFactory() { get() = TODO("Not yet implemented") override val accessibilitySearchFeatureProvider: AccessibilitySearchFeatureProvider get() = TODO("Not yet implemented") - override val accessibilityMetricsFeatureProvider: AccessibilityMetricsFeatureProvider + override val accessibilityPageIdFeatureProvider: AccessibilityPageIdFeatureProvider get() = TODO("Not yet implemented") override val advancedVpnFeatureProvider: AdvancedVpnFeatureProvider get() = TODO("Not yet implemented") diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java index d77d7a4ff01..eda0aeb934c 100644 --- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java +++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java @@ -20,7 +20,7 @@ import static org.mockito.Mockito.mock; import android.content.Context; import com.android.settings.accessibility.AccessibilityFeedbackFeatureProvider; -import com.android.settings.accessibility.AccessibilityMetricsFeatureProvider; +import com.android.settings.accessibility.AccessibilityPageIdFeatureProvider; import com.android.settings.accessibility.AccessibilitySearchFeatureProvider; import com.android.settings.accounts.AccountFeatureProvider; import com.android.settings.applications.ApplicationFeatureProvider; @@ -93,7 +93,7 @@ public class FakeFeatureFactory extends FeatureFactory { public WifiTrackerLibProvider wifiTrackerLibProvider; public SecuritySettingsFeatureProvider securitySettingsFeatureProvider; public AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider; - public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider; + public AccessibilityPageIdFeatureProvider mAccessibilityPageIdFeatureProvider; public AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider; public WifiFeatureProvider mWifiFeatureProvider; public KeyboardSettingsFeatureProvider mKeyboardSettingsFeatureProvider; @@ -146,7 +146,7 @@ public class FakeFeatureFactory extends FeatureFactory { wifiTrackerLibProvider = mock(WifiTrackerLibProvider.class); securitySettingsFeatureProvider = mock(SecuritySettingsFeatureProvider.class); mAccessibilitySearchFeatureProvider = mock(AccessibilitySearchFeatureProvider.class); - mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class); + mAccessibilityPageIdFeatureProvider = mock(AccessibilityPageIdFeatureProvider.class); mAdvancedVpnFeatureProvider = mock(AdvancedVpnFeatureProvider.class); mWifiFeatureProvider = mock(WifiFeatureProvider.class); mKeyboardSettingsFeatureProvider = mock(KeyboardSettingsFeatureProvider.class); @@ -295,8 +295,8 @@ public class FakeFeatureFactory extends FeatureFactory { } @Override - public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() { - return mAccessibilityMetricsFeatureProvider; + public AccessibilityPageIdFeatureProvider getAccessibilityPageIdFeatureProvider() { + return mAccessibilityPageIdFeatureProvider; } @Override