aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-04-06 05:29:19 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2014-04-06 05:29:19 +0200
commitbd8dc05b1c013581e6fca33ece1c8dc5649915da (patch)
tree7b0801df7c37ebed8acf619f4534a76e7295175e
parent194fc7507b7fd3b63899f8b1ebc78b758cc376d0 (diff)
downloadopen-keychain-bd8dc05b1c013581e6fca33ece1c8dc5649915da.tar.gz
open-keychain-bd8dc05b1c013581e6fca33ece1c8dc5649915da.tar.bz2
open-keychain-bd8dc05b1c013581e6fca33ece1c8dc5649915da.zip
certs: display green dot for certified keys in KeyListFragment
-rw-r--r--OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java1
-rw-r--r--OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java11
-rw-r--r--OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java19
-rw-r--r--OpenPGP-Keychain/src/main/res/layout/key_list_item.xml8
4 files changed, 35 insertions, 4 deletions
diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java
index a029da478..cad40d4a0 100644
--- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java
+++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainContract.java
@@ -110,6 +110,7 @@ public class KeychainContract {
public static class KeyRings implements BaseColumns, KeysColumns, UserIdsColumns {
public static final String MASTER_KEY_ID = KeysColumns.MASTER_KEY_ID;
public static final String IS_REVOKED = KeysColumns.IS_REVOKED;
+ public static final String VERIFIED = CertsColumns.VERIFIED;
public static final String HAS_SECRET = "has_secret";
public static final Uri CONTENT_URI = BASE_CONTENT_URI_INTERNAL.buildUpon()
diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
index 72cb53e76..9b9e4991d 100644
--- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
+++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
@@ -257,11 +257,12 @@ public class KeychainProvider extends ContentProvider {
projectionMap.put(KeyRings.CAN_CERTIFY, Keys.CAN_CERTIFY);
projectionMap.put(KeyRings.CAN_ENCRYPT, Keys.CAN_ENCRYPT);
projectionMap.put(KeyRings.CAN_SIGN, Keys.CAN_SIGN);
- projectionMap.put(KeyRings.CREATION, Keys.CREATION);
+ projectionMap.put(KeyRings.CREATION, Tables.KEYS + "." + Keys.CREATION);
projectionMap.put(KeyRings.EXPIRY, Keys.EXPIRY);
projectionMap.put(KeyRings.ALGORITHM, Keys.ALGORITHM);
projectionMap.put(KeyRings.FINGERPRINT, Keys.FINGERPRINT);
projectionMap.put(KeyRings.USER_ID, UserIds.USER_ID);
+ projectionMap.put(KeyRings.VERIFIED, KeyRings.VERIFIED);
projectionMap.put(KeyRings.HAS_SECRET, "(" + Tables.KEY_RINGS_SECRET + "." + KeyRings.MASTER_KEY_ID + " IS NOT NULL) AS " + KeyRings.HAS_SECRET);
qb.setProjectionMap(projectionMap);
@@ -276,9 +277,17 @@ public class KeychainProvider extends ContentProvider {
+ Tables.KEYS + "." + Keys.MASTER_KEY_ID
+ " = "
+ Tables.KEY_RINGS_SECRET + "." + KeyRings.MASTER_KEY_ID
+ + ") LEFT JOIN " + Tables.CERTS + " ON ("
+ + Tables.KEYS + "." + Keys.MASTER_KEY_ID
+ + " = "
+ + Tables.CERTS + "." + KeyRings.MASTER_KEY_ID
+ + " AND " + Tables.CERTS + "." + Certs.VERIFIED
+ + " = " + Certs.VERIFIED_SECRET
+ ")"
);
qb.appendWhere(Tables.KEYS + "." + Keys.RANK + " = 0");
+ // in case there are multiple verifying certificates
+ groupBy = Tables.KEYS + "." + Keys.MASTER_KEY_ID;
switch(match) {
case KEY_RING_UNIFIED: {
diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
index 38fce0f0a..3e2c96464 100644
--- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
+++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
@@ -50,6 +50,7 @@ import android.widget.AbsListView.MultiChoiceModeListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.FrameLayout;
+import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.beardedhen.androidbootstrap.BootstrapButton;
@@ -251,13 +252,15 @@ public class KeyListFragment extends Fragment
KeyRings.MASTER_KEY_ID,
KeyRings.USER_ID,
KeyRings.IS_REVOKED,
+ KeyRings.VERIFIED,
KeyRings.HAS_SECRET
};
static final int INDEX_MASTER_KEY_ID = 1;
static final int INDEX_USER_ID = 2;
static final int INDEX_IS_REVOKED = 3;
- static final int INDEX_HAS_SECRET = 4;
+ static final int INDEX_VERIFIED = 4;
+ static final int INDEX_HAS_SECRET = 5;
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
@@ -491,12 +494,14 @@ public class KeyListFragment extends Fragment
FrameLayout statusLayout = (FrameLayout) view.findViewById(R.id.status_layout);
Button button = (Button) view.findViewById(R.id.edit);
TextView revoked = (TextView) view.findViewById(R.id.revoked);
+ ImageView verified = (ImageView) view.findViewById(R.id.verified);
if (cursor.getInt(KeyListFragment.INDEX_HAS_SECRET) != 0) {
// this is a secret key - show the edit button
statusDivider.setVisibility(View.VISIBLE);
statusLayout.setVisibility(View.VISIBLE);
revoked.setVisibility(View.GONE);
+ verified.setVisibility(View.GONE);
button.setVisibility(View.VISIBLE);
final long id = cursor.getLong(INDEX_MASTER_KEY_ID);
@@ -514,8 +519,16 @@ public class KeyListFragment extends Fragment
button.setVisibility(View.GONE);
boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0;
- statusLayout.setVisibility(isRevoked ? View.VISIBLE : View.GONE);
- revoked.setVisibility(isRevoked ? View.VISIBLE : View.GONE);
+ if(isRevoked) {
+ statusLayout.setVisibility(isRevoked ? View.VISIBLE : View.GONE);
+ revoked.setVisibility(isRevoked ? View.VISIBLE : View.GONE);
+ verified.setVisibility(View.GONE);
+ } else {
+ boolean isVerified = cursor.getInt(INDEX_VERIFIED) > 0;
+ statusLayout.setVisibility(isVerified ? View.VISIBLE : View.GONE);
+ revoked.setVisibility(View.GONE);
+ verified.setVisibility(isVerified ? View.VISIBLE : View.GONE);
+ }
}
}
diff --git a/OpenPGP-Keychain/src/main/res/layout/key_list_item.xml b/OpenPGP-Keychain/src/main/res/layout/key_list_item.xml
index 0abae8bbb..84ad9f9b5 100644
--- a/OpenPGP-Keychain/src/main/res/layout/key_list_item.xml
+++ b/OpenPGP-Keychain/src/main/res/layout/key_list_item.xml
@@ -73,6 +73,14 @@
android:text="@string/revoked"
android:textColor="#e00"
android:layout_gravity="center" />
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/verified"
+ android:layout_gravity="center"
+ android:src="@android:drawable/presence_online"
+ android:paddingLeft="25dp" />
</FrameLayout>
</LinearLayout>