Do not use ShareActionProvider before API 14.

Use simple share intent before API 14.

bug:6706723

Change-Id: I47930f0b81c7c8c1943054964a093967a7704bf1
diff --git a/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java b/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java
index 9267c0e..ac14d9b 100644
--- a/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java
+++ b/gallerycommon/src/com/android/gallery3d/common/ApiHelper.java
@@ -124,6 +124,9 @@
     public static final boolean HAS_MOTION_EVENT_TRANSFORM =
             Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB;
 
+    public static final boolean HAS_SHARE_ACTION_PROVIDER =
+            Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH;
+
     public static int getIntFieldIfExists(Class<?> klass, String fieldName,
             Class<?> obj, int defaultVal) {
         try {
diff --git a/res/menu/movie.xml b/res/menu/movie.xml
index fde235c..ce3a100 100644
--- a/res/menu/movie.xml
+++ b/res/menu/movie.xml
@@ -18,6 +18,5 @@
             android:icon="@drawable/ic_menu_share_holo_light"
             android:title="@string/share"
             android:enabled="true"
-            android:actionProviderClass="android.widget.ShareActionProvider"
             android:showAsAction="ifRoom" />
 </menu>
diff --git a/res/menu/operation.xml b/res/menu/operation.xml
index 3225e1e..918c532 100644
--- a/res/menu/operation.xml
+++ b/res/menu/operation.xml
@@ -23,7 +23,6 @@
             android:icon="@drawable/ic_menu_share_holo_light"
             android:title="@string/share"
             android:visible="false"
-            android:actionProviderClass="android.widget.ShareActionProvider"
             android:showAsAction="ifRoom">
     </item>
     <item android:id="@+id/action_delete"
diff --git a/res/menu/photo.xml b/res/menu/photo.xml
index 21f802a..bc4ccb3 100644
--- a/res/menu/photo.xml
+++ b/res/menu/photo.xml
@@ -23,7 +23,6 @@
             android:icon="@drawable/ic_menu_share_holo_light"
             android:title="@string/share"
             android:enabled="true"
-            android:actionProviderClass="android.widget.ShareActionProvider"
             android:visible="false"
             android:showAsAction="ifRoom" />
     <item android:id="@+id/action_delete"
diff --git a/src/com/android/gallery3d/app/GalleryActionBar.java b/src/com/android/gallery3d/app/GalleryActionBar.java
index 2df6535..69f51bc 100644
--- a/src/com/android/gallery3d/app/GalleryActionBar.java
+++ b/src/com/android/gallery3d/app/GalleryActionBar.java
@@ -130,12 +130,12 @@
         return null;
     }
 
-    public static ShareActionProvider initializeShareActionProvider(Menu menu) {
+    @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
+    public static ShareActionProvider initializeShareActionProvider(Menu menu,
+            Context context) {
         MenuItem item = menu.findItem(R.id.action_share);
-        ShareActionProvider shareActionProvider = null;
-        if (item != null) {
-            shareActionProvider = (ShareActionProvider) item.getActionProvider();
-        }
+        ShareActionProvider shareActionProvider = new ShareActionProvider(context);
+        item.setActionProvider(shareActionProvider);
         return shareActionProvider;
     }
 
diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java
index aa55c9b..0a2475a 100644
--- a/src/com/android/gallery3d/app/MovieActivity.java
+++ b/src/com/android/gallery3d/app/MovieActivity.java
@@ -167,26 +167,38 @@
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
         super.onCreateOptionsMenu(menu);
-
         getMenuInflater().inflate(R.menu.movie, menu);
-        ShareActionProvider provider = GalleryActionBar.initializeShareActionProvider(menu);
 
         // Document says EXTRA_STREAM should be a content: Uri
         // So, we only share the video if it's "content:".
-        if (provider != null && ContentResolver.SCHEME_CONTENT
-                .equals(mUri.getScheme())) {
-            Intent intent = new Intent(Intent.ACTION_SEND);
-            intent.setType("video/*");
-            intent.putExtra(Intent.EXTRA_STREAM, mUri);
-            provider.setShareIntent(intent);
+        if (ContentResolver.SCHEME_CONTENT.equals(mUri.getScheme())) {
+            initializeShareActionProvider(menu);
+        } else {
+            menu.findItem(R.id.action_share).setVisible(false);
         }
-
         return true;
     }
 
+    @TargetApi(ApiHelper.VERSION_CODES.JELLY_BEAN)
+    private void initializeShareActionProvider(Menu menu) {
+        if (!ApiHelper.HAS_SHARE_ACTION_PROVIDER) return;
+
+        ShareActionProvider provider = GalleryActionBar.initializeShareActionProvider(
+                menu, this);
+        provider.setShareIntent(createShareIntent());
+    }
+
+    private Intent createShareIntent() {
+        Intent intent = new Intent(Intent.ACTION_SEND);
+        intent.setType("video/*");
+        intent.putExtra(Intent.EXTRA_STREAM, mUri);
+        return intent;
+    }
+
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == android.R.id.home) {
+        int id = item.getItemId();
+        if (id == android.R.id.home) {
             if (mTreatUpAsBack) {
                 finish();
             } else {
@@ -194,6 +206,10 @@
                 finish();
             }
             return true;
+        } else if (id == R.id.action_share) {
+            startActivity(Intent.createChooser(createShareIntent(),
+                    getString(R.string.share)));
+            return true;
         }
         return false;
     }
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index 678ba6d..36a3f87 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -120,7 +120,7 @@
     private MediaItem mCurrentPhoto = null;
     private MenuExecutor mMenuExecutor;
     private boolean mIsActive;
-    private ShareActionProvider mShareActionProvider;
+    private Object mShareActionProvider; // class ShareActionProvider
     private String mSetPathString;
     // This is the original mSetPathString before adding the camera preview item.
     private String mOriginalSetPathString;
@@ -325,20 +325,34 @@
         }
     }
 
