mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-23 04:35:01 +01:00
Merge pull request #5155 from nextcloud/chore/5103/support16kbPageSizes
Support 16 KB page sizes
This commit is contained in:
commit
e00ded45de
@ -252,7 +252,7 @@ dependencies {
|
||||
compileOnly 'javax.annotation:javax.annotation-api:1.3.2'
|
||||
|
||||
implementation 'org.greenrobot:eventbus:3.3.1'
|
||||
implementation 'net.zetetic:android-database-sqlcipher:4.5.4'
|
||||
implementation 'net.zetetic:sqlcipher-android:4.9.0'
|
||||
|
||||
implementation "androidx.room:room-runtime:${roomVersion}"
|
||||
implementation "androidx.room:room-rxjava2:${roomVersion}"
|
||||
|
@ -253,10 +253,6 @@ class MainActivity :
|
||||
startActivity(chatIntent)
|
||||
}
|
||||
} else {
|
||||
if (!appPreferences.isDbRoomMigrated) {
|
||||
appPreferences.isDbRoomMigrated = true
|
||||
}
|
||||
|
||||
userManager.users.subscribe(object : SingleObserver<List<User>> {
|
||||
override fun onSubscribe(d: Disposable) {
|
||||
// unused atm
|
||||
|
@ -58,8 +58,6 @@ import com.vanniktech.emoji.EmojiManager
|
||||
import com.vanniktech.emoji.google.GoogleEmojiProvider
|
||||
import de.cotech.hw.SecurityKeyManager
|
||||
import de.cotech.hw.SecurityKeyManagerConfig
|
||||
import net.sqlcipher.database.SQLiteDatabase
|
||||
import net.sqlcipher.database.SQLiteDatabaseHook
|
||||
import okhttp3.OkHttpClient
|
||||
import org.conscrypt.Conscrypt
|
||||
import org.webrtc.PeerConnectionFactory
|
||||
@ -103,18 +101,6 @@ class NextcloudTalkApplication :
|
||||
lateinit var okHttpClient: OkHttpClient
|
||||
//endregion
|
||||
|
||||
val hook: SQLiteDatabaseHook = object : SQLiteDatabaseHook {
|
||||
override fun preKey(database: SQLiteDatabase) {
|
||||
// unused atm
|
||||
}
|
||||
|
||||
override fun postKey(database: SQLiteDatabase) {
|
||||
Log.i("TalkApplication", "DB cipher_migrate START")
|
||||
database.rawExecSQL("PRAGMA cipher_migrate;")
|
||||
Log.i("TalkApplication", "DB cipher_migrate END")
|
||||
}
|
||||
}
|
||||
|
||||
//region private methods
|
||||
private fun initializeWebRtc() {
|
||||
try {
|
||||
|
@ -42,9 +42,8 @@ public class DatabaseModule {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
public TalkDatabase provideTalkDatabase(@NonNull final Context context,
|
||||
@NonNull final AppPreferences appPreferences) {
|
||||
return TalkDatabase.getInstance(context, appPreferences);
|
||||
public TalkDatabase provideTalkDatabase(@NonNull final Context context) {
|
||||
return TalkDatabase.getInstance(context);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
@ -9,7 +9,6 @@
|
||||
package com.nextcloud.talk.data.source.local
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import androidx.room.AutoMigration
|
||||
import androidx.room.Database
|
||||
import androidx.room.Room
|
||||
@ -37,10 +36,7 @@ import com.nextcloud.talk.data.storage.ArbitraryStoragesDao
|
||||
import com.nextcloud.talk.data.storage.model.ArbitraryStorageEntity
|
||||
import com.nextcloud.talk.data.user.UsersDao
|
||||
import com.nextcloud.talk.data.user.model.UserEntity
|
||||
import com.nextcloud.talk.utils.preferences.AppPreferences
|
||||
import net.sqlcipher.database.SQLiteDatabase
|
||||
import net.sqlcipher.database.SQLiteDatabaseHook
|
||||
import net.sqlcipher.database.SupportFactory
|
||||
import net.zetetic.database.sqlcipher.SupportOpenHelperFactory
|
||||
import java.util.Locale
|
||||
|
||||
@Database(
|
||||
@ -70,7 +66,6 @@ import java.util.Locale
|
||||
SendStatusConverter::class
|
||||
)
|
||||
abstract class TalkDatabase : RoomDatabase() {
|
||||
|
||||
abstract fun usersDao(): UsersDao
|
||||
abstract fun conversationsDao(): ConversationsDao
|
||||
abstract fun chatMessagesDao(): ChatMessagesDao
|
||||
@ -79,27 +74,21 @@ abstract class TalkDatabase : RoomDatabase() {
|
||||
|
||||
companion object {
|
||||
const val TAG = "TalkDatabase"
|
||||
const val SQL_CIPHER_LIBRARY = "sqlcipher"
|
||||
|
||||
@Volatile
|
||||
private var instance: TalkDatabase? = null
|
||||
|
||||
@JvmStatic
|
||||
fun getInstance(context: Context, appPreferences: AppPreferences): TalkDatabase =
|
||||
fun getInstance(context: Context): TalkDatabase =
|
||||
instance ?: synchronized(this) {
|
||||
instance ?: build(context, appPreferences).also { instance = it }
|
||||
instance ?: build(context).also { instance = it }
|
||||
}
|
||||
|
||||
private fun build(context: Context, appPreferences: AppPreferences): TalkDatabase {
|
||||
private fun build(context: Context): TalkDatabase {
|
||||
val passCharArray = context.getString(R.string.nc_talk_database_encryption_key).toCharArray()
|
||||
val passphrase: ByteArray = SQLiteDatabase.getBytes(passCharArray)
|
||||
|
||||
val factory = if (appPreferences.isDbRoomMigrated) {
|
||||
Log.i(TAG, "No cipher migration needed")
|
||||
SupportFactory(passphrase)
|
||||
} else {
|
||||
Log.i(TAG, "Add cipher migration hook")
|
||||
SupportFactory(passphrase, getCipherMigrationHook())
|
||||
}
|
||||
val passphrase: ByteArray = getBytesFromChars(passCharArray)
|
||||
val factory = SupportOpenHelperFactory(passphrase)
|
||||
|
||||
val dbName = context
|
||||
.resources
|
||||
@ -109,6 +98,8 @@ abstract class TalkDatabase : RoomDatabase() {
|
||||
.trim() +
|
||||
".sqlite"
|
||||
|
||||
System.loadLibrary(SQL_CIPHER_LIBRARY)
|
||||
|
||||
return Room
|
||||
.databaseBuilder(context.applicationContext, TalkDatabase::class.java, dbName)
|
||||
// comment out openHelperFactory to view the database entries in Android Studio for debugging
|
||||
@ -126,7 +117,7 @@ abstract class TalkDatabase : RoomDatabase() {
|
||||
)
|
||||
.allowMainThreadQueries()
|
||||
.addCallback(
|
||||
object : RoomDatabase.Callback() {
|
||||
object : Callback() {
|
||||
override fun onOpen(db: SupportSQLiteDatabase) {
|
||||
super.onOpen(db)
|
||||
db.execSQL("PRAGMA defer_foreign_keys = 1")
|
||||
@ -136,17 +127,6 @@ abstract class TalkDatabase : RoomDatabase() {
|
||||
.build()
|
||||
}
|
||||
|
||||
private fun getCipherMigrationHook(): SQLiteDatabaseHook =
|
||||
object : SQLiteDatabaseHook {
|
||||
override fun preKey(database: SQLiteDatabase) {
|
||||
// unused atm
|
||||
}
|
||||
|
||||
override fun postKey(database: SQLiteDatabase) {
|
||||
Log.i(TAG, "DB cipher_migrate START")
|
||||
database.rawExecSQL("PRAGMA cipher_migrate;")
|
||||
Log.i(TAG, "DB cipher_migrate END")
|
||||
}
|
||||
}
|
||||
private fun getBytesFromChars(chars: CharArray): ByteArray = String(chars).toByteArray(Charsets.UTF_8)
|
||||
}
|
||||
}
|
||||
|
@ -143,10 +143,6 @@ public interface AppPreferences {
|
||||
|
||||
void setDbCypherToUpgrade(boolean value);
|
||||
|
||||
boolean getIsDbRoomMigrated();
|
||||
|
||||
void setIsDbRoomMigrated(boolean value);
|
||||
|
||||
void setPhoneBookIntegrationLastRun(long currentTimeMillis);
|
||||
|
||||
long getPhoneBookIntegrationLastRun(Long defaultValue);
|
||||
|
@ -388,18 +388,6 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
|
||||
}
|
||||
}
|
||||
|
||||
override fun getIsDbRoomMigrated(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(DB_ROOM_MIGRATED).first() }
|
||||
}.getCompleted()
|
||||
|
||||
override fun setIsDbRoomMigrated(value: Boolean) =
|
||||
runBlocking<Unit> {
|
||||
async {
|
||||
writeBoolean(DB_ROOM_MIGRATED, value)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getShowRegularNotificationWarning(): Boolean =
|
||||
runBlocking {
|
||||
async { readBoolean(SHOW_REGULAR_NOTIFICATION_WARNING, true).first() }
|
||||
|
@ -1036,24 +1036,6 @@ EEIhZlI/ojefaZkRseFrtl3X
|
||||
=pJaU
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
pub A6EA2E2BF22E0543
|
||||
uid Tobias Warneke (for development purposes) <t.warneke@gmx.net>
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
mQGNBFJQhigBDADpuhND/VUQwJT0nnJxfjAIur59hyaZZ3Ph/KIgmCneyq7lzYO6
|
||||
xa1ucH8mqNBVNLLBhs4CjihBddU/ZKTX3WnZyhQKQMZr3Tg+TCNFmAR4/hnZ3NjZ
|
||||
N5N5gUj/dqVI2rIvypIuxUApl88BYMsxYpn2+8FKeMd8oBJLqFRJ3WNjB4Op2tRO
|
||||
XRWoxs1ypubS/IV1zkphHHpi6VSABlTyTWu4kXEj/1/GpsdtHRa9kvdWw7yKQbnM
|
||||
XuwOxtzZFJcyu0P2jYVfHHvxcjxuklc9edmCGdNxgKIoo0LXZOeFIi6OWtwzD0pn
|
||||
O6ovJ+PL9QscMdnQlPwsiCwjNUNue20GBv3aUIYc+Z8Gq0SqSan5V0IiKRHMJkzd
|
||||
FAhnpkSFBvHhPJn07BCcb1kctqL+xnLxIdi7arq3WNA/6bJjsojc/x3FdIvORIeP
|
||||
sqejhtL8mCBvbMAMHSBrFxclMp+HSz2ouHEEPIQam0KeN8t1yEqIy3/aYKMzHj9c
|
||||
C3s8XOaBCbJbKpMAEQEAAbQ9VG9iaWFzIFdhcm5la2UgKGZvciBkZXZlbG9wbWVu
|
||||
dCBwdXJwb3NlcykgPHQud2FybmVrZUBnbXgubmV0Pg==
|
||||
=q1C6
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
pub A730529CA355A63E
|
||||
uid Jukka Zitting <jukka@apache.org>
|
||||
|
||||
@ -3802,50 +3784,6 @@ pIXjPlQ0i6kV0h8KapE1Uo005JYgeg==
|
||||
=ASmD
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
pub 1DE461528F1F1B2A
|
||||
uid Julian Reschke (CODE SIGNING KEY) <reschke@apache.org>
|
||||
|
||||
sub D4569BDF799A59AB
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
ZAstgdvEqFLHh1yX4I+if5VODD2nEzXFDzE=
|
||||
=d5S6
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
pub 1F7A8F87B9D8F501
|
||||
uid Download <download@jetbrains.com>
|
||||
|
||||
|
@ -164,7 +164,10 @@
|
||||
<trusting group="ch.qos.logback"/>
|
||||
<trusting group="org.slf4j"/>
|
||||
</trusted-key>
|
||||
<trusted-key id="61DEBD732F3F07771269972E2F87304808D40CEC" group="net.zetetic" name="android-database-sqlcipher" version="4.5.4"/>
|
||||
<trusted-key id="61DEBD732F3F07771269972E2F87304808D40CEC">
|
||||
<trusting name="android-database-sqlcipher" group="net.zetetic" version="4.5.4"/>
|
||||
<trusting name="sqlcipher-android" group="net.zetetic" version="4.9.0"/>
|
||||
</trusted-key>
|
||||
<trusted-key id="64B9B09F164AA0BF88742EB61188B69F6D6259CA" group="com.google.accompanist"/>
|
||||
<trusted-key id="666A4692CE11B7B3F4EB7B3410066A9707090CF9" group="org.javassist" name="javassist" version="3.26.0-GA"/>
|
||||
<trusted-key id="694621A7227D8D5289699830ABE9F3126BB741C1" group="^com[.]google($|([.].*))" regex="true"/>
|
||||
|
Loading…
Reference in New Issue
Block a user