Skip to content

Commit 0c774ec

Browse files
committed
Fix bug in Pinned Limit
1 parent a17ed52 commit 0c774ec

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

app/src/main/java/com/wmods/wppenhacer/xposed/features/general/PinnedLimit.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.Collection;
1212
import java.util.Iterator;
1313
import java.util.LinkedHashMap;
14+
import java.util.LinkedHashSet;
1415
import java.util.Map;
1516
import java.util.Set;
1617
import java.util.Spliterator;
@@ -19,6 +20,8 @@
1920
import de.robv.android.xposed.XC_MethodReplacement;
2021
import de.robv.android.xposed.XSharedPreferences;
2122
import de.robv.android.xposed.XposedBridge;
23+
import de.robv.android.xposed.XposedHelpers;
24+
import lombok.Setter;
2225

2326
public class PinnedLimit extends Feature {
2427

@@ -33,11 +36,23 @@ public void doHook() throws Throwable {
3336
var pinnedSetMethod = Unobfuscator.loadPinnedHashSetMethod(classLoader);
3437
var pinnedInChatMethod = Unobfuscator.loadPinnedInChatMethod(classLoader);
3538

39+
3640
// increase pinned limit in chat to 60
3741
XposedBridge.hookMethod(pinnedInChatMethod, XC_MethodReplacement.returnConstant(60));
3842

43+
// Fix bug in initialCapacity of LinkedHashSet
44+
XposedHelpers.findAndHookConstructor(LinkedHashSet.class, int.class, new XC_MethodHook() {
45+
@Override
46+
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
47+
if ((int) param.args[0] < 0) {
48+
param.args[0] = Math.abs((int) param.args[0]);
49+
}
50+
}
51+
});
52+
3953
// This creates a modified linkedhashMap to return 0 if the fixed list is less than 60.
4054
XposedBridge.hookMethod(pinnedSetMethod, new XC_MethodHook() {
55+
4156
@Override
4257
@SuppressWarnings("unchecked")
4358
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
@@ -63,14 +78,15 @@ public String getPluginName() {
6378
}
6479

6580

81+
@Setter
6682
private static class PinnedLinkedHashMap<T> extends LinkedHashMap<T, T> {
6783

6884
@Override
6985
public int size() {
7086
if (super.size() >= limit) {
71-
return 3;
87+
return super.size();
7288
}
73-
return -60;
89+
return -this.limit;
7490
}
7591

7692
private int limit;
@@ -81,16 +97,12 @@ public Set<T> keySet() {
8197
return new PinnedKeySet<>(this, super.keySet());
8298
}
8399

84-
public void setLimit(int i) {
85-
this.limit = i;
86-
}
87-
88100
static class PinnedKeySet<T> implements Set<T> {
89101

90-
private final Set set;
91-
private final PinnedLinkedHashMap pinnedKeySet;
102+
private final Set<T> set;
103+
private final PinnedLinkedHashMap<T> pinnedKeySet;
92104

93-
public PinnedKeySet(PinnedLinkedHashMap<T> pinnedKeySet, Set set) {
105+
public PinnedKeySet(PinnedLinkedHashMap<T> pinnedKeySet, Set<T> set) {
94106
this.pinnedKeySet = pinnedKeySet;
95107
this.set = set;
96108
}
@@ -125,11 +137,11 @@ public Object[] toArray() {
125137
@NonNull
126138
@Override
127139
public <T1> T1[] toArray(@NonNull T1[] a) {
128-
return (T1[]) set.toArray(a);
140+
return set.toArray(a);
129141
}
130142

131143
@Override
132-
public boolean add(Object t) {
144+
public boolean add(@Nullable T t) {
133145
return set.add(t);
134146
}
135147

0 commit comments

Comments
 (0)