diff --git a/app/build.gradle b/app/build.gradle index c19d07d..2a83ec6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ android { minSdk 28 targetSdk 35 versionCode 15 - versionName "1.12.5g" + versionName "1.12.5h" multiDexEnabled false proguardFiles += 'proguard-rules.pro' buildConfigField 'String', 'HOOK_TARGET_VERSION', '"141700420"' diff --git a/app/src/main/java/io/github/hiro/lime/hooks/NaviColor.java b/app/src/main/java/io/github/hiro/lime/hooks/NaviColor.java index f0a4fcd..e201c32 100644 --- a/app/src/main/java/io/github/hiro/lime/hooks/NaviColor.java +++ b/app/src/main/java/io/github/hiro/lime/hooks/NaviColor.java @@ -75,9 +75,7 @@ public class NaviColor implements IHook { // Define the view IDs that need to be checked String[] viewIds = { - "bnb_timeline", "bnb_timeline_spacer", "bnb_wallet", - "bnb_wallet_spacer", "bnb_news", "bnb_call", "bnb_chat", - "bnb_news_spacer", "bnb_call_spacer", "bnb_home_v2" + }; // Loop through each view ID and apply the background color change @@ -88,24 +86,34 @@ public class NaviColor implements IHook { // Log the resource ID to verify the view is found if (resId != 0) { - XposedBridge.log("Resource ID for " + viewId + ": " + resId); + //XposedBridge.log("Resource ID for " + viewId + ": " + resId); } else { - XposedBridge.log("Resource ID for " + viewId + " not found."); + //XposedBridge.log("Resource ID for " + viewId + " not found."); } // Log the name of the view dynamically if (view != null) { String viewName = getResourceName(activity, resId); // Get the resource name - XposedBridge.log("Found view: " + viewName); - view.setBackgroundColor(Color.BLACK); // Set the background color to black + //XposedBridge.log("Found view: " + viewName); + + // Check the current background color and apply the color filter if it's #111111 + if (view.getBackground() != null) { + ColorDrawable background = (ColorDrawable) view.getBackground(); + int currentColor = background.getColor(); + + // If the current background color is #111111, change it to #000000 + if (currentColor == Color.parseColor("#111111")) { + view.setBackgroundColor(Color.parseColor("#000000")); + //XposedBridge.log("Changed background color of view to #000000"); + } + } } } // Extend clickable area for main tab container -// Change background color for main tab container -// Extend clickable area for main tab container int mainTabContainerResId = activity.getResources().getIdentifier("main_tab_container", "id", activity.getPackageName()); ViewGroup mainTabContainer = activity.findViewById(mainTabContainerResId); + if (mainTabContainer != null) { for (int i = 2; i < mainTabContainer.getChildCount(); i += 2) { ViewGroup icon = (ViewGroup) mainTabContainer.getChildAt(i); @@ -128,8 +136,6 @@ public class NaviColor implements IHook { } } } - - } // Helper method to get resource name @@ -140,11 +146,11 @@ public class NaviColor implements IHook { if (resourceName != null) { return resourceName; } else { - XposedBridge.log("Resource name for ID " + resId + " is null."); + //XposedBridge.log("Resource name for ID " + resId + " is null."); return "Unknown"; } } catch (Resources.NotFoundException e) { - XposedBridge.log("Resource not found for ID " + resId); + //XposedBridge.log("Resource not found for ID " + resId); return "Unknown"; } } @@ -153,6 +159,7 @@ public class NaviColor implements IHook { + XposedHelpers.findAndHookMethod("android.view.View", loadPackageParam.classLoader, "onMeasure", int.class, int.class, new XC_MethodHook() { @Override @@ -180,6 +187,7 @@ public class NaviColor implements IHook { traverseAndChangeBackground(rootView); } + // 全ての子ビューを再帰的に走査し、背景色を変更 // 全ての子ビューを再帰的に走査し、背景色を変更 private void traverseAndChangeBackground(View view) { if (view == null) return; @@ -187,7 +195,7 @@ public class NaviColor implements IHook { try { // リソース名を取得 String resourceName = view.getResources().getResourceEntryName(view.getId()); - XposedBridge.log("onResume - View Resource Name: " + resourceName); + //XposedBridge.log("onResume - View Resource Name: " + resourceName); // 背景色の変更処理 Drawable background = view.getBackground(); @@ -195,10 +203,15 @@ public class NaviColor implements IHook { int bgColor = ((ColorDrawable) background).getColor(); String hexColor = String.format("#%06X", (0xFFFFFF & bgColor)); // 色を16進数形式に変換 - // 色が #111111 または #1F1F1F の場合、#000000 に変更 - if (hexColor.equals("#111111") || hexColor.equals("#1F1F1F")) { + // 色が #111111 の場合、#FFFFFF に変更 + if (hexColor.equals("#111111")) { + ((ColorDrawable) background).setColor(Color.parseColor("#FFFFFF")); + //XposedBridge.log("Changed Background Color for Resource Name: " + resourceName + " from #111111 to #FFFFFF"); + } + // 色が #1F1F1F の場合、#000000 に変更 + else if (hexColor.equals("#1F1F1F")) { ((ColorDrawable) background).setColor(Color.parseColor("#000000")); - XposedBridge.log("Changed Background Color for Resource Name: " + resourceName + " from " + hexColor + " to #000000"); + //XposedBridge.log("Changed Background Color for Resource Name: " + resourceName + " from #1F1F1F to #000000"); } } @@ -211,9 +224,10 @@ public class NaviColor implements IHook { } } catch (Resources.NotFoundException e) { - XposedBridge.log("onResume - Resource name not found for View ID: " + view.getId()); + //XposedBridge.log("onResume - Resource name not found for View ID: " + view.getId()); } } + }); @@ -225,7 +239,7 @@ public class NaviColor implements IHook { // param.thisObject を View にキャストしてから getResources() を呼び出す View view = (View) param.thisObject; String resourceName = view.getResources().getResourceEntryName(resId); - XposedBridge.log("setBackgroundResource - Resource Name: " + resourceName); + //XposedBridge.log("setBackgroundResource - Resource Name: " + resourceName); // 背景リソースを取得 Drawable background = view.getBackground(); @@ -233,19 +247,25 @@ public class NaviColor implements IHook { int bgColor = ((ColorDrawable) background).getColor(); String hexColor = String.format("#%06X", (0xFFFFFF & bgColor)); // 色を16進数形式に変換 - // 色が #111111 または #1F1F1F の場合、#000000 に変更 - if (hexColor.equals("#111111") || hexColor.equals("#1F1F1F")) { + // 色が #111111 の場合、#FFFFFF に変更 + if (hexColor.equals("#111111")) { + ((ColorDrawable) background).setColor(Color.parseColor("#FFFFFF")); + //XposedBridge.log("Changed Background Color for Resource Name: " + resourceName + " from #111111 to #FFFFFF"); + } + // 色が #1F1F1F の場合、#000000 に変更 + else if (hexColor.equals("#1F1F1F")) { ((ColorDrawable) background).setColor(Color.parseColor("#000000")); - XposedBridge.log("Changed Background Color for Resource Name: " + resourceName + " from " + hexColor + " to #000000"); + //XposedBridge.log("Changed Background Color for Resource Name: " + resourceName + " from #1F1F1F to #000000"); } } } catch (Resources.NotFoundException e) { - XposedBridge.log("setBackgroundResource - Resource name not found for Resource ID: " + resId); + //XposedBridge.log("setBackgroundResource - Resource name not found for Resource ID: " + resId); } } }); + XposedHelpers.findAndHookMethod("android.app.Activity", loadPackageParam.classLoader, "onCreate", Bundle.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { @@ -274,7 +294,7 @@ public class NaviColor implements IHook { try { String resourceName = getViewResourceName(view); - XposedBridge.log("Resource Name: " + resourceName); + //XposedBridge.log("Resource Name: " + resourceName); // 背景色を変更 handleBackgroundColor(view, resourceName); @@ -295,7 +315,7 @@ public class NaviColor implements IHook { } } catch (Exception e) { - XposedBridge.log("Unexpected error in onAttachedToWindow: " + e.getMessage()); + //XposedBridge.log("Unexpected error in onAttachedToWindow: " + e.getMessage()); } } @@ -305,7 +325,7 @@ public class NaviColor implements IHook { try { return view.getResources().getResourceEntryName(viewId); } catch (Resources.NotFoundException e) { - XposedBridge.log("Resource not found for View ID: " + viewId); + //XposedBridge.log("Resource not found for View ID: " + viewId); return "unknown"; } } @@ -320,11 +340,15 @@ public class NaviColor implements IHook { int bgColor = ((ColorDrawable) background).getColor(); String hexColor = convertToHexColor(bgColor); - // 背景色が変更対象であれば、#000000 に変更 - if (hexColor.equals("#111111") || hexColor.equals("#1F1F1F") || resourceName.contains("search_bar_bg")) { - ((ColorDrawable) background).setColor(Color.parseColor("#000000")); + // 背景色を変更する条件 + if (hexColor.equals("#111111")) { + ((ColorDrawable) background).setColor(Color.parseColor("#FFFFFF")); // 白色に変更 + //XposedBridge.log("Changed Background Color of Resource Name: " + resourceName + " from #111111 to #FFFFFF"); + } else if (hexColor.equals("#1F1F1F") || resourceName.contains("search_bar_bg")) { + ((ColorDrawable) background).setColor(Color.parseColor("#000000")); // 黒色に変更 + //XposedBridge.log("Changed Background Color of Resource Name: " + resourceName + " to #000000"); } else { - XposedBridge.log("View Resource Name: " + resourceName + " Background Color: " + hexColor); + //XposedBridge.log("View Resource Name: " + resourceName + " Background Color: " + hexColor); } } } @@ -335,16 +359,19 @@ public class NaviColor implements IHook { // テキスト色のカスタム処理 if (hexTextColor.equals("#111111")) { - textView.setTextColor(Color.parseColor("#000000")); - XposedBridge.log("Changed Text Color of View Resource Name: " + resourceName + " from " + hexTextColor + " to #000000"); + textView.setTextColor(Color.parseColor("#FFFFFF")); // 白色に変更 + //XposedBridge.log("Changed Text Color of View Resource Name: " + resourceName + " from #111111 to #FFFFFF"); + } else if (hexTextColor.equals("#1F1F1F")) { + textView.setTextColor(Color.parseColor("#000000")); // 黒色に変更 + //XposedBridge.log("Changed Text Color of View Resource Name: " + resourceName + " from #1F1F1F to #000000"); } else { - XposedBridge.log("View Resource Name: " + resourceName + " Text Color: " + hexTextColor); + //XposedBridge.log("View Resource Name: " + resourceName + " Text Color: " + hexTextColor); } } private void handleImageViewColor(ImageView imageView, String resourceName) { - // 画像ビューの色調整(例えば、カラー調整する場合) - XposedBridge.log("ImageView Resource Name: " + resourceName); + // 画像ビューの色調整(必要に応じて実装) + //XposedBridge.log("ImageView Resource Name: " + resourceName); } private String convertToHexColor(int color) { @@ -355,15 +382,16 @@ public class NaviColor implements IHook { + XposedHelpers.findAndHookMethod("android.view.ViewGroup", loadPackageParam.classLoader, "addView", View.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { View view = (View) param.args[0]; try { String resourceName = view.getResources().getResourceEntryName(view.getId()); - XposedBridge.log("addView - Added View Resource Name: " + resourceName); + //XposedBridge.log("addView - Added View Resource Name: " + resourceName); } catch (Resources.NotFoundException e) { - XposedBridge.log("addView - Resource name not found for View ID: " + view.getId()); + //XposedBridge.log("addView - Resource name not found for View ID: " + view.getId()); } } }); @@ -437,7 +465,7 @@ public class NaviColor implements IHook { // 背景色を #000000 に変更 rootView.setBackgroundColor(Color.parseColor("#000000")); - XposedBridge.log("Changed Activity Background Color to #000000"); + //XposedBridge.log("Changed Activity Background Color to #000000"); } }); @@ -456,11 +484,11 @@ public class NaviColor implements IHook { // リソース名を取得 String resourceName = getViewResourceName(view); if (resourceName != null) { - XposedBridge.log("Resource Name: " + resourceName); + //XposedBridge.log("Resource Name: " + resourceName); } } catch (Resources.NotFoundException e) { // リソースが見つからなかった場合 - XposedBridge.log("Resource name not found for View ID: " + view.getId()); + //XposedBridge.log("Resource name not found for View ID: " + view.getId()); } // 子ビューを再帰的に処理 @@ -486,7 +514,7 @@ public class NaviColor implements IHook { // リソース名を取得 String resourceName = getViewResourceName(view); - XposedBridge.log("Resource Name: " + resourceName); + //XposedBridge.log("Resource Name: " + resourceName); // 特定のリソース名の場合、背景がnullであっても黒色に変更する if ("bnb_home_spacer_v2".equals(resourceName) || @@ -494,10 +522,10 @@ public class NaviColor implements IHook { "bnb_timeline_spacer".equals(resourceName) || "bnb_news_spacer".equals(resourceName) || "bnb_wallet_spacer".equals(resourceName)) { - XposedBridge.log("Background is null for Resource Name: " + resourceName + ", changing color to black."); + //XposedBridge.log("Background is null for Resource Name: " + resourceName + ", changing color to black."); ColorDrawable colorDrawable = new ColorDrawable(Color.parseColor("#000000")); view.setBackground(colorDrawable); // Set black background - XposedBridge.log("Set background color of Resource Name: " + resourceName + " to #000000"); + //XposedBridge.log("Set background color of Resource Name: " + resourceName + " to #000000"); } // 背景を取得 @@ -506,20 +534,20 @@ public class NaviColor implements IHook { // 背景が null でないことを確認 if (background != null) { // 背景のクラス名をログに出力 - XposedBridge.log("Background Class Name: " + background.getClass().getName()); + //XposedBridge.log("Background Class Name: " + background.getClass().getName()); if (background instanceof ColorDrawable) { ((ColorDrawable) background).setColor(Color.parseColor("#000000")); - XposedBridge.log("Changed Background Color of Resource Name: " + resourceName + " to #000000"); + //XposedBridge.log("Changed Background Color of Resource Name: " + resourceName + " to #000000"); } else if (background instanceof BitmapDrawable) { - XposedBridge.log("BitmapDrawable background, cannot change color directly."); + //XposedBridge.log("BitmapDrawable background, cannot change color directly."); } else if (background instanceof LayerDrawable) { LayerDrawable layerDrawable = (LayerDrawable) background; for (int i = 0; i < layerDrawable.getNumberOfLayers(); i++) { Drawable layer = layerDrawable.getDrawable(i); if (layer instanceof ColorDrawable) { ((ColorDrawable) layer).setColor(Color.parseColor("#000000")); - XposedBridge.log("Changed LayerDrawable Background Color of Resource Name: " + resourceName + " to #000000"); + //XposedBridge.log("Changed LayerDrawable Background Color of Resource Name: " + resourceName + " to #000000"); } } } else if (background instanceof ClipDrawable) { @@ -527,42 +555,37 @@ public class NaviColor implements IHook { Drawable drawable = clipDrawable.getDrawable(); if (drawable instanceof ColorDrawable) { ((ColorDrawable) drawable).setColor(Color.parseColor("#000000")); - XposedBridge.log("Changed ClipDrawable Background Color of Resource Name: " + resourceName + " to #000000"); + //XposedBridge.log("Changed ClipDrawable Background Color of Resource Name: " + resourceName + " to #000000"); } } else if (background instanceof InsetDrawable) { InsetDrawable insetDrawable = (InsetDrawable) background; Drawable drawable = insetDrawable.getDrawable(); if (drawable instanceof ColorDrawable) { ((ColorDrawable) drawable).setColor(Color.parseColor("#000000")); - XposedBridge.log("Changed InsetDrawable Background Color of Resource Name: " + resourceName + " to #000000"); + //XposedBridge.log("Changed InsetDrawable Background Color of Resource Name: " + resourceName + " to #000000"); } } else if (background instanceof DrawableWrapper) { DrawableWrapper drawableWrapper = (DrawableWrapper) background; Drawable wrappedDrawable = drawableWrapper.getDrawable(); if (wrappedDrawable instanceof ColorDrawable) { ((ColorDrawable) wrappedDrawable).setColor(Color.parseColor("#000000")); - XposedBridge.log("Changed DrawableWrapper Background Color for Resource Name: " + resourceName + " to #000000"); + //XposedBridge.log("Changed DrawableWrapper Background Color for Resource Name: " + resourceName + " to #000000"); } } else if (background instanceof NinePatchDrawable) { NinePatchDrawable ninePatchDrawable = (NinePatchDrawable) background; - XposedBridge.log("NinePatchDrawable background, color change not directly supported."); - } else if (background instanceof GradientDrawable) { - // GradientDrawable の場合、色を変更する - GradientDrawable gradientDrawable = (GradientDrawable) background; - gradientDrawable.setColor(Color.parseColor("#000000")); // 背景色を #000000 に変更 - XposedBridge.log("Changed GradientDrawable Background Color of Resource Name: " + resourceName + " to #000000"); - } else if (background instanceof StateListDrawable) { + //XposedBridge.log("NinePatchDrawable background, color change not directly supported."); + } else if (background instanceof StateListDrawable) { StateListDrawable stateListDrawable = (StateListDrawable) background; - XposedBridge.log("StateListDrawable background detected for Resource Name: " + resourceName); + //XposedBridge.log("StateListDrawable background detected for Resource Name: " + resourceName); // 必要に応じて状態ごとの処理を追加 } else { - XposedBridge.log("Unknown background type for Resource Name: " + resourceName + ", Class Name: " + background.getClass().getName()); + //XposedBridge.log("Unknown background type for Resource Name: " + resourceName + ", Class Name: " + background.getClass().getName()); } } else { - XposedBridge.log("Background is null for Resource Name: " + resourceName); + //XposedBridge.log("Background is null for Resource Name: " + resourceName); } } catch (Resources.NotFoundException e) { - XposedBridge.log("Resource name not found for View ID: " + view.getId()); + //XposedBridge.log("Resource name not found for View ID: " + view.getId()); } finally { isChangingColor = false; // Reset the flag after the method execution } @@ -576,7 +599,7 @@ public class NaviColor implements IHook { int viewId = view.getId(); if (viewId != View.NO_ID) { String resourceName = view.getContext().getResources().getResourceEntryName(viewId); - XposedBridge.log("Resource Name: " + resourceName); + //XposedBridge.log("Resource Name: " + resourceName); } // ビューが ViewGroup の場合、その子ビューを再帰的に探索 @@ -595,7 +618,7 @@ public class NaviColor implements IHook { try { return view.getResources().getResourceEntryName(viewId); } catch (Resources.NotFoundException e) { - XposedBridge.log("Resource not found for View ID: " + viewId); + //XposedBridge.log("Resource not found for View ID: " + viewId); return "unknown"; } } diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index d5fd395..a25d6a7 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -98,5 +98,5 @@ 随時キャッシュを削除してクラッシュを予防 ミュートメッセージの無効化 登録しているグループ名の通知をオフにする - + ナビゲーションのボタンの色を黒にする、ダークテーマをピュアダークにする diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index fb65a77..52e966e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -92,7 +92,7 @@ サービスの項目を削除 送信したメッセージの既読者の確認 更新されたプロフィールを削除\n - ナビゲーションのボタンの色を黒にする + ナビゲーションのボタンの色を黒にする、ダークテーマをピュアダークにする LsPatch用「未読のまま閲覧」スイッチを表示 定期的にバックアップ\n 連続で通話がかかってこないとかからないように