am a1e60f1f: Merge "Use who when requesting permissions" into mnc-dev
* commit 'a1e60f1f45dce19f9dc15b97cbb0821ffeb54d9d': Use who when requesting permissions
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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,32 +6350,32 @@ 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);
|
||||
}
|
||||
} 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) {
|
||||
if (isRequestPermissionResult(data)) {
|
||||
dispatchRequestPermissionsResultToFragment(requestCode, data, frag);
|
||||
} else {
|
||||
frag.onActivityResult(requestCode, resultCode, data);
|
||||
}
|
||||
dispatchRequestPermissionsResultToFragment(requestCode, data, frag);
|
||||
}
|
||||
}
|
||||
} 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);
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user