diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java index 74728f4f8..b71a0d681 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdKeyActivity.java @@ -52,7 +52,6 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupMenu; -import android.widget.PopupMenu.OnDismissListener; import android.widget.TextView; import android.widget.Toast; @@ -261,31 +260,37 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { @Override public void showLayoutSelectNoKeys() { layoutAnimator.setDisplayedChildId(R.id.select_key_layout_no_keys); + buttonOverflow.setVisibility(View.GONE); } @Override public void showLayoutSelectKeyList() { layoutAnimator.setDisplayedChildId(R.id.select_key_layout_key_list); + buttonOverflow.setVisibility(View.GONE); } @Override public void showLayoutImportExplanation() { layoutAnimator.setDisplayedChildId(R.id.select_key_layout_import_expl); + buttonOverflow.setVisibility(View.VISIBLE); } @Override public void showLayoutGenerateProgress() { layoutAnimator.setDisplayedChildId(R.id.select_key_layout_generate_progress); + buttonOverflow.setVisibility(View.GONE); } @Override public void showLayoutGenerateOk() { layoutAnimator.setDisplayedChildId(R.id.select_key_layout_generate_ok); + buttonOverflow.setVisibility(View.GONE); } @Override public void showLayoutGenerateSave() { layoutAnimator.setDisplayedChildId(R.id.select_key_layout_generate_save); + buttonOverflow.setVisibility(View.GONE); } @Override @@ -324,11 +329,23 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { } activity.launchImportOperation(importKeyringParcel); } + + @Override + public void displayOverflowMenu() { + ContextThemeWrapper theme = ThemeChanger.getDialogThemeWrapper(getActivity()); + PopupMenu menu = new PopupMenu(theme, buttonOverflow); + menu.inflate(R.menu.select_identity_menu); + menu.setOnMenuItemClickListener(item -> { + presenter.onClickMenuListAllKeys(); + return false; + }); + menu.show(); + } }; } private void setupListenersForPresenter() { - buttonOverflow.setOnClickListener(this::showContextMenu); + buttonOverflow.setOnClickListener(view -> presenter.onClickOverflowMenu()); buttonKeyListOther.setOnClickListener(view -> presenter.onClickKeyListOther()); buttonKeyListCancel.setOnClickListener(view -> presenter.onClickKeyListCancel()); @@ -346,13 +363,6 @@ public class RemoteSelectIdKeyActivity extends FragmentActivity { keyChoiceList.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), (view, position) -> presenter.onKeyItemClick(position))); } - - private void showContextMenu(View view) { - PopupMenu menu = new PopupMenu(getActivity(), view); - menu.inflate(R.menu.identity_context_menu); - // menu.setOnMenuItemClickListener(DecryptListFragment.this); - menu.show(); - } } private void launchImportOperation(ImportKeyringParcel importKeyringParcel) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdViewModel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdViewModel.java index f5482dcae..d287129fb 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdViewModel.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdViewModel.java @@ -12,6 +12,7 @@ public class RemoteSelectIdViewModel extends ViewModel { private KeyInfoLiveData keyInfo; private PgpKeyGenerationLiveData keyGenerationData; + private boolean listAllKeys; public KeyInfoLiveData getKeyInfo(Context context) { if (keyInfo == null) { @@ -27,4 +28,12 @@ public class RemoteSelectIdViewModel extends ViewModel { return keyGenerationData; } + public boolean isListAllKeys() { + return listAllKeys; + } + + public void setListAllKeys(boolean listAllKeys) { + this.listAllKeys = listAllKeys; + } + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdentityKeyPresenter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdentityKeyPresenter.java index 2cb055167..e60b3bdfa 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdentityKeyPresenter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/dialog/RemoteSelectIdentityKeyPresenter.java @@ -27,6 +27,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.graphics.drawable.Drawable; +import android.net.Uri; import org.openintents.openpgp.util.OpenPgpUtils; import org.openintents.openpgp.util.OpenPgpUtils.UserId; @@ -39,7 +40,6 @@ import org.sufficientlysecure.keychain.pgp.UncachedKeyRing; import org.sufficientlysecure.keychain.provider.KeychainContract.KeyRings; import org.sufficientlysecure.keychain.service.ImportKeyringParcel; import org.sufficientlysecure.keychain.service.SaveKeyringParcel; -import org.sufficientlysecure.keychain.ui.base.CryptoOperationHelper; import timber.log.Timber; @@ -83,8 +83,13 @@ class RemoteSelectIdentityKeyPresenter { this.userId = OpenPgpUtils.splitUserId(rawUserId); view.setAddressText(userId.email); - viewModel.getKeyInfo(context).setKeySelector(KeySelector.createOnlySecret( - KeyRings.buildUnifiedKeyRingsFindByUserIdUri(userId.email), null)); + loadKeyInfo(); + } + + private void loadKeyInfo() { + Uri listedKeyRingUri = viewModel.isListAllKeys() ? + KeyRings.buildUnifiedKeyRingsUri() : KeyRings.buildUnifiedKeyRingsFindByUserIdUri(userId.email); + viewModel.getKeyInfo(context).setKeySelector(KeySelector.createOnlySecret(listedKeyRingUri, null)); } private void setPackageInfo(String packageName) throws NameNotFoundException { @@ -199,6 +204,16 @@ class RemoteSelectIdentityKeyPresenter { view.showImportInternalError(); } + public void onClickOverflowMenu() { + view.displayOverflowMenu(); + } + + public void onClickMenuListAllKeys() { + viewModel.setListAllKeys(true); + loadKeyInfo(); + view.showLayoutSelectKeyList(); + } + interface RemoteSelectIdentityKeyView { void finishAndReturn(long masterKeyId); void finishAsCancelled(); @@ -221,5 +236,7 @@ class RemoteSelectIdentityKeyPresenter { void launchImportOperation(ImportKeyringParcel importKeyringParcel); void showImportInternalError(); + + void displayOverflowMenu(); } } diff --git a/OpenKeychain/src/main/res/menu/select_identity_menu.xml b/OpenKeychain/src/main/res/menu/select_identity_menu.xml index 370e03f17..5f3f09fb2 100644 --- a/OpenKeychain/src/main/res/menu/select_identity_menu.xml +++ b/OpenKeychain/src/main/res/menu/select_identity_menu.xml @@ -2,7 +2,6 @@
\ No newline at end of file diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 5959f17df..c424a9540 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -1995,4 +1995,5 @@