+    private Intent createShareIntent(Path path) {
+        DataManager manager = mActivity.getDataManager();
+        Uri uri = manager.getContentUri(path);
+        int type = manager.getMediaType(path);
+        Intent intent = new Intent(Intent.ACTION_SEND);
+        intent.setType(MenuExecutor.getMimeType(type));
+        intent.putExtra(Intent.EXTRA_STREAM, uri);
+        return intent;
+    }
+
     private void updateShareURI(Path path) {
-        if (mShareActionProvider != null) {
-            DataManager manager = mActivity.getDataManager();
-            int type = manager.getMediaType(path);
-            Intent intent = new Intent(Intent.ACTION_SEND);
-            intent.setType(MenuExecutor.getMimeType(type));
-            Uri uri = manager.getContentUri(path);
-            intent.putExtra(Intent.EXTRA_STREAM, uri);
-            mShareActionProvider.setShareIntent(intent);
-            setNfcBeamPushUris(new Uri[]{uri});
-            mPendingSharePath = null;
-        } else {
-            // This happens when ActionBar is not created yet.
-            mPendingSharePath = path;
+        DataManager manager = mActivity.getDataManager();
+        Uri uri = manager.getContentUri(path);
+        setNfcBeamPushUris(new Uri[]{uri});
+        setShareActionProviderIntent(path);
+    }
+
+    @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
+    private void setShareActionProviderIntent(Path path) {
+        if (ApiHelper.HAS_SHARE_ACTION_PROVIDER) {
+            if (mShareActionProvider != null) {
+                Intent intent = createShareIntent(path);
+                ((ShareActionProvider) mShareActionProvider).setShareIntent(intent);
+                mPendingSharePath = null;
+            } else {
+                // This happens when ActionBar is not created yet.
+                mPendingSharePath = path;
+            }
         }
     }
 
@@ -533,7 +547,11 @@
     protected boolean onCreateActionBar(Menu menu) {
         MenuInflater inflater = ((Activity) mActivity).getMenuInflater();
         inflater.inflate(R.menu.photo, menu);
-        mShareActionProvider = GalleryActionBar.initializeShareActionProvider(menu);
+
+        if (ApiHelper.HAS_SHARE_ACTION_PROVIDER) {
+            mShareActionProvider = GalleryActionBar.initializeShareActionProvider(
+                    menu, mActivity.getAndroidContext());
+        }
         if (mPendingSharePath != null) updateShareURI(mPendingSharePath);
         mMenu = menu;
         updateMenuOperations();
@@ -634,6 +652,12 @@
                 mMenuExecutor.onMenuClicked(item, confirmMsg,
                         new ImportCompleteListener(mActivity));
                 return true;
+            case R.id.action_share:
+                Activity activity = (Activity) mActivity;
+                Intent intent = createShareIntent(mCurrentPhoto.getPath());
+                activity.startActivity(Intent.createChooser(intent,
+                        activity.getString(R.string.share)));
+                return true;
             default :
                 return false;
         }
diff --git a/src/com/android/gallery3d/ui/ActionModeHandler.java b/src/com/android/gallery3d/ui/ActionModeHandler.java
index 0b5cd54..12a0e89 100644
--- a/src/com/android/gallery3d/ui/ActionModeHandler.java
+++ b/src/com/android/gallery3d/ui/ActionModeHandler.java
@@ -70,7 +70,7 @@
     private ActionModeListener mListener;
     private Future<?> mMenuTask;
     private final Handler mMainHandler;
-    private ShareActionProvider mShareActionProvider;
+    private Object mShareActionProvider; // class ShareActionProvider
 
     public ActionModeHandler(
             GalleryActivity activity, SelectionManager selectionManager) {
@@ -166,21 +166,32 @@
     public boolean onCreateActionMode(ActionMode mode, Menu menu) {
         MenuInflater inflater = mode.getMenuInflater();
         inflater.inflate(R.menu.operation, menu);
-
-        mShareActionProvider = GalleryActionBar.initializeShareActionProvider(menu);
-        OnShareTargetSelectedListener listener = new OnShareTargetSelectedListener() {
-            @Override
-            public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
-                mSelectionManager.leaveSelectionMode();
-                return false;
-            }
-        };
-
-        mShareActionProvider.setOnShareTargetSelectedListener(listener);
+        initializeShareActionProvider(menu);
         mMenu = menu;
         return true;
     }
 
+    @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
+    private void initializeShareActionProvider(Menu menu) {
+        if (ApiHelper.HAS_SHARE_ACTION_PROVIDER) {
+            mShareActionProvider = GalleryActionBar.initializeShareActionProvider(menu,
+                    mActivity.getAndroidContext());
+            OnShareTargetSelectedListener listener = new OnShareTargetSelectedListener() {
+                @Override
+                public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) {
+                    mSelectionManager.leaveSelectionMode();
+                    return false;
+                }
+            };
+            ((ShareActionProvider) mShareActionProvider).setOnShareTargetSelectedListener(listener);
+        }
+    }
+
+    @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
+    private void setShareActionProviderIntent(Intent intent) {
+        ((ShareActionProvider) mShareActionProvider).setShareIntent(intent);
+    }
+
     @Override
     public void onDestroyActionMode(ActionMode mode) {
         mSelectionManager.leaveSelectionMode();
@@ -288,8 +299,9 @@
         updateSelectionMenu();
 
         // Disable share action until share intent is in good shape
-        final MenuItem item = mShareActionProvider != null ?
-                mMenu.findItem(R.id.action_share) : null;
+        final MenuItem item = (!ApiHelper.HAS_SHARE_ACTION_PROVIDER
+                || (mShareActionProvider != null))
+                ? mMenu.findItem(R.id.action_share) : null;
         final boolean supportShare = item != null;
         if (supportShare) item.setEnabled(false);
 
@@ -311,7 +323,11 @@
                             MenuExecutor.updateMenuOperation(mMenu, operation);
                             if (supportShare) {
                                 item.setEnabled(true);
-                                mShareActionProvider.setShareIntent(intent);
+                                if (ApiHelper.HAS_SHARE_ACTION_PROVIDER) {
+                                    setShareActionProviderIntent(intent);
+                                } else {
+                                    mMenuExecutor.setShareIntent(intent);
+                                }
                             }
                         }
                     }
