package com.taoke.autopay.android.data.local;
|
|
import android.text.TextUtils;
|
|
import androidx.datastore.preferences.core.MutablePreferences;
|
import androidx.datastore.preferences.core.Preferences;
|
import androidx.datastore.preferences.core.PreferencesKeys;
|
import androidx.datastore.preferences.rxjava3.RxPreferenceDataStoreBuilder;
|
import androidx.datastore.rxjava3.RxDataStore;
|
|
import com.google.gson.Gson;
|
import com.taoke.autopay.android.App;
|
import com.taoke.autopay.android.data.local.entity.LoginAccount;
|
import com.taoke.autopay.android.data.network.entity.User;
|
|
import io.reactivex.rxjava3.core.Single;
|
|
public class LocalStore {
|
|
private final RxDataStore<Preferences> dataStore =
|
new RxPreferenceDataStoreBuilder(App.getInstance(), "user-info").build();
|
|
private static final Preferences.Key<String> ACCOUNT_KEY = PreferencesKeys.stringKey("account"); // 保存的用户消息
|
private static final Preferences.Key<String> USER_KEY = PreferencesKeys.stringKey("user"); // 保存的用户消息
|
private static final Preferences.Key<Integer> PAY_TIMES = PreferencesKeys.intKey("pay_times"); // 保存的支付次数
|
private static final Preferences.Key<Integer> PAYED_TIMES = PreferencesKeys.intKey("payed_times"); // 成功的支付次数
|
private static final Preferences.Key<String> PERSONAL_PAY_PWD = PreferencesKeys.stringKey("personal_pay_pwd"); // 保存的个人支付密码
|
private static final Preferences.Key<String> BUSINESS_PAY_PWD = PreferencesKeys.stringKey("business_pay_pwd"); // 保存的企业支付密码
|
|
private static final class Holder {
|
private static final LocalStore INSTANCE = new LocalStore();
|
}
|
|
public static LocalStore getInstance() {
|
return LocalStore.Holder.INSTANCE;
|
}
|
|
public LoginAccount getAccount() {
|
try {
|
String accountStr = dataStore.data()
|
.map(preferences -> {
|
return preferences.get(ACCOUNT_KEY);
|
})
|
.blockingFirst("");
|
if (TextUtils.isEmpty(accountStr)) {
|
return null;
|
}
|
return new Gson().fromJson(accountStr, LoginAccount.class);
|
}catch(Throwable e){
|
return null;
|
}
|
}
|
|
public void putAccount(LoginAccount account) {
|
dataStore.updateDataAsync(preferences -> {
|
MutablePreferences mutablePreferences = preferences.toMutablePreferences();
|
mutablePreferences.set(ACCOUNT_KEY, new Gson().toJson(account));
|
return Single.just(mutablePreferences);
|
});
|
}
|
|
public User getUser() {
|
String userStr = dataStore.data()
|
.map(preferences -> preferences.get(USER_KEY))
|
.blockingFirst("");
|
return new Gson().fromJson(userStr, User.class);
|
}
|
|
public void putUser(User user) {
|
dataStore.updateDataAsync(preferences -> {
|
MutablePreferences mutablePreferences = preferences.toMutablePreferences();
|
mutablePreferences.set(USER_KEY, new Gson().toJson(user));
|
return Single.just(mutablePreferences);
|
});
|
}
|
|
public void removeUser() {
|
|
dataStore.updateDataAsync(preferences -> {
|
MutablePreferences mutablePreferences = preferences.toMutablePreferences();
|
mutablePreferences.remove(USER_KEY);
|
return Single.just(mutablePreferences);
|
}).blockingSubscribe();
|
}
|
|
public Integer getPayTimes() {
|
return dataStore.data()
|
.map(preferences -> {
|
Integer result = preferences.get(PAY_TIMES);
|
if (result == null) {
|
result = 49;
|
}
|
return result;
|
})
|
.blockingFirst(49); // 默认49
|
}
|
|
public void putPayTimes(int payTimes) {
|
dataStore.updateDataAsync(preferences -> {
|
MutablePreferences mutablePreferences = preferences.toMutablePreferences();
|
mutablePreferences.set(PAY_TIMES, payTimes);
|
return Single.just(mutablePreferences);
|
});
|
}
|
|
public Integer getPayedTimes() {
|
return dataStore.data()
|
.map(preferences -> {
|
Integer result = preferences.get(PAYED_TIMES);
|
if (result == null) {
|
result = 0;
|
}
|
return result;
|
})
|
.blockingFirst(0); // 默认49
|
}
|
|
public void putPayedTimes(int payedTimes) {
|
dataStore.updateDataAsync(preferences -> {
|
MutablePreferences mutablePreferences = preferences.toMutablePreferences();
|
mutablePreferences.set(PAYED_TIMES, payedTimes);
|
return Single.just(mutablePreferences);
|
});
|
}
|
|
public void putPayedTimesBlocking(int payedTimes) {
|
dataStore.updateDataAsync(preferences -> {
|
MutablePreferences mutablePreferences = preferences.toMutablePreferences();
|
mutablePreferences.set(PAYED_TIMES, payedTimes);
|
return Single.just(mutablePreferences);
|
}).blockingSubscribe();
|
}
|
|
public String getPersonalPayPwd() {
|
return dataStore.data()
|
.map(preferences -> {
|
String result = preferences.get(PERSONAL_PAY_PWD);
|
if (result == null) {
|
result = "";
|
}
|
return result;
|
})
|
.blockingFirst("");
|
}
|
|
public void putPersonalPayPwd(String payPwd) {
|
dataStore.updateDataAsync(preferences -> {
|
MutablePreferences mutablePreferences = preferences.toMutablePreferences();
|
mutablePreferences.set(PERSONAL_PAY_PWD, payPwd);
|
return Single.just(mutablePreferences);
|
});
|
}
|
|
public String getBusinessPayPwd() {
|
return dataStore.data()
|
.map(preferences -> {
|
String result = preferences.get(BUSINESS_PAY_PWD);
|
if (result == null) {
|
result = "";
|
}
|
return result;
|
})
|
.blockingFirst("");
|
}
|
|
public void putBusinessPayPwd(String payPwd) {
|
dataStore.updateDataAsync(preferences -> {
|
MutablePreferences mutablePreferences = preferences.toMutablePreferences();
|
mutablePreferences.set(BUSINESS_PAY_PWD, payPwd);
|
return Single.just(mutablePreferences);
|
});
|
}
|
}
|