public static <T> RetainFragment<T> findOrCreate(FragmentManager fm, String tag) { // noinspection unchecked, we know this is the the right type RetainFragment<T> retainFragment = (RetainFragment<T>) fm.findFragmentByTag(tag); if (retainFragment == null || retainFragment.cleared) { retainFragment = new RetainFragment<>(); fm.beginTransaction() .add(retainFragment, tag) .commitAllowingStateLoss(); } return retainFragment; }
private void cancelAndClearCryptoOperation() { RetainFragment<MessageCryptoHelper> retainCryptoHelperFragment = getMessageCryptoHelperRetainFragment(false); if (retainCryptoHelperFragment != null) { if (retainCryptoHelperFragment.hasData()) { messageCryptoHelper = retainCryptoHelperFragment.getData(); messageCryptoHelper.cancelIfRunning(); messageCryptoHelper = null; } retainCryptoHelperFragment.clearAndRemove(fragmentManager); } }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); }
private void startOrResumeCryptoOperation(String openPgpProvider) { RetainFragment<MessageCryptoHelper> retainCryptoHelperFragment = getMessageCryptoHelperRetainFragment(true); if (retainCryptoHelperFragment.hasData()) { messageCryptoHelper = retainCryptoHelperFragment.getData(); } if (messageCryptoHelper == null || !messageCryptoHelper.isConfiguredForOpenPgpProvider(openPgpProvider)) { messageCryptoHelper = new MessageCryptoHelper( context, new OpenPgpApiFactory(), AutocryptOperations.getInstance(), openPgpProvider); retainCryptoHelperFragment.setData(messageCryptoHelper); } messageCryptoHelper.asyncStartOrResumeProcessingMessage( localMessage, messageCryptoCallback, cachedDecryptionResult, !account.isOpenPgpHideSignOnly()); }
private RetainFragment<MessageCryptoHelper> getMessageCryptoHelperRetainFragment(boolean createIfNotExists) { if (createIfNotExists) { return RetainFragment.findOrCreate(fragmentManager, "crypto_helper_" + messageReference.hashCode()); } else { return RetainFragment.findOrNull(fragmentManager, "crypto_helper_" + messageReference.hashCode()); } }