Aqara Home v2.4.1版本的 MD5 值为:529779ac2bc0131db52a1fc3098d2b35
以下内容为反编译后的 h.java 源代码,内容仅作参考
package k.t.c.k;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Point;
import android.net.Uri;
import android.util.Base64;
import android.util.Log;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.view.Window;
import android.widget.ScrollView;
import com.facebook.react.bridge.BaseJavaModule;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.NativeViewHierarchyManager;
import com.facebook.react.uimanager.UIBlock;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.WeakHashMap;
import java.util.zip.Deflater;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import s.b3.w.k0;
import s.b3.w.p1;
import s.b3.w.w;
import s.h0;
import s.j2;
@h0(bv = {1, 0, 3}, d1 = {"\u0000z\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\b\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u0002\n\u0002\u0010\u0006\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010 \n\u0002\b\b\u0018\u0000 02\u00020\u0001:\u000201Bo\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0006\u0010\u0004\u001a\u00020\u0005\u0012\b\b\u0001\u0010\u0006\u001a\u00020\u0003\u0012\u0006\u0010\u0007\u001a\u00020\b\u0012\b\u0010\t\u001a\u0004\u0018\u00010\u0003\u0012\b\u0010\n\u001a\u0004\u0018\u00010\u0003\u0012\b\u0010\u000b\u001a\u0004\u0018\u00010\f\u0012\b\b\u0001\u0010\r\u001a\u00020\u0005\u0012\u0006\u0010\u000e\u001a\u00020\u000f\u0012\u0006\u0010\u0010\u001a\u00020\u0011\u0012\u0006\u0010\u0012\u001a\u00020\u0013\u0012\u0006\u0010\u0014\u001a\u00020\u0015¢\u0006\u0002\u0010\u0016J \u0010\u0018\u001a\u00020\u00192\u0006\u0010\u001a\u001a\u00020\u001b2\u0006\u0010\u001c\u001a\u00020\u001d2\u0006\u0010\u001e\u001a\u00020\u001dH\u0002J\u0018\u0010\u001f\u001a\u00020 2\u0006\u0010!\u001a\u00020\u001d2\u0006\u0010\"\u001a\u00020#H\u0002J\u0018\u0010$\u001a\u00020 2\u0006\u0010!\u001a\u00020\u001d2\u0006\u0010\"\u001a\u00020#H\u0002J\u0010\u0010%\u001a\u00020&2\u0006\u0010'\u001a\u00020(H\u0016J\u0016\u0010)\u001a\b\u0012\u0004\u0012\u00020\u001d0*2\u0006\u0010+\u001a\u00020\u001dH\u0002J\u0010\u0010,\u001a\u00020&2\u0006\u0010!\u001a\u00020\u001dH\u0002J\u0010\u0010-\u001a\u00020&2\u0006\u0010!\u001a\u00020\u001dH\u0002J\u0010\u0010.\u001a\u00020&2\u0006\u0010!\u001a\u00020\u001dH\u0002J\u0010\u0010/\u001a\u00020&2\u0006\u0010!\u001a\u00020\u001dH\u0002R\u000e\u0010\u0012\u001a\u00020\u0013X\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0004\u001a\u00020\u0005X\u0082\u0004¢\u0006\u0002\n\u0000R\u0010\u0010\u0006\u001a\u00020\u00038\u0002X\u0083\u0004¢\u0006\u0002\n\u0000R\u0012\u0010\n\u001a\u0004\u0018\u00010\u0003X\u0082\u0004¢\u0006\u0004\n\u0002\u0010\u0017R\u0010\u0010\u000b\u001a\u0004\u0018\u00010\fX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0014\u001a\u00020\u0015X\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0007\u001a\u00020\bX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0010\u001a\u00020\u0011X\u0082\u0004¢\u0006\u0002\n\u0000R\u0010\u0010\r\u001a\u00020\u00058\u0002X\u0083\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u000e\u001a\u00020\u000fX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0002\u001a\u00020\u0003X\u0082\u0004¢\u0006\u0002\n\u0000R\u0012\u0010\t\u001a\u0004\u0018\u00010\u0003X\u0082\u0004¢\u0006\u0004\n\u0002\u0010\u0017¨\u00062"}, d2 = {"Lcom/lumi/arn/widget/ViewShot;", "Lcom/facebook/react/uimanager/UIBlock;", "tag", "", "extension", "", "format", "quality", "", "width", "height", "output", "Ljava/io/File;", "result", "snapshotContentContainer", "", "reactContext", "Lcom/facebook/react/bridge/ReactApplicationContext;", "currentActivity", "Landroid/app/Activity;", BaseJavaModule.METHOD_TYPE_PROMISE, "Lcom/facebook/react/bridge/Promise;", "(ILjava/lang/String;IDLjava/lang/Integer;Ljava/lang/Integer;Ljava/io/File;Ljava/lang/String;ZLcom/facebook/react/bridge/ReactApplicationContext;Landroid/app/Activity;Lcom/facebook/react/bridge/Promise;)V", "Ljava/lang/Integer;", "applyTransformations", "Landroid/graphics/Matrix;", "c", "Landroid/graphics/Canvas;", "root", "Landroid/view/View;", "child", "captureView", "Landroid/graphics/Point;", "view", "os", "Ljava/io/OutputStream;", "captureViewImpl", c0.b.b.b.b, "", "nativeViewHierarchyManager", "Lcom/facebook/react/uimanager/NativeViewHierarchyManager;", "getAllChildren", "", "v", "saveToBase64String", "saveToDataUriString", "saveToRawFileOnDevice", "saveToTempFileOnDevice", "Companion", "ReusableByteArrayOutputStream", "Arn_release"}, k = 1, mv = {1, 1, 16})
public final class h implements UIBlock {
public static final String f19090m;
@NotNull
public static final String f19091n = "E_UNABLE_TO_SNAPSHOT";
public static final int f19092o = 65536;
public static final int f19093p = 4;
public static byte[] f19094q;
public static final Object f19095r;
public static final Set<Bitmap> f19096s;
public static final a f19097t = new a(null);
public final int a;
public final String b;
@c
public final int c;
public final double d;
public final Integer f19098e;
public final Integer f19099f;
public final File f19100g;
@f
public final String f19101h;
public final boolean f19102i;
public final ReactApplicationContext f19103j;
public final Activity f19104k;
public final Promise f19105l;
public static final class a {
public a() {
}
public final <T extends A, A> T a(A a) {
return a;
}
public a(w wVar) {
this();
}
public final Bitmap b(int i2, int i3) {
synchronized (h.f19095r) {
for (Bitmap bitmap : h.f19096s) {
k0.a((Object) bitmap, "bmp");
if (bitmap.getWidth() == i2 && bitmap.getHeight() == i3) {
h.f19096s.remove(bitmap);
bitmap.eraseColor(0);
return bitmap;
}
}
j2 j2Var = j2.a;
Bitmap createBitmap = Bitmap.createBitmap(i2, i3, Bitmap.Config.ARGB_8888);
k0.a((Object) createBitmap, "Bitmap.createBitmap(widt… Bitmap.Config.ARGB_8888)");
return createBitmap;
}
}
public final int a(View view) {
return Math.min(view.getWidth() * view.getHeight() * 4, 32);
}
public final void a(Bitmap bitmap) {
synchronized (h.f19095r) {
h.f19096s.add(bitmap);
}
}
public final Bitmap a(int i2, int i3) {
synchronized (h.f19095r) {
for (Bitmap bitmap : h.f19096s) {
k0.a((Object) bitmap, "bmp");
if (bitmap.getWidth() == i2 && bitmap.getHeight() == i3) {
h.f19096s.remove(bitmap);
bitmap.eraseColor(0);
return bitmap;
}
}
j2 j2Var = j2.a;
Bitmap createBitmap = Bitmap.createBitmap(i2, i3, Bitmap.Config.ARGB_8888);
k0.a((Object) createBitmap, "Bitmap.createBitmap(widt… Bitmap.Config.ARGB_8888)");
return createBitmap;
}
}
}
@h0(bv = {1, 0, 3}, d1 = {"\u0000&\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0012\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\b\n\u0000\n\u0002\u0010\u0002\n\u0002\b\u0005\u0018\u0000 \u000e2\u00020\u0001:\u0001\u000eB\r\u0012\u0006\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004J\u000e\u0010\u0005\u001a\u00020\u00062\u0006\u0010\u0007\u001a\u00020\bJ\u0010\u0010\t\u001a\u00020\n2\u0006\u0010\u000b\u001a\u00020\bH\u0004J\u0006\u0010\f\u001a\u00020\u0003J\u000e\u0010\r\u001a\u00020\n2\u0006\u0010\u0007\u001a\u00020\b¨\u0006\u000f"}, d2 = {"Lcom/lumi/arn/widget/ViewShot$ReusableByteArrayOutputStream;", "Ljava/io/ByteArrayOutputStream;", "buffer", "", "([B)V", "asBuffer", "Ljava/nio/ByteBuffer;", "size", "", "grow", "", "minCapacity", "innerBuffer", "setSize", "Companion", "Arn_release"}, k = 1, mv = {1, 1, 16})
public static final class b extends ByteArrayOutputStream {
public static final int a = 2147483639;
public static final a b = new a(null);
public static final class a {
public a() {
}
public final int a(int i2) {
if (i2 >= 0) {
return i2 > 2147483639 ? Integer.MAX_VALUE : 2147483639;
}
throw new OutOfMemoryError();
}
public a(w wVar) {
this();
}
}
public b(@NotNull byte[] bArr) {
super(0);
k0.f(bArr, "buffer");
((ByteArrayOutputStream) this).buf = bArr;
}
@NotNull
public final byte[] a() {
byte[] bArr = ((ByteArrayOutputStream) this).buf;
k0.a((Object) bArr, "buf");
return bArr;
}
public final void b(int i2) {
int length = ((ByteArrayOutputStream) this).buf.length << 1;
if (length - i2 < 0) {
length = i2;
}
if (length - 2147483639 > 0) {
length = b.a(i2);
}
((ByteArrayOutputStream) this).buf = Arrays.copyOf(((ByteArrayOutputStream) this).buf, length);
}
public final void c(int i2) {
((ByteArrayOutputStream) this).count = i2;
}
@NotNull
public final ByteBuffer a(int i2) {
if (((ByteArrayOutputStream) this).buf.length < i2) {
b(i2);
}
ByteBuffer wrap = ByteBuffer.wrap(((ByteArrayOutputStream) this).buf);
k0.a((Object) wrap, "ByteBuffer.wrap(buf)");
return wrap;
}
}
static {
String simpleName = h.class.getSimpleName();
k0.a((Object) simpleName, "ViewShot::class.java.simpleName");
f19090m = simpleName;
f19094q = new byte[65536];
f19095r = new Object();
f19096s = Collections.newSetFromMap(new WeakHashMap());
}
public h(int i2, @NotNull String str, @c int i3, double d, @Nullable Integer num, @Nullable Integer num2, @Nullable File file, @f @NotNull String str2, boolean z2, @NotNull ReactApplicationContext reactApplicationContext, @NotNull Activity activity, @NotNull Promise promise) {
k0.f(str, "extension");
k0.f(str2, "result");
k0.f(reactApplicationContext, "reactContext");
k0.f(activity, "currentActivity");
k0.f(promise, BaseJavaModule.METHOD_TYPE_PROMISE);
this.a = i2;
this.b = str;
this.c = i3;
this.d = d;
this.f19098e = num;
this.f19099f = num2;
this.f19100g = file;
this.f19101h = str2;
this.f19102i = z2;
this.f19103j = reactApplicationContext;
this.f19104k = activity;
this.f19105l = promise;
}
private final void c(View view) throws IOException {
b bVar = new b(f19094q);
a(view, bVar);
f19094q = bVar.a();
String encodeToString = Base64.encodeToString(f19094q, 0, bVar.size(), 2);
String str = k0.a((Object) "jpg", (Object) this.b) ? "jpeg" : this.b;
Promise promise = this.f19105l;
promise.resolve("data:image/" + str + ";base64," + encodeToString);
}
private final void d(View view) throws IOException {
String uri = Uri.fromFile(this.f19100g).toString();
k0.a((Object) uri, "Uri.fromFile(output).toString()");
FileOutputStream fileOutputStream = new FileOutputStream(this.f19100g);
b bVar = new b(f19094q);
Point a2 = a(view, bVar);
f19094q = bVar.a();
int size = bVar.size();
p1 p1Var = p1.a;
Locale locale = Locale.US;
k0.a((Object) locale, "Locale.US");
String format = String.format(locale, "%d:%d|", Arrays.copyOf(new Object[]{Integer.valueOf(a2.x), Integer.valueOf(a2.y)}, 2));
k0.a((Object) format, "java.lang.String.format(locale, format, *args)");
Charset forName = Charset.forName("US-ASCII");
k0.a((Object) forName, "Charset.forName(\"US-ASCII\")");
if (format != null) {
byte[] bytes = format.getBytes(forName);
k0.a((Object) bytes, "(this as java.lang.String).getBytes(charset)");
fileOutputStream.write(bytes);
fileOutputStream.write(f19094q, 0, size);
fileOutputStream.close();
this.f19105l.resolve(uri);
return;
}
throw new s.p1("null cannot be cast to non-null type java.lang.String");
}
private final void e(View view) throws IOException {
a(view, new FileOutputStream(this.f19100g));
this.f19105l.resolve(Uri.fromFile(this.f19100g).toString());
}
@Override
public void execute(@NotNull NativeViewHierarchyManager nativeViewHierarchyManager) {
View resolveView;
k0.f(nativeViewHierarchyManager, "nativeViewHierarchyManager");
int i2 = this.a;
if (i2 == -1) {
Window window = this.f19104k.getWindow();
k0.a((Object) window, "currentActivity.window");
resolveView = window.getDecorView().findViewById(16908290);
} else {
resolveView = nativeViewHierarchyManager.resolveView(i2);
}
if (resolveView == null) {
String str = f19090m;
Log.e(str, "No view found with reactTag: " + this.a, new AssertionError());
Promise promise = this.f19105l;
promise.reject(f19091n, "No view found with reactTag: " + this.a);
return;
}
try {
b bVar = new b(f19094q);
bVar.c(f19097t.a(resolveView));
f19094q = bVar.a();
if (k0.a((Object) "tmpfile", (Object) this.f19101h) && -1 == this.c) {
d(resolveView);
} else if (k0.a((Object) "tmpfile", (Object) this.f19101h) && -1 != this.c) {
e(resolveView);
} else {
if (!k0.a((Object) "base64", (Object) this.f19101h) && !k0.a((Object) "zip-base64", (Object) this.f19101h)) {
if (k0.a((Object) "data-uri", (Object) this.f19101h)) {
c(resolveView);
}
}
b(resolveView);
}
} catch (Throwable th) {
Log.e(f19090m, "Failed to capture view snapshot", th);
this.f19105l.reject(f19091n, "Failed to capture view snapshot");
}
}
private final List<View> a(View view) {
if (!(view instanceof ViewGroup)) {
ArrayList arrayList = new ArrayList();
arrayList.add(view);
return arrayList;
}
ArrayList arrayList2 = new ArrayList();
ViewGroup viewGroup = (ViewGroup) view;
int childCount = viewGroup.getChildCount();
for (int i2 = 0; i2 < childCount; i2++) {
View childAt = viewGroup.getChildAt(i2);
k0.a((Object) childAt, "child");
arrayList2.addAll(a(childAt));
}
return arrayList2;
}
private final void b(View view) throws IOException {
String str;
boolean z2 = -1 == this.c;
boolean a2 = k0.a((Object) "zip-base64", (Object) this.f19101h);
b bVar = new b(f19094q);
Point a3 = a(view, bVar);
f19094q = bVar.a();
int size = bVar.size();
p1 p1Var = p1.a;
Locale locale = Locale.US;
k0.a((Object) locale, "Locale.US");
String format = String.format(locale, "%d:%d|", Arrays.copyOf(new Object[]{Integer.valueOf(a3.x), Integer.valueOf(a3.y)}, 2));
k0.a((Object) format, "java.lang.String.format(locale, format, *args)");
if (!z2) {
format = "";
}
if (a2) {
Deflater deflater = new Deflater();
deflater.setInput(f19094q, 0, size);
deflater.finish();
b bVar2 = new b(new byte[32]);
byte[] bArr = new byte[1024];
while (!deflater.finished()) {
bVar2.write(bArr, 0, deflater.deflate(bArr));
}
str = format + Base64.encodeToString(bVar2.a(), 0, bVar2.size(), 2);
} else {
str = format + Base64.encodeToString(f19094q, 0, size, 2);
}
this.f19105l.resolve(str);
}
private final Point a(View view, OutputStream outputStream) throws IOException {
try {
k.t.c.k.b.c.a(f19090m, k.t.c.k.b.c.a(this.f19104k));
return b(view, outputStream);
} finally {
outputStream.close();
}
}
private final Matrix a(Canvas canvas, View view, View view2) {
Matrix matrix = new Matrix();
LinkedList linkedList = new LinkedList();
View view3 = view2;
do {
linkedList.add(view3);
ViewParent parent = view3.getParent();
if (parent == null) {
throw new s.p1("null cannot be cast to non-null type android.view.View");
}
view3 = (View) parent;
} while (view3 != view);
Collections.reverse(linkedList);
Iterator it = linkedList.iterator();
while (it.hasNext()) {
View view4 = (View) it.next();
canvas.save();
if (view4 == null) {
k0.f();
}
k0.a((Object) view4, "v!!");
int i2 = 0;
float left = view4.getLeft() + (view4 != view2 ? view4.getPaddingLeft() : 0) + view4.getTranslationX();
int top2 = view4.getTop();
if (view4 != view2) {
i2 = view4.getPaddingTop();
}
float translationY = top2 + i2 + view4.getTranslationY();
canvas.translate(left, translationY);
canvas.rotate(view4.getRotation(), view4.getPivotX(), view4.getPivotY());
canvas.scale(view4.getScaleX(), view4.getScaleY());
matrix.postTranslate(left, translationY);
matrix.postRotate(view4.getRotation(), view4.getPivotX(), view4.getPivotY());
matrix.postScale(view4.getScaleX(), view4.getScaleY());
}
return matrix;
}
private final Point b(View view, OutputStream outputStream) {
Integer num;
int width = view.getWidth();
int height = view.getHeight();
if (width > 0 && height > 0) {
boolean z2 = false;
if (this.f19102i) {
if (view != null) {
ScrollView scrollView = (ScrollView) view;
int childCount = scrollView.getChildCount();
int i2 = 0;
for (int i3 = 0; i3 < childCount; i3++) {
View childAt = scrollView.getChildAt(i3);
k0.a((Object) childAt, "scrollView.getChildAt(i)");
i2 += childAt.getHeight();
}
height = i2;
} else {
throw new s.p1("null cannot be cast to non-null type android.widget.ScrollView");
}
}
Point point = new Point(width, height);
Bitmap a2 = f19097t.a(width, height);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
Canvas canvas = new Canvas(a2);
view.draw(canvas);
for (View view2 : a(view)) {
if ((view2 instanceof TextureView) && view2.getVisibility() == 0) {
TextureView textureView = (TextureView) view2;
textureView.setOpaque(z2);
Bitmap bitmap = textureView.getBitmap(f19097t.b(view2.getWidth(), view2.getHeight()));
int save = canvas.save();
a(canvas, view, view2);
canvas.drawBitmap(bitmap, 0.0f, 0.0f, paint);
canvas.restoreToCount(save);
a aVar = f19097t;
k0.a((Object) bitmap, "childBitmapBuffer");
aVar.a(bitmap);
}
z2 = false;
}
Integer num2 = this.f19098e;
if (num2 != null && this.f19099f != null && (num2 == null || num2.intValue() != width || (num = this.f19099f) == null || num.intValue() != height)) {
Bitmap createScaledBitmap = Bitmap.createScaledBitmap(a2, this.f19098e.intValue(), this.f19099f.intValue(), true);
f19097t.a(a2);
k0.a((Object) createScaledBitmap, "scaledBitmap");
a2 = createScaledBitmap;
}
if (-1 == this.c && (outputStream instanceof b)) {
int i4 = width * height * 4;
b bVar = (b) f19097t.a((a) outputStream);
a2.copyPixelsToBuffer(bVar.a(i4));
bVar.c(i4);
} else {
a2.compress(c.R.a()[this.c], (int) (this.d * 100.0d), outputStream);
}
f19097t.a(a2);
return point;
}
throw new RuntimeException("Impossible to snapshot the view: view is invalid");
}
}