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

Commit 1f09c5a4 authored by Kun Liang's avatar Kun Liang Committed by Linux Build Service Account
Browse files

QuickBoot: remove alarms for killed apps

Device may be woken up by WAKEUP alarms, which have been set
by those killed apps before. Here to get the killed apps list
and remove the alarms from AlarmManagerService.

Change-Id: I86b119e3c0e695a34cba3f168b15ecd6b97e462b
parent ec41b387
Loading
Loading
Loading
Loading
+35 −1
Original line number Diff line number Diff line
@@ -119,6 +119,7 @@ class AlarmManagerService extends SystemService {
    ClockReceiver mClockReceiver;
    InteractiveStateReceiver mInteractiveStateReceiver;
    private UninstallReceiver mUninstallReceiver;
    private QuickBootReceiver mQuickBootReceiver;
    final ResultReceiver mResultReceiver = new ResultReceiver();
    PendingIntent mTimeTickSender;
    PendingIntent mDateChangeSender;
@@ -616,6 +617,7 @@ class AlarmManagerService extends SystemService {
        mClockReceiver.scheduleDateChangedEvent();
        mInteractiveStateReceiver = new InteractiveStateReceiver();
        mUninstallReceiver = new UninstallReceiver();
        mQuickBootReceiver = new QuickBootReceiver();
        
        if (mNativeData != 0) {
            AlarmThread waitThread = new AlarmThread();
@@ -1851,6 +1853,38 @@ class AlarmManagerService extends SystemService {
        }
    }

    private class QuickBootReceiver extends BroadcastReceiver {
        static final String ACTION_APP_KILL = "org.codeaurora.quickboot.appkilled";

        public QuickBootReceiver() {
            IntentFilter filter = new IntentFilter();
            filter.addAction(ACTION_APP_KILL);
            getContext().registerReceiver(this, filter,
                    "android.permission.DEVICE_POWER", null);
        }

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            String pkgList[] = null;
            if (ACTION_APP_KILL.equals(action)) {
                pkgList = intent.getStringArrayExtra(Intent.EXTRA_PACKAGES);
                if (pkgList != null && (pkgList.length > 0)) {
                    for (String pkg : pkgList) {
                        removeLocked(pkg);
                        for (int i=mBroadcastStats.size()-1; i>=0; i--) {
                            ArrayMap<String, BroadcastStats> uidStats = mBroadcastStats.valueAt(i);
                            if (uidStats.remove(pkg) != null) {
                                if (uidStats.size() <= 0) {
                                    mBroadcastStats.removeAt(i);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    class ClockReceiver extends BroadcastReceiver {
        public ClockReceiver() {
            IntentFilter filter = new IntentFilter();