aboutsummaryrefslogtreecommitdiffstats
path: root/org_apg
diff options
context:
space:
mode:
authorDominik <dominik@dominikschuermann.de>2012-11-01 18:50:41 +0100
committerDominik <dominik@dominikschuermann.de>2012-11-01 18:50:41 +0100
commitf50d71559d8f3e0ebb01bc264548a5d69dd59c6b (patch)
tree3a3cfa09f50f428d9755506f3cf45be75e518c56 /org_apg
parent182524bb9662f2ecbc7301020b5eb620d9b786f3 (diff)
downloadopen-keychain-f50d71559d8f3e0ebb01bc264548a5d69dd59c6b.tar.gz
open-keychain-f50d71559d8f3e0ebb01bc264548a5d69dd59c6b.tar.bz2
open-keychain-f50d71559d8f3e0ebb01bc264548a5d69dd59c6b.zip
select public key refactored
Diffstat (limited to 'org_apg')
-rw-r--r--org_apg/AndroidManifest.xml2
-rw-r--r--org_apg/res/layout/key_list.xml45
-rw-r--r--org_apg/res/layout/key_list_public_activity.xml22
-rw-r--r--org_apg/res/layout/key_list_secret_activity.xml22
-rw-r--r--org_apg/res/layout/select_public_key.xml35
-rw-r--r--org_apg/res/layout/select_public_key_activity.xml2
-rw-r--r--org_apg/res/layout/select_public_key_item.xml2
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java12
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyActivity.java177
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyFragment.java228
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListActivity.java47
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListFragment.java110
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyCursorAdapter.java92
-rw-r--r--org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyListAdapterOld.java218
14 files changed, 489 insertions, 525 deletions
diff --git a/org_apg/AndroidManifest.xml b/org_apg/AndroidManifest.xml
index 61b6af8b3..d7848d5ca 100644
--- a/org_apg/AndroidManifest.xml
+++ b/org_apg/AndroidManifest.xml
@@ -173,7 +173,7 @@
</intent-filter>
</activity>
<activity
- android:name=".ui.SelectPublicKeyListActivity"
+ android:name=".ui.SelectPublicKeyActivity"
android:configChanges="orientation|screenSize|keyboardHidden|keyboard"
android:label="@string/title_selectRecipients"
android:launchMode="singleTop"
diff --git a/org_apg/res/layout/key_list.xml b/org_apg/res/layout/key_list.xml
deleted file mode 100644
index ef43632e6..000000000
--- a/org_apg/res/layout/key_list.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
-
- <include
- android:id="@+id/layout_filter"
- layout="@layout/filter_info" />
-
- <ExpandableListView
- android:id="@+id/list"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:layout_weight="1"
- android:isScrollContainer="true" />
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="90dp"
- android:layout_weight="1"
- android:background="@drawable/abs__ab_bottom_solid_light_holo"
- android:paddingBottom="3dp"
- android:paddingLeft="10dp"
- android:paddingRight="10dp"
- android:paddingTop="3dp"
- android:text="@string/listInformation" />
-
-</LinearLayout> \ No newline at end of file
diff --git a/org_apg/res/layout/key_list_public_activity.xml b/org_apg/res/layout/key_list_public_activity.xml
index 529cb5067..9872c3e1b 100644
--- a/org_apg/res/layout/key_list_public_activity.xml
+++ b/org_apg/res/layout/key_list_public_activity.xml
@@ -1,13 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_centerHorizontal="true" >
+ android:orientation="vertical" >
<fragment
- android:id="@+id/public_key_list_fragment"
+ android:id="@+id/key_list_public_fragment"
android:name="org.thialfihar.android.apg.ui.KeyListPublicFragment"
android:layout_width="match_parent"
- android:layout_height="match_parent" />
+ android:layout_height="match_parent"
+ android:layout_weight="1" />
-</RelativeLayout> \ No newline at end of file
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="90dp"
+ android:layout_weight="1"
+ android:background="@drawable/abs__ab_bottom_solid_light_holo"
+ android:paddingBottom="3dp"
+ android:paddingLeft="10dp"
+ android:paddingRight="10dp"
+ android:paddingTop="3dp"
+ android:text="@string/listInformation" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/org_apg/res/layout/key_list_secret_activity.xml b/org_apg/res/layout/key_list_secret_activity.xml
index a60878b1a..c813a5d7d 100644
--- a/org_apg/res/layout/key_list_secret_activity.xml
+++ b/org_apg/res/layout/key_list_secret_activity.xml
@@ -1,13 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_centerHorizontal="true" >
+ android:orientation="vertical" >
<fragment
- android:id="@+id/secret_key_list_fragment"
+ android:id="@+id/key_list_secret_fragment"
android:name="org.thialfihar.android.apg.ui.KeyListSecretFragment"
android:layout_width="match_parent"
- android:layout_height="match_parent" />
+ android:layout_height="match_parent"
+ android:layout_weight="1" />
-</RelativeLayout> \ No newline at end of file
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="90dp"
+ android:layout_weight="1"
+ android:background="@drawable/abs__ab_bottom_solid_light_holo"
+ android:paddingBottom="3dp"
+ android:paddingLeft="10dp"
+ android:paddingRight="10dp"
+ android:paddingTop="3dp"
+ android:text="@string/listInformation" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/org_apg/res/layout/select_public_key.xml b/org_apg/res/layout/select_public_key.xml
deleted file mode 100644
index 4fcd375cc..000000000
--- a/org_apg/res/layout/select_public_key.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:fillViewport="true"
- android:orientation="vertical" >
-
- <include
- android:id="@+id/layout_filter"
- layout="@layout/filter_info" />
-
- <ListView
- android:id="@+id/list"
- android:layout_width="fill_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:choiceMode="multipleChoice" />
-
-</LinearLayout> \ No newline at end of file
diff --git a/org_apg/res/layout/select_public_key_activity.xml b/org_apg/res/layout/select_public_key_activity.xml
index 77c606453..7e70d26a2 100644
--- a/org_apg/res/layout/select_public_key_activity.xml
+++ b/org_apg/res/layout/select_public_key_activity.xml
@@ -6,7 +6,7 @@
<fragment
android:id="@+id/select_public_key_fragment"
- android:name="org.thialfihar.android.apg.ui.SelectPublicKeyListFragment"
+ android:name="org.thialfihar.android.apg.ui.SelectPublicKeyFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
diff --git a/org_apg/res/layout/select_public_key_item.xml b/org_apg/res/layout/select_public_key_item.xml
index beca23176..5eed7c268 100644
--- a/org_apg/res/layout/select_public_key_item.xml
+++ b/org_apg/res/layout/select_public_key_item.xml
@@ -46,7 +46,7 @@
<TextView
android:id="@+id/mainUserIdRest"
- android:text="&lt;user@somewhere.com&gt;"
+ android:text="&lt;user@example.com&gt;"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java
index c4382cce0..efc58e508 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/EncryptActivity.java
@@ -441,7 +441,8 @@ public class EncryptActivity extends SherlockFragmentActivity {
long signatureKeyId = extras.getLong(EXTRA_SIGNATURE_KEY_ID);
long encryptionKeyIds[] = extras.getLongArray(EXTRA_ENCRYPTION_KEY_IDS);
if (signatureKeyId != 0) {
- PGPSecretKeyRing keyRing = ProviderHelper.getPGPSecretKeyRingByMasterKeyId(this, signatureKeyId);
+ PGPSecretKeyRing keyRing = ProviderHelper.getPGPSecretKeyRingByMasterKeyId(this,
+ signatureKeyId);
PGPSecretKey masterKey = null;
if (keyRing != null) {
masterKey = PGPHelper.getMasterKey(keyRing);
@@ -958,7 +959,8 @@ public class EncryptActivity extends SherlockFragmentActivity {
} else {
String uid = getResources().getString(R.string.unknownUserId);
String uidExtra = "";
- PGPSecretKeyRing keyRing = ProviderHelper.getPGPSecretKeyRingByMasterKeyId(this, getSecretKeyId());
+ PGPSecretKeyRing keyRing = ProviderHelper.getPGPSecretKeyRingByMasterKeyId(this,
+ getSecretKeyId());
if (keyRing != null) {
PGPSecretKey key = PGPHelper.getMasterKey(keyRing);
if (key != null) {
@@ -979,7 +981,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
}
private void selectPublicKeys() {
- Intent intent = new Intent(this, SelectPublicKeyListActivity.class);
+ Intent intent = new Intent(this, SelectPublicKeyActivity.class);
Vector<Long> keyIds = new Vector<Long>();
if (getSecretKeyId() != 0) {
keyIds.add(getSecretKeyId());
@@ -996,7 +998,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
initialKeyIds[i] = keyIds.get(i);
}
}
- intent.putExtra(SelectPublicKeyListActivity.RESULT_EXTRA_SELECTION, initialKeyIds);
+ intent.putExtra(SelectPublicKeyActivity.RESULT_EXTRA_MASTER_KEY_IDS, initialKeyIds);
startActivityForResult(intent, Id.request.public_keys);
}
@@ -1040,7 +1042,7 @@ public class EncryptActivity extends SherlockFragmentActivity {
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
mEncryptionKeyIds = bundle
- .getLongArray(SelectPublicKeyListActivity.RESULT_EXTRA_SELECTION);
+ .getLongArray(SelectPublicKeyActivity.RESULT_EXTRA_MASTER_KEY_IDS);
}
updateView();
break;
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyActivity.java
new file mode 100644
index 000000000..e7c5dcc08
--- /dev/null
+++ b/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyActivity.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
+ * Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.thialfihar.android.apg.ui;
+
+import org.thialfihar.android.apg.Constants;
+import org.thialfihar.android.apg.Id;
+import org.thialfihar.android.apg.R;
+import org.thialfihar.android.apg.helper.OtherHelper;
+import org.thialfihar.android.apg.util.Log;
+
+import com.actionbarsherlock.app.ActionBar;
+import com.actionbarsherlock.app.SherlockFragmentActivity;
+import com.actionbarsherlock.view.Menu;
+import com.actionbarsherlock.view.MenuItem;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+public class SelectPublicKeyActivity extends SherlockFragmentActivity {
+
+ // Not used in sourcode, but listed in AndroidManifest!
+ public static final String ACTION_SELECT_PUBLIC_KEYS = Constants.INTENT_PREFIX
+ + "SELECT_PUBLIC_KEYS";
+
+ public static final String RESULT_EXTRA_MASTER_KEY_IDS = "masterKeyIds";
+ public static final String RESULT_EXTRA_USER_IDS = "userIds";
+
+ SelectPublicKeyFragment mSelectFragment;
+
+ long selectedKeyIds[];
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.select_public_key_activity);
+
+ final ActionBar actionBar = getSupportActionBar();
+ actionBar.setDisplayShowTitleEnabled(true);
+ actionBar.setDisplayHomeAsUpEnabled(false);
+ actionBar.setHomeButtonEnabled(false);
+
+ setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL);
+
+ mSelectFragment = (SelectPublicKeyFragment) getSupportFragmentManager().findFragmentById(
+ R.id.select_public_key_fragment);
+
+ //
+ // mFilterLayout = findViewById(R.id.layout_filter);
+ // mFilterInfo = (TextView) mFilterLayout.findViewById(R.id.filterInfo);
+ // mClearFilterButton = (Button) mFilterLayout.findViewById(R.id.btn_clear);
+ //
+ // mClearFilterButton.setOnClickListener(new OnClickListener() {
+ // public void onClick(View v) {
+ // handleIntent(new Intent());
+ // }
+ // });
+
+ handleIntent(getIntent());
+ }
+
+ @Override
+ protected void onNewIntent(Intent intent) {
+ super.onNewIntent(intent);
+ handleIntent(intent);
+ }
+
+ private void handleIntent(Intent intent) {
+ // String searchString = null;
+ // if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
+ // searchString = intent.getStringExtra(SearchManager.QUERY);
+ // if (searchString != null && searchString.trim().length() == 0) {
+ // searchString = null;
+ // }
+ // }
+
+ OtherHelper.logDebugBundle(intent.getExtras(), "intent extras");
+
+ selectedKeyIds = intent.getLongArrayExtra(RESULT_EXTRA_MASTER_KEY_IDS);
+
+ // if (searchString == null) {
+ // mFilterLayout.setVisibility(View.GONE);
+ // } else {
+ // mFilterLayout.setVisibility(View.VISIBLE);
+ // mFilterInfo.setText(getString(R.string.filterInfo, searchString));
+ // }
+ //
+ // if (mListAdapter != null) {
+ // mListAdapter.cleanup();
+ // }
+ //
+ // mListAdapter = new SelectPublicKeyListAdapter(this, mList, searchString, selectedKeyIds);
+ // mList.setAdapter(mListAdapter);
+ }
+
+ /**
+ * returns preselected key ids, this is used in the fragment
+ *
+ * @return
+ */
+ public long[] getSelectedMasterKeyIds() {
+ return selectedKeyIds;
+ }
+
+ private void cancelClicked() {
+ setResult(RESULT_CANCELED, null);
+ finish();
+ }
+
+ private void okClicked() {
+ Intent data = new Intent();
+ data.putExtra(RESULT_EXTRA_MASTER_KEY_IDS, mSelectFragment.getSelectedMasterKeyIds());
+ data.putExtra(RESULT_EXTRA_USER_IDS, mSelectFragment.getSelectedUserIds());
+
+ long[] keys = mSelectFragment.getSelectedMasterKeyIds();
+ for (int i = 0; i < keys.length; i++) {
+ Log.d(Constants.TAG, "" + i + ": " + keys[i]);
+ }
+
+ OtherHelper.logDebugBundle(data.getExtras(), "result extras");
+
+ setResult(RESULT_OK, data);
+ finish();
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ menu.add(0, Id.menu.option.search, 0, R.string.menu_search).setIcon(
+ android.R.drawable.ic_menu_search);
+ menu.add(1, Id.menu.option.cancel, 0, R.string.btn_doNotSave).setShowAsAction(
+ MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+ menu.add(1, Id.menu.option.okay, 1, R.string.btn_okay).setShowAsAction(
+ MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
+ return true;
+ }
+
+ /**
+ * Menu Options
+ */
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ // app icon in Action Bar clicked; go home
+ Intent intent = new Intent(this, MainActivity.class);
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ startActivity(intent);
+ return true;
+
+ case Id.menu.option.okay:
+ okClicked();
+ return true;
+
+ case Id.menu.option.cancel:
+ cancelClicked();
+ return true;
+
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyFragment.java b/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyFragment.java
new file mode 100644
index 000000000..8f3dce916
--- /dev/null
+++ b/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyFragment.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
+ * Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.thialfihar.android.apg.ui;
+
+import java.util.Date;
+import java.util.Vector;
+
+import org.thialfihar.android.apg.R;
+import org.thialfihar.android.apg.provider.ApgContract.KeyRings;
+import org.thialfihar.android.apg.provider.ApgContract.Keys;
+import org.thialfihar.android.apg.provider.ApgContract.UserIds;
+import org.thialfihar.android.apg.provider.ApgDatabase.Tables;
+import org.thialfihar.android.apg.ui.widget.SelectPublicKeyCursorAdapter;
+
+import com.actionbarsherlock.app.SherlockListFragment;
+
+import android.database.Cursor;
+import android.database.DatabaseUtils;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.v4.content.CursorLoader;
+import android.support.v4.content.Loader;
+import android.support.v4.app.LoaderManager;
+import android.widget.ListView;
+
+public class SelectPublicKeyFragment extends SherlockListFragment implements
+ LoaderManager.LoaderCallbacks<Cursor> {
+
+ private SelectPublicKeyActivity mActivity;
+ private SelectPublicKeyCursorAdapter mAdapter;
+ private ListView mListView;
+
+ private long mSelectedMasterKeyIds[];
+
+ public final static String ROW_AVAILABLE = "available";
+ public final static String ROW_VALID = "valid";
+
+ /**
+ * Define Adapter and Loader on create of Activity
+ */
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ mActivity = (SelectPublicKeyActivity) getSherlockActivity();
+ mListView = getListView();
+
+ // get selected master key ids, which are given to activity by intent
+ mSelectedMasterKeyIds = mActivity.getSelectedMasterKeyIds();
+
+ mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
+
+ // register long press context menu
+ registerForContextMenu(mListView);
+
+ // Give some text to display if there is no data. In a real
+ // application this would come from a resource.
+ setEmptyText(getString(R.string.listEmpty));
+
+ // We have a menu item to show in action bar.
+ setHasOptionsMenu(true);
+
+ mAdapter = new SelectPublicKeyCursorAdapter(mActivity, mListView, null);
+
+ setListAdapter(mAdapter);
+
+ // Start out with a progress indicator.
+ setListShown(false);
+
+ // Prepare the loader. Either re-connect with an existing one,
+ // or start a new one.
+ getLoaderManager().initLoader(0, null, this);
+ }
+
+ private void preselectMasterKeyIds(long[] masterKeyIds) {
+ if (masterKeyIds != null) {
+ for (int i = 0; i < mListView.getCount(); ++i) {
+ long keyId = mAdapter.getMasterKeyId(i);
+ for (int j = 0; j < masterKeyIds.length; ++j) {
+ if (keyId == masterKeyIds[j]) {
+ mListView.setItemChecked(i, true);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * returns all selected key ids
+ *
+ * @return
+ */
+ public long[] getSelectedMasterKeyIds() {
+ // mListView.getCheckedItemIds() would give the row ids of the KeyRings not the master keys!
+ Vector<Long> vector = new Vector<Long>();
+ for (int i = 0; i < mListView.getCount(); ++i) {
+ if (mListView.isItemChecked(i)) {
+ vector.add(mAdapter.getMasterKeyId(i));
+ }
+ }
+
+ // convert to long array
+ long[] selectedMasterKeyIds = new long[vector.size()];
+ for (int i = 0; i < vector.size(); ++i) {
+ selectedMasterKeyIds[i] = vector.get(i);
+ }
+
+ return selectedMasterKeyIds;
+ }
+
+ /**
+ * returns all selected user ids
+ *
+ * @return
+ */
+ public String[] getSelectedUserIds() {
+ Vector<String> userIds = new Vector<String>();
+ for (int i = 0; i < mListView.getCount(); ++i) {
+ if (mListView.isItemChecked(i)) {
+ userIds.add((String) mAdapter.getUserId(i));
+ }
+ }
+
+ // make empty array to not return null
+ String userIdArray[] = new String[0];
+ return userIds.toArray(userIdArray);
+ }
+
+ @Override
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ // This is called when a new Loader needs to be created. This
+ // sample only has one Loader, so we don't care about the ID.
+ Uri baseUri = KeyRings.buildPublicKeyRingsUri();
+
+ // These are the rows that we will retrieve.
+ long now = new Date().getTime() / 1000;
+ String[] projection = new String[] {
+ KeyRings._ID,
+ KeyRings.MASTER_KEY_ID,
+ UserIds.USER_ID,
+ "(SELECT COUNT(tmp." + Keys._ID + ") FROM " + Tables.KEYS + " AS tmp WHERE tmp."
+ + Keys.IS_REVOKED + " = '0' AND tmp." + Keys.CAN_ENCRYPT + " = '1') AS "
+ + ROW_AVAILABLE,
+ "(SELECT COUNT(tmp." + Keys._ID + ") FROM " + Tables.KEYS + " AS tmp WHERE tmp."
+ + Keys.IS_REVOKED + " = '0' AND " + Keys.CAN_ENCRYPT + " = '1' AND tmp."
+ + Keys.CREATION + " <= '" + now + "' AND " + "(tmp." + Keys.EXPIRY
+ + " IS NULL OR tmp." + Keys.EXPIRY + " >= '" + now + "')) AS " + ROW_VALID, };
+
+ String inMasterKeyList = null;
+ if (mSelectedMasterKeyIds != null && mSelectedMasterKeyIds.length > 0) {
+ inMasterKeyList = KeyRings.MASTER_KEY_ID + " IN (";
+ for (int i = 0; i < mSelectedMasterKeyIds.length; ++i) {
+ if (i != 0) {
+ inMasterKeyList += ", ";
+ }
+ inMasterKeyList += DatabaseUtils.sqlEscapeString("" + mSelectedMasterKeyIds[i]);
+ }
+ inMasterKeyList += ")";
+ }
+
+ // if (searchString != null && searchString.trim().length() > 0) {
+ // String[] chunks = searchString.trim().split(" +");
+ // qb.appendWhere("(EXISTS (SELECT tmp." + UserIds._ID + " FROM " + UserIds.TABLE_NAME
+ // + " AS tmp WHERE " + "tmp." + UserIds.KEY_ID + " = " + Keys.TABLE_NAME + "."
+ // + Keys._ID);
+ // for (int i = 0; i < chunks.length; ++i) {
+ // qb.appendWhere(" AND tmp." + UserIds.USER_ID + " LIKE ");
+ // qb.appendWhereEscapeString("%" + chunks[i] + "%");
+ // }
+ // qb.appendWhere("))");
+ //
+ // if (inIdList != null) {
+ // qb.appendWhere(" OR (" + inIdList + ")");
+ // }
+ // }
+
+ String orderBy = UserIds.USER_ID + " ASC";
+ if (inMasterKeyList != null) {
+ // sort by selected master keys
+ orderBy = inMasterKeyList + " DESC, " + orderBy;
+ }
+
+ // Now create and return a CursorLoader that will take care of
+ // creating a Cursor for the data being displayed.
+ return new CursorLoader(getActivity(), baseUri, projection, null, null, orderBy);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ // Swap the new cursor in. (The framework will take care of closing the
+ // old cursor once we return.)
+ mAdapter.swapCursor(data);
+
+ // The list should now be shown.
+ if (isResumed()) {
+ setListShown(true);
+ } else {
+ setListShownNoAnimation(true);
+ }
+
+ // preselect given master keys
+ preselectMasterKeyIds(mSelectedMasterKeyIds);
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> loader) {
+ // This is called when the last Cursor provided to onLoadFinished()
+ // above is about to be closed. We need to make sure we are no
+ // longer using it.
+ mAdapter.swapCursor(null);
+ }
+}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListActivity.java b/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListActivity.java
deleted file mode 100644
index 2b6a3967c..000000000
--- a/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListActivity.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.thialfihar.android.apg.ui;
-
-import org.thialfihar.android.apg.R;
-
-import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.app.SherlockFragmentActivity;
-import com.actionbarsherlock.view.MenuItem;
-
-import android.content.Intent;
-import android.os.Bundle;
-
-public class SelectPublicKeyListActivity extends SherlockFragmentActivity {
- private ActionBar mActionBar;
-
- // TODO
- public static final String RESULT_EXTRA_SELECTION = "selection";
- public static final String RESULT_EXTRA_USER_IDS = "userIds";
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- mActionBar = getSupportActionBar();
-
- setContentView(R.layout.select_public_key_activity);
-
- mActionBar.setDisplayShowTitleEnabled(true);
- mActionBar.setDisplayHomeAsUpEnabled(true);
- }
-
- /**
- * Menu Options
- */
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- // app icon in Action Bar clicked; go home
- Intent intent = new Intent(this, MainActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListFragment.java b/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListFragment.java
deleted file mode 100644
index ff81c8c37..000000000
--- a/org_apg/src/org/thialfihar/android/apg/ui/SelectPublicKeyListFragment.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.thialfihar.android.apg.ui;
-
-import java.util.Date;
-
-import org.thialfihar.android.apg.provider.ApgContract.KeyRings;
-import org.thialfihar.android.apg.provider.ApgContract.Keys;
-import org.thialfihar.android.apg.provider.ApgContract.UserIds;
-import org.thialfihar.android.apg.ui.widget.SelectPublicKeyCursorAdapter;
-
-import com.actionbarsherlock.app.SherlockFragmentActivity;
-import com.actionbarsherlock.app.SherlockListFragment;
-
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.support.v4.content.CursorLoader;
-import android.support.v4.content.Loader;
-import android.support.v4.app.LoaderManager;
-
-public class SelectPublicKeyListFragment extends SherlockListFragment implements
- LoaderManager.LoaderCallbacks<Cursor> {
-
- private SherlockFragmentActivity mActivity;
- private SelectPublicKeyCursorAdapter mAdapter;
-
- private long mCurrentRowId;
-
- /**
- * Define Adapter and Loader on create of Activity
- */
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- mActivity = getSherlockActivity();
-
- // register long press context menu
- registerForContextMenu(getListView());
-
- // Give some text to display if there is no data. In a real
- // application this would come from a resource.
- setEmptyText("TODO empty");
-
- // We have a menu item to show in action bar.
- setHasOptionsMenu(true);
-
- mAdapter = new SelectPublicKeyCursorAdapter(mActivity, null);
-
- setListAdapter(mAdapter);
-
- // Start out with a progress indicator.
- setListShown(false);
-
- // Prepare the loader. Either re-connect with an existing one,
- // or start a new one.
- getLoaderManager().initLoader(0, null, this);
- }
-
- static final String SORT_ORDER = UserIds.USER_ID + " ASC";
-
- // static final String SELECTION =
-
- @Override
- public Loader<Cursor> onCreateLoader(int id, Bundle args) {
- // This is called when a new Loader needs to be created. This
- // sample only has one Loader, so we don't care about the ID.
- Uri baseUri = KeyRings.buildPublicKeyRingsUri();
-
- // Now create and return a CursorLoader that will take care of
- // creating a Cursor for the data being displayed.
-
- // These are the rows that we will retrieve.
- long now = new Date().getTime() / 1000;
- String[] projection = new String[] {
- KeyRings._ID, // 0
- KeyRings.MASTER_KEY_ID, // 1
- UserIds.USER_ID, // 2
- "(SELECT COUNT(" + Keys._ID + ") WHERE " + Keys.IS_REVOKED + " = '0' AND "
- + Keys.CAN_ENCRYPT + " = '1')", // 3
- "(SELECT COUNT(" + Keys._ID + ") WHERE " + Keys.IS_REVOKED + " = '0' AND "
- + Keys.CAN_ENCRYPT + " = '1' AND " + Keys.CREATION + " <= '" + now
- + "' AND " + "(" + Keys.EXPIRY + " IS NULL OR " + Keys.EXPIRY + " >= '"
- + now + "'))", // 4
- };
-
- return new CursorLoader(getActivity(), baseUri, projection, null, null, SORT_ORDER);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- // Swap the new cursor in. (The framework will take care of closing the
- // old cursor once we return.)
- mAdapter.swapCursor(data);
-
- // The list should now be shown.
- if (isResumed()) {
- setListShown(true);
- } else {
- setListShownNoAnimation(true);
- }
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {
- // This is called when the last Cursor provided to onLoadFinished()
- // above is about to be closed. We need to make sure we are no
- // longer using it.
- mAdapter.swapCursor(null);
- }
-}
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyCursorAdapter.java b/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyCursorAdapter.java
index 45b617d68..f3c24ba75 100644
--- a/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyCursorAdapter.java
+++ b/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyCursorAdapter.java
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
+ * Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,60 +20,47 @@ package org.thialfihar.android.apg.ui.widget;
import org.thialfihar.android.apg.R;
import org.thialfihar.android.apg.helper.OtherHelper;
import org.thialfihar.android.apg.helper.PGPHelper;
+import org.thialfihar.android.apg.provider.ApgContract.KeyRings;
+import org.thialfihar.android.apg.provider.ApgContract.UserIds;
+import org.thialfihar.android.apg.ui.SelectPublicKeyFragment;
import android.content.Context;
import android.database.Cursor;
import android.support.v4.widget.CursorAdapter;
-import android.support.v4.widget.SimpleCursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
+import android.widget.ListView;
import android.widget.TextView;
public class SelectPublicKeyCursorAdapter extends CursorAdapter {
private LayoutInflater mInflater;
-// private int mActivityIndex;
-// private int mTimeIndex;
-// private int mActionIndex;
-// private int mAmountIndex;
+ private ListView mListView;
- public SelectPublicKeyCursorAdapter(Context context, Cursor c) {
+ @SuppressWarnings("deprecation")
+ public SelectPublicKeyCursorAdapter(Context context, ListView listView, Cursor c) {
super(context, c);
-//
-// mActivityIndex = c.getColumnIndex(Notes.ACTIVITY);
-// mTimeIndex = c.getColumnIndex(Notes.TIME);
-// mActionIndex = c.getColumnIndex(Notes.ACTION);
-// mAmountIndex = c.getColumnIndex(Notes.AMOUNT);
mInflater = LayoutInflater.from(context);
+ mListView = listView;
+ }
+
+ public String getUserId(int position) {
+ mCursor.moveToPosition(position);
+ return mCursor.getString(mCursor.getColumnIndex(UserIds.USER_ID));
+ }
+
+ public long getMasterKeyId(int position) {
+ mCursor.moveToPosition(position);
+ return mCursor.getLong(mCursor.getColumnIndex(KeyRings.MASTER_KEY_ID));
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
- // TextView activity = (TextView) view.findViewById(android.R.id.text1);
- // TextView time = (TextView) view.findViewById(android.R.id.text2);
- // TextView actionAndAmount = (TextView) view.findViewById(R.id.text3);
- //
- // activity.setText(cursor.getString(mActivityIndex));
- //
- // long lTime = cursor.getLong(mTimeIndex);
- // Calendar cal = Calendar.getInstance();
- // cal.setTimeInMillis(lTime);
- // time.setText(cal.get(Calendar.HOUR_OF_DAY) + “:” + String.format(“%02d”,
- // cal.get(Calendar.MINUTE)));
- //
- // String amount = cursor.getString(mAmountIndex);
- // if ( amount.length() > 0){
- // actionAndAmount.setText(cursor.getString(mActionIndex) + ” (” + amount + “)”);
- // } else {
- // actionAndAmount.setText(cursor.getString(mActionIndex));
- // }
-
-// boolean enabled = isEnabled(position);
-
-
+ boolean enabled = cursor.getInt(cursor.getColumnIndex(SelectPublicKeyFragment.ROW_VALID)) > 0;
+
TextView mainUserId = (TextView) view.findViewById(R.id.mainUserId);
mainUserId.setText(R.string.unknownUserId);
TextView mainUserIdRest = (TextView) view.findViewById(R.id.mainUserIdRest);
@@ -82,7 +70,7 @@ public class SelectPublicKeyCursorAdapter extends CursorAdapter {
TextView status = (TextView) view.findViewById(R.id.status);
status.setText(R.string.unknownStatus);
- String userId = cursor.getString(2); // USER_ID
+ String userId = cursor.getString(cursor.getColumnIndex(UserIds.USER_ID));
if (userId != null) {
String[] userIdSplit = OtherHelper.splitUserId(userId);
@@ -92,45 +80,45 @@ public class SelectPublicKeyCursorAdapter extends CursorAdapter {
mainUserId.setText(userIdSplit[0]);
}
- long masterKeyId = cursor.getLong(1); // MASTER_KEY_ID
+ long masterKeyId = cursor.getLong(cursor.getColumnIndex(KeyRings.MASTER_KEY_ID));
keyId.setText(PGPHelper.getSmallFingerPrint(masterKeyId));
if (mainUserIdRest.getText().length() == 0) {
mainUserIdRest.setVisibility(View.GONE);
}
-// if (enabled) {
-// status.setText(R.string.canEncrypt);
-// } else {
- if (cursor.getInt(3) > 0) {
- // has some CAN_ENCRYPT keys, but col(4) = 0, so must be revoked or expired
+ if (enabled) {
+ status.setText(R.string.canEncrypt);
+ } else {
+ if (cursor.getInt(cursor.getColumnIndex(SelectPublicKeyFragment.ROW_AVAILABLE)) > 0) {
+ // has some CAN_ENCRYPT keys, but col(ROW_VALID) = 0, so must be revoked or expired
status.setText(R.string.expired);
} else {
status.setText(R.string.noKey);
}
-// }
+ }
status.setText(status.getText() + " ");
CheckBox selected = (CheckBox) view.findViewById(R.id.selected);
-// if (!enabled) {
-// mParent.setItemChecked(position, false);
-// }
+ if (!enabled) {
+ mListView.setItemChecked(cursor.getPosition(), false);
+ }
-// selected.setChecked(mParent.isItemChecked(position));
+ selected.setChecked(mListView.isItemChecked(cursor.getPosition()));
-// view.setEnabled(enabled);
-// mainUserId.setEnabled(enabled);
-// mainUserIdRest.setEnabled(enabled);
-// keyId.setEnabled(enabled);
-// selected.setEnabled(enabled);
-// status.setEnabled(enabled);
+ view.setEnabled(enabled);
+ mainUserId.setEnabled(enabled);
+ mainUserIdRest.setEnabled(enabled);
+ keyId.setEnabled(enabled);
+ selected.setEnabled(enabled);
+ status.setEnabled(enabled);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
- return mInflater.inflate(R.layout.select_public_key, null);
+ return mInflater.inflate(R.layout.select_public_key_item, null);
}
} \ No newline at end of file
diff --git a/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyListAdapterOld.java b/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyListAdapterOld.java
deleted file mode 100644
index 4324e36c9..000000000
--- a/org_apg/src/org/thialfihar/android/apg/ui/widget/SelectPublicKeyListAdapterOld.java
+++ /dev/null
@@ -1,218 +0,0 @@
-package org.thialfihar.android.apg.ui.widget;
-///*
-// * Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
-// *
-// * Licensed under the Apache License, Version 2.0 (the "License");
-// * you may not use this file except in compliance with the License.
-// * You may obtain a copy of the License at
-// *
-// * http://www.apache.org/licenses/LICENSE-2.0
-// *
-// * Unless required by applicable law or agreed to in writing, software
-// * distributed under the License is distributed on an "AS IS" BASIS,
-// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// * See the License for the specific language governing permissions and
-// * limitations under the License.
-// */
-//
-//package org.thialfihar.android.apg.ui.widget;
-//
-//import java.util.Date;
-//
-//import org.thialfihar.android.apg.R;
-//import org.thialfihar.android.apg.Id;
-//import org.thialfihar.android.apg.helper.PGPHelper;
-//import org.thialfihar.android.apg.helper.PGPMain;
-//import org.thialfihar.android.apg.provider.KeyRings;
-//import org.thialfihar.android.apg.provider.Keys;
-//import org.thialfihar.android.apg.provider.UserIds;
-//
-//import android.app.Activity;
-//import android.content.Context;
-//import android.database.Cursor;
-//import android.database.DatabaseUtils;
-//import android.database.sqlite.SQLiteDatabase;
-//import android.database.sqlite.SQLiteQueryBuilder;
-//import android.view.LayoutInflater;
-//import android.view.View;
-//import android.view.ViewGroup;
-//import android.widget.BaseAdapter;
-//import android.widget.CheckBox;
-//import android.widget.ListView;
-//import android.widget.TextView;
-//
-//public class SelectPublicKeyListAdapter extends BaseAdapter {
-// protected LayoutInflater mInflater;
-// protected ListView mParent;
-// protected SQLiteDatabase mDatabase;
-// protected Cursor mCursor;
-// protected String mSearchString;
-// protected Activity mActivity;
-//
-// public SelectPublicKeyListAdapter(Activity activity, ListView parent, String searchString,
-// long selectedKeyIds[]) {
-// mSearchString = searchString;
-//
-// mActivity = activity;
-// mParent = parent;
-// mDatabase = PGPMain.getDatabase().db();
-// mInflater = (LayoutInflater) parent.getContext().getSystemService(
-// Context.LAYOUT_INFLATER_SERVICE);
-// long now = new Date().getTime() / 1000;
-// SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
-// qb.setTables(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') ");
-//
-// String inIdList = null;
-//
-// if (selectedKeyIds != null && selectedKeyIds.length > 0) {
-// inIdList = KeyRings.TABLE_NAME + "." + KeyRings.MASTER_KEY_ID + " IN (";
-// for (int i = 0; i < selectedKeyIds.length; ++i) {
-// if (i != 0) {
-// inIdList += ", ";
-// }
-// inIdList += DatabaseUtils.sqlEscapeString("" + selectedKeyIds[i]);
-// }
-// inIdList += ")";
-// }
-//
-// if (searchString != null && searchString.trim().length() > 0) {
-// String[] chunks = searchString.trim().split(" +");
-// qb.appendWhere("(EXISTS (SELECT tmp." + UserIds._ID + " FROM " + UserIds.TABLE_NAME
-// + " AS tmp WHERE " + "tmp." + UserIds.KEY_ID + " = " + Keys.TABLE_NAME + "."
-// + Keys._ID);
-// for (int i = 0; i < chunks.length; ++i) {
-// qb.appendWhere(" AND tmp." + UserIds.USER_ID + " LIKE ");
-// qb.appendWhereEscapeString("%" + chunks[i] + "%");
-// }
-// qb.appendWhere("))");
-//
-// if (inIdList != null) {
-// qb.appendWhere(" OR (" + inIdList + ")");
-// }
-// }
-//
-// String orderBy = UserIds.TABLE_NAME + "." + UserIds.USER_ID + " ASC";
-// if (inIdList != null) {
-// orderBy = inIdList + " DESC, " + orderBy;
-// }
-//
-// mCursor = qb.query(mDatabase, 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.IS_REVOKED + " = '0' AND "
-// + "tmp." + Keys.CAN_ENCRYPT + " = '1')", // 3
-// "(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.IS_REVOKED + " = '0' AND "
-// + "tmp." + Keys.CAN_ENCRYPT + " = '1' AND " + "tmp." + Keys.CREATION
-// + " <= '" + now + "' AND " + "(tmp." + Keys.EXPIRY + " IS NULL OR "
-// + "tmp." + Keys.EXPIRY + " >= '" + now + "'))", // 4
-// }, KeyRings.TABLE_NAME + "." + KeyRings.TYPE + " = ?", new String[] { ""
-// + Id.database.type_public }, null, null, orderBy);
-//
-// activity.startManagingCursor(mCursor);
-// }
-//
-// public void cleanup() {
-// if (mCursor != null) {
-// mActivity.stopManagingCursor(mCursor);
-// mCursor.close();
-// }
-// }
-//
-// @Override
-// public boolean isEnabled(int position) {
-// mCursor.moveToPosition(position);
-// return mCursor.getInt(4) > 0; // valid CAN_ENCRYPT
-// }
-//
-// @Override
-// public boolean hasStableIds() {
-// return true;
-// }
-//
-// public int getCount() {
-// return mCursor.getCount();
-// }
-//
-// public Object getItem(int position) {
-// mCursor.moveToPosition(position);
-// return mCursor.getString(2); // USER_ID
-// }
-//
-// public long getItemId(int position) {
-// mCursor.moveToPosition(position);
-// return mCursor.getLong(1); // MASTER_KEY_ID
-// }
-//
-// public View getView(int position, View convertView, ViewGroup parent) {
-// mCursor.moveToPosition(position);
-//
-// View view = mInflater.inflate(R.layout.select_public_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 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(PGPHelper.getSmallFingerPrint(masterKeyId));
-//
-// if (mainUserIdRest.getText().length() == 0) {
-// mainUserIdRest.setVisibility(View.GONE);
-// }
-//
-// if (enabled) {
-// status.setText(R.string.canEncrypt);
-// } else {
-// if (mCursor.getInt(3) > 0) {
-// // has some CAN_ENCRYPT keys, but col(4) = 0, so must be revoked or expired
-// status.setText(R.string.expired);
-// } else {
-// status.setText(R.string.noKey);
-// }
-// }
-//
-// status.setText(status.getText() + " ");
-//
-// CheckBox selected = (CheckBox) view.findViewById(R.id.selected);
-//
-// if (!enabled) {
-// mParent.setItemChecked(position, false);
-// }
-//
-// selected.setChecked(mParent.isItemChecked(position));
-//
-// view.setEnabled(enabled);
-// mainUserId.setEnabled(enabled);
-// mainUserIdRest.setEnabled(enabled);
-// keyId.setEnabled(enabled);
-// selected.setEnabled(enabled);
-// status.setEnabled(enabled);
-//
-// return view;
-// }
-//}