package androidx.print; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.pdf.PdfDocument; import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.CancellationSignal; import android.os.ParcelFileDescriptor; import android.print.PageRange; import android.print.PrintAttributes; import android.print.PrintDocumentAdapter; import android.print.PrintDocumentInfo; import android.print.PrintManager; import android.print.pdf.PrintedPdfDocument; import android.util.Log; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public final class PrintHelper { @SuppressLint({"InlinedApi"}) public static final int COLOR_MODE_COLOR = 2; @SuppressLint({"InlinedApi"}) public static final int COLOR_MODE_MONOCHROME = 1; public static final boolean IS_MIN_MARGINS_HANDLING_CORRECT; private static final String LOG_TAG = "PrintHelper"; private static final int MAX_PRINT_SIZE = 3500; public static final int ORIENTATION_LANDSCAPE = 1; public static final int ORIENTATION_PORTRAIT = 2; public static final boolean PRINT_ACTIVITY_RESPECTS_ORIENTATION; public static final int SCALE_MODE_FILL = 2; public static final int SCALE_MODE_FIT = 1; public int mColorMode = 2; public final Context mContext; public BitmapFactory.Options mDecodeOptions = null; public final Object mLock = new Object(); public int mOrientation = 1; public int mScaleMode = 2; /* renamed from: androidx.print.PrintHelper$1 reason: invalid class name */ public class AnonymousClass1 extends AsyncTask { public final /* synthetic */ PrintAttributes val$attributes; public final /* synthetic */ Bitmap val$bitmap; public final /* synthetic */ CancellationSignal val$cancellationSignal; public final /* synthetic */ ParcelFileDescriptor val$fileDescriptor; public final /* synthetic */ int val$fittingMode; public final /* synthetic */ PrintAttributes val$pdfAttributes; public final /* synthetic */ PrintDocumentAdapter.WriteResultCallback val$writeResultCallback; public AnonymousClass1(CancellationSignal cancellationSignal, PrintAttributes printAttributes, Bitmap bitmap, PrintAttributes printAttributes2, int i, ParcelFileDescriptor parcelFileDescriptor, PrintDocumentAdapter.WriteResultCallback writeResultCallback) { this.val$cancellationSignal = cancellationSignal; this.val$pdfAttributes = printAttributes; this.val$bitmap = bitmap; this.val$attributes = printAttributes2; this.val$fittingMode = i; this.val$fileDescriptor = parcelFileDescriptor; this.val$writeResultCallback = writeResultCallback; } public Throwable doInBackground(Void... voidArr) { RectF rectF; try { if (this.val$cancellationSignal.isCanceled()) { return null; } PrintedPdfDocument printedPdfDocument = new PrintedPdfDocument(PrintHelper.this.mContext, this.val$pdfAttributes); Bitmap convertBitmapForColorMode = PrintHelper.convertBitmapForColorMode(this.val$bitmap, this.val$pdfAttributes.getColorMode()); if (this.val$cancellationSignal.isCanceled()) { return null; } try { PdfDocument.Page startPage = printedPdfDocument.startPage(1); boolean z2 = PrintHelper.IS_MIN_MARGINS_HANDLING_CORRECT; if (z2) { rectF = new RectF(startPage.getInfo().getContentRect()); } else { PrintedPdfDocument printedPdfDocument2 = new PrintedPdfDocument(PrintHelper.this.mContext, this.val$attributes); PdfDocument.Page startPage2 = printedPdfDocument2.startPage(1); RectF rectF2 = new RectF(startPage2.getInfo().getContentRect()); printedPdfDocument2.finishPage(startPage2); printedPdfDocument2.close(); rectF = rectF2; } Matrix matrix = PrintHelper.getMatrix(convertBitmapForColorMode.getWidth(), convertBitmapForColorMode.getHeight(), rectF, this.val$fittingMode); if (!z2) { matrix.postTranslate(rectF.left, rectF.top); startPage.getCanvas().clipRect(rectF); } startPage.getCanvas().drawBitmap(convertBitmapForColorMode, matrix, null); printedPdfDocument.finishPage(startPage); if (this.val$cancellationSignal.isCanceled()) { return null; } printedPdfDocument.writeTo(new FileOutputStream(this.val$fileDescriptor.getFileDescriptor())); printedPdfDocument.close(); ParcelFileDescriptor parcelFileDescriptor = this.val$fileDescriptor; if (parcelFileDescriptor != null) { try { parcelFileDescriptor.close(); } catch (IOException unused) { } } if (convertBitmapForColorMode != this.val$bitmap) { convertBitmapForColorMode.recycle(); } return null; } finally { printedPdfDocument.close(); ParcelFileDescriptor parcelFileDescriptor2 = this.val$fileDescriptor; if (parcelFileDescriptor2 != null) { try { parcelFileDescriptor2.close(); } catch (IOException unused2) { } } if (convertBitmapForColorMode != this.val$bitmap) { convertBitmapForColorMode.recycle(); } } } catch (Throwable th) { return th; } } public void onPostExecute(Throwable th) { if (this.val$cancellationSignal.isCanceled()) { this.val$writeResultCallback.onWriteCancelled(); } else if (th == null) { this.val$writeResultCallback.onWriteFinished(new PageRange[]{PageRange.ALL_PAGES}); } else { Log.e(PrintHelper.LOG_TAG, "Error writing printed content", th); this.val$writeResultCallback.onWriteFailed(null); } } } public interface OnPrintFinishCallback { void onFinish(); } @RequiresApi(19) public class PrintBitmapAdapter extends PrintDocumentAdapter { private PrintAttributes mAttributes; private final Bitmap mBitmap; private final OnPrintFinishCallback mCallback; private final int mFittingMode; private final String mJobName; public PrintBitmapAdapter(String str, int i, Bitmap bitmap, OnPrintFinishCallback onPrintFinishCallback) { this.mJobName = str; this.mFittingMode = i; this.mBitmap = bitmap; this.mCallback = onPrintFinishCallback; } @Override // android.print.PrintDocumentAdapter public void onFinish() { OnPrintFinishCallback onPrintFinishCallback = this.mCallback; if (onPrintFinishCallback != null) { onPrintFinishCallback.onFinish(); } } @Override // android.print.PrintDocumentAdapter public void onLayout(PrintAttributes printAttributes, PrintAttributes printAttributes2, CancellationSignal cancellationSignal, PrintDocumentAdapter.LayoutResultCallback layoutResultCallback, Bundle bundle) { this.mAttributes = printAttributes2; layoutResultCallback.onLayoutFinished(new PrintDocumentInfo.Builder(this.mJobName).setContentType(1).setPageCount(1).build(), !printAttributes2.equals(printAttributes)); } @Override // android.print.PrintDocumentAdapter public void onWrite(PageRange[] pageRangeArr, ParcelFileDescriptor parcelFileDescriptor, CancellationSignal cancellationSignal, PrintDocumentAdapter.WriteResultCallback writeResultCallback) { PrintHelper.this.writeBitmap(this.mAttributes, this.mFittingMode, this.mBitmap, parcelFileDescriptor, cancellationSignal, writeResultCallback); } } @RequiresApi(19) public class PrintUriAdapter extends PrintDocumentAdapter { public PrintAttributes mAttributes; public Bitmap mBitmap = null; public final OnPrintFinishCallback mCallback; public final int mFittingMode; public final Uri mImageFile; public final String mJobName; public AsyncTask mLoadBitmap; /* renamed from: androidx.print.PrintHelper$PrintUriAdapter$1 reason: invalid class name */ public class AnonymousClass1 extends AsyncTask { public final /* synthetic */ CancellationSignal val$cancellationSignal; public final /* synthetic */ PrintDocumentAdapter.LayoutResultCallback val$layoutResultCallback; public final /* synthetic */ PrintAttributes val$newPrintAttributes; public final /* synthetic */ PrintAttributes val$oldPrintAttributes; /* renamed from: androidx.print.PrintHelper$PrintUriAdapter$1$1 reason: invalid class name */ public class AnonymousClass1 implements CancellationSignal.OnCancelListener { public AnonymousClass1() { } @Override // android.os.CancellationSignal.OnCancelListener public void onCancel() { PrintUriAdapter.this.cancelLoad(); AnonymousClass1.this.cancel(false); } } public AnonymousClass1(CancellationSignal cancellationSignal, PrintAttributes printAttributes, PrintAttributes printAttributes2, PrintDocumentAdapter.LayoutResultCallback layoutResultCallback) { this.val$cancellationSignal = cancellationSignal; this.val$newPrintAttributes = printAttributes; this.val$oldPrintAttributes = printAttributes2; this.val$layoutResultCallback = layoutResultCallback; } public Bitmap doInBackground(Uri... uriArr) { try { PrintUriAdapter printUriAdapter = PrintUriAdapter.this; return PrintHelper.this.loadConstrainedBitmap(printUriAdapter.mImageFile); } catch (FileNotFoundException unused) { return null; } } public void onCancelled(Bitmap bitmap) { this.val$layoutResultCallback.onLayoutCancelled(); PrintUriAdapter.this.mLoadBitmap = null; } public void onPostExecute(Bitmap bitmap) { PrintAttributes.MediaSize mediaSize; super.onPostExecute((AnonymousClass1) bitmap); if (bitmap != null && (!PrintHelper.PRINT_ACTIVITY_RESPECTS_ORIENTATION || PrintHelper.this.mOrientation == 0)) { synchronized (this) { mediaSize = PrintUriAdapter.this.mAttributes.getMediaSize(); } if (!(mediaSize == null || mediaSize.isPortrait() == PrintHelper.isPortrait(bitmap))) { Matrix matrix = new Matrix(); matrix.postRotate(90.0f); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); } } PrintUriAdapter.this.mBitmap = bitmap; if (bitmap != null) { this.val$layoutResultCallback.onLayoutFinished(new PrintDocumentInfo.Builder(PrintUriAdapter.this.mJobName).setContentType(1).setPageCount(1).build(), true ^ this.val$newPrintAttributes.equals(this.val$oldPrintAttributes)); } else { this.val$layoutResultCallback.onLayoutFailed(null); } PrintUriAdapter.this.mLoadBitmap = null; } @Override // android.os.AsyncTask public void onPreExecute() { this.val$cancellationSignal.setOnCancelListener(new AnonymousClass1()); } } public PrintUriAdapter(String str, Uri uri, OnPrintFinishCallback onPrintFinishCallback, int i) { this.mJobName = str; this.mImageFile = uri; this.mCallback = onPrintFinishCallback; this.mFittingMode = i; } public void cancelLoad() { synchronized (PrintHelper.this.mLock) { BitmapFactory.Options options = PrintHelper.this.mDecodeOptions; if (options != null) { if (Build.VERSION.SDK_INT < 24) { options.requestCancelDecode(); } PrintHelper.this.mDecodeOptions = null; } } } @Override // android.print.PrintDocumentAdapter public void onFinish() { super.onFinish(); cancelLoad(); AsyncTask asyncTask = this.mLoadBitmap; if (asyncTask != null) { asyncTask.cancel(true); } OnPrintFinishCallback onPrintFinishCallback = this.mCallback; if (onPrintFinishCallback != null) { onPrintFinishCallback.onFinish(); } Bitmap bitmap = this.mBitmap; if (bitmap != null) { bitmap.recycle(); this.mBitmap = null; } } @Override // android.print.PrintDocumentAdapter public void onLayout(PrintAttributes printAttributes, PrintAttributes printAttributes2, CancellationSignal cancellationSignal, PrintDocumentAdapter.LayoutResultCallback layoutResultCallback, Bundle bundle) { synchronized (this) { this.mAttributes = printAttributes2; } if (cancellationSignal.isCanceled()) { layoutResultCallback.onLayoutCancelled(); } else if (this.mBitmap != null) { layoutResultCallback.onLayoutFinished(new PrintDocumentInfo.Builder(this.mJobName).setContentType(1).setPageCount(1).build(), !printAttributes2.equals(printAttributes)); } else { this.mLoadBitmap = new AnonymousClass1(cancellationSignal, printAttributes2, printAttributes, layoutResultCallback).execute(new Uri[0]); } } @Override // android.print.PrintDocumentAdapter public void onWrite(PageRange[] pageRangeArr, ParcelFileDescriptor parcelFileDescriptor, CancellationSignal cancellationSignal, PrintDocumentAdapter.WriteResultCallback writeResultCallback) { PrintHelper.this.writeBitmap(this.mAttributes, this.mFittingMode, this.mBitmap, parcelFileDescriptor, cancellationSignal, writeResultCallback); } } static { int i = Build.VERSION.SDK_INT; boolean z2 = false; PRINT_ACTIVITY_RESPECTS_ORIENTATION = i > 23; if (i != 23) { z2 = true; } IS_MIN_MARGINS_HANDLING_CORRECT = z2; } public PrintHelper(@NonNull Context context) { this.mContext = context; } public static Bitmap convertBitmapForColorMode(Bitmap bitmap, int i) { if (i != 1) { return bitmap; } Bitmap createBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(createBitmap); Paint paint = new Paint(); ColorMatrix colorMatrix = new ColorMatrix(); colorMatrix.setSaturation(0.0f); paint.setColorFilter(new ColorMatrixColorFilter(colorMatrix)); canvas.drawBitmap(bitmap, 0.0f, 0.0f, paint); canvas.setBitmap(null); return createBitmap; } @RequiresApi(19) private static PrintAttributes.Builder copyAttributes(PrintAttributes printAttributes) { PrintAttributes.Builder minMargins = new PrintAttributes.Builder().setMediaSize(printAttributes.getMediaSize()).setResolution(printAttributes.getResolution()).setMinMargins(printAttributes.getMinMargins()); if (printAttributes.getColorMode() != 0) { minMargins.setColorMode(printAttributes.getColorMode()); } if (Build.VERSION.SDK_INT >= 23 && printAttributes.getDuplexMode() != 0) { minMargins.setDuplexMode(printAttributes.getDuplexMode()); } return minMargins; } public static Matrix getMatrix(int i, int i2, RectF rectF, int i3) { Matrix matrix = new Matrix(); float f = (float) i; float width = rectF.width() / f; float max = i3 == 2 ? Math.max(width, rectF.height() / ((float) i2)) : Math.min(width, rectF.height() / ((float) i2)); matrix.postScale(max, max); matrix.postTranslate((rectF.width() - (f * max)) / 2.0f, (rectF.height() - (((float) i2) * max)) / 2.0f); return matrix; } public static boolean isPortrait(Bitmap bitmap) { return bitmap.getWidth() <= bitmap.getHeight(); } /* JADX WARNING: Removed duplicated region for block: B:19:0x0028 A[SYNTHETIC, Splitter:B:19:0x0028] */ private Bitmap loadBitmap(Uri uri, BitmapFactory.Options options) throws FileNotFoundException { Context context; Throwable th; if (uri == null || (context = this.mContext) == null) { throw new IllegalArgumentException("bad argument to loadBitmap"); } InputStream inputStream = null; try { InputStream openInputStream = context.getContentResolver().openInputStream(uri); try { Bitmap decodeStream = BitmapFactory.decodeStream(openInputStream, null, options); if (openInputStream != null) { try { openInputStream.close(); } catch (IOException e) { Log.w(LOG_TAG, "close fail ", e); } } return decodeStream; } catch (Throwable th2) { th = th2; inputStream = openInputStream; if (inputStream != null) { try { inputStream.close(); } catch (IOException e2) { Log.w(LOG_TAG, "close fail ", e2); } } throw th; } } catch (Throwable th3) { th = th3; if (inputStream != null) { } throw th; } } public static boolean systemSupportsPrint() { return true; } public int getColorMode() { return this.mColorMode; } public int getOrientation() { int i = this.mOrientation; if (i == 0) { return 1; } return i; } public int getScaleMode() { return this.mScaleMode; } public Bitmap loadConstrainedBitmap(Uri uri) throws FileNotFoundException { BitmapFactory.Options options; if (uri == null || this.mContext == null) { throw new IllegalArgumentException("bad argument to getScaledBitmap"); } BitmapFactory.Options options2 = new BitmapFactory.Options(); options2.inJustDecodeBounds = true; loadBitmap(uri, options2); int i = options2.outWidth; int i2 = options2.outHeight; if (i > 0 && i2 > 0) { int max = Math.max(i, i2); int i3 = 1; while (max > MAX_PRINT_SIZE) { max >>>= 1; i3 <<= 1; } if (i3 > 0 && Math.min(i, i2) / i3 > 0) { synchronized (this.mLock) { options = new BitmapFactory.Options(); this.mDecodeOptions = options; options.inMutable = true; options.inSampleSize = i3; } try { Bitmap loadBitmap = loadBitmap(uri, options); synchronized (this.mLock) { this.mDecodeOptions = null; } return loadBitmap; } catch (Throwable th) { synchronized (this.mLock) { this.mDecodeOptions = null; throw th; } } } } return null; } public void printBitmap(@NonNull String str, @NonNull Bitmap bitmap) { printBitmap(str, bitmap, (OnPrintFinishCallback) null); } public void printBitmap(@NonNull String str, @NonNull Bitmap bitmap, @Nullable OnPrintFinishCallback onPrintFinishCallback) { if (bitmap != null) { ((PrintManager) this.mContext.getSystemService("print")).print(str, new PrintBitmapAdapter(str, this.mScaleMode, bitmap, onPrintFinishCallback), new PrintAttributes.Builder().setMediaSize(isPortrait(bitmap) ? PrintAttributes.MediaSize.UNKNOWN_PORTRAIT : PrintAttributes.MediaSize.UNKNOWN_LANDSCAPE).setColorMode(this.mColorMode).build()); } } public void printBitmap(@NonNull String str, @NonNull Uri uri) throws FileNotFoundException { printBitmap(str, uri, (OnPrintFinishCallback) null); } public void printBitmap(@NonNull String str, @NonNull Uri uri, @Nullable OnPrintFinishCallback onPrintFinishCallback) throws FileNotFoundException { PrintUriAdapter printUriAdapter = new PrintUriAdapter(str, uri, onPrintFinishCallback, this.mScaleMode); PrintManager printManager = (PrintManager) this.mContext.getSystemService("print"); PrintAttributes.Builder builder = new PrintAttributes.Builder(); builder.setColorMode(this.mColorMode); int i = this.mOrientation; if (i == 1 || i == 0) { builder.setMediaSize(PrintAttributes.MediaSize.UNKNOWN_LANDSCAPE); } else if (i == 2) { builder.setMediaSize(PrintAttributes.MediaSize.UNKNOWN_PORTRAIT); } printManager.print(str, printUriAdapter, builder.build()); } public void setColorMode(int i) { this.mColorMode = i; } public void setOrientation(int i) { this.mOrientation = i; } public void setScaleMode(int i) { this.mScaleMode = i; } @RequiresApi(19) public void writeBitmap(PrintAttributes printAttributes, int i, Bitmap bitmap, ParcelFileDescriptor parcelFileDescriptor, CancellationSignal cancellationSignal, PrintDocumentAdapter.WriteResultCallback writeResultCallback) { new AnonymousClass1(cancellationSignal, IS_MIN_MARGINS_HANDLING_CORRECT ? printAttributes : copyAttributes(printAttributes).setMinMargins(new PrintAttributes.Margins(0, 0, 0, 0)).build(), bitmap, printAttributes, i, parcelFileDescriptor, writeResultCallback).execute(new Void[0]); } }