diff --git a/src/com/android/gallery3d/ui/MenuExecutor.java b/src/com/android/gallery3d/ui/MenuExecutor.java
index aaf5d39..2ff0327 100644
--- a/src/com/android/gallery3d/ui/MenuExecutor.java
+++ b/src/com/android/gallery3d/ui/MenuExecutor.java
@@ -32,6 +32,7 @@
 import com.android.gallery3d.R;
 import com.android.gallery3d.app.CropImage;
 import com.android.gallery3d.app.GalleryActivity;
+import com.android.gallery3d.common.ApiHelper;
 import com.android.gallery3d.common.Utils;
 import com.android.gallery3d.data.DataManager;
 import com.android.gallery3d.data.MediaItem;
@@ -60,6 +61,7 @@
     private Future<?> mTask;
     // wait the operation to finish when we want to stop it.
     private boolean mWaitOnStop;
+    private Intent mShareIntent;
 
     private final GalleryActivity mActivity;
     private final SelectionManager mSelectionManager;
@@ -235,6 +237,14 @@
             case R.id.action_import:
                 title = R.string.Import;
                 break;
+            case R.id.action_share: {
+                if (!ApiHelper.HAS_SHARE_ACTION_PROVIDER) {
+                    Activity activity = (Activity) mActivity;
+                    activity.startActivity(Intent.createChooser(
+                            mShareIntent, activity.getString(R.string.share)));
+                }
+                return;
+            }
             default:
                 return;
         }
@@ -309,6 +319,10 @@
         mWaitOnStop = waitOnStop;
     }
 
+    public void setShareIntent(Intent intent) {
+        mShareIntent = intent;
+    }
+
     public static String getMimeType(int type) {
         switch (type) {
             case MediaObject.MEDIA_TYPE_IMAGE :