mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-27 11:12:15 -05:00
some (hopefully better) database/cursor handling, picking encryption and signature keys working again, tho it'll have to be tidied up
This commit is contained in:
parent
5fb8cb4d5e
commit
edd9a22882
@ -62,7 +62,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="fill_parent"/>
|
android:layout_height="fill_parent"/>
|
||||||
|
|
||||||
<TextView
|
<!-- <TextView
|
||||||
android:id="@+id/creation"
|
android:id="@+id/creation"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:text="31.12.2009"
|
android:text="31.12.2009"
|
||||||
@ -74,7 +74,7 @@
|
|||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:text="31.12.2010"
|
android:text="31.12.2010"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout_height="wrap_content"/> -->
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/status"
|
android:id="@+id/status"
|
||||||
|
@ -82,7 +82,6 @@ import org.bouncycastle2.openpgp.PGPUtil;
|
|||||||
import org.thialfihar.android.apg.provider.Database;
|
import org.thialfihar.android.apg.provider.Database;
|
||||||
import org.thialfihar.android.apg.provider.KeyRings;
|
import org.thialfihar.android.apg.provider.KeyRings;
|
||||||
import org.thialfihar.android.apg.provider.PublicKeys;
|
import org.thialfihar.android.apg.provider.PublicKeys;
|
||||||
import org.thialfihar.android.apg.provider.SecretKeys;
|
|
||||||
import org.thialfihar.android.apg.ui.widget.KeyEditor;
|
import org.thialfihar.android.apg.ui.widget.KeyEditor;
|
||||||
import org.thialfihar.android.apg.ui.widget.SectionView;
|
import org.thialfihar.android.apg.ui.widget.SectionView;
|
||||||
import org.thialfihar.android.apg.ui.widget.UserIdEditor;
|
import org.thialfihar.android.apg.ui.widget.UserIdEditor;
|
||||||
@ -176,6 +175,10 @@ public class Apg {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Database getDatabase() {
|
||||||
|
return mDatabase;
|
||||||
|
}
|
||||||
|
|
||||||
public static void setEditPassPhrase(String passPhrase) {
|
public static void setEditPassPhrase(String passPhrase) {
|
||||||
mEditPassPhrase = passPhrase;
|
mEditPassPhrase = passPhrase;
|
||||||
}
|
}
|
||||||
@ -1034,7 +1037,7 @@ public class Apg {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Vector<Integer> getKeyRingIds(int type) {
|
public static Vector<Integer> getKeyRingIds(int type) {
|
||||||
SQLiteDatabase db = mDatabase.getReadableDatabase();
|
SQLiteDatabase db = mDatabase.db();
|
||||||
Vector<Integer> keyIds = new Vector<Integer>();
|
Vector<Integer> keyIds = new Vector<Integer>();
|
||||||
Cursor c = db.query(KeyRings.TABLE_NAME,
|
Cursor c = db.query(KeyRings.TABLE_NAME,
|
||||||
new String[] { KeyRings._ID },
|
new String[] { KeyRings._ID },
|
||||||
@ -1045,7 +1048,8 @@ public class Apg {
|
|||||||
keyIds.add(c.getInt(0));
|
keyIds.add(c.getInt(0));
|
||||||
} while (c.moveToNext());
|
} while (c.moveToNext());
|
||||||
}
|
}
|
||||||
db.close();
|
c.close();
|
||||||
|
|
||||||
return keyIds;
|
return keyIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,6 @@ import java.util.Vector;
|
|||||||
import org.bouncycastle2.openpgp.PGPException;
|
import org.bouncycastle2.openpgp.PGPException;
|
||||||
import org.bouncycastle2.openpgp.PGPPublicKeyRing;
|
import org.bouncycastle2.openpgp.PGPPublicKeyRing;
|
||||||
import org.bouncycastle2.openpgp.PGPSecretKeyRing;
|
import org.bouncycastle2.openpgp.PGPSecretKeyRing;
|
||||||
import org.thialfihar.android.apg.provider.Database;
|
|
||||||
import org.thialfihar.android.apg.provider.KeyRings;
|
import org.thialfihar.android.apg.provider.KeyRings;
|
||||||
import org.thialfihar.android.apg.provider.Keys;
|
import org.thialfihar.android.apg.provider.Keys;
|
||||||
import org.thialfihar.android.apg.provider.UserIds;
|
import org.thialfihar.android.apg.provider.UserIds;
|
||||||
@ -51,6 +50,7 @@ import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
|
|||||||
|
|
||||||
public class KeyListActivity extends BaseActivity {
|
public class KeyListActivity extends BaseActivity {
|
||||||
protected ExpandableListView mList;
|
protected ExpandableListView mList;
|
||||||
|
protected KeyListAdapter mListAdapter;
|
||||||
|
|
||||||
protected int mSelectedItem = -1;
|
protected int mSelectedItem = -1;
|
||||||
protected int mTask = 0;
|
protected int mTask = 0;
|
||||||
@ -66,7 +66,8 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
setContentView(R.layout.key_list);
|
setContentView(R.layout.key_list);
|
||||||
|
|
||||||
mList = (ExpandableListView) findViewById(R.id.list);
|
mList = (ExpandableListView) findViewById(R.id.list);
|
||||||
mList.setAdapter(new KeyListAdapter(this));
|
mListAdapter = new KeyListAdapter(this);
|
||||||
|
mList.setAdapter(mListAdapter);
|
||||||
registerForContextMenu(mList);
|
registerForContextMenu(mList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,7 +125,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case Id.dialog.delete_key: {
|
case Id.dialog.delete_key: {
|
||||||
final int keyRingId = ((KeyListAdapter) mList.getExpandableListAdapter()).getKeyRingId(mSelectedItem);
|
final int keyRingId = mListAdapter.getKeyRingId(mSelectedItem);
|
||||||
mSelectedItem = -1;
|
mSelectedItem = -1;
|
||||||
// TODO: better way to do this?
|
// TODO: better way to do this?
|
||||||
String userId = "<unknown>";
|
String userId = "<unknown>";
|
||||||
@ -258,7 +259,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
Id.database.type_public :
|
Id.database.type_public :
|
||||||
Id.database.type_secret);
|
Id.database.type_secret);
|
||||||
} else {
|
} else {
|
||||||
int keyRingId = ((KeyListAdapter) mList.getExpandableListAdapter()).getKeyRingId(mSelectedItem);
|
int keyRingId = mListAdapter.getKeyRingId(mSelectedItem);
|
||||||
keyRingIds.add(keyRingId);
|
keyRingIds.add(keyRingId);
|
||||||
mSelectedItem = -1;
|
mSelectedItem = -1;
|
||||||
}
|
}
|
||||||
@ -294,8 +295,8 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected void refreshList() {
|
protected void refreshList() {
|
||||||
((KeyListAdapter) mList.getExpandableListAdapter()).rebuild(true);
|
mListAdapter.rebuild(true);
|
||||||
((KeyListAdapter) mList.getExpandableListAdapter()).notifyDataSetChanged();
|
mListAdapter.notifyDataSetChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -402,7 +403,7 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
|
|
||||||
public KeyListAdapter(Context context) {
|
public KeyListAdapter(Context context) {
|
||||||
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
mDatabase = new Database(context).getReadableDatabase();
|
mDatabase = Apg.getDatabase().db();
|
||||||
mCursor = mDatabase.query(
|
mCursor = mDatabase.query(
|
||||||
KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " +
|
KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " +
|
||||||
"(" + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " +
|
"(" + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " +
|
||||||
@ -420,13 +421,18 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
},
|
},
|
||||||
KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = ?",
|
KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = ?",
|
||||||
new String[] { "" + (mKeyType == Id.type.public_key ?
|
new String[] { "" + (mKeyType == Id.type.public_key ?
|
||||||
Id.database.type_public :
|
Id.database.type_public : Id.database.type_secret) },
|
||||||
Id.database.type_secret) },
|
|
||||||
null, null, UserIds.TABLE_NAME + "." + UserIds.USER_ID + " ASC");
|
null, null, UserIds.TABLE_NAME + "." + UserIds.USER_ID + " ASC");
|
||||||
|
|
||||||
rebuild(false);
|
rebuild(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void finalize() throws Throwable {
|
||||||
|
mCursor.deactivate();
|
||||||
|
super.finalize();
|
||||||
|
}
|
||||||
|
|
||||||
public void rebuild(boolean requery) {
|
public void rebuild(boolean requery) {
|
||||||
if (requery) {
|
if (requery) {
|
||||||
mCursor.requery();
|
mCursor.requery();
|
||||||
@ -437,13 +443,6 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void finalize() throws Throwable {
|
|
||||||
mCursor.close();
|
|
||||||
mDatabase.close();
|
|
||||||
super.finalize();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Vector<KeyChild> getChildrenOfGroup(int groupPosition) {
|
protected Vector<KeyChild> getChildrenOfGroup(int groupPosition) {
|
||||||
Vector<KeyChild> children = mChildren.get(groupPosition);
|
Vector<KeyChild> children = mChildren.get(groupPosition);
|
||||||
if (children != null) {
|
if (children != null) {
|
||||||
@ -497,8 +496,6 @@ public class KeyListActivity extends BaseActivity {
|
|||||||
return children;
|
return children;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasStableIds() {
|
public boolean hasStableIds() {
|
||||||
return true;
|
return true;
|
||||||
|
@ -16,12 +16,8 @@
|
|||||||
|
|
||||||
package org.thialfihar.android.apg;
|
package org.thialfihar.android.apg;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
import org.bouncycastle2.openpgp.PGPPublicKey;
|
|
||||||
import org.bouncycastle2.openpgp.PGPPublicKeyRing;
|
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.thialfihar.android.apg;
|
package org.thialfihar.android.apg;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.provider.Database;
|
|
||||||
import org.thialfihar.android.apg.provider.KeyRings;
|
import org.thialfihar.android.apg.provider.KeyRings;
|
||||||
import org.thialfihar.android.apg.provider.Keys;
|
import org.thialfihar.android.apg.provider.Keys;
|
||||||
import org.thialfihar.android.apg.provider.UserIds;
|
import org.thialfihar.android.apg.provider.UserIds;
|
||||||
@ -40,7 +39,7 @@ public class SelectPublicKeyListAdapter extends BaseAdapter {
|
|||||||
|
|
||||||
public SelectPublicKeyListAdapter(ListView parent) {
|
public SelectPublicKeyListAdapter(ListView parent) {
|
||||||
mParent = parent;
|
mParent = parent;
|
||||||
mDatabase = new Database(parent.getContext()).getReadableDatabase();
|
mDatabase = Apg.getDatabase().db();
|
||||||
mInflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
mInflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
mCursor = mDatabase.query(
|
mCursor = mDatabase.query(
|
||||||
KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " +
|
KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " +
|
||||||
@ -68,8 +67,8 @@ public class SelectPublicKeyListAdapter extends BaseAdapter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void finalize() throws Throwable {
|
protected void finalize() throws Throwable {
|
||||||
|
// TODO: this doesn't seem to work...
|
||||||
mCursor.close();
|
mCursor.close();
|
||||||
mDatabase.close();
|
|
||||||
super.finalize();
|
super.finalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,8 +175,8 @@ public class SelectPublicKeyListAdapter extends BaseAdapter {
|
|||||||
mainUserId.setEnabled(enabled);
|
mainUserId.setEnabled(enabled);
|
||||||
mainUserIdRest.setEnabled(enabled);
|
mainUserIdRest.setEnabled(enabled);
|
||||||
keyId.setEnabled(enabled);
|
keyId.setEnabled(enabled);
|
||||||
//creation.setEnabled(enabled);
|
/*creation.setEnabled(enabled);
|
||||||
//expiry.setEnabled(enabled);
|
expiry.setEnabled(enabled);*/
|
||||||
selected.setEnabled(enabled);
|
selected.setEnabled(enabled);
|
||||||
status.setEnabled(enabled);
|
status.setEnabled(enabled);
|
||||||
|
|
||||||
|
@ -16,32 +16,16 @@
|
|||||||
|
|
||||||
package org.thialfihar.android.apg;
|
package org.thialfihar.android.apg;
|
||||||
|
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.Vector;
|
|
||||||
|
|
||||||
import org.bouncycastle2.openpgp.PGPSecretKey;
|
|
||||||
import org.bouncycastle2.openpgp.PGPSecretKeyRing;
|
|
||||||
import org.thialfihar.android.apg.utils.IterableIterator;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.BaseAdapter;
|
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.TextView;
|
|
||||||
import android.widget.AdapterView.OnItemClickListener;
|
import android.widget.AdapterView.OnItemClickListener;
|
||||||
|
|
||||||
public class SelectSecretKeyListActivity extends BaseActivity {
|
public class SelectSecretKeyListActivity extends BaseActivity {
|
||||||
protected Vector<PGPSecretKeyRing> mKeyRings;
|
|
||||||
protected LayoutInflater mInflater;
|
|
||||||
protected Intent mIntent;
|
|
||||||
protected ListView mList;
|
protected ListView mList;
|
||||||
|
protected SelectSecretKeyListAdapter mListAdapter;
|
||||||
|
|
||||||
protected long mSelectedKeyId = 0;
|
protected long mSelectedKeyId = 0;
|
||||||
|
|
||||||
@ -49,19 +33,11 @@ public class SelectSecretKeyListActivity extends BaseActivity {
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
|
||||||
|
|
||||||
// fill things
|
|
||||||
mIntent = getIntent();
|
|
||||||
|
|
||||||
mKeyRings = new Vector<PGPSecretKeyRing>();
|
|
||||||
//(Vector<PGPSecretKeyRing>) Apg.getSecretKeyRings().clone();
|
|
||||||
//Collections.sort(mKeyRings, new Apg.SecretKeySorter());
|
|
||||||
|
|
||||||
setContentView(R.layout.select_secret_key);
|
setContentView(R.layout.select_secret_key);
|
||||||
|
|
||||||
mList = (ListView) findViewById(R.id.list);
|
mList = (ListView) findViewById(R.id.list);
|
||||||
mList.setAdapter(new SecretKeyListAdapter(this));
|
mListAdapter = new SelectSecretKeyListAdapter(mList);
|
||||||
|
mList.setAdapter(mListAdapter);
|
||||||
|
|
||||||
mList.setOnItemClickListener(new OnItemClickListener() {
|
mList.setOnItemClickListener(new OnItemClickListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -73,135 +49,4 @@ public class SelectSecretKeyListActivity extends BaseActivity {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private class SecretKeyListAdapter extends BaseAdapter {
|
|
||||||
|
|
||||||
public SecretKeyListAdapter(Context context) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isEnabled(int position) {
|
|
||||||
PGPSecretKeyRing keyRing = mKeyRings.get(position);
|
|
||||||
|
|
||||||
if (Apg.getMasterKey(keyRing) == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector<PGPSecretKey> usableKeys = Apg.getUsableSigningKeys(keyRing);
|
|
||||||
if (usableKeys.size() == 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasStableIds() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getCount() {
|
|
||||||
return mKeyRings.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getItem(int position) {
|
|
||||||
return mKeyRings.get(position);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getItemId(int position) {
|
|
||||||
PGPSecretKeyRing keyRing = mKeyRings.get(position);
|
|
||||||
PGPSecretKey key = Apg.getMasterKey(keyRing);
|
|
||||||
if (key != null) {
|
|
||||||
return key.getKeyID();
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
|
||||||
View view = mInflater.inflate(R.layout.select_secret_key_item, null);
|
|
||||||
boolean enabled = isEnabled(position);
|
|
||||||
|
|
||||||
PGPSecretKeyRing keyRing = mKeyRings.get(position);
|
|
||||||
PGPSecretKey key = null;
|
|
||||||
for (PGPSecretKey tKey : new IterableIterator<PGPSecretKey>(keyRing.getSecretKeys())) {
|
|
||||||
if (tKey.isMasterKey()) {
|
|
||||||
key = tKey;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
TextView mainUserId = (TextView) view.findViewById(R.id.mainUserId);
|
|
||||||
mainUserId.setText(R.string.unknownUserId);
|
|
||||||
TextView mainUserIdRest = (TextView) view.findViewById(R.id.mainUserIdRest);
|
|
||||||
mainUserIdRest.setText("");
|
|
||||||
TextView keyId = (TextView) view.findViewById(R.id.keyId);
|
|
||||||
keyId.setText(R.string.noKey);
|
|
||||||
TextView creation = (TextView) view.findViewById(R.id.creation);
|
|
||||||
creation.setText(R.string.noDate);
|
|
||||||
TextView expiry = (TextView) view.findViewById(R.id.expiry);
|
|
||||||
expiry.setText(R.string.noExpiry);
|
|
||||||
TextView status = (TextView) view.findViewById(R.id.status);
|
|
||||||
status.setText(R.string.unknownStatus);
|
|
||||||
|
|
||||||
if (key != null) {
|
|
||||||
String userId = Apg.getMainUserId(key);
|
|
||||||
if (userId != null) {
|
|
||||||
String chunks[] = userId.split(" <", 2);
|
|
||||||
userId = chunks[0];
|
|
||||||
if (chunks.length > 1) {
|
|
||||||
mainUserIdRest.setText("<" + chunks[1]);
|
|
||||||
}
|
|
||||||
mainUserId.setText(userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
keyId.setText("" + Long.toHexString(key.getKeyID() & 0xffffffffL));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mainUserIdRest.getText().length() == 0) {
|
|
||||||
mainUserIdRest.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector<PGPSecretKey> signingKeys = Apg.getSigningKeys(keyRing);
|
|
||||||
Vector<PGPSecretKey> usableKeys = Apg.getUsableSigningKeys(keyRing);
|
|
||||||
|
|
||||||
PGPSecretKey timespanKey = key;
|
|
||||||
if (usableKeys.size() > 0) {
|
|
||||||
timespanKey = usableKeys.get(0);
|
|
||||||
status.setText(R.string.canSign);
|
|
||||||
} else if (signingKeys.size() > 0) {
|
|
||||||
timespanKey = signingKeys.get(0);
|
|
||||||
Date now = new Date();
|
|
||||||
if (now.compareTo(Apg.getCreationDate(timespanKey)) > 0) {
|
|
||||||
status.setText(R.string.notValid);
|
|
||||||
} else {
|
|
||||||
status.setText(R.string.expired);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
status.setText(R.string.noKey);
|
|
||||||
}
|
|
||||||
|
|
||||||
creation.setText(DateFormat.getDateInstance().format(Apg.getCreationDate(timespanKey)));
|
|
||||||
Date expiryDate = Apg.getExpiryDate(timespanKey);
|
|
||||||
if (expiryDate != null) {
|
|
||||||
expiry.setText(DateFormat.getDateInstance().format(expiryDate));
|
|
||||||
}
|
|
||||||
|
|
||||||
status.setText(status.getText() + " ");
|
|
||||||
|
|
||||||
view.setEnabled(enabled);
|
|
||||||
mainUserId.setEnabled(enabled);
|
|
||||||
mainUserIdRest.setEnabled(enabled);
|
|
||||||
keyId.setEnabled(enabled);
|
|
||||||
creation.setEnabled(enabled);
|
|
||||||
expiry.setEnabled(enabled);
|
|
||||||
status.setEnabled(enabled);
|
|
||||||
|
|
||||||
return view;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
163
src/org/thialfihar/android/apg/SelectSecretKeyListAdapter.java
Normal file
163
src/org/thialfihar/android/apg/SelectSecretKeyListAdapter.java
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
package org.thialfihar.android.apg;
|
||||||
|
|
||||||
|
import org.thialfihar.android.apg.provider.KeyRings;
|
||||||
|
import org.thialfihar.android.apg.provider.Keys;
|
||||||
|
import org.thialfihar.android.apg.provider.UserIds;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.BaseAdapter;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
public class SelectSecretKeyListAdapter extends BaseAdapter {
|
||||||
|
protected LayoutInflater mInflater;
|
||||||
|
protected ListView mParent;
|
||||||
|
protected SQLiteDatabase mDatabase;
|
||||||
|
protected Cursor mCursor;
|
||||||
|
|
||||||
|
public SelectSecretKeyListAdapter(ListView parent) {
|
||||||
|
mParent = parent;
|
||||||
|
mDatabase = Apg.getDatabase().db();
|
||||||
|
mInflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
mCursor = mDatabase.query(
|
||||||
|
KeyRings.TABLE_NAME + " INNER JOIN " + Keys.TABLE_NAME + " ON " +
|
||||||
|
"(" + KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " +
|
||||||
|
Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + " AND " +
|
||||||
|
Keys.TABLE_NAME + "." + Keys.IS_MASTER_KEY + " = '1'" +
|
||||||
|
") " +
|
||||||
|
" INNER JOIN " + UserIds.TABLE_NAME + " ON " +
|
||||||
|
"(" + Keys.TABLE_NAME + "." + Keys._ID + " = " +
|
||||||
|
UserIds.TABLE_NAME + "." + UserIds.KEY_ID + " AND " +
|
||||||
|
UserIds.TABLE_NAME + "." + UserIds.RANK + " = '0') ",
|
||||||
|
new String[] {
|
||||||
|
KeyRings.TABLE_NAME + "." + KeyRings._ID, // 0
|
||||||
|
KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID, // 1
|
||||||
|
UserIds.TABLE_NAME + "." + UserIds.USER_ID, // 2
|
||||||
|
"(SELECT COUNT(tmp." + Keys._ID + ") FROM " + Keys.TABLE_NAME + " AS tmp WHERE " +
|
||||||
|
"tmp." + Keys.KEY_RING_ID + " = " +
|
||||||
|
KeyRings.TABLE_NAME + "." + KeyRings._ID + " AND " +
|
||||||
|
"tmp." + Keys.CAN_SIGN + " = '1')", // 3
|
||||||
|
},
|
||||||
|
KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = ?",
|
||||||
|
new String[] { "" + Id.database.type_secret },
|
||||||
|
null, null, UserIds.TABLE_NAME + "." + UserIds.USER_ID + " ASC");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void finalize() throws Throwable {
|
||||||
|
// TODO: this doesn't seem to work...
|
||||||
|
mCursor.close();
|
||||||
|
super.finalize();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isEnabled(int position) {
|
||||||
|
mCursor.moveToPosition(position);
|
||||||
|
return mCursor.getInt(3) > 0; // CAN_SIGN
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasStableIds() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getCount() {
|
||||||
|
return mCursor.getCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getItem(int position) {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getItemId(int position) {
|
||||||
|
mCursor.moveToPosition(position);
|
||||||
|
return mCursor.getLong(1); // MASTER_KEY_ID
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
mCursor.moveToPosition(position);
|
||||||
|
|
||||||
|
View view = mInflater.inflate(R.layout.select_secret_key_item, null);
|
||||||
|
boolean enabled = isEnabled(position);
|
||||||
|
|
||||||
|
TextView mainUserId = (TextView) view.findViewById(R.id.mainUserId);
|
||||||
|
mainUserId.setText(R.string.unknownUserId);
|
||||||
|
TextView mainUserIdRest = (TextView) view.findViewById(R.id.mainUserIdRest);
|
||||||
|
mainUserIdRest.setText("");
|
||||||
|
TextView keyId = (TextView) view.findViewById(R.id.keyId);
|
||||||
|
keyId.setText(R.string.noKey);
|
||||||
|
/*TextView creation = (TextView) view.findViewById(R.id.creation);
|
||||||
|
creation.setText(R.string.noDate);
|
||||||
|
TextView expiry = (TextView) view.findViewById(R.id.expiry);
|
||||||
|
expiry.setText(R.string.noExpiry);*/
|
||||||
|
TextView status = (TextView) view.findViewById(R.id.status);
|
||||||
|
status.setText(R.string.unknownStatus);
|
||||||
|
|
||||||
|
String userId = mCursor.getString(2); // USER_ID
|
||||||
|
if (userId != null) {
|
||||||
|
String chunks[] = userId.split(" <", 2);
|
||||||
|
userId = chunks[0];
|
||||||
|
if (chunks.length > 1) {
|
||||||
|
mainUserIdRest.setText("<" + chunks[1]);
|
||||||
|
}
|
||||||
|
mainUserId.setText(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
long masterKeyId = mCursor.getLong(1); // MASTER_KEY_ID
|
||||||
|
keyId.setText("" + Long.toHexString(masterKeyId & 0xffffffffL));
|
||||||
|
|
||||||
|
if (mainUserIdRest.getText().length() == 0) {
|
||||||
|
mainUserIdRest.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: must get this functionality in again
|
||||||
|
/*PGPSecretKey timespanKey = key;
|
||||||
|
if (usableKeys.size() > 0) {
|
||||||
|
timespanKey = usableKeys.get(0);
|
||||||
|
status.setText(R.string.canSign);
|
||||||
|
} else if (signingKeys.size() > 0) {
|
||||||
|
timespanKey = signingKeys.get(0);
|
||||||
|
Date now = new Date();
|
||||||
|
if (now.compareTo(Apg.getCreationDate(timespanKey)) > 0) {
|
||||||
|
status.setText(R.string.notValid);
|
||||||
|
} else {
|
||||||
|
status.setText(R.string.expired);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
status.setText(R.string.noKey);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
if (enabled) {
|
||||||
|
status.setText(R.string.canSign);
|
||||||
|
} else {
|
||||||
|
status.setText(R.string.noKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*creation.setText(DateFormat.getDateInstance().format(Apg.getCreationDate(timespanKey)));
|
||||||
|
Date expiryDate = Apg.getExpiryDate(timespanKey);
|
||||||
|
if (expiryDate != null) {
|
||||||
|
expiry.setText(DateFormat.getDateInstance().format(expiryDate));
|
||||||
|
}*/
|
||||||
|
|
||||||
|
status.setText(status.getText() + " ");
|
||||||
|
|
||||||
|
view.setEnabled(enabled);
|
||||||
|
mainUserId.setEnabled(enabled);
|
||||||
|
mainUserIdRest.setEnabled(enabled);
|
||||||
|
keyId.setEnabled(enabled);
|
||||||
|
/*creation.setEnabled(enabled);
|
||||||
|
expiry.setEnabled(enabled);*/
|
||||||
|
status.setEnabled(enabled);
|
||||||
|
|
||||||
|
return view;
|
||||||
|
}
|
||||||
|
}
|
@ -18,7 +18,6 @@ import android.content.Context;
|
|||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
import android.database.sqlite.SQLiteOpenHelper;
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
import android.database.sqlite.SQLiteQueryBuilder;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
public class Database extends SQLiteOpenHelper {
|
public class Database extends SQLiteOpenHelper {
|
||||||
@ -39,7 +38,7 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
public static HashMap<String, String> sKeysProjection;
|
public static HashMap<String, String> sKeysProjection;
|
||||||
public static HashMap<String, String> sUserIdsProjection;
|
public static HashMap<String, String> sUserIdsProjection;
|
||||||
|
|
||||||
private SQLiteDatabase mCurrentDb = null;
|
private SQLiteDatabase mDb = null;
|
||||||
private int mStatus = 0;
|
private int mStatus = 0;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
@ -71,11 +70,17 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
|
|
||||||
public Database(Context context) {
|
public Database(Context context) {
|
||||||
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||||||
//getWritableDatabase();
|
mDb = getWritableDatabase();
|
||||||
// force upgrade to test things
|
// force upgrade to test things
|
||||||
//onUpgrade(getWritableDatabase(), 1, 2);
|
//onUpgrade(getWritableDatabase(), 1, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void finalize() throws Throwable {
|
||||||
|
mDb.close();
|
||||||
|
super.finalize();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(SQLiteDatabase db) {
|
public void onCreate(SQLiteDatabase db) {
|
||||||
db.execSQL("CREATE TABLE " + KeyRings.TABLE_NAME + " (" +
|
db.execSQL("CREATE TABLE " + KeyRings.TABLE_NAME + " (" +
|
||||||
@ -111,7 +116,7 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
mCurrentDb = db;
|
mDb = db;
|
||||||
for (int version = oldVersion; version < newVersion; ++version) {
|
for (int version = oldVersion; version < newVersion; ++version) {
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case 1: { // upgrade 1 to 2
|
case 1: { // upgrade 1 to 2
|
||||||
@ -195,16 +200,11 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mCurrentDb = null;
|
mDb = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int saveKeyRing(PGPPublicKeyRing keyRing) throws IOException, GeneralException {
|
public int saveKeyRing(PGPPublicKeyRing keyRing) throws IOException, GeneralException {
|
||||||
boolean grabbedNewDatabase = false;
|
mDb.beginTransaction();
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
PGPPublicKey masterKey = keyRing.getPublicKey();
|
PGPPublicKey masterKey = keyRing.getPublicKey();
|
||||||
long masterKeyId = masterKey.getKeyID();
|
long masterKeyId = masterKey.getKeyID();
|
||||||
@ -234,26 +234,17 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
seenIdsStr += id;
|
seenIdsStr += id;
|
||||||
}
|
}
|
||||||
mCurrentDb.delete(Keys.TABLE_NAME,
|
mDb.delete(Keys.TABLE_NAME,
|
||||||
Keys.KEY_RING_ID + " = ? AND " +
|
Keys.KEY_RING_ID + " = ? AND " +
|
||||||
Keys._ID + " NOT IN (" + seenIdsStr + ")",
|
Keys._ID + " NOT IN (" + seenIdsStr + ")",
|
||||||
new String[] { "" + rowId });
|
new String[] { "" + rowId });
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
mDb.endTransaction();
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
return returnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int saveKeyRing(PGPSecretKeyRing keyRing) throws IOException, GeneralException {
|
public int saveKeyRing(PGPSecretKeyRing keyRing) throws IOException, GeneralException {
|
||||||
boolean grabbedNewDatabase = false;
|
mDb.beginTransaction();
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
PGPSecretKey masterKey = keyRing.getSecretKey();
|
PGPSecretKey masterKey = keyRing.getSecretKey();
|
||||||
long masterKeyId = masterKey.getKeyID();
|
long masterKeyId = masterKey.getKeyID();
|
||||||
@ -283,27 +274,17 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
seenIdsStr += id;
|
seenIdsStr += id;
|
||||||
}
|
}
|
||||||
mCurrentDb.delete(Keys.TABLE_NAME,
|
mDb.delete(Keys.TABLE_NAME,
|
||||||
Keys.KEY_RING_ID + " = ? AND " +
|
Keys.KEY_RING_ID + " = ? AND " +
|
||||||
Keys._ID + " NOT IN (" + seenIdsStr + ")",
|
Keys._ID + " NOT IN (" + seenIdsStr + ")",
|
||||||
new String[] { "" + rowId });
|
new String[] { "" + rowId });
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
mDb.endTransaction();
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return returnValue;
|
return returnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int saveKey(long keyRingId, PGPPublicKey key, int rank)
|
private int saveKey(long keyRingId, PGPPublicKey key, int rank)
|
||||||
throws IOException, GeneralException {
|
throws IOException, GeneralException {
|
||||||
boolean grabbedNewDatabase = false;
|
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
|
|
||||||
values.put(Keys.KEY_ID, key.getKeyID());
|
values.put(Keys.KEY_ID, key.getKeyID());
|
||||||
@ -337,27 +318,16 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
seenIdsStr += id;
|
seenIdsStr += id;
|
||||||
}
|
}
|
||||||
mCurrentDb.delete(UserIds.TABLE_NAME,
|
mDb.delete(UserIds.TABLE_NAME,
|
||||||
UserIds.KEY_ID + " = ? AND " +
|
UserIds.KEY_ID + " = ? AND " +
|
||||||
UserIds._ID + " NOT IN (" + seenIdsStr + ")",
|
UserIds._ID + " NOT IN (" + seenIdsStr + ")",
|
||||||
new String[] { "" + rowId });
|
new String[] { "" + rowId });
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (int)rowId;
|
return (int)rowId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int saveKey(long keyRingId, PGPSecretKey key, int rank)
|
private int saveKey(long keyRingId, PGPSecretKey key, int rank)
|
||||||
throws IOException, GeneralException {
|
throws IOException, GeneralException {
|
||||||
boolean grabbedNewDatabase = false;
|
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
|
|
||||||
values.put(Keys.KEY_ID, key.getPublicKey().getKeyID());
|
values.put(Keys.KEY_ID, key.getPublicKey().getKeyID());
|
||||||
@ -391,16 +361,11 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
seenIdsStr += id;
|
seenIdsStr += id;
|
||||||
}
|
}
|
||||||
mCurrentDb.delete(UserIds.TABLE_NAME,
|
mDb.delete(UserIds.TABLE_NAME,
|
||||||
UserIds.KEY_ID + " = ? AND " +
|
UserIds.KEY_ID + " = ? AND " +
|
||||||
UserIds._ID + " NOT IN (" + seenIdsStr + ")",
|
UserIds._ID + " NOT IN (" + seenIdsStr + ")",
|
||||||
new String[] { "" + rowId });
|
new String[] { "" + rowId });
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (int)rowId;
|
return (int)rowId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,12 +386,7 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private long insertOrUpdateKeyRing(ContentValues values) {
|
private long insertOrUpdateKeyRing(ContentValues values) {
|
||||||
boolean grabbedNewDatabase = false;
|
Cursor c = mDb.query(KeyRings.TABLE_NAME, new String[] { KeyRings._ID },
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
Cursor c = mCurrentDb.query(KeyRings.TABLE_NAME, new String[] { KeyRings._ID },
|
|
||||||
KeyRings.MASTER_KEY_ID + " = ? AND " + KeyRings.TYPE + " = ?",
|
KeyRings.MASTER_KEY_ID + " = ? AND " + KeyRings.TYPE + " = ?",
|
||||||
new String[] {
|
new String[] {
|
||||||
values.getAsString(KeyRings.MASTER_KEY_ID),
|
values.getAsString(KeyRings.MASTER_KEY_ID),
|
||||||
@ -436,31 +396,20 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
long rowId = -1;
|
long rowId = -1;
|
||||||
if (c != null && c.moveToFirst()) {
|
if (c != null && c.moveToFirst()) {
|
||||||
rowId = c.getLong(0);
|
rowId = c.getLong(0);
|
||||||
mCurrentDb.update(KeyRings.TABLE_NAME, values,
|
mDb.update(KeyRings.TABLE_NAME, values,
|
||||||
KeyRings._ID + " = ?", new String[] { "" + rowId });
|
KeyRings._ID + " = ?", new String[] { "" + rowId });
|
||||||
mStatus = Id.return_value.updated;
|
mStatus = Id.return_value.updated;
|
||||||
} else {
|
} else {
|
||||||
rowId = mCurrentDb.insert(KeyRings.TABLE_NAME, KeyRings.WHO_ID, values);
|
rowId = mDb.insert(KeyRings.TABLE_NAME, KeyRings.WHO_ID, values);
|
||||||
mStatus = Id.return_value.ok;
|
mStatus = Id.return_value.ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
c.close();
|
c.close();
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rowId;
|
return rowId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private long insertOrUpdateKey(ContentValues values) {
|
private long insertOrUpdateKey(ContentValues values) {
|
||||||
boolean grabbedNewDatabase = false;
|
Cursor c = mDb.query(Keys.TABLE_NAME, new String[] { Keys._ID },
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
Cursor c = mCurrentDb.query(Keys.TABLE_NAME, new String[] { Keys._ID },
|
|
||||||
Keys.KEY_ID + " = ? AND " + Keys.TYPE + " = ?",
|
Keys.KEY_ID + " = ? AND " + Keys.TYPE + " = ?",
|
||||||
new String[] {
|
new String[] {
|
||||||
values.getAsString(Keys.KEY_ID),
|
values.getAsString(Keys.KEY_ID),
|
||||||
@ -470,29 +419,18 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
long rowId = -1;
|
long rowId = -1;
|
||||||
if (c != null && c.moveToFirst()) {
|
if (c != null && c.moveToFirst()) {
|
||||||
rowId = c.getLong(0);
|
rowId = c.getLong(0);
|
||||||
mCurrentDb.update(Keys.TABLE_NAME, values,
|
mDb.update(Keys.TABLE_NAME, values,
|
||||||
Keys._ID + " = ?", new String[] { "" + rowId });
|
Keys._ID + " = ?", new String[] { "" + rowId });
|
||||||
} else {
|
} else {
|
||||||
rowId = mCurrentDb.insert(Keys.TABLE_NAME, Keys.KEY_DATA, values);
|
rowId = mDb.insert(Keys.TABLE_NAME, Keys.KEY_DATA, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
c.close();
|
c.close();
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rowId;
|
return rowId;
|
||||||
}
|
}
|
||||||
|
|
||||||
private long insertOrUpdateUserId(ContentValues values) {
|
private long insertOrUpdateUserId(ContentValues values) {
|
||||||
boolean grabbedNewDatabase = false;
|
Cursor c = mDb.query(UserIds.TABLE_NAME, new String[] { UserIds._ID },
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
Cursor c = mCurrentDb.query(UserIds.TABLE_NAME, new String[] { UserIds._ID },
|
|
||||||
UserIds.KEY_ID + " = ? AND " + UserIds.USER_ID + " = ?",
|
UserIds.KEY_ID + " = ? AND " + UserIds.USER_ID + " = ?",
|
||||||
new String[] {
|
new String[] {
|
||||||
values.getAsString(UserIds.KEY_ID),
|
values.getAsString(UserIds.KEY_ID),
|
||||||
@ -502,29 +440,18 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
long rowId = -1;
|
long rowId = -1;
|
||||||
if (c != null && c.moveToFirst()) {
|
if (c != null && c.moveToFirst()) {
|
||||||
rowId = c.getLong(0);
|
rowId = c.getLong(0);
|
||||||
mCurrentDb.update(UserIds.TABLE_NAME, values,
|
mDb.update(UserIds.TABLE_NAME, values,
|
||||||
UserIds._ID + " = ?", new String[] { "" + rowId });
|
UserIds._ID + " = ?", new String[] { "" + rowId });
|
||||||
} else {
|
} else {
|
||||||
rowId = mCurrentDb.insert(UserIds.TABLE_NAME, UserIds.USER_ID, values);
|
rowId = mDb.insert(UserIds.TABLE_NAME, UserIds.USER_ID, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
c.close();
|
c.close();
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return rowId;
|
return rowId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getKeyRing(int keyRingId) {
|
public Object getKeyRing(int keyRingId) {
|
||||||
boolean grabbedNewDatabase = false;
|
Cursor c = mDb.query(KeyRings.TABLE_NAME,
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
Cursor c = mCurrentDb.query(KeyRings.TABLE_NAME,
|
|
||||||
new String[] { KeyRings.KEY_RING_DATA, KeyRings.TYPE },
|
new String[] { KeyRings.KEY_RING_DATA, KeyRings.TYPE },
|
||||||
KeyRings._ID + " = ?",
|
KeyRings._ID + " = ?",
|
||||||
new String[] {
|
new String[] {
|
||||||
@ -549,24 +476,13 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
c.close();
|
c.close();
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return keyRing;
|
return keyRing;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getKeyRingDataFromKeyId(int type, long keyId) {
|
public byte[] getKeyRingDataFromKeyId(int type, long keyId) {
|
||||||
boolean grabbedNewDatabase = false;
|
Cursor c = mDb.query(Keys.TABLE_NAME + " INNER JOIN " + KeyRings.TABLE_NAME + " ON (" +
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getReadableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
Cursor c = mCurrentDb.query(Keys.TABLE_NAME + " INNER JOIN " + KeyRings.TABLE_NAME + " ON (" +
|
|
||||||
KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " +
|
KeyRings.TABLE_NAME + "." + KeyRings._ID + " = " +
|
||||||
Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + ")",
|
Keys.TABLE_NAME + "." + Keys.KEY_RING_ID + ")",
|
||||||
new String[] { KeyRings.TABLE_NAME + "." + KeyRings.KEY_RING_DATA },
|
new String[] { KeyRings.TABLE_NAME + "." + KeyRings.KEY_RING_DATA },
|
||||||
@ -582,24 +498,13 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
if (c != null && c.moveToFirst()) {
|
if (c != null && c.moveToFirst()) {
|
||||||
data = c.getBlob(0);
|
data = c.getBlob(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
c.close();
|
c.close();
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] getKeyDataFromKeyId(int type, long keyId) {
|
public byte[] getKeyDataFromKeyId(int type, long keyId) {
|
||||||
boolean grabbedNewDatabase = false;
|
Cursor c = mDb.query(Keys.TABLE_NAME, new String[] { Keys.KEY_DATA },
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getReadableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
Cursor c = mCurrentDb.query(Keys.TABLE_NAME, new String[] { Keys.KEY_DATA },
|
|
||||||
Keys.KEY_ID + " = ? AND " + Keys.TYPE + " = ?",
|
Keys.KEY_ID + " = ? AND " + Keys.TYPE + " = ?",
|
||||||
new String[] {
|
new String[] {
|
||||||
"" + keyId,
|
"" + keyId,
|
||||||
@ -610,27 +515,17 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
if (c != null && c.moveToFirst()) {
|
if (c != null && c.moveToFirst()) {
|
||||||
data = c.getBlob(0);
|
data = c.getBlob(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
c.close();
|
c.close();
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteKeyRing(int keyRingId) {
|
public void deleteKeyRing(int keyRingId) {
|
||||||
boolean grabbedNewDatabase = false;
|
mDb.beginTransaction();
|
||||||
if (mCurrentDb == null) {
|
mDb.delete(KeyRings.TABLE_NAME,
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
mCurrentDb.delete(KeyRings.TABLE_NAME,
|
|
||||||
KeyRings._ID + " = ?", new String[] { "" + keyRingId });
|
KeyRings._ID + " = ?", new String[] { "" + keyRingId });
|
||||||
|
|
||||||
Cursor c = mCurrentDb.query(Keys.TABLE_NAME, new String[] { Keys._ID },
|
Cursor c = mDb.query(Keys.TABLE_NAME, new String[] { Keys._ID },
|
||||||
Keys.KEY_RING_ID + " = ?",
|
Keys.KEY_RING_ID + " = ?",
|
||||||
new String[] {
|
new String[] {
|
||||||
"" + keyRingId,
|
"" + keyRingId,
|
||||||
@ -642,28 +537,20 @@ public class Database extends SQLiteOpenHelper {
|
|||||||
deleteKey(keyId);
|
deleteKey(keyId);
|
||||||
} while (c.moveToNext());
|
} while (c.moveToNext());
|
||||||
}
|
}
|
||||||
|
c.close();
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
mDb.endTransaction();
|
||||||
mCurrentDb.close();
|
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteKey(int keyId) {
|
private void deleteKey(int keyId) {
|
||||||
boolean grabbedNewDatabase = false;
|
mDb.delete(Keys.TABLE_NAME,
|
||||||
if (mCurrentDb == null) {
|
|
||||||
mCurrentDb = getWritableDatabase();
|
|
||||||
grabbedNewDatabase = true;
|
|
||||||
}
|
|
||||||
mCurrentDb.delete(Keys.TABLE_NAME,
|
|
||||||
Keys._ID + " = ?", new String[] { "" + keyId });
|
Keys._ID + " = ?", new String[] { "" + keyId });
|
||||||
|
|
||||||
mCurrentDb.delete(UserIds.TABLE_NAME,
|
mDb.delete(UserIds.TABLE_NAME,
|
||||||
UserIds.KEY_ID + " = ?", new String[] { "" + keyId });
|
UserIds.KEY_ID + " = ?", new String[] { "" + keyId });
|
||||||
|
}
|
||||||
|
|
||||||
if (grabbedNewDatabase) {
|
public SQLiteDatabase db() {
|
||||||
mCurrentDb.close();
|
return mDb;
|
||||||
mCurrentDb = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user