BackupFragment.java 源代码


package com.x8zs.ui.task;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import com.x8zs.ds2.R;
import com.x8zs.model.X8DataModel;
import com.x8zs.morgoo.helper.Log;
import com.x8zs.ui.InstallOrInjectFlowActivity;
import com.x8zs.widget.SimpleEmptyView;
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
import o2.f;

public class BackupFragment extends Fragment {
    private c mAdapter;
    private SimpleEmptyView mEmptyView;
    private List<d> mItemList = new ArrayList();
    private ListView mListView;
    private volatile boolean mLoading;

    public class a implements Runnable {

        class C0270a implements FilenameFilter {
            C0270a() {
            }

            @Override
            public boolean accept(File file, String str) {
                if (str.endsWith(".apk") && !str.startsWith("split_")) {
                    return true;
                }
                return false;
            }
        }

        class b implements Runnable {

            final List f22119q;

            b(List list) {
                this.f22119q = list;
            }

            @Override
            public void run() {
                BackupFragment.this.mLoading = false;
                BackupFragment.this.mItemList.clear();
                BackupFragment.this.mItemList.addAll(this.f22119q);
                BackupFragment.this.mAdapter.notifyDataSetChanged();
                BackupFragment.this.updateEmptyViewIfNeeded();
            }
        }

        a() {
        }

        @Override
        public void run() {
            Context context;
            PackageManager packageManager;
            File[] fileArr;
            String str;
            Bitmap bitmapFromDrawable;
            Context context2 = BackupFragment.this.getContext();
            if (context2 == null) {
                return;
            }
            PackageManager packageManager2 = context2.getPackageManager();
            File[] listFiles = new File(new File(Environment.getExternalStorageDirectory(), Log.TAG), "extracted_apk").listFiles(new C0270a());
            ArrayList arrayList = new ArrayList();
            if (listFiles != null) {
                int length = listFiles.length;
                int i6 = 0;
                int i7 = 0;
                while (i7 < length) {
                    File file = listFiles[i7];
                    PackageInfo packageArchiveInfo = packageManager2.getPackageArchiveInfo(file.getAbsolutePath(), 129);
                    if (packageArchiveInfo != null) {
                        String str2 = packageArchiveInfo.packageName;
                        if (str2.endsWith("x8")) {
                            str = packageArchiveInfo.packageName.substring(i6, r11.length() - 2);
                        } else {
                            Bundle bundle = packageArchiveInfo.applicationInfo.metaData;
                            if (bundle != null) {
                                str = bundle.getString("x8_real_app_pkg");
                            } else {
                                str = "";
                            }
                            if (TextUtils.isEmpty(str)) {
                                str = str2;
                            }
                        }
                        ApplicationInfo applicationInfo = packageArchiveInfo.applicationInfo;
                        applicationInfo.sourceDir = file.getAbsolutePath();
                        applicationInfo.publicSourceDir = file.getAbsolutePath();
                        String charSequence = packageManager2.getApplicationLabel(applicationInfo).toString();
                        StringBuilder sb = new StringBuilder();
                        fileArr = listFiles;
                        Object[] objArr = new Object[1];
                        objArr[i6] = packageArchiveInfo.versionName;
                        sb.append(context2.getString(R.string.app_version, objArr));
                        sb.append(" ");
                        Object[] objArr2 = new Object[1];
                        objArr2[i6] = f.q(file.length());
                        sb.append(context2.getString(R.string.app_size, objArr2));
                        String sb2 = sb.toString();
                        Drawable applicationIcon = packageManager2.getApplicationIcon(applicationInfo);
                        if (!(applicationIcon instanceof BitmapDrawable)) {
                            bitmapFromDrawable = BackupFragment.this.getBitmapFromDrawable(applicationIcon);
                        } else {
                            bitmapFromDrawable = ((BitmapDrawable) applicationIcon).getBitmap();
                        }
                        File externalStorageDirectory = Environment.getExternalStorageDirectory();
                        context = context2;
                        StringBuilder sb3 = new StringBuilder();
                        packageManager = packageManager2;
                        sb3.append("x8zs/app_icon/");
                        sb3.append(packageArchiveInfo.packageName);
                        sb3.append(".png");
                        File file2 = new File(externalStorageDirectory, sb3.toString());
                        if (!file2.getParentFile().exists()) {
                            file2.getParentFile().mkdirs();
                        }
                        f.m0(file2, bitmapFromDrawable);
                        String absolutePath = file2.getAbsolutePath();
                        d dVar = new d(null);
                        dVar.f22135b = charSequence;
                        dVar.f22136c = file.getAbsolutePath();
                        dVar.f22137d = sb2;
                        dVar.f22134a = applicationIcon;
                        dVar.f22138e = file.length();
                        dVar.f22139f = str;
                        dVar.f22140g = str2;
                        dVar.f22141h = absolutePath;
                        arrayList.add(dVar);
                    } else {
                        context = context2;
                        packageManager = packageManager2;
                        fileArr = listFiles;
                    }
                    i7++;
                    listFiles = fileArr;
                    context2 = context;
                    packageManager2 = packageManager;
                    i6 = 0;
                }
            }
            new Handler(Looper.getMainLooper()).post(new b(arrayList));
        }
    }

    private class b extends LinearLayout implements View.OnClickListener {

        private ImageView f22121q;

        private TextView f22122r;

        private TextView f22123s;

        private TextView f22124t;

        private ImageView f22125u;

        private Button f22126v;

        private d f22127w;

        public class a implements View.OnClickListener {

            final com.x8zs.widget.a f22129q;

            a(com.x8zs.widget.a aVar) {
                this.f22129q = aVar;
            }

            @Override
            public void onClick(View view) {
                this.f22129q.dismiss();
            }
        }

