mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-12-25 00:18:51 -05:00
Remove display of key id in other lists
This commit is contained in:
parent
81d6da899f
commit
fd5719ff6b
@ -205,6 +205,8 @@ public class AppSettingsAllowedKeysListFragment extends ListFragmentWorkaround i
|
|||||||
KeyRings.HAS_ENCRYPT,
|
KeyRings.HAS_ENCRYPT,
|
||||||
KeyRings.VERIFIED,
|
KeyRings.VERIFIED,
|
||||||
KeyRings.HAS_ANY_SECRET,
|
KeyRings.HAS_ANY_SECRET,
|
||||||
|
KeyRings.HAS_DUPLICATE_USER_ID,
|
||||||
|
KeyRings.CREATION,
|
||||||
};
|
};
|
||||||
|
|
||||||
String inMasterKeyList = null;
|
String inMasterKeyList = null;
|
||||||
|
@ -154,6 +154,8 @@ public class SelectSignKeyIdListFragment extends ListFragmentWorkaround implemen
|
|||||||
KeyRings.HAS_ENCRYPT,
|
KeyRings.HAS_ENCRYPT,
|
||||||
KeyRings.VERIFIED,
|
KeyRings.VERIFIED,
|
||||||
KeyRings.HAS_ANY_SECRET,
|
KeyRings.HAS_ANY_SECRET,
|
||||||
|
KeyRings.HAS_DUPLICATE_USER_ID,
|
||||||
|
KeyRings.CREATION,
|
||||||
};
|
};
|
||||||
|
|
||||||
String selection = KeyRings.HAS_ANY_SECRET + " != 0";
|
String selection = KeyRings.HAS_ANY_SECRET + " != 0";
|
||||||
|
@ -263,6 +263,8 @@ public class SelectPublicKeyFragment extends ListFragmentWorkaround implements T
|
|||||||
KeyRings.IS_REVOKED,
|
KeyRings.IS_REVOKED,
|
||||||
KeyRings.HAS_ENCRYPT,
|
KeyRings.HAS_ENCRYPT,
|
||||||
KeyRings.VERIFIED,
|
KeyRings.VERIFIED,
|
||||||
|
KeyRings.HAS_DUPLICATE_USER_ID,
|
||||||
|
KeyRings.CREATION,
|
||||||
};
|
};
|
||||||
|
|
||||||
String inMasterKeyList = null;
|
String inMasterKeyList = null;
|
||||||
|
@ -20,6 +20,7 @@ package org.sufficientlysecure.keychain.ui.adapter;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.support.v4.widget.CursorAdapter;
|
import android.support.v4.widget.CursorAdapter;
|
||||||
|
import android.text.format.DateFormat;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
@ -35,6 +36,10 @@ import org.sufficientlysecure.keychain.ui.util.Highlighter;
|
|||||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Yes this class is abstract!
|
* Yes this class is abstract!
|
||||||
@ -44,7 +49,8 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter {
|
|||||||
private String mQuery;
|
private String mQuery;
|
||||||
private LayoutInflater mInflater;
|
private LayoutInflater mInflater;
|
||||||
|
|
||||||
protected int mIndexUserId, mIndexMasterKeyId, mIndexIsExpiry, mIndexIsRevoked;
|
protected int mIndexUserId, mIndexMasterKeyId, mIndexIsExpiry, mIndexIsRevoked,
|
||||||
|
mIndexDuplicateUserId, mIndexCreation;
|
||||||
|
|
||||||
public SelectKeyCursorAdapter(Context context, Cursor c, int flags, ListView listView) {
|
public SelectKeyCursorAdapter(Context context, Cursor c, int flags, ListView listView) {
|
||||||
super(context, c, flags);
|
super(context, c, flags);
|
||||||
@ -75,6 +81,8 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter {
|
|||||||
mIndexMasterKeyId = cursor.getColumnIndexOrThrow(KeyRings.MASTER_KEY_ID);
|
mIndexMasterKeyId = cursor.getColumnIndexOrThrow(KeyRings.MASTER_KEY_ID);
|
||||||
mIndexIsExpiry = cursor.getColumnIndexOrThrow(KeyRings.IS_EXPIRED);
|
mIndexIsExpiry = cursor.getColumnIndexOrThrow(KeyRings.IS_EXPIRED);
|
||||||
mIndexIsRevoked = cursor.getColumnIndexOrThrow(KeyRings.IS_REVOKED);
|
mIndexIsRevoked = cursor.getColumnIndexOrThrow(KeyRings.IS_REVOKED);
|
||||||
|
mIndexDuplicateUserId = cursor.getColumnIndexOrThrow(KeyRings.HAS_DUPLICATE_USER_ID);
|
||||||
|
mIndexCreation = cursor.getColumnIndexOrThrow(KeyRings.CREATION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +98,7 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter {
|
|||||||
|
|
||||||
public static class ViewHolderItem {
|
public static class ViewHolderItem {
|
||||||
public View view;
|
public View view;
|
||||||
public TextView mainUserId, mainUserIdRest, keyId;
|
public TextView mainUserId, mainUserIdRest, creation;
|
||||||
public ImageView statusIcon;
|
public ImageView statusIcon;
|
||||||
public CheckBox selected;
|
public CheckBox selected;
|
||||||
|
|
||||||
@ -99,7 +107,7 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter {
|
|||||||
selected.setEnabled(enabled);
|
selected.setEnabled(enabled);
|
||||||
mainUserId.setEnabled(enabled);
|
mainUserId.setEnabled(enabled);
|
||||||
mainUserIdRest.setEnabled(enabled);
|
mainUserIdRest.setEnabled(enabled);
|
||||||
keyId.setEnabled(enabled);
|
creation.setEnabled(enabled);
|
||||||
statusIcon.setEnabled(enabled);
|
statusIcon.setEnabled(enabled);
|
||||||
|
|
||||||
// Sorta special: We set an item as clickable to disable it in the ListView. This works
|
// Sorta special: We set an item as clickable to disable it in the ListView. This works
|
||||||
@ -128,8 +136,20 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter {
|
|||||||
h.mainUserIdRest.setVisibility(View.GONE);
|
h.mainUserIdRest.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
long masterKeyId = cursor.getLong(mIndexMasterKeyId);
|
boolean duplicate = cursor.getLong(mIndexDuplicateUserId) > 0;
|
||||||
h.keyId.setText(KeyFormattingUtils.beautifyKeyIdWithPrefix(mContext, masterKeyId));
|
if (duplicate) {
|
||||||
|
Date creationDate = new Date(cursor.getLong(mIndexCreation) * 1000);
|
||||||
|
Calendar creationCal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
|
||||||
|
creationCal.setTime(creationDate);
|
||||||
|
// convert from UTC to time zone of device
|
||||||
|
creationCal.setTimeZone(TimeZone.getDefault());
|
||||||
|
|
||||||
|
h.creation.setText(context.getString(R.string.label_creation) + ": "
|
||||||
|
+ DateFormat.getDateFormat(context).format(creationCal.getTime()));
|
||||||
|
h.creation.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
h.creation.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
boolean enabled;
|
boolean enabled;
|
||||||
if (cursor.getInt(mIndexIsRevoked) != 0) {
|
if (cursor.getInt(mIndexIsRevoked) != 0) {
|
||||||
@ -155,7 +175,7 @@ abstract public class SelectKeyCursorAdapter extends CursorAdapter {
|
|||||||
holder.view = view;
|
holder.view = view;
|
||||||
holder.mainUserId = (TextView) view.findViewById(R.id.select_key_item_name);
|
holder.mainUserId = (TextView) view.findViewById(R.id.select_key_item_name);
|
||||||
holder.mainUserIdRest = (TextView) view.findViewById(R.id.select_key_item_email);
|
holder.mainUserIdRest = (TextView) view.findViewById(R.id.select_key_item_email);
|
||||||
holder.keyId = (TextView) view.findViewById(R.id.select_key_item_key_id);
|
holder.creation = (TextView) view.findViewById(R.id.select_key_item_creation);
|
||||||
holder.statusIcon = (ImageView) view.findViewById(R.id.select_key_item_status_icon);
|
holder.statusIcon = (ImageView) view.findViewById(R.id.select_key_item_status_icon);
|
||||||
holder.selected = (CheckBox) view.findViewById(R.id.selected);
|
holder.selected = (CheckBox) view.findViewById(R.id.selected);
|
||||||
view.setTag(holder);
|
view.setTag(holder);
|
||||||
|
@ -28,6 +28,7 @@ import android.support.v4.app.FragmentActivity;
|
|||||||
import android.support.v4.app.LoaderManager;
|
import android.support.v4.app.LoaderManager;
|
||||||
import android.support.v4.content.CursorLoader;
|
import android.support.v4.content.CursorLoader;
|
||||||
import android.support.v4.content.Loader;
|
import android.support.v4.content.Loader;
|
||||||
|
import android.text.format.DateFormat;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -51,9 +52,12 @@ import org.sufficientlysecure.keychain.util.ContactHelper;
|
|||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
public class EncryptKeyCompletionView extends TokenCompleteTextView {
|
public class EncryptKeyCompletionView extends TokenCompleteTextView {
|
||||||
public EncryptKeyCompletionView(Context context) {
|
public EncryptKeyCompletionView(Context context) {
|
||||||
@ -125,7 +129,9 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView {
|
|||||||
KeyRings.USER_ID,
|
KeyRings.USER_ID,
|
||||||
KeyRings.FINGERPRINT,
|
KeyRings.FINGERPRINT,
|
||||||
KeyRings.IS_EXPIRED,
|
KeyRings.IS_EXPIRED,
|
||||||
KeyRings.HAS_ENCRYPT
|
KeyRings.HAS_ENCRYPT,
|
||||||
|
KeyRings.HAS_DUPLICATE_USER_ID,
|
||||||
|
KeyRings.CREATION
|
||||||
};
|
};
|
||||||
|
|
||||||
String where = KeyRings.HAS_ENCRYPT + " NOT NULL AND " + KeyRings.IS_EXPIRED + " = 0 AND "
|
String where = KeyRings.HAS_ENCRYPT + " NOT NULL AND " + KeyRings.IS_EXPIRED + " = 0 AND "
|
||||||
@ -153,7 +159,7 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView {
|
|||||||
public void onFocusChanged(boolean hasFocus, int direction, Rect previous) {
|
public void onFocusChanged(boolean hasFocus, int direction, Rect previous) {
|
||||||
super.onFocusChanged(hasFocus, direction, previous);
|
super.onFocusChanged(hasFocus, direction, previous);
|
||||||
if (hasFocus) {
|
if (hasFocus) {
|
||||||
((InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE))
|
((InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE))
|
||||||
.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
|
.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -180,25 +186,30 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView {
|
|||||||
private String mUserIdFull;
|
private String mUserIdFull;
|
||||||
private String[] mUserId;
|
private String[] mUserId;
|
||||||
private long mKeyId;
|
private long mKeyId;
|
||||||
|
private boolean mHasDuplicate;
|
||||||
|
private Date mCreation;
|
||||||
private String mFingerprint;
|
private String mFingerprint;
|
||||||
|
|
||||||
public EncryptionKey(String userId, long keyId, String fingerprint) {
|
public EncryptionKey(String userId, long keyId, boolean hasDuplicate, Date creation, String fingerprint) {
|
||||||
this.mUserId = KeyRing.splitUserId(userId);
|
mUserId = KeyRing.splitUserId(userId);
|
||||||
this.mUserIdFull = userId;
|
mUserIdFull = userId;
|
||||||
this.mKeyId = keyId;
|
mKeyId = keyId;
|
||||||
this.mFingerprint = fingerprint;
|
mHasDuplicate = hasDuplicate;
|
||||||
|
mCreation = creation;
|
||||||
|
mFingerprint = fingerprint;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EncryptionKey(Cursor cursor) {
|
public EncryptionKey(Cursor cursor) {
|
||||||
this(cursor.getString(cursor.getColumnIndexOrThrow(KeyRings.USER_ID)),
|
this(cursor.getString(cursor.getColumnIndexOrThrow(KeyRings.USER_ID)),
|
||||||
cursor.getLong(cursor.getColumnIndexOrThrow(KeyRings.KEY_ID)),
|
cursor.getLong(cursor.getColumnIndexOrThrow(KeyRings.KEY_ID)),
|
||||||
|
cursor.getLong(cursor.getColumnIndexOrThrow(KeyRings.HAS_DUPLICATE_USER_ID)) > 0,
|
||||||
|
new Date(cursor.getLong(cursor.getColumnIndexOrThrow(KeyRings.CREATION)) * 1000),
|
||||||
KeyFormattingUtils.convertFingerprintToHex(
|
KeyFormattingUtils.convertFingerprintToHex(
|
||||||
cursor.getBlob(cursor.getColumnIndexOrThrow(KeyRings.FINGERPRINT))));
|
cursor.getBlob(cursor.getColumnIndexOrThrow(KeyRings.FINGERPRINT))));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public EncryptionKey(CachedPublicKeyRing ring) throws PgpKeyNotFoundException {
|
public EncryptionKey(CachedPublicKeyRing ring) throws PgpKeyNotFoundException {
|
||||||
this(ring.getPrimaryUserId(), ring.extractOrGetMasterKeyId(),
|
this(ring.getPrimaryUserId(), ring.extractOrGetMasterKeyId(), false, null,
|
||||||
KeyFormattingUtils.convertFingerprintToHex(ring.getFingerprint()));
|
KeyFormattingUtils.convertFingerprintToHex(ring.getFingerprint()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,13 +233,13 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView {
|
|||||||
if (mUserId[1] != null) {
|
if (mUserId[1] != null) {
|
||||||
return mUserId[1];
|
return mUserId[1];
|
||||||
} else {
|
} else {
|
||||||
return getKeyIdHex();
|
return getCreationDate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getTertiary() {
|
public String getTertiary() {
|
||||||
if (mUserId[0] != null) {
|
if (mUserId[0] != null) {
|
||||||
return getKeyIdHex();
|
return getCreationDate();
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -238,6 +249,20 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView {
|
|||||||
return mKeyId;
|
return mKeyId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCreationDate() {
|
||||||
|
if (mHasDuplicate) {
|
||||||
|
Calendar creationCal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
|
||||||
|
creationCal.setTime(mCreation);
|
||||||
|
// convert from UTC to time zone of device
|
||||||
|
creationCal.setTimeZone(TimeZone.getDefault());
|
||||||
|
|
||||||
|
return getContext().getString(R.string.label_creation) + ": "
|
||||||
|
+ DateFormat.getDateFormat(getContext()).format(creationCal.getTime());
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public String getKeyIdHex() {
|
public String getKeyIdHex() {
|
||||||
return KeyFormattingUtils.beautifyKeyIdWithPrefix(getContext(), mKeyId);
|
return KeyFormattingUtils.beautifyKeyIdWithPrefix(getContext(), mKeyId);
|
||||||
}
|
}
|
||||||
@ -278,7 +303,7 @@ public class EncryptKeyCompletionView extends TokenCompleteTextView {
|
|||||||
protected boolean keepObject(EncryptionKey obj, String mask) {
|
protected boolean keepObject(EncryptionKey obj, String mask) {
|
||||||
String m = mask.toLowerCase(Locale.ENGLISH);
|
String m = mask.toLowerCase(Locale.ENGLISH);
|
||||||
return obj.getUserId().toLowerCase(Locale.ENGLISH).contains(m) ||
|
return obj.getUserId().toLowerCase(Locale.ENGLISH).contains(m) ||
|
||||||
obj.getKeyIdHex().toString().contains(m) ||
|
obj.getKeyIdHex().contains(m) ||
|
||||||
obj.getKeyIdHexShort().startsWith(m);
|
obj.getKeyIdHexShort().startsWith(m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
android:textAppearance="?android:attr/textAppearanceSmall" />
|
android:textAppearance="?android:attr/textAppearanceSmall" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/select_key_item_key_id"
|
android:id="@+id/select_key_item_creation"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="0xBBBBBBBBBBBBBBB"
|
android:text="0xBBBBBBBBBBBBBBB"
|
||||||
|
Loading…
Reference in New Issue
Block a user