Update to SQLCipher with true WAL support.

fork-5.53.8
Greyson Parrelli 2021-08-18 10:16:54 -04:00 zatwierdzone przez Alex Hart
rodzic b904de5b50
commit 214e994e90
59 zmienionych plików z 610 dodań i 628 usunięć

Wyświetl plik

@ -23,6 +23,12 @@ repositories {
includeGroupByRegex "com\\.github\\.dmytrodanylyk\\.circular-progress-button\\.*"
}
}
maven {
url "https://raw.github.com/signalapp/maven/master/sqlcipher/release/"
content {
includeGroupByRegex "org\\.signal.*"
}
}
maven { // textdrawable
url 'https://dl.bintray.com/amulyakhare/maven'
content {
@ -485,7 +491,7 @@ dependencies {
implementation 'com.codewaves.stickyheadergrid:stickyheadergrid:0.9.4'
implementation 'com.github.dmytrodanylyk.circular-progress-button:library:1.1.3-S2'
implementation "net.zetetic:android-database-sqlcipher:4.4.3"
implementation 'org.signal:android-database-sqlcipher:4.4.3-S1'
implementation "androidx.sqlite:sqlite:2.1.0"
implementation ('com.googlecode.ez-vcard:ez-vcard:0.9.11') {

Wyświetl plik

@ -2,4 +2,7 @@
-keep class org.sqlite.database.** { *; }
-keep class net.sqlcipher.** { *; }
-dontwarn net.sqlcipher.**
-dontwarn net.sqlcipher.**
-keep class net.zetetic.** { *; }
-dontwarn net.zetetic.**

Wyświetl plik

@ -11,9 +11,9 @@ import androidx.annotation.Nullable;
import com.facebook.flipper.plugins.databases.DatabaseDescriptor;
import com.facebook.flipper.plugins.databases.DatabaseDriver;
import net.sqlcipher.DatabaseUtils;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteStatement;
import net.zetetic.database.DatabaseUtils;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteStatement;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;

Wyświetl plik

@ -13,7 +13,7 @@ import androidx.documentfile.provider.DocumentFile;
import com.annimon.stream.function.Predicate;
import com.google.protobuf.ByteString;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.greenrobot.eventbus.EventBus;
import org.signal.core.util.Conversions;

Wyświetl plik

@ -11,7 +11,7 @@ import android.util.Pair;
import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.greenrobot.eventbus.EventBus;
import org.signal.core.util.Conversions;

Wyświetl plik

@ -212,7 +212,7 @@ public class AttachmentDatabase extends Database {
String selection = STICKER_PACK_ID + " = ?";
String[] args = new String[] { stickerPackId };
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, null, "1")) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, null, "1")) {
return cursor != null && cursor.moveToFirst();
}
}
@ -220,7 +220,7 @@ public class AttachmentDatabase extends Database {
public void setTransferProgressFailed(AttachmentId attachmentId, long mmsId)
throws MmsException
{
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues();
values.put(TRANSFER_STATE, TRANSFER_PROGRESS_FAILED);
@ -230,8 +230,8 @@ public class AttachmentDatabase extends Database {
public @Nullable DatabaseAttachment getAttachment(@NonNull AttachmentId attachmentId)
{
SQLiteDatabase database = databaseHelper.getReadableDatabase();
Cursor cursor = null;
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
Cursor cursor = null;
try {
cursor = database.query(TABLE_NAME, PROJECTION, PART_ID_WHERE, attachmentId.toStrings(), null, null, null);
@ -252,7 +252,7 @@ public class AttachmentDatabase extends Database {
}
public @NonNull List<DatabaseAttachment> getAttachmentsForMessage(long mmsId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<DatabaseAttachment> results = new LinkedList<>();
Cursor cursor = null;
@ -276,7 +276,7 @@ public class AttachmentDatabase extends Database {
return Collections.emptyMap();
}
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
SqlUtil.Query query = SqlUtil.buildCollectionQuery(MMS_ID, mmsIds);
Map<Long, List<DatabaseAttachment>> output = new HashMap<>();
@ -299,7 +299,7 @@ public class AttachmentDatabase extends Database {
}
public boolean hasAttachment(@NonNull AttachmentId id) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = database.query(TABLE_NAME,
new String[]{ROW_ID, UNIQUE_ID},
@ -319,13 +319,13 @@ public class AttachmentDatabase extends Database {
String selection = MMS_ID + " = ? AND (" + DATA + " NOT NULL OR " + TRANSFER_STATE + " != ?)";
String[] args = new String[] { String.valueOf(mmsId), String.valueOf(TRANSFER_PROGRESS_DONE) };
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, "1")) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, "1")) {
return cursor != null && cursor.moveToFirst();
}
}
public @NonNull List<DatabaseAttachment> getPendingAttachments() {
final SQLiteDatabase database = databaseHelper.getReadableDatabase();
final SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
final List<DatabaseAttachment> attachments = new LinkedList<>();
Cursor cursor = null;
@ -345,8 +345,8 @@ public class AttachmentDatabase extends Database {
public void deleteAttachmentsForMessage(long mmsId) {
Log.d(TAG, "[deleteAttachmentsForMessage] mmsId: " + mmsId);
SQLiteDatabase database = databaseHelper.getWritableDatabase();
Cursor cursor = null;
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
Cursor cursor = null;
try {
cursor = database.query(TABLE_NAME, new String[] {DATA, CONTENT_TYPE, ROW_ID, UNIQUE_ID}, MMS_ID + " = ?",
@ -375,10 +375,10 @@ public class AttachmentDatabase extends Database {
* pre-uploaded.
*/
public int deleteAbandonedPreuploadedAttachments() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
String query = MMS_ID + " = ?";
String[] args = new String[] { String.valueOf(PREUPLOAD_MESSAGE_ID) };
int count = 0;
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String query = MMS_ID + " = ?";
String[] args = new String[] { String.valueOf(PREUPLOAD_MESSAGE_ID) };
int count = 0;
try (Cursor cursor = db.query(TABLE_NAME, null, query, args, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
@ -397,8 +397,8 @@ public class AttachmentDatabase extends Database {
public void deleteAttachmentFilesForViewOnceMessage(long mmsId) {
Log.d(TAG, "[deleteAttachmentFilesForViewOnceMessage] mmsId: " + mmsId);
SQLiteDatabase database = databaseHelper.getWritableDatabase();
Cursor cursor = null;
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
Cursor cursor = null;
try {
cursor = database.query(TABLE_NAME, new String[] {DATA, CONTENT_TYPE, ROW_ID, UNIQUE_ID}, MMS_ID + " = ?",
@ -440,7 +440,7 @@ public class AttachmentDatabase extends Database {
public void deleteAttachment(@NonNull AttachmentId id) {
Log.d(TAG, "[deleteAttachment] attachmentId: " + id);
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
try (Cursor cursor = database.query(TABLE_NAME,
new String[]{DATA, CONTENT_TYPE},
@ -464,7 +464,7 @@ public class AttachmentDatabase extends Database {
}
public void trimAllAbandonedAttachments() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String selectAllMmsIds = "SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME;
String where = MMS_ID + " != " + PREUPLOAD_MESSAGE_ID + " AND " + MMS_ID + " NOT IN (" + selectAllMmsIds + ")";
@ -483,7 +483,7 @@ public class AttachmentDatabase extends Database {
filesOnDisk.add(file.getAbsolutePath());
}
try (Cursor cursor = databaseHelper.getReadableDatabase().query(true, TABLE_NAME, new String[] { DATA }, null, null, null, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(true, TABLE_NAME, new String[] { DATA }, null, null, null, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
filesInDb.add(CursorUtil.requireString(cursor, DATA));
}
@ -503,7 +503,7 @@ public class AttachmentDatabase extends Database {
@SuppressWarnings("ResultOfMethodCallIgnored")
void deleteAllAttachments() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, null, null);
FileUtils.deleteDirectoryContents(context.getDir(DIRECTORY, Context.MODE_PRIVATE));
@ -532,7 +532,7 @@ public class AttachmentDatabase extends Database {
if (removableWeakReferences.size() > 0) {
Log.i(TAG, String.format(Locale.US, "[deleteAttachmentOnDisk] Deleting %d weak references for %s", removableWeakReferences.size(), data));
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
int deletedCount = 0;
database.beginTransaction();
try {
@ -568,7 +568,7 @@ public class AttachmentDatabase extends Database {
private @NonNull DataUsageResult getAttachmentFileUsages(@Nullable String data, @NonNull AttachmentId attachmentId) {
if (data == null) return DataUsageResult.NOT_IN_USE;
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String selection = DATA + " = ? AND " + UNIQUE_ID + " != ? AND " + ROW_ID + " != ?";
String[] args = {data, Long.toString(attachmentId.getUniqueId()), Long.toString(attachmentId.getRowId())};
List<AttachmentId> quoteRows = new LinkedList<>();
@ -591,11 +591,11 @@ public class AttachmentDatabase extends Database {
throws MmsException
{
DatabaseAttachment placeholder = getAttachment(attachmentId);
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues();
DataInfo oldInfo = getAttachmentDataFileInfo(attachmentId, DATA);
DataInfo dataInfo = setAttachmentData(inputStream, attachmentId);
File transferFile = getTransferFile(databaseHelper.getReadableDatabase(), attachmentId);
File transferFile = getTransferFile(databaseHelper.getSignalReadableDatabase(), attachmentId);
if (oldInfo != null) {
updateAttachmentDataHash(database, oldInfo.hash, dataInfo);
@ -646,7 +646,7 @@ public class AttachmentDatabase extends Database {
throw new MmsException("Cannot find attachment for source!");
}
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
DataInfo sourceDataInfo = getAttachmentDataFileInfo(sourceId, DATA);
if (sourceDataInfo == null) {
@ -680,11 +680,11 @@ public class AttachmentDatabase extends Database {
ContentValues values = new ContentValues(1);
values.put(CAPTION, caption);
databaseHelper.getWritableDatabase().update(TABLE_NAME, values, PART_ID_WHERE, id.toStrings());
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, values, PART_ID_WHERE, id.toStrings());
}
public void updateDisplayOrder(@NonNull Map<AttachmentId, Integer> orderMap) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -692,7 +692,7 @@ public class AttachmentDatabase extends Database {
ContentValues values = new ContentValues(1);
values.put(DISPLAY_ORDER, entry.getValue());
databaseHelper.getWritableDatabase().update(TABLE_NAME, values, PART_ID_WHERE, entry.getKey().toStrings());
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, values, PART_ID_WHERE, entry.getKey().toStrings());
}
db.setTransactionSuccessful();
@ -703,7 +703,7 @@ public class AttachmentDatabase extends Database {
}
public void updateAttachmentAfterUpload(@NonNull AttachmentId id, @NonNull Attachment attachment, long uploadTimestamp) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
DataInfo dataInfo = getAttachmentDataFileInfo(id, DATA);
ContentValues values = new ContentValues();
@ -744,7 +744,7 @@ public class AttachmentDatabase extends Database {
}
public void updateMessageId(@NonNull Collection<AttachmentId> attachmentIds, long mmsId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -792,7 +792,7 @@ public class AttachmentDatabase extends Database {
boolean onlyModifyThisAttachment)
throws MmsException, IOException
{
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
DataInfo oldDataInfo = getAttachmentDataFileInfo(databaseAttachment.getAttachmentId(), DATA);
if (oldDataInfo == null) {
@ -830,7 +830,7 @@ public class AttachmentDatabase extends Database {
* Returns false if the file is referenced by zero or one attachments.
*/
private boolean fileReferencedByMoreThanOneAttachment(@NonNull File file) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String selection = DATA + " = ?";
String[] args = new String[]{file.getAbsolutePath()};
@ -854,12 +854,12 @@ public class AttachmentDatabase extends Database {
ContentValues contentValues = new ContentValues();
contentValues.put(TRANSFORM_PROPERTIES, transformProperties.serialize());
int updateCount = updateAttachmentAndMatchingHashes(databaseHelper.getWritableDatabase(), attachmentId, dataInfo.hash, contentValues);
int updateCount = updateAttachmentAndMatchingHashes(databaseHelper.getSignalWritableDatabase(), attachmentId, dataInfo.hash, contentValues);
Log.i(TAG, "[updateAttachmentTransformProperties] Updated " + updateCount + " rows.");
}
public @NonNull File getOrCreateTransferFile(@NonNull AttachmentId attachmentId) throws IOException {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
File existing = getTransferFile(db, attachmentId);
if (existing != null) {
@ -923,7 +923,7 @@ public class AttachmentDatabase extends Database {
public void updateAttachmentFileName(@NonNull AttachmentId attachmentId,
@Nullable String fileName)
{
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues(1);
contentValues.put(FILE_NAME, StorageUtil.getCleanFileName(fileName));
@ -933,7 +933,7 @@ public class AttachmentDatabase extends Database {
public void markAttachmentUploaded(long messageId, Attachment attachment) {
ContentValues values = new ContentValues(1);
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
values.put(TRANSFER_STATE, TRANSFER_PROGRESS_DONE);
database.update(TABLE_NAME, values, PART_ID_WHERE, ((DatabaseAttachment)attachment).getAttachmentId().toStrings());
@ -951,7 +951,7 @@ public class AttachmentDatabase extends Database {
public void setTransferState(long messageId, @NonNull AttachmentId attachmentId, int transferState) {
final ContentValues values = new ContentValues(1);
final SQLiteDatabase database = databaseHelper.getWritableDatabase();
final SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
values.put(TRANSFER_STATE, transferState);
database.update(TABLE_NAME, values, PART_ID_WHERE, attachmentId.toStrings());
@ -972,13 +972,13 @@ public class AttachmentDatabase extends Database {
"SELECT DISTINCT " + StickerDatabase.PACK_ID + " FROM " + StickerDatabase.TABLE_NAME +
")";
return databaseHelper.getReadableDatabase().rawQuery(query, null);
return databaseHelper.getSignalReadableDatabase().rawQuery(query, null);
}
public boolean hasStickerAttachments() {
String selection = STICKER_PACK_ID + " NOT NULL";
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, selection, null, null, null, null, "1")) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, selection, null, null, null, null, "1")) {
return cursor != null && cursor.moveToFirst();
}
}
@ -1015,7 +1015,7 @@ public class AttachmentDatabase extends Database {
private @Nullable DataInfo getAttachmentDataFileInfo(@NonNull AttachmentId attachmentId, @NonNull String dataType)
{
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
Cursor cursor = null;
try {
@ -1082,7 +1082,7 @@ public class AttachmentDatabase extends Database {
long length = StreamUtil.copy(digestInputStream, out.second);
String hash = Base64.encodeBytes(digestInputStream.getMessageDigest().digest());
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
Optional<DataInfo> sharedDataInfo = findDuplicateDataFileInfo(database, hash, attachmentId);
if (sharedDataInfo.isPresent()) {
Log.i(TAG, "[setAttachmentData] Duplicate data file found! " + sharedDataInfo.get().file.getAbsolutePath());
@ -1248,7 +1248,7 @@ public class AttachmentDatabase extends Database {
throws MmsException
{
Log.d(TAG, "Inserting attachment for mms id: " + mmsId);
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.beginTransaction();
try {
@ -1343,7 +1343,7 @@ public class AttachmentDatabase extends Database {
String selection = DATA_HASH + " = ?";
String[] args = new String[] { dataHash };
try (Cursor cursor = databaseHelper.getWritableDatabase().query(TABLE_NAME, null, selection, args, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalWritableDatabase().query(TABLE_NAME, null, selection, args, null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
return getAttachments(cursor).get(0);
}
@ -1356,7 +1356,7 @@ public class AttachmentDatabase extends Database {
public void writeAudioHash(@NonNull AttachmentId attachmentId, @Nullable AudioWaveFormData audioWaveForm) {
Log.i(TAG, "updating part audio wave form for #" + attachmentId);
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(1);
if (audioWaveForm != null) {

Wyświetl plik

@ -28,7 +28,7 @@ class ChatColorsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper)
}
fun getById(chatColorsId: ChatColors.Id): ChatColors {
val db = databaseHelper.readableDatabase
val db = databaseHelper.signalReadableDatabase
val projection = arrayOf(ID, CHAT_COLORS)
val args = SqlUtil.buildArgs(chatColorsId.longValue)
@ -51,7 +51,7 @@ class ChatColorsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper)
}
fun getSavedChatColors(): List<ChatColors> {
val db = databaseHelper.readableDatabase
val db = databaseHelper.signalReadableDatabase
val projection = arrayOf(ID, CHAT_COLORS)
val result = mutableListOf<ChatColors>()
@ -69,7 +69,7 @@ class ChatColorsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper)
throw IllegalArgumentException("Bad chat colors to insert.")
}
val db: SQLiteDatabase = databaseHelper.writableDatabase
val db: SQLiteDatabase = databaseHelper.signalWritableDatabase
val values = ContentValues(1).apply {
put(CHAT_COLORS, chatColors.serialize().toByteArray())
}
@ -89,7 +89,7 @@ class ChatColorsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper)
throw IllegalArgumentException("Bad chat colors to update.")
}
val db: SQLiteDatabase = databaseHelper.writableDatabase
val db: SQLiteDatabase = databaseHelper.signalWritableDatabase
val values = ContentValues(1).apply {
put(CHAT_COLORS, chatColors.serialize().toByteArray())
}
@ -115,7 +115,7 @@ class ChatColorsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper)
throw IllegalArgumentException("Cannot delete this chat color")
}
val db: SQLiteDatabase = databaseHelper.writableDatabase
val db: SQLiteDatabase = databaseHelper.signalWritableDatabase
db.delete(TABLE_NAME, ID_WHERE, SqlUtil.buildArgs(chatColors.id.longValue))
if (SignalStore.chatColorsValues().chatColors?.id == chatColors.id) {

Wyświetl plik

@ -20,7 +20,7 @@ import android.content.Context;
import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.thoughtcrime.securesms.contacts.ContactsDatabase;
import org.thoughtcrime.securesms.crypto.AttachmentSecret;
@ -206,8 +206,8 @@ public class DatabaseFactory {
return getInstance(context).avatarPickerDatabase;
}
public static SQLiteDatabase getBackupDatabase(Context context) {
return getInstance(context).databaseHelper.getReadableDatabase().getSqlCipherDatabase();
public static net.zetetic.database.sqlcipher.SQLiteDatabase getBackupDatabase(Context context) {
return getInstance(context).databaseHelper.getRawReadableDatabase();
}
public static void upgradeRestored(Context context, SQLiteDatabase database){
@ -217,11 +217,11 @@ public class DatabaseFactory {
getInstance(context).sms.deleteAbandonedMessages();
getInstance(context).mms.deleteAbandonedMessages();
getInstance(context).mms.trimEntriesForExpiredMessages();
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS key_value");
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS megaphone");
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS job_spec");
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS constraint_spec");
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS dependency_spec");
getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS key_value");
getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS megaphone");
getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS job_spec");
getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS constraint_spec");
getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS dependency_spec");
instance.databaseHelper.close();
instance = null;
@ -229,7 +229,7 @@ public class DatabaseFactory {
}
public static boolean inTransaction(Context context) {
return getInstance(context).databaseHelper.getWritableDatabase().inTransaction();
return getInstance(context).databaseHelper.getSignalWritableDatabase().inTransaction();
}
private DatabaseFactory(@NonNull Context context) {
@ -273,7 +273,7 @@ public class DatabaseFactory {
public void onApplicationLevelUpgrade(@NonNull Context context, @NonNull MasterSecret masterSecret,
int fromVersion, LegacyMigrationJob.DatabaseUpgradeListener listener)
{
databaseHelper.getWritableDatabase();
databaseHelper.getSignalWritableDatabase();
ClassicOpenHelper legacyOpenHelper = null;
@ -289,20 +289,20 @@ public class DatabaseFactory {
SQLCipherMigrationHelper.migrateCiphertext(context, masterSecret,
legacyOpenHelper.getWritableDatabase(),
databaseHelper.getWritableDatabase().getSqlCipherDatabase(),
databaseHelper.getRawWritableDatabase(),
listener);
}
}
public void triggerDatabaseAccess() {
databaseHelper.getWritableDatabase();
databaseHelper.getSignalWritableDatabase();
}
public SQLiteDatabase getRawDatabase() {
return databaseHelper.getWritableDatabase().getSqlCipherDatabase();
public net.zetetic.database.sqlcipher.SQLiteDatabase getRawDatabase() {
return databaseHelper.getRawWritableDatabase();
}
public boolean hasTable(String table) {
return SqlUtil.tableExists(databaseHelper.getReadableDatabase().getSqlCipherDatabase(), table);
return SqlUtil.tableExists(databaseHelper.getRawReadableDatabase(), table);
}
}

Wyświetl plik

@ -40,7 +40,7 @@ public class DraftDatabase extends Database {
}
public void replaceDrafts(long threadId, List<Draft> drafts) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
try {
db.beginTransaction();
@ -64,13 +64,13 @@ public class DraftDatabase extends Database {
}
public void clearDrafts(long threadId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
int deletedRowCount = db.delete(TABLE_NAME, THREAD_ID + " = ?", SqlUtil.buildArgs(threadId));
Log.d(TAG, "[clearDrafts] Deleted " + deletedRowCount + " rows for thread " + threadId);
}
void clearDrafts(Set<Long> threadIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
StringBuilder where = new StringBuilder();
List<String> arguments = new LinkedList<>();
@ -86,12 +86,12 @@ public class DraftDatabase extends Database {
}
void clearAllDrafts() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null);
}
public Drafts getDrafts(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Drafts results = new Drafts();
try (Cursor cursor = db.query(TABLE_NAME, null, THREAD_ID + " = ?", new String[] {threadId+""}, null, null, null)) {
@ -107,7 +107,7 @@ public class DraftDatabase extends Database {
}
public @NonNull Drafts getAllVoiceNoteDrafts() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Drafts results = new Drafts();
String where = DRAFT_TYPE + " = ?";
String[] args = SqlUtil.buildArgs(Draft.VOICE_NOTE);

Wyświetl plik

@ -7,8 +7,6 @@ import android.text.TextUtils;
import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.database.model.EmojiSearchData;
import org.thoughtcrime.securesms.util.CursorUtil;
@ -17,7 +15,6 @@ import org.thoughtcrime.securesms.util.SqlUtil;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
/**
* Contains all info necessary for full-text search of emoji tags.
@ -40,7 +37,7 @@ public class EmojiSearchDatabase extends Database {
* @return A list of emoji that are related to the search term, ordered by relevance.
*/
public @NonNull List<String> query(@NonNull String query, int limit) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String matchString = FtsUtil.createPrefixMatchString(query);
List<String> results = new LinkedList<>();
@ -65,7 +62,7 @@ public class EmojiSearchDatabase extends Database {
* Deletes the content of the current search index and replaces it with the new one.
*/
public void setSearchIndex(@NonNull List<EmojiSearchData> searchIndex) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
db.beginTransaction();
try {

Wyświetl plik

@ -33,7 +33,6 @@ import org.thoughtcrime.securesms.groups.GroupMigrationMembershipChange;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.CursorUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.SetUtil;
import org.thoughtcrime.securesms.util.SqlUtil;
import org.thoughtcrime.securesms.util.Util;
@ -57,7 +56,6 @@ import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collector;
import java.util.stream.Collectors;
public final class GroupDatabase extends Database {
@ -130,7 +128,7 @@ private static final String[] GROUP_PROJECTION = {
}
public Optional<GroupRecord> getGroup(RecipientId recipientId) {
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, RECIPIENT_ID + " = ?", new String[] {recipientId.serialize()}, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, RECIPIENT_ID + " = ?", new String[] { recipientId.serialize()}, null, null, null)) {
if (cursor != null && cursor.moveToNext()) {
return getGroup(cursor);
}
@ -140,9 +138,9 @@ private static final String[] GROUP_PROJECTION = {
}
public Optional<GroupRecord> getGroup(@NonNull GroupId groupId) {
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
new String[] {groupId.toString()},
null, null, null))
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
new String[] {groupId.toString()},
null, null, null))
{
if (cursor != null && cursor.moveToNext()) {
return getGroup(cursor);
@ -153,9 +151,9 @@ private static final String[] GROUP_PROJECTION = {
}
public boolean groupExists(@NonNull GroupId groupId) {
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
new String[] {groupId.toString()},
null, null, null))
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
new String[] {groupId.toString()},
null, null, null))
{
return cursor.moveToNext();
}
@ -165,7 +163,7 @@ private static final String[] GROUP_PROJECTION = {
* @return A gv1 group whose expected v2 ID matches the one provided.
*/
public Optional<GroupRecord> getGroupV1ByExpectedV2(@NonNull GroupId.V2 gv2Id) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.query(TABLE_NAME, GROUP_PROJECTION, EXPECTED_V2_ID + " = ?", SqlUtil.buildArgs(gv2Id), null, null, null)) {
if (cursor.moveToFirst()) {
return getGroup(cursor);
@ -176,7 +174,7 @@ private static final String[] GROUP_PROJECTION = {
}
public Optional<GroupRecord> getGroupByDistributionId(@NonNull DistributionId distributionId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(distributionId);
@ -207,7 +205,7 @@ private static final String[] GROUP_PROJECTION = {
ContentValues values = new ContentValues();
values.put(UNMIGRATED_V1_MEMBERS, newUnmigrated.isEmpty() ? null : RecipientId.toSerializedList(newUnmigrated));
databaseHelper.getWritableDatabase().update(TABLE_NAME, values, GROUP_ID + " = ?", SqlUtil.buildArgs(id));
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, values, GROUP_ID + " = ?", SqlUtil.buildArgs(id));
Recipient.live(Recipient.externalGroupExact(context, id).getId()).refresh();
}
@ -221,9 +219,9 @@ private static final String[] GROUP_PROJECTION = {
* @return local db group revision or -1 if not present.
*/
public int getGroupV2Revision(@NonNull GroupId.V2 groupId) {
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
new String[] {groupId.toString()},
null, null, null))
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
new String[] {groupId.toString()},
null, null, null))
{
if (cursor != null && cursor.moveToNext()) {
return cursor.getInt(cursor.getColumnIndexOrThrow(V2_REVISION));
@ -281,17 +279,17 @@ private static final String[] GROUP_PROJECTION = {
query += " AND " + MMS + " = 0";
}
Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, query, queryArgs, null, null, TITLE + " COLLATE NOCASE ASC");
Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, query, queryArgs, null, null, TITLE + " COLLATE NOCASE ASC");
return new Reader(cursor);
}
public @NonNull DistributionId getOrCreateDistributionId(@NonNull GroupId.V2 groupId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = GROUP_ID + " = ?";
String[] args = SqlUtil.buildArgs(groupId);
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, new String[] { DISTRIBUTION_ID }, query, args, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, new String[] { DISTRIBUTION_ID }, query, args, null, null, null)) {
if (cursor.moveToFirst()) {
Optional<String> serialized = CursorUtil.getString(cursor, DISTRIBUTION_ID);
@ -321,10 +319,10 @@ private static final String[] GROUP_PROJECTION = {
public GroupId.Mms getOrCreateMmsGroupForMembers(List<RecipientId> members) {
Collections.sort(members);
Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, new String[] {GROUP_ID},
Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, new String[] { GROUP_ID},
MEMBERS + " = ? AND " + MMS + " = ?",
new String[] {RecipientId.toSerializedList(members), "1"},
null, null, null);
new String[] {RecipientId.toSerializedList(members), "1"},
null, null, null);
try {
if (cursor != null && cursor.moveToNext()) {
return GroupId.parseOrThrow(cursor.getString(cursor.getColumnIndexOrThrow(GROUP_ID)))
@ -357,7 +355,7 @@ private static final String[] GROUP_PROJECTION = {
@WorkerThread
public @NonNull List<GroupRecord> getGroupsContainingMember(@NonNull RecipientId recipientId, boolean pushOnly, boolean includeInactive) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String table = TABLE_NAME + " INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + TABLE_NAME + "." + RECIPIENT_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID;
String query = MEMBERS + " LIKE ?";
String[] args = SqlUtil.buildArgs("%" + recipientId.serialize() + "%");
@ -390,12 +388,12 @@ private static final String[] GROUP_PROJECTION = {
public Reader getGroups() {
@SuppressLint("Recycle")
Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, null, null, null, null, null);
Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, null, null, null, null, null);
return new Reader(cursor);
}
public int getActiveGroupCount() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] cols = { "COUNT(*)" };
String query = ACTIVE + " = 1";
@ -472,7 +470,7 @@ private static final String[] GROUP_PROJECTION = {
Log.w(TAG, "There already exists a V1 group that should be migrated into this group. But if the recipient already exists, there's not much we can do here.");
}
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -566,7 +564,7 @@ private static final String[] GROUP_PROJECTION = {
}
}
databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, contentValues);
databaseHelper.getSignalWritableDatabase().insert(TABLE_NAME, null, contentValues);
if (groupState != null && groupState.hasDisappearingMessagesTimer()) {
recipientDatabase.setExpireMessages(groupRecipientId, groupState.getDisappearingMessagesTimer().getDuration());
@ -597,7 +595,7 @@ private static final String[] GROUP_PROJECTION = {
contentValues.put(AVATAR_ID, 0);
}
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues,
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues,
GROUP_ID + " = ?",
new String[] {groupId.toString()});
@ -617,7 +615,7 @@ private static final String[] GROUP_PROJECTION = {
@NonNull GroupId.V1 groupIdV1,
@NonNull DecryptedGroup decryptedGroup)
{
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
GroupId.V2 groupIdV2 = groupIdV1.deriveV2MigrationGroupId();
GroupMasterKey groupMasterKey = groupIdV1.deriveV2MigrationMasterKey();
@ -713,7 +711,7 @@ private static final String[] GROUP_PROJECTION = {
}
}
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues,
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues,
GROUP_ID + " = ?",
new String[]{ groupId.toString() });
@ -745,7 +743,7 @@ private static final String[] GROUP_PROJECTION = {
ContentValues contentValues = new ContentValues();
contentValues.put(TITLE, title);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?",
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?",
new String[] {groupId.toString()});
RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
@ -759,7 +757,7 @@ private static final String[] GROUP_PROJECTION = {
ContentValues contentValues = new ContentValues(1);
contentValues.put(AVATAR_ID, hasAvatar ? Math.abs(new SecureRandom().nextLong()) : 0);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?",
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?",
new String[] {groupId.toString()});
RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
@ -773,7 +771,7 @@ private static final String[] GROUP_PROJECTION = {
contents.put(MEMBERS, RecipientId.toSerializedList(members));
contents.put(ACTIVE, 1);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?",
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?",
new String[] {groupId.toString()});
RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
@ -787,7 +785,7 @@ private static final String[] GROUP_PROJECTION = {
ContentValues contents = new ContentValues();
contents.put(MEMBERS, RecipientId.toSerializedList(currentMembers));
databaseHelper.getWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?",
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?",
new String[] {groupId.toString()});
RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
@ -805,10 +803,10 @@ private static final String[] GROUP_PROJECTION = {
Cursor cursor = null;
try {
cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, new String[] {MEMBERS},
cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, new String[] { MEMBERS},
GROUP_ID + " = ?",
new String[] {groupId.toString()},
null, null, null);
new String[] {groupId.toString()},
null, null, null);
if (cursor != null && cursor.moveToFirst()) {
String serializedMembers = cursor.getString(cursor.getColumnIndexOrThrow(MEMBERS));
@ -828,7 +826,7 @@ private static final String[] GROUP_PROJECTION = {
}
public void setActive(@NonNull GroupId groupId, boolean active) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues();
values.put(ACTIVE, active ? 1 : 0);
database.update(TABLE_NAME, values, GROUP_ID + " = ?", new String[] {groupId.toString()});
@ -836,7 +834,7 @@ private static final String[] GROUP_PROJECTION = {
@WorkerThread
public boolean isCurrentMember(@NonNull GroupId.Push groupId, @NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = database.query(TABLE_NAME, new String[] {MEMBERS},
GROUP_ID + " = ?", new String[] {groupId.toString()},
@ -876,7 +874,7 @@ private static final String[] GROUP_PROJECTION = {
public @NonNull List<GroupId.V2> getAllGroupV2Ids() {
List<GroupId.V2> result = new LinkedList<>();
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, new String[]{ GROUP_ID }, null, null, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, new String[]{ GROUP_ID }, null, null, null, null, null)) {
while (cursor.moveToNext()) {
GroupId groupId = GroupId.parseOrThrow(cursor.getString(cursor.getColumnIndexOrThrow(GROUP_ID)));
if (groupId.isV2()) {
@ -898,7 +896,7 @@ private static final String[] GROUP_PROJECTION = {
String[] projection = new String[]{ GROUP_ID, EXPECTED_V2_ID };
String query = EXPECTED_V2_ID + " NOT NULL";
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, projection, query, null, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, projection, query, null, null, null, null)) {
while (cursor.moveToNext()) {
GroupId.V1 groupId = GroupId.parseOrThrow(cursor.getString(cursor.getColumnIndexOrThrow(GROUP_ID))).requireV1();
GroupId.V2 expectedId = GroupId.parseOrThrow(cursor.getString(cursor.getColumnIndexOrThrow(EXPECTED_V2_ID))).requireV2();

Wyświetl plik

@ -11,7 +11,6 @@ import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.SqlUtil;
import org.whispersystems.libsignal.util.Pair;
import org.whispersystems.libsignal.util.guava.Optional;
import java.util.Collection;
import java.util.LinkedList;
@ -48,7 +47,7 @@ public class GroupReceiptDatabase extends Database {
}
public void insert(Collection<RecipientId> recipientIds, long mmsId, int status, long timestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -68,7 +67,7 @@ public class GroupReceiptDatabase extends Database {
}
public void update(@NonNull RecipientId recipientId, long mmsId, int status, long timestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(2);
values.put(STATUS, status);
values.put(TIMESTAMP, timestamp);
@ -78,7 +77,7 @@ public class GroupReceiptDatabase extends Database {
}
public void setUnidentified(Collection<Pair<RecipientId, Boolean>> results, long mmsId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -98,7 +97,7 @@ public class GroupReceiptDatabase extends Database {
}
public @NonNull List<GroupReceiptInfo> getGroupReceiptInfo(long mmsId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<GroupReceiptInfo> results = new LinkedList<>();
try (Cursor cursor = db.query(TABLE_NAME, null, MMS_ID + " = ?", new String[] {String.valueOf(mmsId)}, null, null, null)) {
@ -114,7 +113,7 @@ public class GroupReceiptDatabase extends Database {
}
public @Nullable GroupReceiptInfo getGroupReceiptInfo(long mmsId, @NonNull RecipientId recipientId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = MMS_ID + " = ? AND " + RECIPIENT_ID + " = ?";
String[] args = SqlUtil.buildArgs(mmsId, recipientId);
@ -131,17 +130,17 @@ public class GroupReceiptDatabase extends Database {
}
void deleteRowsForMessage(long mmsId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, MMS_ID + " = ?", new String[] {String.valueOf(mmsId)});
}
void deleteAbandonedRows() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, MMS_ID + " NOT IN (SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME + ")", null);
}
void deleteAllRows() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null);
}

Wyświetl plik

@ -85,7 +85,7 @@ public class IdentityDatabase extends Database {
}
public Cursor getIdentities() {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
return database.query(TABLE_NAME, null, null, null, null, null, null);
}
@ -95,7 +95,7 @@ public class IdentityDatabase extends Database {
}
public Optional<IdentityRecord> getIdentity(@NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
Cursor cursor = null;
try {
@ -116,7 +116,7 @@ public class IdentityDatabase extends Database {
public @NonNull IdentityRecordList getIdentities(@NonNull List<Recipient> recipients) {
List<IdentityRecord> records = new LinkedList<>();
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String[] selectionArgs = new String[1];
database.beginTransaction();
@ -147,7 +147,7 @@ public class IdentityDatabase extends Database {
}
public void setApproval(@NonNull RecipientId recipientId, boolean nonBlockingApproval) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues(2);
contentValues.put(NONBLOCKING_APPROVAL, nonBlockingApproval);
@ -158,7 +158,7 @@ public class IdentityDatabase extends Database {
}
public void setVerified(@NonNull RecipientId recipientId, IdentityKey identityKey, VerifiedStatus verifiedStatus) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues(1);
contentValues.put(VERIFIED, verifiedStatus.toInt());
@ -190,7 +190,7 @@ public class IdentityDatabase extends Database {
}
private boolean hasMatchingKey(@NonNull RecipientId id, IdentityKey identityKey) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = RECIPIENT_ID + " = ? AND " + IDENTITY_KEY + " = ?";
String[] args = new String[]{id.serialize(), Base64.encodeBytes(identityKey.serialize())};
@ -200,7 +200,7 @@ public class IdentityDatabase extends Database {
}
private boolean hasMatchingStatus(@NonNull RecipientId id, IdentityKey identityKey, VerifiedStatus verifiedStatus) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = RECIPIENT_ID + " = ? AND " + IDENTITY_KEY + " = ? AND " + VERIFIED + " = ?";
String[] args = new String[]{id.serialize(), Base64.encodeBytes(identityKey.serialize()), String.valueOf(verifiedStatus.toInt())};
@ -224,7 +224,7 @@ public class IdentityDatabase extends Database {
private void saveIdentityInternal(@NonNull RecipientId recipientId, IdentityKey identityKey, VerifiedStatus verifiedStatus,
boolean firstUse, long timestamp, boolean nonBlockingApproval)
{
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String identityKeyString = Base64.encodeBytes(identityKey.serialize());
ContentValues contentValues = new ContentValues();

Wyświetl plik

@ -2,14 +2,16 @@ package org.thoughtcrime.securesms.database;
import android.app.Application;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import net.sqlcipher.database.SQLiteOpenHelper;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabaseHook;
import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
@ -87,8 +89,7 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
private static volatile JobDatabase instance;
private final Application application;
private final DatabaseSecret databaseSecret;
private final Application application;
public static @NonNull JobDatabase getInstance(@NonNull Application context) {
if (instance == null) {
@ -103,10 +104,9 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
}
public JobDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) {
super(application, DATABASE_NAME, null, DATABASE_VERSION, new SqlCipherDatabaseHook(), new SqlCipherErrorHandler(DATABASE_NAME));
super(application, DATABASE_NAME, databaseSecret.asString(), null, DATABASE_VERSION, 0, new SqlCipherErrorHandler(DATABASE_NAME), new SqlCipherDatabaseHook());
this.application = application;
this.databaseSecret = databaseSecret;
this.application = application;
}
@Override
@ -142,6 +142,9 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
public void onOpen(SQLiteDatabase db) {
Log.i(TAG, "onOpen()");
db.enableWriteAheadLogging();
db.setForeignKeyConstraintsEnabled(true);
SignalExecutors.BOUNDED.execute(() -> {
dropTableIfPresent("job_spec");
dropTableIfPresent("constraint_spec");
@ -366,14 +369,6 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
false);
}
private @NonNull SQLiteDatabase getReadableDatabase() {
return getWritableDatabase(databaseSecret.asString());
}
private @NonNull SQLiteDatabase getWritableDatabase() {
return getWritableDatabase(databaseSecret.asString());
}
@Override
public @NonNull SQLiteDatabase getSqlCipherDatabase() {
return getWritableDatabase();
@ -382,7 +377,7 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
private void dropTableIfPresent(@NonNull String table) {
if (DatabaseFactory.getInstance(application).hasTable(table)) {
Log.i(TAG, "Dropping original " + table + " table from the main database.");
DatabaseFactory.getInstance(application).getRawDatabase().rawExecSQL("DROP TABLE " + table);
DatabaseFactory.getInstance(application).getRawDatabase().execSQL("DROP TABLE " + table);
}
}

Wyświetl plik

@ -6,9 +6,9 @@ import android.database.Cursor;
import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteDatabaseHook;
import net.sqlcipher.database.SQLiteOpenHelper;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabaseHook;
import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
@ -47,8 +47,7 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase
private static volatile KeyValueDatabase instance;
private final Application application;
private final DatabaseSecret databaseSecret;
private final Application application;
public static @NonNull KeyValueDatabase getInstance(@NonNull Application context) {
if (instance == null) {
@ -63,10 +62,9 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase
}
private KeyValueDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) {
super(application, DATABASE_NAME, null, DATABASE_VERSION, new SqlCipherDatabaseHook(), new SqlCipherErrorHandler(DATABASE_NAME));
super(application, DATABASE_NAME, databaseSecret.asString(), null, DATABASE_VERSION, 0,new SqlCipherErrorHandler(DATABASE_NAME), new SqlCipherDatabaseHook());
this.application = application;
this.databaseSecret = databaseSecret;
this.application = application;
}
@Override
@ -90,10 +88,13 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase
public void onOpen(SQLiteDatabase db) {
Log.i(TAG, "onOpen()");
db.enableWriteAheadLogging();
db.setForeignKeyConstraintsEnabled(true);
SignalExecutors.BOUNDED.execute(() -> {
if (DatabaseFactory.getInstance(application).hasTable("key_value")) {
Log.i(TAG, "Dropping original key_value table from the main database.");
DatabaseFactory.getInstance(application).getRawDatabase().rawExecSQL("DROP TABLE key_value");
DatabaseFactory.getInstance(application).getRawDatabase().execSQL("DROP TABLE key_value");
}
});
}
@ -181,14 +182,6 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase
}
}
private @NonNull SQLiteDatabase getReadableDatabase() {
return getReadableDatabase(databaseSecret.asString());
}
private @NonNull SQLiteDatabase getWritableDatabase() {
return getWritableDatabase(databaseSecret.asString());
}
@Override
public @NonNull SQLiteDatabase getSqlCipherDatabase() {
return getWritableDatabase();

Wyświetl plik

@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.database
import android.annotation.SuppressLint
import android.app.Application
import android.content.ContentValues
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SQLiteOpenHelper
import net.zetetic.database.sqlcipher.SQLiteDatabase
import net.zetetic.database.sqlcipher.SQLiteOpenHelper
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.crypto.DatabaseSecret
import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider
@ -29,10 +29,12 @@ class LocalMetricsDatabase private constructor(
) : SQLiteOpenHelper(
application,
DATABASE_NAME,
databaseSecret.asString(),
null,
DATABASE_VERSION,
SqlCipherDatabaseHook(),
SqlCipherErrorHandler(DATABASE_NAME)
0,
SqlCipherErrorHandler(DATABASE_NAME),
SqlCipherDatabaseHook()
),
SignalDatabase {
@ -107,7 +109,12 @@ class LocalMetricsDatabase private constructor(
db.execSQL(EventTotals.CREATE_VIEW)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
}
override fun onOpen(db: SQLiteDatabase) {
db.enableWriteAheadLogging()
db.setForeignKeyConstraintsEnabled(true)
}
override fun getSqlCipherDatabase(): SQLiteDatabase {
@ -233,12 +240,6 @@ class LocalMetricsDatabase private constructor(
}
}
private val readableDatabase: SQLiteDatabase
get() = getReadableDatabase(databaseSecret.asString())
private val writableDatabase: SQLiteDatabase
get() = getWritableDatabase(databaseSecret.asString())
data class EventMetrics(
val name: String,
val count: Long,

Wyświetl plik

@ -4,8 +4,8 @@ import android.annotation.SuppressLint
import android.app.Application
import android.content.ContentValues
import android.database.Cursor
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SQLiteOpenHelper
import net.zetetic.database.sqlcipher.SQLiteDatabase
import net.zetetic.database.sqlcipher.SQLiteOpenHelper
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.crypto.DatabaseSecret
import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider
@ -32,10 +32,12 @@ class LogDatabase private constructor(
) : SQLiteOpenHelper(
application,
DATABASE_NAME,
databaseSecret.asString(),
null,
DATABASE_VERSION,
SqlCipherDatabaseHook(),
SqlCipherErrorHandler(DATABASE_NAME)
0,
SqlCipherErrorHandler(DATABASE_NAME),
SqlCipherDatabaseHook()
),
SignalDatabase {
@ -106,6 +108,11 @@ class LogDatabase private constructor(
}
}
override fun onOpen(db: SQLiteDatabase) {
db.enableWriteAheadLogging()
db.setForeignKeyConstraintsEnabled(true)
}
override fun getSqlCipherDatabase(): SQLiteDatabase {
return writableDatabase
}
@ -222,12 +229,6 @@ class LogDatabase private constructor(
}
}
private val readableDatabase: SQLiteDatabase
get() = getReadableDatabase(databaseSecret.asString())
private val writableDatabase: SQLiteDatabase
get() = getWritableDatabase(databaseSecret.asString())
interface Reader : Iterator<String>, Closeable
class CursorReader(private val cursor: Cursor) : Reader {

Wyświetl plik

@ -91,7 +91,7 @@ public class MediaDatabase extends Database {
}
public @NonNull Cursor getGalleryMediaForThread(long threadId, @NonNull Sorting sorting, boolean listenToAllThreads) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = sorting.applyToQuery(applyEqualityOperator(threadId, GALLERY_MEDIA_QUERY));
String[] args = {threadId + ""};
Cursor cursor = database.rawQuery(query, args);
@ -104,7 +104,7 @@ public class MediaDatabase extends Database {
}
public @NonNull Cursor getDocumentMediaForThread(long threadId, @NonNull Sorting sorting) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = sorting.applyToQuery(applyEqualityOperator(threadId, DOCUMENT_MEDIA_QUERY));
String[] args = {threadId + ""};
Cursor cursor = database.rawQuery(query, args);
@ -113,7 +113,7 @@ public class MediaDatabase extends Database {
}
public @NonNull Cursor getAudioMediaForThread(long threadId, @NonNull Sorting sorting) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = sorting.applyToQuery(applyEqualityOperator(threadId, AUDIO_MEDIA_QUERY));
String[] args = {threadId + ""};
Cursor cursor = database.rawQuery(query, args);
@ -122,7 +122,7 @@ public class MediaDatabase extends Database {
}
public @NonNull Cursor getAllMediaForThread(long threadId, @NonNull Sorting sorting) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = sorting.applyToQuery(applyEqualityOperator(threadId, ALL_MEDIA_QUERY));
String[] args = {threadId + ""};
Cursor cursor = database.rawQuery(query, args);
@ -144,7 +144,7 @@ public class MediaDatabase extends Database {
public StorageBreakdown getStorageBreakdown() {
StorageBreakdown storageBreakdown = new StorageBreakdown();
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = database.rawQuery(UNIQUE_MEDIA_QUERY, new String[0])) {
int sizeColumn = cursor.getColumnIndexOrThrow(AttachmentDatabase.SIZE);

Wyświetl plik

@ -6,8 +6,8 @@ import android.database.Cursor;
import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
@ -50,8 +50,7 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas
private static volatile MegaphoneDatabase instance;
private final Application application;
private final DatabaseSecret databaseSecret;
private final Application application;
public static @NonNull MegaphoneDatabase getInstance(@NonNull Application context) {
if (instance == null) {
@ -66,10 +65,9 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas
}
public MegaphoneDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) {
super(application, DATABASE_NAME, null, DATABASE_VERSION, new SqlCipherDatabaseHook(), new SqlCipherErrorHandler(DATABASE_NAME));
super(application, DATABASE_NAME, databaseSecret.asString(), null, DATABASE_VERSION, 0, new SqlCipherErrorHandler(DATABASE_NAME), new SqlCipherDatabaseHook());
this.application = application;
this.databaseSecret = databaseSecret;
this.application = application;
}
@Override
@ -93,10 +91,13 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas
public void onOpen(SQLiteDatabase db) {
Log.i(TAG, "onOpen()");
db.enableWriteAheadLogging();
db.setForeignKeyConstraintsEnabled(true);
SignalExecutors.BOUNDED.execute(() -> {
if (DatabaseFactory.getInstance(application).hasTable("megaphone")) {
Log.i(TAG, "Dropping original megaphone table from the main database.");
DatabaseFactory.getInstance(application).getRawDatabase().rawExecSQL("DROP TABLE megaphone");
DatabaseFactory.getInstance(application).getRawDatabase().execSQL("DROP TABLE megaphone");
}
});
}
@ -197,10 +198,6 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas
getWritableDatabase().delete(TABLE_NAME, query, args);
}
private @NonNull SQLiteDatabase getWritableDatabase() {
return getWritableDatabase(databaseSecret.asString());
}
@Override
public @NonNull SQLiteDatabase getSqlCipherDatabase() {
return getWritableDatabase();

Wyświetl plik

@ -50,7 +50,7 @@ public class MentionDatabase extends Database {
}
public void insert(long threadId, long messageId, @NonNull Collection<Mention> mentions) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -71,7 +71,7 @@ public class MentionDatabase extends Database {
}
public @NonNull List<Mention> getMentionsForMessage(long messageId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<Mention> mentions = new LinkedList<>();
try (Cursor cursor = db.query(TABLE_NAME, null, MESSAGE_ID + " = ?", SqlUtil.buildArgs(messageId), null, null, null)) {
@ -86,7 +86,7 @@ public class MentionDatabase extends Database {
}
public @NonNull Map<Long, List<Mention>> getMentionsForMessages(@NonNull Collection<Long> messageIds) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String ids = TextUtils.join(",", messageIds);
try (Cursor cursor = db.query(TABLE_NAME, null, MESSAGE_ID + " IN (" + ids + ")", null, null, null, null)) {
@ -99,7 +99,7 @@ public class MentionDatabase extends Database {
}
public @NonNull Map<Long, List<Mention>> getMentionsContainingRecipients(@NonNull Collection<RecipientId> recipientIds, long threadId, long limit) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String ids = TextUtils.join(",", Stream.of(recipientIds).map(RecipientId::serialize).toList());
String where = " WHERE " + RECIPIENT_ID + " IN (" + ids + ")";
@ -124,21 +124,21 @@ public class MentionDatabase extends Database {
}
void deleteMentionsForMessage(long messageId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = MESSAGE_ID + " = ?";
db.delete(TABLE_NAME, where, SqlUtil.buildArgs(messageId));
}
void deleteAbandonedMentions() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = MESSAGE_ID + " NOT IN (SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME + ") OR " + THREAD_ID + " NOT IN (SELECT " + ThreadDatabase.ID + " FROM " + ThreadDatabase.TABLE_NAME + ")";
db.delete(TABLE_NAME, where, null);
}
void deleteAllMentions() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null);
}

Wyświetl plik

@ -12,7 +12,7 @@ import com.annimon.stream.Stream;
import com.google.android.mms.pdu_alt.NotificationInd;
import com.google.protobuf.InvalidProtocolBufferException;
import net.sqlcipher.database.SQLiteStatement;
import net.zetetic.database.sqlcipher.SQLiteStatement;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.documents.Document;
@ -197,7 +197,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
final int getInsecureMessagesSentForThread(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[]{"COUNT(*)"};
String query = THREAD_ID + " = ? AND " + getOutgoingInsecureMessageClause() + " AND " + getDateSentColumnName() + " > ?";
String[] args = new String[]{String.valueOf(threadId), String.valueOf(System.currentTimeMillis() - InsightsConstants.PERIOD_IN_MILLIS)};
@ -220,7 +220,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
final int getSecureMessageCount(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[] {"COUNT(*)"};
String query = getSecureMessageClause() + "AND " + MmsSmsColumns.THREAD_ID + " = ?";
String[] args = new String[]{String.valueOf(threadId)};
@ -235,7 +235,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
final int getOutgoingSecureMessageCount(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[] {"COUNT(*)"};
String query = getOutgoingSecureMessageClause() + "AND " + MmsSmsColumns.THREAD_ID + " = ? AND" + "(" + getTypeField() + " & " + Types.GROUP_QUIT_BIT + " = 0)";
String[] args = new String[]{String.valueOf(threadId)};
@ -251,7 +251,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
private int getMessageCountForRecipientsAndType(String typeClause) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[] {"COUNT(*)"};
String query = typeClause + " AND " + getDateSentColumnName() + " > ?";
String[] args = new String[]{String.valueOf(System.currentTimeMillis() - InsightsConstants.PERIOD_IN_MILLIS)};
@ -282,7 +282,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
public void setReactionsSeen(long threadId, long sinceTimestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues();
String whereClause = THREAD_ID + " = ? AND " + REACTIONS_UNREAD + " = ?";
String[] whereArgs = new String[]{String.valueOf(threadId), "1"};
@ -298,7 +298,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
public void setAllReactionsSeen() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues();
String query = REACTIONS_UNREAD + " != ?";
String[] args = new String[] { "0" };
@ -310,7 +310,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
public void addReaction(long messageId, @NonNull ReactionRecord reaction) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
@ -340,7 +340,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
public void deleteReaction(long messageId, @NonNull RecipientId author) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
@ -361,7 +361,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
public boolean hasReaction(long messageId, @NonNull ReactionRecord reactionRecord) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
ReactionList reactions = getReactions(db, messageId).or(ReactionList.getDefaultInstance());
@ -381,7 +381,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
return;
}
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
SqlUtil.Query where = SqlUtil.buildCollectionQuery(ID, ids);
ContentValues values = new ContentValues();
@ -411,7 +411,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
public @NonNull List<ReportSpamData> getReportSpamMessageServerGuids(long threadId, long timestamp) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = THREAD_ID + " = ? AND " + getDateReceivedColumnName() + " <= ?";
String[] args = SqlUtil.buildArgs(threadId, timestamp);
@ -452,7 +452,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
protected <D extends Document<I>, I> void removeFromDocument(long messageId, String column, I object, Class<D> clazz) throws IOException {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.beginTransaction();
try {
@ -484,7 +484,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
}
protected <T extends Document<I>, I> void addToDocument(long messageId, String column, List<I> objects, Class<T> clazz) throws IOException {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.beginTransaction();
try {

Wyświetl plik

@ -198,7 +198,7 @@ class MessageSendLogDatabase constructor(context: Context?, databaseHelper: SQLC
if (!FeatureFlags.retryReceipts()) return
if (sendMessageResult.isSuccess && sendMessageResult.success.content.isPresent) {
val db = databaseHelper.writableDatabase
val db = databaseHelper.signalWritableDatabase
db.beginTransaction()
try {
@ -219,7 +219,7 @@ class MessageSendLogDatabase constructor(context: Context?, databaseHelper: SQLC
}
private fun insert(recipients: List<RecipientDevice>, dateSent: Long, content: SignalServiceProtos.Content, contentHint: ContentHint, messageIds: List<MessageId>): Long {
val db = databaseHelper.writableDatabase
val db = databaseHelper.signalWritableDatabase
db.beginTransaction()
try {
@ -266,7 +266,7 @@ class MessageSendLogDatabase constructor(context: Context?, databaseHelper: SQLC
trimOldMessages(System.currentTimeMillis(), FeatureFlags.retryRespondMaxAge())
val db = databaseHelper.readableDatabase
val db = databaseHelper.signalReadableDatabase
val table = "${PayloadTable.TABLE_NAME} LEFT JOIN ${RecipientTable.TABLE_NAME} ON ${PayloadTable.TABLE_NAME}.${PayloadTable.ID} = ${RecipientTable.TABLE_NAME}.${RecipientTable.PAYLOAD_ID}"
val query = "${PayloadTable.DATE_SENT} = ? AND ${RecipientTable.RECIPIENT_ID} = ? AND ${RecipientTable.DEVICE} = ?"
val args = SqlUtil.buildArgs(dateSent, recipientId, device)
@ -304,7 +304,7 @@ class MessageSendLogDatabase constructor(context: Context?, databaseHelper: SQLC
fun deleteAllRelatedToMessage(messageId: Long, mms: Boolean) {
if (!FeatureFlags.retryReceipts()) return
val db = databaseHelper.writableDatabase
val db = databaseHelper.signalWritableDatabase
val query = "${PayloadTable.ID} IN (SELECT ${MessageTable.PAYLOAD_ID} FROM ${MessageTable.TABLE_NAME} WHERE ${MessageTable.MESSAGE_ID} = ? AND ${MessageTable.IS_MMS} = ?)"
val args = SqlUtil.buildArgs(messageId, if (mms) 1 else 0)
@ -320,7 +320,7 @@ class MessageSendLogDatabase constructor(context: Context?, databaseHelper: SQLC
fun deleteEntriesForRecipient(dateSent: List<Long>, recipientId: RecipientId, device: Int) {
if (!FeatureFlags.retryReceipts()) return
val db = databaseHelper.writableDatabase
val db = databaseHelper.signalWritableDatabase
db.beginTransaction()
try {
@ -348,13 +348,13 @@ class MessageSendLogDatabase constructor(context: Context?, databaseHelper: SQLC
fun deleteAll() {
if (!FeatureFlags.retryReceipts()) return
databaseHelper.writableDatabase.delete(PayloadTable.TABLE_NAME, null, null)
databaseHelper.signalWritableDatabase.delete(PayloadTable.TABLE_NAME, null, null)
}
fun trimOldMessages(currentTime: Long, maxAge: Long) {
if (!FeatureFlags.retryReceipts()) return
val db = databaseHelper.writableDatabase
val db = databaseHelper.signalWritableDatabase
val query = "${PayloadTable.DATE_SENT} < ?"
val args = SqlUtil.buildArgs(currentTime - maxAge)

Wyświetl plik

@ -29,7 +29,7 @@ import com.annimon.stream.Stream;
import com.google.android.mms.pdu_alt.NotificationInd;
import com.google.android.mms.pdu_alt.PduHeaders;
import net.sqlcipher.database.SQLiteStatement;
import net.zetetic.database.sqlcipher.SQLiteStatement;
import org.json.JSONArray;
import org.json.JSONException;
@ -363,7 +363,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public @NonNull List<MarkedMessageInfo> getViewedIncomingMessages(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] columns = new String[]{ID, RECIPIENT_ID, DATE_SENT, MESSAGE_BOX, THREAD_ID};
String where = THREAD_ID + " = ? AND " + VIEWED_RECEIPT_COUNT + " > 0 AND " + MESSAGE_BOX + " & " + Types.BASE_INBOX_TYPE + " = " + Types.BASE_INBOX_TYPE;
String[] args = SqlUtil.buildArgs(threadId);
@ -405,7 +405,7 @@ public class MmsDatabase extends MessageDatabase {
return Collections.emptyList();
}
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String[] columns = new String[]{ID, RECIPIENT_ID, DATE_SENT, MESSAGE_BOX, THREAD_ID};
String where = ID + " IN (" + Util.join(messageIds, ",") + ") AND " + VIEWED_RECEIPT_COUNT + " = 0";
List<MarkedMessageInfo> results = new LinkedList<>();
@ -523,12 +523,12 @@ public class MmsDatabase extends MessageDatabase {
@Override
public void ensureMigration() {
databaseHelper.getWritableDatabase();
databaseHelper.getSignalWritableDatabase();
}
@Override
public boolean isGroupQuitMessage(long messageId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] columns = new String[]{ID};
String query = ID + " = ? AND " + MESSAGE_BOX + " & ?";
@ -546,7 +546,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public long getLatestGroupQuitTimestamp(long threadId, long quitTimeBarrier) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] columns = new String[]{DATE_SENT};
String query = THREAD_ID + " = ? AND " + MESSAGE_BOX + " & ? AND " + DATE_SENT + " < ?";
@ -566,7 +566,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public int getMessageCountForThread(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.query(TABLE_NAME, COUNT, THREAD_ID_WHERE, SqlUtil.buildArgs(threadId), null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
@ -579,7 +579,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public int getMessageCountForThread(long threadId, long beforeTime) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] cols = new String[] {"COUNT(*)"};
String query = THREAD_ID + " = ? AND " + DATE_RECEIVED + " < ?";
@ -596,7 +596,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public boolean hasMeaningfulMessage(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.query(TABLE_NAME, new String[] { "1" }, THREAD_ID_WHERE, SqlUtil.buildArgs(threadId), null, null, null, "1")) {
return cursor != null && cursor.moveToFirst();
@ -623,7 +623,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public Set<ThreadUpdate> incrementReceiptCount(SyncMessageId messageId, long timestamp, @NonNull ReceiptType receiptType) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
Set<ThreadUpdate> threadUpdates = new HashSet<>();
try (Cursor cursor = database.query(TABLE_NAME, new String[] {ID, THREAD_ID, MESSAGE_BOX, RECIPIENT_ID, receiptType.getColumnName()},
@ -665,7 +665,7 @@ public class MmsDatabase extends MessageDatabase {
public long getThreadIdForMessage(long id) {
String sql = "SELECT " + THREAD_ID + " FROM " + TABLE_NAME + " WHERE " + ID + " = ?";
String[] sqlArgs = new String[] {id+""};
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Cursor cursor = null;
@ -705,7 +705,7 @@ public class MmsDatabase extends MessageDatabase {
}
private Cursor rawQuery(@NonNull String where, @Nullable String[] arguments, boolean reverse, long limit) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String rawQueryString = "SELECT " + Util.join(MMS_PROJECTION, ",") +
" FROM " + MmsDatabase.TABLE_NAME + " LEFT OUTER JOIN " + AttachmentDatabase.TABLE_NAME +
" ON (" + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " = " + AttachmentDatabase.TABLE_NAME + "." + AttachmentDatabase.MMS_ID + ")" +
@ -753,7 +753,7 @@ public class MmsDatabase extends MessageDatabase {
}
private void updateMailboxBitmask(long id, long maskOff, long maskOn, Optional<Long> threadId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.execSQL("UPDATE " + TABLE_NAME +
" SET " + MESSAGE_BOX + " = (" + MESSAGE_BOX + " & " + (Types.TOTAL_MASK - maskOff) + " | " + maskOn + " )" +
" WHERE " + ID + " = ?", new String[] {id + ""});
@ -785,7 +785,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public void clearRateLimitStatus(@NonNull Collection<Long> ids) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -830,7 +830,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public void markAsRemoteDelete(long messageId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long threadId;
@ -863,7 +863,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public void markDownloadState(long messageId, long state) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(STATUS, state);
@ -881,7 +881,7 @@ public class MmsDatabase extends MessageDatabase {
ContentValues contentValues = new ContentValues();
contentValues.put(UNIDENTIFIED, unidentified ? 1 : 0);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {String.valueOf(messageId)});
}
@ -897,7 +897,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public void markExpireStarted(Collection<Long> ids, long startedAtTimestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long threadId = -1;
db.beginTransaction();
@ -926,7 +926,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public void markAsNotified(long id) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(NOTIFIED, 1);
@ -955,7 +955,7 @@ public class MmsDatabase extends MessageDatabase {
}
private List<MarkedMessageInfo> setMessagesRead(String where, String[] arguments) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
List<MarkedMessageInfo> result = new LinkedList<>();
Cursor cursor = null;
@ -996,7 +996,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public List<Pair<Long, Long>> setTimestampRead(SyncMessageId messageId, long proposedExpireStarted, @NonNull Map<Long, Long> threadToLatestRead) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
List<Pair<Long, Long>> expiring = new LinkedList<>();
Cursor cursor = null;
@ -1045,7 +1045,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public @Nullable Pair<RecipientId, Long> getOldestUnreadMentionDetails(long threadId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[]{RECIPIENT_ID,DATE_RECEIVED};
String selection = THREAD_ID + " = ? AND " + READ + " = 0 AND " + MENTIONS_SELF + " = 1";
String[] args = SqlUtil.buildArgs(threadId);
@ -1061,7 +1061,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public int getUnreadMentionCount(long threadId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[]{"COUNT(*)"};
String selection = THREAD_ID + " = ? AND " + READ + " = 0 AND " + MENTIONS_SELF + " = 1";
String[] args = SqlUtil.buildArgs(threadId);
@ -1079,7 +1079,7 @@ public class MmsDatabase extends MessageDatabase {
* Trims data related to expired messages. Only intended to be run after a backup restore.
*/
void trimEntriesForExpiredMessages() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String trimmedCondition = " NOT IN (SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME + ")";
database.delete(GroupReceiptDatabase.TABLE_NAME, GroupReceiptDatabase.MMS_ID + trimmedCondition, null);
@ -1396,7 +1396,7 @@ public class MmsDatabase extends MessageDatabase {
}
public Pair<Long, Long> insertMessageInbox(@NonNull NotificationInd notification, int subscriptionId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long threadId = getThreadIdFor(notification);
ContentValues contentValues = new ContentValues();
ContentValuesBuilder contentBuilder = new ContentValuesBuilder(contentValues);
@ -1585,7 +1585,7 @@ public class MmsDatabase extends MessageDatabase {
@Nullable SmsDatabase.InsertListener insertListener)
throws MmsException
{
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
AttachmentDatabase partsDatabase = DatabaseFactory.getAttachmentDatabase(context);
MentionDatabase mentionDatabase = DatabaseFactory.getMentionDatabase(context);
@ -1617,7 +1617,7 @@ public class MmsDatabase extends MessageDatabase {
ContentValues contactValues = new ContentValues();
contactValues.put(SHARED_CONTACTS, serializedContacts);
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
int rows = database.update(TABLE_NAME, contactValues, ID + " = ?", new String[]{ String.valueOf(messageId) });
if (rows <= 0) {
@ -1629,7 +1629,7 @@ public class MmsDatabase extends MessageDatabase {
ContentValues contactValues = new ContentValues();
contactValues.put(LINK_PREVIEWS, serializedPreviews);
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
int rows = database.update(TABLE_NAME, contactValues, ID + " = ?", new String[]{ String.valueOf(messageId) });
if (rows <= 0) {
@ -1666,7 +1666,7 @@ public class MmsDatabase extends MessageDatabase {
MentionDatabase mentionDatabase = DatabaseFactory.getMentionDatabase(context);
mentionDatabase.deleteMentionsForMessage(messageId);
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, ID_WHERE, new String[] {messageId+""});
DatabaseFactory.getThreadDatabase(context).setLastScrolled(threadId, 0);
@ -1734,7 +1734,7 @@ public class MmsDatabase extends MessageDatabase {
}
private boolean isDuplicate(IncomingMediaMessage message, long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = DATE_SENT + " = ? AND " + RECIPIENT_ID + " = ? AND " + THREAD_ID + " = ?";
String[] args = SqlUtil.buildArgs(message.getSentTimeMillis(), message.getFrom().serialize(), threadId);
@ -1745,7 +1745,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public boolean isSent(long messageId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = database.query(TABLE_NAME, new String[] { MESSAGE_BOX }, ID + " = ?", new String[] { String.valueOf(messageId)}, null, null, null)) {
if (cursor != null && cursor.moveToNext()) {
long type = cursor.getLong(cursor.getColumnIndexOrThrow(MESSAGE_BOX));
@ -1762,7 +1762,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
public Set<Long> getAllRateLimitedMessageIds() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String where = "(" + MESSAGE_BOX + " & " + Types.TOTAL_MASK + " & " + Types.MESSAGE_RATE_LIMITED_BIT + ") > 0";
Set<Long> ids = new HashSet<>();
@ -1780,7 +1780,7 @@ public class MmsDatabase extends MessageDatabase {
void deleteThreads(@NonNull Set<Long> threadIds) {
Log.d(TAG, "deleteThreads(count: " + threadIds.size() + ")");
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = "";
for (long threadId : threadIds) {
@ -1798,7 +1798,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
int deleteMessagesInThreadBeforeDate(long threadId, long date) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = THREAD_ID + " = ? AND " + DATE_RECEIVED + " < " + date;
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId));
@ -1806,7 +1806,7 @@ public class MmsDatabase extends MessageDatabase {
@Override
void deleteAbandonedMessages() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadDatabase.TABLE_NAME + ")";
int deletes = db.delete(TABLE_NAME, where, null);
@ -1839,13 +1839,13 @@ public class MmsDatabase extends MessageDatabase {
DatabaseFactory.getGroupReceiptDatabase(context).deleteAllRows();
DatabaseFactory.getMentionDatabase(context).deleteAllMentions();
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, null, null);
}
@Override
public @Nullable ViewOnceExpirationInfo getNearestExpiringViewOnceMessage() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
ViewOnceExpirationInfo info = null;
long nearestExpiration = Long.MAX_VALUE;
@ -1884,18 +1884,18 @@ public class MmsDatabase extends MessageDatabase {
@Override
public SQLiteDatabase beginTransaction() {
databaseHelper.getWritableDatabase().beginTransaction();
return databaseHelper.getWritableDatabase();
databaseHelper.getSignalWritableDatabase().beginTransaction();
return databaseHelper.getSignalWritableDatabase();
}
@Override
public void setTransactionSuccessful() {
databaseHelper.getWritableDatabase().setTransactionSuccessful();
databaseHelper.getSignalWritableDatabase().setTransactionSuccessful();
}
@Override
public void endTransaction() {
databaseHelper.getWritableDatabase().endTransaction();
databaseHelper.getSignalWritableDatabase().endTransaction();
}
public static Reader readerFor(Cursor cursor) {

Wyświetl plik

@ -24,7 +24,7 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import net.sqlcipher.database.SQLiteQueryBuilder;
import net.zetetic.database.sqlcipher.SQLiteQueryBuilder;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId;
@ -192,7 +192,7 @@ public class MmsSmsDatabase extends Database {
public Cursor getConversation(long threadId, long offset, long limit) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC";
String selection = MmsSmsColumns.THREAD_ID + " = " + threadId;
String limitStr = limit > 0 || offset > 0 ? offset + ", " + limit : null;
@ -219,7 +219,7 @@ public class MmsSmsDatabase extends Database {
}
public @NonNull MessageRecord getConversationSnippet(long threadId) throws NoSuchMessageException {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.rawQuery(SNIPPET_QUERY, SqlUtil.buildArgs(threadId, threadId))) {
if (cursor.moveToFirst()) {
boolean isMms = CursorUtil.requireBoolean(cursor, TRANSPORT);
@ -237,7 +237,7 @@ public class MmsSmsDatabase extends Database {
}
public long getConversationSnippetType(long threadId) throws NoSuchMessageException {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.rawQuery(SNIPPET_QUERY, SqlUtil.buildArgs(threadId, threadId))) {
if (cursor.moveToFirst()) {
return CursorUtil.requireLong(cursor, MmsSmsColumns.NORMALIZED_TYPE);
@ -415,7 +415,7 @@ public class MmsSmsDatabase extends Database {
* @return Whether or not some thread was updated.
*/
private boolean incrementReceiptCount(SyncMessageId syncMessageId, long timestamp, @NonNull MessageDatabase.ReceiptType receiptType) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
Set<ThreadUpdate> threadUpdates = new HashSet<>();
@ -449,7 +449,7 @@ public class MmsSmsDatabase extends Database {
* @return All of the messages that didn't result in updates.
*/
private @NonNull Collection<SyncMessageId> incrementReceiptCounts(@NonNull List<SyncMessageId> syncMessageIds, long timestamp, @NonNull MessageDatabase.ReceiptType receiptType) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
Set<ThreadUpdate> threadUpdates = new HashSet<>();
Collection<SyncMessageId> unhandled = new HashSet<>();
@ -819,7 +819,7 @@ public class MmsSmsDatabase extends Database {
private Cursor queryTables(String[] projection, String selection, String order, String limit) {
String query = buildQuery(projection, selection, order, limit, true);
return databaseHelper.getReadableDatabase().rawQuery(query, null);
return databaseHelper.getSignalReadableDatabase().rawQuery(query, null);
}
public static Reader readerFor(@NonNull Cursor cursor) {

Wyświetl plik

@ -40,7 +40,7 @@ public class OneTimePreKeyDatabase extends Database {
}
public @Nullable PreKeyRecord getPreKey(int keyId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = database.query(TABLE_NAME, null, KEY_ID + " = ?",
new String[] {String.valueOf(keyId)},
@ -62,7 +62,7 @@ public class OneTimePreKeyDatabase extends Database {
}
public void insertPreKey(int keyId, PreKeyRecord record) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_ID, keyId);
@ -73,7 +73,7 @@ public class OneTimePreKeyDatabase extends Database {
}
public void removePreKey(int keyId) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, KEY_ID + " = ?", new String[] {String.valueOf(keyId)});
}

Wyświetl plik

@ -197,7 +197,7 @@ public final class PaymentDatabase extends Database {
throw new AssertionError();
}
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(15);
values.put(PAYMENT_UUID, uuid.toString());
@ -247,14 +247,14 @@ public final class PaymentDatabase extends Database {
}
public void deleteAll() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, null, null);
Log.i(TAG, "Deleted all records");
}
@WorkerThread
public boolean delete(@NonNull UUID uuid) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = PAYMENT_UUID + " = ?";
String[] args = {uuid.toString()};
int deleted;
@ -281,7 +281,7 @@ public final class PaymentDatabase extends Database {
@WorkerThread
public @NonNull List<PaymentTransaction> getAll() {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<PaymentTransaction> result = new LinkedList<>();
try (Cursor cursor = database.query(TABLE_NAME, null, null, null, null, null, TIMESTAMP + " DESC")) {
@ -295,7 +295,7 @@ public final class PaymentDatabase extends Database {
@WorkerThread
public void markAllSeen() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(1);
List<UUID> unseenIds = new LinkedList<>();
String[] unseenProjection = SqlUtil.buildArgs(PAYMENT_UUID);
@ -334,7 +334,7 @@ public final class PaymentDatabase extends Database {
@WorkerThread
public void markPaymentSeen(@NonNull UUID uuid) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(1);
String where = PAYMENT_UUID + " = ?";
String[] args = {uuid.toString()};
@ -349,7 +349,7 @@ public final class PaymentDatabase extends Database {
@WorkerThread
public @NonNull List<PaymentTransaction> getUnseenPayments() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = SEEN + " = 0 AND " + STATE + " = " + State.SUCCESSFUL.serialize();
List<PaymentTransaction> results = new LinkedList<>();
@ -364,7 +364,7 @@ public final class PaymentDatabase extends Database {
@WorkerThread
public @Nullable PaymentTransaction getPayment(@NonNull UUID uuid) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String select = PAYMENT_UUID + " = ?";
String[] args = {uuid.toString()};
@ -394,7 +394,7 @@ public final class PaymentDatabase extends Database {
@NonNull Money fee)
throws PublicKeyConflictException
{
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = PAYMENT_UUID + " = ?";
String[] whereArgs = {uuid.toString()};
int updated;
@ -449,7 +449,7 @@ public final class PaymentDatabase extends Database {
@Nullable FailureReason failureReason,
@Nullable Long blockIndex)
{
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = PAYMENT_UUID + " = ?";
String[] whereArgs = {uuid.toString()};
int updated;
@ -499,7 +499,7 @@ public final class PaymentDatabase extends Database {
long blockIndex,
long blockTimestamp)
{
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = PAYMENT_UUID + " = ?";
String[] whereArgs = {uuid.toString()};
int updated;

Wyświetl plik

@ -6,6 +6,8 @@ import android.database.Cursor;
import androidx.annotation.NonNull;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.database.model.PendingRetryReceiptModel;
import org.thoughtcrime.securesms.recipients.RecipientId;
@ -51,7 +53,7 @@ public final class PendingRetryReceiptDatabase extends Database {
values.put(RECEIVED_TIMESTAMP, receivedTimestamp);
values.put(THREAD_ID, threadId);
long id = databaseHelper.getWritableDatabase().insertWithOnConflict(TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE);
long id = databaseHelper.getSignalWritableDatabase().insertWithOnConflict(TABLE_NAME, null, values, SQLiteDatabase.CONFLICT_REPLACE);
return new PendingRetryReceiptModel(id, author, authorDevice, sentTimestamp, receivedTimestamp, threadId);
}
@ -59,7 +61,7 @@ public final class PendingRetryReceiptDatabase extends Database {
@NonNull List<PendingRetryReceiptModel> getAll() {
List<PendingRetryReceiptModel> models = new LinkedList<>();
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, null, null, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, null, null, null, null, null)) {
while (cursor.moveToNext()) {
models.add(fromCursor(cursor));
}
@ -69,7 +71,7 @@ public final class PendingRetryReceiptDatabase extends Database {
}
void delete(@NonNull PendingRetryReceiptModel model) {
databaseHelper.getWritableDatabase().delete(TABLE_NAME, ID_WHERE, SqlUtil.buildArgs(model.getId()));
databaseHelper.getSignalWritableDatabase().delete(TABLE_NAME, ID_WHERE, SqlUtil.buildArgs(model.getId()));
}
private static @NonNull PendingRetryReceiptModel fromCursor(@NonNull Cursor cursor) {

Wyświetl plik

@ -69,7 +69,7 @@ public class PushDatabase extends Database {
values.put(SERVER_DELIVERED_TIMESTAMP, envelope.getServerDeliveredTimestamp());
values.put(SERVER_GUID, envelope.getServerGuid());
return databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, values);
return databaseHelper.getSignalWritableDatabase().insert(TABLE_NAME, null, values);
}
}
@ -77,9 +77,9 @@ public class PushDatabase extends Database {
Cursor cursor = null;
try {
cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, ID_WHERE,
new String[] {String.valueOf(id)},
null, null, null);
cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, ID_WHERE,
new String[] {String.valueOf(id)},
null, null, null);
if (cursor != null && cursor.moveToNext()) {
String legacyMessage = cursor.getString(cursor.getColumnIndexOrThrow(LEGACY_MSG));
@ -109,11 +109,11 @@ public class PushDatabase extends Database {
}
public Cursor getPending() {
return databaseHelper.getReadableDatabase().query(TABLE_NAME, null, null, null, null, null, null);
return databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, null, null, null, null, null);
}
public void delete(long id) {
databaseHelper.getWritableDatabase().delete(TABLE_NAME, ID_WHERE, new String[] {id+""});
databaseHelper.getSignalWritableDatabase().delete(TABLE_NAME, ID_WHERE, new String[] {id+""});
}
public Reader readerFor(Cursor cursor) {
@ -121,7 +121,7 @@ public class PushDatabase extends Database {
}
private Optional<Long> find(SignalServiceEnvelope envelope) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = TYPE + " = ? AND " +
DEVICE_ID + " = ? AND " +
LEGACY_MSG + " = ? AND " +

Wyświetl plik

@ -14,8 +14,7 @@ import com.annimon.stream.Stream;
import com.google.protobuf.ByteString;
import com.google.protobuf.InvalidProtocolBufferException;
import net.sqlcipher.SQLException;
import net.sqlcipher.database.SQLiteConstraintException;
import net.zetetic.database.sqlcipher.SQLiteConstraintException;
import org.jetbrains.annotations.NotNull;
import org.signal.core.util.logging.Log;
@ -387,7 +386,7 @@ public class RecipientDatabase extends Database {
}
public @NonNull boolean containsPhoneOrUuid(@NonNull String id) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = UUID + " = ? OR " + PHONE + " = ?";
String[] args = new String[]{id, id};
@ -429,7 +428,7 @@ public class RecipientDatabase extends Database {
Pair<RecipientId, RecipientId> remapped = null;
boolean transactionSuccessful = false;
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -598,7 +597,7 @@ public class RecipientDatabase extends Database {
values.put(GROUP_ID, groupId.toString());
values.put(AVATAR_COLOR, AvatarColor.random().serialize());
long id = databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, values);
long id = databaseHelper.getSignalWritableDatabase().insert(TABLE_NAME, null, values);
if (id < 0) {
existing = getByColumn(GROUP_ID, groupId.toString());
@ -639,7 +638,7 @@ public class RecipientDatabase extends Database {
* See {@link Recipient#externalPossiblyMigratedGroup(Context, GroupId)}.
*/
public @NonNull RecipientId getOrInsertFromPossiblyMigratedGroupId(@NonNull GroupId groupId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -676,7 +675,7 @@ public class RecipientDatabase extends Database {
}
public Cursor getBlocked() {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
return database.query(TABLE_NAME, ID_PROJECTION, BLOCKED + " = 1",
null, null, null, null, null);
@ -687,7 +686,7 @@ public class RecipientDatabase extends Database {
}
public RecipientReader getRecipientsWithNotificationChannels() {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
Cursor cursor = database.query(TABLE_NAME, ID_PROJECTION, NOTIFICATION_CHANNEL + " NOT NULL",
null, null, null, null, null);
@ -695,7 +694,7 @@ public class RecipientDatabase extends Database {
}
public @NonNull RecipientSettings getRecipientSettings(@NonNull RecipientId id) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = ID + " = ?";
String[] args = new String[] { id.serialize() };
@ -742,7 +741,7 @@ public class RecipientDatabase extends Database {
}
public void markNeedsSyncWithoutRefresh(@NonNull Collection<RecipientId> recipientIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -761,7 +760,7 @@ public class RecipientDatabase extends Database {
}
public void applyStorageIdUpdates(@NonNull Map<RecipientId, StorageId> storageIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -784,7 +783,7 @@ public class RecipientDatabase extends Database {
}
public void applyStorageSyncContactInsert(@NonNull SignalContactRecord insert) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
ContentValues values = getValuesForStorageContact(insert, true);
@ -813,7 +812,7 @@ public class RecipientDatabase extends Database {
}
public void applyStorageSyncContactUpdate(@NonNull StorageRecordUpdate<SignalContactRecord> update) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
IdentityDatabase identityDatabase = DatabaseFactory.getIdentityDatabase(context);
ContentValues values = getValuesForStorageContact(update.getNew(), false);
@ -871,7 +870,7 @@ public class RecipientDatabase extends Database {
}
public void applyStorageSyncGroupV1Insert(@NonNull SignalGroupV1Record insert) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long id = db.insertOrThrow(TABLE_NAME, null, getValuesForStorageGroupV1(insert, true));
RecipientId recipientId = RecipientId.from(id);
@ -882,7 +881,7 @@ public class RecipientDatabase extends Database {
}
public void applyStorageSyncGroupV1Update(@NonNull StorageRecordUpdate<SignalGroupV1Record> update) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = getValuesForStorageGroupV1(update.getNew(), false);
int updateCount = db.update(TABLE_NAME, values, STORAGE_SERVICE_ID + " = ?", new String[]{Base64.encodeBytes(update.getOld().getId().getRaw())});
@ -899,7 +898,7 @@ public class RecipientDatabase extends Database {
}
public void applyStorageSyncGroupV2Insert(@NonNull SignalGroupV2Record insert) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
GroupMasterKey masterKey = insert.getMasterKeyOrThrow();
GroupId.V2 groupId = GroupId.v2(masterKey);
@ -924,7 +923,7 @@ public class RecipientDatabase extends Database {
}
public void applyStorageSyncGroupV2Update(@NonNull StorageRecordUpdate<SignalGroupV2Record> update) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = getValuesForStorageGroupV2(update.getNew(), false);
int updateCount = db.update(TABLE_NAME, values, STORAGE_SERVICE_ID + " = ?", new String[]{Base64.encodeBytes(update.getOld().getId().getRaw())});
@ -942,7 +941,7 @@ public class RecipientDatabase extends Database {
}
public void applyStorageSyncAccountUpdate(@NonNull StorageRecordUpdate<SignalAccountRecord> update) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues();
ProfileName profileName = ProfileName.fromParts(update.getNew().getGivenName().orNull(), update.getNew().getFamilyName().orNull());
@ -983,7 +982,7 @@ public class RecipientDatabase extends Database {
public void updatePhoneNumbers(@NonNull Map<String, String> mapping) {
if (mapping.isEmpty()) return;
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -1003,7 +1002,7 @@ public class RecipientDatabase extends Database {
}
private @NonNull RecipientId getByStorageKeyOrThrow(byte[] storageKey) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = STORAGE_SERVICE_ID + " = ?";
String[] args = new String[]{Base64.encodeBytes(storageKey)};
@ -1096,7 +1095,7 @@ public class RecipientDatabase extends Database {
}
private List<RecipientSettings> getRecipientSettingsForSync(@Nullable String query, @Nullable String[] args) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String table = TABLE_NAME + " LEFT OUTER JOIN " + IdentityDatabase.TABLE_NAME + " ON " + TABLE_NAME + "." + ID + " = " + IdentityDatabase.TABLE_NAME + "." + IdentityDatabase.RECIPIENT_ID
+ " LEFT OUTER JOIN " + GroupDatabase.TABLE_NAME + " ON " + TABLE_NAME + "." + GROUP_ID + " = " + GroupDatabase.TABLE_NAME + "." + GroupDatabase.GROUP_ID
+ " LEFT OUTER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + TABLE_NAME + "." + ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID;
@ -1132,7 +1131,7 @@ public class RecipientDatabase extends Database {
* @return All storage IDs for ContactRecords, excluding the ones that need to be deleted.
*/
public @NonNull Map<RecipientId, StorageId> getContactStorageSyncIdsMap() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = STORAGE_SERVICE_ID + " NOT NULL AND " + ID + " != ? AND " + GROUP_TYPE + " != ?";
String[] args = SqlUtil.buildArgs(Recipient.self().getId(), String.valueOf(GroupType.SIGNAL_V2.getId()));
Map<RecipientId, StorageId> out = new HashMap<>();
@ -1347,7 +1346,7 @@ public class RecipientDatabase extends Database {
}
public BulkOperationsHandle beginBulkSystemContactUpdate() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.beginTransaction();
ContentValues contentValues = new ContentValues(1);
@ -1359,7 +1358,7 @@ public class RecipientDatabase extends Database {
}
void onUpdatedChatColors(@NonNull ChatColors chatColors) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = CUSTOM_CHAT_COLORS_ID + " = ?";
String[] args = SqlUtil.buildArgs(chatColors.getId().getLongValue());
List<RecipientId> updated = new LinkedList<>();
@ -1387,7 +1386,7 @@ public class RecipientDatabase extends Database {
}
void onDeletedChatColors(@NonNull ChatColors chatColors) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = CUSTOM_CHAT_COLORS_ID + " = ?";
String[] args = SqlUtil.buildArgs(chatColors.getId().getLongValue());
List<RecipientId> updated = new LinkedList<>();
@ -1415,7 +1414,7 @@ public class RecipientDatabase extends Database {
}
public int getColorUsageCount(@NotNull ChatColors.Id chatColorsId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = SqlUtil.buildArgs("COUNT(*)");
String where = CUSTOM_CHAT_COLORS_ID + " = ?";
String[] args = SqlUtil.buildArgs(chatColorsId.getLongValue());
@ -1431,7 +1430,7 @@ public class RecipientDatabase extends Database {
}
public void clearAllColors() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = CUSTOM_CHAT_COLORS_ID + " != ?";
String[] args = SqlUtil.buildArgs(ChatColors.Id.NotSet.INSTANCE.getLongValue());
List<RecipientId> toUpdate = new LinkedList<>();
@ -1555,7 +1554,7 @@ public class RecipientDatabase extends Database {
}
private void setInsightsBannerTier(@NonNull RecipientId id, @NonNull InsightsBannerTier insightsBannerTier) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(1);
String query = ID + " = ? AND " + SEEN_INVITE_REMINDER + " < ?";
String[] args = new String[]{ id.serialize(), String.valueOf(insightsBannerTier) };
@ -1588,7 +1587,7 @@ public class RecipientDatabase extends Database {
}
public @NonNull DeviceLastResetTime getLastSessionResetTimes(@NonNull RecipientId id) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.query(TABLE_NAME, new String[] {LAST_SESSION_RESET}, ID_WHERE, SqlUtil.buildArgs(id), null, null, null)) {
if (cursor.moveToFirst()) {
@ -1599,7 +1598,7 @@ public class RecipientDatabase extends Database {
} else {
return DeviceLastResetTime.newBuilder().build();
}
} catch (InvalidProtocolBufferException | SQLException e) {
} catch (InvalidProtocolBufferException e) {
Log.w(TAG, e);
return DeviceLastResetTime.newBuilder().build();
}
@ -1670,7 +1669,7 @@ public class RecipientDatabase extends Database {
* @return true iff changed.
*/
public boolean setProfileKeyIfAbsent(@NonNull RecipientId id, @NonNull ProfileKey profileKey) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String selection = ID + " = ? AND " + PROFILE_KEY + " is NULL";
String[] args = new String[]{id.serialize()};
ContentValues valuesToSet = new ContentValues(3);
@ -1777,7 +1776,7 @@ public class RecipientDatabase extends Database {
}
public @NonNull List<RecipientId> getSimilarRecipientIds(@NonNull Recipient recipient) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = SqlUtil.buildArgs(ID, "COALESCE(" + nullIfEmpty(SYSTEM_JOINED_NAME) + ", " + nullIfEmpty(PROFILE_JOINED_NAME) + ") AS checked_name");
String where = "checked_name = ?";
@ -1862,7 +1861,7 @@ public class RecipientDatabase extends Database {
}
public void resetAllWallpaper() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String[] selection = SqlUtil.buildArgs(ID, WALLPAPER_URI);
String where = WALLPAPER + " IS NOT NULL";
List<Pair<RecipientId, String>> idWithWallpaper = new LinkedList<>();
@ -1944,7 +1943,7 @@ public class RecipientDatabase extends Database {
}
private @Nullable Wallpaper getWallpaper(@NonNull RecipientId id) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.query(TABLE_NAME, new String[] {WALLPAPER}, ID_WHERE, SqlUtil.buildArgs(id), null, null, null)) {
if (cursor.moveToFirst()) {
@ -1976,7 +1975,7 @@ public class RecipientDatabase extends Database {
}
public int getWallpaperUriUsageCount(@NonNull Uri uri) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = WALLPAPER_URI + " = ?";
String[] args = SqlUtil.buildArgs(uri);
@ -1993,7 +1992,7 @@ public class RecipientDatabase extends Database {
* @return True if setting the phone number resulted in changed recipientId, otherwise false.
*/
public boolean setPhoneNumber(@NonNull RecipientId id, @NonNull String e164) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -2061,7 +2060,7 @@ public class RecipientDatabase extends Database {
}
public Set<String> getAllPhoneNumbers() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Set<String> results = new HashSet<>();
try (Cursor cursor = db.query(TABLE_NAME, new String[] { PHONE }, null, null, null, null, null)) {
@ -2081,7 +2080,7 @@ public class RecipientDatabase extends Database {
* @return True if setting the UUID resulted in changed recipientId, otherwise false.
*/
public boolean markRegistered(@NonNull RecipientId id, @NonNull UUID uuid) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -2142,7 +2141,7 @@ public class RecipientDatabase extends Database {
}
public void bulkUpdatedRegisteredStatus(@NonNull Map<RecipientId, String> registered, Collection<RecipientId> unregistered) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -2188,7 +2187,7 @@ public class RecipientDatabase extends Database {
* @return A mapping of (RecipientId, UUID)
*/
public @NonNull Map<RecipientId, String> bulkProcessCdsResult(@NonNull Map<String, UUID> mapping) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
HashMap<RecipientId, String> uuidMap = new HashMap<>();
db.beginTransaction();
@ -2219,7 +2218,7 @@ public class RecipientDatabase extends Database {
}
public @NonNull List<RecipientId> getUninvitedRecipientsForInsights() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<RecipientId> results = new LinkedList<>();
final String[] args = new String[]{String.valueOf(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(31))};
@ -2233,7 +2232,7 @@ public class RecipientDatabase extends Database {
}
public @NonNull List<RecipientId> getRegistered() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<RecipientId> results = new LinkedList<>();
try (Cursor cursor = db.query(TABLE_NAME, ID_PROJECTION, REGISTERED + " = ?", new String[] {"1"}, null, null, null)) {
@ -2246,7 +2245,7 @@ public class RecipientDatabase extends Database {
}
public List<RecipientId> getSystemContacts() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<RecipientId> results = new LinkedList<>();
try (Cursor cursor = db.query(TABLE_NAME, ID_PROJECTION, SYSTEM_JOINED_NAME + " IS NOT NULL AND " + SYSTEM_JOINED_NAME + " != \"\"", null, null, null, null)) {
@ -2264,7 +2263,7 @@ public class RecipientDatabase extends Database {
*/
@Deprecated
public void updateSystemContactColors() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Map<RecipientId, ChatColors> updates = new HashMap<>();
db.beginTransaction();
@ -2326,7 +2325,7 @@ public class RecipientDatabase extends Database {
String[] args = searchSelection.getArgs();
String orderBy = SORT_NAME + ", " + SYSTEM_JOINED_NAME + ", " + SEARCH_PROFILE_NAME + ", " + USERNAME + ", " + PHONE;
return databaseHelper.getReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
return databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
}
public @Nullable Cursor querySignalContacts(@NonNull String query, boolean includeSelf) {
@ -2343,7 +2342,7 @@ public class RecipientDatabase extends Database {
String orderBy = SORT_NAME + ", " + SYSTEM_JOINED_NAME + ", " + SEARCH_PROFILE_NAME + ", " + PHONE;
return databaseHelper.getReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
return databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
}
public @Nullable Cursor getNonSignalContacts() {
@ -2355,7 +2354,7 @@ public class RecipientDatabase extends Database {
String[] args = searchSelection.getArgs();
String orderBy = SYSTEM_JOINED_NAME + ", " + PHONE;
return databaseHelper.getReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
return databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
}
public @Nullable Cursor queryNonSignalContacts(@NonNull String query) {
@ -2370,7 +2369,7 @@ public class RecipientDatabase extends Database {
String[] args = searchSelection.getArgs();
String orderBy = SYSTEM_JOINED_NAME + ", " + PHONE;
return databaseHelper.getReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
return databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
}
public @Nullable Cursor getNonGroupContacts(boolean includeSelf) {
@ -2382,7 +2381,7 @@ public class RecipientDatabase extends Database {
String orderBy = orderByPreferringAlphaOverNumeric(SORT_NAME) + ", " + PHONE;
return databaseHelper.getReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, searchSelection.where, searchSelection.args, null, null, orderBy);
return databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, searchSelection.where, searchSelection.args, null, null, orderBy);
}
public @Nullable Cursor queryNonGroupContacts(@NonNull String query, boolean includeSelf) {
@ -2399,7 +2398,7 @@ public class RecipientDatabase extends Database {
String[] args = searchSelection.getArgs();
String orderBy = orderByPreferringAlphaOverNumeric(SORT_NAME) + ", " + PHONE;
return databaseHelper.getReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
return databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, orderBy);
}
public @Nullable Cursor queryAllContacts(@NonNull String query) {
@ -2414,7 +2413,7 @@ public class RecipientDatabase extends Database {
")";
String[] args = SqlUtil.buildArgs("0", query, query, query, query);
return databaseHelper.getReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, null);
return databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, SEARCH_PROJECTION, selection, args, null, null, null);
}
public @NonNull List<Recipient> queryRecipientsForMentions(@NonNull String query) {
@ -2434,7 +2433,7 @@ public class RecipientDatabase extends Database {
SORT_NAME + " GLOB ?";
List<Recipient> recipients = new ArrayList<>();
try (RecipientDatabase.RecipientReader reader = new RecipientReader(databaseHelper.getReadableDatabase().query(TABLE_NAME, MENTION_SEARCH_PROJECTION, selection, SqlUtil.buildArgs(query), null, null, SORT_NAME))) {
try (RecipientDatabase.RecipientReader reader = new RecipientReader(databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, MENTION_SEARCH_PROJECTION, selection, SqlUtil.buildArgs(query), null, null, SORT_NAME))) {
Recipient recipient;
while ((recipient = reader.getNext()) != null) {
recipients.add(recipient);
@ -2539,7 +2538,7 @@ public class RecipientDatabase extends Database {
List<Recipient> recipients = new ArrayList<>();
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, ID_PROJECTION, selection, args, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, ID_PROJECTION, selection, args, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
recipients.add(Recipient.resolved(RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(ID)))));
}
@ -2580,7 +2579,7 @@ public class RecipientDatabase extends Database {
}
public void markProfilesFetched(@NonNull Collection<RecipientId> ids, long time) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
ContentValues values = new ContentValues(1);
@ -2605,7 +2604,7 @@ public class RecipientDatabase extends Database {
.map(b -> b.getUuid().get().toString().toLowerCase())
.toList();
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -2644,7 +2643,7 @@ public class RecipientDatabase extends Database {
}
public void updateStorageIds(@NonNull Map<RecipientId, byte[]> ids) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -2677,7 +2676,7 @@ public class RecipientDatabase extends Database {
+ ")";
List<Long> idsToUpdate = new ArrayList<>();
try (Cursor cursor = databaseHelper.getReadableDatabase().rawQuery(select, whereArgs)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().rawQuery(select, whereArgs)) {
while (cursor.moveToNext()) {
idsToUpdate.add(CursorUtil.requireLong(cursor, ID));
}
@ -2687,7 +2686,7 @@ public class RecipientDatabase extends Database {
SqlUtil.Query query = SqlUtil.buildCollectionQuery(ID, idsToUpdate);
ContentValues values = new ContentValues(1);
values.put(PROFILE_SHARING, 1);
databaseHelper.getWritableDatabase().update(TABLE_NAME, values, query.getWhere(), query.getWhereArgs());
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, values, query.getWhere(), query.getWhereArgs());
for (long id : idsToUpdate) {
Recipient.live(RecipientId.from(id)).refresh();
@ -2701,7 +2700,7 @@ public class RecipientDatabase extends Database {
}
SqlUtil.Query query = SqlUtil.buildCollectionQuery(ID, recipientIds);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
try (Cursor cursor = db.query(TABLE_NAME,
new String[]{ID},
query.getWhere() + " AND " + GROUPS_IN_COMMON + " = 0",
@ -2734,7 +2733,7 @@ public class RecipientDatabase extends Database {
}
private void updateExtras(@NonNull RecipientId recipientId, @NonNull Function<RecipientExtras.Builder, RecipientExtras.Builder> updater) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
try (Cursor cursor = db.query(TABLE_NAME, new String[]{ID, EXTRAS}, ID_WHERE, SqlUtil.buildArgs(recipientId), null, null, null)) {
@ -2767,7 +2766,7 @@ public class RecipientDatabase extends Database {
String query = ID + " = ? AND (" + GROUP_TYPE + " IN (?, ?) OR " + REGISTERED + " = ?)";
String[] args = SqlUtil.buildArgs(recipientId, GroupType.SIGNAL_V1.getId(), GroupType.SIGNAL_V2.getId(), RegisteredState.REGISTERED.getId());
databaseHelper.getWritableDatabase().update(TABLE_NAME, values, query, args);
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, values, query, args);
}
/**
@ -2780,7 +2779,7 @@ public class RecipientDatabase extends Database {
String query = ID + " = ? AND " + STORAGE_SERVICE_ID + " IS NULL";
String[] args = SqlUtil.buildArgs(recipientId);
databaseHelper.getWritableDatabase().update(TABLE_NAME, values, query, args);
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, values, query, args);
}
/**
@ -2817,14 +2816,14 @@ public class RecipientDatabase extends Database {
* This will only return true if a row was *actually* updated with respect to the where clause of the {@param updateQuery}.
*/
private boolean update(@NonNull SqlUtil.Query updateQuery, @NonNull ContentValues contentValues) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
return database.update(TABLE_NAME, contentValues, updateQuery.getWhere(), updateQuery.getWhereArgs()) > 0;
}
private @NonNull
Optional<RecipientId> getByColumn(@NonNull String column, String value) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String query = column + " = ?";
String[] args = new String[] { value };
@ -2851,7 +2850,7 @@ public class RecipientDatabase extends Database {
values.put(column, value);
values.put(AVATAR_COLOR, AvatarColor.random().serialize());
long id = databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, values);
long id = databaseHelper.getSignalWritableDatabase().insert(TABLE_NAME, null, values);
if (id < 0) {
existing = getByColumn(column, value);
@ -2875,7 +2874,7 @@ public class RecipientDatabase extends Database {
private @NonNull RecipientId merge(@NonNull RecipientId byUuid, @NonNull RecipientId byE164) {
ensureInTransaction();
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
RecipientSettings uuidSettings = getRecipientSettings(byUuid);
RecipientSettings e164Settings = getRecipientSettings(byE164);
@ -3005,7 +3004,7 @@ public class RecipientDatabase extends Database {
}
private void ensureInTransaction() {
if (!databaseHelper.getWritableDatabase().inTransaction()) {
if (!databaseHelper.getSignalWritableDatabase().inTransaction()) {
throw new IllegalStateException("Must be in a transaction!");
}
}

Wyświetl plik

@ -2,11 +2,10 @@ package org.thoughtcrime.securesms.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import androidx.annotation.NonNull;
import net.sqlcipher.Cursor;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.CursorUtil;
@ -49,7 +48,7 @@ public class RemappedRecordsDatabase extends Database {
}
@NonNull Map<RecipientId, RecipientId> getAllRecipientMappings() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Map<RecipientId, RecipientId> recipientMap = new HashMap<>();
db.beginTransaction();
@ -71,7 +70,7 @@ public class RemappedRecordsDatabase extends Database {
}
@NonNull Map<Long, Long> getAllThreadMappings() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Map<Long, Long> threadMap = new HashMap<>();
db.beginTransaction();
@ -101,7 +100,7 @@ public class RemappedRecordsDatabase extends Database {
private @NonNull List<Mapping> getAllMappings(@NonNull String table) {
List<Mapping> mappings = new LinkedList<>();
try (Cursor cursor = databaseHelper.getReadableDatabase().query(table, null, null, null, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(table, null, null, null, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
long oldId = CursorUtil.requireLong(cursor, SharedColumns.OLD_ID);
long newId = CursorUtil.requireLong(cursor, SharedColumns.NEW_ID);
@ -117,7 +116,7 @@ public class RemappedRecordsDatabase extends Database {
values.put(SharedColumns.OLD_ID, mapping.getOldId());
values.put(SharedColumns.NEW_ID, mapping.getNewId());
databaseHelper.getWritableDatabase().insert(table, null, values);
databaseHelper.getSignalWritableDatabase().insert(table, null, values);
}
static final class Mapping {

Wyświetl plik

@ -2,22 +2,20 @@ package org.thoughtcrime.securesms.database;
import android.content.ContentValues;
import android.database.Cursor;
import net.sqlcipher.Cursor;
import net.sqlcipher.SQLException;
import net.sqlcipher.database.SQLiteQueryStats;
import net.sqlcipher.database.SQLiteStatement;
import net.sqlcipher.database.SQLiteTransactionListener;
import net.zetetic.database.SQLException;
import net.zetetic.database.sqlcipher.SQLiteStatement;
import net.zetetic.database.sqlcipher.SQLiteTransactionListener;
import org.signal.core.util.tracing.Tracer;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
/**
* This is a wrapper around {@link net.sqlcipher.database.SQLiteDatabase}. There's difficulties
* This is a wrapper around {@link net.zetetic.database.sqlcipher.SQLiteDatabase}. There's difficulties
* making a subclass, so instead we just match the interface. Callers should just need to change
* their import statements.
*/
@ -35,10 +33,11 @@ public class SQLiteDatabase {
private static final String KEY_THREAD = "thread";
private static final String NAME_LOCK = "LOCK";
private final net.sqlcipher.database.SQLiteDatabase wrapped;
private final Tracer tracer;
public SQLiteDatabase(net.sqlcipher.database.SQLiteDatabase wrapped) {
private final net.zetetic.database.sqlcipher.SQLiteDatabase wrapped;
private final Tracer tracer;
public SQLiteDatabase(net.zetetic.database.sqlcipher.SQLiteDatabase wrapped) {
this.wrapped = wrapped;
this.tracer = Tracer.getInstance();
}
@ -99,7 +98,7 @@ public class SQLiteDatabase {
return result;
}
public net.sqlcipher.database.SQLiteDatabase getSqlCipherDatabase() {
public net.zetetic.database.sqlcipher.SQLiteDatabase getSqlCipherDatabase() {
return wrapped;
}
@ -130,7 +129,7 @@ public class SQLiteDatabase {
return traceSql("query(9)", table, selection, false, () -> wrapped.query(distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit));
}
public Cursor queryWithFactory(net.sqlcipher.database.SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) {
public Cursor queryWithFactory(net.zetetic.database.sqlcipher.SQLiteDatabase.CursorFactory cursorFactory, boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) {
return traceSql("queryWithFactory()", table, selection, false, () -> wrapped.queryWithFactory(cursorFactory, distinct, table, columns, selection, selectionArgs, groupBy, having, orderBy, limit));
}
@ -150,7 +149,7 @@ public class SQLiteDatabase {
return traceSql("rawQuery(2b)", sql, false,() -> wrapped.rawQuery(sql, args));
}
public Cursor rawQueryWithFactory(net.sqlcipher.database.SQLiteDatabase.CursorFactory cursorFactory, String sql, String[] selectionArgs, String editTable) {
public Cursor rawQueryWithFactory(net.zetetic.database.sqlcipher.SQLiteDatabase.CursorFactory cursorFactory, String sql, String[] selectionArgs, String editTable) {
return traceSql("rawQueryWithFactory()", sql, false, () -> wrapped.rawQueryWithFactory(cursorFactory, sql, selectionArgs, editTable));
}
@ -283,10 +282,6 @@ public class SQLiteDatabase {
return wrapped.compileStatement(sql);
}
public SQLiteQueryStats getQueryStats(String sql, Object[] args) {
return wrapped.getQueryStats(sql, args);
}
public boolean isReadOnly() {
return wrapped.isReadOnly();
}
@ -306,24 +301,4 @@ public class SQLiteDatabase {
public void setLocale(Locale locale) {
wrapped.setLocale(locale);
}
public boolean isInCompiledSqlCache(String sql) {
return wrapped.isInCompiledSqlCache(sql);
}
public void purgeFromCompiledSqlCache(String sql) {
wrapped.purgeFromCompiledSqlCache(sql);
}
public void resetCompiledSqlCache() {
wrapped.resetCompiledSqlCache();
}
public int getMaxSqlCacheSize() {
return wrapped.getMaxSqlCacheSize();
}
public void setMaxSqlCacheSize(int cacheSize) {
wrapped.setMaxSqlCacheSize(cacheSize);
}
}

Wyświetl plik

@ -1,14 +1,13 @@
package org.thoughtcrime.securesms.database;
import android.content.Context;
import android.database.Cursor;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import net.sqlcipher.Cursor;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
/**
@ -126,7 +125,7 @@ public class SearchDatabase extends Database {
}
public Cursor queryMessages(@NonNull String query) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String fullTextSearchQuery = createFullTextSearchQuery(query);
if (TextUtils.isEmpty(fullTextSearchQuery)) {
@ -137,7 +136,7 @@ public class SearchDatabase extends Database {
}
public Cursor queryMessages(@NonNull String query, long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String fullTextSearchQuery = createFullTextSearchQuery(query);
if (TextUtils.isEmpty(fullTextSearchQuery)) {

Wyświetl plik

@ -50,7 +50,7 @@ public class SenderKeyDatabase extends Database {
}
public void store(@NonNull RecipientId recipientId, int deviceId, @NonNull DistributionId distributionId, @NonNull SenderKeyRecord record) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues();
values.put(RECIPIENT_ID, recipientId.serialize());
@ -63,7 +63,7 @@ public class SenderKeyDatabase extends Database {
}
public @Nullable SenderKeyRecord load(@NonNull RecipientId recipientId, int deviceId, @NonNull DistributionId distributionId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = RECIPIENT_ID + " = ? AND " + DEVICE + " = ? AND " + DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(recipientId, deviceId, distributionId);
@ -85,7 +85,7 @@ public class SenderKeyDatabase extends Database {
* Gets when the sender key session was created, or -1 if it doesn't exist.
*/
public long getCreatedTime(@NonNull RecipientId recipientId, int deviceId, @NonNull DistributionId distributionId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = RECIPIENT_ID + " = ? AND " + DEVICE + " = ? AND " + DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(recipientId, deviceId, distributionId);
@ -103,7 +103,7 @@ public class SenderKeyDatabase extends Database {
* Removes all sender key session state for all devices for the provided recipient-distributionId pair.
*/
public void deleteAllFor(@NonNull RecipientId recipientId, @NonNull DistributionId distributionId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String query = RECIPIENT_ID + " = ? AND " + DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(recipientId, distributionId);
@ -114,7 +114,7 @@ public class SenderKeyDatabase extends Database {
* Deletes all database state.
*/
public void deleteAll() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null);
}
}

Wyświetl plik

@ -49,7 +49,7 @@ public class SenderKeySharedDatabase extends Database {
* Mark that a distributionId has been shared with the provided recipients
*/
public void markAsShared(@NonNull DistributionId distributionId, @NonNull Collection<SignalProtocolAddress> addresses) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -72,7 +72,7 @@ public class SenderKeySharedDatabase extends Database {
* Get the set of recipientIds that know about the distributionId in question.
*/
public @NonNull Set<SignalProtocolAddress> getSharedWith(@NonNull DistributionId distributionId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(distributionId);
@ -94,7 +94,7 @@ public class SenderKeySharedDatabase extends Database {
* Clear the shared statuses for all provided addresses.
*/
public void delete(@NonNull DistributionId distributionId, @NonNull Collection<SignalProtocolAddress> addresses) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String query = DISTRIBUTION_ID + " = ? AND " + ADDRESS + " = ? AND " + DEVICE + " = ?";
db.beginTransaction();
@ -113,7 +113,7 @@ public class SenderKeySharedDatabase extends Database {
* Clear all shared statuses for a given distributionId.
*/
public void deleteAllFor(@NonNull DistributionId distributionId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, DISTRIBUTION_ID + " = ?", SqlUtil.buildArgs(distributionId));
}
@ -121,7 +121,7 @@ public class SenderKeySharedDatabase extends Database {
* Clear the shared status for all distributionIds for a set of addresses.
*/
public void deleteAllFor(@NonNull Collection<SignalProtocolAddress> addresses) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String query = ADDRESS + " = ? AND " + DEVICE + " = ?";
db.beginTransaction();
@ -140,7 +140,7 @@ public class SenderKeySharedDatabase extends Database {
* Clear the shared status for all distributionIds for a given recipientId.
*/
public void deleteAllFor(@NonNull RecipientId recipientId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
Recipient recipient = Recipient.resolved(recipientId);
if (recipient.hasUuid()) {
@ -154,7 +154,7 @@ public class SenderKeySharedDatabase extends Database {
* Clears all database content.
*/
public void deleteAll() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null);
}
}

Wyświetl plik

@ -42,7 +42,7 @@ public class SessionDatabase extends Database {
}
public void store(@NonNull RecipientId recipientId, int deviceId, @NonNull SessionRecord record) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues();
values.put(RECIPIENT_ID, recipientId.serialize());
@ -53,7 +53,7 @@ public class SessionDatabase extends Database {
}
public @Nullable SessionRecord load(@NonNull RecipientId recipientId, int deviceId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = database.query(TABLE_NAME, new String[]{RECORD},
RECIPIENT_ID + " = ? AND " + DEVICE + " = ?",
@ -73,7 +73,7 @@ public class SessionDatabase extends Database {
}
public @NonNull List<SessionRecord> load(@NonNull List<RecipientDevice> ids) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<SessionRecord> sessions = new ArrayList<>(ids.size());
database.beginTransaction();
@ -103,7 +103,7 @@ public class SessionDatabase extends Database {
}
public @NonNull List<SessionRow> getAllFor(@NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<SessionRow> results = new LinkedList<>();
try (Cursor cursor = database.query(TABLE_NAME, null,
@ -126,7 +126,7 @@ public class SessionDatabase extends Database {
}
public @NonNull List<SessionRow> getAll() {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<SessionRow> results = new LinkedList<>();
try (Cursor cursor = database.query(TABLE_NAME, null, null, null, null, null, null)) {
@ -145,7 +145,7 @@ public class SessionDatabase extends Database {
}
public @NonNull List<Integer> getSubDevices(@NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<Integer> results = new LinkedList<>();
try (Cursor cursor = database.query(TABLE_NAME, new String[] {DEVICE},
@ -166,19 +166,19 @@ public class SessionDatabase extends Database {
}
public void delete(@NonNull RecipientId recipientId, int deviceId) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, RECIPIENT_ID + " = ? AND " + DEVICE + " = ?",
new String[] {recipientId.serialize(), String.valueOf(deviceId)});
}
public void deleteAllFor(@NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, RECIPIENT_ID + " = ?", new String[] {recipientId.serialize()});
}
public boolean hasSessionFor(@NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = RECIPIENT_ID + " = ?";
String[] args = SqlUtil.buildArgs(recipientId);

Wyświetl plik

@ -2,11 +2,11 @@ package org.thoughtcrime.securesms.database;
import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
/**
* Simple interface for common methods across our various
* {@link net.sqlcipher.database.SQLiteOpenHelper}s.
* {@link net.zetetic.database.sqlcipher.SQLiteOpenHelper}s.
*/
public interface SignalDatabase {
SQLiteDatabase getSqlCipherDatabase();

Wyświetl plik

@ -48,7 +48,7 @@ public class SignedPreKeyDatabase extends Database {
}
public @Nullable SignedPreKeyRecord getSignedPreKey(int keyId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = database.query(TABLE_NAME, null, KEY_ID + " = ?",
new String[] {String.valueOf(keyId)},
@ -72,7 +72,7 @@ public class SignedPreKeyDatabase extends Database {
}
public @NonNull List<SignedPreKeyRecord> getAllSignedPreKeys() {
SQLiteDatabase database = databaseHelper.getReadableDatabase();
SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<SignedPreKeyRecord> results = new LinkedList<>();
try (Cursor cursor = database.query(TABLE_NAME, null, null, null, null, null, null)) {
@ -95,7 +95,7 @@ public class SignedPreKeyDatabase extends Database {
}
public void insertSignedPreKey(int keyId, SignedPreKeyRecord record) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(KEY_ID, keyId);
@ -109,7 +109,7 @@ public class SignedPreKeyDatabase extends Database {
public void removeSignedPreKey(int keyId) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, KEY_ID + " = ? AND " + SIGNATURE + " IS NOT NULL", new String[] {String.valueOf(keyId)});
}

Wyświetl plik

@ -28,7 +28,7 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import com.google.android.mms.pdu_alt.NotificationInd;
import net.sqlcipher.database.SQLiteStatement;
import net.zetetic.database.sqlcipher.SQLiteStatement;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
@ -176,7 +176,7 @@ public class SmsDatabase extends MessageDatabase {
}
private void updateTypeBitmask(long id, long maskOff, long maskOn) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.execSQL("UPDATE " + TABLE_NAME +
" SET " + TYPE + " = (" + TYPE + " & " + (Types.TOTAL_MASK - maskOff) + " | " + maskOn + " )" +
" WHERE " + ID + " = ?", SqlUtil.buildArgs(id));
@ -190,7 +190,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public @Nullable RecipientId getOldestGroupUpdateSender(long threadId, long minimumDateReceived) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] columns = new String[]{RECIPIENT_ID};
String query = THREAD_ID + " = ? AND " + TYPE + " & ? AND " + DATE_RECEIVED + " >= ?";
@ -209,7 +209,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public long getThreadIdForMessage(long id) {
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, THREAD_ID_PROJECTION, ID_WHERE, SqlUtil.buildArgs(id), null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, THREAD_ID_PROJECTION, ID_WHERE, SqlUtil.buildArgs(id), null, null, null)) {
if (cursor.moveToFirst()) {
return CursorUtil.requireLong(cursor, THREAD_ID);
}
@ -219,7 +219,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public int getMessageCountForThread(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.query(TABLE_NAME, COUNT, THREAD_ID_WHERE, SqlUtil.buildArgs(threadId), null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
@ -232,7 +232,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public int getMessageCountForThread(long threadId, long beforeTime) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] cols = new String[] {"COUNT(*)"};
String query = THREAD_ID + " = ? AND " + DATE_RECEIVED + " < ?";
@ -249,7 +249,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public boolean hasMeaningfulMessage(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
SqlUtil.Query query = buildMeaningfulMessagesQuery(threadId);
try (Cursor cursor = db.query(TABLE_NAME, new String[] { "1" }, query.getWhere(), query.getWhereArgs(), null, null, null, "1")) {
@ -304,7 +304,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public void clearRateLimitStatus(@NonNull Collection<Long> ids) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -375,7 +375,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public void markAsRemoteDelete(long id) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long threadId;
@ -404,7 +404,7 @@ public class SmsDatabase extends MessageDatabase {
ContentValues contentValues = new ContentValues(1);
contentValues.put(UNIDENTIFIED, unidentified ? 1 : 0);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {String.valueOf(id)});
}
@ -420,7 +420,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public void markExpireStarted(Collection<Long> ids, long startedAtTimestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long threadId = -1;
db.beginTransaction();
@ -453,7 +453,7 @@ public class SmsDatabase extends MessageDatabase {
ContentValues contentValues = new ContentValues();
contentValues.put(STATUS, status);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {id+""});
long threadId = getThreadIdForMessage(id);
@ -468,7 +468,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public void markAsNotified(long id) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(NOTIFIED, 1);
@ -483,7 +483,7 @@ public class SmsDatabase extends MessageDatabase {
return Collections.emptySet();
}
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
Set<ThreadUpdate> threadUpdates = new HashSet<>();
try (Cursor cursor = database.query(TABLE_NAME, new String[] {ID, THREAD_ID, RECIPIENT_ID, TYPE, DELIVERY_RECEIPT_COUNT, READ_RECEIPT_COUNT},
@ -520,7 +520,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public List<Pair<Long, Long>> setTimestampRead(SyncMessageId messageId, long proposedExpireStarted, @NonNull Map<Long, Long> threadToLatestRead) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
List<Pair<Long, Long>> expiring = new LinkedList<>();
Cursor cursor = null;
@ -588,7 +588,7 @@ public class SmsDatabase extends MessageDatabase {
}
private List<MarkedMessageInfo> setMessagesRead(String where, String[] arguments) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
List<MarkedMessageInfo> results = new LinkedList<>();
Cursor cursor = null;
@ -648,7 +648,7 @@ public class SmsDatabase extends MessageDatabase {
}
private InsertResult updateMessageBodyAndType(long messageId, String body, long maskOff, long maskOn) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.execSQL("UPDATE " + TABLE_NAME + " SET " + BODY + " = ?, " +
TYPE + " = (" + TYPE + " & " + (Types.TOTAL_MASK - maskOff) + " | " + maskOn + ") " +
"WHERE " + ID + " = ?",
@ -665,7 +665,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public boolean hasReceivedAnyCallsSince(long threadId, long timestamp) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = SqlUtil.buildArgs(SmsDatabase.TYPE);
String selection = THREAD_ID + " = ? AND " + DATE_RECEIVED + " > ? AND (" + TYPE + " = ? OR " + TYPE + " = ? OR " + TYPE + " = ? OR " + TYPE + " =?)";
String[] selectionArgs = SqlUtil.buildArgs(threadId,
@ -703,7 +703,7 @@ public class SmsDatabase extends MessageDatabase {
@NonNull Collection<UUID> peekJoinedUuids,
boolean isCallFull)
{
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
Recipient recipient = Recipient.resolved(groupRecipientId);
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
boolean peerEraIdSameAsPrevious = updatePreviousGroupCall(threadId, peekGroupCallEraId, peekJoinedUuids, isCallFull);
@ -758,7 +758,7 @@ public class SmsDatabase extends MessageDatabase {
long timestamp,
@Nullable String messageGroupCallEraId)
{
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long threadId;
@ -831,7 +831,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public boolean updatePreviousGroupCall(long threadId, @Nullable String peekGroupCallEraId, @NonNull Collection<UUID> peekJoinedUuids, boolean isCallFull) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = TYPE + " = ? AND " + THREAD_ID + " = ?";
String[] args = SqlUtil.buildArgs(Types.GROUP_CALL_TYPE, threadId);
boolean sameEraId = false;
@ -883,7 +883,7 @@ public class SmsDatabase extends MessageDatabase {
values.put(TYPE, type);
values.put(THREAD_ID, threadId);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long messageId = db.insert(TABLE_NAME, null, values);
DatabaseFactory.getThreadDatabase(context).update(threadId, true);
@ -899,7 +899,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public Set<Long> getAllRateLimitedMessageIds() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String where = "(" + TYPE + " & " + Types.TOTAL_MASK + " & " + Types.MESSAGE_RATE_LIMITED_BIT + ") > 0";
Set<Long> ids = new HashSet<>();
@ -943,7 +943,7 @@ public class SmsDatabase extends MessageDatabase {
String body = Base64.encodeBytes(profileChangeDetails);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -1018,7 +1018,7 @@ public class SmsDatabase extends MessageDatabase {
values.put(BODY, membershipChange.serialize());
}
databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, values);
databaseHelper.getSignalWritableDatabase().insert(TABLE_NAME, null, values);
}
@Override
@ -1101,7 +1101,7 @@ public class SmsDatabase extends MessageDatabase {
Log.w(TAG, "Duplicate message (" + message.getSentTimestampMillis() + "), ignoring...");
return Optional.absent();
} else {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long messageId = db.insert(TABLE_NAME, null, values);
if (unread) {
@ -1133,7 +1133,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public @NonNull InsertResult insertChatSessionRefreshedMessage(@NonNull RecipientId recipientId, long senderDeviceId, long sentTimestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(Recipient.resolved(recipientId));
long type = Types.SECURE_MESSAGE_BIT | Types.PUSH_MESSAGE_BIT;
@ -1173,7 +1173,7 @@ public class SmsDatabase extends MessageDatabase {
values.put(TYPE, Types.BAD_DECRYPT_TYPE);
values.put(THREAD_ID, threadId);
databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, values);
databaseHelper.getSignalWritableDatabase().insert(TABLE_NAME, null, values);
DatabaseFactory.getThreadDatabase(context).incrementUnread(threadId, 1);
DatabaseFactory.getThreadDatabase(context).update(threadId, true);
@ -1212,7 +1212,7 @@ public class SmsDatabase extends MessageDatabase {
contentValues.put(EXPIRES_IN, message.getExpiresIn());
contentValues.put(DELIVERY_RECEIPT_COUNT, Stream.of(earlyDeliveryReceipts.values()).mapToLong(Long::longValue).sum());
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long messageId = db.insert(TABLE_NAME, null, contentValues);
if (insertListener != null) {
@ -1240,13 +1240,13 @@ public class SmsDatabase extends MessageDatabase {
@Override
public Cursor getExpirationStartedMessages() {
String where = EXPIRE_STARTED + " > 0";
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
return db.query(TABLE_NAME, MESSAGE_PROJECTION, where, null, null, null, null);
}
@Override
public SmsMessageRecord getSmsMessage(long messageId) throws NoSuchMessageException {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, MESSAGE_PROJECTION, ID_WHERE, new String[]{messageId + ""}, null, null, null);
Reader reader = new Reader(cursor);
SmsMessageRecord record = reader.getNext();
@ -1266,7 +1266,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public Cursor getMessageCursor(long messageId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
return db.query(TABLE_NAME, MESSAGE_PROJECTION, ID_WHERE, new String[] {messageId + ""}, null, null, null);
}
@ -1274,7 +1274,7 @@ public class SmsDatabase extends MessageDatabase {
public boolean deleteMessage(long messageId) {
Log.d(TAG, "deleteMessage(" + messageId + ")");
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long threadId;
boolean threadDeleted;
@ -1299,7 +1299,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public void ensureMigration() {
databaseHelper.getWritableDatabase();
databaseHelper.getSignalWritableDatabase();
}
@Override
@ -1317,7 +1317,7 @@ public class SmsDatabase extends MessageDatabase {
}
private boolean isDuplicate(IncomingTextMessage message, long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = DATE_SENT + " = ? AND " + RECIPIENT_ID + " = ? AND " + THREAD_ID + " = ?";
String[] args = SqlUtil.buildArgs(message.getSentTimestampMillis(), message.getSender().serialize(), threadId);
@ -1329,14 +1329,14 @@ public class SmsDatabase extends MessageDatabase {
@Override
void deleteThread(long threadId) {
Log.d(TAG, "deleteThread(" + threadId + ")");
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, THREAD_ID + " = ?", new String[] {threadId+""});
}
@Override
int deleteMessagesInThreadBeforeDate(long threadId, long date) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = THREAD_ID + " = ? AND " + DATE_RECEIVED + " < " + date;
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId));
@ -1344,7 +1344,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
void deleteAbandonedMessages() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadDatabase.TABLE_NAME + ")";
int deletes = db.delete(TABLE_NAME, where, null);
@ -1371,7 +1371,7 @@ public class SmsDatabase extends MessageDatabase {
}
private Cursor queryMessages(@NonNull String where, @NonNull String[] args, boolean reverse, long limit) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
return db.query(TABLE_NAME,
MESSAGE_PROJECTION,
@ -1387,7 +1387,7 @@ public class SmsDatabase extends MessageDatabase {
void deleteThreads(@NonNull Set<Long> threadIds) {
Log.d(TAG, "deleteThreads(count: " + threadIds.size() + ")");
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = "";
for (long threadId : threadIds) {
@ -1402,20 +1402,20 @@ public class SmsDatabase extends MessageDatabase {
@Override
void deleteAllThreads() {
Log.d(TAG, "deleteAllThreads()");
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null);
}
@Override
public SQLiteDatabase beginTransaction() {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.beginTransaction();
return database;
}
@Override
public void setTransactionSuccessful() {
databaseHelper.getWritableDatabase().setTransactionSuccessful();
databaseHelper.getSignalWritableDatabase().setTransactionSuccessful();
}
@Override
@ -1426,7 +1426,7 @@ public class SmsDatabase extends MessageDatabase {
@Override
public void endTransaction() {
databaseHelper.getWritableDatabase().endTransaction();
databaseHelper.getSignalWritableDatabase().endTransaction();
}
@Override

Wyświetl plik

@ -25,7 +25,7 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import net.sqlcipher.database.SQLiteStatement;
import net.zetetic.database.sqlcipher.SQLiteStatement;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.groups.GroupId;

Wyświetl plik

@ -1,7 +1,7 @@
package org.thoughtcrime.securesms.database;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteDatabaseHook;
import net.zetetic.database.sqlcipher.SQLiteConnection;
import net.zetetic.database.sqlcipher.SQLiteDatabaseHook;
/**
* Standard hook for setting common SQLCipher PRAGMAs.
@ -9,18 +9,16 @@ import net.sqlcipher.database.SQLiteDatabaseHook;
public class SqlCipherDatabaseHook implements SQLiteDatabaseHook {
@Override
public void preKey(SQLiteDatabase db) {
db.rawExecSQL("PRAGMA cipher_default_kdf_iter = 1;");
db.rawExecSQL("PRAGMA cipher_default_page_size = 4096;");
public void preKey(SQLiteConnection connection) {
connection.execute("PRAGMA cipher_default_kdf_iter = 1;", null, null);
connection.execute("PRAGMA cipher_default_page_size = 4096;", null, null);
}
@Override
public void postKey(SQLiteDatabase db) {
db.rawExecSQL("PRAGMA cipher_compatibility = 3;");
db.rawExecSQL("PRAGMA cipher_memory_security = OFF;");
db.rawExecSQL("PRAGMA kdf_iter = '1';");
db.rawExecSQL("PRAGMA cipher_page_size = 4096;");
db.enableWriteAheadLogging();
db.setForeignKeyConstraintsEnabled(true);
public void postKey(SQLiteConnection connection) {
connection.execute("PRAGMA cipher_compatibility = 3;", null, null);
connection.execute("PRAGMA cipher_memory_security = OFF;", null, null);
connection.execute("PRAGMA kdf_iter = '1';", null, null);
connection.execute("PRAGMA cipher_page_size = 4096;", null, null);
}
}

Wyświetl plik

@ -4,8 +4,8 @@ import android.database.Cursor;
import androidx.annotation.NonNull;
import net.sqlcipher.DatabaseErrorHandler;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.DatabaseErrorHandler;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.util.CursorUtil;

Wyświetl plik

@ -1,7 +1,6 @@
package org.thoughtcrime.securesms.database
import android.content.Context
import net.sqlcipher.database.SQLiteDatabase
/**
* A simple wrapper to load SQLCipher libs exactly once. The exact entry point of database access is non-deterministic because content providers run before
@ -19,7 +18,7 @@ class SqlCipherLibraryLoader {
if (!loaded) {
synchronized(LOCK) {
if (!loaded) {
SQLiteDatabase.loadLibs(context)
System.loadLibrary("sqlcipher")
loaded = true
}
}

Wyświetl plik

@ -103,12 +103,12 @@ public class StickerDatabase extends Database {
contentValues.put(FILE_LENGTH, fileInfo.getLength());
contentValues.put(FILE_RANDOM, fileInfo.getRandom());
long id = databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, contentValues);
long id = databaseHelper.getSignalWritableDatabase().insert(TABLE_NAME, null, contentValues);
if (id == -1) {
String selection = PACK_ID + " = ? AND " + STICKER_ID + " = ? AND " + COVER + " = ?";
String[] args = SqlUtil.buildArgs(sticker.getPackId(), sticker.getStickerId(), (sticker.isCover() ? 1 : 0));
id = databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, selection, args);
id = databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues, selection, args);
}
if (id > 0) {
@ -128,7 +128,7 @@ public class StickerDatabase extends Database {
String selection = PACK_ID + " = ? AND " + STICKER_ID + " = ? AND " + COVER + " = ?";
String[] args = new String[] { packId, String.valueOf(stickerId), String.valueOf(isCover ? 1 : 0) };
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, "1")) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, "1")) {
return new StickerRecordReader(cursor).getNext();
}
}
@ -137,7 +137,7 @@ public class StickerDatabase extends Database {
String query = PACK_ID + " = ? AND " + COVER + " = ?";
String[] args = new String[] { packId, "1" };
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, query, args, null, null, null, "1")) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, query, args, null, null, null, "1")) {
return new StickerPackRecordReader(cursor).getNext();
}
}
@ -145,7 +145,7 @@ public class StickerDatabase extends Database {
public @Nullable Cursor getInstalledStickerPacks() {
String selection = COVER + " = ? AND " + INSTALLED + " = ?";
String[] args = new String[] { "1", "1" };
Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, PACK_ORDER + " ASC");
Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, PACK_ORDER + " ASC");
setNotifyStickerPackListeners(cursor);
return cursor;
@ -155,7 +155,7 @@ public class StickerDatabase extends Database {
String selection = EMOJI + " LIKE ? AND " + COVER + " = ?";
String[] args = new String[] { "%"+emoji+"%", "0" };
Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, null);
Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, null);
setNotifyStickerListeners(cursor);
return cursor;
@ -168,14 +168,14 @@ public class StickerDatabase extends Database {
public @Nullable Cursor getAllStickerPacks(@Nullable String limit) {
String query = COVER + " = ?";
String[] args = new String[] { "1" };
Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, query, args, null, null, PACK_ORDER + " ASC", limit);
Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, query, args, null, null, PACK_ORDER + " ASC", limit);
setNotifyStickerPackListeners(cursor);
return cursor;
}
public @Nullable Cursor getStickersForPack(@NonNull String packId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String selection = PACK_ID + " = ? AND " + COVER + " = ?";
String[] args = new String[] { packId, "0" };
@ -186,7 +186,7 @@ public class StickerDatabase extends Database {
}
public @Nullable Cursor getRecentlyUsedStickers(int limit) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String selection = LAST_USED + " > ? AND " + COVER + " = ?";
String[] args = new String[] { "0", "0" };
@ -197,7 +197,7 @@ public class StickerDatabase extends Database {
}
public @NonNull Set<String> getAllStickerFiles() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Set<String> files = new HashSet<>();
try (Cursor cursor = db.query(TABLE_NAME, new String[] { FILE_PATH }, null, null, null, null, null)) {
@ -213,7 +213,7 @@ public class StickerDatabase extends Database {
String selection = _ID + " = ?";
String[] args = new String[] { String.valueOf(rowId) };
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, selection, args, null, null, null)) {
if (cursor != null && cursor.moveToNext()) {
String path = cursor.getString(cursor.getColumnIndexOrThrow(FILE_PATH));
byte[] random = cursor.getBlob(cursor.getColumnIndexOrThrow(FILE_RANDOM));
@ -248,19 +248,19 @@ public class StickerDatabase extends Database {
values.put(LAST_USED, lastUsed);
databaseHelper.getWritableDatabase().update(TABLE_NAME, values, selection, args);
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, values, selection, args);
notifyStickerListeners();
notifyStickerPackListeners();
}
public void markPackAsInstalled(@NonNull String packKey, boolean notify) {
updatePackInstalled(databaseHelper.getWritableDatabase(), packKey, true, notify);
updatePackInstalled(databaseHelper.getSignalWritableDatabase(), packKey, true, notify);
notifyStickerPackListeners();
}
public void deleteOrphanedPacks() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String query = "SELECT " + PACK_ID + " FROM " + TABLE_NAME + " WHERE " + INSTALLED + " = ? AND " +
PACK_ID + " NOT IN (" +
"SELECT DISTINCT " + AttachmentDatabase.STICKER_PACK_ID + " FROM " + AttachmentDatabase.TABLE_NAME + " " +
@ -296,7 +296,7 @@ public class StickerDatabase extends Database {
}
public void uninstallPack(@NonNull String packId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -312,7 +312,7 @@ public class StickerDatabase extends Database {
}
public void updatePackOrder(@NonNull List<StickerPackRecord> packsInOrder) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {

Wyświetl plik

@ -176,7 +176,7 @@ public class ThreadDatabase extends Database {
contentValues.put(MEANINGFUL_MESSAGES, 0);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long result = db.insert(TABLE_NAME, null, contentValues);
Recipient.live(recipientId).refresh();
@ -212,7 +212,7 @@ public class ThreadDatabase extends Database {
contentValues.put(READ_RECEIPT_COUNT, readReceiptCount);
contentValues.put(EXPIRES_IN, expiresIn);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.update(TABLE_NAME, contentValues, ID_WHERE, SqlUtil.buildArgs(threadId));
if (unarchive) {
@ -243,7 +243,7 @@ public class ThreadDatabase extends Database {
contentValues.put(ARCHIVED, 0);
}
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.update(TABLE_NAME, contentValues, ID + " = ?", new String[] {threadId + ""});
notifyConversationListListeners();
}
@ -253,14 +253,14 @@ public class ThreadDatabase extends Database {
return;
}
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
MentionDatabase mentionDatabase = DatabaseFactory.getMentionDatabase(context);
int deletes = 0;
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, new String[] { ID }, null, null, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, new String[] { ID }, null, null, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
trimThreadInternal(CursorUtil.requireLong(cursor, ID), length, trimBeforeDate);
}
@ -293,7 +293,7 @@ public class ThreadDatabase extends Database {
return;
}
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
@ -354,7 +354,7 @@ public class ThreadDatabase extends Database {
}
public List<MarkedMessageInfo> setAllThreadsRead() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues(1);
contentValues.put(READ, ReadStatus.READ.serialize());
contentValues.put(UNREAD_COUNT, 0);
@ -402,7 +402,7 @@ public class ThreadDatabase extends Database {
}
public List<MarkedMessageInfo> setReadSince(Map<Long, Long> threadIdToSinceTimestamp, boolean lastSeen) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
List<MarkedMessageInfo> smsRecords = new LinkedList<>();
List<MarkedMessageInfo> mmsRecords = new LinkedList<>();
@ -458,7 +458,7 @@ public class ThreadDatabase extends Database {
}
public void setForcedUnread(@NonNull Collection<Long> threadIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
List<RecipientId> recipientIds = Collections.emptyList();
db.beginTransaction();
@ -488,7 +488,7 @@ public class ThreadDatabase extends Database {
public void incrementUnread(long threadId, int amount) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.execSQL("UPDATE " + TABLE_NAME + " SET " +
READ + " = " + ReadStatus.UNREAD.serialize() + ", " +
UNREAD_COUNT + " = " + UNREAD_COUNT + " + ?, " +
@ -501,13 +501,13 @@ public class ThreadDatabase extends Database {
ContentValues contentValues = new ContentValues(1);
contentValues.put(TYPE, distributionType);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {threadId + ""});
notifyConversationListListeners();
}
public int getDistributionType(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[]{TYPE}, ID_WHERE, new String[]{String.valueOf(threadId)}, null, null, null);
try {
@ -526,7 +526,7 @@ public class ThreadDatabase extends Database {
if (filter == null || filter.size() == 0)
return null;
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<List<RecipientId>> splitRecipientIds = Util.partition(filter, 900);
List<Cursor> cursors = new LinkedList<>();
@ -555,7 +555,7 @@ public class ThreadDatabase extends Database {
}
public Cursor getRecentConversationList(int limit, boolean includeInactiveGroups, boolean groupsOnly, boolean hideV1Groups, boolean hideSms) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = !includeInactiveGroups ? MEANINGFUL_MESSAGES + " != 0 AND (" + GroupDatabase.TABLE_NAME + "." + GroupDatabase.ACTIVE + " IS NULL OR " + GroupDatabase.TABLE_NAME + "." + GroupDatabase.ACTIVE + " = 1)"
: MEANINGFUL_MESSAGES + " != 0";
@ -579,7 +579,7 @@ public class ThreadDatabase extends Database {
}
public Cursor getRecentPushConversationList(int limit, boolean includeInactiveGroups) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String activeGroupQuery = !includeInactiveGroups ? " AND " + GroupDatabase.TABLE_NAME + "." + GroupDatabase.ACTIVE + " = 1" : "";
String where = MEANINGFUL_MESSAGES + " != 0 AND " +
"(" +
@ -596,7 +596,7 @@ public class ThreadDatabase extends Database {
}
public @NonNull List<ThreadRecord> getRecentV1Groups(int limit) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String where = MEANINGFUL_MESSAGES + " != 0 AND " +
"(" +
GroupDatabase.TABLE_NAME + "." + GroupDatabase.ACTIVE + " = 1 AND " +
@ -622,7 +622,7 @@ public class ThreadDatabase extends Database {
}
public boolean isArchived(@NonNull RecipientId recipientId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = RECIPIENT_ID + " = ?";
String[] args = new String[]{ recipientId.serialize() };
@ -636,7 +636,7 @@ public class ThreadDatabase extends Database {
}
public void setArchived(Set<Long> threadIds, boolean archive) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<RecipientId> recipientIds = Collections.emptyList();
db.beginTransaction();
@ -681,7 +681,7 @@ public class ThreadDatabase extends Database {
}
public @NonNull Map<RecipientId, Integer> getInboxPositions() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = createQuery(MEANINGFUL_MESSAGES + " != ?", 0);
Map<RecipientId, Integer> positions = new HashMap<>();
@ -707,7 +707,7 @@ public class ThreadDatabase extends Database {
}
public Cursor getUnarchivedConversationList(boolean pinned, long offset, long limit) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String pinnedWhere = PINNED + (pinned ? " != 0" : " = 0");
String where = ARCHIVED + " = 0 AND " + MEANINGFUL_MESSAGES + " != 0 AND " + pinnedWhere;
@ -725,7 +725,7 @@ public class ThreadDatabase extends Database {
}
private Cursor getConversationList(@NonNull String archived, long offset, long limit) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = createQuery(ARCHIVED + " = ? AND " + MEANINGFUL_MESSAGES + " != 0", offset, limit, false);
Cursor cursor = db.rawQuery(query, new String[]{archived});
@ -733,7 +733,7 @@ public class ThreadDatabase extends Database {
}
public int getArchivedConversationListCount() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] columns = new String[] { "COUNT(*)" };
String query = ARCHIVED + " = ? AND " + MEANINGFUL_MESSAGES + " != 0";
String[] args = new String[] {"1"};
@ -748,7 +748,7 @@ public class ThreadDatabase extends Database {
}
public int getPinnedConversationListCount() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] columns = new String[] { "COUNT(*)" };
String query = ARCHIVED + " = 0 AND " + PINNED + " != 0 AND " + MEANINGFUL_MESSAGES + " != 0";
@ -762,7 +762,7 @@ public class ThreadDatabase extends Database {
}
public int getUnarchivedConversationListCount() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] columns = new String[] { "COUNT(*)" };
String query = ARCHIVED + " = 0 AND " + MEANINGFUL_MESSAGES + " != 0";
@ -811,7 +811,7 @@ public class ThreadDatabase extends Database {
* @return Pinned recipients, in order from top to bottom.
*/
private @NonNull Cursor getPinned(String[] projection) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = PINNED + " > ?";
String[] args = SqlUtil.buildArgs(0);
@ -829,7 +829,7 @@ public class ThreadDatabase extends Database {
}
private void pinConversations(@NonNull Collection<Long> threadIds, boolean clearFirst) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
threadIds = new LinkedHashSet<>(threadIds);
try {
@ -870,7 +870,7 @@ public class ThreadDatabase extends Database {
}
public void unpinConversations(@NonNull Set<Long> threadIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues(1);
String placeholders = StringUtil.join(Stream.of(threadIds).map(unused -> "?").toList(), ",");
String selection = ID + " IN (" + placeholders + ")";
@ -898,7 +898,7 @@ public class ThreadDatabase extends Database {
}
void setLastSeenSilently(long threadId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues(1);
contentValues.put(LAST_SEEN, System.currentTimeMillis());
@ -906,7 +906,7 @@ public class ThreadDatabase extends Database {
}
public void setLastScrolled(long threadId, long lastScrolledTimestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues(1);
contentValues.put(LAST_SCROLLED, lastScrolledTimestamp);
@ -915,7 +915,7 @@ public class ThreadDatabase extends Database {
}
public ConversationMetadata getConversationMetadata(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.query(TABLE_NAME, new String[]{LAST_SEEN, HAS_SENT, LAST_SCROLLED}, ID_WHERE, new String[]{String.valueOf(threadId)}, null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
@ -929,7 +929,7 @@ public class ThreadDatabase extends Database {
}
public void deleteConversation(long threadId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
RecipientId recipientIdForThreadId = getRecipientIdForThreadId(threadId);
db.beginTransaction();
@ -951,7 +951,7 @@ public class ThreadDatabase extends Database {
}
public void deleteConversations(Set<Long> selectedConversations) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
List<RecipientId> recipientIdsForThreadIds = getRecipientIdsForThreadIds(selectedConversations);
db.beginTransaction();
@ -982,7 +982,7 @@ public class ThreadDatabase extends Database {
}
public void deleteAllConversations() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -1003,7 +1003,7 @@ public class ThreadDatabase extends Database {
}
public long getThreadIdIfExistsFor(@NonNull RecipientId recipientId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String where = RECIPIENT_ID + " = ?";
String[] recipientsArg = new String[] {recipientId.serialize()};
@ -1017,8 +1017,8 @@ public class ThreadDatabase extends Database {
}
public Map<RecipientId, Long> getThreadIdsIfExistsFor(@NonNull RecipientId ... recipientIds) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SqlUtil.Query query = SqlUtil.buildCollectionQuery(RECIPIENT_ID, Arrays.asList(recipientIds));
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
SqlUtil.Query query = SqlUtil.buildCollectionQuery(RECIPIENT_ID, Arrays.asList(recipientIds));
Map<RecipientId, Long> results = new HashMap<>();
try (Cursor cursor = db.query(TABLE_NAME, new String[]{ ID, RECIPIENT_ID }, query.getWhere(), query.getWhereArgs(), null, null, null, "1")) {
@ -1062,7 +1062,7 @@ public class ThreadDatabase extends Database {
}
public @Nullable Long getThreadIdFor(@NonNull RecipientId recipientId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String where = RECIPIENT_ID + " = ?";
String[] recipientsArg = new String[]{recipientId.serialize()};
@ -1076,7 +1076,7 @@ public class ThreadDatabase extends Database {
}
public @Nullable RecipientId getRecipientIdForThreadId(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = db.query(TABLE_NAME, RECIPIENT_ID_PROJECTION, ID_WHERE, SqlUtil.buildArgs(threadId), null, null, null)) {
@ -1095,7 +1095,7 @@ public class ThreadDatabase extends Database {
}
public @NonNull List<RecipientId> getRecipientIdsForThreadIds(Collection<Long> threadIds) {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
SqlUtil.Query query = SqlUtil.buildCollectionQuery(ID, threadIds);
List<RecipientId> ids = new ArrayList<>(threadIds.size());
@ -1116,7 +1116,7 @@ public class ThreadDatabase extends Database {
ContentValues contentValues = new ContentValues(1);
contentValues.put(HAS_SENT, hasSent ? 1 : 0);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, ID_WHERE,
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues, ID_WHERE,
new String[] {String.valueOf(threadId)});
}
@ -1128,7 +1128,7 @@ public class ThreadDatabase extends Database {
contentValues.put(READ, unreadCount == 0 ? ReadStatus.READ.serialize() : ReadStatus.UNREAD.serialize());
contentValues.put(UNREAD_COUNT, unreadCount);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, ID_WHERE, SqlUtil.buildArgs(threadId));
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues, ID_WHERE, SqlUtil.buildArgs(threadId));
notifyConversationListListeners();
@ -1151,7 +1151,7 @@ public class ThreadDatabase extends Database {
}
public void applyStorageSyncUpdate(@NonNull RecipientId recipientId, @NonNull SignalAccountRecord record) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -1221,7 +1221,7 @@ public class ThreadDatabase extends Database {
}
}
databaseHelper.getWritableDatabase().update(TABLE_NAME, values, RECIPIENT_ID + " = ?", SqlUtil.buildArgs(recipientId));
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, values, RECIPIENT_ID + " = ?", SqlUtil.buildArgs(recipientId));
if (threadId != null) {
notifyConversationListeners(threadId);
@ -1298,7 +1298,7 @@ public class ThreadDatabase extends Database {
ContentValues contentValues = new ContentValues(1);
contentValues.put(SNIPPET_TYPE, type);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, ID_WHERE, SqlUtil.buildArgs(threadId));
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues, ID_WHERE, SqlUtil.buildArgs(threadId));
}
public @NonNull ThreadRecord getThreadRecordFor(@NonNull Recipient recipient) {
@ -1306,7 +1306,7 @@ public class ThreadDatabase extends Database {
}
public @NonNull Set<RecipientId> getAllThreadRecipients() {
SQLiteDatabase db = databaseHelper.getReadableDatabase();
SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Set<RecipientId> ids = new HashSet<>();
@ -1321,7 +1321,7 @@ public class ThreadDatabase extends Database {
@NonNull MergeResult merge(@NonNull RecipientId primaryRecipientId, @NonNull RecipientId secondaryRecipientId) {
if (!databaseHelper.getWritableDatabase().inTransaction()) {
if (!databaseHelper.getSignalWritableDatabase().inTransaction()) {
throw new IllegalStateException("Must be in a transaction!");
}
@ -1339,7 +1339,7 @@ public class ThreadDatabase extends Database {
ContentValues values = new ContentValues();
values.put(RECIPIENT_ID, primaryRecipientId.serialize());
databaseHelper.getWritableDatabase().update(TABLE_NAME, values, ID_WHERE, SqlUtil.buildArgs(secondary.getThreadId()));
databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, values, ID_WHERE, SqlUtil.buildArgs(secondary.getThreadId()));
return new MergeResult(secondary.getThreadId(), -1, false);
} else if (primary == null && secondary == null) {
Log.w(TAG, "[merge] No thread for either.");
@ -1347,7 +1347,7 @@ public class ThreadDatabase extends Database {
} else {
Log.w(TAG, "[merge] Had a thread for both. Deleting the secondary and merging the attributes together.", true);
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, ID_WHERE, SqlUtil.buildArgs(secondary.getThreadId()));
@ -1386,7 +1386,7 @@ public class ThreadDatabase extends Database {
String query = createQuery(TABLE_NAME + "." + ID + " = ?", 1);
try (Cursor cursor = databaseHelper.getReadableDatabase().rawQuery(query, SqlUtil.buildArgs(threadId))) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().rawQuery(query, SqlUtil.buildArgs(threadId))) {
if (cursor != null && cursor.moveToFirst()) {
return readerFor(cursor).getCurrent();
}

Wyświetl plik

@ -15,13 +15,10 @@ import org.thoughtcrime.securesms.util.SqlUtil;
import org.whispersystems.libsignal.util.guava.Preconditions;
import org.whispersystems.signalservice.api.storage.SignalStorageRecord;
import org.whispersystems.signalservice.api.storage.StorageId;
import org.whispersystems.signalservice.internal.storage.protos.ManifestRecord;
import org.whispersystems.signalservice.internal.storage.protos.SignalStorage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
@ -53,7 +50,7 @@ public class UnknownStorageIdDatabase extends Database {
String query = TYPE + " > ?";
String[] args = SqlUtil.buildArgs(StorageId.largestKnownType());
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, query, args, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, query, args, null, null, null)) {
while (cursor != null && cursor.moveToNext()) {
String keyEncoded = cursor.getString(cursor.getColumnIndexOrThrow(STORAGE_ID));
int type = cursor.getInt(cursor.getColumnIndexOrThrow(TYPE));
@ -72,7 +69,7 @@ public class UnknownStorageIdDatabase extends Database {
String query = STORAGE_ID + " = ?";
String[] args = new String[] { Base64.encodeBytes(rawId) };
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, query, args, null, null, null)) {
try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, query, args, null, null, null)) {
if (cursor != null && cursor.moveToFirst()) {
int type = cursor.getInt(cursor.getColumnIndexOrThrow(TYPE));
return SignalStorageRecord.forUnknown(StorageId.forType(rawId, type));
@ -85,7 +82,7 @@ public class UnknownStorageIdDatabase extends Database {
public void applyStorageSyncUpdates(@NonNull Collection<SignalStorageRecord> inserts,
@NonNull Collection<SignalStorageRecord> deletes)
{
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction();
try {
@ -99,7 +96,7 @@ public class UnknownStorageIdDatabase extends Database {
}
public void insert(@NonNull Collection<SignalStorageRecord> inserts) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
Preconditions.checkArgument(db.inTransaction(), "Must be in a transaction!");
@ -113,7 +110,7 @@ public class UnknownStorageIdDatabase extends Database {
}
public void delete(@NonNull Collection<StorageId> deletes) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String deleteQuery = STORAGE_ID + " = ?";
Preconditions.checkArgument(db.inTransaction(), "Must be in a transaction!");
@ -128,10 +125,10 @@ public class UnknownStorageIdDatabase extends Database {
String query = TYPE + " = ?";
String[] args = new String[]{String.valueOf(type)};
databaseHelper.getWritableDatabase().delete(TABLE_NAME, query, args);
databaseHelper.getSignalWritableDatabase().delete(TABLE_NAME, query, args);
}
public void deleteAll() {
databaseHelper.getWritableDatabase().delete(TABLE_NAME, null, null);
databaseHelper.getSignalWritableDatabase().delete(TABLE_NAME, null, null);
}
}

Wyświetl plik

@ -8,7 +8,7 @@ import androidx.annotation.NonNull;
import com.fasterxml.jackson.annotation.JsonProperty;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.Conversions;
import org.signal.core.util.logging.Log;

Wyświetl plik

@ -5,7 +5,7 @@ import android.text.TextUtils;
import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.util.DelimiterUtil;

Wyświetl plik

@ -7,7 +7,7 @@ import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.groups.GroupId;

Wyświetl plik

@ -12,6 +12,8 @@ import androidx.annotation.Nullable;
import com.annimon.stream.function.BiFunction;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.crypto.AsymmetricMasterCipher;
@ -38,7 +40,7 @@ public class SQLCipherMigrationHelper {
static void migratePlaintext(@NonNull Context context,
@NonNull android.database.sqlite.SQLiteDatabase legacyDb,
@NonNull net.sqlcipher.database.SQLiteDatabase modernDb)
@NonNull SQLiteDatabase modernDb)
{
modernDb.beginTransaction();
int foregroundId = GenericForegroundService.startForegroundTask(context, context.getString(R.string.SQLCipherMigrationHelper_migrating_signal_database)).getId();
@ -58,7 +60,7 @@ public class SQLCipherMigrationHelper {
public static void migrateCiphertext(@NonNull Context context,
@NonNull MasterSecret masterSecret,
@NonNull android.database.sqlite.SQLiteDatabase legacyDb,
@NonNull net.sqlcipher.database.SQLiteDatabase modernDb,
@NonNull SQLiteDatabase modernDb,
@Nullable LegacyMigrationJob.DatabaseUpgradeListener listener)
{
MasterCipher legacyCipher = new MasterCipher(masterSecret);
@ -182,7 +184,7 @@ public class SQLCipherMigrationHelper {
private static void copyTable(@NonNull String tableName,
@NonNull android.database.sqlite.SQLiteDatabase legacyDb,
@NonNull net.sqlcipher.database.SQLiteDatabase modernDb,
@NonNull SQLiteDatabase modernDb,
@Nullable BiFunction<ContentValues, Pair<Integer, Integer>, ContentValues> transformer)
{
Set<String> destinationColumns = getTableColumns(tableName, modernDb);
@ -236,7 +238,7 @@ public class SQLCipherMigrationHelper {
return new Pair<>(type, body);
}
private static Set<String> getTableColumns(String tableName, net.sqlcipher.database.SQLiteDatabase database) {
private static Set<String> getTableColumns(String tableName, SQLiteDatabase database) {
Set<String> results = new HashSet<>();
try (Cursor cursor = database.rawQuery("PRAGMA table_info(" + tableName + ")", null)) {

Wyświetl plik

@ -18,8 +18,8 @@ import com.annimon.stream.Stream;
import com.bumptech.glide.Glide;
import com.google.protobuf.InvalidProtocolBufferException;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.color.MaterialColor;
@ -214,14 +214,18 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
private static final int DATABASE_VERSION = 112;
private static final String DATABASE_NAME = "signal.db";
private final Context context;
private final DatabaseSecret databaseSecret;
private final Context context;
public SQLCipherOpenHelper(@NonNull Context context, @NonNull DatabaseSecret databaseSecret) {
super(context, DATABASE_NAME, null, DATABASE_VERSION, new SqlCipherDatabaseHook(), new SqlCipherErrorHandler(DATABASE_NAME));
super(context, DATABASE_NAME, databaseSecret.asString(), null, DATABASE_VERSION, 0, new SqlCipherErrorHandler(DATABASE_NAME), new SqlCipherDatabaseHook());
this.context = context.getApplicationContext();
this.databaseSecret = databaseSecret;
this.context = context.getApplicationContext();
}
@Override
public void onOpen(SQLiteDatabase db) {
db.enableWriteAheadLogging();
db.setForeignKeyConstraintsEnabled(true);
}
@Override
@ -1361,12 +1365,12 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
String selectIdsToUpdateProfileSharing = "SELECT r._id FROM recipient AS r INNER JOIN thread AS t ON r._id = t.recipient_ids WHERE profile_sharing = 0 AND (" + secureOutgoingSms + " OR " + secureOutgoingMms + ")";
db.rawExecSQL("UPDATE recipient SET profile_sharing = 1 WHERE _id IN (" + selectIdsToUpdateProfileSharing + ")");
db.execSQL("UPDATE recipient SET profile_sharing = 1 WHERE _id IN (" + selectIdsToUpdateProfileSharing + ")");
String selectIdsWithGroupsInCommon = "SELECT r._id FROM recipient AS r WHERE EXISTS("
+ "SELECT 1 FROM groups AS g INNER JOIN recipient AS gr ON (g.recipient_id = gr._id AND gr.profile_sharing = 1) WHERE g.active = 1 AND (g.members LIKE r._id || ',%' OR g.members LIKE '%,' || r._id || ',%' OR g.members LIKE '%,' || r._id)"
+ ")";
db.rawExecSQL("UPDATE recipient SET groups_in_common = 1 WHERE _id IN (" + selectIdsWithGroupsInCommon + ")");
db.execSQL("UPDATE recipient SET groups_in_common = 1 WHERE _id IN (" + selectIdsWithGroupsInCommon + ")");
}
if (oldVersion < CLEAN_STORAGE_IDS_WITHOUT_INFO) {
@ -1973,17 +1977,35 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
Log.i(TAG, "Upgrade complete. Took " + (System.currentTimeMillis() - startTime) + " ms.");
}
public org.thoughtcrime.securesms.database.SQLiteDatabase getReadableDatabase() {
return new org.thoughtcrime.securesms.database.SQLiteDatabase(getReadableDatabase(databaseSecret.asString()));
}
public org.thoughtcrime.securesms.database.SQLiteDatabase getWritableDatabase() {
return new org.thoughtcrime.securesms.database.SQLiteDatabase(getWritableDatabase(databaseSecret.asString()));
@Override
public net.zetetic.database.sqlcipher.SQLiteDatabase getReadableDatabase() {
throw new UnsupportedOperationException("Call getSignalReadableDatabase() instead!");
}
@Override
public @NonNull SQLiteDatabase getSqlCipherDatabase() {
return getWritableDatabase().getSqlCipherDatabase();
public net.zetetic.database.sqlcipher.SQLiteDatabase getWritableDatabase() {
throw new UnsupportedOperationException("Call getSignalReadableDatabase() instead!");
}
public net.zetetic.database.sqlcipher.SQLiteDatabase getRawReadableDatabase() {
return super.getReadableDatabase();
}
public net.zetetic.database.sqlcipher.SQLiteDatabase getRawWritableDatabase() {
return super.getWritableDatabase();
}
public org.thoughtcrime.securesms.database.SQLiteDatabase getSignalReadableDatabase() {
return new org.thoughtcrime.securesms.database.SQLiteDatabase(super.getReadableDatabase());
}
public org.thoughtcrime.securesms.database.SQLiteDatabase getSignalWritableDatabase() {
return new org.thoughtcrime.securesms.database.SQLiteDatabase(super.getWritableDatabase());
}
@Override
public @NonNull net.zetetic.database.sqlcipher.SQLiteDatabase getSqlCipherDatabase() {
return super.getWritableDatabase();
}
public void markCurrent(SQLiteDatabase db) {

Wyświetl plik

@ -4,7 +4,7 @@ package org.thoughtcrime.securesms.database.helpers;
import android.content.ContentValues;
import android.content.Context;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.Conversions;
import org.signal.core.util.logging.Log;

Wyświetl plik

@ -50,7 +50,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
throw IllegalArgumentException("Must save this avatar before trying to mark usage.")
}
val db = databaseHelper.writableDatabase
val db = databaseHelper.signalWritableDatabase
val where = ID_WHERE
val args = SqlUtil.buildArgs(databaseId.id)
val values = ContentValues(1)
@ -65,7 +65,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
throw IllegalArgumentException("Cannot update an unsaved avatar")
}
val db = databaseHelper.writableDatabase
val db = databaseHelper.signalWritableDatabase
val where = ID_WHERE
val values = ContentValues(1)
@ -79,7 +79,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
throw IllegalArgumentException("Cannot delete an unsaved avatar.")
}
val db = databaseHelper.writableDatabase
val db = databaseHelper.signalWritableDatabase
val where = ID_WHERE
val args = SqlUtil.buildArgs(databaseId.id)
@ -87,7 +87,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
}
private fun saveAvatar(avatar: Avatar, groupId: GroupId?): Avatar {
val db = databaseHelper.writableDatabase
val db = databaseHelper.signalWritableDatabase
val databaseId = avatar.databaseId
if (databaseId is Avatar.DatabaseId.DoNotPersist) {
@ -119,7 +119,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
}
fun getAllAvatars(): List<Avatar> {
val db = databaseHelper.readableDatabase
val db = databaseHelper.signalReadableDatabase
val results = mutableListOf<Avatar>()
db.query(TABLE_NAME, SqlUtil.buildArgs(ID, AVATAR), null, null, null, null, null)?.use {
@ -143,7 +143,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
}
private fun getAvatars(groupId: GroupId?): List<Avatar> {
val db = databaseHelper.readableDatabase
val db = databaseHelper.signalReadableDatabase
val orderBy = "$LAST_USED DESC"
val results = mutableListOf<Avatar>()

Wyświetl plik

@ -4,7 +4,7 @@ import android.content.Context;
import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;

Wyświetl plik

@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.DatabaseFactory;

Wyświetl plik

@ -7,7 +7,7 @@ import android.database.Cursor;
import androidx.annotation.AnyThread;
import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;

Wyświetl plik

@ -31,7 +31,7 @@ import androidx.navigation.Navigation;
import com.dd.CircularProgressButton;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;

Wyświetl plik

@ -7,7 +7,7 @@ import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.thoughtcrime.securesms.recipients.RecipientId;
import org.whispersystems.libsignal.util.guava.Preconditions;

Wyświetl plik

@ -5,7 +5,7 @@ import android.content.Context;
import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.StreamUtil;
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;

Wyświetl plik

@ -495,9 +495,6 @@ dependencyVerification {
['mobi.upod:time-duration-picker:1.1.3',
'db469ce0f48dd96b892eac424ed76870e54bf00fe0a28cdcddfbe5f2a226a0e1'],
['net.zetetic:android-database-sqlcipher:4.4.3',
'64cf472e3f6c3300fd7307aebb74dfff4eeb3805f138045c83362c7687e4af61'],
['org.apache.httpcomponents:httpclient-android:4.3.5',
'6f56466a9bd0d42934b90bfbfe9977a8b654c058bf44a12bdc2877c4e1f033f1'],
@ -555,6 +552,9 @@ dependencyVerification {
['org.signal:aesgcmprovider:0.0.3',
'6eb4422e8a618b3b76cb2096a3619d251f9e27989dc68307a1e5414c3710f2d1'],
['org.signal:android-database-sqlcipher:4.4.3-S1',
'71080a72aa671856b769375f7be625625dc7f46605263113a5817de9dbc8b610'],
['org.signal:argon2:13.1',
'0f686ccff0d4842bfcc74d92e8dc780a5f159b9376e37a1189fabbcdac458bef'],