From 5220f18127589453c041a60bdab3494854ad7bb6 Mon Sep 17 00:00:00 2001 From: areteruhiro <108941410+areteruhiro@users.noreply.github.com> Date: Sun, 27 Oct 2024 22:17:18 +0900 Subject: [PATCH] Update KeepUnread.java (#199) Co-authored-by: Syuugo --- .../chipppppppppp/lime/hooks/KeepUnread.java | 100 +++++------------- 1 file changed, 27 insertions(+), 73 deletions(-) diff --git a/app/src/main/java/io/github/chipppppppppp/lime/hooks/KeepUnread.java b/app/src/main/java/io/github/chipppppppppp/lime/hooks/KeepUnread.java index c5b540ed..b54363ef 100644 --- a/app/src/main/java/io/github/chipppppppppp/lime/hooks/KeepUnread.java +++ b/app/src/main/java/io/github/chipppppppppp/lime/hooks/KeepUnread.java @@ -23,98 +23,52 @@ import io.github.chipppppppppp.lime.R; public class KeepUnread implements IHook { - static boolean keepUnread = false; @Override public void hook(LimeOptions limeOptions, XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { if (limeOptions.removeKeepUnread.checked) return; - XposedBridge.hookAllConstructors( - loadPackageParam.classLoader.loadClass("jp.naver.line.android.common.view.listview.PopupListView"), - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) throws Throwable { - ViewGroup viewGroup = (ViewGroup) param.thisObject; - Context context = viewGroup.getContext(); - context.getApplicationContext().createPackageContext(Constants.MODULE_NAME, Context.CONTEXT_IGNORE_SECURITY); - - Context moduleContext = context.getApplicationContext().createPackageContext(Constants.MODULE_NAME, Context.CONTEXT_IGNORE_SECURITY); - String textKeepUnread = moduleContext.getResources().getString(R.string.switch_keep_unread); - - keepUnread = readStateFromFile(context); + Class hookTarget; + hookTarget = loadPackageParam.classLoader.loadClass("jp.naver.line.android.common.view.listview.PopupListView"); + XposedBridge.hookAllConstructors(hookTarget, new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) throws Throwable { - RelativeLayout container = new RelativeLayout(context); - RelativeLayout.LayoutParams containerParams = new RelativeLayout.LayoutParams( - RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); - container.setLayoutParams(containerParams); + ViewGroup viewGroup = (ViewGroup) param.thisObject; + Context context = viewGroup.getContext(); + Context moduleContext = context.getApplicationContext().createPackageContext(Constants.MODULE_NAME, Context.CONTEXT_IGNORE_SECURITY); + String textKeepUnread = moduleContext.getResources().getString(R.string.switch_keep_unread); + RelativeLayout layout = new RelativeLayout(context); + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( + RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); + layout.setLayoutParams(layoutParams); - GradientDrawable background = new GradientDrawable(); - background.setShape(GradientDrawable.RECTANGLE); - background.setColor(Color.parseColor("#06C755")); - background.setCornerRadii(new float[]{100, 100, 80, 30, 100, 100, 80, 30}); - container.setBackground(background); + Switch switchView = new Switch(context); + switchView.setText(textKeepUnread); + RelativeLayout.LayoutParams switchParams = new RelativeLayout.LayoutParams( + RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); + switchParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); - TextView label = new TextView(context); - label.setText(textKeepUnread); - label.setTextSize(18); - label.setTextColor(Color.WHITE); - label.setId(View.generateViewId()); - RelativeLayout.LayoutParams labelParams = new RelativeLayout.LayoutParams( - RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); - labelParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); - labelParams.setMargins(40, 0, 0, 0); - container.addView(label, labelParams); + switchView.setChecked(false); + switchView.setOnCheckedChangeListener((buttonView, isChecked) -> { + }); - Switch switchView = new Switch(context); - RelativeLayout.LayoutParams switchParams = new RelativeLayout.LayoutParams( - RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); - switchParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); - switchParams.setMargins(0, 0, 40, 0); - switchView.setChecked(keepUnread); - switchView.setOnCheckedChangeListener((buttonView, isChecked) -> { - keepUnread = isChecked; - saveStateToFile(context, isChecked); - }); + layout.addView(switchView, switchParams); - container.addView(switchView, switchParams); - - ((ListView) viewGroup.getChildAt(0)).addFooterView(container); - } - } - ); + ((ListView) viewGroup.getChildAt(0)).addFooterView(layout); + } + }); + XposedHelpers.findAndHookMethod( loadPackageParam.classLoader.loadClass(Constants.MARK_AS_READ_HOOK.className), Constants.MARK_AS_READ_HOOK.methodName, new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - if (keepUnread) { param.setResult(null); - } } } ); } - private void saveStateToFile(Context context, boolean state) { - String filename = "keep_unread_state.txt"; - try (FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE)) { - fos.write((state ? "1" : "0").getBytes()); - } catch (IOException e) { - e.printStackTrace(); - } - } - private boolean readStateFromFile(Context context) { - String filename = "keep_unread_state.txt"; - try (FileInputStream fis = context.openFileInput(filename)) { - int c; - StringBuilder sb = new StringBuilder(); - while ((c = fis.read()) != -1) { - sb.append((char) c); - } - return "1".equals(sb.toString()); - } catch (IOException e) { - e.printStackTrace(); - return false; - } - } + }