diff options
| author | Dominik <dominik@dominikschuermann.de> | 2012-11-19 22:18:25 +0100 | 
|---|---|---|
| committer | Dominik <dominik@dominikschuermann.de> | 2012-11-19 22:18:25 +0100 | 
| commit | c36fdbd3f85b7721256d265fbcc1e7083a67a8dc (patch) | |
| tree | 77e2addf17b2c81a5eb1ccba03bf53672a559df6 | |
| parent | 949035b009097e7875f13e2832eb0006ebf00e48 (diff) | |
| download | open-keychain-c36fdbd3f85b7721256d265fbcc1e7083a67a8dc.tar.gz open-keychain-c36fdbd3f85b7721256d265fbcc1e7083a67a8dc.tar.bz2 open-keychain-c36fdbd3f85b7721256d265fbcc1e7083a67a8dc.zip  | |
Fix didnt work, new fix and tests
| -rw-r--r-- | APG-API-Demo/AndroidManifest.xml | 4 | ||||
| -rw-r--r-- | APG-API-Demo/res/layout/content_provider_demo.xml | 33 | ||||
| -rw-r--r-- | APG-API-Demo/res/xml/base_preference.xml | 5 | ||||
| -rw-r--r-- | APG-API-Demo/src/org/thialfihar/android/apg/demo/AidlDemoActivity.java | 17 | ||||
| -rw-r--r-- | APG-API-Demo/src/org/thialfihar/android/apg/demo/BaseActivity.java | 11 | ||||
| -rw-r--r-- | APG-API-Demo/src/org/thialfihar/android/apg/demo/ContentProviderDemoActivity.java | 68 | ||||
| -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.java | 2 | ||||
| -rw-r--r-- | APG/src/org/thialfihar/android/apg/provider/ApgContract.java | 2 | ||||
| -rw-r--r-- | APG/src/org/thialfihar/android/apg/provider/ApgProvider.java | 24 | ||||
| -rw-r--r-- | APG/src/org/thialfihar/android/apg/provider/ApgProviderExternal.java | 5 | ||||
| -rw-r--r-- | APG/src/org/thialfihar/android/apg/provider/ApgProviderInternal.java | 5 | 
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;      }  }  | 
