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

Commit d4dfcb37 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Prevent multiple outstanding permission queries per client" into...

Merge "Prevent multiple outstanding permission queries per client" into sc-qpr1-dev am: 373ed012 am: fec4a096 am: f31403d7

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15993917

Change-Id: Ia668af3c0e1608f4324a1074d10b51999d973e84
parents 53ba8ca0 f31403d7
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -207,6 +207,12 @@ public class ContextHubClientBroker extends IContextHubClient.Stub
     */
    private AtomicBoolean mIsPendingIntentCancelled = new AtomicBoolean(false);

    /**
     * True if a permissions query has been issued and is being processed. Used to prevent too many
     * queries from being issued by a single client at once.
     */
    private AtomicBoolean mIsPermQueryIssued = new AtomicBoolean(false);

    /*
     * Map containing all nanoapps this client has a messaging channel with and whether it is
     * allowed to communicate over that channel. A channel is defined to have been opened if the
@@ -233,11 +239,11 @@ public class ContextHubClientBroker extends IContextHubClient.Stub
    private final IContextHubTransactionCallback mQueryPermsCallback =
            new IContextHubTransactionCallback.Stub() {
            @Override
            public void onTransactionComplete(int result) {
            }
            public void onTransactionComplete(int result) {}

            @Override
            public void onQueryResponse(int result, List<NanoAppState> nanoAppStateList) {
                mIsPermQueryIssued.set(false);
                if (result != ContextHubTransaction.RESULT_SUCCESS && nanoAppStateList != null) {
                    Log.e(TAG, "Permissions query failed, but still received nanoapp state");
                } else if (nanoAppStateList != null) {
@@ -650,10 +656,12 @@ public class ContextHubClientBroker extends IContextHubClient.Stub
     * communicated with in the past.
     */
    private void checkNanoappPermsAsync() {
        if (!mIsPermQueryIssued.getAndSet(true)) {
            ContextHubServiceTransaction transaction = mTransactionManager.createQueryTransaction(
                    mAttachedContextHubInfo.getId(), mQueryPermsCallback, mPackage);
            mTransactionManager.addTransaction(transaction);
        }
    }

    private int updateNanoAppAuthState(
            long nanoAppId, List<String> nanoappPermissions, boolean gracePeriodExpired) {