diff options
author | Svetoslav <svetoslavganov@google.com> | 2013-10-28 15:22:14 -0700 |
---|---|---|
committer | Svetoslav <svetoslavganov@google.com> | 2013-10-28 16:26:47 -0700 |
commit | baeabb65e1e818c6679036774933f40e8540b293 (patch) | |
tree | dfebc657da1d88614053f4a07afd4f03e01d9ca1 /core/java/android/widget/ActivityChooserModel.java | |
parent | 714ba34556572d36b1f9f8d9b860c4da24da6361 (diff) | |
download | frameworks_base-baeabb65e1e818c6679036774933f40e8540b293.zip frameworks_base-baeabb65e1e818c6679036774933f40e8540b293.tar.gz frameworks_base-baeabb65e1e818c6679036774933f40e8540b293.tar.bz2 |
Not show share targets that cannot be launched.
This changes filters out share targets that we cannot start
because the target does not properly implement the SEND protocol
and has either share target activity hidden or requires a
permission to launch it. Also the code that launches the share
target activity catches the runtime exception and shows an error
message. Note that being able to launch an activity in a moment
of time is not a guarantee that one can do that latter. Hence,
being able to launch an activity while building the share UI
does not guarantee that one can launch it when selecting the
share target.
bug:11402139
Change-Id: Id35732510755b2eeb9eccacc046d289c2f2ee856
Diffstat (limited to 'core/java/android/widget/ActivityChooserModel.java')
-rw-r--r-- | core/java/android/widget/ActivityChooserModel.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/core/java/android/widget/ActivityChooserModel.java b/core/java/android/widget/ActivityChooserModel.java index 736566e..00a92ca 100644 --- a/core/java/android/widget/ActivityChooserModel.java +++ b/core/java/android/widget/ActivityChooserModel.java @@ -16,9 +16,12 @@ package android.widget; +import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.database.DataSetObservable; import android.os.AsyncTask; @@ -708,7 +711,12 @@ public class ActivityChooserModel extends DataSetObservable { final int resolveInfoCount = resolveInfos.size(); for (int i = 0; i < resolveInfoCount; i++) { ResolveInfo resolveInfo = resolveInfos.get(i); - mActivities.add(new ActivityResolveInfo(resolveInfo)); + ActivityInfo activityInfo = resolveInfo.activityInfo; + if (ActivityManager.checkComponentPermission(activityInfo.permission, + android.os.Process.myUid(), activityInfo.applicationInfo.uid, + activityInfo.exported) == PackageManager.PERMISSION_GRANTED) { + mActivities.add(new ActivityResolveInfo(resolveInfo)); + } } return true; } |