mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 00:59:49 +01:00
Fix avatar loading in OS views when app is not running.
This commit is contained in:
committed by
mtang-signal
parent
8a4d9fc635
commit
71b5a9f865
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.thoughtcrime.securesms.providers
|
||||
|
||||
import android.app.Application
|
||||
import android.content.ContentUris
|
||||
import android.content.ContentValues
|
||||
import android.content.Intent
|
||||
@@ -15,10 +16,16 @@ import android.net.Uri
|
||||
import android.os.ParcelFileDescriptor
|
||||
import org.signal.core.util.concurrent.SignalExecutors
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.ApplicationContext
|
||||
import org.thoughtcrime.securesms.BuildConfig
|
||||
import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider
|
||||
import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase
|
||||
import org.thoughtcrime.securesms.database.SqlCipherLibraryLoader
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||
import org.thoughtcrime.securesms.profiles.AvatarHelper
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientCreator
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.service.KeyCachingService
|
||||
import org.thoughtcrime.securesms.util.AdaptiveBitmapMetrics
|
||||
@@ -54,6 +61,21 @@ class AvatarProvider : BaseContentProvider() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun init(): Application? {
|
||||
val application = context as? ApplicationContext ?: return null
|
||||
|
||||
SqlCipherLibraryLoader.load()
|
||||
SignalDatabase.init(
|
||||
application,
|
||||
DatabaseSecretProvider.getOrCreateDatabaseSecret(application),
|
||||
AttachmentSecretProvider.getInstance(application).getOrCreateAttachmentSecret()
|
||||
)
|
||||
|
||||
SignalStore.init(application)
|
||||
|
||||
return application
|
||||
}
|
||||
|
||||
override fun onCreate(): Boolean {
|
||||
if (VERBOSE) Log.i(TAG, "onCreate called")
|
||||
return true
|
||||
@@ -63,7 +85,9 @@ class AvatarProvider : BaseContentProvider() {
|
||||
override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor? {
|
||||
if (VERBOSE) Log.i(TAG, "openFile() called!")
|
||||
|
||||
if (KeyCachingService.isLocked(context)) {
|
||||
val application = init() ?: return null
|
||||
|
||||
if (KeyCachingService.isLocked(application)) {
|
||||
Log.w(TAG, "masterSecret was null, abandoning.")
|
||||
return null
|
||||
}
|
||||
@@ -76,7 +100,7 @@ class AvatarProvider : BaseContentProvider() {
|
||||
if (uriMatcher.match(uri) == AVATAR) {
|
||||
if (VERBOSE) Log.i(TAG, "Loading avatar.")
|
||||
try {
|
||||
val recipient = getRecipientId(uri)?.let { Recipient.resolved(it) } ?: return null
|
||||
val recipient = getRecipientId(uri)?.let { RecipientCreator.forRecord(application, SignalDatabase.recipients.getRecord(it)) } ?: return null
|
||||
return getParcelFileDescriptorForAvatar(recipient)
|
||||
} catch (ioe: IOException) {
|
||||
Log.w(TAG, ioe)
|
||||
@@ -91,6 +115,8 @@ class AvatarProvider : BaseContentProvider() {
|
||||
override fun query(uri: Uri, projection: Array<out String>?, selection: String?, selectionArgs: Array<out String>?, sortOrder: String?): Cursor? {
|
||||
if (VERBOSE) Log.i(TAG, "query() called: $uri")
|
||||
|
||||
val application = init() ?: return null
|
||||
|
||||
if (SignalDatabase.instance == null) {
|
||||
Log.w(TAG, "SignalDatabase unavailable")
|
||||
return null
|
||||
@@ -99,8 +125,8 @@ class AvatarProvider : BaseContentProvider() {
|
||||
if (uriMatcher.match(uri) == AVATAR) {
|
||||
val recipientId = getRecipientId(uri) ?: return null
|
||||
|
||||
if (AvatarHelper.hasAvatar(context!!, recipientId)) {
|
||||
val file: File = AvatarHelper.getAvatarFile(context!!, recipientId)
|
||||
if (AvatarHelper.hasAvatar(application, recipientId)) {
|
||||
val file: File = AvatarHelper.getAvatarFile(application, recipientId)
|
||||
if (file.exists()) {
|
||||
return createCursor(projection, file.name, file.length())
|
||||
}
|
||||
@@ -115,6 +141,8 @@ class AvatarProvider : BaseContentProvider() {
|
||||
override fun getType(uri: Uri): String? {
|
||||
if (VERBOSE) Log.i(TAG, "getType() called: $uri")
|
||||
|
||||
init() ?: return null
|
||||
|
||||
if (SignalDatabase.instance == null) {
|
||||
Log.w(TAG, "SignalDatabase unavailable")
|
||||
return null
|
||||
|
||||
Reference in New Issue
Block a user