diff options
author | Svetoslav <svetoslavganov@google.com> | 2015-06-10 01:29:19 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-10 01:29:21 +0000 |
commit | a1e60f1f45dce19f9dc15b97cbb0821ffeb54d9d (patch) | |
tree | aac22c8a86b536767c60efd690b07e70a902f73f /core/java/android/app/Activity.java | |
parent | 9454847618c3b799a0acfa0a2495cf8a120c4f26 (diff) | |
parent | 970b59cbe377e23e9c681a5cef30c01f730c7377 (diff) | |
download | frameworks_base-a1e60f1f45dce19f9dc15b97cbb0821ffeb54d9d.zip frameworks_base-a1e60f1f45dce19f9dc15b97cbb0821ffeb54d9d.tar.gz frameworks_base-a1e60f1f45dce19f9dc15b97cbb0821ffeb54d9d.tar.bz2 |
Merge "Use who when requesting permissions" into mnc-dev
Diffstat (limited to 'core/java/android/app/Activity.java')
-rw-r--r-- | core/java/android/app/Activity.java | 57 |
1 files changed, 31 insertions, 26 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 2a76a19..1b4ee2e 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); } /** @@ -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*/); @@ -6536,6 +6533,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; } |