Merge pull request #2377 from open-keychain/highlight-after-import

Scroll to new key after import
This commit is contained in:
Dominik Schürmann 2018-07-13 15:26:55 +02:00 committed by GitHub
commit 1e51cf1aaf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -100,6 +100,8 @@ public class KeyListFragment extends RecyclerFragment<FlexibleAdapter<FlexibleKe
private KeyRepository keyRepository;
private FlexibleKeyItemFactory flexibleKeyItemFactory;
private Long queuedHighlightMasterKeyId;
private final ActionMode.Callback mActionCallback = new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
@ -247,6 +249,15 @@ public class KeyListFragment extends RecyclerFragment<FlexibleAdapter<FlexibleKe
keyRepository = KeyRepository.create(requireContext());
flexibleKeyItemFactory = new FlexibleKeyItemFactory(requireContext().getResources());
Intent intent = getActivity().getIntent();
if (intent != null && intent.hasExtra(ImportKeyResult.EXTRA_RESULT)) {
ImportKeyResult importKeyResult = intent.getParcelableExtra(ImportKeyResult.EXTRA_RESULT);
long[] importedMasterKeyIds = importKeyResult.getImportedMasterKeyIds();
if (importedMasterKeyIds != null && importedMasterKeyIds.length > 0) {
queuedHighlightMasterKeyId = importedMasterKeyIds[0];
}
}
GenericViewModel viewModel = ViewModelProviders.of(this).get(GenericViewModel.class);
LiveData<List<FlexibleKeyItem>> liveData = viewModel.getGenericLiveData(requireContext(), this::loadFlexibleKeyItems);
liveData.observe(this, this::onLoadKeyItems);
@ -261,7 +272,16 @@ public class KeyListFragment extends RecyclerFragment<FlexibleAdapter<FlexibleKe
private void onLoadKeyItems(List<FlexibleKeyItem> flexibleKeyItems) {
FlexibleAdapter<FlexibleKeyItem> adapter = getAdapter();
if (adapter == null) {
adapter = new FlexibleAdapter<>(flexibleKeyItems, this, true);
adapter = new FlexibleAdapter<FlexibleKeyItem>(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<FlexibleAdapter<FlexibleKe
} else {
adapter.updateDataSet(flexibleKeyItems, true);
}
maybeHighlightKey(adapter);
}
private void maybeHighlightKey(FlexibleAdapter<FlexibleKeyItem> 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) {