From fd6a2c6b10db434dba6765eb327940d28901a3ce Mon Sep 17 00:00:00 2001 From: Rashad Sookram Date: Wed, 19 Jan 2022 14:49:30 -0500 Subject: [PATCH] Fix dynamic language override for app context. Fixes #11889 --- .../thoughtcrime/securesms/ApplicationContext.java | 11 ++++------- .../app/changenumber/ChangeNumberViewModel.kt | 4 ++-- .../conversation/ConversationGroupViewModel.java | 4 ++-- .../conversation/ConversationViewModel.java | 4 ++-- .../conversation/MessageCountsViewModel.java | 3 +-- .../conversationlist/ConversationListViewModel.java | 4 ++-- .../securesms/database/KeyValueDatabase.java | 7 ++++--- .../securesms/database/LocalMetricsDatabase.kt | 6 +++--- .../thoughtcrime/securesms/database/LogDatabase.kt | 6 +++--- .../dependencies/ApplicationDependencies.java | 12 +++++++++--- .../groups/ui/addtogroup/AddToGroupViewModel.java | 4 ++-- .../ui/chooseadmin/ChooseNewAdminRepository.java | 6 +++--- .../impl/CellServiceConstraintObserver.java | 5 ++--- .../securesms/jobmanager/impl/NetworkConstraint.java | 10 ++++------ .../impl/NetworkOrCellServiceConstraint.java | 12 ++++++------ .../impl/SqlCipherMigrationConstraint.java | 10 +++++----- .../securesms/jobs/JobManagerFactories.java | 3 ++- .../securesms/keyvalue/SettingsValues.java | 1 + .../securesms/logsubmit/LogDataSource.kt | 4 ++-- .../logsubmit/SubmitDebugLogRepository.java | 8 +------- .../profiles/manage/UsernameEditRepository.java | 4 ++-- .../profiles/manage/UsernameEditViewModel.java | 4 ++-- .../registration/RegistrationRepository.java | 5 ++--- .../registration/VerifyAccountRepository.kt | 4 ++-- .../DynamicLanguageContextWrapper.java | 9 ++++++++- 25 files changed, 76 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index fc6af695a..a86eecafc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -35,24 +35,22 @@ import org.signal.core.util.logging.AndroidLogger; import org.signal.core.util.logging.Log; import org.signal.core.util.tracing.Tracer; import org.signal.glide.SignalGlideCodecs; -import org.thoughtcrime.securesms.emoji.JumboEmoji; -import org.thoughtcrime.securesms.mms.SignalGlideModule; import org.signal.ringrtc.CallManager; import org.thoughtcrime.securesms.avatar.AvatarPickerStorage; import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider; import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider; import org.thoughtcrime.securesms.database.LogDatabase; -import org.thoughtcrime.securesms.database.SqlCipherLibraryLoader; import org.thoughtcrime.securesms.database.SignalDatabase; +import org.thoughtcrime.securesms.database.SqlCipherLibraryLoader; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.dependencies.ApplicationDependencyProvider; import org.thoughtcrime.securesms.emoji.EmojiSource; +import org.thoughtcrime.securesms.emoji.JumboEmoji; import org.thoughtcrime.securesms.gcm.FcmJobService; import org.thoughtcrime.securesms.jobs.CreateSignedPreKeyJob; import org.thoughtcrime.securesms.jobs.DownloadLatestEmojiDataJob; import org.thoughtcrime.securesms.jobs.EmojiSearchIndexDownloadJob; import org.thoughtcrime.securesms.jobs.FcmRefreshJob; -import org.thoughtcrime.securesms.jobs.GroupV1MigrationJob; import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob; import org.thoughtcrime.securesms.jobs.ProfileUploadJob; import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob; @@ -65,6 +63,7 @@ import org.thoughtcrime.securesms.logging.PersistentLogger; import org.thoughtcrime.securesms.messageprocessingalarm.MessageProcessReceiver; import org.thoughtcrime.securesms.migrations.ApplicationMigrations; import org.thoughtcrime.securesms.mms.SignalGlideComponents; +import org.thoughtcrime.securesms.mms.SignalGlideModule; import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.ratelimit.RateLimitUtil; @@ -90,7 +89,6 @@ import org.thoughtcrime.securesms.util.VersionTracker; import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper; import org.whispersystems.libsignal.logging.SignalProtocolLoggerProvider; -import java.io.IOException; import java.net.SocketException; import java.net.SocketTimeoutException; import java.security.Security; @@ -471,8 +469,7 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr @Override protected void attachBaseContext(Context base) { - DynamicLanguageContextWrapper.updateContext(base); - super.attachBaseContext(base); + super.attachBaseContext(DynamicLanguageContextWrapper.getUpdatedApplicationContext(base)); } private static class ProviderInitializationException extends RuntimeException { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt index 25eae29e2..eb3ae92d0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/changenumber/ChangeNumberViewModel.kt @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.components.settings.app.changenumber -import android.app.Application +import android.content.Context import androidx.annotation.WorkerThread import androidx.lifecycle.AbstractSavedStateViewModelFactory import androidx.lifecycle.LiveData @@ -165,7 +165,7 @@ class ChangeNumberViewModel( class Factory(owner: SavedStateRegistryOwner) : AbstractSavedStateViewModelFactory(owner, null) { override fun create(key: String, modelClass: Class, handle: SavedStateHandle): T { - val context: Application = ApplicationDependencies.getApplication() + val context: Context = ApplicationDependencies.getApplication() val localNumber: String = SignalStore.account().e164!! val password: String = SignalStore.account().servicePassword!! diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java index 7dd279259..96b1b9800 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.conversation; -import android.app.Application; +import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -117,7 +117,7 @@ final class ConversationGroupViewModel extends ViewModel { private static @Nullable GroupRecord getGroupRecordForRecipient(@Nullable Recipient recipient) { if (recipient != null && recipient.isGroup()) { - Application context = ApplicationDependencies.getApplication(); + Context context = ApplicationDependencies.getApplication(); GroupDatabase groupDatabase = SignalDatabase.groups(); return groupDatabase.getGroup(recipient.getId()).orNull(); } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java index 243dd3f6d..3749a6424 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.conversation; -import android.app.Application; +import android.content.Context; import androidx.annotation.MainThread; import androidx.annotation.NonNull; @@ -66,7 +66,7 @@ public class ConversationViewModel extends ViewModel { private static final String TAG = Log.tag(ConversationViewModel.class); - private final Application context; + private final Context context; private final MediaRepository mediaRepository; private final ConversationRepository conversationRepository; private final MutableLiveData> recentMedia; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageCountsViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageCountsViewModel.java index b02b1969e..23d73d4d7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageCountsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/MessageCountsViewModel.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.conversation; -import android.app.Application; import android.content.Context; import androidx.annotation.NonNull; @@ -23,7 +22,7 @@ public class MessageCountsViewModel extends ViewModel { private static final Executor EXECUTOR = new SerialMonoLifoExecutor(SignalExecutors.BOUNDED); - private final Application context; + private final Context context; private final MutableLiveData threadId = new MutableLiveData<>(-1L); private final LiveData> unreadCounts; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListViewModel.java index f50a9ee43..ea98f44c5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListViewModel.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.conversationlist; -import android.app.Application; +import android.content.Context; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -79,7 +79,7 @@ class ConversationListViewModel extends ViewModel { private SearchResult activeSearchResult; private int pinnedCount; - private ConversationListViewModel(@NonNull Application application, @NonNull SearchRepository searchRepository, boolean isArchived) { + private ConversationListViewModel(@NonNull Context application, @NonNull SearchRepository searchRepository, boolean isArchived) { this.megaphone = new MutableLiveData<>(); this.searchResult = new MutableLiveData<>(); this.internalSelection = new HashSet<>(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java index e4fc82e92..a2466ee78 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.database; import android.app.Application; import android.content.ContentValues; +import android.content.Context; import android.database.Cursor; import androidx.annotation.NonNull; @@ -46,9 +47,9 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase private static volatile KeyValueDatabase instance; - private final Application application; + private final Context application; - public static @NonNull KeyValueDatabase getInstance(@NonNull Application context) { + public static @NonNull KeyValueDatabase getInstance(@NonNull Context context) { if (instance == null) { synchronized (KeyValueDatabase.class) { if (instance == null) { @@ -60,7 +61,7 @@ public class KeyValueDatabase extends SQLiteOpenHelper implements SignalDatabase return instance; } - private KeyValueDatabase(@NonNull Application application, @NonNull DatabaseSecret databaseSecret) { + private KeyValueDatabase(@NonNull Context application, @NonNull DatabaseSecret databaseSecret) { super(application, DATABASE_NAME, databaseSecret.asString(), null, DATABASE_VERSION, 0,new SqlCipherErrorHandler(DATABASE_NAME), new SqlCipherDatabaseHook()); this.application = application; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/LocalMetricsDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/LocalMetricsDatabase.kt index ef7fc05b1..fbbe622fe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LocalMetricsDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LocalMetricsDatabase.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.database import android.annotation.SuppressLint -import android.app.Application import android.content.ContentValues +import android.content.Context import net.zetetic.database.sqlcipher.SQLiteDatabase import net.zetetic.database.sqlcipher.SQLiteOpenHelper import org.signal.core.util.logging.Log @@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit * This is it's own separate physical database, so it cannot do joins or queries with any other tables. */ class LocalMetricsDatabase private constructor( - application: Application, + application: Context, databaseSecret: DatabaseSecret ) : SQLiteOpenHelper( @@ -77,7 +77,7 @@ class LocalMetricsDatabase private constructor( private var instance: LocalMetricsDatabase? = null @JvmStatic - fun getInstance(context: Application): LocalMetricsDatabase { + fun getInstance(context: Context): LocalMetricsDatabase { if (instance == null) { synchronized(LocalMetricsDatabase::class.java) { if (instance == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt index 60821caba..42e357e79 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/LogDatabase.kt @@ -1,8 +1,8 @@ package org.thoughtcrime.securesms.database import android.annotation.SuppressLint -import android.app.Application import android.content.ContentValues +import android.content.Context import android.database.Cursor import net.zetetic.database.sqlcipher.SQLiteDatabase import net.zetetic.database.sqlcipher.SQLiteOpenHelper @@ -26,7 +26,7 @@ import java.util.concurrent.TimeUnit * This is it's own separate physical database, so it cannot do joins or queries with any other tables. */ class LogDatabase private constructor( - application: Application, + application: Context, databaseSecret: DatabaseSecret ) : SQLiteOpenHelper( @@ -78,7 +78,7 @@ class LogDatabase private constructor( private var instance: LogDatabase? = null @JvmStatic - fun getInstance(context: Application): LogDatabase { + fun getInstance(context: Context): LogDatabase { if (instance == null) { synchronized(LogDatabase::class.java) { if (instance == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java index cec7009e4..8904b9d3a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.dependencies; import android.app.Application; +import android.content.Context; import androidx.annotation.MainThread; import androidx.annotation.NonNull; @@ -42,8 +43,9 @@ import org.thoughtcrime.securesms.util.EarlyMessageCache; import org.thoughtcrime.securesms.util.FrameRateTracker; import org.thoughtcrime.securesms.util.Hex; import org.thoughtcrime.securesms.util.IasKeyStore; -import org.thoughtcrime.securesms.video.exo.SimpleExoPlayerPool; +import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper; import org.thoughtcrime.securesms.video.exo.GiphyMp4Cache; +import org.thoughtcrime.securesms.video.exo.SimpleExoPlayerPool; import org.thoughtcrime.securesms.webrtc.audio.AudioManagerCompat; import org.whispersystems.signalservice.api.KeyBackupService; import org.whispersystems.signalservice.api.SignalServiceAccountManager; @@ -69,7 +71,7 @@ public class ApplicationDependencies { private static final Object FRAME_RATE_TRACKER_LOCK = new Object(); private static final Object JOB_MANAGER_LOCK = new Object(); - private static Application application; + private static Context application; private static Provider provider; private static AppForegroundObserver appForegroundObserver; @@ -132,10 +134,14 @@ public class ApplicationDependencies { return ApplicationDependencies.application != null; } - public static @NonNull Application getApplication() { + public static @NonNull Context getApplication() { return application; } + public static void updateApplicationLanguage() { + application = DynamicLanguageContextWrapper.getUpdatedApplicationContext(application); + } + public static @NonNull SignalServiceAccountManager getSignalServiceAccountManager() { SignalServiceAccountManager local = accountManager; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupViewModel.java index cf998a73b..bffc93445 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupViewModel.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.groups.ui.addtogroup; -import android.app.Application; +import android.content.Context; import androidx.annotation.NonNull; import androidx.lifecycle.ViewModel; @@ -19,7 +19,7 @@ import java.util.Objects; public final class AddToGroupViewModel extends ViewModel { - private final Application context; + private final Context context; private final AddToGroupRepository repository; private final RecipientId recipientId; private final SingleLiveEvent events = new SingleLiveEvent<>(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminRepository.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminRepository.java index 4aa165904..6b3eafbd3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminRepository.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.groups.ui.chooseadmin; -import android.app.Application; +import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; @@ -16,9 +16,9 @@ import java.io.IOException; import java.util.List; public final class ChooseNewAdminRepository { - private final Application context; + private final Context context; - ChooseNewAdminRepository(@NonNull Application context) { + ChooseNewAdminRepository(@NonNull Context context) { this.context = context; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/CellServiceConstraintObserver.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/CellServiceConstraintObserver.java index 80ca8b4d3..fd01dc76d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/CellServiceConstraintObserver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/CellServiceConstraintObserver.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.jobmanager.impl; -import android.app.Application; import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.ServiceState; @@ -21,7 +20,7 @@ public class CellServiceConstraintObserver implements ConstraintObserver { private static volatile CellServiceConstraintObserver instance; - public static CellServiceConstraintObserver getInstance(@NonNull Application application) { + public static CellServiceConstraintObserver getInstance(@NonNull Context application) { if (instance == null) { synchronized (CellServiceConstraintObserver.class) { if (instance == null) { @@ -32,7 +31,7 @@ public class CellServiceConstraintObserver implements ConstraintObserver { return instance; } - private CellServiceConstraintObserver(@NonNull Application application) { + private CellServiceConstraintObserver(@NonNull Context application) { TelephonyManager telephonyManager = (TelephonyManager) application.getSystemService(Context.TELEPHONY_SERVICE); ServiceStateListener serviceStateListener = new ServiceStateListener(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java index 493223e8d..dbe9ab9e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkConstraint.java @@ -1,13 +1,11 @@ package org.thoughtcrime.securesms.jobmanager.impl; -import android.app.Application; import android.app.job.JobInfo; import android.content.Context; import android.net.ConnectivityManager; import android.net.NetworkInfo; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import org.thoughtcrime.securesms.jobmanager.Constraint; @@ -16,9 +14,9 @@ public class NetworkConstraint implements Constraint { public static final String KEY = "NetworkConstraint"; - private final Application application; + private final Context application; - private NetworkConstraint(@NonNull Application application) { + private NetworkConstraint(@NonNull Context application) { this.application = application; } @@ -53,9 +51,9 @@ public class NetworkConstraint implements Constraint { public static final class Factory implements Constraint.Factory { - private final Application application; + private final Context application; - public Factory(@NonNull Application application) { + public Factory(@NonNull Context application) { this.application = application; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkOrCellServiceConstraint.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkOrCellServiceConstraint.java index fea29c4c3..2d2c741a0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkOrCellServiceConstraint.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/NetworkOrCellServiceConstraint.java @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.jobmanager.impl; -import android.app.Application; import android.app.job.JobInfo; +import android.content.Context; import androidx.annotation.NonNull; @@ -13,10 +13,10 @@ public class NetworkOrCellServiceConstraint implements Constraint { public static final String KEY = "NetworkOrCellServiceConstraint"; public static final String LEGACY_KEY = "CellServiceConstraint"; - private final Application application; + private final Context application; private final NetworkConstraint networkConstraint; - private NetworkOrCellServiceConstraint(@NonNull Application application) { + private NetworkOrCellServiceConstraint(@NonNull Context application) { this.application = application; this.networkConstraint = new NetworkConstraint.Factory(application).create(); } @@ -39,15 +39,15 @@ public class NetworkOrCellServiceConstraint implements Constraint { public void applyToJobInfo(@NonNull JobInfo.Builder jobInfoBuilder) { } - private static boolean hasCellService(@NonNull Application application) { + private static boolean hasCellService(@NonNull Context application) { return CellServiceConstraintObserver.getInstance(application).hasService(); } public static class Factory implements Constraint.Factory { - private final Application application; + private final Context application; - public Factory(@NonNull Application application) { + public Factory(@NonNull Context application) { this.application = application; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/SqlCipherMigrationConstraint.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/SqlCipherMigrationConstraint.java index ee624cf54..a6945e575 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/SqlCipherMigrationConstraint.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/impl/SqlCipherMigrationConstraint.java @@ -1,7 +1,7 @@ package org.thoughtcrime.securesms.jobmanager.impl; -import android.app.Application; import android.app.job.JobInfo; +import android.content.Context; import androidx.annotation.NonNull; @@ -12,9 +12,9 @@ public class SqlCipherMigrationConstraint implements Constraint { public static final String KEY = "SqlCipherMigrationConstraint"; - private final Application application; + private final Context application; - private SqlCipherMigrationConstraint(@NonNull Application application) { + private SqlCipherMigrationConstraint(@NonNull Context application) { this.application = application; } @@ -35,9 +35,9 @@ public class SqlCipherMigrationConstraint implements Constraint { public static final class Factory implements Constraint.Factory { - private final Application application; + private final Context application; - public Factory(@NonNull Application application) { + public Factory(@NonNull Context application) { this.application = application; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java index 67b414e08..3bce7a075 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/JobManagerFactories.java @@ -1,6 +1,7 @@ package org.thoughtcrime.securesms.jobs; import android.app.Application; +import android.content.Context; import androidx.annotation.NonNull; @@ -226,7 +227,7 @@ public final class JobManagerFactories { }}; } - public static Map getConstraintFactories(@NonNull Application application) { + public static Map getConstraintFactories(@NonNull Context application) { return new HashMap() {{ put(AutoDownloadEmojiConstraint.KEY, new AutoDownloadEmojiConstraint.Factory(application)); put(ChargingConstraint.KEY, new ChargingConstraint.Factory()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java index 043a98660..2e1bc8941 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/SettingsValues.java @@ -203,6 +203,7 @@ public final class SettingsValues extends SignalStoreValues { public void setLanguage(@NonNull String language) { TextSecurePreferences.setLanguage(ApplicationDependencies.getApplication(), language); + ApplicationDependencies.updateApplicationLanguage(); onConfigurationSettingChanged.postValue(LANGUAGE); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogDataSource.kt b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogDataSource.kt index 43bb00768..759360fe6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogDataSource.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogDataSource.kt @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.logsubmit -import android.app.Application +import android.content.Context import org.signal.paging.PagedDataSource import org.thoughtcrime.securesms.database.LogDatabase import org.thoughtcrime.securesms.logsubmit.util.Scrubber @@ -13,7 +13,7 @@ import java.lang.UnsupportedOperationException * @param untilTime Only show logs before this time. This is our way of making sure the set of logs we show on this screen doesn't grow. */ class LogDataSource( - application: Application, + application: Context, private val prefixLines: List, private val untilTime: Long ) : diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java index c20b5cda2..2a85ab8e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java @@ -1,11 +1,9 @@ package org.thoughtcrime.securesms.logsubmit; -import android.app.Application; import android.content.Context; import android.net.Uri; import android.os.Build; import android.os.ParcelFileDescriptor; -import android.os.SystemClock; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -25,20 +23,16 @@ import org.thoughtcrime.securesms.logsubmit.util.Scrubber; import org.thoughtcrime.securesms.net.StandardUserAgentInterceptor; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; -import org.thoughtcrime.securesms.util.ByteUnit; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.Stopwatch; -import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; -import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.concurrent.ExecutorService; -import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; import java.util.zip.GZIPOutputStream; @@ -97,7 +91,7 @@ public class SubmitDebugLogRepository { add(new LogSectionLoggerHeader()); }}; - private final Application context; + private final Context context; private final ExecutorService executor; public SubmitDebugLogRepository() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditRepository.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditRepository.java index 69390ceb4..feb2ec279 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditRepository.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.profiles.manage; -import android.app.Application; +import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; @@ -21,7 +21,7 @@ class UsernameEditRepository { private static final String TAG = Log.tag(UsernameEditRepository.class); - private final Application application; + private final Context application; private final SignalServiceAccountManager accountManager; private final Executor executor; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java index 13ff7099d..d92e7ad79 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.profiles.manage; -import android.app.Application; +import android.content.Context; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -22,7 +22,7 @@ class UsernameEditViewModel extends ViewModel { private static final String TAG = Log.tag(UsernameEditViewModel.class); - private final Application application; + private final Context application; private final MutableLiveData uiState; private final SingleLiveEvent events; private final UsernameEditRepository repo; diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java index 75ae1434f..f505859ba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.registration; -import android.app.Application; import android.content.Context; import androidx.annotation.NonNull; @@ -58,9 +57,9 @@ public final class RegistrationRepository { private static final String TAG = Log.tag(RegistrationRepository.class); - private final Application context; + private final Context context; - public RegistrationRepository(@NonNull Application context) { + public RegistrationRepository(@NonNull Context context) { this.context = context; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt index bd40b8bfe..f76550f84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.registration -import android.app.Application +import android.content.Context import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.logging.Log @@ -28,7 +28,7 @@ import java.util.concurrent.TimeUnit /** * Request SMS/Phone verification codes to help prove ownership of a phone number. */ -class VerifyAccountRepository(private val context: Application) { +class VerifyAccountRepository(private val context: Context) { fun requestVerificationCode( e164: String, diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper.java b/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper.java index 47e6fe5fb..b16de8deb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/dynamiclanguage/DynamicLanguageContextWrapper.java @@ -28,7 +28,14 @@ public final class DynamicLanguageContextWrapper { return LocaleParser.findBestMatchingLocaleForLanguage(language); } - public static void updateContext(@NonNull Context base) { + public static @NonNull Context getUpdatedApplicationContext(@NonNull Context base) { + updateContext(base); + + Configuration configuration = base.getResources().getConfiguration(); + return base.createConfigurationContext(configuration); + } + + private static void updateContext(@NonNull Context base) { Configuration config = base.getResources().getConfiguration(); prepareOverrideConfiguration(base, config);