Initial version -- added millennium read funcionality
This commit is contained in:
@@ -0,0 +1,353 @@
|
||||
package com.google.android.gms.common.data;
|
||||
|
||||
import android.content.ContentValues;
|
||||
import android.database.CharArrayBuffer;
|
||||
import android.database.Cursor;
|
||||
import android.database.CursorIndexOutOfBoundsException;
|
||||
import android.database.CursorWindow;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.util.Log;
|
||||
import com.google.android.gms.common.internal.Asserts;
|
||||
import com.google.android.gms.common.internal.Preconditions;
|
||||
import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
|
||||
import com.google.android.gms.common.internal.safeparcel.SafeParcelWriter;
|
||||
import com.google.android.gms.common.sqlite.CursorWrapper;
|
||||
import java.io.Closeable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-base@@18.4.0 */
|
||||
/* JADX INFO: loaded from: classes2.dex */
|
||||
public final class DataHolder extends AbstractSafeParcelable implements Closeable {
|
||||
public static final Parcelable.Creator<DataHolder> CREATOR = new zaf();
|
||||
private static final Builder zaf = new zab(new String[0], null);
|
||||
final int zaa;
|
||||
Bundle zab;
|
||||
int[] zac;
|
||||
int zad;
|
||||
boolean zae;
|
||||
private final String[] zag;
|
||||
private final CursorWindow[] zah;
|
||||
private final int zai;
|
||||
private final Bundle zaj;
|
||||
private boolean zak;
|
||||
|
||||
/* JADX INFO: compiled from: com.google.android.gms:play-services-base@@18.4.0 */
|
||||
public static class Builder {
|
||||
private final String[] zaa;
|
||||
private final ArrayList zab = new ArrayList();
|
||||
private final HashMap zac = new HashMap();
|
||||
|
||||
/* synthetic */ Builder(String[] strArr, String str, zac zacVar) {
|
||||
this.zaa = (String[]) Preconditions.checkNotNull(strArr);
|
||||
}
|
||||
|
||||
public DataHolder build(int i) {
|
||||
return new DataHolder(this, i);
|
||||
}
|
||||
|
||||
public Builder withRow(ContentValues contentValues) {
|
||||
Asserts.checkNotNull(contentValues);
|
||||
HashMap map = new HashMap(contentValues.size());
|
||||
for (Map.Entry<String, Object> entry : contentValues.valueSet()) {
|
||||
map.put(entry.getKey(), entry.getValue());
|
||||
}
|
||||
return zaa(map);
|
||||
}
|
||||
|
||||
public Builder zaa(HashMap map) {
|
||||
Asserts.checkNotNull(map);
|
||||
this.zab.add(map);
|
||||
return this;
|
||||
}
|
||||
|
||||
public DataHolder build(int i, Bundle bundle) {
|
||||
return new DataHolder(this, i, bundle);
|
||||
}
|
||||
}
|
||||
|
||||
DataHolder(int i, String[] strArr, CursorWindow[] cursorWindowArr, int i2, Bundle bundle) {
|
||||
this.zae = false;
|
||||
this.zak = true;
|
||||
this.zaa = i;
|
||||
this.zag = strArr;
|
||||
this.zah = cursorWindowArr;
|
||||
this.zai = i2;
|
||||
this.zaj = bundle;
|
||||
}
|
||||
|
||||
public DataHolder(String[] strArr, CursorWindow[] cursorWindowArr, int i, Bundle bundle) {
|
||||
this.zae = false;
|
||||
this.zak = true;
|
||||
this.zaa = 1;
|
||||
this.zag = (String[]) Preconditions.checkNotNull(strArr);
|
||||
this.zah = (CursorWindow[]) Preconditions.checkNotNull(cursorWindowArr);
|
||||
this.zai = i;
|
||||
this.zaj = bundle;
|
||||
zad();
|
||||
}
|
||||
|
||||
public static Builder builder(String[] strArr) {
|
||||
return new Builder(strArr, null, 0 == true ? 1 : 0);
|
||||
}
|
||||
|
||||
public static DataHolder empty(int i) {
|
||||
return new DataHolder(zaf, i, (Bundle) null);
|
||||
}
|
||||
|
||||
private final void zae(String str, int i) {
|
||||
Bundle bundle = this.zab;
|
||||
if (bundle == null || !bundle.containsKey(str)) {
|
||||
throw new IllegalArgumentException("No such column: ".concat(String.valueOf(str)));
|
||||
}
|
||||
if (isClosed()) {
|
||||
throw new IllegalArgumentException("Buffer is closed.");
|
||||
}
|
||||
if (i < 0 || i >= this.zad) {
|
||||
throw new CursorIndexOutOfBoundsException(i, this.zad);
|
||||
}
|
||||
}
|
||||
|
||||
/* JADX WARN: Code restructure failed: missing block: B:52:0x0133, code lost:
|
||||
|
||||
if (r5 != false) goto L68;
|
||||
*/
|
||||
/* JADX WARN: Code restructure failed: missing block: B:53:0x0135, code lost:
|
||||
|
||||
android.util.Log.d("DataHolder", "Couldn't populate window data for row " + r4 + " - allocating new window.");
|
||||
r2.freeLastRow();
|
||||
r2 = new android.database.CursorWindow(false);
|
||||
r2.setStartPosition(r4);
|
||||
r2.setNumColumns(r13.zaa.length);
|
||||
r3.add(r2);
|
||||
r4 = r4 - 1;
|
||||
r5 = true;
|
||||
*/
|
||||
/* JADX WARN: Code restructure failed: missing block: B:54:0x0167, code lost:
|
||||
|
||||
r4 = r4 + 1;
|
||||
*/
|
||||
/* JADX WARN: Code restructure failed: missing block: B:56:0x0171, code lost:
|
||||
|
||||
throw new com.google.android.gms.common.data.zad("Could not add the value to a new CursorWindow. The size of value may be larger than what a CursorWindow can handle.");
|
||||
*/
|
||||
/*
|
||||
Code decompiled incorrectly, please refer to instructions dump.
|
||||
To view partially-correct code enable 'Show inconsistent code' option in preferences
|
||||
*/
|
||||
private static android.database.CursorWindow[] zaf(com.google.android.gms.common.data.DataHolder.Builder r13, int r14) {
|
||||
/*
|
||||
Method dump skipped, instruction units count: 403
|
||||
To view this dump change 'Code comments level' option to 'DEBUG'
|
||||
*/
|
||||
throw new UnsupportedOperationException("Method not decompiled: com.google.android.gms.common.data.DataHolder.zaf(com.google.android.gms.common.data.DataHolder$Builder, int):android.database.CursorWindow[]");
|
||||
}
|
||||
|
||||
@Override // java.io.Closeable, java.lang.AutoCloseable
|
||||
public void close() {
|
||||
synchronized (this) {
|
||||
if (!this.zae) {
|
||||
this.zae = true;
|
||||
int i = 0;
|
||||
while (true) {
|
||||
CursorWindow[] cursorWindowArr = this.zah;
|
||||
if (i >= cursorWindowArr.length) {
|
||||
break;
|
||||
}
|
||||
cursorWindowArr[i].close();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected final void finalize() throws Throwable {
|
||||
try {
|
||||
if (this.zak && this.zah.length > 0 && !isClosed()) {
|
||||
close();
|
||||
Log.e("DataBuffer", "Internal data leak within a DataBuffer object detected! Be sure to explicitly call release() on all DataBuffer extending objects when you are done with them. (internal object: " + toString() + ")");
|
||||
}
|
||||
} finally {
|
||||
super.finalize();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getBoolean(String str, int i, int i2) {
|
||||
zae(str, i);
|
||||
return Long.valueOf(this.zah[i2].getLong(i, this.zab.getInt(str))).longValue() == 1;
|
||||
}
|
||||
|
||||
public byte[] getByteArray(String str, int i, int i2) {
|
||||
zae(str, i);
|
||||
return this.zah[i2].getBlob(i, this.zab.getInt(str));
|
||||
}
|
||||
|
||||
public int getCount() {
|
||||
return this.zad;
|
||||
}
|
||||
|
||||
public int getInteger(String str, int i, int i2) {
|
||||
zae(str, i);
|
||||
return this.zah[i2].getInt(i, this.zab.getInt(str));
|
||||
}
|
||||
|
||||
public long getLong(String str, int i, int i2) {
|
||||
zae(str, i);
|
||||
return this.zah[i2].getLong(i, this.zab.getInt(str));
|
||||
}
|
||||
|
||||
public Bundle getMetadata() {
|
||||
return this.zaj;
|
||||
}
|
||||
|
||||
public int getStatusCode() {
|
||||
return this.zai;
|
||||
}
|
||||
|
||||
public String getString(String str, int i, int i2) {
|
||||
zae(str, i);
|
||||
return this.zah[i2].getString(i, this.zab.getInt(str));
|
||||
}
|
||||
|
||||
public int getWindowIndex(int i) {
|
||||
int length;
|
||||
int i2 = 0;
|
||||
Preconditions.checkState(i >= 0 && i < this.zad);
|
||||
while (true) {
|
||||
int[] iArr = this.zac;
|
||||
length = iArr.length;
|
||||
if (i2 >= length) {
|
||||
break;
|
||||
}
|
||||
if (i < iArr[i2]) {
|
||||
i2--;
|
||||
break;
|
||||
}
|
||||
i2++;
|
||||
}
|
||||
return i2 == length ? i2 - 1 : i2;
|
||||
}
|
||||
|
||||
public boolean hasColumn(String str) {
|
||||
return this.zab.containsKey(str);
|
||||
}
|
||||
|
||||
public boolean hasNull(String str, int i, int i2) {
|
||||
zae(str, i);
|
||||
return this.zah[i2].isNull(i, this.zab.getInt(str));
|
||||
}
|
||||
|
||||
public boolean isClosed() {
|
||||
boolean z;
|
||||
synchronized (this) {
|
||||
z = this.zae;
|
||||
}
|
||||
return z;
|
||||
}
|
||||
|
||||
@Override // android.os.Parcelable
|
||||
public final void writeToParcel(Parcel parcel, int i) {
|
||||
String[] strArr = this.zag;
|
||||
int iBeginObjectHeader = SafeParcelWriter.beginObjectHeader(parcel);
|
||||
SafeParcelWriter.writeStringArray(parcel, 1, strArr, false);
|
||||
SafeParcelWriter.writeTypedArray(parcel, 2, this.zah, i, false);
|
||||
SafeParcelWriter.writeInt(parcel, 3, getStatusCode());
|
||||
SafeParcelWriter.writeBundle(parcel, 4, getMetadata(), false);
|
||||
SafeParcelWriter.writeInt(parcel, 1000, this.zaa);
|
||||
SafeParcelWriter.finishObjectHeader(parcel, iBeginObjectHeader);
|
||||
if ((i & 1) != 0) {
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
public final double zaa(String str, int i, int i2) {
|
||||
zae(str, i);
|
||||
return this.zah[i2].getDouble(i, this.zab.getInt(str));
|
||||
}
|
||||
|
||||
public final float zab(String str, int i, int i2) {
|
||||
zae(str, i);
|
||||
return this.zah[i2].getFloat(i, this.zab.getInt(str));
|
||||
}
|
||||
|
||||
public final void zac(String str, int i, int i2, CharArrayBuffer charArrayBuffer) {
|
||||
zae(str, i);
|
||||
this.zah[i2].copyStringToBuffer(i, this.zab.getInt(str), charArrayBuffer);
|
||||
}
|
||||
|
||||
public final void zad() {
|
||||
this.zab = new Bundle();
|
||||
int i = 0;
|
||||
int i2 = 0;
|
||||
while (true) {
|
||||
String[] strArr = this.zag;
|
||||
if (i2 >= strArr.length) {
|
||||
break;
|
||||
}
|
||||
this.zab.putInt(strArr[i2], i2);
|
||||
i2++;
|
||||
}
|
||||
this.zac = new int[this.zah.length];
|
||||
int numRows = 0;
|
||||
while (true) {
|
||||
CursorWindow[] cursorWindowArr = this.zah;
|
||||
if (i >= cursorWindowArr.length) {
|
||||
this.zad = numRows;
|
||||
return;
|
||||
}
|
||||
this.zac[i] = numRows;
|
||||
numRows += this.zah[i].getNumRows() - (numRows - cursorWindowArr[i].getStartPosition());
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
public DataHolder(Cursor cursor, int i, Bundle bundle) {
|
||||
int startPosition;
|
||||
CursorWrapper cursorWrapper = new CursorWrapper(cursor);
|
||||
String[] columnNames = cursorWrapper.getColumnNames();
|
||||
ArrayList arrayList = new ArrayList();
|
||||
try {
|
||||
int count = cursorWrapper.getCount();
|
||||
CursorWindow window = cursorWrapper.getWindow();
|
||||
if (window == null || window.getStartPosition() != 0) {
|
||||
startPosition = 0;
|
||||
} else {
|
||||
window.acquireReference();
|
||||
cursorWrapper.setWindow(null);
|
||||
arrayList.add(window);
|
||||
startPosition = window.getNumRows();
|
||||
}
|
||||
while (startPosition < count) {
|
||||
if (!cursorWrapper.moveToPosition(startPosition)) {
|
||||
break;
|
||||
}
|
||||
CursorWindow window2 = cursorWrapper.getWindow();
|
||||
if (window2 != null) {
|
||||
window2.acquireReference();
|
||||
cursorWrapper.setWindow(null);
|
||||
} else {
|
||||
window2 = new CursorWindow(false);
|
||||
window2.setStartPosition(startPosition);
|
||||
cursorWrapper.fillWindow(startPosition, window2);
|
||||
}
|
||||
if (window2.getNumRows() == 0) {
|
||||
break;
|
||||
}
|
||||
arrayList.add(window2);
|
||||
startPosition = window2.getStartPosition() + window2.getNumRows();
|
||||
}
|
||||
cursorWrapper.close();
|
||||
this(columnNames, (CursorWindow[]) arrayList.toArray(new CursorWindow[arrayList.size()]), i, bundle);
|
||||
} catch (Throwable th) {
|
||||
cursorWrapper.close();
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
|
||||
private DataHolder(Builder builder, int i, Bundle bundle) {
|
||||
this(builder.zaa, zaf(builder, -1), i, (Bundle) null);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user