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\\.*" includeGroupByRegex "com\\.github\\.dmytrodanylyk\\.circular-progress-button\\.*"
} }
} }
maven {
url "https://raw.github.com/signalapp/maven/master/sqlcipher/release/"
content {
includeGroupByRegex "org\\.signal.*"
}
}
maven { // textdrawable maven { // textdrawable
url 'https://dl.bintray.com/amulyakhare/maven' url 'https://dl.bintray.com/amulyakhare/maven'
content { content {
@ -485,7 +491,7 @@ dependencies {
implementation 'com.codewaves.stickyheadergrid:stickyheadergrid:0.9.4' implementation 'com.codewaves.stickyheadergrid:stickyheadergrid:0.9.4'
implementation 'com.github.dmytrodanylyk.circular-progress-button:library:1.1.3-S2' 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 "androidx.sqlite:sqlite:2.1.0"
implementation ('com.googlecode.ez-vcard:ez-vcard:0.9.11') { implementation ('com.googlecode.ez-vcard:ez-vcard:0.9.11') {

Wyświetl plik

@ -3,3 +3,6 @@
-keep class net.sqlcipher.** { *; } -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.DatabaseDescriptor;
import com.facebook.flipper.plugins.databases.DatabaseDriver; import com.facebook.flipper.plugins.databases.DatabaseDriver;
import net.sqlcipher.DatabaseUtils; import net.zetetic.database.DatabaseUtils;
import net.sqlcipher.database.SQLiteDatabase; import net.zetetic.database.sqlcipher.SQLiteDatabase;
import net.sqlcipher.database.SQLiteStatement; import net.zetetic.database.sqlcipher.SQLiteStatement;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; 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.annimon.stream.function.Predicate;
import com.google.protobuf.ByteString; import com.google.protobuf.ByteString;
import net.sqlcipher.database.SQLiteDatabase; import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import org.signal.core.util.Conversions; import org.signal.core.util.Conversions;

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -20,7 +20,7 @@ import android.content.Context;
import androidx.annotation.NonNull; 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.contacts.ContactsDatabase;
import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.AttachmentSecret;
@ -206,8 +206,8 @@ public class DatabaseFactory {
return getInstance(context).avatarPickerDatabase; return getInstance(context).avatarPickerDatabase;
} }
public static SQLiteDatabase getBackupDatabase(Context context) { public static net.zetetic.database.sqlcipher.SQLiteDatabase getBackupDatabase(Context context) {
return getInstance(context).databaseHelper.getReadableDatabase().getSqlCipherDatabase(); return getInstance(context).databaseHelper.getRawReadableDatabase();
} }
public static void upgradeRestored(Context context, SQLiteDatabase database){ public static void upgradeRestored(Context context, SQLiteDatabase database){
@ -217,11 +217,11 @@ public class DatabaseFactory {
getInstance(context).sms.deleteAbandonedMessages(); getInstance(context).sms.deleteAbandonedMessages();
getInstance(context).mms.deleteAbandonedMessages(); getInstance(context).mms.deleteAbandonedMessages();
getInstance(context).mms.trimEntriesForExpiredMessages(); getInstance(context).mms.trimEntriesForExpiredMessages();
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS key_value"); getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS key_value");
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS megaphone"); getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS megaphone");
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS job_spec"); getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS job_spec");
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS constraint_spec"); getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS constraint_spec");
getInstance(context).getRawDatabase().rawExecSQL("DROP TABLE IF EXISTS dependency_spec"); getInstance(context).getRawDatabase().execSQL("DROP TABLE IF EXISTS dependency_spec");
instance.databaseHelper.close(); instance.databaseHelper.close();
instance = null; instance = null;
@ -229,7 +229,7 @@ public class DatabaseFactory {
} }
public static boolean inTransaction(Context context) { public static boolean inTransaction(Context context) {
return getInstance(context).databaseHelper.getWritableDatabase().inTransaction(); return getInstance(context).databaseHelper.getSignalWritableDatabase().inTransaction();
} }
private DatabaseFactory(@NonNull Context context) { private DatabaseFactory(@NonNull Context context) {
@ -273,7 +273,7 @@ public class DatabaseFactory {
public void onApplicationLevelUpgrade(@NonNull Context context, @NonNull MasterSecret masterSecret, public void onApplicationLevelUpgrade(@NonNull Context context, @NonNull MasterSecret masterSecret,
int fromVersion, LegacyMigrationJob.DatabaseUpgradeListener listener) int fromVersion, LegacyMigrationJob.DatabaseUpgradeListener listener)
{ {
databaseHelper.getWritableDatabase(); databaseHelper.getSignalWritableDatabase();
ClassicOpenHelper legacyOpenHelper = null; ClassicOpenHelper legacyOpenHelper = null;
@ -289,20 +289,20 @@ public class DatabaseFactory {
SQLCipherMigrationHelper.migrateCiphertext(context, masterSecret, SQLCipherMigrationHelper.migrateCiphertext(context, masterSecret,
legacyOpenHelper.getWritableDatabase(), legacyOpenHelper.getWritableDatabase(),
databaseHelper.getWritableDatabase().getSqlCipherDatabase(), databaseHelper.getRawWritableDatabase(),
listener); listener);
} }
} }
public void triggerDatabaseAccess() { public void triggerDatabaseAccess() {
databaseHelper.getWritableDatabase(); databaseHelper.getSignalWritableDatabase();
} }
public SQLiteDatabase getRawDatabase() { public net.zetetic.database.sqlcipher.SQLiteDatabase getRawDatabase() {
return databaseHelper.getWritableDatabase().getSqlCipherDatabase(); return databaseHelper.getRawWritableDatabase();
} }
public boolean hasTable(String table) { 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) { public void replaceDrafts(long threadId, List<Draft> drafts) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
try { try {
db.beginTransaction(); db.beginTransaction();
@ -64,13 +64,13 @@ public class DraftDatabase extends Database {
} }
public void clearDrafts(long threadId) { public void clearDrafts(long threadId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
int deletedRowCount = db.delete(TABLE_NAME, THREAD_ID + " = ?", SqlUtil.buildArgs(threadId)); int deletedRowCount = db.delete(TABLE_NAME, THREAD_ID + " = ?", SqlUtil.buildArgs(threadId));
Log.d(TAG, "[clearDrafts] Deleted " + deletedRowCount + " rows for thread " + threadId); Log.d(TAG, "[clearDrafts] Deleted " + deletedRowCount + " rows for thread " + threadId);
} }
void clearDrafts(Set<Long> threadIds) { void clearDrafts(Set<Long> threadIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
StringBuilder where = new StringBuilder(); StringBuilder where = new StringBuilder();
List<String> arguments = new LinkedList<>(); List<String> arguments = new LinkedList<>();
@ -86,12 +86,12 @@ public class DraftDatabase extends Database {
} }
void clearAllDrafts() { void clearAllDrafts() {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null); db.delete(TABLE_NAME, null, null);
} }
public Drafts getDrafts(long threadId) { public Drafts getDrafts(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Drafts results = new Drafts(); Drafts results = new Drafts();
try (Cursor cursor = db.query(TABLE_NAME, null, THREAD_ID + " = ?", new String[] {threadId+""}, null, null, null)) { 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() { public @NonNull Drafts getAllVoiceNoteDrafts() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Drafts results = new Drafts(); Drafts results = new Drafts();
String where = DRAFT_TYPE + " = ?"; String where = DRAFT_TYPE + " = ?";
String[] args = SqlUtil.buildArgs(Draft.VOICE_NOTE); String[] args = SqlUtil.buildArgs(Draft.VOICE_NOTE);

Wyświetl plik

@ -7,8 +7,6 @@ import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.annimon.stream.Stream;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.database.model.EmojiSearchData; import org.thoughtcrime.securesms.database.model.EmojiSearchData;
import org.thoughtcrime.securesms.util.CursorUtil; import org.thoughtcrime.securesms.util.CursorUtil;
@ -17,7 +15,6 @@ import org.thoughtcrime.securesms.util.SqlUtil;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* Contains all info necessary for full-text search of emoji tags. * 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. * @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) { public @NonNull List<String> query(@NonNull String query, int limit) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String matchString = FtsUtil.createPrefixMatchString(query); String matchString = FtsUtil.createPrefixMatchString(query);
List<String> results = new LinkedList<>(); 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. * Deletes the content of the current search index and replaces it with the new one.
*/ */
public void setSearchIndex(@NonNull List<EmojiSearchData> searchIndex) { public void setSearchIndex(@NonNull List<EmojiSearchData> searchIndex) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
db.beginTransaction(); db.beginTransaction();
try { 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.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.CursorUtil; import org.thoughtcrime.securesms.util.CursorUtil;
import org.thoughtcrime.securesms.util.FeatureFlags;
import org.thoughtcrime.securesms.util.SetUtil; import org.thoughtcrime.securesms.util.SetUtil;
import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.SqlUtil;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
@ -57,7 +56,6 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collector;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public final class GroupDatabase extends Database { public final class GroupDatabase extends Database {
@ -130,7 +128,7 @@ private static final String[] GROUP_PROJECTION = {
} }
public Optional<GroupRecord> getGroup(RecipientId recipientId) { 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()) { if (cursor != null && cursor.moveToNext()) {
return getGroup(cursor); return getGroup(cursor);
} }
@ -140,7 +138,7 @@ private static final String[] GROUP_PROJECTION = {
} }
public Optional<GroupRecord> getGroup(@NonNull GroupId groupId) { public Optional<GroupRecord> getGroup(@NonNull GroupId groupId) {
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?", try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
new String[] {groupId.toString()}, new String[] {groupId.toString()},
null, null, null)) null, null, null))
{ {
@ -153,7 +151,7 @@ private static final String[] GROUP_PROJECTION = {
} }
public boolean groupExists(@NonNull GroupId groupId) { public boolean groupExists(@NonNull GroupId groupId) {
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?", try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
new String[] {groupId.toString()}, new String[] {groupId.toString()},
null, null, null)) null, null, null))
{ {
@ -165,7 +163,7 @@ private static final String[] GROUP_PROJECTION = {
* @return A gv1 group whose expected v2 ID matches the one provided. * @return A gv1 group whose expected v2 ID matches the one provided.
*/ */
public Optional<GroupRecord> getGroupV1ByExpectedV2(@NonNull GroupId.V2 gv2Id) { 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)) { try (Cursor cursor = db.query(TABLE_NAME, GROUP_PROJECTION, EXPECTED_V2_ID + " = ?", SqlUtil.buildArgs(gv2Id), null, null, null)) {
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
return getGroup(cursor); return getGroup(cursor);
@ -176,7 +174,7 @@ private static final String[] GROUP_PROJECTION = {
} }
public Optional<GroupRecord> getGroupByDistributionId(@NonNull DistributionId distributionId) { public Optional<GroupRecord> getGroupByDistributionId(@NonNull DistributionId distributionId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = DISTRIBUTION_ID + " = ?"; String query = DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(distributionId); String[] args = SqlUtil.buildArgs(distributionId);
@ -207,7 +205,7 @@ private static final String[] GROUP_PROJECTION = {
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(UNMIGRATED_V1_MEMBERS, newUnmigrated.isEmpty() ? null : RecipientId.toSerializedList(newUnmigrated)); 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(); Recipient.live(Recipient.externalGroupExact(context, id).getId()).refresh();
} }
@ -221,7 +219,7 @@ private static final String[] GROUP_PROJECTION = {
* @return local db group revision or -1 if not present. * @return local db group revision or -1 if not present.
*/ */
public int getGroupV2Revision(@NonNull GroupId.V2 groupId) { public int getGroupV2Revision(@NonNull GroupId.V2 groupId) {
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?", try (Cursor cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, GROUP_ID + " = ?",
new String[] {groupId.toString()}, new String[] {groupId.toString()},
null, null, null)) null, null, null))
{ {
@ -281,17 +279,17 @@ private static final String[] GROUP_PROJECTION = {
query += " AND " + MMS + " = 0"; 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); return new Reader(cursor);
} }
public @NonNull DistributionId getOrCreateDistributionId(@NonNull GroupId.V2 groupId) { public @NonNull DistributionId getOrCreateDistributionId(@NonNull GroupId.V2 groupId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = GROUP_ID + " = ?"; String query = GROUP_ID + " = ?";
String[] args = SqlUtil.buildArgs(groupId); 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()) { if (cursor.moveToFirst()) {
Optional<String> serialized = CursorUtil.getString(cursor, DISTRIBUTION_ID); Optional<String> serialized = CursorUtil.getString(cursor, DISTRIBUTION_ID);
@ -321,7 +319,7 @@ private static final String[] GROUP_PROJECTION = {
public GroupId.Mms getOrCreateMmsGroupForMembers(List<RecipientId> members) { public GroupId.Mms getOrCreateMmsGroupForMembers(List<RecipientId> members) {
Collections.sort(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 + " = ?", MEMBERS + " = ? AND " + MMS + " = ?",
new String[] {RecipientId.toSerializedList(members), "1"}, new String[] {RecipientId.toSerializedList(members), "1"},
null, null, null); null, null, null);
@ -357,7 +355,7 @@ private static final String[] GROUP_PROJECTION = {
@WorkerThread @WorkerThread
public @NonNull List<GroupRecord> getGroupsContainingMember(@NonNull RecipientId recipientId, boolean pushOnly, boolean includeInactive) { 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 table = TABLE_NAME + " INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + TABLE_NAME + "." + RECIPIENT_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.RECIPIENT_ID;
String query = MEMBERS + " LIKE ?"; String query = MEMBERS + " LIKE ?";
String[] args = SqlUtil.buildArgs("%" + recipientId.serialize() + "%"); String[] args = SqlUtil.buildArgs("%" + recipientId.serialize() + "%");
@ -390,12 +388,12 @@ private static final String[] GROUP_PROJECTION = {
public Reader getGroups() { public Reader getGroups() {
@SuppressLint("Recycle") @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); return new Reader(cursor);
} }
public int getActiveGroupCount() { public int getActiveGroupCount() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] cols = { "COUNT(*)" }; String[] cols = { "COUNT(*)" };
String query = ACTIVE + " = 1"; 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."); 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(); db.beginTransaction();
try { 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()) { if (groupState != null && groupState.hasDisappearingMessagesTimer()) {
recipientDatabase.setExpireMessages(groupRecipientId, groupState.getDisappearingMessagesTimer().getDuration()); recipientDatabase.setExpireMessages(groupRecipientId, groupState.getDisappearingMessagesTimer().getDuration());
@ -597,7 +595,7 @@ private static final String[] GROUP_PROJECTION = {
contentValues.put(AVATAR_ID, 0); contentValues.put(AVATAR_ID, 0);
} }
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues,
GROUP_ID + " = ?", GROUP_ID + " = ?",
new String[] {groupId.toString()}); new String[] {groupId.toString()});
@ -617,7 +615,7 @@ private static final String[] GROUP_PROJECTION = {
@NonNull GroupId.V1 groupIdV1, @NonNull GroupId.V1 groupIdV1,
@NonNull DecryptedGroup decryptedGroup) @NonNull DecryptedGroup decryptedGroup)
{ {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
GroupId.V2 groupIdV2 = groupIdV1.deriveV2MigrationGroupId(); GroupId.V2 groupIdV2 = groupIdV1.deriveV2MigrationGroupId();
GroupMasterKey groupMasterKey = groupIdV1.deriveV2MigrationMasterKey(); 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 + " = ?", GROUP_ID + " = ?",
new String[]{ groupId.toString() }); new String[]{ groupId.toString() });
@ -745,7 +743,7 @@ private static final String[] GROUP_PROJECTION = {
ContentValues contentValues = new ContentValues(); ContentValues contentValues = new ContentValues();
contentValues.put(TITLE, title); contentValues.put(TITLE, title);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?", databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contentValues, GROUP_ID + " = ?",
new String[] {groupId.toString()}); new String[] {groupId.toString()});
RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId); RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
@ -759,7 +757,7 @@ private static final String[] GROUP_PROJECTION = {
ContentValues contentValues = new ContentValues(1); ContentValues contentValues = new ContentValues(1);
contentValues.put(AVATAR_ID, hasAvatar ? Math.abs(new SecureRandom().nextLong()) : 0); 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()}); new String[] {groupId.toString()});
RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId); 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(MEMBERS, RecipientId.toSerializedList(members));
contents.put(ACTIVE, 1); contents.put(ACTIVE, 1);
databaseHelper.getWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?", databaseHelper.getSignalWritableDatabase().update(TABLE_NAME, contents, GROUP_ID + " = ?",
new String[] {groupId.toString()}); new String[] {groupId.toString()});
RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId); RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
@ -787,7 +785,7 @@ private static final String[] GROUP_PROJECTION = {
ContentValues contents = new ContentValues(); ContentValues contents = new ContentValues();
contents.put(MEMBERS, RecipientId.toSerializedList(currentMembers)); 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()}); new String[] {groupId.toString()});
RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId); RecipientId groupRecipient = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(groupId);
@ -805,7 +803,7 @@ private static final String[] GROUP_PROJECTION = {
Cursor cursor = null; Cursor cursor = null;
try { try {
cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, new String[] {MEMBERS}, cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, new String[] { MEMBERS},
GROUP_ID + " = ?", GROUP_ID + " = ?",
new String[] {groupId.toString()}, new String[] {groupId.toString()},
null, null, null); null, null, null);
@ -828,7 +826,7 @@ private static final String[] GROUP_PROJECTION = {
} }
public void setActive(@NonNull GroupId groupId, boolean active) { public void setActive(@NonNull GroupId groupId, boolean active) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(ACTIVE, active ? 1 : 0); values.put(ACTIVE, active ? 1 : 0);
database.update(TABLE_NAME, values, GROUP_ID + " = ?", new String[] {groupId.toString()}); database.update(TABLE_NAME, values, GROUP_ID + " = ?", new String[] {groupId.toString()});
@ -836,7 +834,7 @@ private static final String[] GROUP_PROJECTION = {
@WorkerThread @WorkerThread
public boolean isCurrentMember(@NonNull GroupId.Push groupId, @NonNull RecipientId recipientId) { 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}, try (Cursor cursor = database.query(TABLE_NAME, new String[] {MEMBERS},
GROUP_ID + " = ?", new String[] {groupId.toString()}, GROUP_ID + " = ?", new String[] {groupId.toString()},
@ -876,7 +874,7 @@ private static final String[] GROUP_PROJECTION = {
public @NonNull List<GroupId.V2> getAllGroupV2Ids() { public @NonNull List<GroupId.V2> getAllGroupV2Ids() {
List<GroupId.V2> result = new LinkedList<>(); 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()) { while (cursor.moveToNext()) {
GroupId groupId = GroupId.parseOrThrow(cursor.getString(cursor.getColumnIndexOrThrow(GROUP_ID))); GroupId groupId = GroupId.parseOrThrow(cursor.getString(cursor.getColumnIndexOrThrow(GROUP_ID)));
if (groupId.isV2()) { if (groupId.isV2()) {
@ -898,7 +896,7 @@ private static final String[] GROUP_PROJECTION = {
String[] projection = new String[]{ GROUP_ID, EXPECTED_V2_ID }; String[] projection = new String[]{ GROUP_ID, EXPECTED_V2_ID };
String query = EXPECTED_V2_ID + " NOT NULL"; 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()) { while (cursor.moveToNext()) {
GroupId.V1 groupId = GroupId.parseOrThrow(cursor.getString(cursor.getColumnIndexOrThrow(GROUP_ID))).requireV1(); 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(); 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.recipients.RecipientId;
import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.SqlUtil;
import org.whispersystems.libsignal.util.Pair; import org.whispersystems.libsignal.util.Pair;
import org.whispersystems.libsignal.util.guava.Optional;
import java.util.Collection; import java.util.Collection;
import java.util.LinkedList; 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) { public void insert(Collection<RecipientId> recipientIds, long mmsId, int status, long timestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -68,7 +67,7 @@ public class GroupReceiptDatabase extends Database {
} }
public void update(@NonNull RecipientId recipientId, long mmsId, int status, long timestamp) { 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); ContentValues values = new ContentValues(2);
values.put(STATUS, status); values.put(STATUS, status);
values.put(TIMESTAMP, timestamp); values.put(TIMESTAMP, timestamp);
@ -78,7 +77,7 @@ public class GroupReceiptDatabase extends Database {
} }
public void setUnidentified(Collection<Pair<RecipientId, Boolean>> results, long mmsId) { public void setUnidentified(Collection<Pair<RecipientId, Boolean>> results, long mmsId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -98,7 +97,7 @@ public class GroupReceiptDatabase extends Database {
} }
public @NonNull List<GroupReceiptInfo> getGroupReceiptInfo(long mmsId) { public @NonNull List<GroupReceiptInfo> getGroupReceiptInfo(long mmsId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<GroupReceiptInfo> results = new LinkedList<>(); List<GroupReceiptInfo> results = new LinkedList<>();
try (Cursor cursor = db.query(TABLE_NAME, null, MMS_ID + " = ?", new String[] {String.valueOf(mmsId)}, null, null, null)) { 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) { 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 query = MMS_ID + " = ? AND " + RECIPIENT_ID + " = ?";
String[] args = SqlUtil.buildArgs(mmsId, recipientId); String[] args = SqlUtil.buildArgs(mmsId, recipientId);
@ -131,17 +130,17 @@ public class GroupReceiptDatabase extends Database {
} }
void deleteRowsForMessage(long mmsId) { void deleteRowsForMessage(long mmsId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, MMS_ID + " = ?", new String[] {String.valueOf(mmsId)}); db.delete(TABLE_NAME, MMS_ID + " = ?", new String[] {String.valueOf(mmsId)});
} }
void deleteAbandonedRows() { 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); db.delete(TABLE_NAME, MMS_ID + " NOT IN (SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME + ")", null);
} }
void deleteAllRows() { void deleteAllRows() {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null); db.delete(TABLE_NAME, null, null);
} }

Wyświetl plik

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

Wyświetl plik

@ -2,14 +2,16 @@ package org.thoughtcrime.securesms.database;
import android.app.Application; import android.app.Application;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import net.sqlcipher.database.SQLiteOpenHelper; import net.zetetic.database.sqlcipher.SQLiteDatabaseHook;
import net.sqlcipher.database.SQLiteDatabase; import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
@ -88,7 +90,6 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
private static volatile JobDatabase instance; private static volatile JobDatabase instance;
private final Application application; private final Application application;
private final DatabaseSecret databaseSecret;
public static @NonNull JobDatabase getInstance(@NonNull Application context) { public static @NonNull JobDatabase getInstance(@NonNull Application context) {
if (instance == null) { if (instance == null) {
@ -103,10 +104,9 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
} }
public JobDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) { 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.application = application;
this.databaseSecret = databaseSecret;
} }
@Override @Override
@ -142,6 +142,9 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
public void onOpen(SQLiteDatabase db) { public void onOpen(SQLiteDatabase db) {
Log.i(TAG, "onOpen()"); Log.i(TAG, "onOpen()");
db.enableWriteAheadLogging();
db.setForeignKeyConstraintsEnabled(true);
SignalExecutors.BOUNDED.execute(() -> { SignalExecutors.BOUNDED.execute(() -> {
dropTableIfPresent("job_spec"); dropTableIfPresent("job_spec");
dropTableIfPresent("constraint_spec"); dropTableIfPresent("constraint_spec");
@ -366,14 +369,6 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
false); false);
} }
private @NonNull SQLiteDatabase getReadableDatabase() {
return getWritableDatabase(databaseSecret.asString());
}
private @NonNull SQLiteDatabase getWritableDatabase() {
return getWritableDatabase(databaseSecret.asString());
}
@Override @Override
public @NonNull SQLiteDatabase getSqlCipherDatabase() { public @NonNull SQLiteDatabase getSqlCipherDatabase() {
return getWritableDatabase(); return getWritableDatabase();
@ -382,7 +377,7 @@ public class JobDatabase extends SQLiteOpenHelper implements SignalDatabase {
private void dropTableIfPresent(@NonNull String table) { private void dropTableIfPresent(@NonNull String table) {
if (DatabaseFactory.getInstance(application).hasTable(table)) { if (DatabaseFactory.getInstance(application).hasTable(table)) {
Log.i(TAG, "Dropping original " + table + " table from the main database."); 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 androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase; import net.zetetic.database.sqlcipher.SQLiteDatabase;
import net.sqlcipher.database.SQLiteDatabaseHook; import net.zetetic.database.sqlcipher.SQLiteDatabaseHook;
import net.sqlcipher.database.SQLiteOpenHelper; import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
@ -48,7 +48,6 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase
private static volatile KeyValueDatabase instance; private static volatile KeyValueDatabase instance;
private final Application application; private final Application application;
private final DatabaseSecret databaseSecret;
public static @NonNull KeyValueDatabase getInstance(@NonNull Application context) { public static @NonNull KeyValueDatabase getInstance(@NonNull Application context) {
if (instance == null) { if (instance == null) {
@ -63,10 +62,9 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase
} }
private KeyValueDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) { 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.application = application;
this.databaseSecret = databaseSecret;
} }
@Override @Override
@ -90,10 +88,13 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase
public void onOpen(SQLiteDatabase db) { public void onOpen(SQLiteDatabase db) {
Log.i(TAG, "onOpen()"); Log.i(TAG, "onOpen()");
db.enableWriteAheadLogging();
db.setForeignKeyConstraintsEnabled(true);
SignalExecutors.BOUNDED.execute(() -> { SignalExecutors.BOUNDED.execute(() -> {
if (DatabaseFactory.getInstance(application).hasTable("key_value")) { if (DatabaseFactory.getInstance(application).hasTable("key_value")) {
Log.i(TAG, "Dropping original key_value table from the main database."); 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 @Override
public @NonNull SQLiteDatabase getSqlCipherDatabase() { public @NonNull SQLiteDatabase getSqlCipherDatabase() {
return getWritableDatabase(); return getWritableDatabase();

Wyświetl plik

@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.database
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Application import android.app.Application
import android.content.ContentValues import android.content.ContentValues
import net.sqlcipher.database.SQLiteDatabase import net.zetetic.database.sqlcipher.SQLiteDatabase
import net.sqlcipher.database.SQLiteOpenHelper import net.zetetic.database.sqlcipher.SQLiteOpenHelper
import org.signal.core.util.logging.Log import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.crypto.DatabaseSecret import org.thoughtcrime.securesms.crypto.DatabaseSecret
import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider
@ -29,10 +29,12 @@ class LocalMetricsDatabase private constructor(
) : SQLiteOpenHelper( ) : SQLiteOpenHelper(
application, application,
DATABASE_NAME, DATABASE_NAME,
databaseSecret.asString(),
null, null,
DATABASE_VERSION, DATABASE_VERSION,
SqlCipherDatabaseHook(), 0,
SqlCipherErrorHandler(DATABASE_NAME) SqlCipherErrorHandler(DATABASE_NAME),
SqlCipherDatabaseHook()
), ),
SignalDatabase { SignalDatabase {
@ -107,7 +109,12 @@ class LocalMetricsDatabase private constructor(
db.execSQL(EventTotals.CREATE_VIEW) 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 { 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( data class EventMetrics(
val name: String, val name: String,
val count: Long, val count: Long,

Wyświetl plik

@ -4,8 +4,8 @@ import android.annotation.SuppressLint
import android.app.Application import android.app.Application
import android.content.ContentValues import android.content.ContentValues
import android.database.Cursor import android.database.Cursor
import net.sqlcipher.database.SQLiteDatabase import net.zetetic.database.sqlcipher.SQLiteDatabase
import net.sqlcipher.database.SQLiteOpenHelper import net.zetetic.database.sqlcipher.SQLiteOpenHelper
import org.signal.core.util.logging.Log import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.crypto.DatabaseSecret import org.thoughtcrime.securesms.crypto.DatabaseSecret
import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider
@ -32,10 +32,12 @@ class LogDatabase private constructor(
) : SQLiteOpenHelper( ) : SQLiteOpenHelper(
application, application,
DATABASE_NAME, DATABASE_NAME,
databaseSecret.asString(),
null, null,
DATABASE_VERSION, DATABASE_VERSION,
SqlCipherDatabaseHook(), 0,
SqlCipherErrorHandler(DATABASE_NAME) SqlCipherErrorHandler(DATABASE_NAME),
SqlCipherDatabaseHook()
), ),
SignalDatabase { SignalDatabase {
@ -106,6 +108,11 @@ class LogDatabase private constructor(
} }
} }
override fun onOpen(db: SQLiteDatabase) {
db.enableWriteAheadLogging()
db.setForeignKeyConstraintsEnabled(true)
}
override fun getSqlCipherDatabase(): SQLiteDatabase { override fun getSqlCipherDatabase(): SQLiteDatabase {
return writableDatabase 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 interface Reader : Iterator<String>, Closeable
class CursorReader(private val cursor: Cursor) : Reader { 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) { 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 query = sorting.applyToQuery(applyEqualityOperator(threadId, GALLERY_MEDIA_QUERY));
String[] args = {threadId + ""}; String[] args = {threadId + ""};
Cursor cursor = database.rawQuery(query, args); Cursor cursor = database.rawQuery(query, args);
@ -104,7 +104,7 @@ public class MediaDatabase extends Database {
} }
public @NonNull Cursor getDocumentMediaForThread(long threadId, @NonNull Sorting sorting) { 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 query = sorting.applyToQuery(applyEqualityOperator(threadId, DOCUMENT_MEDIA_QUERY));
String[] args = {threadId + ""}; String[] args = {threadId + ""};
Cursor cursor = database.rawQuery(query, args); Cursor cursor = database.rawQuery(query, args);
@ -113,7 +113,7 @@ public class MediaDatabase extends Database {
} }
public @NonNull Cursor getAudioMediaForThread(long threadId, @NonNull Sorting sorting) { 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 query = sorting.applyToQuery(applyEqualityOperator(threadId, AUDIO_MEDIA_QUERY));
String[] args = {threadId + ""}; String[] args = {threadId + ""};
Cursor cursor = database.rawQuery(query, args); Cursor cursor = database.rawQuery(query, args);
@ -122,7 +122,7 @@ public class MediaDatabase extends Database {
} }
public @NonNull Cursor getAllMediaForThread(long threadId, @NonNull Sorting sorting) { 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 query = sorting.applyToQuery(applyEqualityOperator(threadId, ALL_MEDIA_QUERY));
String[] args = {threadId + ""}; String[] args = {threadId + ""};
Cursor cursor = database.rawQuery(query, args); Cursor cursor = database.rawQuery(query, args);
@ -144,7 +144,7 @@ public class MediaDatabase extends Database {
public StorageBreakdown getStorageBreakdown() { public StorageBreakdown getStorageBreakdown() {
StorageBreakdown storageBreakdown = new StorageBreakdown(); StorageBreakdown storageBreakdown = new StorageBreakdown();
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = database.rawQuery(UNIQUE_MEDIA_QUERY, new String[0])) { try (Cursor cursor = database.rawQuery(UNIQUE_MEDIA_QUERY, new String[0])) {
int sizeColumn = cursor.getColumnIndexOrThrow(AttachmentDatabase.SIZE); int sizeColumn = cursor.getColumnIndexOrThrow(AttachmentDatabase.SIZE);

Wyświetl plik

@ -6,8 +6,8 @@ import android.database.Cursor;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import net.sqlcipher.database.SQLiteDatabase; import net.zetetic.database.sqlcipher.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper; import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
@ -51,7 +51,6 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas
private static volatile MegaphoneDatabase instance; private static volatile MegaphoneDatabase instance;
private final Application application; private final Application application;
private final DatabaseSecret databaseSecret;
public static @NonNull MegaphoneDatabase getInstance(@NonNull Application context) { public static @NonNull MegaphoneDatabase getInstance(@NonNull Application context) {
if (instance == null) { if (instance == null) {
@ -66,10 +65,9 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas
} }
public MegaphoneDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) { 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.application = application;
this.databaseSecret = databaseSecret;
} }
@Override @Override
@ -93,10 +91,13 @@ public class MegaphoneDatabase extends SQLiteOpenHelper implements SignalDatabas
public void onOpen(SQLiteDatabase db) { public void onOpen(SQLiteDatabase db) {
Log.i(TAG, "onOpen()"); Log.i(TAG, "onOpen()");
db.enableWriteAheadLogging();
db.setForeignKeyConstraintsEnabled(true);
SignalExecutors.BOUNDED.execute(() -> { SignalExecutors.BOUNDED.execute(() -> {
if (DatabaseFactory.getInstance(application).hasTable("megaphone")) { if (DatabaseFactory.getInstance(application).hasTable("megaphone")) {
Log.i(TAG, "Dropping original megaphone table from the main database."); 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); getWritableDatabase().delete(TABLE_NAME, query, args);
} }
private @NonNull SQLiteDatabase getWritableDatabase() {
return getWritableDatabase(databaseSecret.asString());
}
@Override @Override
public @NonNull SQLiteDatabase getSqlCipherDatabase() { public @NonNull SQLiteDatabase getSqlCipherDatabase() {
return getWritableDatabase(); 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) { public void insert(long threadId, long messageId, @NonNull Collection<Mention> mentions) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -71,7 +71,7 @@ public class MentionDatabase extends Database {
} }
public @NonNull List<Mention> getMentionsForMessage(long messageId) { public @NonNull List<Mention> getMentionsForMessage(long messageId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<Mention> mentions = new LinkedList<>(); List<Mention> mentions = new LinkedList<>();
try (Cursor cursor = db.query(TABLE_NAME, null, MESSAGE_ID + " = ?", SqlUtil.buildArgs(messageId), null, null, null)) { 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) { public @NonNull Map<Long, List<Mention>> getMentionsForMessages(@NonNull Collection<Long> messageIds) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String ids = TextUtils.join(",", messageIds); String ids = TextUtils.join(",", messageIds);
try (Cursor cursor = db.query(TABLE_NAME, null, MESSAGE_ID + " IN (" + ids + ")", null, null, null, null)) { 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) { 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 ids = TextUtils.join(",", Stream.of(recipientIds).map(RecipientId::serialize).toList());
String where = " WHERE " + RECIPIENT_ID + " IN (" + ids + ")"; String where = " WHERE " + RECIPIENT_ID + " IN (" + ids + ")";
@ -124,21 +124,21 @@ public class MentionDatabase extends Database {
} }
void deleteMentionsForMessage(long messageId) { void deleteMentionsForMessage(long messageId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String where = MESSAGE_ID + " = ?"; String where = MESSAGE_ID + " = ?";
db.delete(TABLE_NAME, where, SqlUtil.buildArgs(messageId)); db.delete(TABLE_NAME, where, SqlUtil.buildArgs(messageId));
} }
void deleteAbandonedMentions() { 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 + ")"; 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); db.delete(TABLE_NAME, where, null);
} }
void deleteAllMentions() { void deleteAllMentions() {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null); 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.android.mms.pdu_alt.NotificationInd;
import com.google.protobuf.InvalidProtocolBufferException; 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.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.documents.Document; import org.thoughtcrime.securesms.database.documents.Document;
@ -197,7 +197,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
} }
final int getInsecureMessagesSentForThread(long threadId) { final int getInsecureMessagesSentForThread(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[]{"COUNT(*)"}; String[] projection = new String[]{"COUNT(*)"};
String query = THREAD_ID + " = ? AND " + getOutgoingInsecureMessageClause() + " AND " + getDateSentColumnName() + " > ?"; String query = THREAD_ID + " = ? AND " + getOutgoingInsecureMessageClause() + " AND " + getDateSentColumnName() + " > ?";
String[] args = new String[]{String.valueOf(threadId), String.valueOf(System.currentTimeMillis() - InsightsConstants.PERIOD_IN_MILLIS)}; 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) { final int getSecureMessageCount(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[] {"COUNT(*)"}; String[] projection = new String[] {"COUNT(*)"};
String query = getSecureMessageClause() + "AND " + MmsSmsColumns.THREAD_ID + " = ?"; String query = getSecureMessageClause() + "AND " + MmsSmsColumns.THREAD_ID + " = ?";
String[] args = new String[]{String.valueOf(threadId)}; String[] args = new String[]{String.valueOf(threadId)};
@ -235,7 +235,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
} }
final int getOutgoingSecureMessageCount(long threadId) { final int getOutgoingSecureMessageCount(long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[] {"COUNT(*)"}; String[] projection = new String[] {"COUNT(*)"};
String query = getOutgoingSecureMessageClause() + "AND " + MmsSmsColumns.THREAD_ID + " = ? AND" + "(" + getTypeField() + " & " + Types.GROUP_QUIT_BIT + " = 0)"; String query = getOutgoingSecureMessageClause() + "AND " + MmsSmsColumns.THREAD_ID + " = ? AND" + "(" + getTypeField() + " & " + Types.GROUP_QUIT_BIT + " = 0)";
String[] args = new String[]{String.valueOf(threadId)}; String[] args = new String[]{String.valueOf(threadId)};
@ -251,7 +251,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
private int getMessageCountForRecipientsAndType(String typeClause) { private int getMessageCountForRecipientsAndType(String typeClause) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = new String[] {"COUNT(*)"}; String[] projection = new String[] {"COUNT(*)"};
String query = typeClause + " AND " + getDateSentColumnName() + " > ?"; String query = typeClause + " AND " + getDateSentColumnName() + " > ?";
String[] args = new String[]{String.valueOf(System.currentTimeMillis() - InsightsConstants.PERIOD_IN_MILLIS)}; 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) { public void setReactionsSeen(long threadId, long sinceTimestamp) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
String whereClause = THREAD_ID + " = ? AND " + REACTIONS_UNREAD + " = ?"; String whereClause = THREAD_ID + " = ? AND " + REACTIONS_UNREAD + " = ?";
String[] whereArgs = new String[]{String.valueOf(threadId), "1"}; String[] whereArgs = new String[]{String.valueOf(threadId), "1"};
@ -298,7 +298,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
} }
public void setAllReactionsSeen() { public void setAllReactionsSeen() {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
String query = REACTIONS_UNREAD + " != ?"; String query = REACTIONS_UNREAD + " != ?";
String[] args = new String[] { "0" }; 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) { public void addReaction(long messageId, @NonNull ReactionRecord reaction) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
@ -340,7 +340,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
} }
public void deleteReaction(long messageId, @NonNull RecipientId author) { public void deleteReaction(long messageId, @NonNull RecipientId author) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
@ -361,7 +361,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
} }
public boolean hasReaction(long messageId, @NonNull ReactionRecord reactionRecord) { public boolean hasReaction(long messageId, @NonNull ReactionRecord reactionRecord) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
ReactionList reactions = getReactions(db, messageId).or(ReactionList.getDefaultInstance()); ReactionList reactions = getReactions(db, messageId).or(ReactionList.getDefaultInstance());
@ -381,7 +381,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
return; return;
} }
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
SqlUtil.Query where = SqlUtil.buildCollectionQuery(ID, ids); SqlUtil.Query where = SqlUtil.buildCollectionQuery(ID, ids);
ContentValues values = new ContentValues(); 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) { public @NonNull List<ReportSpamData> getReportSpamMessageServerGuids(long threadId, long timestamp) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = THREAD_ID + " = ? AND " + getDateReceivedColumnName() + " <= ?"; String query = THREAD_ID + " = ? AND " + getDateReceivedColumnName() + " <= ?";
String[] args = SqlUtil.buildArgs(threadId, timestamp); 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 { 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(); database.beginTransaction();
try { 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 { 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(); database.beginTransaction();
try { try {

Wyświetl plik

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

Wyświetl plik

@ -24,7 +24,7 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream; 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.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; 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) { 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 order = MmsSmsColumns.NORMALIZED_DATE_RECEIVED + " DESC";
String selection = MmsSmsColumns.THREAD_ID + " = " + threadId; String selection = MmsSmsColumns.THREAD_ID + " = " + threadId;
String limitStr = limit > 0 || offset > 0 ? offset + ", " + limit : null; 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 { 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))) { try (Cursor cursor = db.rawQuery(SNIPPET_QUERY, SqlUtil.buildArgs(threadId, threadId))) {
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
boolean isMms = CursorUtil.requireBoolean(cursor, TRANSPORT); boolean isMms = CursorUtil.requireBoolean(cursor, TRANSPORT);
@ -237,7 +237,7 @@ public class MmsSmsDatabase extends Database {
} }
public long getConversationSnippetType(long threadId) throws NoSuchMessageException { 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))) { try (Cursor cursor = db.rawQuery(SNIPPET_QUERY, SqlUtil.buildArgs(threadId, threadId))) {
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
return CursorUtil.requireLong(cursor, MmsSmsColumns.NORMALIZED_TYPE); return CursorUtil.requireLong(cursor, MmsSmsColumns.NORMALIZED_TYPE);
@ -415,7 +415,7 @@ public class MmsSmsDatabase extends Database {
* @return Whether or not some thread was updated. * @return Whether or not some thread was updated.
*/ */
private boolean incrementReceiptCount(SyncMessageId syncMessageId, long timestamp, @NonNull MessageDatabase.ReceiptType receiptType) { private boolean incrementReceiptCount(SyncMessageId syncMessageId, long timestamp, @NonNull MessageDatabase.ReceiptType receiptType) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context); ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
Set<ThreadUpdate> threadUpdates = new HashSet<>(); 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. * @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) { 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); ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
Set<ThreadUpdate> threadUpdates = new HashSet<>(); Set<ThreadUpdate> threadUpdates = new HashSet<>();
Collection<SyncMessageId> unhandled = 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) { private Cursor queryTables(String[] projection, String selection, String order, String limit) {
String query = buildQuery(projection, selection, order, limit, true); 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) { 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) { public @Nullable PreKeyRecord getPreKey(int keyId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
try (Cursor cursor = database.query(TABLE_NAME, null, KEY_ID + " = ?", try (Cursor cursor = database.query(TABLE_NAME, null, KEY_ID + " = ?",
new String[] {String.valueOf(keyId)}, new String[] {String.valueOf(keyId)},
@ -62,7 +62,7 @@ public class OneTimePreKeyDatabase extends Database {
} }
public void insertPreKey(int keyId, PreKeyRecord record) { public void insertPreKey(int keyId, PreKeyRecord record) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues contentValues = new ContentValues(); ContentValues contentValues = new ContentValues();
contentValues.put(KEY_ID, keyId); contentValues.put(KEY_ID, keyId);
@ -73,7 +73,7 @@ public class OneTimePreKeyDatabase extends Database {
} }
public void removePreKey(int keyId) { public void removePreKey(int keyId) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, KEY_ID + " = ?", new String[] {String.valueOf(keyId)}); 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(); throw new AssertionError();
} }
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(15); ContentValues values = new ContentValues(15);
values.put(PAYMENT_UUID, uuid.toString()); values.put(PAYMENT_UUID, uuid.toString());
@ -247,14 +247,14 @@ public final class PaymentDatabase extends Database {
} }
public void deleteAll() { public void deleteAll() {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, null, null); database.delete(TABLE_NAME, null, null);
Log.i(TAG, "Deleted all records"); Log.i(TAG, "Deleted all records");
} }
@WorkerThread @WorkerThread
public boolean delete(@NonNull UUID uuid) { public boolean delete(@NonNull UUID uuid) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = PAYMENT_UUID + " = ?"; String where = PAYMENT_UUID + " = ?";
String[] args = {uuid.toString()}; String[] args = {uuid.toString()};
int deleted; int deleted;
@ -281,7 +281,7 @@ public final class PaymentDatabase extends Database {
@WorkerThread @WorkerThread
public @NonNull List<PaymentTransaction> getAll() { public @NonNull List<PaymentTransaction> getAll() {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<PaymentTransaction> result = new LinkedList<>(); List<PaymentTransaction> result = new LinkedList<>();
try (Cursor cursor = database.query(TABLE_NAME, null, null, null, null, null, TIMESTAMP + " DESC")) { 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 @WorkerThread
public void markAllSeen() { public void markAllSeen() {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(1); ContentValues values = new ContentValues(1);
List<UUID> unseenIds = new LinkedList<>(); List<UUID> unseenIds = new LinkedList<>();
String[] unseenProjection = SqlUtil.buildArgs(PAYMENT_UUID); String[] unseenProjection = SqlUtil.buildArgs(PAYMENT_UUID);
@ -334,7 +334,7 @@ public final class PaymentDatabase extends Database {
@WorkerThread @WorkerThread
public void markPaymentSeen(@NonNull UUID uuid) { public void markPaymentSeen(@NonNull UUID uuid) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(1); ContentValues values = new ContentValues(1);
String where = PAYMENT_UUID + " = ?"; String where = PAYMENT_UUID + " = ?";
String[] args = {uuid.toString()}; String[] args = {uuid.toString()};
@ -349,7 +349,7 @@ public final class PaymentDatabase extends Database {
@WorkerThread @WorkerThread
public @NonNull List<PaymentTransaction> getUnseenPayments() { public @NonNull List<PaymentTransaction> getUnseenPayments() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = SEEN + " = 0 AND " + STATE + " = " + State.SUCCESSFUL.serialize(); String query = SEEN + " = 0 AND " + STATE + " = " + State.SUCCESSFUL.serialize();
List<PaymentTransaction> results = new LinkedList<>(); List<PaymentTransaction> results = new LinkedList<>();
@ -364,7 +364,7 @@ public final class PaymentDatabase extends Database {
@WorkerThread @WorkerThread
public @Nullable PaymentTransaction getPayment(@NonNull UUID uuid) { public @Nullable PaymentTransaction getPayment(@NonNull UUID uuid) {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String select = PAYMENT_UUID + " = ?"; String select = PAYMENT_UUID + " = ?";
String[] args = {uuid.toString()}; String[] args = {uuid.toString()};
@ -394,7 +394,7 @@ public final class PaymentDatabase extends Database {
@NonNull Money fee) @NonNull Money fee)
throws PublicKeyConflictException throws PublicKeyConflictException
{ {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = PAYMENT_UUID + " = ?"; String where = PAYMENT_UUID + " = ?";
String[] whereArgs = {uuid.toString()}; String[] whereArgs = {uuid.toString()};
int updated; int updated;
@ -449,7 +449,7 @@ public final class PaymentDatabase extends Database {
@Nullable FailureReason failureReason, @Nullable FailureReason failureReason,
@Nullable Long blockIndex) @Nullable Long blockIndex)
{ {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = PAYMENT_UUID + " = ?"; String where = PAYMENT_UUID + " = ?";
String[] whereArgs = {uuid.toString()}; String[] whereArgs = {uuid.toString()};
int updated; int updated;
@ -499,7 +499,7 @@ public final class PaymentDatabase extends Database {
long blockIndex, long blockIndex,
long blockTimestamp) long blockTimestamp)
{ {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = PAYMENT_UUID + " = ?"; String where = PAYMENT_UUID + " = ?";
String[] whereArgs = {uuid.toString()}; String[] whereArgs = {uuid.toString()};
int updated; int updated;

Wyświetl plik

@ -6,6 +6,8 @@ import android.database.Cursor;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.database.model.PendingRetryReceiptModel; import org.thoughtcrime.securesms.database.model.PendingRetryReceiptModel;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
@ -51,7 +53,7 @@ public final class PendingRetryReceiptDatabase extends Database {
values.put(RECEIVED_TIMESTAMP, receivedTimestamp); values.put(RECEIVED_TIMESTAMP, receivedTimestamp);
values.put(THREAD_ID, threadId); 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); return new PendingRetryReceiptModel(id, author, authorDevice, sentTimestamp, receivedTimestamp, threadId);
} }
@ -59,7 +61,7 @@ public final class PendingRetryReceiptDatabase extends Database {
@NonNull List<PendingRetryReceiptModel> getAll() { @NonNull List<PendingRetryReceiptModel> getAll() {
List<PendingRetryReceiptModel> models = new LinkedList<>(); 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()) { while (cursor.moveToNext()) {
models.add(fromCursor(cursor)); models.add(fromCursor(cursor));
} }
@ -69,7 +71,7 @@ public final class PendingRetryReceiptDatabase extends Database {
} }
void delete(@NonNull PendingRetryReceiptModel model) { 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) { 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_DELIVERED_TIMESTAMP, envelope.getServerDeliveredTimestamp());
values.put(SERVER_GUID, envelope.getServerGuid()); values.put(SERVER_GUID, envelope.getServerGuid());
return databaseHelper.getWritableDatabase().insert(TABLE_NAME, null, values); return databaseHelper.getSignalWritableDatabase().insert(TABLE_NAME, null, values);
} }
} }
@ -77,7 +77,7 @@ public class PushDatabase extends Database {
Cursor cursor = null; Cursor cursor = null;
try { try {
cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, null, ID_WHERE, cursor = databaseHelper.getSignalReadableDatabase().query(TABLE_NAME, null, ID_WHERE,
new String[] {String.valueOf(id)}, new String[] {String.valueOf(id)},
null, null, null); null, null, null);
@ -109,11 +109,11 @@ public class PushDatabase extends Database {
} }
public Cursor getPending() { 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) { 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) { public Reader readerFor(Cursor cursor) {
@ -121,7 +121,7 @@ public class PushDatabase extends Database {
} }
private Optional<Long> find(SignalServiceEnvelope envelope) { private Optional<Long> find(SignalServiceEnvelope envelope) {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = TYPE + " = ? AND " + String query = TYPE + " = ? AND " +
DEVICE_ID + " = ? AND " + DEVICE_ID + " = ? AND " +
LEGACY_MSG + " = ? 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.ByteString;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
import net.sqlcipher.SQLException; import net.zetetic.database.sqlcipher.SQLiteConstraintException;
import net.sqlcipher.database.SQLiteConstraintException;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
@ -387,7 +386,7 @@ public class RecipientDatabase extends Database {
} }
public @NonNull boolean containsPhoneOrUuid(@NonNull String id) { public @NonNull boolean containsPhoneOrUuid(@NonNull String id) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = UUID + " = ? OR " + PHONE + " = ?"; String query = UUID + " = ? OR " + PHONE + " = ?";
String[] args = new String[]{id, id}; String[] args = new String[]{id, id};
@ -429,7 +428,7 @@ public class RecipientDatabase extends Database {
Pair<RecipientId, RecipientId> remapped = null; Pair<RecipientId, RecipientId> remapped = null;
boolean transactionSuccessful = false; boolean transactionSuccessful = false;
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -598,7 +597,7 @@ public class RecipientDatabase extends Database {
values.put(GROUP_ID, groupId.toString()); values.put(GROUP_ID, groupId.toString());
values.put(AVATAR_COLOR, AvatarColor.random().serialize()); 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) { if (id < 0) {
existing = getByColumn(GROUP_ID, groupId.toString()); existing = getByColumn(GROUP_ID, groupId.toString());
@ -639,7 +638,7 @@ public class RecipientDatabase extends Database {
* See {@link Recipient#externalPossiblyMigratedGroup(Context, GroupId)}. * See {@link Recipient#externalPossiblyMigratedGroup(Context, GroupId)}.
*/ */
public @NonNull RecipientId getOrInsertFromPossiblyMigratedGroupId(@NonNull GroupId groupId) { public @NonNull RecipientId getOrInsertFromPossiblyMigratedGroupId(@NonNull GroupId groupId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -676,7 +675,7 @@ public class RecipientDatabase extends Database {
} }
public Cursor getBlocked() { public Cursor getBlocked() {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
return database.query(TABLE_NAME, ID_PROJECTION, BLOCKED + " = 1", return database.query(TABLE_NAME, ID_PROJECTION, BLOCKED + " = 1",
null, null, null, null, null); null, null, null, null, null);
@ -687,7 +686,7 @@ public class RecipientDatabase extends Database {
} }
public RecipientReader getRecipientsWithNotificationChannels() { public RecipientReader getRecipientsWithNotificationChannels() {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
Cursor cursor = database.query(TABLE_NAME, ID_PROJECTION, NOTIFICATION_CHANNEL + " NOT NULL", Cursor cursor = database.query(TABLE_NAME, ID_PROJECTION, NOTIFICATION_CHANNEL + " NOT NULL",
null, null, null, null, null); null, null, null, null, null);
@ -695,7 +694,7 @@ public class RecipientDatabase extends Database {
} }
public @NonNull RecipientSettings getRecipientSettings(@NonNull RecipientId id) { public @NonNull RecipientSettings getRecipientSettings(@NonNull RecipientId id) {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = ID + " = ?"; String query = ID + " = ?";
String[] args = new String[] { id.serialize() }; String[] args = new String[] { id.serialize() };
@ -742,7 +741,7 @@ public class RecipientDatabase extends Database {
} }
public void markNeedsSyncWithoutRefresh(@NonNull Collection<RecipientId> recipientIds) { public void markNeedsSyncWithoutRefresh(@NonNull Collection<RecipientId> recipientIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -761,7 +760,7 @@ public class RecipientDatabase extends Database {
} }
public void applyStorageIdUpdates(@NonNull Map<RecipientId, StorageId> storageIds) { public void applyStorageIdUpdates(@NonNull Map<RecipientId, StorageId> storageIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -784,7 +783,7 @@ public class RecipientDatabase extends Database {
} }
public void applyStorageSyncContactInsert(@NonNull SignalContactRecord insert) { public void applyStorageSyncContactInsert(@NonNull SignalContactRecord insert) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context); ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
ContentValues values = getValuesForStorageContact(insert, true); ContentValues values = getValuesForStorageContact(insert, true);
@ -813,7 +812,7 @@ public class RecipientDatabase extends Database {
} }
public void applyStorageSyncContactUpdate(@NonNull StorageRecordUpdate<SignalContactRecord> update) { public void applyStorageSyncContactUpdate(@NonNull StorageRecordUpdate<SignalContactRecord> update) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
IdentityDatabase identityDatabase = DatabaseFactory.getIdentityDatabase(context); IdentityDatabase identityDatabase = DatabaseFactory.getIdentityDatabase(context);
ContentValues values = getValuesForStorageContact(update.getNew(), false); ContentValues values = getValuesForStorageContact(update.getNew(), false);
@ -871,7 +870,7 @@ public class RecipientDatabase extends Database {
} }
public void applyStorageSyncGroupV1Insert(@NonNull SignalGroupV1Record insert) { public void applyStorageSyncGroupV1Insert(@NonNull SignalGroupV1Record insert) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
long id = db.insertOrThrow(TABLE_NAME, null, getValuesForStorageGroupV1(insert, true)); long id = db.insertOrThrow(TABLE_NAME, null, getValuesForStorageGroupV1(insert, true));
RecipientId recipientId = RecipientId.from(id); RecipientId recipientId = RecipientId.from(id);
@ -882,7 +881,7 @@ public class RecipientDatabase extends Database {
} }
public void applyStorageSyncGroupV1Update(@NonNull StorageRecordUpdate<SignalGroupV1Record> update) { public void applyStorageSyncGroupV1Update(@NonNull StorageRecordUpdate<SignalGroupV1Record> update) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = getValuesForStorageGroupV1(update.getNew(), false); ContentValues values = getValuesForStorageGroupV1(update.getNew(), false);
int updateCount = db.update(TABLE_NAME, values, STORAGE_SERVICE_ID + " = ?", new String[]{Base64.encodeBytes(update.getOld().getId().getRaw())}); 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) { public void applyStorageSyncGroupV2Insert(@NonNull SignalGroupV2Record insert) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
GroupMasterKey masterKey = insert.getMasterKeyOrThrow(); GroupMasterKey masterKey = insert.getMasterKeyOrThrow();
GroupId.V2 groupId = GroupId.v2(masterKey); GroupId.V2 groupId = GroupId.v2(masterKey);
@ -924,7 +923,7 @@ public class RecipientDatabase extends Database {
} }
public void applyStorageSyncGroupV2Update(@NonNull StorageRecordUpdate<SignalGroupV2Record> update) { public void applyStorageSyncGroupV2Update(@NonNull StorageRecordUpdate<SignalGroupV2Record> update) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = getValuesForStorageGroupV2(update.getNew(), false); ContentValues values = getValuesForStorageGroupV2(update.getNew(), false);
int updateCount = db.update(TABLE_NAME, values, STORAGE_SERVICE_ID + " = ?", new String[]{Base64.encodeBytes(update.getOld().getId().getRaw())}); 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) { public void applyStorageSyncAccountUpdate(@NonNull StorageRecordUpdate<SignalAccountRecord> update) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
ProfileName profileName = ProfileName.fromParts(update.getNew().getGivenName().orNull(), update.getNew().getFamilyName().orNull()); 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) { public void updatePhoneNumbers(@NonNull Map<String, String> mapping) {
if (mapping.isEmpty()) return; if (mapping.isEmpty()) return;
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -1003,7 +1002,7 @@ public class RecipientDatabase extends Database {
} }
private @NonNull RecipientId getByStorageKeyOrThrow(byte[] storageKey) { private @NonNull RecipientId getByStorageKeyOrThrow(byte[] storageKey) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = STORAGE_SERVICE_ID + " = ?"; String query = STORAGE_SERVICE_ID + " = ?";
String[] args = new String[]{Base64.encodeBytes(storageKey)}; 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) { 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 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 " + 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; + " 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. * @return All storage IDs for ContactRecords, excluding the ones that need to be deleted.
*/ */
public @NonNull Map<RecipientId, StorageId> getContactStorageSyncIdsMap() { 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 query = STORAGE_SERVICE_ID + " NOT NULL AND " + ID + " != ? AND " + GROUP_TYPE + " != ?";
String[] args = SqlUtil.buildArgs(Recipient.self().getId(), String.valueOf(GroupType.SIGNAL_V2.getId())); String[] args = SqlUtil.buildArgs(Recipient.self().getId(), String.valueOf(GroupType.SIGNAL_V2.getId()));
Map<RecipientId, StorageId> out = new HashMap<>(); Map<RecipientId, StorageId> out = new HashMap<>();
@ -1347,7 +1346,7 @@ public class RecipientDatabase extends Database {
} }
public BulkOperationsHandle beginBulkSystemContactUpdate() { public BulkOperationsHandle beginBulkSystemContactUpdate() {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.beginTransaction(); database.beginTransaction();
ContentValues contentValues = new ContentValues(1); ContentValues contentValues = new ContentValues(1);
@ -1359,7 +1358,7 @@ public class RecipientDatabase extends Database {
} }
void onUpdatedChatColors(@NonNull ChatColors chatColors) { void onUpdatedChatColors(@NonNull ChatColors chatColors) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = CUSTOM_CHAT_COLORS_ID + " = ?"; String where = CUSTOM_CHAT_COLORS_ID + " = ?";
String[] args = SqlUtil.buildArgs(chatColors.getId().getLongValue()); String[] args = SqlUtil.buildArgs(chatColors.getId().getLongValue());
List<RecipientId> updated = new LinkedList<>(); List<RecipientId> updated = new LinkedList<>();
@ -1387,7 +1386,7 @@ public class RecipientDatabase extends Database {
} }
void onDeletedChatColors(@NonNull ChatColors chatColors) { void onDeletedChatColors(@NonNull ChatColors chatColors) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = CUSTOM_CHAT_COLORS_ID + " = ?"; String where = CUSTOM_CHAT_COLORS_ID + " = ?";
String[] args = SqlUtil.buildArgs(chatColors.getId().getLongValue()); String[] args = SqlUtil.buildArgs(chatColors.getId().getLongValue());
List<RecipientId> updated = new LinkedList<>(); List<RecipientId> updated = new LinkedList<>();
@ -1415,7 +1414,7 @@ public class RecipientDatabase extends Database {
} }
public int getColorUsageCount(@NotNull ChatColors.Id chatColorsId) { public int getColorUsageCount(@NotNull ChatColors.Id chatColorsId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String[] projection = SqlUtil.buildArgs("COUNT(*)"); String[] projection = SqlUtil.buildArgs("COUNT(*)");
String where = CUSTOM_CHAT_COLORS_ID + " = ?"; String where = CUSTOM_CHAT_COLORS_ID + " = ?";
String[] args = SqlUtil.buildArgs(chatColorsId.getLongValue()); String[] args = SqlUtil.buildArgs(chatColorsId.getLongValue());
@ -1431,7 +1430,7 @@ public class RecipientDatabase extends Database {
} }
public void clearAllColors() { public void clearAllColors() {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String where = CUSTOM_CHAT_COLORS_ID + " != ?"; String where = CUSTOM_CHAT_COLORS_ID + " != ?";
String[] args = SqlUtil.buildArgs(ChatColors.Id.NotSet.INSTANCE.getLongValue()); String[] args = SqlUtil.buildArgs(ChatColors.Id.NotSet.INSTANCE.getLongValue());
List<RecipientId> toUpdate = new LinkedList<>(); List<RecipientId> toUpdate = new LinkedList<>();
@ -1555,7 +1554,7 @@ public class RecipientDatabase extends Database {
} }
private void setInsightsBannerTier(@NonNull RecipientId id, @NonNull InsightsBannerTier insightsBannerTier) { private void setInsightsBannerTier(@NonNull RecipientId id, @NonNull InsightsBannerTier insightsBannerTier) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(1); ContentValues values = new ContentValues(1);
String query = ID + " = ? AND " + SEEN_INVITE_REMINDER + " < ?"; String query = ID + " = ? AND " + SEEN_INVITE_REMINDER + " < ?";
String[] args = new String[]{ id.serialize(), String.valueOf(insightsBannerTier) }; 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) { 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)) { try (Cursor cursor = db.query(TABLE_NAME, new String[] {LAST_SESSION_RESET}, ID_WHERE, SqlUtil.buildArgs(id), null, null, null)) {
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
@ -1599,7 +1598,7 @@ public class RecipientDatabase extends Database {
} else { } else {
return DeviceLastResetTime.newBuilder().build(); return DeviceLastResetTime.newBuilder().build();
} }
} catch (InvalidProtocolBufferException | SQLException e) { } catch (InvalidProtocolBufferException e) {
Log.w(TAG, e); Log.w(TAG, e);
return DeviceLastResetTime.newBuilder().build(); return DeviceLastResetTime.newBuilder().build();
} }
@ -1670,7 +1669,7 @@ public class RecipientDatabase extends Database {
* @return true iff changed. * @return true iff changed.
*/ */
public boolean setProfileKeyIfAbsent(@NonNull RecipientId id, @NonNull ProfileKey profileKey) { 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 selection = ID + " = ? AND " + PROFILE_KEY + " is NULL";
String[] args = new String[]{id.serialize()}; String[] args = new String[]{id.serialize()};
ContentValues valuesToSet = new ContentValues(3); ContentValues valuesToSet = new ContentValues(3);
@ -1777,7 +1776,7 @@ public class RecipientDatabase extends Database {
} }
public @NonNull List<RecipientId> getSimilarRecipientIds(@NonNull Recipient recipient) { 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[] projection = SqlUtil.buildArgs(ID, "COALESCE(" + nullIfEmpty(SYSTEM_JOINED_NAME) + ", " + nullIfEmpty(PROFILE_JOINED_NAME) + ") AS checked_name");
String where = "checked_name = ?"; String where = "checked_name = ?";
@ -1862,7 +1861,7 @@ public class RecipientDatabase extends Database {
} }
public void resetAllWallpaper() { public void resetAllWallpaper() {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
String[] selection = SqlUtil.buildArgs(ID, WALLPAPER_URI); String[] selection = SqlUtil.buildArgs(ID, WALLPAPER_URI);
String where = WALLPAPER + " IS NOT NULL"; String where = WALLPAPER + " IS NOT NULL";
List<Pair<RecipientId, String>> idWithWallpaper = new LinkedList<>(); List<Pair<RecipientId, String>> idWithWallpaper = new LinkedList<>();
@ -1944,7 +1943,7 @@ public class RecipientDatabase extends Database {
} }
private @Nullable Wallpaper getWallpaper(@NonNull RecipientId id) { 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)) { try (Cursor cursor = db.query(TABLE_NAME, new String[] {WALLPAPER}, ID_WHERE, SqlUtil.buildArgs(id), null, null, null)) {
if (cursor.moveToFirst()) { if (cursor.moveToFirst()) {
@ -1976,7 +1975,7 @@ public class RecipientDatabase extends Database {
} }
public int getWallpaperUriUsageCount(@NonNull Uri uri) { public int getWallpaperUriUsageCount(@NonNull Uri uri) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = WALLPAPER_URI + " = ?"; String query = WALLPAPER_URI + " = ?";
String[] args = SqlUtil.buildArgs(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. * @return True if setting the phone number resulted in changed recipientId, otherwise false.
*/ */
public boolean setPhoneNumber(@NonNull RecipientId id, @NonNull String e164) { public boolean setPhoneNumber(@NonNull RecipientId id, @NonNull String e164) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -2061,7 +2060,7 @@ public class RecipientDatabase extends Database {
} }
public Set<String> getAllPhoneNumbers() { public Set<String> getAllPhoneNumbers() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Set<String> results = new HashSet<>(); Set<String> results = new HashSet<>();
try (Cursor cursor = db.query(TABLE_NAME, new String[] { PHONE }, null, null, null, null, null)) { 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. * @return True if setting the UUID resulted in changed recipientId, otherwise false.
*/ */
public boolean markRegistered(@NonNull RecipientId id, @NonNull UUID uuid) { public boolean markRegistered(@NonNull RecipientId id, @NonNull UUID uuid) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -2142,7 +2141,7 @@ public class RecipientDatabase extends Database {
} }
public void bulkUpdatedRegisteredStatus(@NonNull Map<RecipientId, String> registered, Collection<RecipientId> unregistered) { public void bulkUpdatedRegisteredStatus(@NonNull Map<RecipientId, String> registered, Collection<RecipientId> unregistered) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -2188,7 +2187,7 @@ public class RecipientDatabase extends Database {
* @return A mapping of (RecipientId, UUID) * @return A mapping of (RecipientId, UUID)
*/ */
public @NonNull Map<RecipientId, String> bulkProcessCdsResult(@NonNull Map<String, UUID> mapping) { 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<>(); HashMap<RecipientId, String> uuidMap = new HashMap<>();
db.beginTransaction(); db.beginTransaction();
@ -2219,7 +2218,7 @@ public class RecipientDatabase extends Database {
} }
public @NonNull List<RecipientId> getUninvitedRecipientsForInsights() { public @NonNull List<RecipientId> getUninvitedRecipientsForInsights() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<RecipientId> results = new LinkedList<>(); List<RecipientId> results = new LinkedList<>();
final String[] args = new String[]{String.valueOf(System.currentTimeMillis() - TimeUnit.DAYS.toMillis(31))}; 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() { public @NonNull List<RecipientId> getRegistered() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<RecipientId> results = new LinkedList<>(); List<RecipientId> results = new LinkedList<>();
try (Cursor cursor = db.query(TABLE_NAME, ID_PROJECTION, REGISTERED + " = ?", new String[] {"1"}, null, null, null)) { 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() { public List<RecipientId> getSystemContacts() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
List<RecipientId> results = new LinkedList<>(); 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)) { 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 @Deprecated
public void updateSystemContactColors() { public void updateSystemContactColors() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Map<RecipientId, ChatColors> updates = new HashMap<>(); Map<RecipientId, ChatColors> updates = new HashMap<>();
db.beginTransaction(); db.beginTransaction();
@ -2326,7 +2325,7 @@ public class RecipientDatabase extends Database {
String[] args = searchSelection.getArgs(); String[] args = searchSelection.getArgs();
String orderBy = SORT_NAME + ", " + SYSTEM_JOINED_NAME + ", " + SEARCH_PROFILE_NAME + ", " + USERNAME + ", " + PHONE; 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) { 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; 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() { public @Nullable Cursor getNonSignalContacts() {
@ -2355,7 +2354,7 @@ public class RecipientDatabase extends Database {
String[] args = searchSelection.getArgs(); String[] args = searchSelection.getArgs();
String orderBy = SYSTEM_JOINED_NAME + ", " + PHONE; 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) { public @Nullable Cursor queryNonSignalContacts(@NonNull String query) {
@ -2370,7 +2369,7 @@ public class RecipientDatabase extends Database {
String[] args = searchSelection.getArgs(); String[] args = searchSelection.getArgs();
String orderBy = SYSTEM_JOINED_NAME + ", " + PHONE; 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) { public @Nullable Cursor getNonGroupContacts(boolean includeSelf) {
@ -2382,7 +2381,7 @@ public class RecipientDatabase extends Database {
String orderBy = orderByPreferringAlphaOverNumeric(SORT_NAME) + ", " + PHONE; 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) { public @Nullable Cursor queryNonGroupContacts(@NonNull String query, boolean includeSelf) {
@ -2399,7 +2398,7 @@ public class RecipientDatabase extends Database {
String[] args = searchSelection.getArgs(); String[] args = searchSelection.getArgs();
String orderBy = orderByPreferringAlphaOverNumeric(SORT_NAME) + ", " + PHONE; 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) { 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); 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) { public @NonNull List<Recipient> queryRecipientsForMentions(@NonNull String query) {
@ -2434,7 +2433,7 @@ public class RecipientDatabase extends Database {
SORT_NAME + " GLOB ?"; SORT_NAME + " GLOB ?";
List<Recipient> recipients = new ArrayList<>(); 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; Recipient recipient;
while ((recipient = reader.getNext()) != null) { while ((recipient = reader.getNext()) != null) {
recipients.add(recipient); recipients.add(recipient);
@ -2539,7 +2538,7 @@ public class RecipientDatabase extends Database {
List<Recipient> recipients = new ArrayList<>(); 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()) { while (cursor != null && cursor.moveToNext()) {
recipients.add(Recipient.resolved(RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(ID))))); 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) { public void markProfilesFetched(@NonNull Collection<RecipientId> ids, long time) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
ContentValues values = new ContentValues(1); ContentValues values = new ContentValues(1);
@ -2605,7 +2604,7 @@ public class RecipientDatabase extends Database {
.map(b -> b.getUuid().get().toString().toLowerCase()) .map(b -> b.getUuid().get().toString().toLowerCase())
.toList(); .toList();
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -2644,7 +2643,7 @@ public class RecipientDatabase extends Database {
} }
public void updateStorageIds(@NonNull Map<RecipientId, byte[]> ids) { public void updateStorageIds(@NonNull Map<RecipientId, byte[]> ids) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -2677,7 +2676,7 @@ public class RecipientDatabase extends Database {
+ ")"; + ")";
List<Long> idsToUpdate = new ArrayList<>(); List<Long> idsToUpdate = new ArrayList<>();
try (Cursor cursor = databaseHelper.getReadableDatabase().rawQuery(select, whereArgs)) { try (Cursor cursor = databaseHelper.getSignalReadableDatabase().rawQuery(select, whereArgs)) {
while (cursor.moveToNext()) { while (cursor.moveToNext()) {
idsToUpdate.add(CursorUtil.requireLong(cursor, ID)); idsToUpdate.add(CursorUtil.requireLong(cursor, ID));
} }
@ -2687,7 +2686,7 @@ public class RecipientDatabase extends Database {
SqlUtil.Query query = SqlUtil.buildCollectionQuery(ID, idsToUpdate); SqlUtil.Query query = SqlUtil.buildCollectionQuery(ID, idsToUpdate);
ContentValues values = new ContentValues(1); ContentValues values = new ContentValues(1);
values.put(PROFILE_SHARING, 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) { for (long id : idsToUpdate) {
Recipient.live(RecipientId.from(id)).refresh(); Recipient.live(RecipientId.from(id)).refresh();
@ -2701,7 +2700,7 @@ public class RecipientDatabase extends Database {
} }
SqlUtil.Query query = SqlUtil.buildCollectionQuery(ID, recipientIds); SqlUtil.Query query = SqlUtil.buildCollectionQuery(ID, recipientIds);
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
try (Cursor cursor = db.query(TABLE_NAME, try (Cursor cursor = db.query(TABLE_NAME,
new String[]{ID}, new String[]{ID},
query.getWhere() + " AND " + GROUPS_IN_COMMON + " = 0", 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) { private void updateExtras(@NonNull RecipientId recipientId, @NonNull Function<RecipientExtras.Builder, RecipientExtras.Builder> updater) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
try (Cursor cursor = db.query(TABLE_NAME, new String[]{ID, EXTRAS}, ID_WHERE, SqlUtil.buildArgs(recipientId), null, null, null)) { 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 query = ID + " = ? AND (" + GROUP_TYPE + " IN (?, ?) OR " + REGISTERED + " = ?)";
String[] args = SqlUtil.buildArgs(recipientId, GroupType.SIGNAL_V1.getId(), GroupType.SIGNAL_V2.getId(), RegisteredState.REGISTERED.getId()); 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 query = ID + " = ? AND " + STORAGE_SERVICE_ID + " IS NULL";
String[] args = SqlUtil.buildArgs(recipientId); 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}. * 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) { 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; return database.update(TABLE_NAME, contentValues, updateQuery.getWhere(), updateQuery.getWhereArgs()) > 0;
} }
private @NonNull private @NonNull
Optional<RecipientId> getByColumn(@NonNull String column, String value) { Optional<RecipientId> getByColumn(@NonNull String column, String value) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String query = column + " = ?"; String query = column + " = ?";
String[] args = new String[] { value }; String[] args = new String[] { value };
@ -2851,7 +2850,7 @@ public class RecipientDatabase extends Database {
values.put(column, value); values.put(column, value);
values.put(AVATAR_COLOR, AvatarColor.random().serialize()); 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) { if (id < 0) {
existing = getByColumn(column, value); existing = getByColumn(column, value);
@ -2875,7 +2874,7 @@ public class RecipientDatabase extends Database {
private @NonNull RecipientId merge(@NonNull RecipientId byUuid, @NonNull RecipientId byE164) { private @NonNull RecipientId merge(@NonNull RecipientId byUuid, @NonNull RecipientId byE164) {
ensureInTransaction(); ensureInTransaction();
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
RecipientSettings uuidSettings = getRecipientSettings(byUuid); RecipientSettings uuidSettings = getRecipientSettings(byUuid);
RecipientSettings e164Settings = getRecipientSettings(byE164); RecipientSettings e164Settings = getRecipientSettings(byE164);
@ -3005,7 +3004,7 @@ public class RecipientDatabase extends Database {
} }
private void ensureInTransaction() { private void ensureInTransaction() {
if (!databaseHelper.getWritableDatabase().inTransaction()) { if (!databaseHelper.getSignalWritableDatabase().inTransaction()) {
throw new IllegalStateException("Must be in a transaction!"); 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.ContentValues;
import android.content.Context; import android.content.Context;
import android.database.Cursor;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import net.sqlcipher.Cursor;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientId;
import org.thoughtcrime.securesms.util.CursorUtil; import org.thoughtcrime.securesms.util.CursorUtil;
@ -49,7 +48,7 @@ public class RemappedRecordsDatabase extends Database {
} }
@NonNull Map<RecipientId, RecipientId> getAllRecipientMappings() { @NonNull Map<RecipientId, RecipientId> getAllRecipientMappings() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Map<RecipientId, RecipientId> recipientMap = new HashMap<>(); Map<RecipientId, RecipientId> recipientMap = new HashMap<>();
db.beginTransaction(); db.beginTransaction();
@ -71,7 +70,7 @@ public class RemappedRecordsDatabase extends Database {
} }
@NonNull Map<Long, Long> getAllThreadMappings() { @NonNull Map<Long, Long> getAllThreadMappings() {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
Map<Long, Long> threadMap = new HashMap<>(); Map<Long, Long> threadMap = new HashMap<>();
db.beginTransaction(); db.beginTransaction();
@ -101,7 +100,7 @@ public class RemappedRecordsDatabase extends Database {
private @NonNull List<Mapping> getAllMappings(@NonNull String table) { private @NonNull List<Mapping> getAllMappings(@NonNull String table) {
List<Mapping> mappings = new LinkedList<>(); 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()) { while (cursor != null && cursor.moveToNext()) {
long oldId = CursorUtil.requireLong(cursor, SharedColumns.OLD_ID); long oldId = CursorUtil.requireLong(cursor, SharedColumns.OLD_ID);
long newId = CursorUtil.requireLong(cursor, SharedColumns.NEW_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.OLD_ID, mapping.getOldId());
values.put(SharedColumns.NEW_ID, mapping.getNewId()); values.put(SharedColumns.NEW_ID, mapping.getNewId());
databaseHelper.getWritableDatabase().insert(table, null, values); databaseHelper.getSignalWritableDatabase().insert(table, null, values);
} }
static final class Mapping { static final class Mapping {

Wyświetl plik

@ -2,22 +2,20 @@ package org.thoughtcrime.securesms.database;
import android.content.ContentValues; import android.content.ContentValues;
import android.database.Cursor;
import net.sqlcipher.Cursor; import net.zetetic.database.SQLException;
import net.sqlcipher.SQLException; import net.zetetic.database.sqlcipher.SQLiteStatement;
import net.sqlcipher.database.SQLiteQueryStats; import net.zetetic.database.sqlcipher.SQLiteTransactionListener;
import net.sqlcipher.database.SQLiteStatement;
import net.sqlcipher.database.SQLiteTransactionListener;
import org.signal.core.util.tracing.Tracer; import org.signal.core.util.tracing.Tracer;
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
import java.util.Map; 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 * making a subclass, so instead we just match the interface. Callers should just need to change
* their import statements. * their import statements.
*/ */
@ -35,10 +33,11 @@ public class SQLiteDatabase {
private static final String KEY_THREAD = "thread"; private static final String KEY_THREAD = "thread";
private static final String NAME_LOCK = "LOCK"; private static final String NAME_LOCK = "LOCK";
private final net.sqlcipher.database.SQLiteDatabase wrapped;
private final net.zetetic.database.sqlcipher.SQLiteDatabase wrapped;
private final Tracer tracer; private final Tracer tracer;
public SQLiteDatabase(net.sqlcipher.database.SQLiteDatabase wrapped) { public SQLiteDatabase(net.zetetic.database.sqlcipher.SQLiteDatabase wrapped) {
this.wrapped = wrapped; this.wrapped = wrapped;
this.tracer = Tracer.getInstance(); this.tracer = Tracer.getInstance();
} }
@ -99,7 +98,7 @@ public class SQLiteDatabase {
return result; return result;
} }
public net.sqlcipher.database.SQLiteDatabase getSqlCipherDatabase() { public net.zetetic.database.sqlcipher.SQLiteDatabase getSqlCipherDatabase() {
return wrapped; 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)); 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)); 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)); 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)); return traceSql("rawQueryWithFactory()", sql, false, () -> wrapped.rawQueryWithFactory(cursorFactory, sql, selectionArgs, editTable));
} }
@ -283,10 +282,6 @@ public class SQLiteDatabase {
return wrapped.compileStatement(sql); return wrapped.compileStatement(sql);
} }
public SQLiteQueryStats getQueryStats(String sql, Object[] args) {
return wrapped.getQueryStats(sql, args);
}
public boolean isReadOnly() { public boolean isReadOnly() {
return wrapped.isReadOnly(); return wrapped.isReadOnly();
} }
@ -306,24 +301,4 @@ public class SQLiteDatabase {
public void setLocale(Locale locale) { public void setLocale(Locale locale) {
wrapped.setLocale(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; package org.thoughtcrime.securesms.database;
import android.content.Context; import android.content.Context;
import android.database.Cursor;
import android.text.TextUtils; import android.text.TextUtils;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.annimon.stream.Stream; import com.annimon.stream.Stream;
import net.sqlcipher.Cursor;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper; import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
/** /**
@ -126,7 +125,7 @@ public class SearchDatabase extends Database {
} }
public Cursor queryMessages(@NonNull String query) { public Cursor queryMessages(@NonNull String query) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String fullTextSearchQuery = createFullTextSearchQuery(query); String fullTextSearchQuery = createFullTextSearchQuery(query);
if (TextUtils.isEmpty(fullTextSearchQuery)) { if (TextUtils.isEmpty(fullTextSearchQuery)) {
@ -137,7 +136,7 @@ public class SearchDatabase extends Database {
} }
public Cursor queryMessages(@NonNull String query, long threadId) { public Cursor queryMessages(@NonNull String query, long threadId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String fullTextSearchQuery = createFullTextSearchQuery(query); String fullTextSearchQuery = createFullTextSearchQuery(query);
if (TextUtils.isEmpty(fullTextSearchQuery)) { 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) { 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(); ContentValues values = new ContentValues();
values.put(RECIPIENT_ID, recipientId.serialize()); 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) { 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 query = RECIPIENT_ID + " = ? AND " + DEVICE + " = ? AND " + DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(recipientId, deviceId, distributionId); 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. * 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) { 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 query = RECIPIENT_ID + " = ? AND " + DEVICE + " = ? AND " + DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(recipientId, deviceId, distributionId); 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. * Removes all sender key session state for all devices for the provided recipient-distributionId pair.
*/ */
public void deleteAllFor(@NonNull RecipientId recipientId, @NonNull DistributionId distributionId) { 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 query = RECIPIENT_ID + " = ? AND " + DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(recipientId, distributionId); String[] args = SqlUtil.buildArgs(recipientId, distributionId);
@ -114,7 +114,7 @@ public class SenderKeyDatabase extends Database {
* Deletes all database state. * Deletes all database state.
*/ */
public void deleteAll() { public void deleteAll() {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null); 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 * Mark that a distributionId has been shared with the provided recipients
*/ */
public void markAsShared(@NonNull DistributionId distributionId, @NonNull Collection<SignalProtocolAddress> addresses) { public void markAsShared(@NonNull DistributionId distributionId, @NonNull Collection<SignalProtocolAddress> addresses) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.beginTransaction(); db.beginTransaction();
try { try {
@ -72,7 +72,7 @@ public class SenderKeySharedDatabase extends Database {
* Get the set of recipientIds that know about the distributionId in question. * Get the set of recipientIds that know about the distributionId in question.
*/ */
public @NonNull Set<SignalProtocolAddress> getSharedWith(@NonNull DistributionId distributionId) { public @NonNull Set<SignalProtocolAddress> getSharedWith(@NonNull DistributionId distributionId) {
SQLiteDatabase db = databaseHelper.getReadableDatabase(); SQLiteDatabase db = databaseHelper.getSignalReadableDatabase();
String query = DISTRIBUTION_ID + " = ?"; String query = DISTRIBUTION_ID + " = ?";
String[] args = SqlUtil.buildArgs(distributionId); String[] args = SqlUtil.buildArgs(distributionId);
@ -94,7 +94,7 @@ public class SenderKeySharedDatabase extends Database {
* Clear the shared statuses for all provided addresses. * Clear the shared statuses for all provided addresses.
*/ */
public void delete(@NonNull DistributionId distributionId, @NonNull Collection<SignalProtocolAddress> 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 + " = ?"; String query = DISTRIBUTION_ID + " = ? AND " + ADDRESS + " = ? AND " + DEVICE + " = ?";
db.beginTransaction(); db.beginTransaction();
@ -113,7 +113,7 @@ public class SenderKeySharedDatabase extends Database {
* Clear all shared statuses for a given distributionId. * Clear all shared statuses for a given distributionId.
*/ */
public void deleteAllFor(@NonNull DistributionId distributionId) { public void deleteAllFor(@NonNull DistributionId distributionId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, DISTRIBUTION_ID + " = ?", SqlUtil.buildArgs(distributionId)); 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. * Clear the shared status for all distributionIds for a set of addresses.
*/ */
public void deleteAllFor(@NonNull Collection<SignalProtocolAddress> addresses) { public void deleteAllFor(@NonNull Collection<SignalProtocolAddress> addresses) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String query = ADDRESS + " = ? AND " + DEVICE + " = ?"; String query = ADDRESS + " = ? AND " + DEVICE + " = ?";
db.beginTransaction(); db.beginTransaction();
@ -140,7 +140,7 @@ public class SenderKeySharedDatabase extends Database {
* Clear the shared status for all distributionIds for a given recipientId. * Clear the shared status for all distributionIds for a given recipientId.
*/ */
public void deleteAllFor(@NonNull RecipientId recipientId) { public void deleteAllFor(@NonNull RecipientId recipientId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
Recipient recipient = Recipient.resolved(recipientId); Recipient recipient = Recipient.resolved(recipientId);
if (recipient.hasUuid()) { if (recipient.hasUuid()) {
@ -154,7 +154,7 @@ public class SenderKeySharedDatabase extends Database {
* Clears all database content. * Clears all database content.
*/ */
public void deleteAll() { public void deleteAll() {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
db.delete(TABLE_NAME, null, null); 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) { public void store(@NonNull RecipientId recipientId, int deviceId, @NonNull SessionRecord record) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(RECIPIENT_ID, recipientId.serialize()); values.put(RECIPIENT_ID, recipientId.serialize());
@ -53,7 +53,7 @@ public class SessionDatabase extends Database {
} }
public @Nullable SessionRecord load(@NonNull RecipientId recipientId, int deviceId) { 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}, try (Cursor cursor = database.query(TABLE_NAME, new String[]{RECORD},
RECIPIENT_ID + " = ? AND " + DEVICE + " = ?", RECIPIENT_ID + " = ? AND " + DEVICE + " = ?",
@ -73,7 +73,7 @@ public class SessionDatabase extends Database {
} }
public @NonNull List<SessionRecord> load(@NonNull List<RecipientDevice> ids) { public @NonNull List<SessionRecord> load(@NonNull List<RecipientDevice> ids) {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<SessionRecord> sessions = new ArrayList<>(ids.size()); List<SessionRecord> sessions = new ArrayList<>(ids.size());
database.beginTransaction(); database.beginTransaction();
@ -103,7 +103,7 @@ public class SessionDatabase extends Database {
} }
public @NonNull List<SessionRow> getAllFor(@NonNull RecipientId recipientId) { public @NonNull List<SessionRow> getAllFor(@NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<SessionRow> results = new LinkedList<>(); List<SessionRow> results = new LinkedList<>();
try (Cursor cursor = database.query(TABLE_NAME, null, try (Cursor cursor = database.query(TABLE_NAME, null,
@ -126,7 +126,7 @@ public class SessionDatabase extends Database {
} }
public @NonNull List<SessionRow> getAll() { public @NonNull List<SessionRow> getAll() {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<SessionRow> results = new LinkedList<>(); List<SessionRow> results = new LinkedList<>();
try (Cursor cursor = database.query(TABLE_NAME, null, null, null, null, null, null)) { 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) { public @NonNull List<Integer> getSubDevices(@NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
List<Integer> results = new LinkedList<>(); List<Integer> results = new LinkedList<>();
try (Cursor cursor = database.query(TABLE_NAME, new String[] {DEVICE}, 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) { public void delete(@NonNull RecipientId recipientId, int deviceId) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, RECIPIENT_ID + " = ? AND " + DEVICE + " = ?", database.delete(TABLE_NAME, RECIPIENT_ID + " = ? AND " + DEVICE + " = ?",
new String[] {recipientId.serialize(), String.valueOf(deviceId)}); new String[] {recipientId.serialize(), String.valueOf(deviceId)});
} }
public void deleteAllFor(@NonNull RecipientId recipientId) { public void deleteAllFor(@NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getWritableDatabase(); SQLiteDatabase database = databaseHelper.getSignalWritableDatabase();
database.delete(TABLE_NAME, RECIPIENT_ID + " = ?", new String[] {recipientId.serialize()}); database.delete(TABLE_NAME, RECIPIENT_ID + " = ?", new String[] {recipientId.serialize()});
} }
public boolean hasSessionFor(@NonNull RecipientId recipientId) { public boolean hasSessionFor(@NonNull RecipientId recipientId) {
SQLiteDatabase database = databaseHelper.getReadableDatabase(); SQLiteDatabase database = databaseHelper.getSignalReadableDatabase();
String query = RECIPIENT_ID + " = ?"; String query = RECIPIENT_ID + " = ?";
String[] args = SqlUtil.buildArgs(recipientId); String[] args = SqlUtil.buildArgs(recipientId);

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -25,7 +25,7 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream; 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.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.GroupId;

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -1,7 +1,6 @@
package org.thoughtcrime.securesms.database package org.thoughtcrime.securesms.database
import android.content.Context 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 * 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) { if (!loaded) {
synchronized(LOCK) { synchronized(LOCK) {
if (!loaded) { if (!loaded) {
SQLiteDatabase.loadLibs(context) System.loadLibrary("sqlcipher")
loaded = true loaded = true
} }
} }

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -12,6 +12,8 @@ import androidx.annotation.Nullable;
import com.annimon.stream.function.BiFunction; import com.annimon.stream.function.BiFunction;
import net.zetetic.database.sqlcipher.SQLiteDatabase;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.crypto.AsymmetricMasterCipher; import org.thoughtcrime.securesms.crypto.AsymmetricMasterCipher;
@ -38,7 +40,7 @@ public class SQLCipherMigrationHelper {
static void migratePlaintext(@NonNull Context context, static void migratePlaintext(@NonNull Context context,
@NonNull android.database.sqlite.SQLiteDatabase legacyDb, @NonNull android.database.sqlite.SQLiteDatabase legacyDb,
@NonNull net.sqlcipher.database.SQLiteDatabase modernDb) @NonNull SQLiteDatabase modernDb)
{ {
modernDb.beginTransaction(); modernDb.beginTransaction();
int foregroundId = GenericForegroundService.startForegroundTask(context, context.getString(R.string.SQLCipherMigrationHelper_migrating_signal_database)).getId(); 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, public static void migrateCiphertext(@NonNull Context context,
@NonNull MasterSecret masterSecret, @NonNull MasterSecret masterSecret,
@NonNull android.database.sqlite.SQLiteDatabase legacyDb, @NonNull android.database.sqlite.SQLiteDatabase legacyDb,
@NonNull net.sqlcipher.database.SQLiteDatabase modernDb, @NonNull SQLiteDatabase modernDb,
@Nullable LegacyMigrationJob.DatabaseUpgradeListener listener) @Nullable LegacyMigrationJob.DatabaseUpgradeListener listener)
{ {
MasterCipher legacyCipher = new MasterCipher(masterSecret); MasterCipher legacyCipher = new MasterCipher(masterSecret);
@ -182,7 +184,7 @@ public class SQLCipherMigrationHelper {
private static void copyTable(@NonNull String tableName, private static void copyTable(@NonNull String tableName,
@NonNull android.database.sqlite.SQLiteDatabase legacyDb, @NonNull android.database.sqlite.SQLiteDatabase legacyDb,
@NonNull net.sqlcipher.database.SQLiteDatabase modernDb, @NonNull SQLiteDatabase modernDb,
@Nullable BiFunction<ContentValues, Pair<Integer, Integer>, ContentValues> transformer) @Nullable BiFunction<ContentValues, Pair<Integer, Integer>, ContentValues> transformer)
{ {
Set<String> destinationColumns = getTableColumns(tableName, modernDb); Set<String> destinationColumns = getTableColumns(tableName, modernDb);
@ -236,7 +238,7 @@ public class SQLCipherMigrationHelper {
return new Pair<>(type, body); 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<>(); Set<String> results = new HashSet<>();
try (Cursor cursor = database.rawQuery("PRAGMA table_info(" + tableName + ")", null)) { 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.bumptech.glide.Glide;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
import net.sqlcipher.database.SQLiteDatabase; import net.zetetic.database.sqlcipher.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper; import net.zetetic.database.sqlcipher.SQLiteOpenHelper;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.color.MaterialColor; import org.thoughtcrime.securesms.color.MaterialColor;
@ -215,13 +215,17 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
private static final String DATABASE_NAME = "signal.db"; private static final String DATABASE_NAME = "signal.db";
private final Context context; private final Context context;
private final DatabaseSecret databaseSecret;
public SQLCipherOpenHelper(@NonNull Context context, @NonNull DatabaseSecret databaseSecret) { 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.context = context.getApplicationContext();
this.databaseSecret = databaseSecret; }
@Override
public void onOpen(SQLiteDatabase db) {
db.enableWriteAheadLogging();
db.setForeignKeyConstraintsEnabled(true);
} }
@Override @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 + ")"; 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(" 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)" + "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) { 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."); Log.i(TAG, "Upgrade complete. Took " + (System.currentTimeMillis() - startTime) + " ms.");
} }
public org.thoughtcrime.securesms.database.SQLiteDatabase getReadableDatabase() { @Override
return new org.thoughtcrime.securesms.database.SQLiteDatabase(getReadableDatabase(databaseSecret.asString())); public net.zetetic.database.sqlcipher.SQLiteDatabase getReadableDatabase() {
} throw new UnsupportedOperationException("Call getSignalReadableDatabase() instead!");
public org.thoughtcrime.securesms.database.SQLiteDatabase getWritableDatabase() {
return new org.thoughtcrime.securesms.database.SQLiteDatabase(getWritableDatabase(databaseSecret.asString()));
} }
@Override @Override
public @NonNull SQLiteDatabase getSqlCipherDatabase() { public net.zetetic.database.sqlcipher.SQLiteDatabase getWritableDatabase() {
return getWritableDatabase().getSqlCipherDatabase(); 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) { 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.ContentValues;
import android.content.Context; 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.Conversions;
import org.signal.core.util.logging.Log; 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.") throw IllegalArgumentException("Must save this avatar before trying to mark usage.")
} }
val db = databaseHelper.writableDatabase val db = databaseHelper.signalWritableDatabase
val where = ID_WHERE val where = ID_WHERE
val args = SqlUtil.buildArgs(databaseId.id) val args = SqlUtil.buildArgs(databaseId.id)
val values = ContentValues(1) val values = ContentValues(1)
@ -65,7 +65,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
throw IllegalArgumentException("Cannot update an unsaved avatar") throw IllegalArgumentException("Cannot update an unsaved avatar")
} }
val db = databaseHelper.writableDatabase val db = databaseHelper.signalWritableDatabase
val where = ID_WHERE val where = ID_WHERE
val values = ContentValues(1) val values = ContentValues(1)
@ -79,7 +79,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
throw IllegalArgumentException("Cannot delete an unsaved avatar.") throw IllegalArgumentException("Cannot delete an unsaved avatar.")
} }
val db = databaseHelper.writableDatabase val db = databaseHelper.signalWritableDatabase
val where = ID_WHERE val where = ID_WHERE
val args = SqlUtil.buildArgs(databaseId.id) val args = SqlUtil.buildArgs(databaseId.id)
@ -87,7 +87,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
} }
private fun saveAvatar(avatar: Avatar, groupId: GroupId?): Avatar { private fun saveAvatar(avatar: Avatar, groupId: GroupId?): Avatar {
val db = databaseHelper.writableDatabase val db = databaseHelper.signalWritableDatabase
val databaseId = avatar.databaseId val databaseId = avatar.databaseId
if (databaseId is Avatar.DatabaseId.DoNotPersist) { if (databaseId is Avatar.DatabaseId.DoNotPersist) {
@ -119,7 +119,7 @@ class AvatarPickerDatabase(context: Context, databaseHelper: SQLCipherOpenHelper
} }
fun getAllAvatars(): List<Avatar> { fun getAllAvatars(): List<Avatar> {
val db = databaseHelper.readableDatabase val db = databaseHelper.signalReadableDatabase
val results = mutableListOf<Avatar>() val results = mutableListOf<Avatar>()
db.query(TABLE_NAME, SqlUtil.buildArgs(ID, AVATAR), null, null, null, null, null)?.use { 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> { private fun getAvatars(groupId: GroupId?): List<Avatar> {
val db = databaseHelper.readableDatabase val db = databaseHelper.signalReadableDatabase
val orderBy = "$LAST_USED DESC" val orderBy = "$LAST_USED DESC"
val results = mutableListOf<Avatar>() val results = mutableListOf<Avatar>()

Wyświetl plik

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

Wyświetl plik

@ -6,7 +6,7 @@ import androidx.annotation.NonNull;
import com.annimon.stream.Stream; 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.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.database.DatabaseFactory; import org.thoughtcrime.securesms.database.DatabaseFactory;

Wyświetl plik

@ -7,7 +7,7 @@ import android.database.Cursor;
import androidx.annotation.AnyThread; import androidx.annotation.AnyThread;
import androidx.annotation.NonNull; 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.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log; import org.signal.core.util.logging.Log;

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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