Skip to content

Commit e2f08f8

Browse files
committed
Improve and fix bugs in CustomView
Signed-off-by: Dev4Mod <[email protected]>
1 parent 7945803 commit e2f08f8

File tree

1 file changed

+31
-21
lines changed
  • app/src/main/java/com/wmods/wppenhacer/xposed/features/customization

1 file changed

+31
-21
lines changed

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

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import java.util.HashMap;
5252
import java.util.Objects;
5353
import java.util.Properties;
54-
import java.util.concurrent.CompletableFuture;
5554

5655
import cz.vutbr.web.css.CSSFactory;
5756
import cz.vutbr.web.css.CombinedSelector;
@@ -177,30 +176,42 @@ public void registerView(StyleSheet sheet) {
177176
}
178177
}
179178

179+
XposedHelpers.findAndHookMethod(View.class, "invalidate", boolean.class, new XC_MethodHook() {
180+
@Override
181+
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
182+
if (ReflectionUtils.isCalledFromClass(CustomView.class)) return;
183+
var view = (View) param.thisObject;
184+
requestLayoutChange(view, mapIds);
185+
}
186+
});
187+
180188
XposedHelpers.findAndHookMethod(View.class, "requestLayout", new XC_MethodHook() {
181189
@Override
182190
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
183191
if (ReflectionUtils.isCalledFromClass(CustomView.class)) return;
184192
var view = (View) param.thisObject;
185-
var id = view.getId();
186-
var list = mapIds.get(id);
187-
if (list == null) return;
188-
CompletableFuture.runAsync(() -> {
189-
for (var item : list) {
190-
try {
191-
if (item.targetActivityClass != null && !item.targetActivityClass.isInstance(WppCore.getCurrentActivity()))
192-
continue;
193-
setCssRule(view, item);
194-
} catch (Throwable ignored) {
195-
}
196-
}
197-
}, Utils.getExecutor());
193+
view.invalidate();
198194
}
199195
});
200196

197+
201198
}
202199

203200

201+
private void requestLayoutChange(View view, HashMap<Integer, ArrayList<RuleItem>> mapIds) {
202+
var id = view.getId();
203+
var list = mapIds.get(id);
204+
if (list == null) return;
205+
for (var item : list) {
206+
try {
207+
if (item.targetActivityClass != null && !item.targetActivityClass.isInstance(WppCore.getCurrentActivity()))
208+
continue;
209+
setCssRule(view, item);
210+
} catch (Throwable ignored) {
211+
}
212+
}
213+
}
214+
204215
private void hookDrawableViews() {
205216
XposedHelpers.findAndHookMethod(View.class, "setBackground", Drawable.class, new XC_MethodHook() {
206217
@Override
@@ -244,13 +255,11 @@ private void setCssRule(View currentView, RuleItem ruleItem) {
244255
for (var view : resultViews) {
245256
if (view == null || !view.isAttachedToWindow())
246257
continue;
247-
CompletableFuture.runAsync(() -> view.post(() -> {
248-
try {
249-
setRuleInView(ruleItem, view);
250-
} catch (Throwable e) {
251-
log(e);
252-
}
253-
}), Utils.getExecutor());
258+
try {
259+
setRuleInView(ruleItem, view);
260+
} catch (Throwable e) {
261+
log(e);
262+
}
254263
}
255264
}
256265

@@ -382,6 +391,7 @@ private void setRuleInView(RuleItem ruleItem, View view) {
382391
continue;
383392
}
384393
}
394+
if (view.getWidth() < 1 || view.getHeight() < 1) continue;
385395
var resizeDrawable = new BitmapDrawable(view.getContext().getResources(), Bitmap.createScaledBitmap(bitmap, view.getWidth(), view.getHeight(), true));
386396
view.setBackground(resizeDrawable);
387397
XposedHelpers.setAdditionalInstanceField(view, "mHeight", view.getHeight());

0 commit comments

Comments
 (0)