* commit '60022334b7bff4a8c985465186e7472215178819': Use who when requesting permissions
This commit is contained in:
@@ -4470,6 +4470,7 @@ package android.app {
|
|||||||
method public boolean onHasView();
|
method public boolean onHasView();
|
||||||
method public boolean onHasWindowAnimations();
|
method public boolean onHasWindowAnimations();
|
||||||
method public void onInvalidateOptionsMenu();
|
method public void onInvalidateOptionsMenu();
|
||||||
|
method public void onRequestPermissionsFromFragment(android.app.Fragment, java.lang.String[], int);
|
||||||
method public boolean onShouldSaveFragmentState(android.app.Fragment);
|
method public boolean onShouldSaveFragmentState(android.app.Fragment);
|
||||||
method public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
|
method public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
|
||||||
method public boolean onUseFragmentManagerInflaterFactory();
|
method public boolean onUseFragmentManagerInflaterFactory();
|
||||||
|
|||||||
@@ -4566,6 +4566,7 @@ package android.app {
|
|||||||
method public boolean onHasView();
|
method public boolean onHasView();
|
||||||
method public boolean onHasWindowAnimations();
|
method public boolean onHasWindowAnimations();
|
||||||
method public void onInvalidateOptionsMenu();
|
method public void onInvalidateOptionsMenu();
|
||||||
|
method public void onRequestPermissionsFromFragment(android.app.Fragment, java.lang.String[], int);
|
||||||
method public boolean onShouldSaveFragmentState(android.app.Fragment);
|
method public boolean onShouldSaveFragmentState(android.app.Fragment);
|
||||||
method public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
|
method public void onStartActivityFromFragment(android.app.Fragment, android.content.Intent, int, android.os.Bundle);
|
||||||
method public boolean onUseFragmentManagerInflaterFactory();
|
method public boolean onUseFragmentManagerInflaterFactory();
|
||||||
|
|||||||
@@ -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_KEY_PREFIX = "android:dialog_";
|
||||||
private static final String SAVED_DIALOG_ARGS_KEY_PREFIX = "android:dialog_args_";
|
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 {
|
private static class ManagedDialog {
|
||||||
Dialog mDialog;
|
Dialog mDialog;
|
||||||
Bundle mArgs;
|
Bundle mArgs;
|
||||||
@@ -3751,7 +3753,7 @@ public class Activity extends ContextThemeWrapper
|
|||||||
*/
|
*/
|
||||||
public final void requestPermissions(@NonNull String[] permissions, int requestCode) {
|
public final void requestPermissions(@NonNull String[] permissions, int requestCode) {
|
||||||
Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions);
|
Intent intent = getPackageManager().buildRequestPermissionsIntent(permissions);
|
||||||
startActivityForResult(intent, requestCode);
|
startActivityForResult(REQUEST_PERMISSIONS_WHO_PREFIX, intent, requestCode, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -6348,32 +6350,32 @@ public class Activity extends ContextThemeWrapper
|
|||||||
+ ", resCode=" + resultCode + ", data=" + data);
|
+ ", resCode=" + resultCode + ", data=" + data);
|
||||||
mFragments.noteStateNotSaved();
|
mFragments.noteStateNotSaved();
|
||||||
if (who == null) {
|
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);
|
dispatchRequestPermissionsResult(requestCode, data);
|
||||||
} else {
|
|
||||||
onActivityResult(requestCode, resultCode, data);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (who.startsWith("@android:view:")) {
|
|
||||||
ArrayList<ViewRootImpl> views = WindowManagerGlobal.getInstance().getRootViews(
|
|
||||||
getActivityToken());
|
|
||||||
for (ViewRootImpl viewRoot : views) {
|
|
||||||
if (viewRoot.getView() != null
|
|
||||||
&& viewRoot.getView().dispatchActivityResult(
|
|
||||||
who, requestCode, resultCode, data)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Fragment frag = mFragments.findFragmentByWho(who);
|
Fragment frag = mFragments.findFragmentByWho(who);
|
||||||
if (frag != null) {
|
if (frag != null) {
|
||||||
if (isRequestPermissionResult(data)) {
|
dispatchRequestPermissionsResultToFragment(requestCode, data, frag);
|
||||||
dispatchRequestPermissionsResultToFragment(requestCode, data, frag);
|
|
||||||
} else {
|
|
||||||
frag.onActivityResult(requestCode, resultCode, data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (who.startsWith("@android:view:")) {
|
||||||
|
ArrayList<ViewRootImpl> views = WindowManagerGlobal.getInstance().getRootViews(
|
||||||
|
getActivityToken());
|
||||||
|
for (ViewRootImpl viewRoot : views) {
|
||||||
|
if (viewRoot.getView() != null
|
||||||
|
&& viewRoot.getView().dispatchActivityResult(
|
||||||
|
who, requestCode, resultCode, data)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Fragment frag = mFragments.findFragmentByWho(who);
|
||||||
|
if (frag != null) {
|
||||||
|
frag.onActivityResult(requestCode, resultCode, data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6484,11 +6486,6 @@ public class Activity extends ContextThemeWrapper
|
|||||||
fragement.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
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> {
|
class HostCallbacks extends FragmentHostCallback<Activity> {
|
||||||
public HostCallbacks() {
|
public HostCallbacks() {
|
||||||
super(Activity.this /*activity*/);
|
super(Activity.this /*activity*/);
|
||||||
@@ -6535,6 +6532,14 @@ public class Activity extends ContextThemeWrapper
|
|||||||
Activity.this.startActivityFromFragment(fragment, intent, requestCode, options);
|
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
|
@Override
|
||||||
public boolean onHasWindowAnimations() {
|
public boolean onHasWindowAnimations() {
|
||||||
return getWindow() != null;
|
return getWindow() != null;
|
||||||
|
|||||||
@@ -1200,9 +1200,7 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene
|
|||||||
if (mHost == null) {
|
if (mHost == null) {
|
||||||
throw new IllegalStateException("Fragment " + this + " not attached to Activity");
|
throw new IllegalStateException("Fragment " + this + " not attached to Activity");
|
||||||
}
|
}
|
||||||
Intent intent =
|
mHost.onRequestPermissionsFromFragment(this, permissions,requestCode);
|
||||||
mHost.getContext().getPackageManager().buildRequestPermissionsIntent(permissions);
|
|
||||||
mHost.onStartActivityFromFragment(this, intent, requestCode, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
package android.app;
|
package android.app;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@@ -125,6 +125,14 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
|
|||||||
mContext.startActivity(intent);
|
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.
|
* Return {@code true} if there are window animations.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user