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