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

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

Merge "Merge 32e45ef3 on remote branch"

parents 079ce3d5 9141a8f6
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.internal.R;
import android.app.ActivityManagerNative;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
@@ -235,6 +236,8 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac

        mItems = new ArrayList<Action>();

        final boolean quickbootEnabled = Settings.System.getInt(
                mContext.getContentResolver(), "enable_quickboot", 0) == 1;
        // first: power off
        mItems.add(
            new SinglePressAction(
@@ -242,6 +245,12 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
                    R.string.global_action_power_off) {

                public void onPress() {
                    // goto quickboot mode
                    if (quickbootEnabled) {
                        startQuickBoot();
                        return;
                    }

                    // shutdown by making sure radio and power are handled accordingly.
                    mWindowManagerFuncs.shutdown(true);
                }
@@ -933,6 +942,16 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac
        }
    }

    private void startQuickBoot() {

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

    private static final class GlobalActionsDialog extends Dialog implements DialogInterface {
        private final Context mContext;
        private final int mWindowTouchSlop;
+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
+45 −1
Original line number Diff line number Diff line
@@ -117,6 +117,7 @@ class AlarmManagerService extends IAlarmManager.Stub {
    private final AlarmHandler mHandler = new AlarmHandler();
    private ClockReceiver mClockReceiver;
    private UninstallReceiver mUninstallReceiver;
    private QuickBootReceiver mQuickBootReceiver;
    private final ResultReceiver mResultReceiver = new ResultReceiver();
    private final PendingIntent mTimeTickSender;
    private final PendingIntent mDateChangeSender;
@@ -521,6 +522,7 @@ class AlarmManagerService extends IAlarmManager.Stub {
        mClockReceiver.scheduleTimeTickEvent();
        mClockReceiver.scheduleDateChangedEvent();
        mUninstallReceiver = new UninstallReceiver();
        mQuickBootReceiver = new QuickBootReceiver();
        
        if (mDescriptor != -1) {
            mWaitThread.start();
@@ -1260,6 +1262,19 @@ class AlarmManagerService extends IAlarmManager.Stub {
        }
    }

    private void filtQuickBootAlarms(ArrayList<Alarm> triggerList) {

        for (int i = triggerList.size() - 1; i >= 0; i--) {
            Alarm alarm = triggerList.get(i);

            // bypass system alarms
            if (!"android".equals(alarm.operation.getTargetPackage())) {
                triggerList.remove(i);
                Slog.v(TAG, "ignore -> " + alarm.operation.getTargetPackage());
            }
        }
    }

    private class AlarmThread extends Thread
    {
        public AlarmThread()
@@ -1315,6 +1330,10 @@ class AlarmManagerService extends IAlarmManager.Stub {
                    triggerAlarmsLocked(triggerList, nowELAPSED, nowRTC);
                    rescheduleKernelAlarmsLocked();

                    if (SystemProperties.getInt("sys.quickboot.enable", 0) == 1) {
                        filtQuickBootAlarms(triggerList);
                    }

                    // now deliver the alarm intents
                    for (int i=0; i<triggerList.size(); i++) {
                        Alarm alarm = triggerList.get(i);
@@ -1432,6 +1451,31 @@ class AlarmManagerService extends IAlarmManager.Stub {
        }
    }

    private class QuickBootReceiver extends BroadcastReceiver {

        public QuickBootReceiver() {
            IntentFilter filter = new IntentFilter();
            filter.addAction("intent.quickboot.appkilled");
            mContext.registerReceiver(this, filter,
                    "android.permission.DEVICE_POWER", null);
        }

        @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                String pkgList[] = null;
                if ("intent.quickboot.appkilled".equals(action)) {
                    pkgList = intent.getStringArrayExtra(Intent.EXTRA_PACKAGES);
                    if (pkgList != null && (pkgList.length > 0)) {
                        for (String pkg : pkgList) {
                            removeLocked(pkg);
                            mBroadcastStats.remove(pkg);
                        }
                    }
                }
            }
    }

    class ClockReceiver extends BroadcastReceiver {
        public ClockReceiver() {
            IntentFilter filter = new IntentFilter();
+4 −1
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import android.os.Message;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.util.EventLog;
import android.util.Log;
@@ -906,7 +907,9 @@ public final class BroadcastQueue {
            if (DEBUG_BROADCAST)  Slog.v(TAG,
                    "Need to start app ["
                    + mQueueName + "] " + targetProcess + " for broadcast " + r);
            if ((r.curApp=mService.startProcessLocked(targetProcess,
            if ((SystemProperties.getInt("sys.quickboot.enable", 0) == 1 &&
                        SystemProperties.getInt("sys.quickboot.poweron", 0) == 0)
                || (r.curApp=mService.startProcessLocked(targetProcess,
                    info.activityInfo.applicationInfo, true,
                    r.intent.getFlags() | Intent.FLAG_FROM_BACKGROUND,
                    "broadcast", r.curComponent,
+4 −0
Original line number Diff line number Diff line
@@ -1297,6 +1297,10 @@ public final class PowerManagerService extends IPowerManager.Stub
            return false;
        }

       if (SystemProperties.getInt("sys.quickboot.enable", 0) == 1) {
            return false;
        }

        // Don't wake when undocked from wireless charger.
        // See WirelessChargerDetector for justification.
        if (wasPowered && !mIsPowered
Loading