From d429e5190056082e4dfde443220aa3bb2be03e10 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Sun, 8 Jan 2023 14:09:02 +0800 Subject: [PATCH] Support list files --- .../org/lsposed/lspd/impl/LSPosedContext.java | 17 +++++++++++++++-- .../lspd/service/LSPInjectedModuleService.java | 10 ++++++++++ .../lspd/service/ILSPInjectedModuleService.aidl | 2 ++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java b/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java index 9824c81c..027ab5e7 100644 --- a/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java +++ b/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java @@ -288,7 +288,7 @@ public class LSPosedContext extends XposedContext { try { return new LSPosedRemotePreferences(service, n); } catch (Throwable e) { - Log.e(TAG, "Failed to get remote preferences", e); + log("Failed to get remote preferences", e); return null; } }); @@ -309,6 +309,7 @@ public class LSPosedContext extends XposedContext { @Override public FileInputStream openFileInput(String name) throws FileNotFoundException { + if (name == null) throw new IllegalArgumentException("name must not be null"); if (name.startsWith("remote://")) { try { return new FileInputStream(service.openRemoteFile(name.substring(9)).getFileDescriptor()); @@ -399,7 +400,19 @@ public class LSPosedContext extends XposedContext { @Override public String[] fileList() { - throw new AbstractMethodError(); + String[] remoteFiles = new String[0]; + try { + remoteFiles = service.getRemoteFileList(); + } catch (RemoteException e) { + log("Failed to get remote file list", e); + } + var localFiles = mBase.fileList(); + var files = new String[remoteFiles.length + localFiles.length]; + for (int i = 0; i < remoteFiles.length; i++) { + files[i] = "remote://" + remoteFiles[i]; + } + System.arraycopy(localFiles, 0, files, remoteFiles.length, localFiles.length); + return files; } @Override diff --git a/daemon/src/main/java/org/lsposed/lspd/service/LSPInjectedModuleService.java b/daemon/src/main/java/org/lsposed/lspd/service/LSPInjectedModuleService.java index f027d733..1181ff4c 100644 --- a/daemon/src/main/java/org/lsposed/lspd/service/LSPInjectedModuleService.java +++ b/daemon/src/main/java/org/lsposed/lspd/service/LSPInjectedModuleService.java @@ -52,6 +52,16 @@ public class LSPInjectedModuleService extends ILSPInjectedModuleService.Stub { } } + @Override + public String[] getRemoteFileList() throws RemoteException { + try { + var absolutePath = ConfigFileManager.resolveModulePath(loadedModule.packageName, "."); + return absolutePath.toFile().list(); + } catch (Throwable e) { + throw new RemoteException(e.getMessage()); + } + } + void onUpdateRemotePreferences(String group, Bundle diff) { var groupCallbacks = callbacks.get(group); if (groupCallbacks != null) { diff --git a/services/daemon-service/src/main/aidl/org/lsposed/lspd/service/ILSPInjectedModuleService.aidl b/services/daemon-service/src/main/aidl/org/lsposed/lspd/service/ILSPInjectedModuleService.aidl index 5082f45a..e9df2f50 100644 --- a/services/daemon-service/src/main/aidl/org/lsposed/lspd/service/ILSPInjectedModuleService.aidl +++ b/services/daemon-service/src/main/aidl/org/lsposed/lspd/service/ILSPInjectedModuleService.aidl @@ -8,4 +8,6 @@ interface ILSPInjectedModuleService { Bundle requestRemotePreferences(String group, IRemotePreferenceCallback callback); ParcelFileDescriptor openRemoteFile(String path); + + String[] getRemoteFileList(); }