diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/SubKey.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/SubKey.java index 06508b7ec..e035917eb 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/SubKey.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/model/SubKey.java @@ -29,6 +29,7 @@ public abstract class SubKey implements KeysModel { @AutoValue public static abstract class UnifiedKeyInfo implements KeysModel.UnifiedKeyViewModel { private List autocryptPackageNames; + private String cachedUidSearchString; public boolean is_expired() { Long expiry = expiry(); @@ -64,5 +65,16 @@ public abstract class SubKey implements KeysModel { public boolean has_encrypt_key() { return has_encrypt_key_int() != 0; } + + public String uidSearchString() { + if (cachedUidSearchString == null) { + cachedUidSearchString = user_id_list(); + if (cachedUidSearchString == null) { + cachedUidSearchString = ""; + } + cachedUidSearchString = cachedUidSearchString.toLowerCase(); + } + return cachedUidSearchString; + } } } 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 abc4695b9..19ab30368 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 @@ -112,8 +112,8 @@ class RemoteSelectIdentityKeyPresenter { } private void goToSelectLayout() { - List filteredKeyInfoData = - viewModel.isListAllKeys() || TextUtils.isEmpty(userId.email) ? keyInfoData : getFilteredKeyInfo(); + List filteredKeyInfoData = viewModel.isListAllKeys() || TextUtils.isEmpty(userId.email) ? + keyInfoData : getFilteredKeyInfo(userId.email.toLowerCase().trim()); if (filteredKeyInfoData == null) { view.showLayoutEmpty(); @@ -125,12 +125,11 @@ class RemoteSelectIdentityKeyPresenter { } } - private List getFilteredKeyInfo() { + private List getFilteredKeyInfo(String filterString) { if (viewModel.filteredKeyInfo == null) { viewModel.filteredKeyInfo = new ArrayList<>(); for (UnifiedKeyInfo unifiedKeyInfo : keyInfoData) { - String emailSearchList = unifiedKeyInfo.user_id_list(); - if (emailSearchList == null || emailSearchList.contains(userId.email)) { + if (unifiedKeyInfo.uidSearchString().contains(filterString)) { viewModel.filteredKeyInfo.add(unifiedKeyInfo); } } @@ -185,7 +184,7 @@ class RemoteSelectIdentityKeyPresenter { } void onKeyItemClick(int position) { - selectedMasterKeyId = getFilteredKeyInfo().get(position).master_key_id(); + selectedMasterKeyId = getFilteredKeyInfo(userId.email.toLowerCase()).get(position).master_key_id(); view.highlightKey(position); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/FlexibleKeyDetailsItem.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/FlexibleKeyDetailsItem.java index 16c7a9050..932a139af 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/FlexibleKeyDetailsItem.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/FlexibleKeyDetailsItem.java @@ -66,8 +66,7 @@ public class FlexibleKeyDetailsItem extends FlexibleSectionableKeyItem @Override public boolean isKeptForConstraint(CharSequence constraint) { - String uidList = keyInfo.user_id_list(); - return uidList == null || uidList.contains(constraint); + return keyInfo.uidSearchString().contains(constraint); } }