add option to choose from unrelated keys

This commit is contained in:
Vincent Breitmoser 2018-04-02 16:50:05 +02:00
parent 336c43cfde
commit b75cd19a4f
5 changed files with 50 additions and 14 deletions

View file

@ -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) {

View file

@ -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;
}
}

View file

@ -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();
}
}

View file

@ -2,7 +2,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/list_all_keys"
android:title="List all keys"
android:checkable="true"
android:title="@string/menu_list_unrelated_keys"
android:orderInCategory="1" />
</menu>

View file

@ -1995,4 +1995,5 @@
<string name="select_identity_cancel">Cancel</string>
<string name="select_identity_create">Create a key for me</string>
<string name="error_save_key_internal">"Internal error saving key!"</string>
<string name="menu_list_unrelated_keys">List unrelated keys</string>
</resources>