Make A11y SUW launchable from SUW and small UX changes based on last round of
UX studies.
Change-Id: I9c20cd3abf910a37731da2af604f3af2cd30e942
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index dab2cb7..bad8af8 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -53,6 +53,7 @@
import com.android.internal.util.ArrayUtils;
import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.accessibility.AccessibilitySettings;
+import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
import com.android.settings.accessibility.CaptionPropertiesFragment;
import com.android.settings.accounts.AccountSettings;
import com.android.settings.accounts.AccountSyncSettings;
@@ -264,6 +265,7 @@
PrivacySettings.class.getName(),
DeviceAdminSettings.class.getName(),
AccessibilitySettings.class.getName(),
+ AccessibilitySettingsForSetupWizard.class.getName(),
CaptionPropertiesFragment.class.getName(),
com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment.class.getName(),
TextToSpeechSettings.class.getName(),
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 2ba49ce..4f81a38 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -40,6 +40,7 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
+import com.android.settings.accessibility.AccessibilitySettingsForSetupWizardActivity;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.widget.FloatingActionButton;
@@ -148,7 +149,8 @@
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- if (!TextUtils.isEmpty(mHelpUri)) {
+ if (!TextUtils.isEmpty(mHelpUri)
+ && !(getActivity() instanceof AccessibilitySettingsForSetupWizardActivity)) {
setHasOptionsMenu(true);
}
}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
index 7636fd9..6a984ac 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizard.java
@@ -16,15 +16,24 @@
package com.android.settings.accessibility;
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.os.Bundle;
import android.provider.Settings;
import android.support.v7.preference.Preference;
+import android.view.accessibility.AccessibilityManager;
+
import com.android.internal.logging.MetricsLogger;
import com.android.settings.DialogCreatable;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
+import java.util.List;
+
/**
* Activity with the accessibility settings specific to Setup Wizard.
*/
@@ -34,7 +43,6 @@
// Preferences.
private static final String DISPLAY_MAGNIFICATION_PREFERENCE =
"screen_magnification_preference";
- private static final String DISPLAY_DALTONIZER_PREFERENCE = "daltonizer_preference";
private static final String TALKBACK_PREFERENCE = "talkback_preference";
private static final String FONT_SIZE_PREFERENCE = "font_size_preference";
@@ -42,7 +50,6 @@
// Preference controls.
private Preference mDisplayMagnificationPreference;
- private Preference mDisplayDaltonizerPreference;
private Preference mFontSizePreference;
private Preference mTalkbackPreference;
@@ -62,7 +69,6 @@
addPreferencesFromResource(R.xml.accessibility_settings_for_setup_wizard);
mDisplayMagnificationPreference = findPreference(DISPLAY_MAGNIFICATION_PREFERENCE);
- mDisplayDaltonizerPreference = findPreference(DISPLAY_DALTONIZER_PREFERENCE);
mFontSizePreference = findPreference(FONT_SIZE_PREFERENCE);
mTalkbackPreference = findPreference(TALKBACK_PREFERENCE);
@@ -86,6 +92,43 @@
return false;
}
+ /**
+ * Returns a semicolon-delimited string containing a list of all the
+ * installed {@link AccessibilityService}s that provide at least one
+ * required feedback type.
+ *
+ * @param context The {@link android.app.Activity} context.
+ * @param requiredFeedbackTypes An integer mask containing the required
+ * feedback types.
+ * @return A semicolon-delimited string containing a list of accessibility services.
+ */
+ private String getAccessibilityServicesFiltered(
+ Context context, int requiredFeedbackTypes) {
+ final AccessibilityManager manager = context.getSystemService(AccessibilityManager.class);
+ final List<AccessibilityServiceInfo> accessibilityServices = manager
+ .getInstalledAccessibilityServiceList();
+ final StringBuilder servicesToEnable = new StringBuilder();
+
+ for (AccessibilityServiceInfo accessibilityService : accessibilityServices) {
+ if ((accessibilityService.feedbackType & requiredFeedbackTypes) == 0) {
+ continue;
+ }
+
+ final ServiceInfo serviceInfo = accessibilityService.getResolveInfo().serviceInfo;
+ final ComponentName componentName = new ComponentName(serviceInfo.packageName,
+ serviceInfo.name);
+
+ servicesToEnable.append(componentName.flattenToString());
+ servicesToEnable.append(':');
+ }
+
+ if (servicesToEnable.length() > 0) {
+ servicesToEnable.deleteCharAt(servicesToEnable.length() - 1);
+ }
+
+ return servicesToEnable.toString();
+ }
+
@Override
public boolean onPreferenceTreeClick(Preference preference) {
if (mDisplayMagnificationPreference == preference) {
@@ -98,6 +141,32 @@
extras.putBoolean(AccessibilitySettings.EXTRA_CHECKED,
Settings.Secure.getInt(getContentResolver(),
Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 1);
+ } else if (mTalkbackPreference == preference) {
+ // Toggle Talkback. The tutorial will automatically start when Talkback is first
+ // activated.
+ final ContentResolver resolver = getContentResolver();
+
+ final boolean enable =
+ Settings.Secure.getInt(resolver, Settings.Secure.ACCESSIBILITY_ENABLED, 0) == 0;
+ final String servicesToEnable = getAccessibilityServicesFiltered(
+ getActivity(), AccessibilityServiceInfo.FEEDBACK_SPOKEN);
+
+ // Enable all accessibility services with spoken feedback type.
+ Settings.Secure.putString(resolver, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
+ enable ? servicesToEnable : "");
+
+ // Allow the services we just enabled to toggle touch exploration.
+ Settings.Secure.putString(resolver,
+ Settings.Secure.TOUCH_EXPLORATION_GRANTED_ACCESSIBILITY_SERVICES,
+ enable ? servicesToEnable : "");
+
+ // Enable touch exploration.
+ Settings.Secure.putInt(resolver, Settings.Secure.TOUCH_EXPLORATION_ENABLED,
+ enable ? 1 : 0);
+
+ // Turn on accessibility mode last, since enabling accessibility with no
+ // services has no effect.
+ Settings.Secure.putInt(resolver, Settings.Secure.ACCESSIBILITY_ENABLED, enable ? 1 : 0);
}
return super.onPreferenceTreeClick(preference);
@@ -106,8 +175,6 @@
private void updatePreferences() {
updateFeatureSummary(Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED,
mDisplayMagnificationPreference);
- updateFeatureSummary(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
- mDisplayDaltonizerPreference);
updateFontSizeSummary(mFontSizePreference);
}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
new file mode 100644
index 0000000..09961b7
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.accessibility;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.view.Menu;
+import android.view.MenuItem;
+
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+
+public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity {
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ // Return true, so we get notified when items in the menu are clicked.
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ onBackPressed();
+ return true;
+ }
+
+ @Override
+ public void startPreferencePanel(String fragmentClass, Bundle args, int titleRes,
+ CharSequence titleText, Fragment resultTo, int resultRequestCode) {
+ startPreferenceFragment(Fragment.instantiate(this, fragmentClass, args), true);
+ }
+
+ @Override
+ public void openDrawer() {
+ // Do nothing.
+ }
+
+ @Override
+ public void closeDrawer() {
+ // Do nothing.
+ }
+}
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index bee46c8..e1c4f7e 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -99,7 +99,6 @@
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- setHasOptionsMenu(true);
installActionBarToggleSwitch();
}
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 44355c6..45af2de 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -16,6 +16,7 @@
package com.android.settings.accessibility;
+import android.os.Bundle;
import android.provider.Settings;
import com.android.internal.logging.MetricsLogger;
@@ -24,10 +25,10 @@
public class ToggleScreenMagnificationPreferenceFragment
extends ToggleFeaturePreferenceFragment {
+
@Override
protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
- Settings.Secure.putInt(getContentResolver(),
- Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, enabled ? 1 : 0);
+ // Do nothing.
}
@Override
@@ -45,6 +46,30 @@
}
@Override
+ public void onResume() {
+ super.onResume();
+
+ // Temporarily enable Magnification on this screen if it's disabled.
+ if (Settings.Secure.getInt(getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, 0) == 0) {
+ setMagnificationEnabled(1);
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (!mToggleSwitch.isChecked()) {
+ setMagnificationEnabled(0);
+ }
+ }
+
+ private void setMagnificationEnabled(int enabled) {
+ Settings.Secure.putInt(getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED, enabled);
+ }
+
+ @Override
protected int getMetricsCategory() {
return MetricsLogger.ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION;
}