        public class ViewOnClickListenerC0271b implements View.OnClickListener {

            final com.x8zs.widget.a f22131q;

            ViewOnClickListenerC0271b(com.x8zs.widget.a aVar) {
                this.f22131q = aVar;
            }

            @Override
            public void onClick(View view) {
                new File(b.this.f22127w.f22136c).delete();
                BackupFragment.this.mItemList.remove(b.this.f22127w);
                BackupFragment.this.mAdapter.notifyDataSetChanged();
                BackupFragment.this.updateEmptyViewIfNeeded();
                this.f22131q.dismiss();
            }
        }

        public b(Context context) {
            super(context);
            c();
        }

        private void c() {
            LayoutInflater.from(getContext()).inflate(R.layout.backup_item_view, (ViewGroup) this, true);
            this.f22121q = (ImageView) findViewById(R.id.icon);
            this.f22122r = (TextView) findViewById(R.id.name);
            this.f22123s = (TextView) findViewById(R.id.path);
            this.f22124t = (TextView) findViewById(R.id.desc);
            ImageView imageView = (ImageView) findViewById(R.id.del);
            this.f22125u = imageView;
            imageView.setOnClickListener(this);
            Button button = (Button) findViewById(R.id.btn);
            this.f22126v = button;
            button.setOnClickListener(this);
            setGravity(16);
            setLayoutParams(new AbsListView.LayoutParams(-1, (int) f.l(getContext(), 80.0f)));
        }

        private void d() {
            com.x8zs.widget.a aVar = new com.x8zs.widget.a(getContext());
            aVar.setTitle(R.string.dialog_title_delete);
            aVar.e(R.string.dialog_msg_delete_backup);
            aVar.c(R.string.dialog_button_cancel, new a(aVar));
            aVar.g(R.string.dialog_button_confirm, new ViewOnClickListenerC0271b(aVar));
            aVar.show();
        }

        @SuppressLint({"SdCardPath"})
        public void b(d dVar) {
            this.f22127w = dVar;
            this.f22121q.setImageDrawable(dVar.f22134a);
            this.f22122r.setText(dVar.f22135b);
            this.f22123s.setText(dVar.f22136c.replace("/storage/emulated/0", "/sdcard"));
            this.f22124t.setText(dVar.f22137d);
        }

        @Override
        public void onClick(View view) {
            if (this.f22127w == null) {
                return;
            }
            if (view == this.f22125u) {
                d();
                return;
            }
            if (view == this.f22126v) {
                X8DataModel.AppDataModel doNotUse = X8DataModel.AppDataModel.doNotUse();
                doNotUse.app_name = this.f22127w.f22135b;
                doNotUse.app_icon = "file://" + this.f22127w.f22141h;
                d dVar = this.f22127w;
                doNotUse.app_size = dVar.f22138e;
                doNotUse.app_pkg = dVar.f22139f;
                doNotUse.shell_pkg = dVar.f22140g;
                doNotUse.support_status = 0;
                doNotUse.installed = false;
                doNotUse.packaged = false;
                doNotUse.app_path = dVar.f22136c;
                Intent intent = new Intent(getContext(), (Class<?>) InstallOrInjectFlowActivity.class);
                intent.putExtra("app", doNotUse);
                intent.putExtra("action", 3);
                getContext().startActivity(intent);
                com.x8zs.app.c.b().g(com.x8zs.app.c.f21571n, "from_source", "Backup");
            }
        }
    }

    private class c extends BaseAdapter {
        private c() {
        }

        @Override
        public d getItem(int i6) {
            if (BackupFragment.this.mItemList != null) {
                return (d) BackupFragment.this.mItemList.get(i6);
            }
            return null;
        }

        @Override
        public int getCount() {
            if (BackupFragment.this.mItemList != null) {
                return BackupFragment.this.mItemList.size();
            }
            return 0;
        }

        @Override
        public long getItemId(int i6) {
            return i6;
        }

        @Override
        public View getView(int i6, View view, ViewGroup viewGroup) {
            b bVar;
            if (view == null) {
                BackupFragment backupFragment = BackupFragment.this;
                bVar = new b(backupFragment.getActivity());
            } else {
                bVar = (b) view;
            }
            bVar.b(getItem(i6));
            return bVar;
        }

        c(BackupFragment backupFragment, a aVar) {
            this();
        }
    }

    public static class d {

        public Drawable f22134a;

        public String f22135b;

        public String f22136c;

        public String f22137d;

        public long f22138e;

        public String f22139f;

        public String f22140g;

        public String f22141h;

        private d() {
        }

        d(a aVar) {
            this();
        }
    }

    public Bitmap getBitmapFromDrawable(Drawable drawable) {
        Bitmap createBitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(createBitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
        return createBitmap;
    }

    private void startLoadItems() {
        if (this.mLoading) {
            return;
        }
        this.mLoading = true;
        this.mEmptyView.setVisibility(0);
        this.mEmptyView.b();
        new Thread(new a()).start();
    }

    public void updateEmptyViewIfNeeded() {
        if (this.mItemList.size() > 0) {
            this.mEmptyView.setVisibility(4);
        } else {
            this.mEmptyView.setVisibility(0);
            this.mEmptyView.c(R.string.empty_msg_backup, false, 0, null);
        }
    }

    @Override
    public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
        View inflate = layoutInflater.inflate(R.layout.fragment_backup, viewGroup, false);
        this.mListView = (ListView) inflate.findViewById(R.id.list);
        this.mEmptyView = (SimpleEmptyView) inflate.findViewById(R.id.empty);
        c cVar = new c(this, null);
        this.mAdapter = cVar;
        this.mListView.setAdapter((ListAdapter) cVar);
        return inflate;
    }

    @Override
    public void onStart() {
        super.onStart();
        startLoadItems();
    }
}