summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gallerycommon/src/com/android/gallery3d/common/LightCycleHelper.java32
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java20
-rw-r--r--src/com/android/gallery3d/data/LocalImage.java7
-rw-r--r--src/com/android/gallery3d/data/MediaObject.java1
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():