1
0
mirror of https://github.com/areteruhiro/LIME-beta-hiro.git synced 2025-02-05 21:11:39 +09:00

ナビゲーションのボタンの色を黒にする、ダークテーマをピュアダークにする

This commit is contained in:
areteruhiro 2024-11-25 21:45:49 +09:00
parent 1bd55ad722
commit c8788b6845
4 changed files with 89 additions and 66 deletions

View File

@ -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"'

View File

@ -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");
//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";
}
}

View File

@ -98,5 +98,5 @@
<string name="CrashGuard">随時キャッシュを削除してクラッシュを予防</string>
<string name="NoMuteMessage">ミュートメッセージの無効化</string>
<string name="Notif_invalid">登録しているグループ名の通知をオフにする</string>
<string name="NaviColor">ナビゲーションのボタンの色を黒にする、ダークテーマをピュアダークにする</string>
</resources>

View File

@ -92,7 +92,7 @@
<string name="RemoveService">サービスの項目を削除</string>
<string name="ReadChecker">送信したメッセージの既読者の確認</string>
<string name="removeNotification">更新されたプロフィールを削除\n</string>
<string name="NaviColor">ナビゲーションのボタンの色を黒にする</string>
<string name="NaviColor">ナビゲーションのボタンの色を黒にする、ダークテーマをピュアダークにする</string>
<string name="switch_KeepUnreadLSpatch">LsPatch用「未読のまま閲覧」スイッチを表示</string>
<string name="AutomaticBackup">定期的にバックアップ\n</string>
<string name="SleepCall">連続で通話がかかってこないとかからないように</string>