Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3b9e5cc authored by Oleksandr Byelkin's avatar Oleksandr Byelkin Committed by Steve Kondik
Browse files

Answer call with hardware HOME button (1/2)

Squashed commit of the following:

Author: Oleksandr Byelkin <sanja.byelkin@gmail.com>
Adds ability to answer call with hardware HOME button
preparation to winter time
Change-Id: I0d22a6fbb92a61f08b50cae5c14d0030b81ee6ec

Author: Michael Bestas <mikeioannina@gmail.com>
Settings: Move home answer & power end call options

Move 'Home answers call' & 'Power ends call' options to button settings
Change-Id: I2f365a3d278b0845b7c5ffcfe70c54160a00c24e
parent e0316f65
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -159,7 +159,9 @@
    <string name="toggleWimax">WiMAX</string>
    <string name="toggleNfc">NFC</string>

    <!-- Hardware keys -->
    <string name="button_pref_title">Buttons</string>
    <string name="hardware_keys_power_key_title">Power button</string>
    <string name="hardware_keys_home_key_title">Home button</string>
    <string name="hardware_keys_menu_key_title">Menu button</string>
    <string name="hardware_keys_volume_keys_title">Volume buttons</string>
@@ -178,8 +180,12 @@
    <string name="volbtn_cursor_control_off">Disabled</string>
    <string name="volbtn_cursor_control_on">Volume up/down moves cursor left/right</string>
    <string name="volbtn_cursor_control_on_reverse">Volume up/down moves cursor right/left</string>
    <string name="power_end_call_title">End call</string>
    <string name="power_end_call_summary">Pressing the power button will end the current call</string>
    <string name="button_wake_title">Wake up</string>
    <string name="home_wake_summary">Pressing the home button will wake your device</string>
    <string name="home_answer_call_title">Answer call</string>
    <string name="home_answer_call_summary">Pressing the home button will answer the current incoming call</string>

    <string name="show_battery_percent_title">Show battery percentage</string>
    <string name="app_security_title">App security</string>
+0 −5
Original line number Diff line number Diff line
@@ -48,11 +48,6 @@
                android:summary="@string/experimental_preference"
                android:persistent="false"/>

        <SwitchPreference
                android:key="toggle_power_button_ends_call_preference"
                android:title="@string/accessibility_power_button_ends_call_prerefence_title"
                android:persistent="false"/>

        <SwitchPreference
                android:key="toggle_lock_screen_rotation_preference"
                android:title="@string/accelerometer_title"
+18 −0
Original line number Diff line number Diff line
@@ -23,6 +23,18 @@
        android:summary="@string/disable_navkeys_summary"
        android:defaultValue="false" />

    <PreferenceCategory
        android:key="power_key"
        android:title="@string/hardware_keys_power_key_title" >

        <CheckBoxPreference
            android:key="power_end_call"
            android:title="@string/power_end_call_title"
            android:summary="@string/power_end_call_summary"
            android:persistent="false"/>

    </PreferenceCategory>

    <PreferenceCategory
        android:key="home_key"
        android:title="@string/hardware_keys_home_key_title" >
@@ -33,6 +45,12 @@
            android:summary="@string/home_wake_summary"
            android:defaultValue="true" />

        <CheckBoxPreference
            android:key="home_answer_call"
            android:title="@string/home_answer_call_title"
            android:summary="@string/home_answer_call_summary"
            android:persistent="false"/>

        <ListPreference
            android:key="hardware_keys_home_long_press"
            android:dialogTitle="@string/hardware_keys_long_press_title"
+72 −2
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ import android.util.Log;
import android.view.IWindowManager;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.IWindowManager;
import android.view.WindowManagerGlobal;

import com.android.settings.R;
@@ -55,6 +54,8 @@ public class ButtonSettings extends SettingsPreferenceFragment implements
    private static final String KEY_MENU_LONG_PRESS = "hardware_keys_menu_long_press";
    private static final String KEY_VOLUME_KEY_CURSOR_CONTROL = "volume_key_cursor_control";
    private static final String DISABLE_NAV_KEYS = "disable_nav_keys";
    private static final String KEY_POWER_END_CALL = "power_end_call";
    private static final String KEY_HOME_ANSWER_CALL = "home_answer_call";

    private static final String CATEGORY_POWER = "power_key";
    private static final String CATEGORY_HOME = "home_key";
