正在查看: xDrip+ v04633772025.07.16 应用的 SdcardImportExport.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: xDrip+ v04633772025.07.16 应用的 SdcardImportExport.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.eveningoutpost.dexdrip.utils;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Environment;
import android.os.Process;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.eveningoutpost.dexdrip.BaseAppCompatActivity;
import com.eveningoutpost.dexdrip.GcmActivity;
import com.eveningoutpost.dexdrip.Home;
import com.eveningoutpost.dexdrip.models.AlertType;
import com.eveningoutpost.dexdrip.models.JoH;
import com.eveningoutpost.dexdrip.receiver.InfoContentProvider;
import com.eveningoutpost.dexdrip.utilitymodels.Pref;
import com.eveningoutpost.dexdrip.xdrip;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class SdcardImportExport extends BaseAppCompatActivity {
public static final String PREFERENCES_FILE = "shared_prefs/" + xdrip.getAppContext().getString(2131755767) + "_preferences.xml";
private static boolean backupDismissed;
public static boolean deleteFolder(File file, boolean z) {
try {
Log.d("jamorham sdcard", "deleteFolder called with: " + file.toString());
if (file.exists()) {
File[] listFiles = file.listFiles();
if (listFiles == null) {
return true;
}
for (File file2 : listFiles) {
if (z && file2.isDirectory()) {
deleteFolder(file2, z);
} else {
Log.d("jamorham sdcard", "Calling delete for file: " + file2.getName());
file2.delete();
}
}
}
return file.delete();
} catch (Exception e) {
Log.e("jamorham sdcard", "Got exception in delete: " + e.toString());
return false;
}
}
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(2131492937);
JoH.fixActionBar(this);
if (getIntent().getStringExtra("backup") != null) {
savePreferencesToSD(null);
finish();
}
}
private boolean checkPermissions() {
return checkPermissions(this, true, 104);
}
public static boolean checkPermissions(Activity activity, boolean z, int i) {
if (ContextCompat.checkSelfPermission(activity, "android.permission.WRITE_EXTERNAL_STORAGE") == 0) {
return true;
}
if (!z) {
return false;
}
ActivityCompat.requestPermissions(activity, new String[]{"android.permission.WRITE_EXTERNAL_STORAGE"}, i);
return false;
}
public void savePreferencesToSD(View view) {
if (savePreferencesToSD()) {
toast(getString(2131756142));
} else if (checkPermissions(this, false, 104)) {
toast(getString(2131755387));
}
}
public static void hardReset() {
JoH.wakeUpIntent(xdrip.getAppContext(), 4000L, Home.getHomePendingIntent());
hardReset_orig();
}
public static void hardReset_orig() {
GcmActivity.last_sync_request = 0L;
Process.killProcess(Process.myPid());
}
public static void forceGMSreset() {
Context appContext = xdrip.getAppContext();
for (String str : "shared_prefs/com.google.android.gms.measurement.prefs.xml,shared_prefs/com.google.android.gms.appid.xml,databases/google_app_measurement.db,databases/google_app_measurement.db-journal".split(",")) {
if (deleteFolder(new File(appContext.getFilesDir().getParent() + "/" + str), false)) {
Log.d("jamorham sdcard", "Successfully deleted: " + str);
} else {
Log.e("jamorham sdcard", "Error deleting: " + str);
}
}
hardReset();
}
public static void deletePersistentStore() {
if (deleteFolder(new File(xdrip.getAppContext().getFilesDir().getParent() + "/shared_prefs/persist_internal_store.xml"), false)) {
Log.d("jamorham sdcard", "Successfully deleted: shared_prefs/persist_internal_store.xml");
} else {
Log.e("jamorham sdcard", "Error deleting: shared_prefs/persist_internal_store.xml");
}
hardReset();
}
public void loadPreferencesToSD(View view) {
if (checkPermissions()) {
if (loadPreferencesFromSD()) {
JoH.static_toast_short(getString(2131755765));
hardReset();
} else {
JoH.static_toast_short(getString(2131755385));
}
}
}
public static void storePreferencesFromBytes(byte[] bArr, Context context) {
if (dataFromBytes(bArr, PREFERENCES_FILE, context)) {
InfoContentProvider.ping("pref");
Log.i("jamorham sdcard", "Restarting as new preferences loaded from bytes");
hardReset();
return;
}
Log.e("jamorham sdcard", "Failed to write preferences from bytes");
}
public void deletePreferencesOnSD(View view) {
if (!isExternalStorageWritable()) {
toast(getString(2131755558));
} else if (deleteFolder(new File(getCustomSDcardpath()), false)) {
toast(getString(2131756433));
} else {
toast(getString(2131755425));
}
}
public static byte[] getPreferencesFileAsBytes(Context context) {
return dataToBytes(PREFERENCES_FILE, context);
}
public boolean savePreferencesToSD() {
if (isExternalStorageWritable()) {
boolean settings = AlertType.toSettings(getApplicationContext());
if (settings) {
settings = dataToSDcopy(PREFERENCES_FILE);
}
Pref.setString("saved_alerts", "");
return settings;
}
toast(getString(2131756238));
return false;
}
public boolean loadPreferencesFromSD() {
if (isExternalStorageWritable()) {
return dataFromSDcopy(PREFERENCES_FILE);
}
toast(getString(2131756237));
return false;
}
private boolean isExternalStorageWritable() {
String externalStorageState = Environment.getExternalStorageState();
checkPermissions();
return "mounted".equals(externalStorageState);
}
private static String getCustomSDcardpath() {
return Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/xDrip-export";
}
private static String getxDripCustomSDcardpath() {
return FileUtils.getExternalDir() + "/settingsExport";
}
private static byte[] dataToBytes(String str, Context context) {
try {
return directReadFile(new File(context.getFilesDir().getParent() + "/" + str));
} catch (Exception e) {
Log.e("jamorham sdcard", "Got exception in datatoBytes: " + e.toString());
return null;
}
}
private boolean dataToSDcopy(String str) {
File file = new File(getFilesDir().getParent() + "/" + str);
String customSDcardpath = getCustomSDcardpath();
try {
new File(customSDcardpath).mkdirs();
if (!directCopyFile(file, new File(customSDcardpath, file.getName()))) {
return false;
}
Log.i("jamorham sdcard", "Copied success: " + str);
return true;
} catch (Exception unused) {
Log.e("jamorham sdcard", "Error making directory: " + customSDcardpath);
return false;
}
}
public static boolean handleBackup(final Activity activity) {
List<String> findAnyBackups = findAnyBackups(activity);
if (backupDismissed || findAnyBackups == null || findAnyBackups.size() <= 0) {
return false;
}
Log.e("jamorham sdcard", "Found: " + findAnyBackups.size() + " backup files");
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle(xdrip.gs(2131755197));
builder.setMessage(xdrip.gs(2131755720));
builder.setNegativeButton(2131755900, new DialogInterface.OnClickListener() {
@Override
public final void onClick(DialogInterface dialogInterface, int i) {
SdcardImportExport.lambda$handleBackup$0(dialogInterface, i);
}
});
builder.setPositiveButton(xdrip.gs(2131756211), new DialogInterface.OnClickListener() {
@Override
public final void onClick(DialogInterface dialogInterface, int i) {
SdcardImportExport.lambda$handleBackup$1(activity, dialogInterface, i);
}
});
builder.create().show();
return true;
}
public static void lambda$handleBackup$0(DialogInterface dialogInterface, int i) {
backupDismissed = true;
dialogInterface.dismiss();
}
public static void lambda$handleBackup$1(Activity activity, DialogInterface dialogInterface, int i) {
if (checkPermissions(activity, true, 9104)) {
restoreSettingsNow(activity);
} else {
handleBackup(activity);
}
dialogInterface.dismiss();
}
public static void restoreSettingsNow(Activity activity) {
List<String> findAnyBackups = findAnyBackups(activity);
if (findAnyBackups == null || findAnyBackups.size() <= 0) {
return;
}
JoH.static_toast_long("Restoring Settings");
if (copyPreferencesFileBack(activity, findAnyBackups.get(0))) {
Log.e("jamorham sdcard", "Restoring preferences succeeded from first match: " + findAnyBackups.get(0));
InfoContentProvider.ping("pref");
hardReset();
return;
}
JoH.static_toast_long("Couldn't restore preferences from: " + findAnyBackups.get(0));
}
private static List<String> findAnyBackups(Context context) {
ArrayList arrayList = new ArrayList();
File file = new File(context.getFilesDir().getParent() + "/" + PREFERENCES_FILE);
File file2 = new File(getCustomSDcardpath() + "/" + file.getName());
File file3 = new File(getxDripCustomSDcardpath() + "/" + file.getName());
if (file2.exists()) {
arrayList.add(file2.getAbsolutePath());
}
if (file3.exists()) {
arrayList.add(file3.getAbsolutePath());
}
for (String str : listAllDirectories("/storage", 2)) {
StringBuilder sb = new StringBuilder();
sb.append(str);
sb.append("/");
sb.append("xDrip-export");
sb.append("/");
String str2 = PREFERENCES_FILE;
sb.append(str2);
String sb2 = sb.toString();
String str3 = str + "/" + str2;
if (new File(sb2).exists()) {
arrayList.add(sb2);
}
if (new File(str3).exists()) {
arrayList.add(str3);
}
}
return arrayList;
}
public static List<String> listAllDirectories(String str, int i) {
ArrayList arrayList = new ArrayList();
Log.d("jamorham sdcard", "Processing scan for directory: " + str + " depth: " + i);
try {
File[] listFiles = new File(str).listFiles();
int i2 = i - 1;
if (listFiles != null) {
for (File file : listFiles) {
if (file.isDirectory()) {
arrayList.add(file.getAbsolutePath());
if (i2 > 0) {
arrayList.addAll(listAllDirectories(file.getAbsolutePath(), i2));
}
}
}
}
} catch (Exception e) {
Log.d("jamorham sdcard", "Got exception walking directories: " + e);
}
return arrayList;
}
private static boolean copyPreferencesFileBack(Context context, String str) {
File file = new File(context.getFilesDir().getParent() + "/" + PREFERENCES_FILE);
File file2 = new File(str);
if (file2.exists()) {
try {
file.mkdirs();
if (directCopyFile(file2, file)) {
Log.i("jamorham sdcard", "Copied success: " + str);
return true;
}
} catch (Exception unused) {
Log.e("jamorham sdcard", "Error making directory: " + file.toString());
return false;
}
} else {
Log.e("jamorham sdcard", "Weirdly " + str + " doesn't seem to exist or failed to copy somehow! " + file.getAbsolutePath());
}
return false;
}
private boolean dataFromSDcopy(String str) {
File file = new File(getFilesDir().getParent() + "/" + str);
File file2 = new File(getCustomSDcardpath() + "/" + file.getName());
File file3 = new File(getxDripCustomSDcardpath() + "/" + file.getName());
Log.d("jamorham sdcard", file2.toString() + " or " + file3.toString() + " to: " + file.toString());
if (file2.exists() && file3.exists()) {
toast(getString(2131757020));
} else if (file3.exists()) {
toast(getString(2131755766));
file2 = file3;
}
try {
file.mkdirs();
if (!directCopyFile(file2, file)) {
return false;
}
Log.i("jamorham sdcard", "Copied success: " + str);
return true;
} catch (Exception unused) {
Log.e("jamorham sdcard", "Error making directory: " + file.toString());
return false;
}
}
private static boolean directCopyFile(File file, File file2) {
Log.i("jamorham sdcard", "Attempt to copy: " + file.toString() + " to " + file2.toString());
try {
FileInputStream fileInputStream = new FileInputStream(file);
FileOutputStream fileOutputStream = new FileOutputStream(file2);
byte[] bArr = new byte[8192];
while (true) {
int read = fileInputStream.read(bArr);
if (read != -1) {
fileOutputStream.write(bArr, 0, read);
} else {
fileInputStream.close();
fileOutputStream.flush();
fileOutputStream.close();
return true;
}
}
} catch (Exception e) {
Log.e("jamorham sdcard", e.getMessage());
return false;
}
}
private static byte[] directReadFile(File file) {
Log.i("jamorham sdcard", "Attempt to read: " + file.toString());
try {
FileInputStream fileInputStream = new FileInputStream(file);
int length = (int) file.length();
byte[] bArr = new byte[length];
fileInputStream.read(bArr);
fileInputStream.close();
Log.d("jamorham sdcard", "Read file size: " + length);
return bArr;
} catch (Exception e) {
Log.e("jamorham sdcard", e.getMessage());
return null;
}
}
private static boolean dataFromBytes(byte[] bArr, String str, Context context) {
if (bArr == null || bArr.length == 0) {
Log.e("jamorham sdcard", "Got zero bytes in datafrom bytes");
return false;
}
File file = new File(context.getFilesDir().getParent() + "/" + str);
try {
FileOutputStream fileOutputStream = new FileOutputStream(file);
fileOutputStream.write(bArr);
fileOutputStream.close();
return true;
} catch (Exception e) {
Log.e("jamorham sdcard", "Error writing file: " + file.toString() + " " + e.toString());
return false;
}
}
private void toast(String str) {
try {
Toast.makeText(getApplicationContext(), str, 0).show();
Log.d("jamorham sdcard", "Toast msg: " + str);
} catch (Exception unused) {
Log.e("jamorham sdcard", "Couldn't display toast: " + str);
}
}
public void closeButton(View view) {
finish();
}
}