导航菜单

页面标题

页面副标题

Betterhalf.ai v5.1.1 - Utils.java 源代码

正在查看: Betterhalf.ai v5.1.1 应用的 Utils.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.reactnativecompressor.Utils;

import android.content.ContentResolver;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.reactnativecompressor.Audio.AudioCompressor;
import com.reactnativecompressor.Video.VideoCompressor.CompressionListener;
import com.reactnativecompressor.Video.VideoCompressor.VideoCompressorClass;
import expo.modules.av.player.PlayerData;
import expo.modules.constants.ExponentInstallationId;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.regex.Pattern;
import kotlin.Metadata;
import kotlin.jvm.JvmStatic;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.StringCompanionObject;
import kotlin.text.Regex;
import kotlin.text.StringsKt;

@Metadata(d1 = {"\u0000`\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0000\n\u0002\u0010%\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0010\u0011\n\u0002\b\u0004\n\u0002\u0010\u0002\n\u0002\b\u0007\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0010\u0007\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0007\n\u0002\u0010\t\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0007\bÆ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\u000e\u0010\u0011\u001a\u00020\u00122\u0006\u0010\u0013\u001a\u00020\u0004J\u000e\u0010\u0014\u001a\u00020\u00122\u0006\u0010\u0015\u001a\u00020\u0004JP\u0010\u0016\u001a\u00020\u00122\u0006\u0010\u0017\u001a\u00020\u00042\u0006\u0010\u0018\u001a\u00020\u00042\u0006\u0010\u0019\u001a\u00020\u001a2\u0006\u0010\u001b\u001a\u00020\u001a2\u0006\u0010\u001c\u001a\u00020\u001d2\u0006\u0010\u0015\u001a\u00020\u00042\u0006\u0010\u001e\u001a\u00020\u001a2\u0006\u0010\u001f\u001a\u00020 2\u0006\u0010!\u001a\u00020\"H\u0007J\u0018\u0010#\u001a\u00020\u00042\u0006\u0010$\u001a\u00020\u00042\u0006\u0010!\u001a\u00020\"H\u0007J\u001e\u0010%\u001a\u00020\u00122\u0006\u0010&\u001a\u00020\u00042\u0006\u0010\u001f\u001a\u00020 2\u0006\u0010!\u001a\u00020\"J\u0012\u0010'\u001a\u00020\u001a2\b\u0010(\u001a\u0004\u0018\u00010\u0004H\u0007J\u0016\u0010)\u001a\u00020*2\u0006\u0010+\u001a\u00020,2\u0006\u0010-\u001a\u00020.J9\u0010/\u001a\u0004\u0018\u00010\u00042\b\u00100\u001a\u0004\u0018\u00010\u00042\u0006\u0010!\u001a\u00020\"2\u0016\u00101\u001a\f\u0012\b\b\u0001\u0012\u0004\u0018\u00010\u00010\r\"\u0004\u0018\u00010\u0001H\u0007¢\u0006\u0002\u00102J\u0012\u00103\u001a\u0004\u0018\u00010\u00042\b\u00104\u001a\u0004\u0018\u00010\u0004R\u000e\u0010\u0003\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000R(\u0010\u0005\u001a\u0010\u0012\u0004\u0012\u00020\u0004\u0012\u0006\u0012\u0004\u0018\u00010\u00070\u0006X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\b\u0010\t\"\u0004\b\n\u0010\u000bR\u0019\u0010\f\u001a\b\u0012\u0004\u0012\u00020\u00040\r¢\u0006\n\n\u0002\u0010\u0010\u001a\u0004\b\u000e\u0010\u000f¨\u00065"}, d2 = {"Lcom/reactnativecompressor/Utils/Utils;", "", "()V", "TAG", "", "compressorExports", "", "Lcom/reactnativecompressor/Video/VideoCompressor/VideoCompressorClass;", "getCompressorExports", "()Ljava/util/Map;", "setCompressorExports", "(Ljava/util/Map;)V", "exifAttributes", "", "getExifAttributes", "()[Ljava/lang/String;", "[Ljava/lang/String;", "addLog", "", "log", "cancelCompressionHelper", ExponentInstallationId.LEGACY_UUID_KEY, "compressVideo", "srcPath", "destinationPath", "resultWidth", "", "resultHeight", "videoBitRate", "", "progressDivider", "promise", "Lcom/facebook/react/bridge/Promise;", "reactContext", "Lcom/facebook/react/bridge/ReactApplicationContext;", "generateCacheFilePath", "extension", "getFileSize", "filePath", "getFileSizeFromURL", "urlString", "getLength", "", PlayerData.STATUS_URI_KEY_PATH, "Landroid/net/Uri;", "contentResolver", "Landroid/content/ContentResolver;", "getRealPath", "fileUrl", "args", "(Ljava/lang/String;Lcom/facebook/react/bridge/ReactApplicationContext;[Ljava/lang/Object;)Ljava/lang/String;", "slashifyFilePath", "path", "react-native-compressor_release"}, k = 1, mv = {1, 8, 0}, xi = 48)
public final class Utils {
    private static final String TAG = "react-native-compessor";
    public static final Utils INSTANCE = new Utils();
    private static Map<String, VideoCompressorClass> compressorExports = new HashMap();
    private static final String[] exifAttributes = {"FNumber", "ApertureValue", "Artist", "BitsPerSample", "BrightnessValue", "CFAPattern", "ColorSpace", "ComponentsConfiguration", "CompressedBitsPerPixel", "Compression", "Contrast", "Copyright", "CustomRendered", "DateTime", "DateTimeDigitized", "DateTimeOriginal", "DefaultCropSize", "DeviceSettingDescription", "DigitalZoomRatio", "DNGVersion", "ExifVersion", "ExposureBiasValue", "ExposureIndex", "ExposureMode", "ExposureProgram", "ExposureTime", "FileSource", "Flash", "FlashpixVersion", "FlashEnergy", "FocalLength", "FocalLengthIn35mmFilm", "FocalPlaneResolutionUnit", "FocalPlaneXResolution", "FocalPlaneYResolution", "FNumber", "GainControl", "GPSAltitude", "GPSAltitudeRef", "GPSAreaInformation", "GPSDateStamp", "GPSDestBearing", "GPSDestBearingRef", "GPSDestDistance", "GPSDestDistanceRef", "GPSDestLatitude", "GPSDestLatitudeRef", "GPSDestLongitude", "GPSDestLongitudeRef", "GPSDifferential", "GPSDOP", "GPSImgDirection", "GPSImgDirectionRef", "GPSLatitude", "GPSLatitudeRef", "GPSLongitude", "GPSLongitudeRef", "GPSMapDatum", "GPSMeasureMode", "GPSProcessingMethod", "GPSSatellites", "GPSSpeed", "GPSSpeedRef", "GPSStatus", "GPSTimeStamp", "GPSTrack", "GPSTrackRef", "GPSVersionID", "ImageDescription", "ImageLength", "ImageUniqueID", "ImageWidth", "InteroperabilityIndex", "ISOSpeedRatings", "ISOSpeedRatings", "JPEGInterchangeFormat", "JPEGInterchangeFormatLength", "LightSource", "Make", "MakerNote", "MaxApertureValue", "MeteringMode", "Model", "NewSubfileType", "OECF", "AspectFrame", "PreviewImageLength", "PreviewImageStart", "ThumbnailImage", "Orientation", "PhotometricInterpretation", "PixelXDimension", "PixelYDimension", "PlanarConfiguration", "PrimaryChromaticities", "ReferenceBlackWhite", "RelatedSoundFile", "ResolutionUnit", "RowsPerStrip", "ISO", "JpgFromRaw", "SensorBottomBorder", "SensorLeftBorder", "SensorRightBorder", "SensorTopBorder", "SamplesPerPixel", "Saturation", "SceneCaptureType", "SceneType", "SensingMethod", "Sharpness", "ShutterSpeedValue", "Software", "SpatialFrequencyResponse", "SpectralSensitivity", "StripByteCounts", "StripOffsets", "SubfileType", "SubjectArea", "SubjectDistance", "SubjectDistanceRange", "SubjectLocation", "SubSecTime", "SubSecTimeDigitized", "SubSecTimeDigitized", "SubSecTimeOriginal", "SubSecTimeOriginal", "ThumbnailImageLength", "ThumbnailImageWidth", "TransferFunction", "UserComment", "WhiteBalance", "WhitePoint", "XResolution", "YCbCrCoefficients", "YCbCrPositioning", "YCbCrSubSampling", "YResolution"};

