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");
    }
}