Merge pull request #2377 from open-keychain/highlight-after-import
Scroll to new key after import
This commit is contained in:
@@ -100,6 +100,8 @@ public class KeyListFragment extends RecyclerFragment<FlexibleAdapter<FlexibleKe
|
|||||||
private KeyRepository keyRepository;
|
private KeyRepository keyRepository;
|
||||||
private FlexibleKeyItemFactory flexibleKeyItemFactory;
|
private FlexibleKeyItemFactory flexibleKeyItemFactory;
|
||||||
|
|
||||||
|
private Long queuedHighlightMasterKeyId;
|
||||||
|
|
||||||
private final ActionMode.Callback mActionCallback = new ActionMode.Callback() {
|
private final ActionMode.Callback mActionCallback = new ActionMode.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
|
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
|
||||||
@@ -247,6 +249,15 @@ public class KeyListFragment extends RecyclerFragment<FlexibleAdapter<FlexibleKe
|
|||||||
keyRepository = KeyRepository.create(requireContext());
|
keyRepository = KeyRepository.create(requireContext());
|
||||||
flexibleKeyItemFactory = new FlexibleKeyItemFactory(requireContext().getResources());
|
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);
|
GenericViewModel viewModel = ViewModelProviders.of(this).get(GenericViewModel.class);
|
||||||
LiveData<List<FlexibleKeyItem>> liveData = viewModel.getGenericLiveData(requireContext(), this::loadFlexibleKeyItems);
|
LiveData<List<FlexibleKeyItem>> liveData = viewModel.getGenericLiveData(requireContext(), this::loadFlexibleKeyItems);
|
||||||
liveData.observe(this, this::onLoadKeyItems);
|
liveData.observe(this, this::onLoadKeyItems);
|
||||||
@@ -261,7 +272,16 @@ public class KeyListFragment extends RecyclerFragment<FlexibleAdapter<FlexibleKe
|
|||||||
private void onLoadKeyItems(List<FlexibleKeyItem> flexibleKeyItems) {
|
private void onLoadKeyItems(List<FlexibleKeyItem> flexibleKeyItems) {
|
||||||
FlexibleAdapter<FlexibleKeyItem> adapter = getAdapter();
|
FlexibleAdapter<FlexibleKeyItem> adapter = getAdapter();
|
||||||
if (adapter == null) {
|
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.setDisplayHeadersAtStartUp(true);
|
||||||
adapter.setStickyHeaders(true);
|
adapter.setStickyHeaders(true);
|
||||||
adapter.setMode(Mode.MULTI);
|
adapter.setMode(Mode.MULTI);
|
||||||
@@ -271,6 +291,20 @@ public class KeyListFragment extends RecyclerFragment<FlexibleAdapter<FlexibleKe
|
|||||||
} else {
|
} else {
|
||||||
adapter.updateDataSet(flexibleKeyItems, true);
|
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) {
|
private String getBubbleText(int position) {
|
||||||
|
|||||||
Reference in New Issue
Block a user