summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/menu/photo.xml3
-rw-r--r--src/com/android/gallery3d/app/AbstractGalleryActivity.java17
-rw-r--r--src/com/android/gallery3d/app/PhotoPage.java4
-rw-r--r--src/com/android/gallery3d/util/PrintJob.java14
4 files changed, 38 insertions, 0 deletions
diff --git a/res/menu/photo.xml b/res/menu/photo.xml
index 48742d12c..bcd452e28 100644
--- a/res/menu/photo.xml
+++ b/res/menu/photo.xml
@@ -75,4 +75,7 @@
<item android:id="@+id/action_show_on_map"
android:title="@string/show_on_map"
android:showAsAction="never" />
+ <item android:id="@+id/print"
+ android:title="@string/print_image"
+ android:showAsAction="never" />
</menu>
diff --git a/src/com/android/gallery3d/app/AbstractGalleryActivity.java b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
index c4367c06d..923c5b2e6 100644
--- a/src/com/android/gallery3d/app/AbstractGalleryActivity.java
+++ b/src/com/android/gallery3d/app/AbstractGalleryActivity.java
@@ -29,6 +29,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.res.Configuration;
+import android.net.Uri;
import android.os.Bundle;
import android.os.IBinder;
import android.view.Menu;
@@ -40,9 +41,11 @@ import com.android.gallery3d.R;
import com.android.gallery3d.common.ApiHelper;
import com.android.gallery3d.data.DataManager;
import com.android.gallery3d.data.MediaItem;
+import com.android.gallery3d.filtershow.cache.ImageLoader;
import com.android.gallery3d.ui.GLRoot;
import com.android.gallery3d.ui.GLRootView;
import com.android.gallery3d.util.PanoramaViewHelper;
+import com.android.gallery3d.util.PrintJob;
import com.android.gallery3d.util.ThreadPool;
import com.android.photos.data.GalleryBitmapPool;
@@ -342,4 +345,18 @@ public class AbstractGalleryActivity extends Activity implements GalleryContext
throw new RuntimeException("Batch service unavailable");
}
}
+
+ public void printSelectedImage(Uri uri) {
+ if (uri == null) {
+ return;
+ }
+ String path = ImageLoader.getLocalPathFromUri(this, uri);
+ if (path != null) {
+ Uri localUri = Uri.parse(path);
+ path = localUri.getLastPathSegment();
+ } else {
+ path = uri.getLastPathSegment();
+ }
+ PrintJob.printBitmapAtUri(this, path, uri);
+ }
}
diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.java
index 7960ed645..2bc147ab1 100644
--- a/src/com/android/gallery3d/app/PhotoPage.java
+++ b/src/com/android/gallery3d/app/PhotoPage.java
@@ -1059,6 +1059,10 @@ public abstract class PhotoPage extends ActivityState implements
}
return true;
}
+ case R.id.print: {
+ mActivity.printSelectedImage(manager.getContentUri(path));
+ return true;
+ }
case R.id.action_delete:
confirmMsg = mActivity.getResources().getQuantityString(
R.plurals.delete_selection, 1);
diff --git a/src/com/android/gallery3d/util/PrintJob.java b/src/com/android/gallery3d/util/PrintJob.java
index d06466a21..f4bbda189 100644
--- a/src/com/android/gallery3d/util/PrintJob.java
+++ b/src/com/android/gallery3d/util/PrintJob.java
@@ -18,9 +18,11 @@ package com.android.gallery3d.util;
import android.content.Context;
import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.Rect;
import android.graphics.RectF;
+import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.print.PageRange;
@@ -29,13 +31,20 @@ import android.print.PrintDocumentAdapter;
import android.print.PrintDocumentInfo;
import android.print.PrintManager;
import android.print.pdf.PdfDocument;
+import com.android.gallery3d.app.AbstractGalleryActivity;
+import com.android.gallery3d.filtershow.cache.ImageLoader;
import com.android.gallery3d.filtershow.imageshow.MasterImage;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
public class PrintJob {
+ private final static int MAX_PRINT_SIZE = 2048;
+
public static void printBitmap(Context context, final String jobName, final Bitmap bitmap) {
+ if (bitmap == null) {
+ return;
+ }
PrintManager printManager = (PrintManager) context.getSystemService(Context.PRINT_SERVICE);
android.print.PrintJob printJob = printManager.print(jobName,
new PrintDocumentAdapter() {
@@ -95,4 +104,9 @@ public class PrintJob {
}
+ public static void printBitmapAtUri(Context context, String imagePrint, Uri uri) {
+ // TODO: load full size images. For now, it's better to constrain ourselves.
+ Bitmap bitmap = ImageLoader.loadConstrainedBitmap(uri, context, MAX_PRINT_SIZE, null, false);
+ printBitmap(context, imagePrint, bitmap);
+ }
}