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

Commit 61afdfb5 authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Fix issue #21945272: Crash in Activity.dispatchRequestPermissionsResult

Make sure to send a full result no matter how we finish the activity.

Change-Id: Ic087a354053d0078985c33f6d1c77c9bb694dc62
parent 6304bd34
Loading
Loading
Loading
Loading
+17 −8
Original line number Original line Diff line number Diff line
@@ -64,6 +64,8 @@ public class GrantPermissionsActivity extends Activity
    private GrantPermissionsViewHandler mViewHandler;
    private GrantPermissionsViewHandler mViewHandler;
    private AppPermissions mAppPermissions;
    private AppPermissions mAppPermissions;


    boolean mResultSet;

    @Override
    @Override
    public void onCreate(Bundle icicle) {
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        super.onCreate(icicle);
@@ -240,9 +242,9 @@ public class GrantPermissionsActivity extends Activity
    }
    }


    @Override
    @Override
    public void onBackPressed() {
    public void finish() {
        setResultAndFinish();
        setResultIfNeeded(RESULT_CANCELED);
        super.onBackPressed();
        super.finish();
    }
    }


    private int computePermissionGrantState(PackageInfo callingPackageInfo,
    private int computePermissionGrantState(PackageInfo callingPackageInfo,
@@ -304,12 +306,19 @@ public class GrantPermissionsActivity extends Activity
        }
        }
    }
    }


    private void setResultAndFinish() {
    private void setResultIfNeeded(int resultCode) {
        if (!mResultSet) {
            mResultSet = true;
            logRequestedPermissionGroups();
            logRequestedPermissionGroups();
            Intent result = new Intent(PackageManager.ACTION_REQUEST_PERMISSIONS);
            Intent result = new Intent(PackageManager.ACTION_REQUEST_PERMISSIONS);
            result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_NAMES, mRequestedPermissions);
            result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_NAMES, mRequestedPermissions);
            result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_RESULTS, mGrantResults);
            result.putExtra(PackageManager.EXTRA_REQUEST_PERMISSIONS_RESULTS, mGrantResults);
        setResult(RESULT_OK, result);
            setResult(resultCode, result);
        }
    }

    private void setResultAndFinish() {
        setResultIfNeeded(RESULT_OK);
        finish();
        finish();
    }
    }