summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvetoslav <svetoslavganov@google.com>2015-06-09 16:05:21 -0700
committerSvetoslav <svetoslavganov@google.com>2015-06-09 18:17:44 -0700
commit970b59cbe377e23e9c681a5cef30c01f730c7377 (patch)
tree5dc3a1fb8a1b777292d024780e7e9048a577255a
parentd6461bc4a6e56e28c1b976862aa46fe5bcaa15a3 (diff)
downloadframeworks_base-970b59cbe377e23e9c681a5cef30c01f730c7377.zip
frameworks_base-970b59cbe377e23e9c681a5cef30c01f730c7377.tar.gz
frameworks_base-970b59cbe377e23e9c681a5cef30c01f730c7377.tar.bz2
Use who when requesting permissions
Change-Id: Id0b231f8b74099b7877eb4441a1664416c641731
-rw-r--r--api/current.txt1
-rw-r--r--api/system-current.txt1
-rw-r--r--core/java/android/app/Activity.java57
-rw-r--r--core/java/android/app/Fragment.java4
-rw-r--r--core/java/android/app/FragmentHostCallback.java10
5 files changed, 43 insertions, 30 deletions
diff --git a/api/current.txt b/api/current.txt
index b35581c..4a3fafd 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -4469,6 +4469,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();
diff --git a/api/system-current.txt b/api/system-current.txt
index 3698b22..e4e8387 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -4565,6 +4565,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();
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 90567c7..b88d5d4 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -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);
}
/**
@@ -6330,32 +6332,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);
+ }
}
}
@@ -6466,11 +6468,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*/);
@@ -6518,6 +6515,14 @@ public class Activity extends ContextThemeWrapper
}
@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;
}
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 26d4fd4..95b3b8e 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -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);
}
/**
diff --git a/core/java/android/app/FragmentHostCallback.java b/core/java/android/app/FragmentHostCallback.java
index 3e753f0..7b01307 100644
--- a/core/java/android/app/FragmentHostCallback.java
+++ b/core/java/android/app/FragmentHostCallback.java
@@ -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;
@@ -126,6 +126,14 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer {
}
/**
+ * 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.
*/
public boolean onHasWindowAnimations() {