Skip to content

Commit dffe621

Browse files
committed
Fixes change colors on recreate Activity
Signed-off-by: Dev4Mod <wellingtonmods@gmail.com>
1 parent bfe7c60 commit dffe621

2 files changed

Lines changed: 110 additions & 89 deletions

File tree

app/src/main/java/com/wmods/wppenhacer/utils/IColors.java

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,42 +11,6 @@ public class IColors {
1111
public static final HashMap<String, String> primaryColors = new HashMap<>();
1212
public static final HashMap<String, String> secondaryColors = new HashMap<>();
1313

14-
static {
15-
16-
// primary colors
17-
primaryColors.put("00a884", "00a884");
18-
primaryColors.put("1da457", "1da457");
19-
primaryColors.put("21c063", "21c063");
20-
primaryColors.put("d9fdd3", "d9fdd3");
21-
primaryColors.put("#ff00a884", "#ff00a884");
22-
primaryColors.put("#ff1da457", "#ff1da457");
23-
primaryColors.put("#ff21c063", "#ff21c063");
24-
primaryColors.put("#ff1daa61", "#ff1daa61");
25-
primaryColors.put("#ff25d366", "#ff25d366");
26-
primaryColors.put("#ffd9fdd3", "#ffd9fdd3");
27-
primaryColors.put("#ff1b864b", "#ff1b864b");
28-
29-
primaryColors.put("#ff144d37", "#80144d37");
30-
primaryColors.put("#ff1b8755", "#801b8755");
31-
primaryColors.put("#ff15603e", "#8015603e");
32-
primaryColors.put("#ff103529", "#ff103529");
33-
34-
35-
// secundary colors
36-
secondaryColors.put("#ffeaedee", "#ffeaedee");
37-
secondaryColors.put("#fff7f8fa", "#fff7f8fa");
38-
39-
// background colors
40-
backgroundColors.put("0b141a", "0a1014");
41-
backgroundColors.put("#ff0b141a", "#ff111b21");
42-
backgroundColors.put("#ff111b21", "#ff111b21");
43-
backgroundColors.put("#ff000000", "#ff000000");
44-
backgroundColors.put("#ff0a1014", "#ff0a1014");
45-
backgroundColors.put("#ff10161a", "#ff10161a");
46-
backgroundColors.put("#ff12181c", "#ff12181c");
47-
backgroundColors.put("#ff20272b", "#ff20272b");
48-
}
49-
5014
public static int parseColor(String str) {
5115
return Color.parseColor(str);
5216
}
@@ -78,4 +42,43 @@ public static int getFromIntColor(int color, HashMap<String, String> colors) {
7842
}
7943
return color;
8044
}
45+
46+
public static void initColors() {
47+
primaryColors.clear();
48+
secondaryColors.clear();
49+
backgroundColors.clear();
50+
colors.clear();
51+
52+
// primary colors
53+
primaryColors.put("00a884", "00a884");
54+
primaryColors.put("1da457", "1da457");
55+
primaryColors.put("21c063", "21c063");
56+
primaryColors.put("d9fdd3", "d9fdd3");
57+
primaryColors.put("#ff00a884", "#ff00a884");
58+
primaryColors.put("#ff1da457", "#ff1da457");
59+
primaryColors.put("#ff21c063", "#ff21c063");
60+
primaryColors.put("#ff1daa61", "#ff1daa61");
61+
primaryColors.put("#ff25d366", "#ff25d366");
62+
primaryColors.put("#ffd9fdd3", "#ffd9fdd3");
63+
primaryColors.put("#ff1b864b", "#ff1b864b");
64+
65+
primaryColors.put("#ff144d37", "#ff144d37");
66+
primaryColors.put("#ff1b8755", "#ff1b8755");
67+
primaryColors.put("#ff15603e", "#A015603e");
68+
primaryColors.put("#ff103529", "#ff103529");
69+
70+
// secundary colors
71+
secondaryColors.put("#ffeaedee", "#ffeaedee");
72+
secondaryColors.put("#fff7f8fa", "#fff7f8fa");
73+
74+
// background colors
75+
backgroundColors.put("0b141a", "0a1014");
76+
backgroundColors.put("#ff0b141a", "#ff111b21");
77+
backgroundColors.put("#ff111b21", "#ff111b21");
78+
backgroundColors.put("#ff000000", "#ff000000");
79+
backgroundColors.put("#ff0a1014", "#ff0a1014");
80+
backgroundColors.put("#ff10161a", "#ff10161a");
81+
backgroundColors.put("#ff12181c", "#ff12181c");
82+
backgroundColors.put("#ff20272b", "#ff20272b");
83+
}
8184
}

app/src/main/java/com/wmods/wppenhacer/xposed/features/customization/CustomThemeV2.java

Lines changed: 71 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -71,25 +71,19 @@ private static void processColors(String color, HashMap<String, String> mapColor
7171
@Override
7272
public void doHook() throws Throwable {
7373
properties = Utils.getProperties(prefs, "custom_css", "custom_filters");
74-
hookColors();
75-
if (prefs.getBoolean("lite_mode", false)) return;
74+
hookTheme();
7675
hookWallpaper();
76+
XposedBridge.hookAllMethods(XposedHelpers.findClass("android.app.ActivityThread", classLoader), "handleRelaunchActivity", new XC_MethodHook() {
77+
@Override
78+
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
79+
loadAndApplyColors();
80+
loadAndApplyColorsWallpaper();
81+
}
82+
});
7783
}
7884

