aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--APG-API-Demo/AndroidManifest.xml4
-rw-r--r--APG-API-Demo/res/layout/content_provider_demo.xml33
-rw-r--r--APG-API-Demo/res/xml/base_preference.xml5
-rw-r--r--APG-API-Demo/src/org/thialfihar/android/apg/demo/AidlDemoActivity.java17
-rw-r--r--APG-API-Demo/src/org/thialfihar/android/apg/demo/BaseActivity.java11
-rw-r--r--APG-API-Demo/src/org/thialfihar/android/apg/demo/ContentProviderDemoActivity.java68
-rw-r--r--APG-API-Lib/src/org/thialfihar/android/apg/integration/ApgContentProviderHelper.java (renamed from APG-API-Lib/src/org/thialfihar/android/apg/integration/ContentProviderHelper.java)4
-rw-r--r--APG-API-Lib/src/org/thialfihar/android/apg/integration/ApgIntentHelper.java2
-rw-r--r--APG/src/org/thialfihar/android/apg/provider/ApgContract.java2
-rw-r--r--APG/src/org/thialfihar/android/apg/provider/ApgProvider.java24
-rw-r--r--APG/src/org/thialfihar/android/apg/provider/ApgProviderExternal.java5
-rw-r--r--APG/src/org/thialfihar/android/apg/provider/ApgProviderInternal.java5
12 files changed, 158 insertions, 22 deletions
diff --git a/APG-API-Demo/AndroidManifest.xml b/APG-API-Demo/AndroidManifest.xml
index 8d7a9e970..4112b8a09 100644
--- a/APG-API-Demo/AndroidManifest.xml
+++ b/APG-API-Demo/AndroidManifest.xml
@@ -31,6 +31,10 @@
android:name=".AidlDemoActivity"
android:label="Aidl Demo"
android:windowSoftInputMode="stateHidden" />
+ <activity
+ android:name=".ContentProviderDemoActivity"
+ android:label="Content Provider Demo"
+ android:windowSoftInputMode="stateHidden" />
</application>
</manifest> \ No newline at end of file
diff --git a/APG-API-Demo/res/layout/content_provider_demo.xml b/APG-API-Demo/res/layout/content_provider_demo.xml
new file mode 100644
index 000000000..279324cda
--- /dev/null
+++ b/APG-API-Demo/res/layout/content_provider_demo.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content" >
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+
+ <Button
+ android:id="@+id/content_provider_test1"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:onClick="test1OnClick"
+ android:text="Test 1" />
+
+ <Button
+ android:id="@+id/content_provider_test2"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:onClick="test2OnClick"
+ android:text="Test 2" />
+
+ <EditText
+ android:id="@+id/content_provider_output"
+ android:layout_width="match_parent"
+ android:layout_height="150dip"
+ android:text="output"
+ android:textAppearance="@android:style/TextAppearance.Small" />
+ </LinearLayout>
+
+</ScrollView> \ No newline at end of file
diff --git a/APG-API-Demo/res/xml/base_preference.xml b/APG-API-Demo/res/xml/base_preference.xml
index c56e54746..3fcd036e2 100644
--- a/APG-API-Demo/res/xml/base_preference.xml
+++ b/APG-API-Demo/res/xml/base_preference.xml
@@ -11,5 +11,10 @@
android:key="aidl_demo"
android:title="AIDL Demo" />
</PreferenceCategory>
+ <PreferenceCategory android:title="Content Provider" >
+ <Preference
+ android:key="content_provider_demo"
+ android:title="Content Provider Demo" />
+ </PreferenceCategory>
</PreferenceScreen> \ No newline at end of file
diff --git a/APG-API-Demo/src/org/thialfihar/android/apg/demo/AidlDemoActivity.java b/APG-API-Demo/src/org/thialfihar/android/apg/demo/AidlDemoActivity.java
index f066e0957..7c08c0e06 100644
--- a/APG-API-Demo/src/org/thialfihar/android/apg/demo/AidlDemoActivity.java
+++ b/APG-API-Demo/src/org/thialfihar/android/apg/demo/AidlDemoActivity.java
@@ -1,3 +1,19 @@
+/*
+ * Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
+ *
+ * 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.demo;
import org.thialfihar.android.apg.integration.ApgData;
@@ -17,7 +33,6 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.view.View;
import android.widget.TextView;
-import android.widget.Toast;
public class AidlDemoActivity extends Activity {
Activity mActivity;
diff --git a/APG-API-Demo/src/org/thialfihar/android/apg/demo/BaseActivity.java b/APG-API-Demo/src/org/thialfihar/android/apg/demo/BaseActivity.java
index 3f46b2e4d..66c3a9a0e 100644
--- a/APG-API-Demo/src/org/thialfihar/android/apg/demo/BaseActivity.java
+++ b/APG-API-Demo/src/org/thialfihar/android/apg/demo/BaseActivity.java
@@ -30,6 +30,7 @@ public class BaseActivity extends PreferenceActivity {
private Preference mIntentDemo;
private Preference mAidlDemo;
+ private Preference mContentProviderDemo;
/**
* Called when the activity is first created.
@@ -46,6 +47,7 @@ public class BaseActivity extends PreferenceActivity {
// find preferences
mIntentDemo = (Preference) findPreference("intent_demo");
mAidlDemo = (Preference) findPreference("aidl_demo");
+ mContentProviderDemo = (Preference) findPreference("content_provider_demo");
mIntentDemo.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
@@ -64,6 +66,15 @@ public class BaseActivity extends PreferenceActivity {
return false;
}
});
+
+ mContentProviderDemo.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ startActivity(new Intent(mActivity, ContentProviderDemoActivity.class));
+
+ return false;
+ }
+ });
}
}
diff --git a/APG-API-Demo/src/org/thialfihar/android/apg/demo/ContentProviderDemoActivity.java b/APG-API-Demo/src/org/thialfihar/android/apg/demo/ContentProviderDemoActivity.java
new file mode 100644
index 000000000..6d7696a32
--- /dev/null
+++ b/APG-API-Demo/src/org/thialfihar/android/apg/demo/ContentProviderDemoActivity.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2012 Dominik Schürmann <dominik@dominikschuermann.de>
+ *
+ * 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.demo;
+
+import java.util.Arrays;
+
+import org.thialfihar.android.apg.demo.R;
+import org.thialfihar.android.apg.integration.ApgContentProviderHelper;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
+
+public class ContentProviderDemoActivity extends Activity {
+ Activity mActivity;
+
+ TextView mOutputTextView;
+ TextView mCiphertextTextView;
+ TextView mDataTextView;
+
+ ApgContentProviderHelper mApgContentProviderHelper;
+
+ /**
+ * Instantiate View for this Activity
+ */
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.content_provider_demo);
+
+ mActivity = this;
+
+ mOutputTextView = (TextView) findViewById(R.id.content_provider_output);
+
+ mApgContentProviderHelper = new ApgContentProviderHelper(mActivity);
+ }
+
+ public void test1OnClick(View view) {
+ long[] test = mApgContentProviderHelper.getPublicKeyIdsFromEmail("user@example.com");
+ mOutputTextView.setText(Arrays.toString(test));
+ }
+
+ public void test2OnClick(View view) {
+ boolean test = mApgContentProviderHelper.hasPublicKeyForEmail("user@example.com");
+ if (test) {
+ mOutputTextView.setText("true");
+ } else {
+ mOutputTextView.setText("false");
+ }
+ }
+
+}
diff --git a/APG-API-Lib/src/org/thialfihar/android/apg/integration/ContentProviderHelper.java b/APG-API-Lib/src/org/thialfihar/android/apg/integration/ApgContentProviderHelper.java
index 7b725fe06..2c2531b02 100644
--- a/APG-API-Lib/src/org/thialfihar/android/apg/integration/ContentProviderHelper.java
+++ b/APG-API-Lib/src/org/thialfihar/android/apg/integration/ApgContentProviderHelper.java
@@ -24,7 +24,7 @@ import android.database.Cursor;
import android.net.Uri;
import android.widget.Toast;
-public class ContentProviderHelper {
+public class ApgContentProviderHelper {
public static final String AUTHORITY = Constants.APG_PACKAGE_NAME;
public static final Uri CONTENT_URI_PUBLIC_KEY_RING_BY_KEY_ID = Uri.parse("content://"
@@ -39,7 +39,7 @@ public class ContentProviderHelper {
private Context activity;
- public ContentProviderHelper(Activity activity) {
+ public ApgContentProviderHelper(Activity activity) {
this.activity = activity;
}
diff --git a/APG-API-Lib/src/org/thialfihar/android/apg/integration/ApgIntentHelper.java b/APG-API-Lib/src/org/thialfihar/android/apg/integration/ApgIntentHelper.java
index f1b4c2bd1..09a544f26 100644
--- a/APG-API-Lib/src/org/thialfihar/android/apg/integration/ApgIntentHelper.java
+++ b/APG-API-Lib/src/org/thialfihar/android/apg/integration/ApgIntentHelper.java
@@ -293,7 +293,7 @@ public class ApgIntentHelper {
long[] initialKeyIds = null;
if (apgData == null || !apgData.hasEncryptionKeys()) {
- ContentProviderHelper cPHelper = new ContentProviderHelper(activity);
+ ApgContentProviderHelper cPHelper = new ApgContentProviderHelper(activity);
initialKeyIds = cPHelper.getPublicKeyIdsFromEmail(emails);
diff --git a/APG/src/org/thialfihar/android/apg/provider/ApgContract.java b/APG/src/org/thialfihar/android/apg/provider/ApgContract.java
index aeb7d48f0..c68eec750 100644
--- a/APG/src/org/thialfihar/android/apg/provider/ApgContract.java
+++ b/APG/src/org/thialfihar/android/apg/provider/ApgContract.java
@@ -58,7 +58,7 @@ public class ApgContract {
}
public static final String CONTENT_AUTHORITY_EXTERNAL = Constants.PACKAGE_NAME;
- public static final String CONTENT_AUTHORITY_INTERNAL = Constants.PACKAGE_NAME + "_internal";
+ public static final String CONTENT_AUTHORITY_INTERNAL = Constants.PACKAGE_NAME + ".internal";
private static final Uri BASE_CONTENT_URI_INTERNAL = Uri.parse("content://"
+ CONTENT_AUTHORITY_INTERNAL);
diff --git a/APG/src/org/thialfihar/android/apg/provider/ApgProvider.java b/APG/src/org/thialfihar/android/apg/provider/ApgProvider.java
index a7ec253a3..6b1c9fdb7 100644
--- a/APG/src/org/thialfihar/android/apg/provider/ApgProvider.java
+++ b/APG/src/org/thialfihar/android/apg/provider/ApgProvider.java
@@ -73,14 +73,14 @@ public class ApgProvider extends ContentProvider {
private static final int DATA_STREAM = 301;
- protected static boolean sInternalProvider;
- protected static UriMatcher sUriMatcher;
+ protected boolean mInternalProvider;
+ protected UriMatcher mUriMatcher;
/**
* Build and return a {@link UriMatcher} that catches all {@link Uri} variations supported by
* this {@link ContentProvider}.
*/
- protected static UriMatcher buildUriMatcher(boolean internalProvider) {
+ protected UriMatcher buildUriMatcher(boolean internalProvider) {
final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
String authority;
@@ -205,6 +205,8 @@ public class ApgProvider extends ContentProvider {
/** {@inheritDoc} */
@Override
public boolean onCreate() {
+ mUriMatcher = buildUriMatcher(mInternalProvider);
+
mApgDatabase = new ApgDatabase(getContext());
return true;
}
@@ -212,7 +214,7 @@ public class ApgProvider extends ContentProvider {
/** {@inheritDoc} */
@Override
public String getType(Uri uri) {
- final int match = sUriMatcher.match(uri);
+ final int match = mUriMatcher.match(uri);
switch (match) {
case PUBLIC_KEY_RING:
case PUBLIC_KEY_RING_BY_EMAILS:
@@ -302,7 +304,7 @@ public class ApgProvider extends ContentProvider {
projectionMap.put(KeyRingsColumns.MASTER_KEY_ID, Tables.KEY_RINGS + "."
+ KeyRingsColumns.MASTER_KEY_ID);
// only give out keyRing blob when we are using the internal content provider
- if (sInternalProvider) {
+ if (mInternalProvider) {
projectionMap.put(KeyRingsColumns.KEY_RING_DATA, Tables.KEY_RINGS + "."
+ KeyRingsColumns.KEY_RING_DATA);
}
@@ -331,7 +333,7 @@ public class ApgProvider extends ContentProvider {
projectionMap.put(KeysColumns.EXPIRY, KeysColumns.EXPIRY);
projectionMap.put(KeysColumns.KEY_RING_ROW_ID, KeysColumns.KEY_RING_ROW_ID);
// only give out keyRing blob when we are using the internal content provider
- if (sInternalProvider) {
+ if (mInternalProvider) {
projectionMap.put(KeysColumns.KEY_DATA, KeysColumns.KEY_DATA);
}
projectionMap.put(KeysColumns.RANK, KeysColumns.RANK);
@@ -399,7 +401,7 @@ public class ApgProvider extends ContentProvider {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
SQLiteDatabase db = mApgDatabase.getReadableDatabase();
- int match = sUriMatcher.match(uri);
+ int match = mUriMatcher.match(uri);
switch (match) {
case PUBLIC_KEY_RING:
@@ -579,7 +581,7 @@ public class ApgProvider extends ContentProvider {
Uri rowUri = null;
long rowId = -1;
try {
- final int match = sUriMatcher.match(uri);
+ final int match = mUriMatcher.match(uri);
switch (match) {
case PUBLIC_KEY_RING:
@@ -641,7 +643,7 @@ public class ApgProvider extends ContentProvider {
final SQLiteDatabase db = mApgDatabase.getWritableDatabase();
int count;
- final int match = sUriMatcher.match(uri);
+ final int match = mUriMatcher.match(uri);
String defaultSelection = null;
switch (match) {
@@ -691,7 +693,7 @@ public class ApgProvider extends ContentProvider {
String defaultSelection = null;
int count = 0;
try {
- final int match = sUriMatcher.match(uri);
+ final int match = mUriMatcher.match(uri);
switch (match) {
case PUBLIC_KEY_RING_BY_ROW_ID:
case SECRET_KEY_RING_BY_ROW_ID:
@@ -814,7 +816,7 @@ public class ApgProvider extends ContentProvider {
@Override
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
- int match = sUriMatcher.match(uri);
+ int match = mUriMatcher.match(uri);
if (match != DATA_STREAM) {
throw new FileNotFoundException();
}
diff --git a/APG/src/org/thialfihar/android/apg/provider/ApgProviderExternal.java b/APG/src/org/thialfihar/android/apg/provider/ApgProviderExternal.java
index 61cca8bed..18a78e440 100644
--- a/APG/src/org/thialfihar/android/apg/provider/ApgProviderExternal.java
+++ b/APG/src/org/thialfihar/android/apg/provider/ApgProviderExternal.java
@@ -24,9 +24,8 @@ package org.thialfihar.android.apg.provider;
*/
public class ApgProviderExternal extends ApgProvider {
- static {
- sInternalProvider = false;
- sUriMatcher = buildUriMatcher(sInternalProvider);
+ public ApgProviderExternal() {
+ mInternalProvider = false;
}
}
diff --git a/APG/src/org/thialfihar/android/apg/provider/ApgProviderInternal.java b/APG/src/org/thialfihar/android/apg/provider/ApgProviderInternal.java
index e2226a0fa..4c7b4d453 100644
--- a/APG/src/org/thialfihar/android/apg/provider/ApgProviderInternal.java
+++ b/APG/src/org/thialfihar/android/apg/provider/ApgProviderInternal.java
@@ -22,9 +22,8 @@ package org.thialfihar.android.apg.provider;
*/
public class ApgProviderInternal extends ApgProvider {
- static {
- sInternalProvider = true;
- sUriMatcher = buildUriMatcher(sInternalProvider);
+ public ApgProviderInternal() {
+ mInternalProvider = true;
}
}