diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index 72b97b352..d40cbfe12 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -100,6 +100,8 @@ public class KeyListFragment extends RecyclerFragment 0) { + queuedHighlightMasterKeyId = importedMasterKeyIds[0]; + } + } + GenericViewModel viewModel = ViewModelProviders.of(this).get(GenericViewModel.class); LiveData> liveData = viewModel.getGenericLiveData(requireContext(), this::loadFlexibleKeyItems); liveData.observe(this, this::onLoadKeyItems); @@ -261,7 +272,16 @@ public class KeyListFragment extends RecyclerFragment flexibleKeyItems) { FlexibleAdapter adapter = getAdapter(); if (adapter == null) { - adapter = new FlexibleAdapter<>(flexibleKeyItems, this, true); + adapter = new FlexibleAdapter(flexibleKeyItems, this, true) { + @Override + public long getItemId(int position) { + FlexibleKeyItem item = getItem(position); + if (item instanceof FlexibleKeyDetailsItem) { + return ((FlexibleKeyDetailsItem) item).keyInfo.master_key_id(); + } + return super.getItemId(position); + } + }; adapter.setDisplayHeadersAtStartUp(true); adapter.setStickyHeaders(true); adapter.setMode(Mode.MULTI); @@ -271,6 +291,20 @@ public class KeyListFragment extends RecyclerFragment adapter) { + if (queuedHighlightMasterKeyId == null) { + return; + } + for (int position = 0; position < adapter.getItemCount(); position++) { + if (adapter.getItemId(position) == queuedHighlightMasterKeyId) { + adapter.smoothScrollToPosition(position); + } + } + + queuedHighlightMasterKeyId = null; } private String getBubbleText(int position) {