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

Commit 3dcd8b04 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "QuickBoot: support QuickBoot power on"

parents 06fdea9b 1779bec7
Loading
Loading
Loading
Loading
+79 −0
Original line number Diff line number Diff line
@@ -134,6 +134,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    static final boolean ENABLE_CAR_DOCK_HOME_CAPTURE = true;
    static final boolean ENABLE_DESK_DOCK_HOME_CAPTURE = false;

    // QuickBoot time settings
    static final int DEFAULT_LONG_PRESS_POWERON_TIME = 500;
    static final int QUICKBOOT_LAUNCH_TIMEOUT = 2000;

    static final int LONG_PRESS_POWER_NOTHING = 0;
    static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
    static final int LONG_PRESS_POWER_SHUT_OFF = 2;
@@ -203,6 +207,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
     * where the window manager is calling in with its own lock held.)
     */
    private final Object mLock = new Object();
    private final Object mQuickBootLock = new Object();

    private boolean mButtonLightEnabled;

@@ -305,6 +310,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {

    int mPointerLocationMode = 0; // guarded by mLock

    int mLongPressPoweronTime = DEFAULT_LONG_PRESS_POWERON_TIME;

    // The last window we were told about in focusChanged.
    WindowState mFocusedWindow;
    IApplicationToken mFocusedApp;
@@ -469,6 +476,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    SettingsObserver mSettingsObserver;
    ShortcutManager mShortcutManager;
    PowerManager.WakeLock mBroadcastWakeLock;
    PowerManager.WakeLock mQuickBootWakeLock;
    boolean mHavePendingMediaKeyRepeatWithWakeLock;

    private int mCurrentUserId;
@@ -925,6 +933,10 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        mPowerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
        mBroadcastWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "PhoneWindowManager.mBroadcastWakeLock");
        mQuickBootWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                "PhoneWindowManager.mQuickBootWakeLock");
        mLongPressPoweronTime = SystemProperties.getInt("ro.quickboot.press_duration",
                DEFAULT_LONG_PRESS_POWERON_TIME);
        mEnableShiftMenuBugReports = "1".equals(SystemProperties.get("ro.debuggable"));
        mLidOpenRotation = readRotation(
                com.android.internal.R.integer.config_lidOpenRotation);
@@ -3872,6 +3884,58 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
    }

    private final Runnable mQuickBootPowerLongPress = new Runnable() {

        public void run() {

            Intent intent = new Intent("qualcomm.intent.action.QUICKBOOT");
            intent.putExtra("mode", 1);
            try {
                mContext.startActivityAsUser(intent,UserHandle.CURRENT);
            } catch (ActivityNotFoundException e) {
                e.printStackTrace();
                releaseQuickBootWakeLock();
                return;
            }

            BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {

                public void onReceive(Context context, Intent intent) {

                    synchronized (mQuickBootLock) {
                        mQuickBootLock.notifyAll();
                    }
                }
            };

            IntentFilter filter = new IntentFilter("qualcomm.intent.QUICKBOOT.START");
            mContext.registerReceiver(broadcastReceiver,filter,
                    "android.permission.DEVICE_POWER",null);

            synchronized (mQuickBootLock) {
                try {
                    mQuickBootLock.wait(QUICKBOOT_LAUNCH_TIMEOUT);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            releaseQuickBootWakeLock();
        }
    };

    private void acquireQuickBootWakeLock() {
        if (!mQuickBootWakeLock.isHeld())  {
            mQuickBootWakeLock.acquire();
        }
    }

    private void releaseQuickBootWakeLock() {
        if (mQuickBootWakeLock.isHeld()) {
            mQuickBootWakeLock.release();
        }
    }

    /** {@inheritDoc} */
    @Override
    public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags, boolean isScreenOn) {
@@ -3884,6 +3948,21 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        final boolean canceled = event.isCanceled();
        final int keyCode = event.getKeyCode();

        if (SystemProperties.getInt("sys.quickboot.enable", 0) == 1) {

            if (keyCode == KeyEvent.KEYCODE_POWER && !isScreenOn) {
                if(down){
                    acquireQuickBootWakeLock();
                    mHandler.postDelayed(mQuickBootPowerLongPress, mLongPressPoweronTime);
                } else {
                    releaseQuickBootWakeLock();
                    mHandler.removeCallbacks(mQuickBootPowerLongPress);
                }
            }
            // ignore this event
            return 0;
        }

        final boolean isInjected = (policyFlags & WindowManagerPolicy.FLAG_INJECTED) != 0;

        // If screen is off then we treat the case where the keyguard is open but hidden