diff options
4 files changed, 47 insertions, 13 deletions
diff --git a/gallerycommon/src/com/android/gallery3d/common/LightCycleHelper.java b/gallerycommon/src/com/android/gallery3d/common/LightCycleHelper.java index f8df29dd4..c4fb61a52 100644 --- a/gallerycommon/src/com/android/gallery3d/common/LightCycleHelper.java +++ b/gallerycommon/src/com/android/gallery3d/common/LightCycleHelper.java @@ -16,18 +16,21 @@ package com.android.gallery3d.common; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.net.Uri; public class LightCycleHelper { + public static final String EXTRA_OUTPUT_DIR = "output_dir"; + private static final String PANORAMA_FILENAME_PREFIX = "panorama_"; public static final String LIGHTCYCLE_PACKAGE = "com.google.android.apps.lightcycle"; public static final String LIGHTCYCLE_CAPTURE_CLASS = "com.google.android.apps.lightcycle.PanoramaCaptureActivity"; - public static final String LIGHTCYCLE_VIEW_CLASS = + private static final String LIGHTCYCLE_VIEW_CLASS = "com.google.android.apps.lightcycle.PanoramaViewActivity"; - public static final String EXTRA_OUTPUT_DIR = "output_dir"; private static boolean sUpdated; private static boolean sHasViewActivity; @@ -45,35 +48,50 @@ public class LightCycleHelper { sHasCaptureActivity = hasLightCycleActivity(pm, LIGHTCYCLE_CAPTURE_CLASS); } - public synchronized static boolean hasLightCycleView(PackageManager pm) { + public static synchronized boolean hasLightCycleView(PackageManager pm) { if (!sUpdated) { update(pm); } return sHasViewActivity; } - public synchronized static boolean hasLightCycleCapture(PackageManager pm) { + public static synchronized boolean hasLightCycleCapture(PackageManager pm) { if (!sUpdated) { update(pm); } return sHasCaptureActivity; } - public synchronized static void onPackageAdded(Context context, String packageName) { + public static synchronized void onPackageAdded(Context context, String packageName) { if (LIGHTCYCLE_PACKAGE.equals(packageName)) { update(context.getPackageManager()); } } - public synchronized static void onPackageRemoved(Context context, String packageName) { + public static synchronized void onPackageRemoved(Context context, String packageName) { if (LIGHTCYCLE_PACKAGE.equals(packageName)) { update(context.getPackageManager()); } } - public synchronized static void onPackageChanged(Context context, String packageName) { + public static synchronized void onPackageChanged(Context context, String packageName) { if (LIGHTCYCLE_PACKAGE.equals(packageName)) { update(context.getPackageManager()); } } + + public static void viewPanorama(Activity activity, Uri uri, String type) { + try { + Intent intent = new Intent(Intent.ACTION_VIEW) + .setDataAndType(uri, type) + .setClassName(LIGHTCYCLE_PACKAGE, LIGHTCYCLE_VIEW_CLASS); + activity.startActivity(intent); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static boolean isPanorama(String filename) { + return filename.startsWith(PANORAMA_FILENAME_PREFIX); + } } diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java index 71f886129..d101aac7b 100644 --- a/src/com/android/gallery3d/app/PhotoPage.java +++ b/src/com/android/gallery3d/app/PhotoPage.java @@ -37,9 +37,11 @@ import com.actionbarsherlock.view.MenuItem; import com.android.gallery3d.R; import com.android.gallery3d.anim.FloatAnimation; import com.android.gallery3d.common.ApiHelper; +import com.android.gallery3d.common.LightCycleHelper; import com.android.gallery3d.common.Utils; import com.android.gallery3d.data.DataManager; import com.android.gallery3d.data.FilterDeleteSet; +import com.android.gallery3d.data.LocalImage; import com.android.gallery3d.data.MediaDetails; import com.android.gallery3d.data.MediaItem; import com.android.gallery3d.data.MediaObject; @@ -182,15 +184,15 @@ public class PhotoPage extends ActivityState implements private final GLView mRootPane = new GLView() { @Override protected void renderBackground(GLCanvas view) { - if(mFadeOutTexture != null) { - if(mBackgroundFade.calculate(AnimationTime.get())) invalidate(); - if(!mBackgroundFade.isActive()) { + if (mFadeOutTexture != null) { + if (mBackgroundFade.calculate(AnimationTime.get())) invalidate(); + if (!mBackgroundFade.isActive()) { mFadeOutTexture = null; mOpenAnimationRect = null; BitmapScreenNail.enableDrawPlaceholder(); } else { float fadeAlpha = mBackgroundFade.get(); - if(fadeAlpha < 1f) { + if (fadeAlpha < 1f) { view.clearBuffer(getBackgroundColor()); view.setAlpha(fadeAlpha); } @@ -224,7 +226,7 @@ public class PhotoPage extends ActivityState implements mPhotoView = new PhotoView(mActivity); mPhotoView.setListener(this); mRootPane.addComponent(mPhotoView); - mApplication = (GalleryApp)((Activity) mActivity).getApplication(); + mApplication = (GalleryApp) ((Activity) mActivity).getApplication(); mOrientationManager = mActivity.getOrientationManager(); mOrientationManager.addListener(this); mActivity.getGLRoot().setOrientationSource(mOrientationManager); @@ -364,7 +366,7 @@ public class PhotoPage extends ActivityState implements // start the opening animation only if it's not restored. if (restoreState == null) { mFadeOutTexture = mActivity.getTransitionStore().get(AlbumPage.KEY_FADE_TEXTURE); - if(mFadeOutTexture != null) { + if (mFadeOutTexture != null) { mBackgroundFade.start(); BitmapScreenNail.disableDrawPlaceholder(); mOpenAnimationRect = (Rect) data.getParcelable(KEY_OPEN_ANIMATION_RECT); @@ -751,6 +753,8 @@ public class PhotoPage extends ActivityState implements boolean playVideo = (mSecureAlbum == null) && ((item.getSupportedOperations() & MediaItem.SUPPORT_PLAY) != 0); + boolean viewPanorama = + (item.getSupportedOperations() & MediaItem.SUPPORT_VIEW_PANORAMA) != 0; if (playVideo) { // determine if the point is at center (1/6) of the photo view. @@ -763,6 +767,10 @@ public class PhotoPage extends ActivityState implements if (playVideo) { playVideo(mActivity, item.getPlayUri(), item.getName()); + } else if (viewPanorama) { + LocalImage img = (LocalImage) item; + LightCycleHelper.viewPanorama( + mActivity, img.getContentUri(), img.getMimeType()); } else { toggleBars(); } diff --git a/src/com/android/gallery3d/data/LocalImage.java b/src/com/android/gallery3d/data/LocalImage.java index b10b96289..93287bca1 100644 --- a/src/com/android/gallery3d/data/LocalImage.java +++ b/src/com/android/gallery3d/data/LocalImage.java @@ -34,6 +34,7 @@ import android.util.Log; import com.android.gallery3d.app.GalleryApp; import com.android.gallery3d.common.ApiHelper; import com.android.gallery3d.common.BitmapUtils; +import com.android.gallery3d.common.LightCycleHelper; import com.android.gallery3d.util.GalleryUtils; import com.android.gallery3d.util.ThreadPool.Job; import com.android.gallery3d.util.ThreadPool.JobContext; @@ -239,6 +240,12 @@ public class LocalImage extends LocalMediaItem { if (GalleryUtils.isValidLocation(latitude, longitude)) { operation |= SUPPORT_SHOW_ON_MAP; } + + if (LightCycleHelper.isPanorama(caption) && + LightCycleHelper.hasLightCycleView( + mApplication.getAndroidContext().getPackageManager())) { + operation |= SUPPORT_VIEW_PANORAMA; + } return operation; } diff --git a/src/com/android/gallery3d/data/MediaObject.java b/src/com/android/gallery3d/data/MediaObject.java index 45f425fdd..87f567d7a 100644 --- a/src/com/android/gallery3d/data/MediaObject.java +++ b/src/com/android/gallery3d/data/MediaObject.java @@ -37,6 +37,7 @@ public abstract class MediaObject { public static final int SUPPORT_INFO = 1 << 10; public static final int SUPPORT_IMPORT = 1 << 11; public static final int SUPPORT_TRIM = 1 << 12; + public static final int SUPPORT_VIEW_PANORAMA = 1 << 13; public static final int SUPPORT_ALL = 0xffffffff; // These are the bits returned from getMediaType(): |