package org.mercury_im.messenger.android.ui.ikey; import android.graphics.Bitmap; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import org.jivesoftware.smackx.ox.OpenPgpSecretKeyBackupPassphrase; 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; import org.mercury_im.messenger.core.util.Optional; import org.mercury_im.messenger.core.viewmodel.ikey.IkeySecretKeyBackupCreationViewModel; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import javax.inject.Inject; import io.reactivex.Observable; public class IkeyBackupCreationAndroidViewModel extends ViewModel implements MercuryAndroidViewModel { private static final Logger LOGGER = Logger.getLogger(IkeyBackupCreationAndroidViewModel.class.getName()); MutableLiveData passphrase = new MutableLiveData<>(); MutableLiveData passphraseAsQrCode = new MutableLiveData<>(); @Inject IkeySecretKeyBackupCreationViewModel commonViewModel; @Inject SchedulersFacade schedulers; public IkeyBackupCreationAndroidViewModel() { MercuryImApplication.getApplication().getAppComponent().inject(this); } public void initialize(UUID accountId) { getCommonViewModel().setAccountId(accountId); Observable> passphraseObservable = //getCommonViewModel().getPassphrase() Observable.just(new Optional<>(new OpenPgpSecretKeyBackupPassphrase("71ZA-Y416-UA7A-7NCE-3SNM-88EF"))); 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 getPassphrase() { return passphrase; } public LiveData getPassphraseAsQrCode() { return passphraseAsQrCode; } @Override public IkeySecretKeyBackupCreationViewModel getCommonViewModel() { return commonViewModel; } }