From d57617656fe4640c7559de6342c1cb3ff036b033 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Thu, 26 Aug 2021 19:22:25 +0800 Subject: [PATCH] [core] Fix #1013 (#1014) Co-authored-by: vvb2060 --- .../lspd/service/ConfigFileManager.java | 45 ++++++++++--------- .../lsposed/lspd/service/ConfigManager.java | 21 ++++++++- 2 files changed, 44 insertions(+), 22 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java b/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java index bd8d8e16..1e82ae9a 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java @@ -50,29 +50,32 @@ class ConfigFileManager { } } + static void deleteFolderIfExists(Path target) throws IOException { + if (!Files.exists(target)) return; + Files.walkFileTree(target, new SimpleFileVisitor<>() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) + throws IOException { + Files.delete(file); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(Path dir, IOException e) + throws IOException { + if (e == null) { + Files.delete(dir); + return FileVisitResult.CONTINUE; + } else { + throw e; + } + } + }); + } + private static void moveFolderIfExists(Path source, Path target) throws IOException { if (!Files.exists(source)) return; - if (Files.exists(target)) { - Files.walkFileTree(target, new SimpleFileVisitor<>() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) - throws IOException { - Files.delete(file); - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult postVisitDirectory(Path dir, IOException e) - throws IOException { - if (e == null) { - Files.delete(dir); - return FileVisitResult.CONTINUE; - } else { - throw e; - } - } - }); - } + deleteFolderIfExists(target); Files.move(source, target); } diff --git a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java index beeeaa0e..16817c6d 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -736,6 +736,13 @@ public class ConfigManager { db.setTransactionSuccessful(); db.endTransaction(); } + try { + for (var user : UserService.getUsers()) { + removeModulePrefs(user.id, packageName); + } + } catch (Throwable e) { + Log.w(TAG, "remove module prefs for " + packageName); + } return true; } @@ -749,7 +756,13 @@ public class ConfigManager { db.setTransactionSuccessful(); db.endTransaction(); } - return true; + try { + removeModulePrefs(module.userId, module.packageName); + return true; + } catch (IOException e) { + Log.w(TAG, "removeModulePrefs", e); + return false; + } } public boolean disableModule(String packageName) { @@ -924,6 +937,12 @@ public class ConfigManager { } } + private void removeModulePrefs(int uid, String packageName) throws IOException { + if (packageName == null) return; + var path = Paths.get(getPrefsPath(packageName, uid)); + ConfigFileManager.deleteFolderIfExists(path); + } + public String getManagerPackageName() { return manager; }