@@ -93,11 +94,13 @@ public class ButtonSettings extends SettingsPreferenceFragment implements
    private ListPreference mMenuPressAction;
    private ListPreference mMenuLongPressAction;
    private ListPreference mVolumeKeyCursorControl;
    private CheckBoxPreference mDisableNavigationKeys;
    private CheckBoxPreference mPowerEndCall;
    private CheckBoxPreference mHomeAnswerCall;

    private PreferenceCategory mNavigationPreferencesCat;

    private Handler mHandler;
    private CheckBoxPreference mDisableNavigationKeys;

    @Override
    public void onCreate(Bundle savedInstanceState) {
@@ -118,6 +121,8 @@ public class ButtonSettings extends SettingsPreferenceFragment implements
        final boolean hasAssistKey = (deviceKeys & KEY_MASK_ASSIST) != 0;

        boolean hasAnyBindableKey = false;
        final PreferenceCategory powerCategory =
                (PreferenceCategory) prefScreen.findPreference(CATEGORY_POWER);
        final PreferenceCategory homeCategory =
                (PreferenceCategory) prefScreen.findPreference(CATEGORY_HOME);
        final PreferenceCategory menuCategory =
@@ -125,6 +130,12 @@ public class ButtonSettings extends SettingsPreferenceFragment implements
        final PreferenceCategory volumeCategory =
                (PreferenceCategory) prefScreen.findPreference(CATEGORY_VOLUME);

        // Power button ends calls.
        mPowerEndCall = (CheckBoxPreference) findPreference(KEY_POWER_END_CALL);

        // Home button answers calls.
        mHomeAnswerCall = (CheckBoxPreference) findPreference(KEY_HOME_ANSWER_CALL);

        mHandler = new Handler();

        // Force Navigation bar related options
@@ -150,11 +161,25 @@ public class ButtonSettings extends SettingsPreferenceFragment implements
            prefScreen.removePreference(mDisableNavigationKeys);
        }

        if (hasPowerKey) {
            if (!Utils.isVoiceCapable(getActivity())) {
                powerCategory.removePreference(mPowerEndCall);
                mPowerEndCall = null;
            }
        } else {
            prefScreen.removePreference(powerCategory);
        }

        if (hasHomeKey) {
            if (!res.getBoolean(R.bool.config_show_homeWake)) {
                homeCategory.removePreference(findPreference(Settings.System.HOME_WAKE_SCREEN));
            }

            if (!Utils.isVoiceCapable(getActivity())) {
                homeCategory.removePreference(mHomeAnswerCall);
                mHomeAnswerCall = null;
            }

            int defaultLongPressAction = res.getInteger(
                    com.android.internal.R.integer.config_longPressOnHomeBehavior);
            if (defaultLongPressAction < ACTION_NOTHING ||
@@ -209,6 +234,31 @@ public class ButtonSettings extends SettingsPreferenceFragment implements
        }
    }

    @Override
    public void onResume() {
        super.onResume();

        // Power button ends calls.
        if (mPowerEndCall != null) {
            final int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(),
                    Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
                    Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT);
            final boolean powerButtonEndsCall =
                    (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP);
            mPowerEndCall.setChecked(powerButtonEndsCall);
        }

        // Home button answers calls.
        if (mHomeAnswerCall != null) {
            final int incallHomeBehavior = Settings.Secure.getInt(getContentResolver(),
                    Settings.Secure.RING_HOME_BUTTON_BEHAVIOR,
                    Settings.Secure.RING_HOME_BUTTON_BEHAVIOR_DEFAULT);
            final boolean homeButtonAnswersCall =
                (incallHomeBehavior == Settings.Secure.RING_HOME_BUTTON_BEHAVIOR_ANSWER);
            mHomeAnswerCall.setChecked(homeButtonAnswersCall);
        }
    }

    private ListPreference initActionList(String key, int value) {
        ListPreference list = (ListPreference) getPreferenceScreen().findPreference(key);
        list.setValue(Integer.toString(value));
@@ -328,8 +378,28 @@ public class ButtonSettings extends SettingsPreferenceFragment implements
        if (preference == mDisableNavigationKeys) {
            writeDisableNavkeysOption(getActivity(), mDisableNavigationKeys.isChecked());
            updateDisableNavkeysOption();
        } else if (preference == mPowerEndCall) {
            handleTogglePowerButtonEndsCallPreferenceClick();
            return true;
        } else if (preference == mHomeAnswerCall) {
            handleToggleHomeButtonAnswersCallPreferenceClick();
            return true;
        }

        return super.onPreferenceTreeClick(preferenceScreen, preference);
    }

    private void handleTogglePowerButtonEndsCallPreferenceClick() {
        Settings.Secure.putInt(getContentResolver(),
                Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR, (mPowerEndCall.isChecked()
                        ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP
                        : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF));
    }

    private void handleToggleHomeButtonAnswersCallPreferenceClick() {
        Settings.Secure.putInt(getContentResolver(),
                Settings.Secure.RING_HOME_BUTTON_BEHAVIOR, (mHomeAnswerCall.isChecked()
                        ? Settings.Secure.RING_HOME_BUTTON_BEHAVIOR_ANSWER
                        : Settings.Secure.RING_HOME_BUTTON_BEHAVIOR_DO_NOTHING));
    }
}
+0 −33
Original line number Diff line number Diff line
@@ -84,8 +84,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
            "toggle_high_text_contrast_preference";
    private static final String TOGGLE_INVERSION_PREFERENCE =
            "toggle_inversion_preference";
    private static final String TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE =
            "toggle_power_button_ends_call_preference";
    private static final String TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE =
            "toggle_lock_screen_rotation_preference";
    private static final String TOGGLE_SPEAK_PASSWORD_PREFERENCE =
