OSDN Git Service

Add printing to Gallery
authornicolasroard <nicolasroard@google.com>
Mon, 19 Aug 2013 23:21:12 +0000 (16:21 -0700)
committernicolasroard <nicolasroard@google.com>
Tue, 20 Aug 2013 00:17:36 +0000 (17:17 -0700)
Change-Id: I26aad645759f95813003badffbd03845e0df37bb

res/menu/photo.xml
src/com/android/gallery3d/app/AbstractGalleryActivity.java
src/com/android/gallery3d/app/PhotoPage.java
src/com/android/gallery3d/util/PrintJob.java

index 48742d1..bcd452e 100644 (file)
@@ -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>
index c4367c0..923c5b2 100644 (file)
@@ -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);
+    }
 }
index 7960ed6..2bc147a 100644 (file)
@@ -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);
index d06466a..f4bbda1 100644 (file)
@@ -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);
+    }
 }