package org.sufficientlysecure.keychain.ui.keyview; import java.util.List; import android.arch.lifecycle.LiveData; import android.arch.lifecycle.Transformations; import android.arch.lifecycle.ViewModel; import android.content.Context; import org.sufficientlysecure.keychain.daos.KeyMetadataDao; import org.sufficientlysecure.keychain.livedata.GenericLiveData; import org.sufficientlysecure.keychain.model.KeyMetadata; import org.sufficientlysecure.keychain.model.SubKey.UnifiedKeyInfo; import org.sufficientlysecure.keychain.ui.keyview.loader.IdentityDao; import org.sufficientlysecure.keychain.ui.keyview.loader.IdentityDao.IdentityInfo; import org.sufficientlysecure.keychain.ui.keyview.loader.SubkeyStatusDao; import org.sufficientlysecure.keychain.ui.keyview.loader.SubkeyStatusDao.KeySubkeyStatus; import org.sufficientlysecure.keychain.ui.keyview.loader.SystemContactDao; import org.sufficientlysecure.keychain.ui.keyview.loader.SystemContactDao.SystemContactInfo; public class KeyFragmentViewModel extends ViewModel { private LiveData> identityInfo; private LiveData subkeyStatus; private LiveData systemContactInfo; private LiveData keyserverStatus; LiveData> getIdentityInfo(Context context, LiveData unifiedKeyInfoLiveData) { if (identityInfo == null) { IdentityDao identityDao = IdentityDao.getInstance(context); identityInfo = Transformations.switchMap(unifiedKeyInfoLiveData, (unifiedKeyInfo) -> unifiedKeyInfo == null ? null : new GenericLiveData<>(context, () -> identityDao.getIdentityInfos(unifiedKeyInfo.master_key_id()))); } return identityInfo; } LiveData getSubkeyStatus(Context context, LiveData unifiedKeyInfoLiveData) { if (subkeyStatus == null) { SubkeyStatusDao subkeyStatusDao = SubkeyStatusDao.getInstance(context); subkeyStatus = Transformations.switchMap(unifiedKeyInfoLiveData, (unifiedKeyInfo) -> unifiedKeyInfo == null ? null : new GenericLiveData<>(context, () -> subkeyStatusDao.getSubkeyStatus(unifiedKeyInfo.master_key_id()))); } return subkeyStatus; } LiveData getSystemContactInfo(Context context, LiveData unifiedKeyInfoLiveData) { if (systemContactInfo == null) { SystemContactDao systemContactDao = SystemContactDao.getInstance(context); systemContactInfo = Transformations.switchMap(unifiedKeyInfoLiveData, (unifiedKeyInfo) -> unifiedKeyInfo == null ? null : new GenericLiveData<>(context, () -> systemContactDao.getSystemContactInfo(unifiedKeyInfo.master_key_id(), unifiedKeyInfo.has_any_secret()))); } return systemContactInfo; } LiveData getKeyserverStatus(Context context, LiveData unifiedKeyInfoLiveData) { if (keyserverStatus == null) { KeyMetadataDao keyMetadataDao = KeyMetadataDao.create(context); keyserverStatus = Transformations.switchMap(unifiedKeyInfoLiveData, (unifiedKeyInfo) -> unifiedKeyInfo == null ? null : new GenericLiveData<>(context, () -> keyMetadataDao.getKeyMetadata(unifiedKeyInfo.master_key_id()))); } return keyserverStatus; } }