Mercury-IM/app/src/main/java/org/mercury_im/messenger/android/crypto/ikey/AndroidIkeyBackupCreationVi...

97 lines
3.7 KiB
Java
Raw Normal View History

2020-11-09 15:23:22 +01:00
package org.mercury_im.messenger.android.crypto.ikey;
2020-10-24 19:25:28 +02:00
import android.graphics.Bitmap;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
2020-11-19 23:36:49 +01:00
import org.bouncycastle.openpgp.PGPException;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.XMPPException;
2020-10-24 19:25:28 +02:00
import org.jivesoftware.smackx.ox.OpenPgpSecretKeyBackupPassphrase;
2020-11-19 23:36:49 +01:00
import org.jivesoftware.smackx.pubsub.PubSubException;
2020-10-24 19:25:28 +02:00
import org.mercury_im.messenger.android.MercuryImApplication;
import org.mercury_im.messenger.android.ui.MercuryAndroidViewModel;
import org.mercury_im.messenger.android.util.QrCodeGenerator;
import org.mercury_im.messenger.core.SchedulersFacade;
2020-11-09 15:23:22 +01:00
import org.mercury_im.messenger.core.crypto.OpenPgpSecretKeyBackupPassphraseGenerator;
2020-10-24 19:25:28 +02:00
import org.mercury_im.messenger.core.util.Optional;
import org.mercury_im.messenger.core.viewmodel.ikey.IkeySecretKeyBackupCreationViewModel;
2020-11-19 23:36:49 +01:00
import java.io.IOException;
2020-10-24 19:25:28 +02:00
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.inject.Inject;
import io.reactivex.Observable;
2020-11-09 15:23:22 +01:00
public class AndroidIkeyBackupCreationViewModel extends ViewModel implements MercuryAndroidViewModel<IkeySecretKeyBackupCreationViewModel> {
2020-10-24 19:25:28 +02:00
2020-11-09 15:23:22 +01:00
private static final Logger LOGGER = Logger.getLogger(AndroidIkeyBackupCreationViewModel.class.getName());
2020-10-24 19:25:28 +02:00
MutableLiveData<OpenPgpSecretKeyBackupPassphrase> passphrase = new MutableLiveData<>();
MutableLiveData<Bitmap> passphraseAsQrCode = new MutableLiveData<>();
@Inject
IkeySecretKeyBackupCreationViewModel commonViewModel;
2020-11-09 15:23:22 +01:00
@Inject
OpenPgpSecretKeyBackupPassphraseGenerator passphraseGenerator;
2020-10-24 19:25:28 +02:00
@Inject
SchedulersFacade schedulers;
2020-11-09 15:23:22 +01:00
public AndroidIkeyBackupCreationViewModel() {
2020-10-24 19:25:28 +02:00
MercuryImApplication.getApplication().getAppComponent().inject(this);
}
public void initialize(UUID accountId) {
getCommonViewModel().setAccountId(accountId);
Observable<Optional<OpenPgpSecretKeyBackupPassphrase>> passphraseObservable =
2020-11-09 15:23:22 +01:00
getCommonViewModel().getPassphrase();
//Observable.just(new Optional<>(passphraseGenerator.generateBackupPassphrase()));
2020-10-24 19:25:28 +02:00
addDisposable(passphraseObservable
.subscribeOn(schedulers.getIoScheduler())
.observeOn(schedulers.getUiScheduler())
.filter(Optional::isPresent)
.map(Optional::getItem)
.subscribe(
passphrase::setValue,
e -> LOGGER.log(Level.SEVERE, "Error subscribing to passphrase", e)));
addDisposable(passphraseObservable
.filter(Optional::isPresent)
.map(Optional::getItem)
.map(pass -> QrCodeGenerator.generateBarcode(pass.toString()))
.subscribeOn(schedulers.getIoScheduler())
.observeOn(schedulers.getUiScheduler())
.subscribe(passphraseAsQrCode::setValue,
e -> LOGGER.log(Level.SEVERE, "Error subscribing to passphrase QR code", e)));
}
public LiveData<OpenPgpSecretKeyBackupPassphrase> getPassphrase() {
return passphrase;
}
public LiveData<Bitmap> getPassphraseAsQrCode() {
return passphraseAsQrCode;
}
@Override
public IkeySecretKeyBackupCreationViewModel getCommonViewModel() {
return commonViewModel;
}
2020-11-19 23:36:49 +01:00
public void uploadBackup() {
addDisposable(getCommonViewModel().createBackup()
.compose(schedulers.executeUiSafeCompletable())
.subscribe(() -> LOGGER.log(Level.INFO, "Successfully uploaded ikey backup."),
e -> LOGGER.log(Level.INFO, "Error uploading ikey backup:", e)));
}
2020-10-24 19:25:28 +02:00
}