From 8614ff2ec74447f7199a5822f9331a0991161038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 5 Sep 2013 00:27:17 +0200 Subject: [PATCH] Fix revoke and save --- .../keychain/provider/KeychainProvider.java | 63 +++++++++++-------- .../remote_api/AppSettingsActivity.java | 55 ++++++++-------- .../keychain/remote_api/ServiceActivity.java | 6 +- 3 files changed, 66 insertions(+), 58 deletions(-) diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java index 6275b3b5c..98a45d69f 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java @@ -78,9 +78,9 @@ public class KeychainProvider extends ContentProvider { private static final int SECRET_KEY_RING_USER_ID = 221; private static final int SECRET_KEY_RING_USER_ID_BY_ROW_ID = 222; - private static final int CRYPTO_CONSUMERS = 301; - private static final int CRYPTO_CONSUMERS_BY_ROW_ID = 302; - private static final int CRYPTO_CONSUMERS_BY_PACKAGE_NAME = 303; + private static final int API_APPS = 301; + private static final int API_APPS_BY_ROW_ID = 302; + private static final int API_APPS_BY_PACKAGE_NAME = 303; // private static final int DATA_STREAM = 401; @@ -226,13 +226,12 @@ public class KeychainProvider extends ContentProvider { SECRET_KEY_RING_USER_ID_BY_ROW_ID); /** - * Crypto Consumers + * API apps */ - matcher.addURI(authority, KeychainContract.BASE_API_APPS, CRYPTO_CONSUMERS); - matcher.addURI(authority, KeychainContract.BASE_API_APPS + "/#", - CRYPTO_CONSUMERS_BY_ROW_ID); + matcher.addURI(authority, KeychainContract.BASE_API_APPS, API_APPS); + matcher.addURI(authority, KeychainContract.BASE_API_APPS + "/#", API_APPS_BY_ROW_ID); matcher.addURI(authority, KeychainContract.BASE_API_APPS + "/" - + KeychainContract.PATH_BY_PACKAGE_NAME + "/*", CRYPTO_CONSUMERS_BY_PACKAGE_NAME); + + KeychainContract.PATH_BY_PACKAGE_NAME + "/*", API_APPS_BY_PACKAGE_NAME); /** * data stream @@ -293,11 +292,11 @@ public class KeychainProvider extends ContentProvider { case SECRET_KEY_RING_USER_ID_BY_ROW_ID: return UserIds.CONTENT_ITEM_TYPE; - case CRYPTO_CONSUMERS: + case API_APPS: return ApiApps.CONTENT_TYPE; - case CRYPTO_CONSUMERS_BY_ROW_ID: - case CRYPTO_CONSUMERS_BY_PACKAGE_NAME: + case API_APPS_BY_ROW_ID: + case API_APPS_BY_PACKAGE_NAME: return ApiApps.CONTENT_ITEM_TYPE; default: @@ -608,18 +607,18 @@ public class KeychainProvider extends ContentProvider { break; - case CRYPTO_CONSUMERS: + case API_APPS: qb.setTables(Tables.API_APPS); break; - case CRYPTO_CONSUMERS_BY_ROW_ID: + case API_APPS_BY_ROW_ID: qb.setTables(Tables.API_APPS); qb.appendWhere(BaseColumns._ID + " = "); qb.appendWhereEscapeString(uri.getLastPathSegment()); break; - case CRYPTO_CONSUMERS_BY_PACKAGE_NAME: + case API_APPS_BY_PACKAGE_NAME: qb.setTables(Tables.API_APPS); qb.appendWhere(ApiApps.PACKAGE_NAME + " = "); qb.appendWhereEscapeString(uri.getPathSegments().get(2)); @@ -711,7 +710,7 @@ public class KeychainProvider extends ContentProvider { rowUri = UserIds.buildSecretUserIdsUri(Long.toString(rowId)); break; - case CRYPTO_CONSUMERS: + case API_APPS: rowId = db.insertOrThrow(Tables.API_APPS, null, values); rowUri = ApiApps.buildIdUri(Long.toString(rowId)); @@ -771,10 +770,13 @@ public class KeychainProvider extends ContentProvider { count = db.delete(Tables.KEYS, buildDefaultUserIdsSelection(uri, selection), selectionArgs); break; - case CRYPTO_CONSUMERS_BY_ROW_ID: - case CRYPTO_CONSUMERS_BY_PACKAGE_NAME: - count = db.delete(Tables.API_APPS, - buildDefaultCryptoConsumersSelection(uri, selection), selectionArgs); + case API_APPS_BY_ROW_ID: + count = db.delete(Tables.API_APPS, buildDefaultApiAppsSelection(uri, false, selection), + selectionArgs); + break; + case API_APPS_BY_PACKAGE_NAME: + count = db.delete(Tables.API_APPS, buildDefaultApiAppsSelection(uri, true, selection), + selectionArgs); break; default: throw new UnsupportedOperationException("Unknown uri: " + uri); @@ -836,10 +838,13 @@ public class KeychainProvider extends ContentProvider { count = db.update(Tables.USER_IDS, values, buildDefaultUserIdsSelection(uri, selection), selectionArgs); break; - case CRYPTO_CONSUMERS_BY_ROW_ID: - case CRYPTO_CONSUMERS_BY_PACKAGE_NAME: + case API_APPS_BY_ROW_ID: count = db.update(Tables.API_APPS, values, - buildDefaultCryptoConsumersSelection(uri, selection), selectionArgs); + buildDefaultApiAppsSelection(uri, false, selection), selectionArgs); + break; + case API_APPS_BY_PACKAGE_NAME: + count = db.update(Tables.API_APPS, values, + buildDefaultApiAppsSelection(uri, true, selection), selectionArgs); break; default: throw new UnsupportedOperationException("Unknown uri: " + uri); @@ -930,20 +935,26 @@ public class KeychainProvider extends ContentProvider { } /** - * Build default selection statement for Crypto Consumers. If no extra selection is specified - * only build where clause with rowId + * Build default selection statement for API apps. If no extra selection is specified only build + * where clause with rowId * * @param uri * @param selection * @return */ - private String buildDefaultCryptoConsumersSelection(Uri uri, String selection) { + private String buildDefaultApiAppsSelection(Uri uri, boolean packageSelection, String selection) { + String lastPathSegment = uri.getLastPathSegment(); + String andSelection = ""; if (!TextUtils.isEmpty(selection)) { andSelection = " AND (" + selection + ")"; } - return selection + andSelection; + if (packageSelection) { + return ApiApps.PACKAGE_NAME + "=" + lastPathSegment + andSelection; + } else { + return BaseColumns._ID + "=" + lastPathSegment + andSelection; + } } // @Override diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/remote_api/AppSettingsActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/remote_api/AppSettingsActivity.java index 3046dd0d2..6316dbc38 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/remote_api/AppSettingsActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/remote_api/AppSettingsActivity.java @@ -27,10 +27,8 @@ public class AppSettingsActivity extends SherlockFragmentActivity { // model Uri appUri; - long id; String packageName; long keyId; - boolean asciiArmor; // model, derived String appName; @@ -85,46 +83,45 @@ public class AppSettingsActivity extends SherlockFragmentActivity { private void loadData(Uri appUri) { Cursor cur = getContentResolver().query(appUri, null, null, null, null); - id = ContentUris.parseId(appUri); if (cur.moveToFirst()) { - do { - packageName = cur.getString(cur - .getColumnIndex(KeychainContract.ApiApps.PACKAGE_NAME)); - // get application name - try { - ApplicationInfo ai = pm.getApplicationInfo(packageName, 0); + packageName = cur.getString(cur.getColumnIndex(KeychainContract.ApiApps.PACKAGE_NAME)); + // get application name + try { + ApplicationInfo ai = pm.getApplicationInfo(packageName, 0); - appName = (String) pm.getApplicationLabel(ai); - } catch (final NameNotFoundException e) { - appName = getString(R.string.api_unknown_app); - } + appName = (String) pm.getApplicationLabel(ai); + } catch (final NameNotFoundException e) { + appName = getString(R.string.api_unknown_app); + } + setTitle(appName); - try { - asciiArmor = (cur.getInt(cur - .getColumnIndexOrThrow(KeychainContract.ApiApps.ASCII_ARMOR)) == 1); + try { + boolean asciiArmor = (cur.getInt(cur + .getColumnIndexOrThrow(KeychainContract.ApiApps.ASCII_ARMOR)) == 1); + asciiArmorCheckBox.setChecked(asciiArmor); - // display values - asciiArmorCheckBox.setChecked(asciiArmor); - } catch (IllegalArgumentException e) { - Log.e(Constants.TAG, "AppSettingsActivity", e); - } - - } while (cur.moveToNext()); + } catch (IllegalArgumentException e) { + Log.e(Constants.TAG, "AppSettingsActivity", e); + } } } private void revokeAccess() { - Uri calUri = ContentUris.withAppendedId(appUri, id); - getContentResolver().delete(calUri, null, null); + if (getContentResolver().delete(appUri, null, null) <= 0) { + throw new RuntimeException(); + } finish(); } private void save() { + Log.d(Constants.TAG, "saving"); final ContentValues cv = new ContentValues(); - cv.put(KeychainContract.ApiApps.PACKAGE_NAME, packageName); - cv.put(KeychainContract.ApiApps.ASCII_ARMOR, asciiArmor); - // TODO: other parameter - getContentResolver().update(appUri, cv, null, null); + // cv.put(KeychainContract.ApiApps.PACKAGE_NAME, packageName); + cv.put(KeychainContract.ApiApps.ASCII_ARMOR, asciiArmorCheckBox.isChecked()); + // TODO: other parameters + if (getContentResolver().update(appUri, cv, null, null) <= 0) { + throw new RuntimeException(); + } finish(); } diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/remote_api/ServiceActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/remote_api/ServiceActivity.java index 703093f0a..00bba7757 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/remote_api/ServiceActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/remote_api/ServiceActivity.java @@ -133,9 +133,9 @@ public class ServiceActivity extends SherlockFragmentActivity { if (ACTION_REGISTER.equals(action)) { final String packageName = extras.getString(EXTRA_PACKAGE_NAME); - setContentView(R.layout.api_app_settings_activity); - - //TODO: handle if app is already registered + setContentView(R.layout.api_app_register_activity); + + // TODO: handle if app is already registered // LinearLayout layoutRegister = (LinearLayout) // findViewById(R.id.register_crypto_consumer_register_layout); // LinearLayout layoutEdit = (LinearLayout)