From 7b8691268eb370b095d3f6cd62a004981472cc8a Mon Sep 17 00:00:00 2001 From: Syuugo Date: Sat, 26 Oct 2024 18:02:23 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7?= =?UTF-8?q?=E3=83=B3=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c05e870b..ba759591 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { defaultConfig { minSdk 28 targetSdk 34 - versionCode 15 - versionName "1.10.1" + versionCode 16 + versionName "1.11.0-rc1" multiDexEnabled false proguardFiles += 'proguard-rules.pro' buildConfigField 'String', 'HOOK_TARGET_VERSION', '"141600311"' 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 2/3] 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; - } - } + } From 1304e281a3f6e6184c7061a2b51f8e0088e3b2ee Mon Sep 17 00:00:00 2001 From: areteruhiro <108941410+areteruhiro@users.noreply.github.com> Date: Sun, 27 Oct 2024 22:29:45 +0900 Subject: [PATCH 3/3] =?UTF-8?q?RemoveFlexibleContents=20=E3=82=AA=E3=83=97?= =?UTF-8?q?=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=AE=E8=BF=BD=E5=8A=A0=20(#200)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Syuugo --- .../chipppppppppp/lime/LimeOptions.java | 46 ++++++++++--------- .../lime/hooks/RemoveFlexibleContents.java | 41 +++++++++-------- app/src/main/res/values-ja/strings.xml | 6 ++- app/src/main/res/values/strings.xml | 1 + 4 files changed, 50 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/io/github/chipppppppppp/lime/LimeOptions.java b/app/src/main/java/io/github/chipppppppppp/lime/LimeOptions.java index da1238fa..ce61fa79 100644 --- a/app/src/main/java/io/github/chipppppppppp/lime/LimeOptions.java +++ b/app/src/main/java/io/github/chipppppppppp/lime/LimeOptions.java @@ -23,6 +23,7 @@ public Option(String name, int id, boolean checked) { public Option removeRecommendation = new Option("remove_recommendation", R.string.switch_remove_recommendation, true); public Option removePremiumRecommendation = new Option("remove_premium_recommendation", R.string.switch_remove_premium_recommendation, true); public Option removeServiceLabels = new Option("remove_service_labels", R.string.switch_remove_service_labels, false); + public Option removeAllServices = new Option("remove_services", R.string.switch_remove_service, false); public Option removeReplyMute = new Option("remove_reply_mute", R.string.switch_remove_reply_mute, true); public Option redirectWebView = new Option("redirect_webview", R.string.switch_redirect_webview, true); public Option openInBrowser = new Option("open_in_browser", R.string.switch_open_in_browser, false); @@ -37,27 +38,28 @@ public Option(String name, int id, boolean checked) { public Option callTone = new Option("call_tone", R.string.call_tone, false); public Option[] options = { - removeVoom, - removeWallet, - removeNewsOrCall, - distributeEvenly, - extendClickableArea, - removeIconLabels, - removeAds, - removeRecommendation, - removePremiumRecommendation, - removeServiceLabels, - removeReplyMute, - redirectWebView, - openInBrowser, - preventMarkAsRead, - preventUnsendMessage, - archived, - sendMuteMessage, - removeKeepUnread, - blockTracking, - stopVersionCheck, - outputCommunication, - callTone + removeVoom, + removeWallet, + removeNewsOrCall, + distributeEvenly, + extendClickableArea, + removeIconLabels, + removeAds, + removeRecommendation, + removePremiumRecommendation, + removeServiceLabels, + removeAllServices, + removeReplyMute, + redirectWebView, + openInBrowser, + preventMarkAsRead, + preventUnsendMessage, + archived, + sendMuteMessage, + removeKeepUnread, + blockTracking, + stopVersionCheck, + outputCommunication, + callTone }; } diff --git a/app/src/main/java/io/github/chipppppppppp/lime/hooks/RemoveFlexibleContents.java b/app/src/main/java/io/github/chipppppppppp/lime/hooks/RemoveFlexibleContents.java index 493462da..7d5116fc 100644 --- a/app/src/main/java/io/github/chipppppppppp/lime/hooks/RemoveFlexibleContents.java +++ b/app/src/main/java/io/github/chipppppppppp/lime/hooks/RemoveFlexibleContents.java @@ -24,16 +24,17 @@ public void hook(LimeOptions limeOptions, XC_LoadPackage.LoadPackageParam loadPa @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { Context context = (Context) param.thisObject; - recommendationResId = context.getResources().getIdentifier("home_tab_contents_recommendation_placement", "id", context.getPackageName()); - serviceNameResId = context.getResources().getIdentifier("home_tab_service_name", "id", context.getPackageName()); - notificationResId = context.getResources().getIdentifier("notification_hub_row_rolling_view_group", "id", context.getPackageName()); - serviceRowContainerResId = context.getResources().getIdentifier("service_row_container", "id", context.getPackageName()); - serviceIconResId = context.getResources().getIdentifier("home_tab_service_icon", "id", context.getPackageName()); - serviceCarouselResId = context.getResources().getIdentifier("home_tab_service_carousel", "id", context.getPackageName()); - serviceTitleBackgroundResId = context.getResources().getIdentifier("home_tab_service_title_background", "id", context.getPackageName()); - serviceTitleResId = context.getResources().getIdentifier("home_tab_service_title", "id", context.getPackageName()); - serviceSeeMoreResId = context.getResources().getIdentifier("home_tab_service_see_more", "id", context.getPackageName()); - serviceSeeMoreBadgeResId = context.getResources().getIdentifier("home_tab_service_see_more_badge", "id", context.getPackageName()); + + recommendationResId = getIdByName(context, "home_tab_contents_recommendation_placement"); + serviceNameResId = getIdByName(context, "home_tab_service_name"); + notificationResId = getIdByName(context, "notification_hub_row_rolling_view_group"); + serviceRowContainerResId = getIdByName(context, "service_row_container"); + serviceIconResId = getIdByName(context, "home_tab_service_icon"); + serviceCarouselResId = getIdByName(context, "home_tab_service_carousel"); + serviceTitleBackgroundResId = getIdByName(context, "home_tab_service_title_background"); + serviceTitleResId = getIdByName(context, "home_tab_service_title"); + serviceSeeMoreResId = getIdByName(context, "home_tab_service_see_more"); + serviceSeeMoreBadgeResId = getIdByName(context, "home_tab_service_see_more_badge"); } } ); @@ -42,22 +43,23 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { View.class, "onAttachedToWindow", new XC_MethodHook() { + View view; + @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - View view = (View) param.thisObject; - int viewId = view.getId(); - //String resourceName = getResourceName(view.getContext(), viewId); - //XposedBridge.log("View ID: " + viewId + ", Resource Name: " + resourceName); + view = (View) param.thisObject; + int viewId = view.getId(); if (limeOptions.removeRecommendation.checked && viewId == recommendationResId || limeOptions.removeServiceLabels.checked && viewId == serviceNameResId - || viewId == serviceRowContainerResId + || limeOptions.removeAllServices.checked && (viewId == serviceRowContainerResId || viewId == serviceIconResId || viewId == serviceCarouselResId || viewId == serviceTitleBackgroundResId || viewId == serviceTitleResId || viewId == serviceSeeMoreResId - || viewId == serviceSeeMoreBadgeResId) { + || viewId == serviceSeeMoreBadgeResId)) + { ViewGroup.LayoutParams layoutParams = view.getLayoutParams(); layoutParams.height = 0; view.setLayoutParams(layoutParams); @@ -70,9 +72,8 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { ); } - /* - private String getResourceName(Context context, int resourceId) { - return context.getResources().getResourceEntryName(resourceId); + private int getIdByName(Context context, String resourceName) { + return context.getResources().getIdentifier(resourceName, "id", context.getPackageName()); } - */ + } diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1e5b57e9..d42bff78 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -37,6 +37,7 @@ おすすめを削除 LYP プレミアムのおすすめを削除 サービスのラベルを削除 + サービスの項目を削除 通知から \"通知をオフ\" アクションを削除 WebView を既定のブラウザにリダイレクト ブラウザアプリで開く @@ -52,6 +53,7 @@ コピー ペースト 着信音を鳴らす(LSPatch用) + 未読のまま閲覧 @@ -74,5 +76,5 @@ 本当に削除しますか? 何もバックアップされていません 正しく取得できませんでした。\nアプリを再起動してください - - + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f9986397..53f5deec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -38,6 +38,7 @@ Remove recommendations Remove LYP Premium recommendations Remove tbe service labels + Remove services item Remove the \"Mute chat\" action from notifications Redirect WebView to the default browser Open in the browser app