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

Commit 23e92409 authored by Danesh Mondegarian's avatar Danesh Mondegarian Committed by Michael Bestas
Browse files

Framework: Forward port Long press back to kill app (2/2)

Change-Id: If3ed27e8408cdf383653c7d18988112c13f8bcea
parent 7bfe7803
Loading
Loading
Loading
Loading
+40 −0
Original line number Diff line number Diff line
@@ -195,6 +195,7 @@ import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.view.autofill.AutofillManagerInternal;
import android.widget.Toast;

import com.android.internal.R;
import com.android.internal.accessibility.AccessibilityShortcutController;
@@ -225,6 +226,10 @@ import com.android.server.wm.DisplayRotation;
import com.android.server.wm.WindowManagerInternal;
import com.android.server.wm.WindowManagerInternal.AppTransitionListener;

import lineageos.providers.LineageSettings;

import org.lineageos.internal.util.ActionUtils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
@@ -494,6 +499,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {

    private boolean mHandleVolumeKeysInWM;

    boolean mKillAppLongpressBack;
    int mBackKillTimeout;

    private boolean mPendingKeyguardOccluded;
    private boolean mKeyguardOccludedChanged;
    private boolean mNotifyUserActivity;
@@ -788,6 +796,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            resolver.registerContentObserver(Settings.Global.getUriFor(
                    Settings.Global.POWER_BUTTON_SUPPRESSION_DELAY_AFTER_GESTURE_WAKE), false, this,
                    UserHandle.USER_ALL);
            resolver.registerContentObserver(LineageSettings.Secure.getUriFor(
                    LineageSettings.Secure.KILL_APP_LONGPRESS_BACK), false, this,
                    UserHandle.USER_ALL);
            updateSettings();
        }

@@ -1449,6 +1460,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {

    private final ScreenshotRunnable mScreenshotRunnable = new ScreenshotRunnable();

    private final Runnable mBackLongPress = new Runnable() {
        @Override
        public void run() {
            if (ActionUtils.killForegroundApp(mContext, mCurrentUserId)) {
                performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
                        "Back - Long Press");
                Toast.makeText(mContext,
                        org.lineageos.platform.internal.R.string.app_killed_message,
                        Toast.LENGTH_SHORT).show();
            }
        }
    };

    @Override
    public void showGlobalActions() {
        mHandler.removeMessages(MSG_DISPATCH_SHOW_GLOBAL_ACTIONS);
@@ -1882,6 +1906,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        mPerDisplayFocusEnabled = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_perDisplayFocusEnabled);

        mBackKillTimeout = mContext.getResources().getInteger(
                org.lineageos.platform.internal.R.integer.config_backKillTimeout);

        readConfigurationDependentBehaviors();

        if (mLidControlsDisplayFold) {
@@ -2052,6 +2079,9 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    Settings.Global.POWER_BUTTON_VERY_LONG_PRESS,
                    mContext.getResources().getInteger(
                            com.android.internal.R.integer.config_veryLongPressOnPowerBehavior));

            mKillAppLongpressBack = LineageSettings.Secure.getInt(resolver,
                    LineageSettings.Secure.KILL_APP_LONGPRESS_BACK, 0) == 1;
        }
        if (updateRotation) {
            updateRotation(true);
@@ -2708,6 +2738,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            mPendingCapsLockToggle = false;
        }

        if (keyCode == KeyEvent.KEYCODE_BACK && !down) {
            mHandler.removeCallbacks(mBackLongPress);
        }

        // First we always handle the home key here, so applications
        // can never break it, although if keyguard is on, we do let
        // it handle it, because that gives us the correct 5 second
@@ -2900,6 +2934,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                launchAssistAction(Intent.EXTRA_ASSIST_INPUT_HINT_KEYBOARD, event.getDeviceId());
            }
            return -1;
        } else if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (mKillAppLongpressBack) {
                if (down && repeatCount == 0) {
                    mHandler.postDelayed(mBackLongPress, mBackKillTimeout);
                }
            }
        }

        // Shortcuts are invoked through Search+key, so intercept those here