summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvetoslav <svetoslavganov@google.com>2013-10-29 15:23:26 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-10-29 15:23:27 +0000
commit86bfb3af4296a1263cb2c01a9e87b5b20015fedb (patch)
tree6d6af2715cd3c94b90a60daf2afdc7ffbd2e6ee0
parent2b5297a40024e9cf136919d3ea0e88cb4ccfa27c (diff)
parentbaeabb65e1e818c6679036774933f40e8540b293 (diff)
downloadframeworks_base-86bfb3af4296a1263cb2c01a9e87b5b20015fedb.zip
frameworks_base-86bfb3af4296a1263cb2c01a9e87b5b20015fedb.tar.gz
frameworks_base-86bfb3af4296a1263cb2c01a9e87b5b20015fedb.tar.bz2
Merge "Not show share targets that cannot be launched." into klp-dev
-rw-r--r--core/java/android/widget/ActivityChooserModel.java10
-rw-r--r--core/java/android/widget/ActivityChooserView.java29
-rw-r--r--core/res/res/values/strings.xml3
-rw-r--r--core/res/res/values/symbols.xml1
4 files changed, 34 insertions, 9 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;
}
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java
index dff1531..8612964 100644
--- a/core/java/android/widget/ActivityChooserView.java
+++ b/core/java/android/widget/ActivityChooserView.java
@@ -18,6 +18,7 @@ package android.widget;
import com.android.internal.R;
+import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -27,6 +28,7 @@ import android.content.res.TypedArray;
import android.database.DataSetObserver;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.ActionProvider;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -63,6 +65,8 @@ import android.widget.ListPopupWindow.ForwardingListener;
*/
public class ActivityChooserView extends ViewGroup implements ActivityChooserModelClient {
+ private static final String LOG_TAG = "ActivityChooserView";
+
/**
* An adapter for displaying the activities in an {@link AdapterView}.
*/
@@ -543,9 +547,9 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
}
// Activity chooser content.
if (mDefaultActivityButton.getVisibility() == VISIBLE) {
- mActivityChooserContent.setBackgroundDrawable(mActivityChooserContentBackground);
+ mActivityChooserContent.setBackground(mActivityChooserContentBackground);
} else {
- mActivityChooserContent.setBackgroundDrawable(null);
+ mActivityChooserContent.setBackground(null);
}
}
@@ -577,7 +581,8 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
Intent launchIntent = mAdapter.getDataModel().chooseActivity(position);
if (launchIntent != null) {
launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
- mContext.startActivity(launchIntent);
+ ResolveInfo resolveInfo = mAdapter.getDataModel().getActivity(position);
+ startActivity(launchIntent, resolveInfo);
}
}
} break;
@@ -595,7 +600,7 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
Intent launchIntent = mAdapter.getDataModel().chooseActivity(index);
if (launchIntent != null) {
launchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
- mContext.startActivity(launchIntent);
+ startActivity(launchIntent, defaultActivity);
}
} else if (view == mExpandActivityOverflowButton) {
mIsSelectingDefaultActivity = false;
@@ -632,6 +637,18 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
mOnDismissListener.onDismiss();
}
}
+
+ private void startActivity(Intent intent, ResolveInfo resolveInfo) {
+ try {
+ mContext.startActivity(intent);
+ } catch (RuntimeException re) {
+ CharSequence appLabel = resolveInfo.loadLabel(mContext.getPackageManager());
+ String message = mContext.getString(
+ R.string.activitychooserview_choose_application_error, appLabel);
+ Log.e(LOG_TAG, message);
+ Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
+ }
+ }
}
/**
@@ -805,10 +822,6 @@ public class ActivityChooserView extends ViewGroup implements ActivityChooserMod
return mDataModel.getHistorySize();
}
- public int getMaxActivityCount() {
- return mMaxActivityCount;
- }
-
public ActivityChooserModel getDataModel() {
return mDataModel;
}
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 490eab8..62f26c6 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -3901,6 +3901,9 @@
<!-- Description of the shwoing of a popup window with activities to choose from. [CHAR LIMIT=NONE] -->
<string name="activitychooserview_choose_application">Choose an app</string>
+ <!-- Error message if the share target app cannto be launched. [CHAR LIMIT=NONE] -->
+ <string name="activitychooserview_choose_application_error">Couldn\'t launch <xliff:g id="application_name" example="Acme">%s</xliff:g></string>
+
<!-- ShareActionProvider - accessibility support -->
<!-- Description of the choose target button in a ShareActionProvider (share UI). [CHAR LIMIT=NONE] -->
<string name="shareactionprovider_share_with">Share with</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index a5573c9..22a9402 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -392,6 +392,7 @@
<java-symbol type="string" name="accessibility_enabled" />
<java-symbol type="string" name="activity_chooser_view_see_all" />
<java-symbol type="string" name="activitychooserview_choose_application" />
+ <java-symbol type="string" name="activitychooserview_choose_application_error" />
<java-symbol type="string" name="alternate_eri_file" />
<java-symbol type="string" name="alwaysUse" />
<java-symbol type="string" name="autofill_address_line_1_label_re" />