show key expiry status similar to revocation

This commit is contained in:
Vincent Breitmoser 2014-04-06 16:09:39 +02:00
parent c3bb2b9d34
commit b4e7d69b35
3 changed files with 13 additions and 13 deletions

View File

@ -179,7 +179,6 @@ public class KeychainDatabase extends SQLiteOpenHelper {
// Enable foreign key constraints // Enable foreign key constraints
db.execSQL("PRAGMA foreign_keys=ON;"); db.execSQL("PRAGMA foreign_keys=ON;");
// TODO remove, once we remove the "always migrate" debug stuff // TODO remove, once we remove the "always migrate" debug stuff
// db.execSQL("DROP TABLE certs;");
// db.execSQL("DROP TABLE user_ids;"); // db.execSQL("DROP TABLE user_ids;");
db.execSQL(CREATE_USER_IDS); db.execSQL(CREATE_USER_IDS);
db.execSQL(CREATE_CERTS); db.execSQL(CREATE_CERTS);

View File

@ -207,17 +207,12 @@ public class ProviderHelper {
Log.e(Constants.TAG, "Key could not be deleted! Maybe we are creating a new one!", e); Log.e(Constants.TAG, "Key could not be deleted! Maybe we are creating a new one!", e);
} }
// insert new version of this keyRing
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
// use exactly the same _ID again to replace key in-place.
// NOTE: If we would not use the same _ID again,
// getting back to the ViewKeyActivity would result in Nullpointer,
// because the currently loaded key would be gone from the database
values.put(KeyRingData.MASTER_KEY_ID, masterKeyId); values.put(KeyRingData.MASTER_KEY_ID, masterKeyId);
values.put(KeyRingData.KEY_RING_DATA, keyRing.getEncoded()); values.put(KeyRingData.KEY_RING_DATA, keyRing.getEncoded());
// insert new version of this keyRing
Uri uri = KeyRingData.buildPublicKeyRingUri(Long.toString(masterKeyId)); Uri uri = KeyRingData.buildPublicKeyRingUri(Long.toString(masterKeyId));
Uri insertedUri = context.getContentResolver().insert(uri, values); context.getContentResolver().insert(uri, values);
// save all keys and userIds included in keyRing object in database // save all keys and userIds included in keyRing object in database
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>(); ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();

View File

@ -68,6 +68,7 @@ import se.emilsjolander.stickylistheaders.ApiLevelTooLowException;
import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter; import se.emilsjolander.stickylistheaders.StickyListHeadersAdapter;
import se.emilsjolander.stickylistheaders.StickyListHeadersListView; import se.emilsjolander.stickylistheaders.StickyListHeadersListView;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
/** /**
@ -252,6 +253,7 @@ public class KeyListFragment extends Fragment
KeyRings.MASTER_KEY_ID, KeyRings.MASTER_KEY_ID,
KeyRings.USER_ID, KeyRings.USER_ID,
KeyRings.IS_REVOKED, KeyRings.IS_REVOKED,
KeyRings.EXPIRY,
KeyRings.VERIFIED, KeyRings.VERIFIED,
KeyRings.HAS_SECRET KeyRings.HAS_SECRET
}; };
@ -259,8 +261,9 @@ public class KeyListFragment extends Fragment
static final int INDEX_MASTER_KEY_ID = 1; static final int INDEX_MASTER_KEY_ID = 1;
static final int INDEX_USER_ID = 2; static final int INDEX_USER_ID = 2;
static final int INDEX_IS_REVOKED = 3; static final int INDEX_IS_REVOKED = 3;
static final int INDEX_VERIFIED = 4; static final int INDEX_EXPIRY = 4;
static final int INDEX_HAS_SECRET = 5; static final int INDEX_VERIFIED = 5;
static final int INDEX_HAS_SECRET = 6;
@Override @Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) { public Loader<Cursor> onCreateLoader(int id, Bundle args) {
@ -519,10 +522,13 @@ public class KeyListFragment extends Fragment
button.setVisibility(View.GONE); button.setVisibility(View.GONE);
boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0;
if(isRevoked) { boolean isExpired = !cursor.isNull(INDEX_EXPIRY)
statusLayout.setVisibility(isRevoked ? View.VISIBLE : View.GONE); && new Date(cursor.getLong(INDEX_EXPIRY)*1000).before(new Date());
revoked.setVisibility(isRevoked ? View.VISIBLE : View.GONE); if(isRevoked || isExpired) {
statusLayout.setVisibility(View.VISIBLE);
revoked.setVisibility(View.VISIBLE);
verified.setVisibility(View.GONE); verified.setVisibility(View.GONE);
revoked.setText(isRevoked ? R.string.revoked : R.string.expired);
} else { } else {
boolean isVerified = cursor.getInt(INDEX_VERIFIED) > 0; boolean isVerified = cursor.getInt(INDEX_VERIFIED) > 0;
statusLayout.setVisibility(isVerified ? View.VISIBLE : View.GONE); statusLayout.setVisibility(isVerified ? View.VISIBLE : View.GONE);