mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-12-26 00:48:51 -05:00
Fix didnt work, new fix and tests
This commit is contained in:
parent
949035b009
commit
c36fdbd3f8
@ -31,6 +31,10 @@
|
|||||||
android:name=".AidlDemoActivity"
|
android:name=".AidlDemoActivity"
|
||||||
android:label="Aidl Demo"
|
android:label="Aidl Demo"
|
||||||
android:windowSoftInputMode="stateHidden" />
|
android:windowSoftInputMode="stateHidden" />
|
||||||
|
<activity
|
||||||
|
android:name=".ContentProviderDemoActivity"
|
||||||
|
android:label="Content Provider Demo"
|
||||||
|
android:windowSoftInputMode="stateHidden" />
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
33
APG-API-Demo/res/layout/content_provider_demo.xml
Normal file
33
APG-API-Demo/res/layout/content_provider_demo.xml
Normal file
@ -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>
|
@ -11,5 +11,10 @@
|
|||||||
android:key="aidl_demo"
|
android:key="aidl_demo"
|
||||||
android:title="AIDL Demo" />
|
android:title="AIDL Demo" />
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
<PreferenceCategory android:title="Content Provider" >
|
||||||
|
<Preference
|
||||||
|
android:key="content_provider_demo"
|
||||||
|
android:title="Content Provider Demo" />
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
@ -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;
|
package org.thialfihar.android.apg.demo;
|
||||||
|
|
||||||
import org.thialfihar.android.apg.integration.ApgData;
|
import org.thialfihar.android.apg.integration.ApgData;
|
||||||
@ -17,7 +33,6 @@ import android.os.IBinder;
|
|||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
public class AidlDemoActivity extends Activity {
|
public class AidlDemoActivity extends Activity {
|
||||||
Activity mActivity;
|
Activity mActivity;
|
||||||
|
@ -30,6 +30,7 @@ public class BaseActivity extends PreferenceActivity {
|
|||||||
|
|
||||||
private Preference mIntentDemo;
|
private Preference mIntentDemo;
|
||||||
private Preference mAidlDemo;
|
private Preference mAidlDemo;
|
||||||
|
private Preference mContentProviderDemo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the activity is first created.
|
* Called when the activity is first created.
|
||||||
@ -46,6 +47,7 @@ public class BaseActivity extends PreferenceActivity {
|
|||||||
// find preferences
|
// find preferences
|
||||||
mIntentDemo = (Preference) findPreference("intent_demo");
|
mIntentDemo = (Preference) findPreference("intent_demo");
|
||||||
mAidlDemo = (Preference) findPreference("aidl_demo");
|
mAidlDemo = (Preference) findPreference("aidl_demo");
|
||||||
|
mContentProviderDemo = (Preference) findPreference("content_provider_demo");
|
||||||
|
|
||||||
mIntentDemo.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
mIntentDemo.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||||
@Override
|
@Override
|
||||||
@ -64,6 +66,15 @@ public class BaseActivity extends PreferenceActivity {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mContentProviderDemo.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
startActivity(new Intent(mActivity, ContentProviderDemoActivity.class));
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -24,7 +24,7 @@ import android.database.Cursor;
|
|||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
public class ContentProviderHelper {
|
public class ApgContentProviderHelper {
|
||||||
public static final String AUTHORITY = Constants.APG_PACKAGE_NAME;
|
public static final String AUTHORITY = Constants.APG_PACKAGE_NAME;
|
||||||
|
|
||||||
public static final Uri CONTENT_URI_PUBLIC_KEY_RING_BY_KEY_ID = Uri.parse("content://"
|
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;
|
private Context activity;
|
||||||
|
|
||||||
public ContentProviderHelper(Activity activity) {
|
public ApgContentProviderHelper(Activity activity) {
|
||||||
this.activity = activity;
|
this.activity = activity;
|
||||||
}
|
}
|
||||||
|
|
@ -293,7 +293,7 @@ public class ApgIntentHelper {
|
|||||||
long[] initialKeyIds = null;
|
long[] initialKeyIds = null;
|
||||||
if (apgData == null || !apgData.hasEncryptionKeys()) {
|
if (apgData == null || !apgData.hasEncryptionKeys()) {
|
||||||
|
|
||||||
ContentProviderHelper cPHelper = new ContentProviderHelper(activity);
|
ApgContentProviderHelper cPHelper = new ApgContentProviderHelper(activity);
|
||||||
|
|
||||||
initialKeyIds = cPHelper.getPublicKeyIdsFromEmail(emails);
|
initialKeyIds = cPHelper.getPublicKeyIdsFromEmail(emails);
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ public class ApgContract {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final String CONTENT_AUTHORITY_EXTERNAL = Constants.PACKAGE_NAME;
|
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://"
|
private static final Uri BASE_CONTENT_URI_INTERNAL = Uri.parse("content://"
|
||||||
+ CONTENT_AUTHORITY_INTERNAL);
|
+ CONTENT_AUTHORITY_INTERNAL);
|
||||||
|
@ -73,14 +73,14 @@ public class ApgProvider extends ContentProvider {
|
|||||||
|
|
||||||
private static final int DATA_STREAM = 301;
|
private static final int DATA_STREAM = 301;
|
||||||
|
|
||||||
protected static boolean sInternalProvider;
|
protected boolean mInternalProvider;
|
||||||
protected static UriMatcher sUriMatcher;
|
protected UriMatcher mUriMatcher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build and return a {@link UriMatcher} that catches all {@link Uri} variations supported by
|
* Build and return a {@link UriMatcher} that catches all {@link Uri} variations supported by
|
||||||
* this {@link ContentProvider}.
|
* this {@link ContentProvider}.
|
||||||
*/
|
*/
|
||||||
protected static UriMatcher buildUriMatcher(boolean internalProvider) {
|
protected UriMatcher buildUriMatcher(boolean internalProvider) {
|
||||||
final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
|
final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
|
||||||
|
|
||||||
String authority;
|
String authority;
|
||||||
@ -205,6 +205,8 @@ public class ApgProvider extends ContentProvider {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreate() {
|
public boolean onCreate() {
|
||||||
|
mUriMatcher = buildUriMatcher(mInternalProvider);
|
||||||
|
|
||||||
mApgDatabase = new ApgDatabase(getContext());
|
mApgDatabase = new ApgDatabase(getContext());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -212,7 +214,7 @@ public class ApgProvider extends ContentProvider {
|
|||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
@Override
|
@Override
|
||||||
public String getType(Uri uri) {
|
public String getType(Uri uri) {
|
||||||
final int match = sUriMatcher.match(uri);
|
final int match = mUriMatcher.match(uri);
|
||||||
switch (match) {
|
switch (match) {
|
||||||
case PUBLIC_KEY_RING:
|
case PUBLIC_KEY_RING:
|
||||||
case PUBLIC_KEY_RING_BY_EMAILS:
|
case PUBLIC_KEY_RING_BY_EMAILS:
|
||||||
@ -302,7 +304,7 @@ public class ApgProvider extends ContentProvider {
|
|||||||
projectionMap.put(KeyRingsColumns.MASTER_KEY_ID, Tables.KEY_RINGS + "."
|
projectionMap.put(KeyRingsColumns.MASTER_KEY_ID, Tables.KEY_RINGS + "."
|
||||||
+ KeyRingsColumns.MASTER_KEY_ID);
|
+ KeyRingsColumns.MASTER_KEY_ID);
|
||||||
// only give out keyRing blob when we are using the internal content provider
|
// 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 + "."
|
projectionMap.put(KeyRingsColumns.KEY_RING_DATA, Tables.KEY_RINGS + "."
|
||||||
+ KeyRingsColumns.KEY_RING_DATA);
|
+ KeyRingsColumns.KEY_RING_DATA);
|
||||||
}
|
}
|
||||||
@ -331,7 +333,7 @@ public class ApgProvider extends ContentProvider {
|
|||||||
projectionMap.put(KeysColumns.EXPIRY, KeysColumns.EXPIRY);
|
projectionMap.put(KeysColumns.EXPIRY, KeysColumns.EXPIRY);
|
||||||
projectionMap.put(KeysColumns.KEY_RING_ROW_ID, KeysColumns.KEY_RING_ROW_ID);
|
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
|
// 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.KEY_DATA, KeysColumns.KEY_DATA);
|
||||||
}
|
}
|
||||||
projectionMap.put(KeysColumns.RANK, KeysColumns.RANK);
|
projectionMap.put(KeysColumns.RANK, KeysColumns.RANK);
|
||||||
@ -399,7 +401,7 @@ public class ApgProvider extends ContentProvider {
|
|||||||
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
|
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
|
||||||
SQLiteDatabase db = mApgDatabase.getReadableDatabase();
|
SQLiteDatabase db = mApgDatabase.getReadableDatabase();
|
||||||
|
|
||||||
int match = sUriMatcher.match(uri);
|
int match = mUriMatcher.match(uri);
|
||||||
|
|
||||||
switch (match) {
|
switch (match) {
|
||||||
case PUBLIC_KEY_RING:
|
case PUBLIC_KEY_RING:
|
||||||
@ -579,7 +581,7 @@ public class ApgProvider extends ContentProvider {
|
|||||||
Uri rowUri = null;
|
Uri rowUri = null;
|
||||||
long rowId = -1;
|
long rowId = -1;
|
||||||
try {
|
try {
|
||||||
final int match = sUriMatcher.match(uri);
|
final int match = mUriMatcher.match(uri);
|
||||||
|
|
||||||
switch (match) {
|
switch (match) {
|
||||||
case PUBLIC_KEY_RING:
|
case PUBLIC_KEY_RING:
|
||||||
@ -641,7 +643,7 @@ public class ApgProvider extends ContentProvider {
|
|||||||
final SQLiteDatabase db = mApgDatabase.getWritableDatabase();
|
final SQLiteDatabase db = mApgDatabase.getWritableDatabase();
|
||||||
|
|
||||||
int count;
|
int count;
|
||||||
final int match = sUriMatcher.match(uri);
|
final int match = mUriMatcher.match(uri);
|
||||||
|
|
||||||
String defaultSelection = null;
|
String defaultSelection = null;
|
||||||
switch (match) {
|
switch (match) {
|
||||||
@ -691,7 +693,7 @@ public class ApgProvider extends ContentProvider {
|
|||||||
String defaultSelection = null;
|
String defaultSelection = null;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
try {
|
try {
|
||||||
final int match = sUriMatcher.match(uri);
|
final int match = mUriMatcher.match(uri);
|
||||||
switch (match) {
|
switch (match) {
|
||||||
case PUBLIC_KEY_RING_BY_ROW_ID:
|
case PUBLIC_KEY_RING_BY_ROW_ID:
|
||||||
case SECRET_KEY_RING_BY_ROW_ID:
|
case SECRET_KEY_RING_BY_ROW_ID:
|
||||||
@ -814,7 +816,7 @@ public class ApgProvider extends ContentProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
|
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
|
||||||
int match = sUriMatcher.match(uri);
|
int match = mUriMatcher.match(uri);
|
||||||
if (match != DATA_STREAM) {
|
if (match != DATA_STREAM) {
|
||||||
throw new FileNotFoundException();
|
throw new FileNotFoundException();
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,8 @@ package org.thialfihar.android.apg.provider;
|
|||||||
*/
|
*/
|
||||||
public class ApgProviderExternal extends ApgProvider {
|
public class ApgProviderExternal extends ApgProvider {
|
||||||
|
|
||||||
static {
|
public ApgProviderExternal() {
|
||||||
sInternalProvider = false;
|
mInternalProvider = false;
|
||||||
sUriMatcher = buildUriMatcher(sInternalProvider);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,8 @@ package org.thialfihar.android.apg.provider;
|
|||||||
*/
|
*/
|
||||||
public class ApgProviderInternal extends ApgProvider {
|
public class ApgProviderInternal extends ApgProvider {
|
||||||
|
|
||||||
static {
|
public ApgProviderInternal() {
|
||||||
sInternalProvider = true;
|
mInternalProvider = true;
|
||||||
sUriMatcher = buildUriMatcher(sInternalProvider);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user