Commit 9f044d71 authored by Greyson Parrelli's avatar Greyson Parrelli Committed by Bastien Le Querrec

Create placeholder ContentProviders for database observations.

Required for the API 26 migration.

See https://developer.android.com/about/versions/oreo/android-8.0-changes#ccn

Upstream commit: https://github.com/WhisperSystems/Signal-Android/commit/c3bdc48ee38007a92583739d833b64edc57f8529
parent 4fc5f458
......@@ -368,6 +368,18 @@
android:exported="false"
android:authorities="org.smssecure.provider.smssecure.mms" />
<provider android:name=".database.DatabaseContentProviders$Conversation"
android:authorities="org.smssecure.smssecure.database.conversation"
android:exported="false" />
<provider android:name=".database.DatabaseContentProviders$ConversationList"
android:authorities="org.smssecure.smssecure.database.conversationlist"
android:exported="false" />
<provider android:name=".database.DatabaseContentProviders$Attachment"
android:authorities="org.smssecure.smssecure.database.attachment"
android:exported="false" />
<receiver android:name=".service.RegistrationNotifier"
android:exported="false">
<intent-filter>
......
......@@ -25,9 +25,7 @@ import java.util.Set;
public abstract class Database {
protected static final String ID_WHERE = "_id = ?";
private static final String CONVERSATION_URI = "content://textsecure/thread/";
private static final String CONVERSATION_LIST_URI = "content://textsecure/conversation-list";
protected static final String ID_WHERE = "_id = ?";
protected SQLiteOpenHelper databaseHelper;
protected final Context context;
......@@ -43,19 +41,19 @@ public abstract class Database {
}
protected void notifyConversationListeners(long threadId) {
context.getContentResolver().notifyChange(Uri.parse(CONVERSATION_URI + threadId), null);
context.getContentResolver().notifyChange(DatabaseContentProviders.Conversation.getUriForThread(threadId), null);
}
protected void notifyConversationListListeners() {
context.getContentResolver().notifyChange(Uri.parse(CONVERSATION_LIST_URI), null);
context.getContentResolver().notifyChange(DatabaseContentProviders.ConversationList.CONTENT_URI, null);
}
protected void setNotifyConverationListeners(Cursor cursor, long threadId) {
cursor.setNotificationUri(context.getContentResolver(), Uri.parse(CONVERSATION_URI + threadId));
cursor.setNotificationUri(context.getContentResolver(), DatabaseContentProviders.Conversation.getUriForThread(threadId));
}
protected void setNotifyConverationListListeners(Cursor cursor) {
cursor.setNotificationUri(context.getContentResolver(), Uri.parse(CONVERSATION_LIST_URI));
cursor.setNotificationUri(context.getContentResolver(), DatabaseContentProviders.ConversationList.CONTENT_URI);
}
public void reset(SQLiteOpenHelper databaseHelper) {
......
package org.smssecure.smssecure.database;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
/**
* Starting in API 26, a {@link ContentProvider} needs to be defined for each authority you wish to
* observe changes on. These classes essentially do nothing except exist so Android doesn't complain.
*/
public class DatabaseContentProviders {
public static class ConversationList extends NoopContentProvider {
public static final Uri CONTENT_URI = Uri.parse("content://org.smssecure.smssecure.database.conversationlist");
}
public static class Conversation extends NoopContentProvider {
private static final String CONTENT_URI_STRING = "content://org.smssecure.smssecure.database.conversation/";
public static Uri getUriForThread(long threadId) {
return Uri.parse(CONTENT_URI_STRING + threadId);
}
}
public static class Attachment extends NoopContentProvider {
public static final Uri CONTENT_URI = Uri.parse("content://org.smssecure.smssecure.database.attachment");
}
private static abstract class NoopContentProvider extends ContentProvider {
@Override
public boolean onCreate() {
return false;
}
@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
return null;
}
@Nullable
@Override
public String getType(@NonNull Uri uri) {
return null;
}
@Nullable
@Override
public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
return null;
}
@Override
public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
@Override
public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
return 0;
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment