正在查看: Betterhalf.ai v5.1.1 应用的 Utils.java JAVA 源代码文件
本页面展示 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;
}
}