    private Utils() {
    }

    public final Map<String, VideoCompressorClass> getCompressorExports() {
        return compressorExports;
    }

    public final void setCompressorExports(Map<String, VideoCompressorClass> map) {
        Intrinsics.checkNotNullParameter(map, "<set-?>");
        compressorExports = map;
    }

    @JvmStatic
    public static final String generateCacheFilePath(String extension, ReactApplicationContext reactContext) {
        Intrinsics.checkNotNullParameter(extension, "extension");
        Intrinsics.checkNotNullParameter(reactContext, "reactContext");
        File cacheDir = reactContext.getCacheDir();
        StringCompanionObject stringCompanionObject = StringCompanionObject.INSTANCE;
        String format = String.format("%s/%s." + extension, Arrays.copyOf(new Object[]{cacheDir.getPath(), UUID.randomUUID().toString()}, 2));
        Intrinsics.checkNotNullExpressionValue(format, "format(format, *args)");
        return format;
    }

    @JvmStatic
    public static final void compressVideo(String srcPath, final String destinationPath, int resultWidth, int resultHeight, float videoBitRate, final String uuid, final int progressDivider, final Promise promise, ReactApplicationContext reactContext) {
        Intrinsics.checkNotNullParameter(srcPath, "srcPath");
        Intrinsics.checkNotNullParameter(destinationPath, "destinationPath");
        Intrinsics.checkNotNullParameter(uuid, ExponentInstallationId.LEGACY_UUID_KEY);
        Intrinsics.checkNotNullParameter(promise, "promise");
        Intrinsics.checkNotNullParameter(reactContext, "reactContext");
        final int[] iArr = {0};
        VideoCompressorClass videoCompressorClass = new VideoCompressorClass(reactContext);
        compressorExports.put(uuid, videoCompressorClass);
        videoCompressorClass.start(srcPath, destinationPath, resultWidth, resultHeight, (int) videoBitRate, new CompressionListener() {
            @Override
            public void onStart(int index) {
            }

            @Override
            public void onProgress(int index, float percent) {
                if (percent <= 100.0f) {
                    int round = Math.round(percent);
                    int i = progressDivider;
                    if (i == 0 || (round % i == 0 && round > iArr[0])) {
                        EventEmitterHandler.INSTANCE.emitVideoCompressProgress(percent / 100, uuid);
                        iArr[0] = round;
                    }
                }
            }

            @Override
            public void onSuccess(int index, long size, String path) {
                String str = "file://" + destinationPath;
                promise.resolve(str);
                MediaCache.removeCompletedImagePath(str);
                iArr[0] = 0;
                Utils.INSTANCE.getCompressorExports().put(uuid, null);
            }

            @Override
            public void onFailure(int index, String failureMessage) {
                Intrinsics.checkNotNullParameter(failureMessage, "failureMessage");
                Log.wtf("failureMessage", failureMessage);
                promise.reject(new Throwable(failureMessage));
                iArr[0] = 0;
            }

            @Override
            public void onCancelled(int index) {
                Log.wtf("TAG", "compression has been cancelled");
                promise.reject(new Throwable("compression has been cancelled"));
                iArr[0] = 0;
            }
        });
    }

