diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java index a314f4bb9..4ba2099b3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java @@ -55,7 +55,6 @@ import org.sufficientlysecure.keychain.util.ParcelableFileCache; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -69,8 +68,7 @@ public class ImportKeysAdapter extends RecyclerView.Adapter mData; - private HashMap mDownloadedKeyRings; - private boolean mCurrentAnimated = true; + private KeyState[] mKeyStates; private int mCurrent; public ImportKeysAdapter(FragmentActivity activity, ImportKeysListener listener, boolean mNonInteractive) { @@ -85,13 +83,16 @@ public class ImportKeysAdapter extends RecyclerView.Adapter data) { this.mData = data; - this.mDownloadedKeyRings = new HashMap<>(); + this.mKeyStates = new KeyState[data.size()]; + for (int i = 0; i < mKeyStates.length; i++) { + mKeyStates[i] = new KeyState(); + } notifyDataSetChanged(); } public void clearData() { mData = null; - mDownloadedKeyRings = null; + mKeyStates = null; notifyDataSetChanged(); } @@ -166,7 +167,9 @@ public class ImportKeysAdapter extends RecyclerView.Adapter realUserIdsPlusKeybase = entry.getKeybaseUserIds(); - CanonicalizedKeyRing keyRing = mDownloadedKeyRings.get(position); - realUserIdsPlusKeybase.addAll(keyRing.getUnorderedUserIds()); - entry.setUserIds(realUserIdsPlusKeybase); - ArrayList>> sortedIds = entry.getSortedUserIds(); for (Map.Entry> pair : sortedIds) { String cUserId = pair.getKey(); @@ -228,7 +226,6 @@ public class ImportKeysAdapter extends RecyclerView.Adapter realUserIdsPlusKeybase = keyRing.getUnorderedUserIds(); + realUserIdsPlusKeybase.addAll(entry.getKeybaseUserIds()); + entry.setUserIds(realUserIdsPlusKeybase); + + mKeyStates[mCurrent].mDownloaded = true; + changeState(mCurrent, true); } else { throw new RuntimeException("getKey retrieved more than one key."); } } } + private class KeyState { + public boolean mDownloaded = false; + public boolean mShowed = false; + public boolean mAnimated = true; + } + + private void changeState(int position, boolean showed) { + KeyState keyState = mKeyStates[position]; + keyState.mShowed = showed; + keyState.mAnimated = true; + notifyItemChanged(position); + } + }