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

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

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

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

Change-Id: Ia9f06fd0025044cc1136f00d76891b7fa81272a6
parents 01d8df41 373ed012
Loading
Loading
Loading
Loading
+13 −5
Original line number Original line Diff line number Diff line
@@ -209,6 +209,12 @@ public class ContextHubClientBroker extends IContextHubClient.Stub
     */
     */
    private AtomicBoolean mIsPendingIntentCancelled = new AtomicBoolean(false);
    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);

    /*
    /*
     * True if the application creating the client has the ACCESS_CONTEXT_HUB permission.
     * True if the application creating the client has the ACCESS_CONTEXT_HUB permission.
     */
     */
@@ -240,11 +246,11 @@ public class ContextHubClientBroker extends IContextHubClient.Stub
    private final IContextHubTransactionCallback mQueryPermsCallback =
    private final IContextHubTransactionCallback mQueryPermsCallback =
            new IContextHubTransactionCallback.Stub() {
            new IContextHubTransactionCallback.Stub() {
            @Override
            @Override
            public void onTransactionComplete(int result) {
            public void onTransactionComplete(int result) {}
            }


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


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