open-keychain/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/livedata/GenericLiveData.java
Vincent Breitmoser 4ea8c4a8f6 Use LiveData and ViewModel for ManageSecurityToken fragment
This hopefully also prevents some NPEs from google play crash reports.
2018-07-17 12:20:56 +02:00

58 lines
1.7 KiB
Java

package org.sufficientlysecure.keychain.livedata;
import android.content.Context;
import android.net.Uri;
import android.os.SystemClock;
import org.sufficientlysecure.keychain.daos.DatabaseNotifyManager;
import org.sufficientlysecure.keychain.ui.keyview.loader.AsyncTaskLiveData;
public class GenericLiveData<T> extends AsyncTaskLiveData<T> {
private GenericDataLoader<T> genericDataLoader;
private Long minLoadTime;
public GenericLiveData(Context context, GenericDataLoader<T> genericDataLoader) {
super(context, null);
this.genericDataLoader = genericDataLoader;
}
public GenericLiveData(Context context, Uri notifyUri, GenericDataLoader<T> genericDataLoader) {
super(context, notifyUri);
this.genericDataLoader = genericDataLoader;
}
public GenericLiveData(Context context, long notifyMasterKeyId, GenericDataLoader<T> genericDataLoader) {
super(context, DatabaseNotifyManager.getNotifyUriMasterKeyId(notifyMasterKeyId));
this.genericDataLoader = genericDataLoader;
}
public void setMinLoadTime(Long minLoadTime) {
this.minLoadTime = minLoadTime;
}
@Override
protected T asyncLoadData() {
long startTime = SystemClock.elapsedRealtime();
T result = genericDataLoader.loadData();
try {
long elapsedTime = SystemClock.elapsedRealtime() - startTime;
if (minLoadTime != null && elapsedTime < minLoadTime) {
Thread.sleep(minLoadTime - elapsedTime);
}
} catch (InterruptedException e) {
// nvm
}
return result;
}
public interface GenericDataLoader<T> {
T loadData();
}
}