QQ浏览器 v12.2.3.7053版本的 MD5 值为:8285ab3059e5c8b521a264dfbc5c3685

以下内容为反编译后的 ThirdFileOpenManager.java 源代码,内容仅作参考


package com.tencent.mtt.browser.file.open.third;

import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.system.ErrnoException;
import android.text.TextUtils;
import android.util.Log;
import com.tencent.common.utils.FdToFilePath;
import com.tencent.common.utils.LogUtils;
import com.tencent.mtt.browser.utils.FileLog;
import com.tencent.mtt.compliance.MethodDelegate;
import com.tencent.mtt.external.reader.thirdcall.FileThirdUtils;
import java.io.File;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Iterator;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.Ref;
import kotlin.text.StringsKt;

public final class ThirdFileOpenManager {

    public static final ThirdFileOpenManager f38644a = new ThirdFileOpenManager();

    private ThirdFileOpenManager() {
    }

    private final Uri a(Uri uri, int i) {
        if (i <= 0 || uri == null) {
            return null;
        }
        String uri2 = uri.toString();
        Intrinsics.checkExpressionValueIsNotNull(uri2, "orgUri.toString()");
        if (TextUtils.isEmpty(uri2)) {
            return null;
        }
        return Uri.parse(StringsKt.replace$default(uri2, "content://", "content://" + i + '@', false, 4, (Object) null));
    }

    private final String a(Context context, StringBuilder sb, ArrayList<Integer> arrayList, Uri uri, String str, String str2) {
        String str3 = (String) null;
        if (arrayList != null && arrayList.size() > 0) {
            Iterator<Integer> it = arrayList.iterator();
            while (it.hasNext()) {
                Integer uid = it.next();
                Intrinsics.checkExpressionValueIsNotNull(uid, "uid");
                Uri a2 = a(uri, uid.intValue());
                if (a2 != null) {
                    str3 = a(a2, str, str2, context, sb);
                }
                if (!TextUtils.isEmpty(str3)) {
                    break;
                }
            }
        }
        return str3;
    }

    private final String a(Uri uri, String str, Context context, StringBuilder sb) {
        Cursor cursor;
        Cursor cursor2;
        Cursor cursor3 = null;
        if (uri == null || context == null || TextUtils.isEmpty(uri.toString())) {
            String[] strArr = new String[2];
            strArr[0] = "ThirdUriTransfer";
            StringBuilder sb2 = new StringBuilder();
            sb2.append("cannot transfer, context null:");
            sb2.append(context == null);
            sb2.append(", uri:");
            sb2.append(uri);
            strArr[1] = sb2.toString();
            FileLog.a(strArr);
            return null;
        }
        Cursor cursor4 = (Cursor) null;
        try {
            try {
                sb.append("Uri:into");
                cursor = MethodDelegate.query(context.getContentResolver(), uri, new String[]{"_data"}, null, null, null);
                if (cursor != null) {
                    try {
                        cursor.moveToFirst();
                        int columnIndex = cursor.getColumnIndex("_data");
                        sb.append(columnIndex);
                        if (columnIndex > -1) {
                            String string = cursor.getString(columnIndex);
                            if (FileThirdUtils.a(string)) {
                                sb.append("cursor:1");
                                cursor.close();
                                a(cursor);
                                return string;
                            }
                            FileLog.a("ThirdUriTransfer", "read cursor from 1: file cannot read:" + string);
                        }
                        cursor.close();
                    } catch (Exception e) {
                        e = e;
                        FileLog.a("ThirdUriTransfer", "read cursor error from 1:" + Log.getStackTraceString(e));
                        e.printStackTrace(System.err);
                        a(cursor);
                        try {
                            cursor2 = MethodDelegate.query(context.getContentResolver(), uri, null, null, null, null);
                            if (cursor2 != null) {
                            }
                            a(cursor2);
                            sb.append("ifsp:exits");
                            return a(context, uri, sb, str);
                        } catch (Throwable th) {
                            th = th;
                            a(cursor);
                            throw th;
                        }
                    }
                }
            } catch (Throwable th2) {
                th = th2;
                a(cursor3);
                throw th;
            }
        } catch (Exception e2) {
            e = e2;
            cursor = cursor4;
        } catch (Throwable th3) {
            th = th3;
            cursor3 = cursor4;
            a(cursor3);
            throw th;
        }
        a(cursor);
        try {
            cursor2 = MethodDelegate.query(context.getContentResolver(), uri, null, null, null, null);
            if (cursor2 != null) {
                try {
                    cursor2.moveToFirst();
                    String columnName = cursor2.getColumnName(0);
                    if (!TextUtils.isEmpty(columnName)) {
                        String string2 = cursor2.getString(cursor2.getColumnIndex(columnName));
                        if (FileThirdUtils.a(string2)) {
                            sb.append("cursor:2");
                            cursor2.close();
                            a(cursor2);
                            return string2;
                        }
                        FileLog.a("ThirdUriTransfer", "read cursor from 2: file cannot read:" + string2);
                    }
                    cursor2.close();
                } catch (Exception e3) {
                    e = e3;
                    e.printStackTrace(System.err);
                    FileLog.a("ThirdUriTransfer", "read cursor from 2: file cannot read:" + Log.getStackTraceString(e));
                    a(cursor2);
                    sb.append("ifsp:exits");
                    return a(context, uri, sb, str);
                }
            }
        } catch (Exception e4) {
            e = e4;
            cursor2 = cursor4;
        } catch (Throwable th4) {
            th = th4;
            cursor = cursor4;
            a(cursor);
            throw th;
        }
        a(cursor2);
        sb.append("ifsp:exits");
        return a(context, uri, sb, str);
    }

