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.os.Bundle;
|
||||
import android.os.RemoteException;
|
||||
import android.util.ArraySet;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
|
|
@ -28,21 +29,22 @@ public class LSPosedRemotePreferences implements SharedPreferences {
|
|||
IRemotePreferenceCallback callback = new IRemotePreferenceCallback.Stub() {
|
||||
@Override
|
||||
synchronized public void onUpdate(Bundle bundle) {
|
||||
if (bundle.containsKey("map"))
|
||||
mMap.putAll((Map<String, ?>) bundle.getSerializable("map"));
|
||||
Set<String> changes = new ArraySet<>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
if (bundle.containsKey("put")) {
|
||||
var puts = (Map<String, Object>) bundle.getSerializable("put");
|
||||
mMap.putAll(puts);
|
||||
changes.addAll(puts.keySet());
|
||||
}
|
||||
synchronized (mListeners) {
|
||||
mListeners.forEach((listener, __) -> listener.onSharedPreferenceChanged(LSPosedRemotePreferences.this, key));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (bundle.containsKey("diff")) {
|
||||
for (var key : bundle.getStringArrayList("diff")) {
|
||||
synchronized (mListeners) {
|
||||
mListeners.forEach((listener, __) -> listener.onSharedPreferenceChanged(LSPosedRemotePreferences.this, key));
|
||||
}
|
||||
for (var key : changes) {
|
||||
mListeners.keySet().forEach(listener -> listener.onSharedPreferenceChanged(LSPosedRemotePreferences.this, key));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue