[core] Fix flyme drawable load (#1204)

This commit is contained in:
LoveSy 2021-10-01 17:19:24 +08:00 committed by GitHub
parent fce5e83609
commit 5809e74f44
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 23 additions and 0 deletions

View File

@ -42,11 +42,14 @@ import android.graphics.Canvas;
import android.graphics.drawable.Icon; import android.graphics.drawable.Icon;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.HandlerThread;
import android.os.IBinder; import android.os.IBinder;
import android.os.ParcelFileDescriptor; import android.os.ParcelFileDescriptor;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.SELinux; import android.os.SELinux;
import android.os.SystemProperties; import android.os.SystemProperties;
import android.system.ErrnoException;
import android.system.Os;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -56,6 +59,7 @@ import org.lsposed.lspd.ILSPManagerService;
import org.lsposed.lspd.models.Application; import org.lsposed.lspd.models.Application;
import org.lsposed.lspd.models.UserInfo; import org.lsposed.lspd.models.UserInfo;
import org.lsposed.lspd.util.FakeContext; import org.lsposed.lspd.util.FakeContext;
import android.os.Handler;
import org.lsposed.lspd.util.Utils; import org.lsposed.lspd.util.Utils;
import java.io.File; import java.io.File;
@ -81,8 +85,15 @@ public class LSPManagerService extends ILSPManagerService.Stub {
public static final String CHANNEL_NAME = "LSPosed Manager"; public static final String CHANNEL_NAME = "LSPosed Manager";
public static final int CHANNEL_IMP = NotificationManager.IMPORTANCE_HIGH; public static final int CHANNEL_IMP = NotificationManager.IMPORTANCE_HIGH;
private static final HandlerThread worker = new HandlerThread("manager worker");
private static final Handler workerHandler = new Handler(worker.getLooper());
private static Intent managerIntent = null; private static Intent managerIntent = null;
static {
worker.start();
}
public class ManagerGuard implements IBinder.DeathRecipient { public class ManagerGuard implements IBinder.DeathRecipient {
private final @NonNull private final @NonNull
IBinder binder; IBinder binder;
@ -263,7 +274,12 @@ public class LSPManagerService extends ILSPManagerService.Stub {
} }
} }
public static void createOrUpdateShortcut(boolean force) { public static void createOrUpdateShortcut(boolean force) {
workerHandler.post(()->createOrUpdateShortcutInternal(force));
}
private synchronized static void createOrUpdateShortcutInternal(boolean force) {
try { try {
if (!force && ConfigManager.getInstance().isManagerInstalled()) { if (!force && ConfigManager.getInstance().isManagerInstalled()) {
Log.d(TAG, "Manager has installed, skip adding shortcut"); Log.d(TAG, "Manager has installed, skip adding shortcut");
@ -314,6 +330,11 @@ public class LSPManagerService extends ILSPManagerService.Stub {
private void ensureWebViewPermission(File f) { private void ensureWebViewPermission(File f) {
if (!f.exists()) return; if (!f.exists()) return;
SELinux.setFileContext(f.getAbsolutePath(), "u:object_r:privapp_data_file:s0"); SELinux.setFileContext(f.getAbsolutePath(), "u:object_r:privapp_data_file:s0");
try {
Os.chown(f.getAbsolutePath(), BuildConfig.MANAGER_INJECTED_UID, BuildConfig.MANAGER_INJECTED_UID);
} catch (ErrnoException e) {
Log.e(TAG, "chown of webview", e);
}
if (f.isDirectory()) { if (f.isDirectory()) {
for (var g : f.listFiles()) { for (var g : f.listFiles()) {
ensureWebViewPermission(g); ensureWebViewPermission(g);
@ -329,7 +350,9 @@ public class LSPManagerService extends ILSPManagerService.Stub {
cacheDir = new File(HiddenApiBridge.ApplicationInfo_credentialProtectedDataDir(pkgInfo.applicationInfo) + "/cache"); cacheDir = new File(HiddenApiBridge.ApplicationInfo_credentialProtectedDataDir(pkgInfo.applicationInfo) + "/cache");
} }
var webviewDir = new File(cacheDir, "WebView"); var webviewDir = new File(cacheDir, "WebView");
webviewDir.mkdirs();
var httpCacheDir = new File(cacheDir, "http_cache"); var httpCacheDir = new File(cacheDir, "http_cache");
httpCacheDir.mkdirs();
ensureWebViewPermission(webviewDir); ensureWebViewPermission(webviewDir);
ensureWebViewPermission(httpCacheDir); ensureWebViewPermission(httpCacheDir);
} catch (Throwable e) { } catch (Throwable e) {