106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware/*
206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware * Copyright (C) 2009 The Android Open Source Project
306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware *
406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware * Licensed under the Apache License, Version 2.0 (the "License");
506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware * you may not use this file except in compliance with the License.
606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware * You may obtain a copy of the License at
706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware *
806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware *      http://www.apache.org/licenses/LICENSE-2.0
906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware *
1006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware * Unless required by applicable law or agreed to in writing, software
1106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware * distributed under the License is distributed on an "AS IS" BASIS,
1206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware * See the License for the specific language governing permissions and
1406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware * limitations under the License.
1506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware */
1606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
1706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwarepackage com.android.gallery3d.app;
1806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
1906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.app.Dialog;
2006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.content.ContentResolver;
2106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.content.DialogInterface;
2206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.content.DialogInterface.OnCancelListener;
2306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.content.Intent;
2406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.net.Uri;
2506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.os.Bundle;
2606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.view.InputDevice;
2706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.view.MotionEvent;
2806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.view.View;
2906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.view.Window;
3006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.view.WindowManager;
3106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport android.widget.Toast;
3206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
3306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport com.android.gallery3d.R;
3406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport com.android.gallery3d.common.Utils;
3506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport com.android.gallery3d.data.DataManager;
3606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport com.android.gallery3d.data.MediaItem;
3706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport com.android.gallery3d.data.MediaSet;
3806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport com.android.gallery3d.data.Path;
3906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport com.android.gallery3d.picasasource.PicasaSource;
4006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwareimport com.android.gallery3d.util.GalleryUtils;
4106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
4206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiwarepublic final class GalleryActivity extends AbstractGalleryActivity implements OnCancelListener {
4306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public static final String EXTRA_SLIDESHOW = "slideshow";
4406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public static final String EXTRA_DREAM = "dream";
4506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public static final String EXTRA_CROP = "crop";
4606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
4706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public static final String ACTION_REVIEW = "com.android.camera.action.REVIEW";
4806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public static final String KEY_GET_CONTENT = "get-content";
4906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public static final String KEY_GET_ALBUM = "get-album";
5006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public static final String KEY_TYPE_BITS = "type-bits";
5106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public static final String KEY_MEDIA_TYPES = "mediaTypes";
5206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public static final String KEY_DISMISS_KEYGUARD = "dismiss-keyguard";
5306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
5406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    private static final String TAG = "GalleryActivity";
5506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    private Dialog mVersionCheckDialog;
5606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
5706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    @Override
5806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    protected void onCreate(Bundle savedInstanceState) {
5906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        super.onCreate(savedInstanceState);
6006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        requestWindowFeature(Window.FEATURE_ACTION_BAR);
6106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
6206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
6306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (getIntent().getBooleanExtra(KEY_DISMISS_KEYGUARD, false)) {
6406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            getWindow().addFlags(
6506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
6606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
6706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
6806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        setContentView(R.layout.main);
6906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
7006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (savedInstanceState != null) {
7106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            getStateManager().restoreFromState(savedInstanceState);
7206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        } else {
7306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            initializeByIntent();
7406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
7506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
7606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
7706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    private void initializeByIntent() {
7806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        Intent intent = getIntent();
7906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        String action = intent.getAction();
8006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
8106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (Intent.ACTION_GET_CONTENT.equalsIgnoreCase(action)) {
8206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            startGetContent(intent);
8306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        } else if (Intent.ACTION_PICK.equalsIgnoreCase(action)) {
8406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            // We do NOT really support the PICK intent. Handle it as
8506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            // the GET_CONTENT. However, we need to translate the type
8606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            // in the intent here.
8706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            Log.w(TAG, "action PICK is not supported");
8806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            String type = Utils.ensureNotNull(intent.getType());
8906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            if (type.startsWith("vnd.android.cursor.dir/")) {
9006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                if (type.endsWith("/image")) intent.setType("image/*");
9106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                if (type.endsWith("/video")) intent.setType("video/*");
9206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            }
9306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            startGetContent(intent);
9406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        } else if (Intent.ACTION_VIEW.equalsIgnoreCase(action)
9506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                || ACTION_REVIEW.equalsIgnoreCase(action)){
9606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            startViewAction(intent);
9706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        } else {
9806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            startDefaultPage();
9906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
10006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
10106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
10206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public void startDefaultPage() {
10306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        PicasaSource.showSignInReminder(this);
10406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        Bundle data = new Bundle();
10506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        data.putString(AlbumSetPage.KEY_MEDIA_PATH,
10606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                getDataManager().getTopSetPath(DataManager.INCLUDE_ALL));
10706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        getStateManager().startState(AlbumSetPage.class, data);
10806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        mVersionCheckDialog = PicasaSource.getVersionCheckDialog(this);
10906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (mVersionCheckDialog != null) {
11006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            mVersionCheckDialog.setOnCancelListener(this);
11106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
11206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
11306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
11406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    private void startGetContent(Intent intent) {
11506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        Bundle data = intent.getExtras() != null
11606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                ? new Bundle(intent.getExtras())
11706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                : new Bundle();
11806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        data.putBoolean(KEY_GET_CONTENT, true);
11906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        int typeBits = GalleryUtils.determineTypeBits(this, intent);
12006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        data.putInt(KEY_TYPE_BITS, typeBits);
12106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        data.putString(AlbumSetPage.KEY_MEDIA_PATH,
12206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                getDataManager().getTopSetPath(typeBits));
12306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        getStateManager().startState(AlbumSetPage.class, data);
12406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
12506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
12606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    private String getContentType(Intent intent) {
12706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        String type = intent.getType();
12806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (type != null) {
12906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            return GalleryUtils.MIME_TYPE_PANORAMA360.equals(type)
13006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                ? MediaItem.MIME_TYPE_JPEG : type;
13106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
13206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
13306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        Uri uri = intent.getData();
13406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        try {
13506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            return getContentResolver().getType(uri);
13606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        } catch (Throwable t) {
13706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            Log.w(TAG, "get type fail", t);
13806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            return null;
13906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
14006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
14106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
14206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    private void startViewAction(Intent intent) {
14306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        Boolean slideshow = intent.getBooleanExtra(EXTRA_SLIDESHOW, false);
14406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (slideshow) {
14506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            getActionBar().hide();
14606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            DataManager manager = getDataManager();
14706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            Path path = manager.findPathByUri(intent.getData(), intent.getType());
14806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            if (path == null || manager.getMediaObject(path)
14906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    instanceof MediaItem) {
15006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                path = Path.fromString(
15106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        manager.getTopSetPath(DataManager.INCLUDE_IMAGE));
15206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            }
15306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            Bundle data = new Bundle();
15406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            data.putString(SlideshowPage.KEY_SET_PATH, path.toString());
15506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            data.putBoolean(SlideshowPage.KEY_RANDOM_ORDER, true);
15606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            data.putBoolean(SlideshowPage.KEY_REPEAT, true);
15706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            if (intent.getBooleanExtra(EXTRA_DREAM, false)) {
15806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                data.putBoolean(SlideshowPage.KEY_DREAM, true);
15906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            }
16006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            getStateManager().startState(SlideshowPage.class, data);
16106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        } else {
16206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            Bundle data = new Bundle();
16306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            DataManager dm = getDataManager();
16406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            Uri uri = intent.getData();
16506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            String contentType = getContentType(intent);
16606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            if (contentType == null) {
16706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                Toast.makeText(this,
16806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        R.string.no_such_item, Toast.LENGTH_LONG).show();
16906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                finish();
17006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                return;
17106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            }
17206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            if (uri == null) {
17306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                int typeBits = GalleryUtils.determineTypeBits(this, intent);
17406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                data.putInt(KEY_TYPE_BITS, typeBits);
17506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                data.putString(AlbumSetPage.KEY_MEDIA_PATH,
17606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        getDataManager().getTopSetPath(typeBits));
17706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                getStateManager().startState(AlbumSetPage.class, data);
17806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            } else if (contentType.startsWith(
17906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    ContentResolver.CURSOR_DIR_BASE_TYPE)) {
18006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                int mediaType = intent.getIntExtra(KEY_MEDIA_TYPES, 0);
18106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                if (mediaType != 0) {
18206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    uri = uri.buildUpon().appendQueryParameter(
18306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                            KEY_MEDIA_TYPES, String.valueOf(mediaType))
18406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                            .build();
18506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                }
18606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                Path setPath = dm.findPathByUri(uri, null);
18706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                MediaSet mediaSet = null;
18806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                if (setPath != null) {
18906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    mediaSet = (MediaSet) dm.getMediaObject(setPath);
19006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                }
19106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                if (mediaSet != null) {
19206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    if (mediaSet.isLeafAlbum()) {
19306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        data.putString(AlbumPage.KEY_MEDIA_PATH, setPath.toString());
19406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        data.putString(AlbumPage.KEY_PARENT_MEDIA_PATH,
19506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                                dm.getTopSetPath(DataManager.INCLUDE_ALL));
19606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        getStateManager().startState(AlbumPage.class, data);
19706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    } else {
19806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        data.putString(AlbumSetPage.KEY_MEDIA_PATH, setPath.toString());
19906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        getStateManager().startState(AlbumSetPage.class, data);
20006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    }
20106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                } else {
20206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    startDefaultPage();
20306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                }
20406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            } else {
20506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                Path itemPath = dm.findPathByUri(uri, contentType);
20606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                Path albumPath = dm.getDefaultSetOf(itemPath);
20706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
20806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                data.putString(PhotoPage.KEY_MEDIA_ITEM_PATH, itemPath.toString());
20906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                data.putBoolean(PhotoPage.KEY_READONLY, true);
21006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
21106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                // TODO: Make the parameter "SingleItemOnly" public so other
21206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                //       activities can reference it.
21306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                boolean singleItemOnly = (albumPath == null)
21406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        || intent.getBooleanExtra("SingleItemOnly", false);
21506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                if (!singleItemOnly) {
21606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    data.putString(PhotoPage.KEY_MEDIA_SET_PATH, albumPath.toString());
21706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    // when FLAG_ACTIVITY_NEW_TASK is set, (e.g. when intent is fired
21806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    // from notification), back button should behave the same as up button
21906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    // rather than taking users back to the home screen
22006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    if (intent.getBooleanExtra(PhotoPage.KEY_TREAT_BACK_AS_UP, false)
22106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                            || ((intent.getFlags() & Intent.FLAG_ACTIVITY_NEW_TASK) != 0)) {
22206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                        data.putBoolean(PhotoPage.KEY_TREAT_BACK_AS_UP, true);
22306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    }
22406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                }
22506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
22606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                getStateManager().startState(SinglePhotoPage.class, data);
22706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            }
22806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
22906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
23006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
23106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    @Override
23206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    protected void onResume() {
23306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        Utils.assertTrue(getStateManager().getStateCount() > 0);
23406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        super.onResume();
23506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (mVersionCheckDialog != null) {
23606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            mVersionCheckDialog.show();
23706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
23806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
23906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
24006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    @Override
24106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    protected void onPause() {
24206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        super.onPause();
24306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (mVersionCheckDialog != null) {
24406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            mVersionCheckDialog.dismiss();
24506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
24606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
24706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
24806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    @Override
24906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public void onCancel(DialogInterface dialog) {
25006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (dialog == mVersionCheckDialog) {
25106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            mVersionCheckDialog = null;
25206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
25306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
25406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware
25506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    @Override
25606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    public boolean onGenericMotionEvent(MotionEvent event) {
25706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        final boolean isTouchPad = (event.getSource()
25806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                & InputDevice.SOURCE_CLASS_POSITION) != 0;
25906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        if (isTouchPad) {
26006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            float maxX = event.getDevice().getMotionRange(MotionEvent.AXIS_X).getMax();
26106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            float maxY = event.getDevice().getMotionRange(MotionEvent.AXIS_Y).getMax();
26206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            View decor = getWindow().getDecorView();
26306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            float scaleX = decor.getWidth() / maxX;
26406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            float scaleY = decor.getHeight() / maxY;
26506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            float x = event.getX() * scaleX;
26606c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            //x = decor.getWidth() - x; // invert x
26706c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            float y = event.getY() * scaleY;
26806c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            //y = decor.getHeight() - y; // invert y
26906c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            MotionEvent touchEvent = MotionEvent.obtain(event.getDownTime(),
27006c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware                    event.getEventTime(), event.getAction(), x, y, event.getMetaState());
27106c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware            return dispatchTouchEvent(touchEvent);
27206c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        }
27306c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware        return super.onGenericMotionEvent(event);
27406c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware    }
27506c027675948259368a902fd6f8c2ecac5db5167Mangesh Ghiware}
276