Migrate RecipientDatabase to Kotlin.

This commit is contained in:
Greyson Parrelli
2021-12-01 13:34:21 -05:00
parent 59ad8bf76a
commit c0a83e7956
21 changed files with 3486 additions and 3944 deletions

View File

@@ -0,0 +1,57 @@
package org.thoughtcrime.securesms.database
import android.database.Cursor
import org.thoughtcrime.securesms.util.CursorUtil
import org.whispersystems.libsignal.util.guava.Optional
fun Cursor.requireString(column: String): String? {
return CursorUtil.requireString(this, column)
}
fun Cursor.requireNonNullString(column: String): String {
return CursorUtil.requireString(this, column)!!
}
fun Cursor.optionalString(column: String): Optional<String> {
return CursorUtil.getString(this, column)
}
fun Cursor.requireInt(column: String): Int {
return CursorUtil.requireInt(this, column)
}
fun Cursor.optionalInt(column: String): Optional<Int> {
return CursorUtil.getInt(this, column)
}
fun Cursor.requireFloat(column: String): Float {
return CursorUtil.requireFloat(this, column)
}
fun Cursor.requireLong(column: String): Long {
return CursorUtil.requireLong(this, column)
}
fun Cursor.requireBoolean(column: String): Boolean {
return CursorUtil.requireInt(this, column) != 0
}
fun Cursor.optionalBoolean(column: String): Optional<Boolean> {
return CursorUtil.getBoolean(this, column)
}
fun Cursor.requireBlob(column: String): ByteArray? {
return CursorUtil.requireBlob(this, column)
}
fun Cursor.requireNonNullBlob(column: String): ByteArray {
return CursorUtil.requireBlob(this, column)!!
}
fun Cursor.optionalBlob(column: String): Optional<ByteArray> {
return CursorUtil.getBlob(this, column)
}
fun Cursor.isNull(column: String): Boolean {
return CursorUtil.isNull(this, column)
}

View File

@@ -74,4 +74,12 @@ public abstract class Database {
public void reset(SignalDatabase databaseHelper) {
this.databaseHelper = databaseHelper;
}
protected SQLiteDatabase getReadableDatabase() {
return databaseHelper.getSignalReadableDatabase();
}
protected SQLiteDatabase getWritableDatabase() {
return databaseHelper.getSignalWritableDatabase();
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -35,10 +35,10 @@ import org.signal.core.util.logging.Log;
import org.signal.zkgroup.InvalidInputException;
import org.signal.zkgroup.groups.GroupMasterKey;
import org.thoughtcrime.securesms.database.MessageDatabase.MarkedMessageInfo;
import org.thoughtcrime.securesms.database.RecipientDatabase.RecipientSettings;
import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord;
import org.thoughtcrime.securesms.database.model.MessageRecord;
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
import org.thoughtcrime.securesms.database.model.RecipientRecord;
import org.thoughtcrime.securesms.database.model.ThreadRecord;
import org.thoughtcrime.securesms.groups.BadGroupIdException;
import org.thoughtcrime.securesms.groups.GroupId;
@@ -1561,8 +1561,8 @@ public class ThreadDatabase extends Database {
}
public ThreadRecord getCurrent() {
RecipientId recipientId = RecipientId.from(CursorUtil.requireLong(cursor, ThreadDatabase.RECIPIENT_ID));
RecipientSettings recipientSettings = RecipientDatabase.getRecipientSettings(context, cursor, ThreadDatabase.RECIPIENT_ID);
RecipientId recipientId = RecipientId.from(CursorUtil.requireLong(cursor, ThreadDatabase.RECIPIENT_ID));
RecipientRecord recipientSettings = SignalDatabase.recipients().getRecord(context, cursor, ThreadDatabase.RECIPIENT_ID);
Recipient recipient;

View File

@@ -0,0 +1,102 @@
package org.thoughtcrime.securesms.database.model
import android.net.Uri
import org.signal.zkgroup.groups.GroupMasterKey
import org.signal.zkgroup.profiles.ProfileKeyCredential
import org.thoughtcrime.securesms.badges.models.Badge
import org.thoughtcrime.securesms.conversation.colors.AvatarColor
import org.thoughtcrime.securesms.conversation.colors.ChatColors
import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus
import org.thoughtcrime.securesms.database.RecipientDatabase
import org.thoughtcrime.securesms.database.RecipientDatabase.InsightsBannerTier
import org.thoughtcrime.securesms.database.RecipientDatabase.MentionSetting
import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState
import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode
import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState
import org.thoughtcrime.securesms.database.model.RecipientRecord.SyncExtras
import org.thoughtcrime.securesms.groups.GroupId
import org.thoughtcrime.securesms.profiles.ProfileName
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.wallpaper.ChatWallpaper
import org.whispersystems.libsignal.util.guava.Optional
import org.whispersystems.signalservice.api.push.ACI
/**
* Database model for [RecipientDatabase].
*/
data class RecipientRecord(
val id: RecipientId,
val aci: ACI?,
val username: String?,
val e164: String?,
val email: String?,
val groupId: GroupId?,
val groupType: RecipientDatabase.GroupType,
val isBlocked: Boolean,
val muteUntil: Long,
val messageVibrateState: VibrateState,
val callVibrateState: VibrateState,
val messageRingtone: Uri?,
val callRingtone: Uri?,
private val defaultSubscriptionId: Int,
val expireMessages: Int,
val registered: RegisteredState,
val profileKey: ByteArray?,
val profileKeyCredential: ProfileKeyCredential?,
val systemProfileName: ProfileName,
val systemDisplayName: String?,
val systemContactPhotoUri: String?,
val systemPhoneLabel: String?,
val systemContactUri: String?,
@get:JvmName("getProfileName")
val signalProfileName: ProfileName,
@get:JvmName("getProfileAvatar")
val signalProfileAvatar: String?,
@get:JvmName("hasProfileImage")
val hasProfileImage: Boolean,
@get:JvmName("isProfileSharing")
val profileSharing: Boolean,
val lastProfileFetch: Long,
val notificationChannel: String?,
val unidentifiedAccessMode: UnidentifiedAccessMode,
@get:JvmName("isForceSmsSelection")
val forceSmsSelection: Boolean,
val rawCapabilities: Long,
val groupsV2Capability: Recipient.Capability,
val groupsV1MigrationCapability: Recipient.Capability,
val senderKeyCapability: Recipient.Capability,
val announcementGroupCapability: Recipient.Capability,
val changeNumberCapability: Recipient.Capability,
val insightsBannerTier: InsightsBannerTier,
val storageId: ByteArray?,
val mentionSetting: MentionSetting,
val wallpaper: ChatWallpaper?,
val chatColors: ChatColors?,
val avatarColor: AvatarColor,
val about: String?,
val aboutEmoji: String?,
val syncExtras: SyncExtras,
val extras: Recipient.Extras?,
@get:JvmName("hasGroupsInCommon")
val hasGroupsInCommon: Boolean,
val badges: List<Badge>
) {
fun getDefaultSubscriptionId(): Optional<Int> {
return if (defaultSubscriptionId != -1) Optional.of(defaultSubscriptionId) else Optional.absent()
}
/**
* A bundle of data that's only necessary when syncing to storage service, not for a
* [Recipient].
*/
data class SyncExtras(
val storageProto: ByteArray?,
val groupMasterKey: GroupMasterKey?,
val identityKey: ByteArray?,
val identityStatus: VerifiedStatus,
val isArchived: Boolean,
val isForcedUnread: Boolean
)
}