diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 3606f042a49..7beab154e51 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -25,4 +25,13 @@
+
+
+
+
diff --git a/src/com/android/settings/AccessibilitySettings.java b/src/com/android/settings/AccessibilitySettings.java
index b2debd20764..d78d2d8ef9f 100644
--- a/src/com/android/settings/AccessibilitySettings.java
+++ b/src/com/android/settings/AccessibilitySettings.java
@@ -30,10 +30,13 @@ import android.os.SystemProperties;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
+import android.preference.PreferenceCategory;
import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.provider.Settings;
import android.text.TextUtils;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
import android.view.accessibility.AccessibilityManager;
import java.util.HashSet;
@@ -54,8 +57,17 @@ public class AccessibilitySettings extends PreferenceActivity {
private static final String ACCESSIBILITY_SERVICES_CATEGORY =
"accessibility_services_category";
+ private static final String POWER_BUTTON_CATEGORY =
+ "power_button_category";
+
+ private final String POWER_BUTTON_ENDS_CALL_CHECKBOX =
+ "power_button_ends_call";
+
private CheckBoxPreference mToggleCheckBox;
+ private PreferenceCategory mPowerButtonCategory;
+ private CheckBoxPreference mPowerButtonEndsCallCheckBox;
+
private Map mAccessibilityServices =
new LinkedHashMap();
@@ -72,6 +84,10 @@ public class AccessibilitySettings extends PreferenceActivity {
mToggleCheckBox = (CheckBoxPreference) findPreference(
TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX);
+ mPowerButtonCategory = (PreferenceCategory) findPreference(POWER_BUTTON_CATEGORY);
+ mPowerButtonEndsCallCheckBox = (CheckBoxPreference) findPreference(
+ POWER_BUTTON_ENDS_CALL_CHECKBOX);
+
addAccessibilitServicePreferences();
}
@@ -120,6 +136,22 @@ public class AccessibilitySettings extends PreferenceActivity {
// installed and direct them to Market to get TalkBack
displayNoAppsAlert();
}
+
+ if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)) {
+ int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(),
+ Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
+ Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT);
+ // The checkbox is labeled "Power button ends call"; thus the in-call
+ // Power button behavior is INCALL_POWER_BUTTON_BEHAVIOR_HANGUP if
+ // checked, and INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF if unchecked.
+ boolean powerButtonCheckboxEnabled =
+ (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP);
+ mPowerButtonEndsCallCheckBox.setChecked(powerButtonCheckboxEnabled);
+ mPowerButtonEndsCallCheckBox.setEnabled(true);
+ } else {
+ // No POWER key on the current device; this entire category is irrelevant.
+ getPreferenceScreen().removePreference(mPowerButtonCategory);
+ }
}
@Override
@@ -154,6 +186,15 @@ public class AccessibilitySettings extends PreferenceActivity {
if (TOGGLE_ACCESSIBILITY_SERVICE_CHECKBOX.equals(key)) {
boolean isChecked = ((CheckBoxPreference) preference).isChecked();
handleEnableAccessibilityStateChange((CheckBoxPreference) preference);
+ } else if (POWER_BUTTON_ENDS_CALL_CHECKBOX.equals(key)) {
+ boolean isChecked = ((CheckBoxPreference) preference).isChecked();
+ // The checkbox is labeled "Power button ends call"; thus the in-call
+ // Power button behavior is INCALL_POWER_BUTTON_BEHAVIOR_HANGUP if
+ // checked, and INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF if unchecked.
+ Settings.Secure.putInt(getContentResolver(),
+ Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
+ (isChecked ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP
+ : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF));
} else if (preference instanceof CheckBoxPreference) {
handleEnableAccessibilityServiceStateChange((CheckBoxPreference) preference);
}
@@ -290,12 +331,12 @@ public class AccessibilitySettings extends PreferenceActivity {
* reader) from Market.
*/
private void displayNoAppsAlert() {
- try {
- PackageManager pm = getPackageManager();
- ApplicationInfo info = pm.getApplicationInfo("com.android.vending", 0);
+ try {
+ PackageManager pm = getPackageManager();
+ ApplicationInfo info = pm.getApplicationInfo("com.android.vending", 0);
} catch (NameNotFoundException e) {
- // This is a no-op if the user does not have Android Market
- return;
+ // This is a no-op if the user does not have Android Market
+ return;
}
AlertDialog.Builder noAppsAlert = new AlertDialog.Builder(this);
noAppsAlert.setTitle(R.string.accessibility_service_no_apps_title);
@@ -305,7 +346,8 @@ public class AccessibilitySettings extends PreferenceActivity {
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String screenreaderMarketLink =
- SystemProperties.get("ro.screenreader.market", DEFAULT_SCREENREADER_MARKET_LINK);
+ SystemProperties.get("ro.screenreader.market",
+ DEFAULT_SCREENREADER_MARKET_LINK);
Uri marketUri = Uri.parse(screenreaderMarketLink);
Intent marketIntent = new Intent(Intent.ACTION_VIEW, marketUri);
startActivity(marketIntent);