    private final String a(Uri uri, String str, String str2, Context context, StringBuilder sb) {
        try {
            sb.append("transfer:into");
            String b2 = b(uri, str, str2, context, sb);
            if (b2 == null) {
                b2 = "";
            }
            ContentResolver contentResolver = context.getContentResolver();
            if (uri == null) {
                Intrinsics.throwNpe();
            }
            InputStream openInputStream = contentResolver.openInputStream(uri);
            if (openInputStream == null) {
                Intrinsics.throwNpe();
            }
            long available = openInputStream.available();
            sb.append(",transfer:fileSize=" + available);
            if (new File(b2).length() == available) {
                openInputStream.close();
                return b2;
            }
            sb.append(",transfer:dat=" + uri);
            if (a(openInputStream, b2, sb)) {
                return b2;
            }
            return null;
        } catch (IOException e) {
            e.printStackTrace(System.err);
            sb.append(",transfer:IoExce=" + e.getMessage());
            FileLog.a("ThirdUriTransfer", "transfer write IOException:" + Log.getStackTraceString(e));
            return null;
        } catch (Exception e2) {
            e2.printStackTrace(System.err);
            sb.append(",transfer:IExce=" + e2.getMessage());
            FileLog.a("ThirdUriTransfer", "transfer write Exception:" + Log.getStackTraceString(e2));
            return null;
        }
    }

    private final void a(Intent intent, String str) {
        LogUtils.a("setIntentNewData", "path:" + str);
        Uri fromFile = Uri.fromFile(new File(str));
        LogUtils.a("setIntentNewData", "newDataUri:" + fromFile);
        String type = intent.getType();
        if (type != null) {
            Intrinsics.checkExpressionValueIsNotNull(intent.setDataAndType(fromFile, type), "intent.setDataAndType(newDataUri, dataType)");
        } else {
            intent.setData(fromFile);
        }
    }