@@ -185,7 +183,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements

    private SwitchPreference mToggleLargeTextPreference;
    private SwitchPreference mToggleHighTextContrastPreference;
    private SwitchPreference mTogglePowerButtonEndsCallPreference;
    private SwitchPreference mToggleLockScreenRotationPreference;
    private SwitchPreference mToggleSpeakPasswordPreference;
    private ListPreference mSelectLongPressTimeoutPreference;
@@ -266,9 +263,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
        } else if (mToggleHighTextContrastPreference == preference) {
            handleToggleTextContrastPreferenceClick();
            return true;
        } else if (mTogglePowerButtonEndsCallPreference == preference) {
            handleTogglePowerButtonEndsCallPreferenceClick();
            return true;
        } else if (mToggleLockScreenRotationPreference == preference) {
            handleLockScreenRotationPreferenceClick();
            return true;
@@ -300,14 +294,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
                (mToggleHighTextContrastPreference.isChecked() ? 1 : 0));
    }

    private void handleTogglePowerButtonEndsCallPreferenceClick() {
        Settings.Secure.putInt(getContentResolver(),
                Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
                (mTogglePowerButtonEndsCallPreference.isChecked()
                        ? Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP
                        : Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF));
    }

    private void handleLockScreenRotationPreferenceClick() {
        RotationPolicy.setRotationLockForAccessibility(getActivity(),
                !mToggleLockScreenRotationPreference.isChecked());
@@ -359,14 +345,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
        mToggleInversionPreference = (SwitchPreference) findPreference(TOGGLE_INVERSION_PREFERENCE);
        mToggleInversionPreference.setOnPreferenceChangeListener(this);

        // Power button ends calls.
        mTogglePowerButtonEndsCallPreference =
                (SwitchPreference) findPreference(TOGGLE_POWER_BUTTON_ENDS_CALL_PREFERENCE);
        if (!KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)
                || !Utils.isVoiceCapable(getActivity())) {
            mSystemsCategory.removePreference(mTogglePowerButtonEndsCallPreference);
        }

        // Lock screen rotation.
        mToggleLockScreenRotationPreference =
                (SwitchPreference) findPreference(TOGGLE_LOCK_SCREEN_ROTATION_PREFERENCE);
@@ -541,17 +519,6 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
        mToggleInversionPreference.setChecked(Settings.Secure.getInt(getContentResolver(),
                Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0) == 1);

        // Power button ends calls.
        if (KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_POWER)
                && Utils.isVoiceCapable(getActivity())) {
            final int incallPowerBehavior = Settings.Secure.getInt(getContentResolver(),
                    Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR,
                    Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT);
            final boolean powerButtonEndsCall =
                    (incallPowerBehavior == Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP);
            mTogglePowerButtonEndsCallPreference.setChecked(powerButtonEndsCall);
        }

        // Auto-rotate screen
        updateLockScreenRotationCheckbox();