    public final void cancelCompressionHelper(String uuid) {
        Intrinsics.checkNotNullParameter(uuid, ExponentInstallationId.LEGACY_UUID_KEY);
        try {
            VideoCompressorClass videoCompressorClass = compressorExports.get(uuid);
            if (videoCompressorClass != null) {
                videoCompressorClass.cancel();
            }
            compressorExports.put(uuid, null);
        } catch (Exception unused) {
        }
    }

    @kotlin.jvm.JvmStatic
    public static final int getFileSizeFromURL(java.lang.String r3) {
        throw new UnsupportedOperationException("Method not decompiled: com.reactnativecompressor.Utils.Utils.getFileSizeFromURL(java.lang.String):int");
    }

    @JvmStatic
    public static final String getRealPath(String fileUrl, ReactApplicationContext reactContext, Object... args) {
        Intrinsics.checkNotNullParameter(reactContext, "reactContext");
        Intrinsics.checkNotNullParameter(args, "args");
        Intrinsics.checkNotNull(fileUrl);
        int i = 0;
        if (StringsKt.startsWith$default(fileUrl, "content://", false, 2, (Object) null)) {
            try {
                Uri parse = Uri.parse(fileUrl);
                RealPathUtil realPathUtil = RealPathUtil.INSTANCE;
                Intrinsics.checkNotNullExpressionValue(parse, PlayerData.STATUS_URI_KEY_PATH);
                fileUrl = realPathUtil.getRealPath(reactContext, parse);
            } catch (Exception unused) {
                Log.d(TAG, " Please see this issue: https://github.com/numandev1/react-native-compressor/issues/25");
            }
        } else if (StringsKt.startsWith$default(fileUrl, "http://", false, 2, (Object) null) || StringsKt.startsWith$default(fileUrl, "https://", false, 2, (Object) null)) {
            String valueOf = args.length > 0 ? String.valueOf(args[0]) : "";
            if (args.length > 1) {
                Object obj = args[1];
                Intrinsics.checkNotNull(obj, "null cannot be cast to non-null type kotlin.Int");
                i = ((Integer) obj).intValue();
            }
            fileUrl = Downloader.INSTANCE.downloadMediaWithProgress(fileUrl, valueOf, i, reactContext);
            Log.d(TAG, "getRealPath: " + fileUrl);
        }
        return INSTANCE.slashifyFilePath(fileUrl);
    }

