diff options
-rw-r--r-- | res/menu/photo.xml | 3 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/AbstractGalleryActivity.java | 17 | ||||
-rw-r--r-- | src/com/android/gallery3d/app/PhotoPage.java | 4 | ||||
-rw-r--r-- | src/com/android/gallery3d/util/PrintJob.java | 14 |
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); + } } |