Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / ui / android / java / src / org / chromium / ui / base / ActivityWindowAndroid.java
index 342ba68..0d689a0 100644 (file)
@@ -5,9 +5,11 @@
 package org.chromium.ui.base;
 
 import android.app.Activity;
+import android.app.PendingIntent;
 import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentSender.SendIntentException;
 import android.graphics.Bitmap;
 import android.graphics.Rect;
 import android.util.Log;
@@ -28,7 +30,7 @@ public class ActivityWindowAndroid extends WindowAndroid {
     private static final int REQUEST_CODE_RANGE_SIZE = 100;
     private static final String TAG = "ActivityWindowAndroid";
 
-    private Activity mActivity;
+    private final Activity mActivity;
     private int mNextRequestCode = 0;
 
     public ActivityWindowAndroid(Activity activity) {
@@ -37,19 +39,31 @@ public class ActivityWindowAndroid extends WindowAndroid {
     }
 
     @Override
+    public int showCancelableIntent(PendingIntent intent, IntentCallback callback, int errorId) {
+        int requestCode = generateNextRequestCode();
+
+        try {
+            mActivity.startIntentSenderForResult(
+                    intent.getIntentSender(), requestCode, new Intent(), 0, 0, 0);
+        } catch (SendIntentException e) {
+            return START_INTENT_FAILURE;
+        }
+
+        storeCallbackData(requestCode, callback, errorId);
+        return requestCode;
+    }
+
+    @Override
     public int showCancelableIntent(Intent intent, IntentCallback callback, int errorId) {
-        int requestCode = REQUEST_CODE_PREFIX + mNextRequestCode;
-        mNextRequestCode = (mNextRequestCode + 1) % REQUEST_CODE_RANGE_SIZE;
+        int requestCode = generateNextRequestCode();
 
         try {
             mActivity.startActivityForResult(intent, requestCode);
         } catch (ActivityNotFoundException e) {
-            return -1;
+            return START_INTENT_FAILURE;
         }
 
-        mOutstandingIntents.put(requestCode, callback);
-        mIntentErrors.put(requestCode, mApplicationContext.getString(errorId));
-
+        storeCallbackData(requestCode, callback, errorId);
         return requestCode;
     }
 
@@ -115,4 +129,15 @@ public class ActivityWindowAndroid extends WindowAndroid {
             return null;
         }
     }
+
+    private int generateNextRequestCode() {
+        int requestCode = REQUEST_CODE_PREFIX + mNextRequestCode;
+        mNextRequestCode = (mNextRequestCode + 1) % REQUEST_CODE_RANGE_SIZE;
+        return requestCode;
+    }
+
+    private void storeCallbackData(int requestCode, IntentCallback callback, int errorId) {
+        mOutstandingIntents.put(requestCode, callback);
+        mIntentErrors.put(requestCode, mApplicationContext.getString(errorId));
+    }
 }