Better impl of LSPosedRemotePreference
This commit is contained in:
parent
d9b3263077
commit
cfe15100c0
|
|
@ -3,6 +3,7 @@ package org.lsposed.lspd.impl;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
import android.util.ArraySet;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
|
@ -28,21 +29,22 @@ public class LSPosedRemotePreferences implements SharedPreferences {
|
||||||
IRemotePreferenceCallback callback = new IRemotePreferenceCallback.Stub() {
|
IRemotePreferenceCallback callback = new IRemotePreferenceCallback.Stub() {
|
||||||
@Override
|
@Override
|
||||||
synchronized public void onUpdate(Bundle bundle) {
|
synchronized public void onUpdate(Bundle bundle) {
|
||||||
if (bundle.containsKey("map"))
|
Set<String> changes = new ArraySet<>();
|
||||||
mMap.putAll((Map<String, ?>) bundle.getSerializable("map"));
|
|
||||||
if (bundle.containsKey("delete")) {
|
if (bundle.containsKey("delete")) {
|
||||||
for (var key : bundle.getStringArrayList("delete")) {
|
var deletes = bundle.getStringArrayList("delete");
|
||||||
|
changes.addAll(deletes);
|
||||||
|
for (var key : deletes) {
|
||||||
mMap.remove(key);
|
mMap.remove(key);
|
||||||
synchronized (mListeners) {
|
|
||||||
mListeners.forEach((listener, __) -> listener.onSharedPreferenceChanged(LSPosedRemotePreferences.this, key));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (bundle.containsKey("diff")) {
|
if (bundle.containsKey("put")) {
|
||||||
for (var key : bundle.getStringArrayList("diff")) {
|
var puts = (Map<String, Object>) bundle.getSerializable("put");
|
||||||
synchronized (mListeners) {
|
mMap.putAll(puts);
|
||||||
mListeners.forEach((listener, __) -> listener.onSharedPreferenceChanged(LSPosedRemotePreferences.this, key));
|
changes.addAll(puts.keySet());
|
||||||
}
|
}
|
||||||
|
synchronized (mListeners) {
|
||||||
|
for (var key : changes) {
|
||||||
|
mListeners.keySet().forEach(listener -> listener.onSharedPreferenceChanged(LSPosedRemotePreferences.this, key));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue