FingerprintStatus.java

  1package eu.siacs.conversations.crypto.axolotl;
  2
  3import android.content.ContentValues;
  4import android.database.Cursor;
  5
  6public class FingerprintStatus {
  7
  8    private Trust trust = Trust.UNTRUSTED;
  9    private boolean active = false;
 10
 11    @Override
 12    public boolean equals(Object o) {
 13        if (this == o) return true;
 14        if (o == null || getClass() != o.getClass()) return false;
 15
 16        FingerprintStatus that = (FingerprintStatus) o;
 17
 18        return active == that.active && trust == that.trust;
 19    }
 20
 21    @Override
 22    public int hashCode() {
 23        int result = trust.hashCode();
 24        result = 31 * result + (active ? 1 : 0);
 25        return result;
 26    }
 27
 28    private FingerprintStatus() {
 29
 30
 31    }
 32
 33    public ContentValues toContentValues() {
 34        final ContentValues contentValues = new ContentValues();
 35        contentValues.put(SQLiteAxolotlStore.TRUST,trust.toString());
 36        contentValues.put(SQLiteAxolotlStore.ACTIVE,active ? 1 : 0);
 37        return contentValues;
 38    }
 39
 40    public static FingerprintStatus fromCursor(Cursor cursor) {
 41        final FingerprintStatus status = new FingerprintStatus();
 42        try {
 43            status.trust = Trust.valueOf(cursor.getString(cursor.getColumnIndex(SQLiteAxolotlStore.TRUST)));
 44        } catch(IllegalArgumentException e) {
 45            status.trust = Trust.UNTRUSTED;
 46        }
 47        status.active = cursor.getInt(cursor.getColumnIndex(SQLiteAxolotlStore.ACTIVE)) > 0;
 48        return status;
 49    }
 50
 51    public static FingerprintStatus createActiveUndecided() {
 52        final FingerprintStatus status = new FingerprintStatus();
 53        status.trust = Trust.UNDECIDED;
 54        status.active = true;
 55        return status;
 56    }
 57
 58    public static FingerprintStatus createActiveVerified(boolean x509) {
 59        final FingerprintStatus status = new FingerprintStatus();
 60        status.trust = x509 ? Trust.VERIFIED_X509 : Trust.VERIFIED;
 61        status.active = true;
 62        return status;
 63    }
 64
 65    public static FingerprintStatus createActive(boolean trusted) {
 66        final FingerprintStatus status = new FingerprintStatus();
 67        status.trust = trusted ? Trust.TRUSTED : Trust.UNTRUSTED;
 68        status.active = true;
 69        return status;
 70    }
 71
 72    public boolean isTrustedAndActive() {
 73        return active && isTrusted();
 74    }
 75
 76    public boolean isTrusted() {
 77        return trust == Trust.TRUSTED || trust == Trust.VERIFIED || trust == Trust.VERIFIED_X509;
 78    }
 79
 80    public boolean isCompromised() {
 81        return trust == Trust.COMPROMISED;
 82    }
 83
 84    public boolean isActive() {
 85        return active;
 86    }
 87
 88    public FingerprintStatus toActive() {
 89        FingerprintStatus status = new FingerprintStatus();
 90        status.trust = trust;
 91        status.active = true;
 92        return status;
 93    }
 94
 95    public FingerprintStatus toInactive() {
 96        FingerprintStatus status = new FingerprintStatus();
 97        status.trust = trust;
 98        status.active = false;
 99        return status;
100    }
101
102    public Trust getTrust() {
103        return trust;
104    }
105
106    public static FingerprintStatus createCompromised() {
107        FingerprintStatus status = new FingerprintStatus();
108        status.active = false;
109        status.trust = Trust.COMPROMISED;
110        return status;
111    }
112
113    public enum Trust {
114        COMPROMISED,
115        UNDECIDED,
116        UNTRUSTED,
117        TRUSTED,
118        VERIFIED,
119        VERIFIED_X509
120    }
121
122}