Merge changes from topic "hearing_shortcut"
* changes: [Hearing device shortcut] Provide a way to open accessibility hearing device settings via intent [Hearing device shortcut] Setup shortcut for hearing device
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
package com.android.settings.accessibility;
|
package com.android.settings.accessibility;
|
||||||
|
|
||||||
import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_BUTTON_COMPONENT_NAME;
|
import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_BUTTON_COMPONENT_NAME;
|
||||||
|
import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME;
|
||||||
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
|
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
|
||||||
|
|
||||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||||
@@ -31,6 +32,7 @@ import android.content.pm.ServiceInfo;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.util.FeatureFlagUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
|
|
||||||
@@ -113,6 +115,13 @@ public class AccessibilityDetailsSettingsFragment extends InstrumentedFragment {
|
|||||||
return new LaunchFragmentArguments(destination, /* arguments= */ null);
|
return new LaunchFragmentArguments(destination, /* arguments= */ null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME.equals(componentName)
|
||||||
|
&& FeatureFlagUtils.isEnabled(getContext(),
|
||||||
|
FeatureFlagUtils.SETTINGS_ACCESSIBILITY_HEARING_AID_PAGE)) {
|
||||||
|
final String destination = AccessibilityHearingAidsFragment.class.getName();
|
||||||
|
return new LaunchFragmentArguments(destination, /* arguments= */ null);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -18,33 +18,48 @@ package com.android.settings.accessibility;
|
|||||||
|
|
||||||
import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH;
|
import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH;
|
||||||
|
|
||||||
|
import android.content.ComponentName;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.preference.PreferenceCategory;
|
||||||
|
|
||||||
|
import com.android.internal.accessibility.AccessibilityShortcutController;
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.dashboard.RestrictedDashboardFragment;
|
|
||||||
import com.android.settings.search.BaseSearchIndexProvider;
|
import com.android.settings.search.BaseSearchIndexProvider;
|
||||||
import com.android.settingslib.search.SearchIndexable;
|
import com.android.settingslib.search.SearchIndexable;
|
||||||
|
|
||||||
/** Accessibility settings for hearing aids. */
|
/** Accessibility settings for hearing aids. */
|
||||||
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
|
||||||
public class AccessibilityHearingAidsFragment extends RestrictedDashboardFragment {
|
public class AccessibilityHearingAidsFragment extends AccessibilityShortcutPreferenceFragment {
|
||||||
|
|
||||||
private static final String TAG = "AccessibilityHearingAidsFragment";
|
private static final String TAG = "AccessibilityHearingAidsFragment";
|
||||||
|
private static final String KEY_DEVICE_CONTROL_CATEGORY = "device_control_category";
|
||||||
|
private static final int FIRST_PREFERENCE_IN_CATEGORY_INDEX = -1;
|
||||||
|
private String mFeatureName;
|
||||||
|
|
||||||
public AccessibilityHearingAidsFragment() {
|
public AccessibilityHearingAidsFragment() {
|
||||||
super(DISALLOW_CONFIG_BLUETOOTH);
|
super(DISALLOW_CONFIG_BLUETOOTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
mFeatureName = getContext().getString(R.string.accessibility_hearingaid_title);
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
// TODO(b/237625815): Add shortcutPreference by extending
|
final View view = super.onCreateView(inflater, container, savedInstanceState);
|
||||||
// AccessibilityShortcutPreferenceFragment
|
final PreferenceCategory controlCategory = findPreference(KEY_DEVICE_CONTROL_CATEGORY);
|
||||||
|
// Move the preference under controlCategory need to remove the original first.
|
||||||
return super.onCreateView(inflater, container, savedInstanceState);
|
mShortcutPreference.setOrder(FIRST_PREFERENCE_IN_CATEGORY_INDEX);
|
||||||
|
getPreferenceScreen().removePreference(mShortcutPreference);
|
||||||
|
controlCategory.addPreference(mShortcutPreference);
|
||||||
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -63,6 +78,39 @@ public class AccessibilityHearingAidsFragment extends RestrictedDashboardFragmen
|
|||||||
return TAG;
|
return TAG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ComponentName getComponentName() {
|
||||||
|
return AccessibilityShortcutController.ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CharSequence getLabelName() {
|
||||||
|
return mFeatureName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ComponentName getTileComponentName() {
|
||||||
|
// Don't have quick settings tile for now.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CharSequence getTileTooltipContent(int type) {
|
||||||
|
// Don't have quick settings tile for now.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean showGeneralCategory() {
|
||||||
|
// Have customized category for accessibility hearings aids page.
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected CharSequence getShortcutTitle() {
|
||||||
|
return getText(R.string.accessibility_hearing_device_shortcut_title);
|
||||||
|
}
|
||||||
|
|
||||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||||
new BaseSearchIndexProvider(R.xml.accessibility_hearing_aids);
|
new BaseSearchIndexProvider(R.xml.accessibility_hearing_aids);
|
||||||
}
|
}
|
||||||
|
@@ -148,11 +148,14 @@ public class AccessibilitySettings extends DashboardFragment {
|
|||||||
|
|
||||||
public AccessibilitySettings() {
|
public AccessibilitySettings() {
|
||||||
// Observe changes to anything that the shortcut can toggle, so we can reflect updates
|
// Observe changes to anything that the shortcut can toggle, so we can reflect updates
|
||||||
final Collection<AccessibilityShortcutController.ToggleableFrameworkFeatureInfo> features =
|
final Collection<AccessibilityShortcutController.FrameworkFeatureInfo> features =
|
||||||
AccessibilityShortcutController.getFrameworkShortcutFeaturesMap().values();
|
AccessibilityShortcutController.getFrameworkShortcutFeaturesMap().values();
|
||||||
final List<String> shortcutFeatureKeys = new ArrayList<>(features.size());
|
final List<String> shortcutFeatureKeys = new ArrayList<>(features.size());
|
||||||
for (AccessibilityShortcutController.ToggleableFrameworkFeatureInfo feature : features) {
|
for (AccessibilityShortcutController.FrameworkFeatureInfo feature : features) {
|
||||||
shortcutFeatureKeys.add(feature.getSettingKey());
|
final String key = feature.getSettingKey();
|
||||||
|
if (key != null) {
|
||||||
|
shortcutFeatureKeys.add(key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Observe changes from accessibility selection menu
|
// Observe changes from accessibility selection menu
|
||||||
|
@@ -44,7 +44,7 @@ import androidx.preference.PreferenceScreen;
|
|||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
|
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
|
||||||
import com.android.settings.dashboard.DashboardFragment;
|
import com.android.settings.dashboard.RestrictedDashboardFragment;
|
||||||
import com.android.settings.utils.LocaleUtils;
|
import com.android.settings.utils.LocaleUtils;
|
||||||
|
|
||||||
import com.google.android.setupcompat.util.WizardManagerHelper;
|
import com.google.android.setupcompat.util.WizardManagerHelper;
|
||||||
@@ -56,7 +56,7 @@ import java.util.Locale;
|
|||||||
/**
|
/**
|
||||||
* Base class for accessibility fragments shortcut functions and dialog management.
|
* Base class for accessibility fragments shortcut functions and dialog management.
|
||||||
*/
|
*/
|
||||||
public abstract class AccessibilityShortcutPreferenceFragment extends DashboardFragment
|
public abstract class AccessibilityShortcutPreferenceFragment extends RestrictedDashboardFragment
|
||||||
implements ShortcutPreference.OnClickCallback {
|
implements ShortcutPreference.OnClickCallback {
|
||||||
private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
|
private static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
|
||||||
protected static final String KEY_SAVED_USER_SHORTCUT_TYPE = "shortcut_type";
|
protected static final String KEY_SAVED_USER_SHORTCUT_TYPE = "shortcut_type";
|
||||||
@@ -75,6 +75,10 @@ public abstract class AccessibilityShortcutPreferenceFragment extends DashboardF
|
|||||||
private boolean mNeedsQSTooltipReshow = false;
|
private boolean mNeedsQSTooltipReshow = false;
|
||||||
private int mNeedsQSTooltipType = QuickSettingsTooltipType.GUIDE_TO_EDIT;
|
private int mNeedsQSTooltipType = QuickSettingsTooltipType.GUIDE_TO_EDIT;
|
||||||
|
|
||||||
|
public AccessibilityShortcutPreferenceFragment(String restrictionKey) {
|
||||||
|
super(restrictionKey);
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns the accessibility component name. */
|
/** Returns the accessibility component name. */
|
||||||
protected abstract ComponentName getComponentName();
|
protected abstract ComponentName getComponentName();
|
||||||
|
|
||||||
|
@@ -48,6 +48,13 @@ public class OneHandedSettings extends AccessibilityShortcutPreferenceFragment {
|
|||||||
private String mFeatureName;
|
private String mFeatureName;
|
||||||
private OneHandedSettingsUtils mUtils;
|
private OneHandedSettingsUtils mUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* One handed settings no need to set any restriction key for pin protected.
|
||||||
|
*/
|
||||||
|
public OneHandedSettings() {
|
||||||
|
super(/* restrictionKey= */ null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updatePreferenceStates() {
|
protected void updatePreferenceStates() {
|
||||||
OneHandedSettingsUtils.setUserId(UserHandle.myUserId());
|
OneHandedSettingsUtils.setUserId(UserHandle.myUserId());
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
package com.android.settings.accessibility;
|
package com.android.settings.accessibility;
|
||||||
|
|
||||||
import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_BUTTON_COMPONENT_NAME;
|
import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_BUTTON_COMPONENT_NAME;
|
||||||
|
import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME;
|
||||||
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
|
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
@@ -36,6 +37,7 @@ import android.content.pm.ApplicationInfo;
|
|||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.pm.ServiceInfo;
|
import android.content.pm.ServiceInfo;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.util.FeatureFlagUtils;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
|
|
||||||
import androidx.fragment.app.FragmentActivity;
|
import androidx.fragment.app.FragmentActivity;
|
||||||
@@ -171,6 +173,21 @@ public class AccessibilityDetailsSettingsFragmentTest {
|
|||||||
AccessibilityButtonFragment.class.getName());
|
AccessibilityButtonFragment.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void onCreate_hearingAidsComponentName_launchAccessibilityHearingAidsFragment() {
|
||||||
|
FeatureFlagUtils.setEnabled(mContext,
|
||||||
|
FeatureFlagUtils.SETTINGS_ACCESSIBILITY_HEARING_AID_PAGE, true);
|
||||||
|
final Intent intent = new Intent();
|
||||||
|
intent.putExtra(Intent.EXTRA_COMPONENT_NAME,
|
||||||
|
ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME.flattenToString());
|
||||||
|
doReturn(intent).when(mActivity).getIntent();
|
||||||
|
|
||||||
|
mFragment.onCreate(Bundle.EMPTY);
|
||||||
|
|
||||||
|
assertStartActivityWithExpectedFragment(mActivity,
|
||||||
|
AccessibilityHearingAidsFragment.class.getName());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getMetricsCategory_returnsCorrectCategory() {
|
public void getMetricsCategory_returnsCorrectCategory() {
|
||||||
assertThat(mFragment.getMetricsCategory()).isEqualTo(
|
assertThat(mFragment.getMetricsCategory()).isEqualTo(
|
||||||
|
@@ -93,7 +93,7 @@ public class AccessibilityShortcutPreferenceFragmentTest {
|
|||||||
public void setUpTestFragment() {
|
public void setUpTestFragment() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mFragment = spy(new TestAccessibilityShortcutPreferenceFragment());
|
mFragment = spy(new TestAccessibilityShortcutPreferenceFragment(null));
|
||||||
when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
|
when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
|
||||||
when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
|
when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
|
||||||
when(mFragment.getContext()).thenReturn(mContext);
|
when(mFragment.getContext()).thenReturn(mContext);
|
||||||
@@ -256,6 +256,10 @@ public class AccessibilityShortcutPreferenceFragmentTest {
|
|||||||
public static class TestAccessibilityShortcutPreferenceFragment
|
public static class TestAccessibilityShortcutPreferenceFragment
|
||||||
extends AccessibilityShortcutPreferenceFragment {
|
extends AccessibilityShortcutPreferenceFragment {
|
||||||
|
|
||||||
|
public TestAccessibilityShortcutPreferenceFragment(String restrictionKey) {
|
||||||
|
super(restrictionKey);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
Bundle savedInstanceState) {
|
Bundle savedInstanceState) {
|
||||||
|
Reference in New Issue
Block a user