Initial version -- added millennium read funcionality
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
package com.google.android.gms.common.data;
|
||||
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Parcel;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.os.Parcelable;
|
||||
import android.util.Log;
|
||||
import com.google.android.gms.common.internal.Preconditions;
|
||||
import com.google.android.gms.common.internal.ReflectedParcelable;
|
||||
import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
|
||||
import com.google.android.gms.common.internal.safeparcel.SafeParcelWriter;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.Closeable;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-base@@18.4.0 */
|
||||
/* JADX INFO: loaded from: classes2.dex */
|
||||
public class BitmapTeleporter extends AbstractSafeParcelable implements ReflectedParcelable {
|
||||
public static final Parcelable.Creator<BitmapTeleporter> CREATOR = new zaa();
|
||||
final int zaa;
|
||||
ParcelFileDescriptor zab;
|
||||
final int zac;
|
||||
private Bitmap zad;
|
||||
private boolean zae;
|
||||
private File zaf;
|
||||
|
||||
BitmapTeleporter(int i, ParcelFileDescriptor parcelFileDescriptor, int i2) {
|
||||
this.zaa = i;
|
||||
this.zab = parcelFileDescriptor;
|
||||
this.zac = i2;
|
||||
this.zad = null;
|
||||
this.zae = false;
|
||||
}
|
||||
|
||||
private static final void zaa(Closeable closeable) {
|
||||
try {
|
||||
closeable.close();
|
||||
} catch (IOException e) {
|
||||
Log.w("BitmapTeleporter", "Could not close stream", e);
|
||||
}
|
||||
}
|
||||
|
||||
public Bitmap get() {
|
||||
if (!this.zae) {
|
||||
DataInputStream dataInputStream = new DataInputStream(new ParcelFileDescriptor.AutoCloseInputStream((ParcelFileDescriptor) Preconditions.checkNotNull(this.zab)));
|
||||
try {
|
||||
try {
|
||||
byte[] bArr = new byte[dataInputStream.readInt()];
|
||||
int i = dataInputStream.readInt();
|
||||
int i2 = dataInputStream.readInt();
|
||||
Bitmap.Config configValueOf = Bitmap.Config.valueOf(dataInputStream.readUTF());
|
||||
dataInputStream.read(bArr);
|
||||
zaa(dataInputStream);
|
||||
ByteBuffer byteBufferWrap = ByteBuffer.wrap(bArr);
|
||||
Bitmap bitmapCreateBitmap = Bitmap.createBitmap(i, i2, configValueOf);
|
||||
bitmapCreateBitmap.copyPixelsFromBuffer(byteBufferWrap);
|
||||
this.zad = bitmapCreateBitmap;
|
||||
this.zae = true;
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException("Could not read from parcel file descriptor", e);
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
zaa(dataInputStream);
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
return this.zad;
|
||||
}
|
||||
|
||||
public void release() {
|
||||
if (this.zae) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
((ParcelFileDescriptor) Preconditions.checkNotNull(this.zab)).close();
|
||||
} catch (IOException e) {
|
||||
Log.w("BitmapTeleporter", "Could not close PFD", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void setTempDir(File file) {
|
||||
if (file == null) {
|
||||
throw new NullPointerException("Cannot set null temp directory");
|
||||
}
|
||||
this.zaf = file;
|
||||
}
|
||||
|
||||
@Override // android.os.Parcelable
|
||||
public final void writeToParcel(Parcel parcel, int i) {
|
||||
if (this.zab == null) {
|
||||
Bitmap bitmap = (Bitmap) Preconditions.checkNotNull(this.zad);
|
||||
ByteBuffer byteBufferAllocate = ByteBuffer.allocate(bitmap.getRowBytes() * bitmap.getHeight());
|
||||
bitmap.copyPixelsToBuffer(byteBufferAllocate);
|
||||
byte[] bArrArray = byteBufferAllocate.array();
|
||||
File file = this.zaf;
|
||||
if (file == null) {
|
||||
throw new IllegalStateException("setTempDir() must be called before writing this object to a parcel");
|
||||
}
|
||||
try {
|
||||
File fileCreateTempFile = File.createTempFile("teleporter", ".tmp", file);
|
||||
try {
|
||||
FileOutputStream fileOutputStream = new FileOutputStream(fileCreateTempFile);
|
||||
this.zab = ParcelFileDescriptor.open(fileCreateTempFile, 268435456);
|
||||
fileCreateTempFile.delete();
|
||||
DataOutputStream dataOutputStream = new DataOutputStream(new BufferedOutputStream(fileOutputStream));
|
||||
try {
|
||||
try {
|
||||
dataOutputStream.writeInt(bArrArray.length);
|
||||
dataOutputStream.writeInt(bitmap.getWidth());
|
||||
dataOutputStream.writeInt(bitmap.getHeight());
|
||||
dataOutputStream.writeUTF(bitmap.getConfig().toString());
|
||||
dataOutputStream.write(bArrArray);
|
||||
} catch (IOException e) {
|
||||
throw new IllegalStateException("Could not write into unlinked file", e);
|
||||
}
|
||||
} finally {
|
||||
zaa(dataOutputStream);
|
||||
}
|
||||
} catch (FileNotFoundException unused) {
|
||||
throw new IllegalStateException("Temporary file is somehow already deleted");
|
||||
}
|
||||
} catch (IOException e2) {
|
||||
throw new IllegalStateException("Could not create temporary file", e2);
|
||||
}
|
||||
}
|
||||
int iBeginObjectHeader = SafeParcelWriter.beginObjectHeader(parcel);
|
||||
SafeParcelWriter.writeInt(parcel, 1, this.zaa);
|
||||
SafeParcelWriter.writeParcelable(parcel, 2, this.zab, i | 1, false);
|
||||
SafeParcelWriter.writeInt(parcel, 3, this.zac);
|
||||
SafeParcelWriter.finishObjectHeader(parcel, iBeginObjectHeader);
|
||||
this.zab = null;
|
||||
}
|
||||
|
||||
public BitmapTeleporter(Bitmap bitmap) {
|
||||
this.zaa = 1;
|
||||
this.zab = null;
|
||||
this.zac = 0;
|
||||
this.zad = bitmap;
|
||||
this.zae = true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user