diff options
Diffstat (limited to 'OpenPGP-Keychain/src')
3 files changed, 29 insertions, 6 deletions
| diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java index 2d7558a49..ea6d3a859 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -514,6 +514,26 @@ public class ProviderHelper {          return masterKeyId;      } +    public static long getRowId(Context context, Uri queryUri) { +        String[] projection = new String[]{KeyRings._ID}; +        Cursor cursor = context.getContentResolver().query(queryUri, projection, null, null, null); + +        long rowId = 0; +        try { +            if (cursor != null && cursor.moveToFirst()) { +                int idCol = cursor.getColumnIndexOrThrow(KeyRings._ID); + +                rowId = cursor.getLong(idCol); +            } +        } finally { +            if (cursor != null) { +                cursor.close(); +            } +        } + +        return rowId; +    } +      /**       * Get fingerprint of key       */ diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index a638796cd..dbc24504e 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -285,11 +285,7 @@ public class KeyListFragment extends Fragment implements AdapterView.OnItemClick          } else {              viewIntent = new Intent(getActivity(), ViewKeyActivityJB.class);          } -        if(mAdapter.getKeyType(position) == KeyTypes.SECRET) { -            viewIntent.setData(KeychainContract.KeyRings.buildSecretKeyRingsByMasterKeyIdUri(Long.toString(mAdapter.getMasterKeyId(position)))); -        } else { -            viewIntent.setData(KeychainContract.KeyRings.buildPublicKeyRingsByMasterKeyIdUri(Long.toString(mAdapter.getMasterKeyId(position)))); -        } +        viewIntent.setData(KeychainContract.KeyRings.buildPublicKeyRingsByMasterKeyIdUri(Long.toString(mAdapter.getMasterKeyId(position))));          startActivity(viewIntent);      } diff --git a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index 0a452bc8a..ab46b8efc 100644 --- a/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenPGP-Keychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -36,6 +36,7 @@ import org.sufficientlysecure.keychain.R;  import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;  import org.sufficientlysecure.keychain.helper.ExportHelper;  import org.sufficientlysecure.keychain.pgp.PgpKeyHelper; +import org.sufficientlysecure.keychain.provider.KeychainContract;  import org.sufficientlysecure.keychain.provider.ProviderHelper;  import org.sufficientlysecure.keychain.ui.adapter.TabsAdapter;  import org.sufficientlysecure.keychain.ui.dialog.DeleteKeyDialogFragment; @@ -83,7 +84,13 @@ public class ViewKeyActivity extends ActionBarActivity {              selectedTab = intent.getExtras().getInt(EXTRA_SELECTED_TAB);          } -        mDataUri = getIntent().getData(); +        { +            // normalize mDataUri to a "by row id" query, to ensure it works with any +            // given valid /public/ query +            long rowId = ProviderHelper.getRowId(this, getIntent().getData()); +            // TODO: handle (rowId == 0) with something else than a crash +            mDataUri = KeychainContract.KeyRings.buildPublicKeyRingsUri(Long.toString(rowId)) ; +        }          Bundle mainBundle = new Bundle();          mainBundle.putParcelable(ViewKeyMainFragment.ARG_DATA_URI, mDataUri); | 
