summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorAngus Kong <shkong@google.com>2013-10-02 16:53:40 -0700
committerAngus Kong <shkong@google.com>2013-10-03 12:47:54 -0700
commit3250987bd014d1c5463b8a39bbe988165ab1cc3f (patch)
tree4c003f831d18163af7ff4c9a0dda7c53613c3506 /src/com
parent68fc363bd33a9e506ccfd1ffa330c4525a2734ce (diff)
downloadandroid_packages_apps_Snap-3250987bd014d1c5463b8a39bbe988165ab1cc3f.tar.gz
android_packages_apps_Snap-3250987bd014d1c5463b8a39bbe988165ab1cc3f.tar.bz2
android_packages_apps_Snap-3250987bd014d1c5463b8a39bbe988165ab1cc3f.zip
Don't allow actions on items in progress.
bug:11049529 Change-Id: Id6bd0f912f153b8b8e6b1a525a383ad8cadbe3dd
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/camera/CameraActivity.java10
-rw-r--r--src/com/android/camera/data/InProgressDataWrapper.java188
-rw-r--r--src/com/android/camera/data/LocalData.java14
-rw-r--r--src/com/android/camera/data/LocalMediaData.java29
-rw-r--r--src/com/android/camera/data/RotationTask.java2
-rw-r--r--src/com/android/camera/data/SimpleViewData.java6
6 files changed, 227 insertions, 22 deletions
diff --git a/src/com/android/camera/CameraActivity.java b/src/com/android/camera/CameraActivity.java
index f306f1eda..c38b13031 100644
--- a/src/com/android/camera/CameraActivity.java
+++ b/src/com/android/camera/CameraActivity.java
@@ -70,6 +70,7 @@ import com.android.camera.data.CameraDataAdapter;
import com.android.camera.data.CameraPreviewData;
import com.android.camera.data.FixedFirstDataAdapter;
import com.android.camera.data.FixedLastDataAdapter;
+import com.android.camera.data.InProgressDataWrapper;
import com.android.camera.data.LocalData;
import com.android.camera.data.LocalDataAdapter;
import com.android.camera.data.LocalMediaObserver;
@@ -563,6 +564,7 @@ public class CameraActivity extends Activity
}
int supported = 0;
+
switch (type) {
case LocalData.LOCAL_IMAGE:
supported |= SUPPORT_DELETE | SUPPORT_ROTATE | SUPPORT_INFO
@@ -660,6 +662,14 @@ public class CameraActivity extends Activity
@Override
public void run() {
notifyNewMedia(imageUri);
+ int dataID = mDataAdapter.findDataByContentUri(imageUri);
+ if (dataID != -1) {
+ // Don't allow special UI actions (swipe to
+ // delete, for example) on in-progress data.
+ LocalData d = mDataAdapter.getLocalData(dataID);
+ InProgressDataWrapper newData = new InProgressDataWrapper(d);
+ mDataAdapter.updateData(dataID, newData);
+ }
}
});
}
diff --git a/src/com/android/camera/data/InProgressDataWrapper.java b/src/com/android/camera/data/InProgressDataWrapper.java
new file mode 100644
index 000000000..7de617bae
--- /dev/null
+++ b/src/com/android/camera/data/InProgressDataWrapper.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.camera.data;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.view.View;
+
+import com.android.camera.util.PhotoSphereHelper;
+
+/**
+ * A wrapper class for in-progress data. Data that's still being processed
+ * should not supporting any actions. Only methods related to actions like
+ * {@link #isDataActionSupported(int)} and
+ * {@link #isUIActionSupported(int)} are implemented by this class.
+ */
+public class InProgressDataWrapper implements LocalData {
+
+ final LocalData mLocalData;
+
+ public InProgressDataWrapper(LocalData wrappedData) {
+ mLocalData = wrappedData;
+ }
+
+ @Override
+ public View getView(
+ Activity a, int width, int height,
+ Drawable placeHolder, LocalDataAdapter adapter) {
+ return mLocalData.getView(a, width, height, placeHolder, adapter);
+ }
+
+ @Override
+ public long getDateTaken() {
+ return mLocalData.getDateTaken();
+ }
+
+ @Override
+ public long getDateModified() {
+ return mLocalData.getLocalDataType();
+ }
+
+ @Override
+ public String getTitle() {
+ return mLocalData.getTitle();
+ }
+
+ @Override
+ public boolean isDataActionSupported(int actions) {
+ return false;
+ }
+
+ @Override
+ public boolean delete(Context c) {
+ // No actions are allowed to modify the wrapped data.
+ return false;
+ }
+
+ @Override
+ public boolean rotate90Degrees(
+ Context context, LocalDataAdapter adapter,
+ int currentDataId, boolean clockwise) {
+ // No actions are allowed to modify the wrapped data.
+ return false;
+ }
+
+ @Override
+ public void onFullScreen(boolean fullScreen) {
+ mLocalData.onFullScreen(fullScreen);
+ }
+
+ @Override
+ public boolean canSwipeInFullScreen() {
+ return mLocalData.canSwipeInFullScreen();
+ }
+
+ @Override
+ public String getPath() {
+ return mLocalData.getPath();
+ }
+
+ @Override
+ public String getMimeType() {
+ return mLocalData.getMimeType();
+ }
+
+ @Override
+ public MediaDetails getMediaDetails(Context context) {
+ return mLocalData.getMediaDetails(context);
+ }
+
+ @Override
+ public int getLocalDataType() {
+ // Force the data type to be in-progress data.
+ return LOCAL_IN_PROGRESS_DATA;
+ }
+
+ @Override
+ public long getSizeInBytes() {
+ return mLocalData.getSizeInBytes();
+ }
+
+ @Override
+ public LocalData refresh(ContentResolver resolver) {
+ return mLocalData.refresh(resolver);
+ }
+
+ @Override
+ public long getContentId() {
+ return mLocalData.getContentId();
+ }
+
+ @Override
+ public int getWidth() {
+ return mLocalData.getWidth();
+ }
+
+ @Override
+ public int getHeight() {
+ return mLocalData.getHeight();
+ }
+
+ @Override
+ public int getOrientation() {
+ return mLocalData.getOrientation();
+ }
+
+ @Override
+ public int getViewType() {
+ return mLocalData.getViewType();
+ }
+
+ @Override
+ public double[] getLatLong() {
+ return mLocalData.getLatLong();
+ }
+
+ @Override
+ public boolean isUIActionSupported(int action) {
+ return false;
+ }
+
+ @Override
+ public void prepare() {
+ mLocalData.prepare();
+ }
+
+ @Override
+ public void recycle() {
+ mLocalData.recycle();
+ }
+
+ @Override
+ public void isPhotoSphere(Context context, PanoramaSupportCallback callback) {
+ mLocalData.isPhotoSphere(context, callback);
+ }
+
+ @Override
+ public void viewPhotoSphere(PhotoSphereHelper.PanoramaViewHelper helper) {
+ mLocalData.viewPhotoSphere(helper);
+ }
+
+ @Override
+ public boolean isPhoto() {
+ return mLocalData.isPhoto();
+ }
+
+ @Override
+ public Uri getContentUri() {
+ return mLocalData.getContentUri();
+ }
+}
diff --git a/src/com/android/camera/data/LocalData.java b/src/com/android/camera/data/LocalData.java
index cfdcfa459..da64fee30 100644
--- a/src/com/android/camera/data/LocalData.java
+++ b/src/com/android/camera/data/LocalData.java
@@ -67,6 +67,12 @@ public interface LocalData extends FilmStripView.ImageData {
* Constant for denoting a still image, with valid 360 PhotoSphere metadata.
*/
public static final int LOCAL_360_PHOTO_SPHERE = 6;
+ /**
+ * Constant for denoting an in-progress item which should not be touched
+ * before the related task is done. Data of this type should not support
+ * any actions like sharing, editing, etc.
+ */
+ public static final int LOCAL_IN_PROGRESS_DATA = 7;
View getView(Activity a, int width, int height, Drawable placeHolder,
LocalDataAdapter adapter);
@@ -110,8 +116,10 @@ public interface LocalData extends FilmStripView.ImageData {
* @param adapter Used to update the view.
* @param currentDataId Used to update the view.
* @param clockwise True if the rotation goes clockwise.
+ *
+ * @return Whether the rotation is supported.
*/
- void rotate90Degrees(Context context, LocalDataAdapter adapter,
+ boolean rotate90Degrees(Context context, LocalDataAdapter adapter,
int currentDataId, boolean clockwise);
void onFullScreen(boolean fullScreen);
@@ -187,8 +195,8 @@ public interface LocalData extends FilmStripView.ImageData {
}
/**
- * @return the Id of the data.
+ * @return the {@link android.content.ContentResolver} Id of the data.
*/
- long getId();
+ long getContentId();
}
diff --git a/src/com/android/camera/data/LocalMediaData.java b/src/com/android/camera/data/LocalMediaData.java
index 9b61fc38d..8e4b2f280 100644
--- a/src/com/android/camera/data/LocalMediaData.java
+++ b/src/com/android/camera/data/LocalMediaData.java
@@ -55,7 +55,7 @@ import java.util.Locale;
* return a bitmap.
*/
public abstract class LocalMediaData implements LocalData {
- protected final long mId;
+ protected final long mContentId;
protected final String mTitle;
protected final String mMimeType;
protected final long mDateTakenInSeconds;
@@ -80,11 +80,11 @@ public abstract class LocalMediaData implements LocalData {
*/
protected Boolean mUsing = false;
- public LocalMediaData (long id, String title, String mimeType,
+ public LocalMediaData (long contentId, String title, String mimeType,
long dateTakenInSeconds, long dateModifiedInSeconds, String path,
int width, int height, long sizeInBytes, double latitude,
double longitude) {
- mId = id;
+ mContentId = contentId;
mTitle = new String(title);
mMimeType = new String(mimeType);
mDateTakenInSeconds = dateTakenInSeconds;
@@ -95,7 +95,6 @@ public abstract class LocalMediaData implements LocalData {
mSizeInBytes = sizeInBytes;
mLatitude = latitude;
mLongitude = longitude;
- return;
}
@Override
@@ -109,8 +108,8 @@ public abstract class LocalMediaData implements LocalData {
}
@Override
- public long getId() {
- return mId;
+ public long getContentId() {
+ return mContentId;
}
@Override
@@ -368,7 +367,7 @@ public abstract class LocalMediaData implements LocalData {
Log.w(TAG, "Dimension decode failed for " + path);
Bitmap b = BitmapFactory.decodeFile(path);
if (b == null) {
- Log.w(TAG, "PhotoData skipeped."
+ Log.w(TAG, "PhotoData skipped."
+ " Decoding " + path + "failed.");
return null;
}
@@ -424,14 +423,14 @@ public abstract class LocalMediaData implements LocalData {
@Override
public boolean delete(Context c) {
ContentResolver cr = c.getContentResolver();
- cr.delete(CONTENT_URI, MediaStore.Images.ImageColumns._ID + "=" + mId, null);
+ cr.delete(CONTENT_URI, MediaStore.Images.ImageColumns._ID + "=" + mContentId, null);
return super.delete(c);
}
@Override
public Uri getContentUri() {
Uri baseUri = CONTENT_URI;
- return baseUri.buildUpon().appendPath(String.valueOf(mId)).build();
+ return baseUri.buildUpon().appendPath(String.valueOf(mContentId)).build();
}
@Override
@@ -571,12 +570,12 @@ public abstract class LocalMediaData implements LocalData {
}
@Override
- public void rotate90Degrees(Context context, LocalDataAdapter adapter,
+ public boolean rotate90Degrees(Context context, LocalDataAdapter adapter,
int currentDataId, boolean clockwise) {
RotationTask task = new RotationTask(context, adapter,
currentDataId, clockwise);
task.execute(this);
- return;
+ return true;
}
}
@@ -717,14 +716,14 @@ public abstract class LocalMediaData implements LocalData {
@Override
public boolean delete(Context ctx) {
ContentResolver cr = ctx.getContentResolver();
- cr.delete(CONTENT_URI, MediaStore.Video.VideoColumns._ID + "=" + mId, null);
+ cr.delete(CONTENT_URI, MediaStore.Video.VideoColumns._ID + "=" + mContentId, null);
return super.delete(ctx);
}
@Override
public Uri getContentUri() {
Uri baseUri = CONTENT_URI;
- return baseUri.buildUpon().appendPath(String.valueOf(mId)).build();
+ return baseUri.buildUpon().appendPath(String.valueOf(mContentId)).build();
}
@Override
@@ -830,11 +829,11 @@ public abstract class LocalMediaData implements LocalData {
}
@Override
- public void rotate90Degrees(Context context, LocalDataAdapter adapter,
+ public boolean rotate90Degrees(Context context, LocalDataAdapter adapter,
int currentDataId, boolean clockwise) {
// We don't support rotation for video data.
Log.e(TAG, "Unexpected call in rotate90Degrees()");
- return;
+ return false;
}
}
diff --git a/src/com/android/camera/data/RotationTask.java b/src/com/android/camera/data/RotationTask.java
index 66134d44c..950ae9371 100644
--- a/src/com/android/camera/data/RotationTask.java
+++ b/src/com/android/camera/data/RotationTask.java
@@ -141,7 +141,7 @@ public class RotationTask extends AsyncTask<LocalData, Void, LocalData> {
longitude = latLong[1];
}
- result = new PhotoData(data.getId(), data.getTitle(),
+ result = new PhotoData(data.getContentId(), data.getTitle(),
data.getMimeType(), data.getDateTaken(), data.getDateModified(),
data.getPath(), newOrientation, newWidth, newHeight,
data.getSizeInBytes(), latitude, longitude);
diff --git a/src/com/android/camera/data/SimpleViewData.java b/src/com/android/camera/data/SimpleViewData.java
index 2391f0f95..ba4459415 100644
--- a/src/com/android/camera/data/SimpleViewData.java
+++ b/src/com/android/camera/data/SimpleViewData.java
@@ -177,11 +177,11 @@ public class SimpleViewData implements LocalData {
}
@Override
- public void rotate90Degrees(Context context, LocalDataAdapter adapter,
+ public boolean rotate90Degrees(Context context, LocalDataAdapter adapter,
int currentDataId, boolean clockwise) {
// We don't support rotation for SimpleViewData.
Log.w(TAG, "Unexpected call in rotate90Degrees()");
- return;
+ return false;
}
@Override
@@ -190,7 +190,7 @@ public class SimpleViewData implements LocalData {
}
@Override
- public long getId() {
+ public long getContentId() {
return -1;
}
}