diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/gallery3d/app/CropImage.java | 27 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/MovieActivity.java | 18 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/MoviePlayer.java | 69 | ||||
-rw-r--r-- | src/com/android/gallery3d/data/LocalImage.java | 20 | ||||
-rw-r--r-- | src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java | 6 | ||||
-rw-r--r-- | src/com/android/gallery3d/ui/GLRootView.java | 16 | ||||
-rw-r--r-- | src/com/android/gallery3d/ui/PositionController.java | 16 | ||||
-rw-r--r-- | src/com/android/gallery3d/ui/TileImageView.java | 2 |
8 files changed, 116 insertions, 58 deletions
diff --git a/src/com/android/gallery3d/app/CropImage.java b/src/com/android/gallery3d/app/CropImage.java index 4f450d85e..294e285ea 100644 --- a/src/com/android/gallery3d/app/CropImage.java +++ b/src/com/android/gallery3d/app/CropImage.java @@ -16,6 +16,7 @@ package com.android.gallery3d.app; +import android.annotation.TargetApi; import android.app.ActionBar; import android.app.ProgressDialog; import android.app.WallpaperManager; @@ -32,6 +33,7 @@ import android.graphics.Rect; import android.graphics.RectF; import android.media.ExifInterface; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; @@ -45,6 +47,7 @@ import android.view.Window; import android.widget.Toast; import com.android.gallery3d.R; +import com.android.gallery3d.common.ApiHelper; import com.android.gallery3d.common.BitmapUtils; import com.android.gallery3d.common.Utils; import com.android.gallery3d.data.DataManager; @@ -96,10 +99,6 @@ public class CropImage extends AbstractGalleryActivity { private static final int DEFAULT_COMPRESS_QUALITY = 90; private static final String TIME_STAMP_NAME = "'IMG'_yyyyMMdd_HHmmss"; - // Change these to Images.Media.WIDTH/HEIGHT after they are unhidden. - private static final String WIDTH = "width"; - private static final String HEIGHT = "height"; - public static final String KEY_RETURN_DATA = "return-data"; public static final String KEY_CROPPED_RECT = "cropped-rect"; public static final String KEY_ASPECT_X = "aspectX"; @@ -371,6 +370,15 @@ public class CropImage extends AbstractGalleryActivity { } } + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private static void setImageSize(ContentValues values, int width, int height) { + // The two fields are available since ICS but got published in JB + if (ApiHelper.HAS_MEDIA_COLUMNS_WIDTH_AND_HEIGHT) { + values.put(Images.Media.WIDTH, width); + values.put(Images.Media.HEIGHT, height); + } + } + private Uri savePicasaImage(JobContext jc, Bitmap cropped) { if (!DOWNLOAD_BUCKET.isDirectory() && !DOWNLOAD_BUCKET.mkdirs()) { throw new RuntimeException("cannot create download folder"); @@ -395,8 +403,7 @@ public class CropImage extends AbstractGalleryActivity { values.put(Images.Media.ORIENTATION, 0); values.put(Images.Media.DATA, output.getAbsolutePath()); values.put(Images.Media.SIZE, output.length()); - values.put(WIDTH, cropped.getWidth()); - values.put(HEIGHT, cropped.getHeight()); + setImageSize(values, cropped.getWidth(), cropped.getHeight()); double latitude = PicasaSource.getLatitude(mMediaItem); double longitude = PicasaSource.getLongitude(mMediaItem); @@ -434,8 +441,8 @@ public class CropImage extends AbstractGalleryActivity { values.put(Images.Media.ORIENTATION, 0); values.put(Images.Media.DATA, output.getAbsolutePath()); values.put(Images.Media.SIZE, output.length()); - values.put(WIDTH, cropped.getWidth()); - values.put(HEIGHT, cropped.getHeight()); + + setImageSize(values, cropped.getWidth(), cropped.getHeight()); if (GalleryUtils.isValidLocation(localImage.latitude, localImage.longitude)) { values.put(Images.Media.LATITUDE, localImage.latitude); @@ -467,8 +474,8 @@ public class CropImage extends AbstractGalleryActivity { values.put(Images.Media.ORIENTATION, 0); values.put(Images.Media.DATA, output.getAbsolutePath()); values.put(Images.Media.SIZE, output.length()); - values.put(WIDTH, cropped.getWidth()); - values.put(HEIGHT, cropped.getHeight()); + + setImageSize(values, cropped.getWidth(), cropped.getHeight()); return getContentResolver().insert( Images.Media.EXTERNAL_CONTENT_URI, values); diff --git a/src/com/android/gallery3d/app/MovieActivity.java b/src/com/android/gallery3d/app/MovieActivity.java index 78fe1ee78..5f4db1d13 100644 --- a/src/com/android/gallery3d/app/MovieActivity.java +++ b/src/com/android/gallery3d/app/MovieActivity.java @@ -16,6 +16,7 @@ package com.android.gallery3d.app; +import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; import android.content.AsyncQueryHandler; @@ -27,6 +28,7 @@ import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.media.AudioManager; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.provider.MediaStore; import android.provider.OpenableColumns; @@ -39,6 +41,7 @@ import android.view.WindowManager; import android.widget.ShareActionProvider; import com.android.gallery3d.R; +import com.android.gallery3d.common.ApiHelper; import com.android.gallery3d.common.Utils; /** @@ -59,6 +62,15 @@ public class MovieActivity extends Activity { private Uri mUri; private boolean mTreatUpAsBack; + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private void setSystemUiVisibility(View rootView) { + if (ApiHelper.HAS_VIEW_SYSTEM_UI_FLAG_LAYOUT_STABLE) { + rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + } + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -68,9 +80,9 @@ public class MovieActivity extends Activity { setContentView(R.layout.movie_view); View rootView = findViewById(R.id.movie_view_root); - rootView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION); + + setSystemUiVisibility(rootView); + Intent intent = getIntent(); initializeActionBar(intent); mFinishOnCompletion = intent.getBooleanExtra( diff --git a/src/com/android/gallery3d/app/MoviePlayer.java b/src/com/android/gallery3d/app/MoviePlayer.java index 11b40bdf8..c0f0ce739 100644 --- a/src/com/android/gallery3d/app/MoviePlayer.java +++ b/src/com/android/gallery3d/app/MoviePlayer.java @@ -16,6 +16,7 @@ package com.android.gallery3d.app; +import android.annotation.TargetApi; import android.app.AlertDialog; import android.content.BroadcastReceiver; import android.content.Context; @@ -28,6 +29,7 @@ import android.graphics.Color; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.view.KeyEvent; @@ -37,6 +39,7 @@ import android.view.ViewGroup; import android.widget.VideoView; import com.android.gallery3d.R; +import com.android.gallery3d.common.ApiHelper; import com.android.gallery3d.common.BlobCache; import com.android.gallery3d.util.CacheManager; import com.android.gallery3d.util.GalleryUtils; @@ -98,9 +101,10 @@ public class MoviePlayer implements }; private final Runnable mRemoveBackground = new Runnable() { + @SuppressWarnings("deprecation") @Override public void run() { - mRootView.setBackground(null); + mRootView.setBackgroundDrawable(null); } }; @@ -148,6 +152,37 @@ public class MoviePlayer implements } }, BLACK_TIMEOUT); + setOnSystemUiVisibilityChangeListener(); + // Hide system UI by default + showSystemUi(false); + + mAudioBecomingNoisyReceiver = new AudioBecomingNoisyReceiver(); + mAudioBecomingNoisyReceiver.register(); + + Intent i = new Intent(SERVICECMD); + i.putExtra(CMDNAME, CMDPAUSE); + movieActivity.sendBroadcast(i); + + if (savedInstance != null) { // this is a resumed activity + mVideoPosition = savedInstance.getInt(KEY_VIDEO_POSITION, 0); + mResumeableTime = savedInstance.getLong(KEY_RESUMEABLE_TIME, Long.MAX_VALUE); + mVideoView.start(); + mVideoView.suspend(); + mHasPaused = true; + } else { + final Integer bookmark = mBookmarker.getBookmark(mUri); + if (bookmark != null) { + showResumeDialog(movieActivity, bookmark); + } else { + startVideo(); + } + } + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private void setOnSystemUiVisibilityChangeListener() { + if (!ApiHelper.HAS_VIEW_SYSTEM_UI_FLAG_HIDE_NAVIGATION) return; + // When the user touches the screen or uses some hard key, the framework // will change system ui visibility from invisible to visible. We show // the media control and enable system UI (e.g. ActionBar) to be visible at this point @@ -176,37 +211,15 @@ public class MoviePlayer implements } } }); - - // Hide system UI by default - showSystemUi(false); - - mAudioBecomingNoisyReceiver = new AudioBecomingNoisyReceiver(); - mAudioBecomingNoisyReceiver.register(); - - Intent i = new Intent(SERVICECMD); - i.putExtra(CMDNAME, CMDPAUSE); - movieActivity.sendBroadcast(i); - - if (savedInstance != null) { // this is a resumed activity - mVideoPosition = savedInstance.getInt(KEY_VIDEO_POSITION, 0); - mResumeableTime = savedInstance.getLong(KEY_RESUMEABLE_TIME, Long.MAX_VALUE); - mVideoView.start(); - mVideoView.suspend(); - mHasPaused = true; - } else { - final Integer bookmark = mBookmarker.getBookmark(mUri); - if (bookmark != null) { - showResumeDialog(movieActivity, bookmark); - } else { - startVideo(); - } - } } + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) private void showSystemUi(boolean visible) { + if (!ApiHelper.HAS_VIEW_SYSTEM_UI_FLAG_LAYOUT_STABLE) return; + int flag = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION - | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; if (!visible) { flag |= View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; @@ -496,7 +509,7 @@ class Bookmarker { DataInputStream dis = new DataInputStream( new ByteArrayInputStream(data)); - String uriString = dis.readUTF(dis); + String uriString = DataInputStream.readUTF(dis); int bookmark = dis.readInt(); int duration = dis.readInt(); diff --git a/src/com/android/gallery3d/data/LocalImage.java b/src/com/android/gallery3d/data/LocalImage.java index c3095a069..c432ab44d 100644 --- a/src/com/android/gallery3d/data/LocalImage.java +++ b/src/com/android/gallery3d/data/LocalImage.java @@ -16,6 +16,7 @@ package com.android.gallery3d.data; +import android.annotation.TargetApi; import android.content.ContentResolver; import android.content.ContentValues; import android.database.Cursor; @@ -24,11 +25,14 @@ import android.graphics.BitmapFactory; import android.graphics.BitmapRegionDecoder; import android.media.ExifInterface; import android.net.Uri; +import android.os.Build; import android.provider.MediaStore.Images; import android.provider.MediaStore.Images.ImageColumns; +import android.provider.MediaStore.MediaColumns; 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.util.GalleryUtils; import com.android.gallery3d.util.ThreadPool.Job; @@ -74,10 +78,22 @@ public class LocalImage extends LocalMediaItem { ImageColumns.ORIENTATION, // 9 ImageColumns.BUCKET_ID, // 10 ImageColumns.SIZE, // 11 - ImageColumns.WIDTH, // 12 - ImageColumns.HEIGHT // 13 + "0", // 12 + "0" // 13 }; + static { + updateWidthAndHeightProjection(); + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + private static void updateWidthAndHeightProjection() { + if (ApiHelper.HAS_MEDIA_COLUMNS_WIDTH_AND_HEIGHT) { + PROJECTION[INDEX_WIDTH] = MediaColumns.WIDTH; + PROJECTION[INDEX_HEIGHT] = MediaColumns.HEIGHT; + } + } + private final GalleryApp mApplication; public int rotation; diff --git a/src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java b/src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java index 2b36f6bfd..98139026e 100644 --- a/src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java +++ b/src/com/android/gallery3d/gadget/PhotoAppWidgetProvider.java @@ -70,6 +70,7 @@ public class PhotoAppWidgetProvider extends AppWidgetProvider { super.onUpdate(context, appWidgetManager, appWidgetIds); } + @SuppressWarnings("deprecation") private static RemoteViews buildStackWidget(Context context, int widgetId, Entry entry) { RemoteViews views = new RemoteViews( context.getPackageName(), R.layout.appwidget_main); @@ -80,7 +81,10 @@ public class PhotoAppWidgetProvider extends AppWidgetProvider { intent.putExtra(WidgetService.EXTRA_ALBUM_PATH, entry.albumPath); intent.setData(Uri.parse("widget://gallery/" + widgetId)); - views.setRemoteAdapter(R.id.appwidget_stack_view, intent); + // We use the deprecated API for backward compatibility + // The new API is available in ICE_CREAM_SANDWICH (15) + views.setRemoteAdapter(widgetId, R.id.appwidget_stack_view, intent); + views.setEmptyView(R.id.appwidget_stack_view, R.id.appwidget_empty_view); Intent clickIntent = new Intent(context, WidgetClickHandler.class); diff --git a/src/com/android/gallery3d/ui/GLRootView.java b/src/com/android/gallery3d/ui/GLRootView.java index 99ed8cb42..2068520aa 100644 --- a/src/com/android/gallery3d/ui/GLRootView.java +++ b/src/com/android/gallery3d/ui/GLRootView.java @@ -16,10 +16,12 @@ package com.android.gallery3d.ui; +import android.annotation.TargetApi; import android.content.Context; import android.graphics.Matrix; import android.graphics.PixelFormat; import android.opengl.GLSurfaceView; +import android.os.Build; import android.os.Process; import android.os.SystemClock; import android.util.AttributeSet; @@ -29,6 +31,7 @@ import android.view.View; import com.android.gallery3d.R; import com.android.gallery3d.anim.CanvasAnimation; +import com.android.gallery3d.common.ApiHelper; import com.android.gallery3d.common.Utils; import com.android.gallery3d.util.GalleryUtils; import com.android.gallery3d.util.Profile; @@ -536,12 +539,15 @@ public class GLRootView extends GLSurfaceView } @Override + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) public void setLightsOutMode(boolean enabled) { - int flags = enabled - ? SYSTEM_UI_FLAG_LOW_PROFILE - | SYSTEM_UI_FLAG_FULLSCREEN - | SYSTEM_UI_FLAG_LAYOUT_STABLE - : 0; + int flags = 0; + if (enabled) { + flags = SYSTEM_UI_FLAG_LOW_PROFILE; + if (ApiHelper.HAS_VIEW_SYSTEM_UI_FLAG_LAYOUT_STABLE) { + flags |= (SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_LAYOUT_STABLE); + } + } setSystemUiVisibility(flags); } diff --git a/src/com/android/gallery3d/ui/PositionController.java b/src/com/android/gallery3d/ui/PositionController.java index d556cafdc..6d334709d 100644 --- a/src/com/android/gallery3d/ui/PositionController.java +++ b/src/com/android/gallery3d/ui/PositionController.java @@ -110,11 +110,11 @@ class PositionController { private Listener mListener; private volatile Rect mOpenAnimationRect; - // Use a large enough value, so we won't see the gray shadown in the beginning. + // Use a large enough value, so we won't see the gray shadow in the beginning. private int mViewW = 1200; private int mViewH = 1200; - // A scaling guesture is in progress. + // A scaling gesture is in progress. private boolean mInScale; // The focus point of the scaling gesture, relative to the center of the // picture in bitmap pixels. @@ -178,7 +178,7 @@ class PositionController { private RangeArray<Gap> mTempGaps = new RangeArray<Gap>(-BOX_MAX, BOX_MAX - 1); - // The output of the PositionController. Available throught getPosition(). + // The output of the PositionController. Available through getPosition(). private RangeArray<Rect> mRects = new RangeArray<Rect>(-BOX_MAX, BOX_MAX); // The direction of a new picture should appear. New pictures pop from top @@ -211,7 +211,7 @@ class PositionController { mListener = listener; mPageScroller = new FlingScroller(); mFilmScroller = new OverScroller(context, - null /* default interpolator */, false /* no flywheel */); + null /* default interpolator */, 0, 0, false /* no flywheel */); // Initialize the areas. initPlatform(); @@ -519,7 +519,7 @@ class PositionController { Platform p = mPlatform; // We want to keep the focus point (on the bitmap) the same as when we - // begin the scale guesture, that is, + // begin the scale gesture, that is, // // (focusX' - currentX') / scale' = (focusX - currentX) / scale // @@ -1005,7 +1005,7 @@ class PositionController { // N N N N N N N -- all new boxes // -3 -2 -1 0 1 2 3 -- nothing changed // -2 -1 0 1 2 3 N -- focus goes to the next box - // N -3 -2 -1 0 1 2 -- focuse goes to the previous box + // N -3 -2 -1 0 1 2 -- focus goes to the previous box // -3 -2 -1 1 2 3 N -- the focused box was deleted. // // hasPrev/hasNext indicates if there are previous/next boxes for the @@ -1019,7 +1019,7 @@ class PositionController { RangeIntArray from = new RangeIntArray(fromIndex, -BOX_MAX, BOX_MAX); - // 1. Get the absolute X coordiates for the boxes. + // 1. Get the absolute X coordinates for the boxes. layoutAndSetPosition(); for (int i = -BOX_MAX; i <= BOX_MAX; i++) { Box b = mBoxes.get(i); @@ -1366,7 +1366,7 @@ class PositionController { public int mAnimationKind; public int mAnimationDuration; - // This should be overidden in subclass to change the animation values + // This should be overridden in subclass to change the animation values // give the progress value in [0, 1]. protected abstract boolean interpolate(float progress); public abstract boolean startSnapback(); diff --git a/src/com/android/gallery3d/ui/TileImageView.java b/src/com/android/gallery3d/ui/TileImageView.java index 0c6086d1c..adbf850c1 100644 --- a/src/com/android/gallery3d/ui/TileImageView.java +++ b/src/com/android/gallery3d/ui/TileImageView.java @@ -21,9 +21,9 @@ import android.graphics.Point; import android.graphics.Rect; import android.graphics.RectF; import android.util.FloatMath; -import android.util.LongSparseArray; import com.android.gallery3d.app.GalleryContext; +import com.android.gallery3d.common.LongSparseArray; import com.android.gallery3d.common.Utils; import com.android.gallery3d.data.BitmapPool; import com.android.gallery3d.data.DecodeUtils; |