    private final void a(Cursor cursor) {
        if (cursor != null) {
            try {
                if (cursor.isClosed()) {
                    return;
                }
                cursor.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    private final boolean a(Context context, Intent intent) {
        StringBuilder sb = new StringBuilder();
        String stringExtra = intent.getStringExtra("toPath");
        if (stringExtra == null) {
            stringExtra = "";
        }
        new File(stringExtra).mkdirs();
        String d2 = d(intent, context, sb);
        if (d2 == null) {
            d2 = "";
        }
        LogUtils.a("transferContentUri", "tmpFilePath:" + d2);
        LogUtils.a("transferContentUri", "tmpFilePath record:" + ((Object) sb));
        intent.putExtra("intent_exception", sb.toString());
        if (TextUtils.isEmpty(d2)) {
            return a(intent, context, sb);
        }
        a(intent, d2);
        return true;
    }

    private final String b(Uri uri, String str, String str2, Context context, StringBuilder sb) {
        String str3 = "";
        String[] strArr = {"_display_name"};
        Cursor cursor = (Cursor) null;
        try {
            try {
                ContentResolver contentResolver = context.getContentResolver();
                if (uri == null) {
                    Intrinsics.throwNpe();
                }
                cursor = MethodDelegate.query(contentResolver, uri, strArr, null, null, null);
                if (cursor != null && cursor.getCount() != 0) {
                    int columnIndexOrThrow = cursor.getColumnIndexOrThrow("_display_name");
                    sb.append("transfer:idx=" + columnIndexOrThrow);
                    cursor.moveToFirst();
                    String string = cursor.getString(columnIndexOrThrow);
                    Intrinsics.checkExpressionValueIsNotNull(string, "cursor.getString(columnIndex)");
                    str3 = string;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }

    private final boolean b(Intent intent, Context context, StringBuilder sb) {
        if (FileThirdUtils.a(intent.getDataString())) {
            return true;
        }
        FileLog.a("ThirdUriTransfer", "file cannot read, do transfer");
        String a2 = a(intent.getData(), intent.getType(), context, sb);
        if (a2 == null) {
            a2 = "";
        }
        LogUtils.a("transferUri", "after convertUriToPath record:" + ((Object) sb));
        if (TextUtils.isEmpty(a2)) {
            return false;
        }
        a(intent, a2);
        return true;
    }

    private final boolean c(Intent intent, Context context, StringBuilder sb) {
        String stringExtra = intent.getStringExtra("toPath");
        if (stringExtra == null) {
            stringExtra = "";
        }
        ArrayList<Integer> b2 = FileThirdUtils.b(stringExtra);
        Uri data = intent.getData();
        String type = intent.getType();
        String stringExtra2 = intent.getStringExtra("toPath");
        String a2 = a(context, sb, b2, data, type, stringExtra2 != null ? stringExtra2 : "");
        if (a2 == null) {
            a2 = "";
        }
        if (TextUtils.isEmpty(a2)) {
            return false;
        }
        a(intent, a2);
        return true;
    }

    private final String d(Intent intent, Context context, StringBuilder sb) {
        Uri data = intent.getData();
        String type = intent.getType();
        String stringExtra = intent.getStringExtra("toPath");
        if (stringExtra == null) {
            stringExtra = "";
        }
        return a(data, type, stringExtra, context, sb);
    }

    public final String a(Context context, Uri uri, StringBuilder record, String str) {
        Intrinsics.checkParameterIsNotNull(context, "context");
        Intrinsics.checkParameterIsNotNull(uri, "uri");
        Intrinsics.checkParameterIsNotNull(record, "record");
        ParcelFileDescriptor parcelFileDescriptor = (ParcelFileDescriptor) null;
        FileDescriptor fileDescriptor = (FileDescriptor) null;
        try {
            parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r");
            record.append("pfd:");
            record.append(parcelFileDescriptor != null);
            if (parcelFileDescriptor != null) {
                fileDescriptor = parcelFileDescriptor.getFileDescriptor();
            }
        } catch (Throwable th) {
            record.append("pfd:exception=");
            record.append(th.getMessage());
            FileLog.a("ThirdUriTransfer", "pfd:exception:" + Log.getStackTraceString(th));
        }
        return a(fileDescriptor, parcelFileDescriptor, record, str);
    }

    public final String a(FileDescriptor fileDescriptor, ParcelFileDescriptor parcelFileDescriptor, StringBuilder record, String str) {
        String a2;
        Intrinsics.checkParameterIsNotNull(record, "record");
        if (fileDescriptor == null) {
            if (parcelFileDescriptor != null) {
                try {
                    parcelFileDescriptor.close();
                } catch (Exception unused) {
                }
            }
            record.append("fd:null");
            FileLog.a("ThirdUriTransfer", "fd is null");
            return null;
        }
        try {
            try {
                try {
                    try {
                        Field declaredField = fileDescriptor.getClass().getDeclaredField("descriptor");
                        Intrinsics.checkExpressionValueIsNotNull(declaredField, "classType.getDeclaredField(\"descriptor\")");
                        declaredField.setAccessible(true);
                        Object obj = declaredField.get(fileDescriptor);
                        String str2 = "";
                        if ((obj instanceof Integer) && (a2 = FdToFilePath.a(((Number) obj).intValue())) != null) {
                            str2 = a2;
                        }
                        boolean a3 = FileThirdUtils.a(str2);
                        record.append("FdToFile:isLocal=" + a3);
                        if (a3) {
                            record.append("FdToFile:len=" + new File(str2).length());
                            if (str != null) {
                                record.append("FdToFile:type=" + str);
                            }
                            if (parcelFileDescriptor == null) {
                                try {
                                    Intrinsics.throwNpe();
                                } catch (Exception unused2) {
                                }
                            }
                            parcelFileDescriptor.close();
                            return str2;
                        }
                        FileLog.a("ThirdUriTransfer", "FdToFile failed: cannot read path:" + str2);
                    } catch (NoSuchFieldException e) {
                        e.printStackTrace(System.err);
                        record.append("FdToFile:Nofile=" + e.getMessage());
                        FileLog.a("ThirdUriTransfer", "FdToFile failed: " + Log.getStackTraceString(e));
                    }
                } catch (IllegalAccessException e2) {
                    e2.printStackTrace(System.err);
                    record.append("FdToFile:Illegalfile=" + e2.getMessage());
                    FileLog.a("ThirdUriTransfer", "FdToFile failed: " + Log.getStackTraceString(e2));
                    if (parcelFileDescriptor == null) {
                        try {
                            Intrinsics.throwNpe();
                        } catch (Exception unused3) {
                            return null;
                        }
                    }
                    parcelFileDescriptor.close();
                    return null;
                }
            } catch (ErrnoException e3) {
                e3.printStackTrace(System.err);
                record.append("FdToFile:ErrnoException=");
                record.append(e3.getMessage());
                FileLog.a("ThirdUriTransfer", "FdToFile failed: " + Log.getStackTraceString(e3));
                if (parcelFileDescriptor == null) {
                    Intrinsics.throwNpe();
                }
                parcelFileDescriptor.close();
                return null;
            }
        } catch (Throwable th) {
            if (parcelFileDescriptor == null) {
                try {
                    Intrinsics.throwNpe();
                } catch (Exception unused4) {
                    throw th;
                }
            }
            parcelFileDescriptor.close();
            throw th;
        }
    }

    public final boolean a(Intent intent, Context context) {
        if (context == null || intent == null) {
            return false;
        }
        if (TextUtils.isEmpty(intent.getDataString())) {
            FileLog.a("ThirdUriTransfer", "intent no data");
            return false;
        }
        if (b(intent, context, new StringBuilder())) {
            return true;
        }
        return a(context, intent);
    }

    public final boolean a(Intent intent, Context context, StringBuilder record) {
        Intrinsics.checkParameterIsNotNull(intent, "intent");
        Intrinsics.checkParameterIsNotNull(context, "context");
        Intrinsics.checkParameterIsNotNull(record, "record");
        FileLog.a("ThirdUriTransfer", "generateTmpFile failed: path is null, using UID");
        try {
            boolean c2 = c(intent, context, record);
            if (!c2) {
                FileLog.a("ThirdUriTransfer", "transferPathByUid failed");
            }
            return c2;
        } catch (Exception e) {
            record.append(",transferPathByUid:" + e.getMessage());
            FileLog.a("ThirdUriTransfer", "transferPathByUid:" + Log.getStackTraceString(e));
            return false;
        }
    }

    public final boolean a(InputStream ins, String tempFilePath, StringBuilder record) {
        FileOutputStream fileOutputStream;
        Intrinsics.checkParameterIsNotNull(ins, "ins");
        Intrinsics.checkParameterIsNotNull(tempFilePath, "tempFilePath");
        Intrinsics.checkParameterIsNotNull(record, "record");
        FileOutputStream fileOutputStream2 = (FileOutputStream) null;
        try {
            try {
                fileOutputStream = new FileOutputStream(tempFilePath);
            } catch (Exception e) {
                e = e;
            }
        } catch (Throwable th) {
            th = th;
        }
        try {
            Ref.IntRef intRef = new Ref.IntRef();
            byte[] bArr = new byte[10240];
            long j = 0;
            while (true) {
                int read = ins.read(bArr, 0, 10240);
                intRef.element = read;
                if (read == -1) {
                    record.append(",transfer:count=" + j);
                    ins.close();
                    fileOutputStream.close();
                    return true;
                }
                fileOutputStream.write(bArr, 0, intRef.element);
                j += intRef.element;
            }
        } catch (Exception e2) {
            e = e2;
            fileOutputStream2 = fileOutputStream;
            e.printStackTrace(System.err);
            record.append(",transfer:writeExce=" + e.getMessage());
            FileLog.a("ThirdUriTransfer", "transfer write error:" + Log.getStackTraceString(e));
            ins.close();
            if (fileOutputStream2 != null) {
                fileOutputStream2.close();
            }
            return false;
        } catch (Throwable th2) {
            th = th2;
            fileOutputStream2 = fileOutputStream;
            ins.close();
            if (fileOutputStream2 != null) {
                fileOutputStream2.close();
            }
            throw th;
        }
    }
}