79-
private static HashMap<String, String> revertColors(HashMap<String, String> colors) {
80-
HashMap<String, String> newColors = new HashMap<>();
81-
for (var c : colors.keySet()) {
82-
var color = colors.get(c);
83-
newColors.put(color, c);
84-
}
85-
return newColors;
86-
}
87-
88-
private void hookWallpaper() throws Exception {
89-
90-
if (!prefs.getBoolean("wallpaper", false))
91-
return;
92-
85+
private void loadAndApplyColorsWallpaper() {
86+
if (prefs.getBoolean("lite_mode", false)) return;
9387
var customWallpaper = prefs.getBoolean("wallpaper", false);
9488

9589
if (customWallpaper || properties.containsKey("wallpaper")) {
@@ -107,6 +101,23 @@ private void hookWallpaper() throws Exception {
107101
var wallpaperToolbarAlpha = customWallpaper ? prefs.getInt("wallpaper_alpha_toolbar", 30) : Utils.tryParseInt(properties.getProperty("wallpaper_alpha_toolbar"), 30);
108102
replaceTransparency(toolbarAlpha, (100 - wallpaperToolbarAlpha) / 100.0f);
109103
}
104+
}
105+
106+
private static HashMap<String, String> revertColors(HashMap<String, String> colors) {
107+
HashMap<String, String> newColors = new HashMap<>();
108+
for (var c : colors.keySet()) {
109+
var color = colors.get(c);
110+
newColors.put(color, c);
111+
}
112+
return newColors;
113+
}
114+
115+
private void hookWallpaper() throws Exception {
116+
117+
if (!prefs.getBoolean("wallpaper", false))
118+
return;
119+
120+
loadAndApplyColorsWallpaper();
110121

111122
var homeActivityClass = WppCore.getHomeActivityClass(classLoader);
112123
XposedHelpers.findAndHookMethod(homeActivityClass, "onCreate", Bundle.class, new XC_MethodHook() {
@@ -159,7 +170,50 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
159170

160171
}
161172

162-
public void hookColors() throws Throwable {
173+
174+
public void hookTheme() throws Throwable {
175+
loadAndApplyColors();
176+
177+
XposedBridge.hookAllMethods(AssetManager.class, "getResourceValue", new XC_MethodHook() {
178+
@Override
179+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
180+
var typedValue = (TypedValue) param.args[2];
181+
if (typedValue.type >= TypedValue.TYPE_FIRST_INT
182+
&& typedValue.type <= TypedValue.TYPE_LAST_INT) {
183+
if (typedValue.data == 0) return;
184+
if (checkNotApplyColor(typedValue.data)) return;
185+
typedValue.data = IColors.getFromIntColor(typedValue.data, IColors.colors);
186+
}
187+
}
188+
});
189+
190+
var resourceImpl = XposedHelpers.findClass("android.content.res.ResourcesImpl", classLoader);
191+
192+
XposedBridge.hookAllMethods(resourceImpl, "loadDrawable", new XC_MethodHook() {
193+
@Override
194+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
195+
var drawable = (Drawable) param.getResult();
196+
DrawableColors.replaceColor(drawable, IColors.colors);
197+
}
198+
});
199+
200+
XposedBridge.hookAllMethods(resourceImpl, "loadColorStateList", new XC_MethodHook() {
201+
@Override
202+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
203+
var colorStateList = (ColorStateList) param.getResult();
204+
var mColors = (int[]) XposedHelpers.getObjectField(colorStateList, "mColors");
205+
for (var i = 0; i < mColors.length; i++) {
206+
mColors[i] = IColors.getFromIntColor(mColors[i], IColors.colors);
207+
}
208+
}
209+
});
210+
var intBgHook = new IntBgColorHook();
211+
findAndHookMethod(Paint.class, "setColor", int.class, intBgHook);
212+
}
213+
214+
public void loadAndApplyColors() {
215+
216+
IColors.initColors();
163217

164218
var primaryColorInt = prefs.getInt("primary_color", 0);
165219
var secondaryColorInt = prefs.getInt("secondary_color", 0);
@@ -210,42 +264,6 @@ public void hookColors() throws Throwable {
210264
backgroundColors.put("ffffff", "ffffff");
211265
}
212266

213-
XposedBridge.hookAllMethods(AssetManager.class, "getResourceValue", new XC_MethodHook() {
214-
@Override
215-
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
216-
var typedValue = (TypedValue) param.args[2];
217-
if (typedValue.type >= TypedValue.TYPE_FIRST_INT
218-
&& typedValue.type <= TypedValue.TYPE_LAST_INT) {
219-
if (typedValue.data == 0) return;
220-
if (checkNotApplyColor(typedValue.data)) return;
221-
typedValue.data = IColors.getFromIntColor(typedValue.data, IColors.colors);
222-
}
223-
}
224-
});
225-
226-
var resourceImpl = XposedHelpers.findClass("android.content.res.ResourcesImpl", classLoader);
227-
228-
XposedBridge.hookAllMethods(resourceImpl, "loadDrawable", new XC_MethodHook() {
229-
@Override
230-
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
231-
var drawable = (Drawable) param.getResult();
232-
DrawableColors.replaceColor(drawable, IColors.colors);
233-
}
234-
});
235-
236-
XposedBridge.hookAllMethods(resourceImpl, "loadColorStateList", new XC_MethodHook() {
237-
@Override
238-
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
239-
var colorStateList = (ColorStateList) param.getResult();
240-
var mColors = (int[]) XposedHelpers.getObjectField(colorStateList, "mColors");
241-
for (var i = 0; i < mColors.length; i++) {
242-
mColors[i] = IColors.getFromIntColor(mColors[i], IColors.colors);
243-
}
244-
}
245-
});
246-
var intBgHook = new IntBgColorHook();
247-
findAndHookMethod(Paint.class, "setColor", int.class, intBgHook);
248-
249267
}
250268

251269
private void replaceTransparency(HashMap<String, String> wallpaperColors, float mAlpha) {

0 commit comments

Comments
 (0)