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

Commit 82d4acc6 authored by Christopher Tate's avatar Christopher Tate Committed by Chris Tate
Browse files

Whitelist intent verifier from broadcast dispatch

In rare cases it was possible for the intent filter verifier to fall
out of whitelist waiting on broadcast dispatch.  We now use the
broadcast mechanism's inherent whitelisting capabilities to start that
interval at the actual broadcast dispatch time so that queue delays
don't impact the verifier's ability to do work.

Bug: 119414110
Test: manual
Change-Id: If52b97ce6fb3bedb4c16afba254cab3ede153ecd
parent 4411d8d4
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -123,6 +123,7 @@ import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.AppDetailsActivity;
import android.app.AppOpsManager;
import android.app.BroadcastOptions;
import android.app.IActivityManager;
import android.app.ResourcesManager;
import android.app.admin.IDevicePolicyManager;
@@ -1044,12 +1045,17 @@ public class PackageManagerService extends IPackageManager.Stub
            verificationIntent.setComponent(mIntentFilterVerifierComponent);
            verificationIntent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
            final long whitelistTimeout = getVerificationTimeout();
            final BroadcastOptions options = BroadcastOptions.makeBasic();
            options.setTemporaryAppWhitelistDuration(whitelistTimeout);
            DeviceIdleController.LocalService idleController = getDeviceIdleController();
            idleController.addPowerSaveTempWhitelistApp(Process.myUid(),
                    mIntentFilterVerifierComponent.getPackageName(), getVerificationTimeout(),
                    mIntentFilterVerifierComponent.getPackageName(), whitelistTimeout,
                    UserHandle.USER_SYSTEM, true, "intent filter verifier");
            mContext.sendBroadcastAsUser(verificationIntent, UserHandle.SYSTEM);
            mContext.sendBroadcastAsUser(verificationIntent, UserHandle.SYSTEM,
                    null, options.toBundle());
            if (DEBUG_DOMAIN_VERIFICATION) Slog.d(TAG,
                    "Sending IntentFilter verification broadcast");
        }