1c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li/* 2c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * Copyright (C) 2010 The Android Open Source Project 3c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * 4c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * Licensed under the Apache License, Version 2.0 (the "License"); 5c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * you may not use this file except in compliance with the License. 6c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * You may obtain a copy of the License at 7c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * 8c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * http://www.apache.org/licenses/LICENSE-2.0 9c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * 10c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * Unless required by applicable law or agreed to in writing, software 11c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * distributed under the License is distributed on an "AS IS" BASIS, 12c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * See the License for the specific language governing permissions and 14c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li * limitations under the License. 15c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li */ 16c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 17c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Lipackage com.android.camera.ui; 18c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 19c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport com.android.camera.R; 20c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport com.android.camera.Util; 21c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 22c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.app.Activity; 23750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport android.content.ComponentName; 24c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.content.Context; 25750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport android.content.Intent; 26d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wangimport android.content.pm.ActivityInfo; 27750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport android.content.pm.PackageManager; 28750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport android.content.pm.ResolveInfo; 29c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.content.res.Resources; 30c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.graphics.Bitmap; 31c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.graphics.drawable.ColorDrawable; 327097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Liimport android.graphics.drawable.Drawable; 33c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.net.Uri; 34c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.view.LayoutInflater; 35c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.view.MotionEvent; 36c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.view.View; 37750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport android.view.ViewGroup; 38c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.view.ViewGroup.LayoutParams; 39c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.view.WindowManager; 40750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport android.widget.AdapterView; 41d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wangimport android.widget.GridView; 42abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kongimport android.widget.ImageView; 43c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Liimport android.widget.PopupWindow; 44750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport android.widget.SimpleAdapter; 45750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li 46750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport java.util.ArrayList; 47750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport java.util.HashMap; 48750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Liimport java.util.List; 497097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Liimport java.util.Map; 50c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 51c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li// A popup window that contains a big thumbnail and a list of apps to share. 52c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Lipublic class SharePopup extends PopupWindow implements View.OnClickListener, 533ebe49d8f1b4defb7cfd4850a14e795aada2ebd1Chih-yu Huang View.OnTouchListener, AdapterView.OnItemClickListener, Rotatable { 54750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li private static final String TAG = "SharePopup"; 557097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li private static final String ADAPTER_COLUMN_ICON = "icon"; 56c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li private Context mContext; 57c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li private Uri mUri; 58750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li private String mMimeType; 59750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li private ImageView mThumbnail; 60750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li private int mBitmapWidth; 61750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li private int mBitmapHeight; 627097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li private int mOrientation; 63abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong private int mActivityOrientation; 64d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li // A view that contains a list of application icons and the share view. 65d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li private View mRootView; 667097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li // The list of the application icons. 67d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang private GridView mShareList; 68abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong // A rotated view that contains the thumbnail and the play icon. 69750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li private RotateLayout mThumbnailRotateLayout; 70a44cfbaf741b5410465cbfe6a4907eb38e0db001Mark Wagner private RotateLayout mGotoGalleryRotate; 714591c5ecbaade585c3094be353d27b14f0592494Wu-cheng Li private View mPreviewFrame; 72750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li private ArrayList<ComponentName> mComponent = new ArrayList<ComponentName>(); 73abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong private View mImageViewFrame; 74c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 757097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li private class MySimpleAdapter extends SimpleAdapter { 767097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, 777097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li int resource, String[] from, int[] to) { 787097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li super(context, data, resource, from, to); 797097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li } 807097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li 817097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li @Override 827097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li public View getView(int position, View convertView, ViewGroup parent) { 837097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li View v = super.getView(position, convertView, parent); 847097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li RotateLayout r = (RotateLayout) v.findViewById(R.id.share_icon_rotate_layout); 857097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li r.setOrientation(mOrientation); 867097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li return v; 877097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li } 887097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li } 897097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li 907097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li private final SimpleAdapter.ViewBinder mViewBinder = 917097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li new SimpleAdapter.ViewBinder() { 927097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li @Override 937097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li public boolean setViewValue(final View view, final Object data, 947097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li final String text) { 957097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li if (view instanceof ImageView) { 96abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong ((ImageView) view).setImageDrawable((Drawable) data); 977097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li return true; 987097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li } 997097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li return false; 1007097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li } 1017097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li }; 102c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 103757b67951f40850b1ac3102dc0b6fe8977615a4aWu-cheng Li public SharePopup(Activity activity, Uri uri, Bitmap bitmap, int orientation, 1044591c5ecbaade585c3094be353d27b14f0592494Wu-cheng Li View previewFrame) { 105c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li super(activity); 106c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 107abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong mActivityOrientation = activity.getRequestedOrientation(); 108abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong 109750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li // Initialize variables 110c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li mContext = activity; 111c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li mUri = uri; 112757b67951f40850b1ac3102dc0b6fe8977615a4aWu-cheng Li mMimeType = mContext.getContentResolver().getType(mUri); 1134591c5ecbaade585c3094be353d27b14f0592494Wu-cheng Li mPreviewFrame = previewFrame; 1145201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner LayoutInflater inflater = activity.getLayoutInflater(); 115750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li ViewGroup sharePopup = (ViewGroup) inflater.inflate(R.layout.share_popup, null, false); 116c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li // This is required because popup window is full screen. 117750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li sharePopup.setOnTouchListener(this); 118abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong mThumbnailRotateLayout = 119abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong (RotateLayout) sharePopup.findViewById(R.id.thumbnail_rotate_layout); 120d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang mShareList = (GridView) sharePopup.findViewById(R.id.share_list); 121750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li mThumbnail = (ImageView) sharePopup.findViewById(R.id.thumbnail); 122c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li mThumbnail.setImageBitmap(bitmap); 123abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong mImageViewFrame = 124abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong (View) sharePopup.findViewById(R.id.thumbnail_image_frame); 125abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong mImageViewFrame.setOnClickListener(this); 1265201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner 127abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong 128abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong mGotoGalleryRotate = 129abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong (RotateLayout) sharePopup.findViewById(R.id.goto_gallery_button_rotate); 130a44cfbaf741b5410465cbfe6a4907eb38e0db001Mark Wagner sharePopup.findViewById(R.id.goto_gallery_button).setOnClickListener(this); 131a44cfbaf741b5410465cbfe6a4907eb38e0db001Mark Wagner 1325201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner mBitmapWidth = bitmap.getWidth(); 1335201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner mBitmapHeight = bitmap.getHeight(); 1345201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner 135ae191e239d48bf436715ace25d6624fbadf58ee0Wu-cheng Li // Show play button if this is a video thumbnail. 136ae191e239d48bf436715ace25d6624fbadf58ee0Wu-cheng Li if (mMimeType.startsWith("video/")) { 137ae191e239d48bf436715ace25d6624fbadf58ee0Wu-cheng Li sharePopup.findViewById(R.id.play).setVisibility(View.VISIBLE); 138ae191e239d48bf436715ace25d6624fbadf58ee0Wu-cheng Li } 139c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li mBitmapWidth = bitmap.getWidth(); 140c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li mBitmapHeight = bitmap.getHeight(); 1415201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner 142c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li Resources res = mContext.getResources(); 143c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 1444591c5ecbaade585c3094be353d27b14f0592494Wu-cheng Li // Initialize popup window size. 1455201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner mRootView = sharePopup.findViewById(R.id.root); 146d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li LayoutParams params = mRootView.getLayoutParams(); 1474591c5ecbaade585c3094be353d27b14f0592494Wu-cheng Li params.width = previewFrame.getWidth(); 1484591c5ecbaade585c3094be353d27b14f0592494Wu-cheng Li params.height = previewFrame.getHeight(); 149d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li mRootView.setLayoutParams(params); 1504591c5ecbaade585c3094be353d27b14f0592494Wu-cheng Li 1514591c5ecbaade585c3094be353d27b14f0592494Wu-cheng Li // Initialize popup window. 152c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li setWidth(WindowManager.LayoutParams.MATCH_PARENT); 153c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li setHeight(WindowManager.LayoutParams.MATCH_PARENT); 154c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li setBackgroundDrawable(new ColorDrawable()); 155750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li setContentView(sharePopup); 156c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li setOrientation(orientation); 157750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li setFocusable(true); 158977d06c6278cb7b131ed3c0960853d9168aacbddWu-cheng Li setAnimationStyle(R.style.AnimationPopup); 159750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li createShareMenu(); 160750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li } 161750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li 162c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li public void setOrientation(int orientation) { 163efa3f22e42b31bfcf916610e01efe0bdc4940080Angus Kong if (isShowing()) return; 1647097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li mOrientation = orientation; 165d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li 166d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li int hPaddingRootView = mRootView.getPaddingLeft() + mRootView.getPaddingRight(); 167d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li int vPaddingRootView = mRootView.getPaddingTop() + mRootView.getPaddingBottom(); 168d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li 169d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li // Calculate the width and the height of the thumbnail. Reserve the 170d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li // space for paddings. 171abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong float maxWidth = mPreviewFrame.getWidth() - hPaddingRootView; 172abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong float maxHeight = mPreviewFrame.getHeight() - vPaddingRootView; 173d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li // Swap the width and height if it is portrait mode. 174c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li if (orientation == 90 || orientation == 270) { 175d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li float temp = maxWidth; 176d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li maxWidth = maxHeight; 177d62087915cf9e4a686db03291b7ef9d99758ebbaWu-cheng Li maxHeight = temp; 178c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li } 179750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li float actualAspect = maxWidth / maxHeight; 180750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li float desiredAspect = (float) mBitmapWidth / mBitmapHeight; 181f9f24d4c578a01cb09a7e5c4c66b75595d3669eeMark Wagner 182f9f24d4c578a01cb09a7e5c4c66b75595d3669eeMark Wagner if (mMimeType.startsWith("video/")) { 183abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong desiredAspect = 4F / 3F; 184f9f24d4c578a01cb09a7e5c4c66b75595d3669eeMark Wagner mThumbnail.setScaleType(ImageView.ScaleType.CENTER_CROP); 185f9f24d4c578a01cb09a7e5c4c66b75595d3669eeMark Wagner } else { 186abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong mThumbnail.setScaleType(ImageView.ScaleType.FIT_CENTER); 187f9f24d4c578a01cb09a7e5c4c66b75595d3669eeMark Wagner } 188f9f24d4c578a01cb09a7e5c4c66b75595d3669eeMark Wagner 189c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li LayoutParams params = mThumbnail.getLayoutParams(); 190750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li if (actualAspect > desiredAspect) { 191750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li params.width = Math.round(maxHeight * desiredAspect); 192750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li params.height = Math.round(maxHeight); 193c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li } else { 194750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li params.width = Math.round(maxWidth); 195750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li params.height = Math.round(maxWidth / desiredAspect); 196c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li } 197c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li mThumbnail.setLayoutParams(params); 198750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li 199750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li if (mThumbnailRotateLayout != null) mThumbnailRotateLayout.setOrientation(orientation); 2007097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li 2017097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li int count = mShareList.getChildCount(); 2027097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li for (int i = 0; i < count; i++) { 2037097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li ViewGroup f = (ViewGroup) mShareList.getChildAt(i); 2047097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li RotateLayout r = (RotateLayout) f.findViewById(R.id.share_icon_rotate_layout); 2057097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li r.setOrientation(orientation); 2067097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li } 2075201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner 208a44cfbaf741b5410465cbfe6a4907eb38e0db001Mark Wagner mGotoGalleryRotate.setOrientation(orientation); 209c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li } 210c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 211c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li @Override 2125f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang public void showAtLocation(View parent, int gravity, int x, int y) { 2135f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang super.showAtLocation(parent, gravity, x, y); 2145f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang // Inform other popup to dismiss if exit 2155f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang PopupManager.getInstance(mContext).notifyShowPopup(null); 2165f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang } 2175f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang 2185f6e354a6e2a77aa935fcefeb33a9baa67d48aafChung-yih Wang @Override 219c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li public void onClick(View v) { 220c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li switch (v.getId()) { 221a44cfbaf741b5410465cbfe6a4907eb38e0db001Mark Wagner case R.id.goto_gallery_button: 222abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong case R.id.thumbnail_image_frame: 223c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li Util.viewUri(mUri, mContext); 224c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li break; 225c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li } 226c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li } 227c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li 228c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li @Override 229c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li public boolean onTouch(View v, MotionEvent event) { 230c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li if (event.getAction() == MotionEvent.ACTION_DOWN) { 231c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li dismiss(); 232c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li return true; 233c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li } 234c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li return false; 235c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li } 236750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li 237750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li public void createShareMenu() { 238750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li PackageManager packageManager = mContext.getPackageManager(); 2395201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner List<ResolveInfo> infos = packageManager.queryIntentActivities( 240750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li new Intent(Intent.ACTION_SEND).setType(mMimeType), 0); 241750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li 2425201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner ArrayList<HashMap<String, Object>> items = new ArrayList<HashMap<String, Object>>(); 243abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong for (ResolveInfo info : infos) { 244750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li ComponentName component = new ComponentName( 245750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li info.activityInfo.packageName, info.activityInfo.name); 246750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li HashMap<String, Object> map = new HashMap<String, Object>(); 2477097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li map.put(ADAPTER_COLUMN_ICON, info.loadIcon(packageManager)); 2485201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner items.add(map); 249750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li mComponent.add(component); 250750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li } 251d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang 252d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang // On phone UI, we have to know how many icons in the grid view before 253d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang // the view is measured. 254abd82edfae4ab1a39fe7000dd22b7cab26e9fdafAngus Kong if (mActivityOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) { 255d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang mShareList.setNumColumns(items.size()); 256ceea1b9d40b80c5e24a12ae0374afc053dad09fbWu-cheng Li int width = mContext.getResources().getDimensionPixelSize(R.dimen.share_item_width); 257ceea1b9d40b80c5e24a12ae0374afc053dad09fbWu-cheng Li mShareList.setColumnWidth(width); 258d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang } 259d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang 2605201b1e0051877d8e8ed0ef5b461ffcac534eb5cMark Wagner SimpleAdapter listItemAdapter = new MySimpleAdapter(mContext, items, 2617097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li R.layout.share_icon, 2627097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li new String[] {ADAPTER_COLUMN_ICON}, 2637097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li new int[] {R.id.icon}); 264d33109730e0ab81230f84e2bd35599e8e24fc4baChung-yih Wang 2657097299bb13ba2e8defca40e82bc7b28982a41cfWu-cheng Li listItemAdapter.setViewBinder(mViewBinder); 266750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li mShareList.setAdapter(listItemAdapter); 267750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li mShareList.setOnItemClickListener(this); 268750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li } 269750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li 270750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li public Uri getUri() { 271750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li return mUri; 272750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li } 273750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li 274750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li @Override 275750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li public void onItemClick(AdapterView<?> parent, View view, int index, long id) { 276750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li Intent intent = new Intent(Intent.ACTION_SEND); 277750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li intent.setType(mMimeType); 278750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li intent.putExtra(Intent.EXTRA_STREAM, mUri); 279750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li intent.setComponent(mComponent.get(index)); 280750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li mContext.startActivity(intent); 281750173a4d20f1e8d6607edb3ada6be5166d0cd82Wu-cheng Li } 282c5e37cbb96b8284203560c51dd5f41c705a21f58Wu-cheng Li} 283