Index: chrome/android/java/src/org/chromium/chrome/browser/share/ShareHelper.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareHelper.java |
index 13f97ae8dd5db30f0aa66bf4b0bac2d93636a37f..9dd90b7329e5838a6ddabac7b42e421877dac7ea 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/share/ShareHelper.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/share/ShareHelper.java |
@@ -11,6 +11,8 @@ import android.content.BroadcastReceiver; |
import android.content.ClipData; |
import android.content.ComponentName; |
import android.content.Context; |
+import android.content.DialogInterface; |
+import android.content.DialogInterface.OnDismissListener; |
import android.content.Intent; |
import android.content.IntentFilter; |
import android.content.SharedPreferences; |
@@ -401,6 +403,9 @@ public class ShareHelper { |
builder.setTitle(activity.getString(R.string.share_link_chooser_title)); |
builder.setAdapter(adapter, null); |
+ // Need a mutable object to record whether the callback has been fired. |
+ final boolean[] callbackCalled = new boolean[1]; |
+ |
final AlertDialog dialog = builder.create(); |
dialog.show(); |
dialog.getListView().setOnItemClickListener(new OnItemClickListener() { |
@@ -410,13 +415,28 @@ public class ShareHelper { |
ActivityInfo ai = info.activityInfo; |
ComponentName component = |
new ComponentName(ai.applicationInfo.packageName, ai.name); |
- if (callback != null) callback.onTargetChosen(component); |
+ if (callback != null && !callbackCalled[0]) { |
+ callback.onTargetChosen(component); |
+ callbackCalled[0] = true; |
+ } |
if (saveLastUsed) setLastShareComponentName(component); |
makeIntentAndShare(false, activity, title, text, url, offlineUri, screenshotUri, |
component, null); |
dialog.dismiss(); |
} |
}); |
+ |
+ if (callback == null) return; |
+ |
+ dialog.setOnDismissListener(new OnDismissListener() { |
+ @Override |
+ public void onDismiss(DialogInterface dialog) { |
+ if (!callbackCalled[0]) { |
+ callback.onCancel(); |
+ callbackCalled[0] = true; |
+ } |
+ } |
+ }); |
} |
/** |