正在查看: Plus 12 v10.13.1.1 应用的 FilesMigrationService.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Plus 12 v10.13.1.1 应用的 FilesMigrationService.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package org.telegram.messenger;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Environment;
import android.os.IBinder;
import android.text.TextUtils;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import j$.util.function.Consumer;
import j$.util.stream.Stream;
import j$.wrappers.$r8;
import java.io.File;
import java.nio.file.CopyOption;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.util.ArrayList;
import org.telegram.messenger.FilesMigrationService;
import org.telegram.ui.ActionBar.BaseFragment;
import org.telegram.ui.ActionBar.BottomSheet;
import org.telegram.ui.ActionBar.PlusSettings;
import org.telegram.ui.ActionBar.Theme;
import org.telegram.ui.Components.LayoutHelper;
import org.telegram.ui.Components.StickerImageView;
public class FilesMigrationService extends Service {
public static FilesMigrationBottomSheet filesMigrationBottomSheet = null;
public static boolean hasOldFolder = false;
public static boolean inverted = false;
public static boolean isRunning = false;
private static boolean wasShown = false;
public long lastUpdateTime;
private int movedFilesCount;
private int totalFilesCount;
@Override
public IBinder onBind(Intent intent) {
return null;
}
public static void start() {
ApplicationLoader.applicationContext.startService(new Intent(ApplicationLoader.applicationContext, (Class<?>) FilesMigrationService.class));
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
NotificationsController.checkOtherNotificationsChannel();
Notification build = new Notification.Builder(this, NotificationsController.OTHER_NOTIFICATIONS_CHANNEL).setContentTitle(getText(R.string.MigratingFiles)).setAutoCancel(false).setSmallIcon(R.drawable.notification).build();
isRunning = true;
new AnonymousClass1().start();
startForeground(301, build);
return super.onStartCommand(intent, flags, startId);
}
public class AnonymousClass1 extends Thread {
public AnonymousClass1() {
}
@Override
public void run() {
FilesMigrationService.this.migrateOldFolder();
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public final void run() {
FilesMigrationService.AnonymousClass1.this.lambda$run$0();
}
});
}
public void lambda$run$0() {
FilesMigrationService.isRunning = false;
FilesMigrationService.this.stopForeground(true);
FilesMigrationService.this.stopSelf();
}
}
public void migrateOldFolder() {
ArrayList rootDirs;
File externalStorageDirectory = Environment.getExternalStorageDirectory();
if (Build.VERSION.SDK_INT >= 19 && !TextUtils.isEmpty(SharedConfig.storageCacheDir) && (rootDirs = AndroidUtilities.getRootDirs()) != null) {
int size = rootDirs.size();
int i = 0;
while (true) {
if (i >= size) {
break;
}
File file = (File) rootDirs.get(i);
if (file.getAbsolutePath().startsWith(SharedConfig.storageCacheDir)) {
externalStorageDirectory = file;
break;
}
i++;
}
}
File externalFilesDir = ApplicationLoader.applicationContext.getExternalFilesDir(null);
File file2 = new File(externalFilesDir, PlusSettings.usePlusFolder() ? "Plus" : "Telegram");
File file3 = new File(externalStorageDirectory, PlusSettings.usePlusFolder() ? "Plus" : "Telegram");
if (inverted) {
String str = PlusSettings.usePlusFolder() ? "Plus" : "Telegram";
file2 = new File(externalStorageDirectory, str);
file3 = new File(externalFilesDir, str);
}
this.totalFilesCount = getFilesCount(file3);
long currentTimeMillis = System.currentTimeMillis();
if (file3.canRead() && file3.canWrite()) {
moveDirectory(file3, file2);
}
FileLog.d("move time = " + (System.currentTimeMillis() - currentTimeMillis));
ApplicationLoader.applicationContext.getSharedPreferences("systemConfig", 0).edit().putBoolean("migration_to_scoped_storage_finished", true).apply();
}
private int getFilesCount(File source) {
File[] listFiles;
if (!source.exists() || (listFiles = source.listFiles()) == null) {
return 0;
}
int i = 0;
for (int i2 = 0; i2 < listFiles.length; i2++) {
i = listFiles[i2].isDirectory() ? i + getFilesCount(listFiles[i2]) : i + 1;
}
return i;
}
private void moveDirectory(File source, final File target) {
if (source.exists()) {
if (target.exists() || target.mkdir()) {
try {
Stream convert = $r8.wrapper.java.util.stream.Stream.-V-WRP.convert(Files.list(source.toPath()));
try {
convert.forEach(new Consumer() {
public final void accept(Object obj) {
FilesMigrationService.this.lambda$moveDirectory$0(target, (Path) obj);
}
public Consumer andThen(Consumer consumer) {
return Consumer.-CC.$default$andThen(this, consumer);
}
});
convert.close();
} finally {
}
} catch (Exception e) {
FileLog.e(e);
}
try {
source.delete();
} catch (Exception e2) {
FileLog.e(e2);
}
}
}
}
public void lambda$moveDirectory$0(File file, Path path) {
File file2 = new File(file, path.getFileName().toString());
if (Files.isDirectory(path, new LinkOption[0])) {
moveDirectory(path.toFile(), file2);
return;
}
try {
Files.move(path, file2.toPath(), new CopyOption[0]);
} catch (Exception e) {
FileLog.e(e, false);
try {
path.toFile().delete();
} catch (Exception e2) {
FileLog.e(e2);
}
}
this.movedFilesCount++;
updateProgress();
}
private void updateProgress() {
if (System.currentTimeMillis() - this.lastUpdateTime > 20 || this.movedFilesCount >= this.totalFilesCount - 1) {
final int i = this.movedFilesCount;
AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public final void run() {
FilesMigrationService.this.lambda$updateProgress$1(i);
}
});
}
}
public void lambda$updateProgress$1(int i) {
((NotificationManager) getSystemService("notification")).notify(301, new Notification.Builder(this, NotificationsController.OTHER_NOTIFICATIONS_CHANNEL).setContentTitle(getText(R.string.MigratingFiles)).setContentText(String.format("%s/%s", Integer.valueOf(i), Integer.valueOf(this.totalFilesCount))).setSmallIcon(R.drawable.notification).setAutoCancel(false).setProgress(this.totalFilesCount, i, false).build());
}
public static void startService(BaseFragment fragment) {
inverted = PlusSettings.useExternalStorage();
if (isRunning) {
return;
}
FilesMigrationBottomSheet filesMigrationBottomSheet2 = new FilesMigrationBottomSheet(fragment);
filesMigrationBottomSheet = filesMigrationBottomSheet2;
filesMigrationBottomSheet2.migrateOldFolder();
}
public static void showBottomSheet(BaseFragment fragment) {
inverted = PlusSettings.useExternalStorage();
if (isRunning) {
return;
}
FilesMigrationBottomSheet filesMigrationBottomSheet2 = new FilesMigrationBottomSheet(fragment);
filesMigrationBottomSheet = filesMigrationBottomSheet2;
filesMigrationBottomSheet2.show();
wasShown = true;
}
public static void checkBottomSheet(BaseFragment fragment) {
ArrayList rootDirs;
SharedPreferences sharedPreferences = ApplicationLoader.applicationContext.getSharedPreferences("systemConfig", 0);
if (!Environment.isExternalStorageLegacy() || sharedPreferences.getBoolean("migration_to_scoped_storage_finished", false) || sharedPreferences.getInt("migration_to_scoped_storage_count", 0) >= 5 || wasShown || filesMigrationBottomSheet != null || isRunning) {
return;
}
if (Build.VERSION.SDK_INT >= 30) {
File externalStorageDirectory = Environment.getExternalStorageDirectory();
if (!TextUtils.isEmpty(SharedConfig.storageCacheDir) && (rootDirs = AndroidUtilities.getRootDirs()) != null) {
int size = rootDirs.size();
int i = 0;
while (true) {
if (i >= size) {
break;
}
File file = (File) rootDirs.get(i);
if (file.getAbsolutePath().startsWith(SharedConfig.storageCacheDir)) {
externalStorageDirectory = file;
break;
}
i++;
}
}
hasOldFolder = new File(externalStorageDirectory, PlusSettings.usePlusFolder() ? "Plus" : "Telegram").exists();
}
if (hasOldFolder || inverted) {
FilesMigrationBottomSheet filesMigrationBottomSheet2 = new FilesMigrationBottomSheet(fragment);
filesMigrationBottomSheet = filesMigrationBottomSheet2;
filesMigrationBottomSheet2.show();
wasShown = true;
sharedPreferences.edit().putInt("migration_to_scoped_storage_count", sharedPreferences.getInt("migration_to_scoped_storage_count", 0) + 1).apply();
return;
}
sharedPreferences.edit().putBoolean("migration_to_scoped_storage_finished", true).apply();
}
public static class FilesMigrationBottomSheet extends BottomSheet {
public BaseFragment fragment;
public boolean canDismissWithSwipe() {
return false;
}
public boolean canDismissWithTouchOutside() {
return false;
}
public FilesMigrationBottomSheet(BaseFragment fragment) {
super(fragment.getParentActivity(), false);
this.fragment = fragment;
setCanceledOnTouchOutside(false);
Activity parentActivity = fragment.getParentActivity();
LinearLayout linearLayout = new LinearLayout(parentActivity);
linearLayout.setOrientation(1);
StickerImageView stickerImageView = new StickerImageView(parentActivity, ((BottomSheet) this).currentAccount);
stickerImageView.setStickerNum(7);
stickerImageView.getImageReceiver().setAutoRepeat(1);
linearLayout.addView(stickerImageView, LayoutHelper.createLinear(144, 144, 1, 0, 16, 0, 0));
TextView textView = new TextView(parentActivity);
textView.setGravity(8388611);
int i = Theme.key_dialogTextBlack;
textView.setTextColor(Theme.getColor(i));
textView.setTextSize(1, 20.0f);
textView.setTypeface(AndroidUtilities.bold());
textView.setText(LocaleController.getString("MigrateOldFolderTitle", R.string.MigrateOldFolderTitle));
linearLayout.addView(textView, LayoutHelper.createFrame(-1, -2.0f, 0, 21.0f, 30.0f, 21.0f, 0.0f));
TextView textView2 = new TextView(parentActivity);
textView2.setGravity(8388611);
textView2.setTextSize(1, 15.0f);
textView2.setTextColor(Theme.getColor(i));
textView2.setText(AndroidUtilities.replaceTags(LocaleController.getString("MigrateOldFolderDescription", R.string.MigrateOldFolderDescription)));
linearLayout.addView(textView2, LayoutHelper.createFrame(-1, -2.0f, 0, 21.0f, 15.0f, 21.0f, 16.0f));
TextView textView3 = new TextView(parentActivity);
textView3.setPadding(AndroidUtilities.dp(34.0f), 0, AndroidUtilities.dp(34.0f), 0);
textView3.setGravity(17);
textView3.setTextSize(1, 14.0f);
textView3.setTypeface(AndroidUtilities.bold());
textView3.setText(LocaleController.getString("MigrateOldFolderButton", R.string.MigrateOldFolderButton));
textView3.setTextColor(Theme.getColor(Theme.key_featuredStickers_buttonText));
textView3.setBackground(Theme.AdaptiveRipple.filledRectByKey(Theme.key_featuredStickers_addButton, new float[]{6.0f}));
linearLayout.addView(textView3, LayoutHelper.createFrame(-1, 48.0f, 0, 16.0f, 15.0f, 16.0f, 16.0f));
textView3.setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view) {
FilesMigrationService.FilesMigrationBottomSheet.this.lambda$new$0(view);
}
});
ScrollView scrollView = new ScrollView(parentActivity);
scrollView.addView(linearLayout);
setCustomView(scrollView);
}
public void lambda$new$0(View view) {
migrateOldFolder();
}
public void migrateOldFolder() {
BaseFragment baseFragment = this.fragment;
if (baseFragment == null || baseFragment.getParentActivity() == null) {
return;
}
Activity parentActivity = this.fragment.getParentActivity();
boolean z = true;
boolean z2 = parentActivity.checkSelfPermission("android.permission.WRITE_EXTERNAL_STORAGE") == 0;
int i = Build.VERSION.SDK_INT;
if ((i < 33 || parentActivity.checkSelfPermission("android.permission.READ_MEDIA_IMAGES") != 0 || parentActivity.checkSelfPermission("android.permission.READ_MEDIA_VIDEO") != 0 || parentActivity.checkSelfPermission("android.permission.READ_MEDIA_AUDIO") != 0) && (i >= 33 || parentActivity.checkSelfPermission("android.permission.READ_EXTERNAL_STORAGE") != 0)) {
z = false;
}
if (!z || !z2) {
ArrayList arrayList = new ArrayList();
if (!z) {
if (i >= 33) {
arrayList.add("android.permission.READ_MEDIA_IMAGES");
arrayList.add("android.permission.READ_MEDIA_VIDEO");
arrayList.add("android.permission.READ_MEDIA_AUDIO");
} else {
arrayList.add("android.permission.READ_EXTERNAL_STORAGE");
}
}
if (!z2) {
arrayList.add("android.permission.WRITE_EXTERNAL_STORAGE");
}
parentActivity.requestPermissions((String[]) arrayList.toArray(new String[arrayList.size()]), 4);
return;
}
FilesMigrationService.start();
dismiss();
}
public void dismiss() {
try {
if (!FilesMigrationService.inverted) {
super.dismiss();
}
} catch (Exception e) {
FileLog.e(e);
}
FilesMigrationService.filesMigrationBottomSheet = null;
}
}
}