    public final void getFileSize(String filePath, Promise promise, ReactApplicationContext reactContext) {
        Intrinsics.checkNotNullParameter(filePath, "filePath");
        Intrinsics.checkNotNullParameter(promise, "promise");
        Intrinsics.checkNotNullParameter(reactContext, "reactContext");
        if (StringsKt.startsWith$default(filePath, "http://", false, 2, (Object) null) || StringsKt.startsWith$default(filePath, "https://", false, 2, (Object) null)) {
            promise.resolve(Integer.valueOf(getFileSizeFromURL(filePath)));
            return;
        }
        Uri parse = Uri.parse(getRealPath(filePath, reactContext, new Object[0]));
        ContentResolver contentResolver = reactContext.getContentResolver();
        Intrinsics.checkNotNullExpressionValue(parse, PlayerData.STATUS_URI_KEY_PATH);
        Intrinsics.checkNotNullExpressionValue(contentResolver, "contentResolver");
        long length = getLength(parse, contentResolver);
        if (length >= 0) {
            promise.resolve(String.valueOf(length));
        } else {
            promise.resolve("");
        }
    }

    public final String slashifyFilePath(String path) {
        if (path == null) {
            return null;
        }
        if (StringsKt.startsWith$default(path, "file:///", false, 2, (Object) null)) {
            return path;
        }
        if (StringsKt.startsWith$default(path, "/", false, 2, (Object) null)) {
            return new Regex("^/+").replaceFirst(path, "file:///");
        }
        return Pattern.compile("^file:/*").matcher(path).replaceAll("file:///");
    }

    public final void addLog(String log) {
        Intrinsics.checkNotNullParameter(log, "log");
        Log.d(AudioCompressor.INSTANCE.getTAG(), log);
    }

    public final String[] getExifAttributes() {
        return exifAttributes;
    }

    public final long getLength(Uri uri, ContentResolver contentResolver) {
        AssetFileDescriptor assetFileDescriptor;
        Cursor query;
        Intrinsics.checkNotNullParameter(uri, PlayerData.STATUS_URI_KEY_PATH);
        Intrinsics.checkNotNullParameter(contentResolver, "contentResolver");
        try {
            assetFileDescriptor = contentResolver.openAssetFileDescriptor(uri, "r");
        } catch (FileNotFoundException unused) {
            assetFileDescriptor = null;
        }
        long j = -1;
        long length = assetFileDescriptor != null ? assetFileDescriptor.getLength() : -1L;
        if (length != -1) {
            return length;
        }
        if (Intrinsics.areEqual(FirebaseAnalytics.Param.CONTENT, uri.getScheme()) && (query = contentResolver.query(uri, new String[]{"_size"}, null, null, null)) != null) {
            try {
                int columnIndex = query.getColumnIndex("_size");
                if (columnIndex != -1) {
                    if (query.moveToFirst()) {
                        try {
                            j = query.getLong(columnIndex);
                        } catch (Throwable unused2) {
                        }
                        return j;
                    }
                }
            } finally {
                query.close();
            }
        }
        return -1L;
    }
}