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