aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-03-10 03:30:20 +0100
committerVincent Breitmoser <valodim@mugenguild.com>2015-03-10 03:30:20 +0100
commitdeafe946fd652e59773e1ada4b37e77713f3d377 (patch)
treee67548f4bb7490f3ba54c95005adac33a8aedb35 /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter
parentf069d9814dd5bb4dcc99be1a08da2d7bcf350cde (diff)
downloadopen-keychain-deafe946fd652e59773e1ada4b37e77713f3d377.tar.gz
open-keychain-deafe946fd652e59773e1ada4b37e77713f3d377.tar.bz2
open-keychain-deafe946fd652e59773e1ada4b37e77713f3d377.zip
filter out unknown linked ids
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java53
1 files changed, 35 insertions, 18 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java
index 76cb63223..e0f28efb8 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java
@@ -22,7 +22,6 @@ import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
-import android.support.v4.app.Fragment;
import android.support.v4.content.CursorLoader;
import android.util.Log;
import android.view.LayoutInflater;
@@ -35,12 +34,12 @@ import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.linked.LinkedIdentity;
import org.sufficientlysecure.keychain.pgp.linked.RawLinkedIdentity;
-import org.sufficientlysecure.keychain.provider.KeychainContract;
import org.sufficientlysecure.keychain.provider.KeychainContract.Certs;
import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;
import org.sufficientlysecure.keychain.ui.linked.LinkedIdViewFragment;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils.State;
+import org.sufficientlysecure.keychain.util.FilterCursorWrapper;
import java.io.IOException;
import java.util.WeakHashMap;
@@ -58,6 +57,23 @@ public class LinkedIdsAdapter extends UserAttributesAdapter {
}
@Override
+ public Cursor swapCursor(Cursor cursor) {
+ if (cursor == null) {
+ return super.swapCursor(null);
+ }
+
+ Cursor filteredCursor = new FilterCursorWrapper(cursor) {
+ @Override
+ public boolean isVisible(Cursor cursor) {
+ RawLinkedIdentity id = getItemAtPosition(cursor);
+ return id instanceof LinkedIdentity;
+ }
+ };
+
+ return super.swapCursor(filteredCursor);
+ }
+
+ @Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
@@ -83,25 +99,26 @@ public class LinkedIdsAdapter extends UserAttributesAdapter {
holder.vVerified.setVisibility(View.GONE);
}
- RawLinkedIdentity id = getItem(cursor.getPosition());
+ RawLinkedIdentity id = getItemAtPosition(cursor);
holder.setData(mContext, id);
}
- @Override
- public RawLinkedIdentity getItem(int position) {
- RawLinkedIdentity ret = mLinkedIdentityCache.get(position);
+ public RawLinkedIdentity getItemAtPosition(Cursor cursor) {
+ int rank = cursor.getInt(INDEX_RANK);
+ Log.d(Constants.TAG, "requested rank: " + rank);
+
+ RawLinkedIdentity ret = mLinkedIdentityCache.get(rank);
if (ret != null) {
+ Log.d(Constants.TAG, "cached!");
return ret;
}
+ Log.d(Constants.TAG, "not cached!");
- Cursor c = getCursor();
- c.moveToPosition(position);
-
- byte[] data = c.getBlob(INDEX_ATTRIBUTE_DATA);
try {
+ byte[] data = cursor.getBlob(INDEX_ATTRIBUTE_DATA);
ret = LinkedIdentity.fromAttributeData(data);
- mLinkedIdentityCache.put(position, ret);
+ mLinkedIdentityCache.put(rank, ret);
return ret;
} catch (IOException e) {
Log.e(Constants.TAG, "could not read linked identity subpacket data", e);
@@ -110,6 +127,13 @@ public class LinkedIdsAdapter extends UserAttributesAdapter {
}
@Override
+ public RawLinkedIdentity getItem(int position) {
+ Cursor cursor = getCursor();
+ cursor.moveToPosition(position);
+ return getItemAtPosition(cursor);
+ }
+
+ @Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = mInflater.inflate(R.layout.linked_id_item, null);
ViewHolder holder = new ViewHolder(v);
@@ -128,7 +152,6 @@ public class LinkedIdsAdapter extends UserAttributesAdapter {
public LinkedIdViewFragment getLinkedIdFragment(Uri baseUri,
int position, byte[] fingerprint) throws IOException {
-
Cursor c = getCursor();
c.moveToPosition(position);
int rank = c.getInt(UserIdsAdapter.INDEX_RANK);
@@ -167,10 +190,4 @@ public class LinkedIdsAdapter extends UserAttributesAdapter {
}
}
- @Override
- public void notifyDataSetChanged() {
- mLinkedIdentityCache.clear();
- super.notifyDataSetChanged();
- }
-
}