summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuli Huang <yuli@google.com>2012-05-02 00:50:56 +0800
committerYuli Huang <yuli@google.com>2012-05-02 18:33:29 +0800
commitf50ce2b708c0c70930a346206fdd526f53ae6004 (patch)
tree908eea4ea43361b6585a44e332495c1c24aee615
parentedd4807d55c34683fdf87770559bd16a5f9163d7 (diff)
downloadandroid_packages_apps_Gallery2-f50ce2b708c0c70930a346206fdd526f53ae6004.tar.gz
android_packages_apps_Gallery2-f50ce2b708c0c70930a346206fdd526f53ae6004.tar.bz2
android_packages_apps_Gallery2-f50ce2b708c0c70930a346206fdd526f53ae6004.zip
Fix 'Edit' and 'Crop' behaviors.
1. Make Gallery show edited local photo after resuming, similar to how it shows cropped local photo after resuming. 2. Fix inconsistency between cropping local/PWA photo. bug:6168430 Change-Id: Ia350e0c67f05969ad42f56b9693c09c3b6433d3c
-rw-r--r--res/values/strings.xml8
-rw-r--r--src/com/android/gallery3d/app/PhotoDataAdapter.java2
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java43
-rw-r--r--src/com/android/gallery3d/photoeditor/PhotoEditor.java2
-rw-r--r--src/com/android/gallery3d/ui/MenuExecutor.java50
5 files changed, 48 insertions, 57 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3bff3ba5f..96176d5fb 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -147,10 +147,6 @@
[CHAR_LIMIT=20]-->
<string name="edit">Edit</string>
- <!-- String used in a toast message indicating there is no application
- available to handle a request [CHAR LIMIT=50] -->
- <string name="activity_not_found">No app is available to complete the action.</string>
-
<!-- String used as a title of a progress dialog. The user can
choose to cache some Picasa picture albums on device, so it can
be viewed offline. This string is shown when the request is being
@@ -234,10 +230,6 @@
<string name="crop_saved">
Cropped image saved to <xliff:g id="folder_name">%s</xliff:g>.</string>
- <!-- Toast message shown when the cropped image is not saved
- [CHAR LIMIT=50]-->
- <string name="crop_not_saved">Cropped image wasn\'t saved.</string>
-
<!-- Toast message shown when there is no albums available [CHAR LIMIT=50]-->
<string name="no_albums_alert">No albums available.</string>
diff --git a/src/com/android/gallery3d/app/PhotoDataAdapter.java b/src/com/android/gallery3d/app/PhotoDataAdapter.java
index 86ef04d17..d5a4efd6c 100644
--- a/src/com/android/gallery3d/app/PhotoDataAdapter.java
+++ b/src/com/android/gallery3d/app/PhotoDataAdapter.java
@@ -598,7 +598,6 @@ public class PhotoDataAdapter implements PhotoPage.Model {
}
} else {
entry = new ImageEntry();
- entry.rotation = item.getFullImageRotation();
mImageCache.put(version, entry);
}
}
@@ -658,7 +657,6 @@ public class PhotoDataAdapter implements PhotoPage.Model {
private static class ImageEntry {
public int requestedBits = 0;
- public int rotation;
public BitmapRegionDecoder fullImage;
public ScreenNail screenNail;
public Future<ScreenNail> screenNailTask;
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index a237cbac3..d7936e24f 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -43,7 +43,6 @@ import com.android.gallery3d.data.MediaObject;
import com.android.gallery3d.data.MediaSet;
import com.android.gallery3d.data.MtpDevice;
import com.android.gallery3d.data.Path;
-import com.android.gallery3d.data.SnailItem;
import com.android.gallery3d.data.SnailSource;
import com.android.gallery3d.picasasource.PicasaSource;
import com.android.gallery3d.ui.DetailsHelper;
@@ -75,6 +74,7 @@ public class PhotoPage extends ActivityState implements
private static final int REQUEST_SLIDESHOW = 1;
private static final int REQUEST_CROP = 2;
private static final int REQUEST_CROP_PICASA = 3;
+ private static final int REQUEST_EDIT = 4;
public static final String KEY_MEDIA_SET_PATH = "media-set-path";
public static final String KEY_MEDIA_ITEM_PATH = "media-item-path";
@@ -520,6 +520,14 @@ public class PhotoPage extends ActivityState implements
: REQUEST_CROP);
return true;
}
+ case R.id.action_edit: {
+ Intent intent = new Intent(Intent.ACTION_EDIT)
+ .setData(manager.getContentUri(path))
+ .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ ((Activity) mActivity).startActivityForResult(Intent.createChooser(intent, null),
+ REQUEST_EDIT);
+ return true;
+ }
case R.id.action_details: {
if (mShowDetails) {
hideDetails();
@@ -534,7 +542,6 @@ public class PhotoPage extends ActivityState implements
case R.id.action_rotate_ccw:
case R.id.action_rotate_cw:
case R.id.action_show_on_map:
- case R.id.action_edit:
mSelectionManager.deSelectAll();
mSelectionManager.toggle(path);
mMenuExecutor.onMenuClicked(item, needsConfirm, null);
@@ -633,26 +640,34 @@ public class PhotoPage extends ActivityState implements
}
}
+ private void setCurrentPhotoByIntent(Intent intent) {
+ if (intent == null) return;
+ Path path = mApplication.getDataManager()
+ .findPathByUri(intent.getData(), intent.getType());
+ if (path != null) {
+ mModel.setCurrentPhoto(path, mCurrentIndex);
+ }
+ }
+
@Override
protected void onStateResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
+ case REQUEST_EDIT:
+ setCurrentPhotoByIntent(data);
+ break;
case REQUEST_CROP:
if (resultCode == Activity.RESULT_OK) {
- if (data == null) break;
- Path path = mApplication.getDataManager()
- .findPathByUri(data.getData(), data.getType());
- if (path != null) {
- mModel.setCurrentPhoto(path, mCurrentIndex);
- }
+ setCurrentPhotoByIntent(data);
}
break;
case REQUEST_CROP_PICASA: {
- Context context = mActivity.getAndroidContext();
- // TODO: Use crop_saved instead of photo_saved after its new translation is done.
- String message = resultCode == Activity.RESULT_OK ? context.getString(
- R.string.photo_saved, context.getString(R.string.folder_download))
- : context.getString(R.string.crop_not_saved);
- Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
+ if (resultCode == Activity.RESULT_OK) {
+ Context context = mActivity.getAndroidContext();
+ // TODO: Use crop_saved instead of photo_saved after its new translation is done.
+ String message = context.getString(R.string.photo_saved,
+ context.getString(R.string.folder_download));
+ Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
+ }
break;
}
case REQUEST_SLIDESHOW: {
diff --git a/src/com/android/gallery3d/photoeditor/PhotoEditor.java b/src/com/android/gallery3d/photoeditor/PhotoEditor.java
index 19e49c4a1..4359cf6ed 100644
--- a/src/com/android/gallery3d/photoeditor/PhotoEditor.java
+++ b/src/com/android/gallery3d/photoeditor/PhotoEditor.java
@@ -195,10 +195,12 @@ public class PhotoEditor extends Activity {
@Override
public void run() {
+ // Discard unsaved photo for the result.
finish();
}
}, R.string.save_photo).show();
} else {
+ setResult(RESULT_OK, new Intent().setData(saveUri));
finish();
}
}
diff --git a/src/com/android/gallery3d/ui/MenuExecutor.java b/src/com/android/gallery3d/ui/MenuExecutor.java
index a052c500d..636da3985 100644
--- a/src/com/android/gallery3d/ui/MenuExecutor.java
+++ b/src/com/android/gallery3d/ui/MenuExecutor.java
@@ -27,7 +27,6 @@ import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
-import android.widget.Toast;
import com.android.gallery3d.R;
import com.android.gallery3d.app.CropImage;
@@ -175,9 +174,15 @@ public class MenuExecutor {
return ids.get(0);
}
+ private Intent getIntentBySingleSelectedPath(String action) {
+ DataManager manager = mActivity.getDataManager();
+ Path path = getSingleSelectedPath();
+ String mimeType = getMimeType(manager.getMediaType(path));
+ return new Intent(action).setDataAndType(manager.getContentUri(path), mimeType);
+ }
+
private void onMenuClicked(int action, ProgressListener listener) {
int title;
- DataManager manager = mActivity.getDataManager();
switch (action) {
case R.id.action_select_all:
if (mSelectionManager.inSelectAllMode()) {
@@ -187,21 +192,20 @@ public class MenuExecutor {
}
return;
case R.id.action_crop: {
- Path path = getSingleSelectedPath();
- String mimeType = getMimeType(manager.getMediaType(path));
- Intent intent = new Intent(CropImage.ACTION_CROP)
- .setDataAndType(manager.getContentUri(path), mimeType);
+ Intent intent = getIntentBySingleSelectedPath(CropImage.ACTION_CROP);
((Activity) mActivity).startActivity(intent);
return;
}
+ case R.id.action_edit: {
+ Intent intent = getIntentBySingleSelectedPath(Intent.ACTION_EDIT)
+ .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ ((Activity) mActivity).startActivity(Intent.createChooser(intent, null));
+ return;
+ }
case R.id.action_setas: {
- Path path = getSingleSelectedPath();
- int type = manager.getMediaType(path);
- Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
- String mimeType = getMimeType(type);
- intent.setDataAndType(manager.getContentUri(path), mimeType);
- intent.putExtra("mimeType", mimeType);
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ Intent intent = getIntentBySingleSelectedPath(Intent.ACTION_ATTACH_DATA)
+ .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ intent.putExtra("mimeType", intent.getType());
Activity activity = (Activity) mActivity;
activity.startActivity(Intent.createChooser(
intent, activity.getString(R.string.set_as)));
@@ -219,9 +223,6 @@ public class MenuExecutor {
case R.id.action_show_on_map:
title = R.string.show_on_map;
break;
- case R.id.action_edit:
- title = R.string.edit;
- break;
case R.id.action_import:
title = R.string.Import;
break;
@@ -310,23 +311,6 @@ public class MenuExecutor {
result = obj.Import();
break;
}
- case R.id.action_edit: {
- Activity activity = (Activity) mActivity;
- MediaItem item = (MediaItem) manager.getMediaObject(path);
- try {
- activity.startActivity(Intent.createChooser(
- new Intent(Intent.ACTION_EDIT)
- .setDataAndType(item.getContentUri(), item.getMimeType())
- .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION),
- null));
- } catch (Throwable t) {
- Log.w(TAG, "failed to start edit activity: ", t);
- Toast.makeText(activity,
- activity.getString(R.string.activity_not_found),
- Toast.LENGTH_SHORT).show();
- }
- break;
- }
default:
throw new AssertionError();
}