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

Commit a1e60f1f authored by Svetoslav's avatar Svetoslav Committed by Android (Google) Code Review
Browse files

Merge "Use who when requesting permissions" into mnc-dev

parents 94548476 970b59cb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -4470,6 +4470,7 @@ package android.app {
    method public boolean onHasView();
    method public boolean onHasWindowAnimations();
    method public void onInvalidateOptionsMenu();
    method public void onRequestPermissionsFromFragment(android.app.Fragment, java.lang.String[], int);
    method public boolean onShouldSaveFragmentState(android.app.Fragment);
    method public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
    method public boolean onUseFragmentManagerInflaterFactory();
+1 −0
Original line number Diff line number Diff line
@@ -4566,6 +4566,7 @@ package android.app {
    method public boolean onHasView();
    method public boolean onHasWindowAnimations();
    method public void onInvalidateOptionsMenu();
    method public void onRequestPermissionsFromFragment(android.app.Fragment, java.lang.String[], int);
    method public boolean onShouldSaveFragmentState(android.app.Fragment);
    method public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
    method public boolean onUseFragmentManagerInflaterFactory();
+31 −26
Original line number Diff line number Diff line
@@ -690,6 +690,8 @@ public class Activity extends ContextThemeWrapper
    private static final String SAVED_DIALOG_KEY_PREFIX = "android:dialog_";
    private static final String SAVED_DIALOG_ARGS_KEY_PREFIX = "android:dialog_args_";

    private static final String REQUEST_PERMISSIONS_WHO_PREFIX = "@android:requestPermissions:";

    private static class ManagedDialog {
        Dialog mDialog;
        Bundle mArgs;
@@ -3751,7 +3753,7 @@ public class Activity extends ContextThemeWrapper
     */
    public final void requestPermissions(@NonNull String[] permissions, int requestCode) {
        Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions);
        startActivityForResult(intent, requestCode);
        startActivityForResult(REQUEST_PERMISSIONS_WHO_PREFIX, intent, requestCode, null);
    }

    /**
@@ -6348,13 +6350,18 @@ public class Activity extends ContextThemeWrapper
            + ", resCode=" + resultCode + ", data=" + data);
        mFragments.noteStateNotSaved();
        if (who == null) {
            if (isRequestPermissionResult(data)) {
            onActivityResult(requestCode, resultCode, data);
        } else if (who.startsWith(REQUEST_PERMISSIONS_WHO_PREFIX)) {
            who = who.substring(REQUEST_PERMISSIONS_WHO_PREFIX.length());
            if (TextUtils.isEmpty(who)) {
                dispatchRequestPermissionsResult(requestCode, data);
            } else {
                onActivityResult(requestCode, resultCode, data);
                Fragment frag = mFragments.findFragmentByWho(who);
                if (frag != null) {
                    dispatchRequestPermissionsResultToFragment(requestCode, data, frag);
                }
        } else {
            if (who.startsWith("@android:view:")) {
            }
        } else if (who.startsWith("@android:view:")) {
            ArrayList<ViewRootImpl> views = WindowManagerGlobal.getInstance().getRootViews(
                    getActivityToken());
            for (ViewRootImpl viewRoot : views) {
@@ -6367,15 +6374,10 @@ public class Activity extends ContextThemeWrapper
        } else {
            Fragment frag = mFragments.findFragmentByWho(who);
            if (frag != null) {
                    if (isRequestPermissionResult(data)) {
                        dispatchRequestPermissionsResultToFragment(requestCode, data, frag);
                    } else {
                frag.onActivityResult(requestCode, resultCode, data);
            }
        }
    }
        }
    }

    /**
     * Request to put this Activity in a mode where the user is locked to the
@@ -6484,11 +6486,6 @@ public class Activity extends ContextThemeWrapper
        fragement.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    private static boolean isRequestPermissionResult(Intent intent) {
        return intent != null
                && PackageManager.ACTION_REQUEST_PERMISSIONS.equals(intent.getAction());
    }

    class HostCallbacks extends FragmentHostCallback<Activity> {
        public HostCallbacks() {
            super(Activity.this /*activity*/);
@@ -6535,6 +6532,14 @@ public class Activity extends ContextThemeWrapper
            Activity.this.startActivityFromFragment(fragment, intent, requestCode, options);
        }

        @Override
        public void onRequestPermissionsFromFragment(Fragment fragment, String[] permissions,
                int requestCode) {
            String who = REQUEST_PERMISSIONS_WHO_PREFIX + fragment.mWho;
            Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions);
            startActivityForResult(who, intent, requestCode, null);
        }

        @Override
        public boolean onHasWindowAnimations() {
            return getWindow() != null;
+1 −3
Original line number Diff line number Diff line
@@ -1200,9 +1200,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
        if (mHost == null) {
            throw new IllegalStateException("Fragment " + this + " not attached to Activity");
        }
        Intent intent =
                mHost.getContext().getPackageManager().buildRequestPermissionsIntent(permissions);
        mHost.onStartActivityFromFragment(this, intent, requestCode, null);
        mHost.onRequestPermissionsFromFragment(this, permissions,requestCode);
    }

    /**
+9 −1
Original line number Diff line number Diff line
@@ -16,8 +16,8 @@

package android.app;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
@@ -125,6 +125,14 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
        mContext.startActivity(intent);
    }

    /**
     * Requests permissions from the given fragment.
     * See {@link Activity#requestPermissions(String[], int)}
     */
    public void onRequestPermissionsFromFragment(@NonNull Fragment fragment,
            @NonNull String[] permissions, int requestCode) {
    }

    /**
     * Return {@code true} if there are window animations.
     */