diff options
| author | 2016-04-12 12:00:15 +0100 | |
|---|---|---|
| committer | 2016-04-13 12:33:30 +0100 | |
| commit | a0c2dc3cf56bf9c90af517f4cd12ef80d375a85a (patch) | |
| tree | 54365b27de730362ed6a334ef665f19ca057e0c9 | |
| parent | eeef75b6266dee8127bb0bcd1c241059602ca791 (diff) | |
Provide startIntentSenderForResult for fragments
Bug: 27700608
Change-Id: Ibb7689ba0527048dd5944c4315b986f16030081d
| -rw-r--r-- | api/current.txt | 2 | ||||
| -rw-r--r-- | api/system-current.txt | 2 | ||||
| -rw-r--r-- | api/test-current.txt | 2 | ||||
| -rw-r--r-- | core/java/android/app/Activity.java | 42 | ||||
| -rw-r--r-- | core/java/android/app/Fragment.java | 15 | ||||
| -rw-r--r-- | core/java/android/app/FragmentHostCallback.java | 16 |
6 files changed, 72 insertions, 7 deletions
diff --git a/api/current.txt b/api/current.txt index eb129dadbeed..fbb26091f840 100644 --- a/api/current.txt +++ b/api/current.txt @@ -4480,6 +4480,7 @@ package android.app { method public void startActivity(android.content.Intent, android.os.Bundle); method public void startActivityForResult(android.content.Intent, int); method public void startActivityForResult(android.content.Intent, int, android.os.Bundle); + method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; method public void unregisterForContextMenu(android.view.View); } @@ -4571,6 +4572,7 @@ package android.app { 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 void onStartIntentSenderFromFragment(android.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; method public boolean onUseFragmentManagerInflaterFactory(); } diff --git a/api/system-current.txt b/api/system-current.txt index 5bfbc1604122..587b79f03969 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4613,6 +4613,7 @@ package android.app { method public void startActivity(android.content.Intent, android.os.Bundle); method public void startActivityForResult(android.content.Intent, int); method public void startActivityForResult(android.content.Intent, int, android.os.Bundle); + method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; method public void unregisterForContextMenu(android.view.View); } @@ -4704,6 +4705,7 @@ package android.app { 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 void onStartIntentSenderFromFragment(android.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; method public boolean onUseFragmentManagerInflaterFactory(); } diff --git a/api/test-current.txt b/api/test-current.txt index 04fedb170337..9417bee67df3 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -4480,6 +4480,7 @@ package android.app { method public void startActivity(android.content.Intent, android.os.Bundle); method public void startActivityForResult(android.content.Intent, int); method public void startActivityForResult(android.content.Intent, int, android.os.Bundle); + method public void startIntentSenderForResult(android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; method public void unregisterForContextMenu(android.view.View); } @@ -4571,6 +4572,7 @@ package android.app { 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 void onStartIntentSenderFromFragment(android.app.Fragment, android.content.IntentSender, int, android.content.Intent, int, int, int, android.os.Bundle) throws android.content.IntentSender.SendIntentException; method public boolean onUseFragmentManagerInflaterFactory(); } diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 76527667c62e..f7884a742b03 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -4405,8 +4405,8 @@ public class Activity extends ContextThemeWrapper @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, Bundle options) throws IntentSender.SendIntentException { if (mParent == null) { - startIntentSenderForResultInner(intent, requestCode, fillInIntent, - flagsMask, flagsValues, this, options); + startIntentSenderForResultInner(intent, mEmbeddedID, requestCode, fillInIntent, + flagsMask, flagsValues, options); } else if (options != null) { mParent.startIntentSenderFromChild(this, intent, requestCode, fillInIntent, flagsMask, flagsValues, extraFlags, options); @@ -4418,8 +4418,8 @@ public class Activity extends ContextThemeWrapper } } - private void startIntentSenderForResultInner(IntentSender intent, int requestCode, - Intent fillInIntent, int flagsMask, int flagsValues, Activity activity, + private void startIntentSenderForResultInner(IntentSender intent, String who, int requestCode, + Intent fillInIntent, int flagsMask, int flagsValues, Bundle options) throws IntentSender.SendIntentException { try { @@ -4431,7 +4431,7 @@ public class Activity extends ContextThemeWrapper } int result = ActivityManagerNative.getDefault() .startActivityIntentSender(mMainThread.getApplicationThread(), intent, - fillInIntent, resolvedType, mToken, activity.mEmbeddedID, + fillInIntent, resolvedType, mToken, who, requestCode, flagsMask, flagsValues, options); if (result == ActivityManager.START_CANCELED) { throw new IntentSender.SendIntentException(); @@ -4888,8 +4888,23 @@ public class Activity extends ContextThemeWrapper int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, @Nullable Bundle options) throws IntentSender.SendIntentException { - startIntentSenderForResultInner(intent, requestCode, fillInIntent, - flagsMask, flagsValues, child, options); + startIntentSenderForResultInner(intent, child.mEmbeddedID, requestCode, fillInIntent, + flagsMask, flagsValues, options); + } + + /** + * Like {@link #startIntentSenderFromChild}, but taking a Fragment; see + * {@link #startIntentSenderForResult(IntentSender, int, Intent, int, int, int)} + * for more information. + * + * @hide + */ + public void startIntentSenderFromChildFragment(Fragment child, IntentSender intent, + int requestCode, Intent fillInIntent, int flagsMask, int flagsValues, + int extraFlags, @Nullable Bundle options) + throws IntentSender.SendIntentException { + startIntentSenderForResultInner(intent, child.mWho, requestCode, fillInIntent, + flagsMask, flagsValues, options); } /** @@ -7035,6 +7050,19 @@ public class Activity extends ContextThemeWrapper } @Override + public void onStartIntentSenderFromFragment(Fragment fragment, IntentSender intent, + int requestCode, @Nullable Intent fillInIntent, int flagsMask, int flagsValues, + int extraFlags, Bundle options) throws IntentSender.SendIntentException { + if (mParent == null) { + startIntentSenderForResultInner(intent, fragment.mWho, requestCode, fillInIntent, + flagsMask, flagsValues, options); + } else if (options != null) { + mParent.startIntentSenderFromChildFragment(fragment, intent, requestCode, + fillInIntent, flagsMask, flagsValues, extraFlags, options); + } + } + + @Override public void onRequestPermissionsFromFragment(Fragment fragment, String[] permissions, int requestCode) { String who = REQUEST_PERMISSIONS_WHO_PREFIX + fragment.mWho; diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java index 2a04c39f2c5a..29f594f74885 100644 --- a/core/java/android/app/Fragment.java +++ b/core/java/android/app/Fragment.java @@ -23,6 +23,7 @@ import android.annotation.StringRes; import android.content.ComponentCallbacks2; import android.content.Context; import android.content.Intent; +import android.content.IntentSender; import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; @@ -1116,6 +1117,20 @@ public class Fragment implements ComponentCallbacks2, OnCreateContextMenuListene } /** + * Call {@link Activity#startIntentSenderForResult(IntentSender, int, Intent, int, int, int, + * Bundle)} from the fragment's containing Activity. + */ + public void startIntentSenderForResult(IntentSender intent, int requestCode, + @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags, + Bundle options) throws IntentSender.SendIntentException { + if (mHost == null) { + throw new IllegalStateException("Fragment " + this + " not attached to Activity"); + } + mHost.onStartIntentSenderFromFragment(this, intent, requestCode, fillInIntent, flagsMask, + flagsValues, extraFlags, options); + } + + /** * Receive the result from a previous call to * {@link #startActivityForResult(Intent, int)}. This follows the * related Activity API as described there in diff --git a/core/java/android/app/FragmentHostCallback.java b/core/java/android/app/FragmentHostCallback.java index 13517e600b0e..cf6b1147aba0 100644 --- a/core/java/android/app/FragmentHostCallback.java +++ b/core/java/android/app/FragmentHostCallback.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.content.Intent; +import android.content.IntentSender; import android.os.Bundle; import android.os.Handler; import android.util.ArrayMap; @@ -131,6 +132,21 @@ public abstract class FragmentHostCallback<E> extends FragmentContainer { } /** + * Starts a new {@link IntentSender} from the given fragment. + * See {@link Activity#startIntentSender(IntentSender, Intent, int, int, int, Bundle)}. + */ + public void onStartIntentSenderFromFragment(Fragment fragment, IntentSender intent, + int requestCode, @Nullable Intent fillInIntent, int flagsMask, int flagsValues, + int extraFlags, Bundle options) throws IntentSender.SendIntentException { + if (requestCode != -1) { + throw new IllegalStateException( + "Starting intent sender with a requestCode requires a FragmentActivity host"); + } + mContext.startIntentSender(intent, fillInIntent, flagsMask, flagsValues, extraFlags, + options); + } + + /** * Requests permissions from the given fragment. * See {@link Activity#requestPermissions(String[], int)} */ |