Skip to content

Commit 6e34269

Browse files
Merge pull request #9 from session-foundation/release/1.20.4
Release/1.20.4
2 parents 252b8d2 + c935990 commit 6e34269

File tree

97 files changed

+537
-388
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+537
-388
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ ffpr
1717
pkcs11.password
1818
app/play
1919
app/huawei
20+
release-creds.toml
2021

2122
!/scripts/drone-static-upload.sh
2223
!/scripts/drone-upload-exists.sh

app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ configurations.forEach {
1313
it.exclude module: "commons-logging"
1414
}
1515

16-
def canonicalVersionCode = 385
17-
def canonicalVersionName = "1.20.3"
16+
def canonicalVersionCode = 386
17+
def canonicalVersionName = "1.20.4"
1818

1919
def postFixSize = 10
2020
def abiPostFix = ['armeabi-v7a' : 1,
@@ -81,7 +81,7 @@ android {
8181
multiDexEnabled = true
8282

8383
vectorDrawables.useSupportLibrary = true
84-
project.ext.set("archivesBaseName", "session")
84+
setProperty("archivesBaseName", "session-${versionName}")
8585

8686
buildConfigField "long", "BUILD_TIMESTAMP", getLastCommitTimestamp() + "L"
8787
buildConfigField "String", "GIT_HASH", "\"$getGitHash\""

app/src/main/java/org/thoughtcrime/securesms/conversation/v2/mention/MentionViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ class MentionViewModel(
217217

218218
// Add the remaining content
219219
sb.append(editable, offset, editable.length)
220-
return sb.toString()
220+
return sb.toString().trim()
221221
}
222222

223223
data class Member(

app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -979,6 +979,12 @@ private ThumbnailData generateVideoThumbnail(AttachmentId attachmentId) {
979979

980980
Bitmap bitmap = retriever.getFrameAtTime(1000);
981981

982+
try {
983+
retriever.close();
984+
} catch (IOException e) {
985+
Log.w(TAG, "Error while closing the retriever in AttachmentDatabase > generateVideoThumbnail: "+e.toString());
986+
}
987+
982988
Log.i(TAG, "Generated video thumbnail...");
983989
return new ThumbnailData(bitmap);
984990
}

app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt

Lines changed: 63 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,27 +1423,67 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa
14231423
const val QUOTE_MISSING: String = "quote_missing"
14241424
const val SHARED_CONTACTS: String = "shared_contacts"
14251425
const val LINK_PREVIEWS: String = "previews"
1426+
1427+
1428+
private const val IS_DELETED_COLUMN_DEF = """
1429+
$IS_DELETED GENERATED ALWAYS AS (
1430+
($MESSAGE_BOX & ${MmsSmsColumns.Types.BASE_TYPE_MASK}) IN (${MmsSmsColumns.Types.BASE_DELETED_OUTGOING_TYPE}, ${MmsSmsColumns.Types.BASE_DELETED_INCOMING_TYPE})
1431+
) VIRTUAL
1432+
"""
1433+
14261434
const val CREATE_TABLE: String =
1427-
"CREATE TABLE " + TABLE_NAME + " (" + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
1428-
THREAD_ID + " INTEGER, " + DATE_SENT + " INTEGER, " + DATE_RECEIVED + " INTEGER, " + MESSAGE_BOX + " INTEGER, " +
1429-
READ + " INTEGER DEFAULT 0, " + "m_id" + " TEXT, " + "sub" + " TEXT, " +
1430-
"sub_cs" + " INTEGER, " + BODY + " TEXT, " + PART_COUNT + " INTEGER, " +
1431-
"ct_t" + " TEXT, " + CONTENT_LOCATION + " TEXT, " + ADDRESS + " TEXT, " +
1432-
ADDRESS_DEVICE_ID + " INTEGER, " +
1433-
EXPIRY + " INTEGER, " + "m_cls" + " TEXT, " + MESSAGE_TYPE + " INTEGER, " +
1434-
"v" + " INTEGER, " + MESSAGE_SIZE + " INTEGER, " + "pri" + " INTEGER, " +
1435-
"rr" + " INTEGER, " + "rpt_a" + " INTEGER, " + "resp_st" + " INTEGER, " +
1436-
STATUS + " INTEGER, " + TRANSACTION_ID + " TEXT, " + "retr_st" + " INTEGER, " +
1437-
"retr_txt" + " TEXT, " + "retr_txt_cs" + " INTEGER, " + "read_status" + " INTEGER, " +
1438-
"ct_cls" + " INTEGER, " + "resp_txt" + " TEXT, " + "d_tm" + " INTEGER, " +
1439-
DELIVERY_RECEIPT_COUNT + " INTEGER DEFAULT 0, " + MISMATCHED_IDENTITIES + " TEXT DEFAULT NULL, " +
1440-
NETWORK_FAILURE + " TEXT DEFAULT NULL," + "d_rpt" + " INTEGER, " +
1441-
SUBSCRIPTION_ID + " INTEGER DEFAULT -1, " + EXPIRES_IN + " INTEGER DEFAULT 0, " +
1442-
EXPIRE_STARTED + " INTEGER DEFAULT 0, " + NOTIFIED + " INTEGER DEFAULT 0, " +
1443-
READ_RECEIPT_COUNT + " INTEGER DEFAULT 0, " + QUOTE_ID + " INTEGER DEFAULT 0, " +
1444-
QUOTE_AUTHOR + " TEXT, " + QUOTE_BODY + " TEXT, " + QUOTE_ATTACHMENT + " INTEGER DEFAULT -1, " +
1445-
QUOTE_MISSING + " INTEGER DEFAULT 0, " + SHARED_CONTACTS + " TEXT, " + UNIDENTIFIED + " INTEGER DEFAULT 0, " +
1446-
LINK_PREVIEWS + " TEXT);"
1435+
"""CREATE TABLE $TABLE_NAME (
1436+
$ID INTEGER PRIMARY KEY AUTOINCREMENT,
1437+
$THREAD_ID INTEGER,
1438+
$DATE_SENT INTEGER,
1439+
$DATE_RECEIVED INTEGER,
1440+
$MESSAGE_BOX INTEGER,
1441+
$READ INTEGER DEFAULT 0,
1442+
m_id TEXT,
1443+
sub TEXT,
1444+
sub_cs INTEGER,
1445+
$BODY TEXT,
1446+
$PART_COUNT INTEGER,
1447+
ct_t TEXT,
1448+
$CONTENT_LOCATION TEXT,
1449+
$ADDRESS TEXT,
1450+
$ADDRESS_DEVICE_ID INTEGER,
1451+
$EXPIRY INTEGER,
1452+
m_cls TEXT,
1453+
$MESSAGE_TYPE INTEGER,
1454+
v INTEGER,
1455+
$MESSAGE_SIZE INTEGER,
1456+
pri INTEGER,
1457+
rr INTEGER,
1458+
rpt_a INTEGER,
1459+
resp_st INTEGER,
1460+
$STATUS INTEGER,
1461+
$TRANSACTION_ID TEXT,
1462+
retr_st INTEGER,
1463+
retr_txt TEXT,
1464+
retr_txt_cs INTEGER,
1465+
read_status INTEGER,
1466+
ct_cls INTEGER,
1467+
resp_txt TEXT,
1468+
d_tm INTEGER,
1469+
$DELIVERY_RECEIPT_COUNT INTEGER DEFAULT 0,
1470+
$MISMATCHED_IDENTITIES TEXT DEFAULT NULL,
1471+
$NETWORK_FAILURE TEXT DEFAULT NULL,
1472+
d_rpt INTEGER,
1473+
$SUBSCRIPTION_ID INTEGER DEFAULT -1,
1474+
$EXPIRES_IN INTEGER DEFAULT 0,
1475+
$EXPIRE_STARTED INTEGER DEFAULT 0,
1476+
$NOTIFIED INTEGER DEFAULT 0,
1477+
$READ_RECEIPT_COUNT INTEGER DEFAULT 0,
1478+
$QUOTE_ID INTEGER DEFAULT 0,
1479+
$QUOTE_AUTHOR TEXT,
1480+
$QUOTE_BODY TEXT,
1481+
$QUOTE_ATTACHMENT INTEGER DEFAULT -1,
1482+
$QUOTE_MISSING INTEGER DEFAULT 0,
1483+
$SHARED_CONTACTS TEXT,
1484+
$UNIDENTIFIED INTEGER DEFAULT 0,
1485+
$LINK_PREVIEWS TEXT,
1486+
$IS_DELETED_COLUMN_DEF);"""
14471487

14481488
@JvmField
14491489
val CREATE_INDEXS: Array<String> = arrayOf(
@@ -1454,6 +1494,9 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa
14541494
"CREATE INDEX IF NOT EXISTS mms_date_sent_index ON $TABLE_NAME ($DATE_SENT);",
14551495
"CREATE INDEX IF NOT EXISTS mms_thread_date_index ON $TABLE_NAME ($THREAD_ID, $DATE_RECEIVED);"
14561496
)
1497+
1498+
const val ADD_IS_DELETED_COLUMN: String = "ALTER TABLE $TABLE_NAME ADD COLUMN $IS_DELETED_COLUMN_DEF"
1499+
14571500
private val MMS_PROJECTION: Array<String> = arrayOf(
14581501
"$TABLE_NAME.$ID AS $ID",
14591502
THREAD_ID,

app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsColumns.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public interface MmsSmsColumns {
2929
public static final String REACTIONS_LAST_SEEN = "reactions_last_seen";
3030

3131
public static final String HAS_MENTION = "has_mention";
32+
public static final String IS_DELETED = "is_deleted";
3233

3334
public static class Types {
3435
protected static final long TOTAL_MASK = 0xFFFFFFFF;
@@ -185,6 +186,9 @@ public static boolean isInboxType(long type) {
185186
}
186187

187188
public static boolean isDeletedMessage(long type) {
189+
// Note: if you change the logic below, you must also change the is_deleted database column (by doing migration),
190+
// which must have the same logic as here. See [MmsDatabase.IS_DELETED_COLUMN_DEF] or [SmsDatabase.IS_DELETED_COLUMN_DEF].
191+
// Failing to do so will result in inconsistencies in the UI.
188192
return (type & BASE_TYPE_MASK) == BASE_DELETED_OUTGOING_TYPE || (type & BASE_TYPE_MASK) == BASE_DELETED_INCOMING_TYPE;
189193
}
190194

app/src/main/java/org/thoughtcrime/securesms/database/MmsSmsDatabase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ public long getLastMessageTimestamp(long threadId) {
336336
String order = MmsSmsColumns.NORMALIZED_DATE_SENT + " DESC";
337337
// make sure the last message isn't marked as deleted
338338
String selection = MmsSmsColumns.THREAD_ID + " = " + threadId + " AND " +
339-
"(ifnull("+SmsDatabase.TYPE+", "+MmsDatabase.MESSAGE_BOX+") & "+BASE_TYPE_MASK+") NOT IN ("+BASE_DELETED_OUTGOING_TYPE+", "+BASE_DELETED_INCOMING_TYPE+")"; // this ugly line checks whether the type is deleted (incoming or outgoing) for either the sms table or the mms table
339+
"NOT " + MmsSmsColumns.IS_DELETED;
340340

341341
try (Cursor cursor = queryTables(PROJECTION, selection, order, "1")) {
342342
if (cursor.moveToFirst()) {

app/src/main/java/org/thoughtcrime/securesms/database/SearchDatabase.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public class SearchDatabase extends Database {
6969
"FROM " + SmsDatabase.TABLE_NAME + " " +
7070
"INNER JOIN " + SMS_FTS_TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + ID + " = " + SmsDatabase.TABLE_NAME + "." + SmsDatabase.ID + " " +
7171
"INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + " " +
72-
"WHERE " + SMS_FTS_TABLE_NAME + " MATCH ? " +
72+
"WHERE " + SMS_FTS_TABLE_NAME + " MATCH ? " + " AND NOT " + MmsSmsColumns.IS_DELETED + " " +
7373
"UNION ALL " +
7474
"SELECT " +
7575
ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ADDRESS + " AS " + CONVERSATION_ADDRESS + ", " +
@@ -80,7 +80,7 @@ public class SearchDatabase extends Database {
8080
"FROM " + MmsDatabase.TABLE_NAME + " " +
8181
"INNER JOIN " + MMS_FTS_TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + ID + " = " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " " +
8282
"INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + " " +
83-
"WHERE " + MMS_FTS_TABLE_NAME + " MATCH ? " +
83+
"WHERE " + MMS_FTS_TABLE_NAME + " MATCH ? " + " AND NOT " + MmsSmsColumns.IS_DELETED + " " +
8484
"ORDER BY " + MmsSmsColumns.NORMALIZED_DATE_SENT + " DESC " +
8585
"LIMIT ?";
8686

@@ -94,7 +94,7 @@ public class SearchDatabase extends Database {
9494
"FROM " + SmsDatabase.TABLE_NAME + " " +
9595
"INNER JOIN " + SMS_FTS_TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + ID + " = " + SmsDatabase.TABLE_NAME + "." + SmsDatabase.ID + " " +
9696
"INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + SMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + " " +
97-
"WHERE " + SMS_FTS_TABLE_NAME + " MATCH ? AND " + SmsDatabase.TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? " +
97+
"WHERE " + SMS_FTS_TABLE_NAME + " MATCH ? AND " + SmsDatabase.TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? " + " AND NOT " + MmsSmsColumns.IS_DELETED + " " +
9898
"UNION ALL " +
9999
"SELECT " +
100100
ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ADDRESS + " AS " + CONVERSATION_ADDRESS + ", " +
@@ -105,7 +105,7 @@ public class SearchDatabase extends Database {
105105
"FROM " + MmsDatabase.TABLE_NAME + " " +
106106
"INNER JOIN " + MMS_FTS_TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + ID + " = " + MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " " +
107107
"INNER JOIN " + ThreadDatabase.TABLE_NAME + " ON " + MMS_FTS_TABLE_NAME + "." + THREAD_ID + " = " + ThreadDatabase.TABLE_NAME + "." + ThreadDatabase.ID + " " +
108-
"WHERE " + MMS_FTS_TABLE_NAME + " MATCH ? AND " + MmsDatabase.TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? " +
108+
"WHERE " + MMS_FTS_TABLE_NAME + " MATCH ? AND " + MmsDatabase.TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? " + " AND NOT " + MmsSmsColumns.IS_DELETED + " " +
109109
"ORDER BY " + MmsSmsColumns.NORMALIZED_DATE_SENT + " DESC " +
110110
"LIMIT 500";
111111

app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,17 @@ public class SmsDatabase extends MessagingDatabase {
7878
public static final String SUBJECT = "subject";
7979
public static final String SERVICE_CENTER = "service_center";
8080

81+
private static final String IS_DELETED_COLUMN_DEF = IS_DELETED + " GENERATED ALWAYS AS ((" + TYPE +
82+
" & " + Types.BASE_TYPE_MASK + ") IN (" + Types.BASE_DELETED_OUTGOING_TYPE + ", " + Types.BASE_DELETED_INCOMING_TYPE +")) VIRTUAL";
83+
8184
public static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + ID + " integer PRIMARY KEY, " +
8285
THREAD_ID + " INTEGER, " + ADDRESS + " TEXT, " + ADDRESS_DEVICE_ID + " INTEGER DEFAULT 1, " + PERSON + " INTEGER, " +
8386
DATE_RECEIVED + " INTEGER, " + DATE_SENT + " INTEGER, " + PROTOCOL + " INTEGER, " + READ + " INTEGER DEFAULT 0, " +
8487
STATUS + " INTEGER DEFAULT -1," + TYPE + " INTEGER, " + REPLY_PATH_PRESENT + " INTEGER, " +
8588
DELIVERY_RECEIPT_COUNT + " INTEGER DEFAULT 0," + SUBJECT + " TEXT, " + BODY + " TEXT, " +
8689
MISMATCHED_IDENTITIES + " TEXT DEFAULT NULL, " + SERVICE_CENTER + " TEXT, " + SUBSCRIPTION_ID + " INTEGER DEFAULT -1, " +
8790
EXPIRES_IN + " INTEGER DEFAULT 0, " + EXPIRE_STARTED + " INTEGER DEFAULT 0, " + NOTIFIED + " DEFAULT 0, " +
88-
READ_RECEIPT_COUNT + " INTEGER DEFAULT 0, " + UNIDENTIFIED + " INTEGER DEFAULT 0);";
91+
READ_RECEIPT_COUNT + " INTEGER DEFAULT 0, " + UNIDENTIFIED + " INTEGER DEFAULT 0, " + IS_DELETED_COLUMN_DEF +");";
8992

9093

9194
public static final String[] CREATE_INDEXS = {
@@ -137,6 +140,8 @@ public class SmsDatabase extends MessagingDatabase {
137140
"DROP TABLE " + TEMP_TABLE_NAME
138141
};
139142

143+
public static final String ADD_IS_DELETED_COLUMN = "ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + IS_DELETED_COLUMN_DEF;
144+
140145
private static final EarlyReceiptCache earlyDeliveryReceiptCache = new EarlyReceiptCache();
141146
private static final EarlyReceiptCache earlyReadReceiptCache = new EarlyReceiptCache();
142147

app/src/main/java/org/thoughtcrime/securesms/database/helpers/SQLCipherOpenHelper.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,10 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper {
9090
private static final int lokiV44 = 65;
9191
private static final int lokiV45 = 66;
9292
private static final int lokiV46 = 67;
93+
private static final int lokiV47 = 68;
9394

9495
// Loki - onUpgrade(...) must be updated to use Loki version numbers if Signal makes any database changes
95-
private static final int DATABASE_VERSION = lokiV46;
96+
private static final int DATABASE_VERSION = lokiV47;
9697
private static final int MIN_DATABASE_VERSION = lokiV7;
9798
private static final String CIPHER3_DATABASE_NAME = "signal.db";
9899
public static final String DATABASE_NAME = "signal_v4.db";
@@ -628,6 +629,11 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
628629
db.execSQL(LokiAPIDatabase.CREATE_LAST_LEGACY_MESSAGE_TABLE);
629630
}
630631

632+
if (oldVersion < lokiV47) {
633+
db.execSQL(SmsDatabase.ADD_IS_DELETED_COLUMN);
634+
db.execSQL(MmsDatabase.ADD_IS_DELETED_COLUMN);
635+
}
636+
631637
db.setTransactionSuccessful();
632638
} finally {
633639
db.endTransaction();

0 commit comments

Comments
 (0)