* This code should be used in all places that compare app versions rather than - * {@link #getManifestApkVersion(Context)} or {@link BuildConfig#VERSION_CODE}. + * {@link #getManifestApkVersion(Context)}. */ public static int getCanonicalVersionCode() { - return BuildConfig.CANONICAL_VERSION_CODE; + return CoreUtilDependencies.INSTANCE.getBuildInfo().getCanonicalVersionCode(); } /** - * {@link BuildConfig#VERSION_CODE} may not be the actual version due to ABI split code adding a - * postfix after BuildConfig is generated. + * The manifest APK version may not be the same as the canonical version code due to ABI split + * code adding a postfix after BuildConfig is generated. *
- * However, in most cases you want to use {@link BuildConfig#CANONICAL_VERSION_CODE} via - * {@link #getCanonicalVersionCode()} + * However, in most cases you want to use {@link #getCanonicalVersionCode()}. */ public static int getManifestApkVersion(Context context) { try { @@ -347,13 +343,13 @@ public class Util { * Takes into account both the build age as well as any remote deprecation values. */ public static long getTimeUntilBuildExpiry(long currentTime) { - if (SignalStore.misc().isClientDeprecated()) { + if (CoreUtilDependencies.INSTANCE.isClientDeprecated()) { return 0; } - long buildAge = currentTime - BuildConfig.BUILD_TIMESTAMP; + long buildAge = currentTime - CoreUtilDependencies.INSTANCE.getBuildInfo().getBuildTimestamp(); long timeUntilBuildDeprecation = BUILD_LIFESPAN - buildAge; - long timeUntilRemoteDeprecation = RemoteDeprecation.getTimeUntilDeprecation(currentTime); + long timeUntilRemoteDeprecation = CoreUtilDependencies.INSTANCE.getTimeUntilRemoteDeprecation(currentTime); if (timeUntilRemoteDeprecation != -1) { long timeUntilDeprecation = Math.min(timeUntilBuildDeprecation, timeUntilRemoteDeprecation); @@ -420,11 +416,11 @@ public class Util { } public static void writeTextToClipboard(@NonNull Context context, @NonNull String text) { - writeTextToClipboard(context, context.getString(R.string.app_name), text); + writeTextToClipboard(context, getPackageLabel(context), text); } public static void writeTextToClipboard(@NonNull Context context, @NonNull String label, @NonNull String text) { - android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText(label, text); clipboard.setPrimaryClip(clip); } @@ -437,21 +433,20 @@ public class Util { } public static void copyToClipboard(@NonNull Context context, @NonNull CharSequence text) { - ServiceUtil.getClipboardManager(context).setPrimaryClip(ClipData.newPlainText(COPY_LABEL, text)); + ((ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE)).setPrimaryClip(ClipData.newPlainText(COPY_LABEL, text)); } public static void copyToClipboard(@NonNull Context context, @NonNull CharSequence text, int expiresInSeconds) { - ClipboardManager clipboardManager = ServiceUtil.getClipboardManager(context); - clipboardManager.setPrimaryClip(ClipData.newPlainText(context.getString(R.string.app_name), text)); + ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + clipboardManager.setPrimaryClip(ClipData.newPlainText(getPackageLabel(context), text)); - AlarmManager alarmManager = ServiceUtil.getAlarmManager(context); + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent alarmIntent = new Intent(context, ClearClipboardAlarmReceiver.class); PendingIntent pendingAlarmIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntentFlags.mutable()); alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(expiresInSeconds), pendingAlarmIntent); } - public static int parseInt(String integer, int defaultValue) { try { return Integer.parseInt(integer); @@ -459,4 +454,8 @@ public class Util { return defaultValue; } } + + private static @NonNull String getPackageLabel(@NonNull Context context) { + return context.getApplicationInfo().loadLabel(context.getPackageManager()).toString(); + } } diff --git a/demo/registration/src/main/java/org/signal/registration/sample/RegistrationApplication.kt b/demo/registration/src/main/java/org/signal/registration/sample/RegistrationApplication.kt index 299b2c17b8..d2a2b93892 100644 --- a/demo/registration/src/main/java/org/signal/registration/sample/RegistrationApplication.kt +++ b/demo/registration/src/main/java/org/signal/registration/sample/RegistrationApplication.kt @@ -58,7 +58,8 @@ class RegistrationApplication : Application() { ) ) - CoreUiDependencies.init(object : CoreUiDependencies.Provider { + CoreUiDependencies.init(this, object : CoreUiDependencies.Provider { + override fun providePackageId(): String = BuildConfig.APPLICATION_ID override fun provideIsIncognitoKeyboardEnabled(): Boolean = false override fun provideIsScreenSecurityEnabled(): Boolean = false override fun provideForceSplitPane(): Boolean = false diff --git a/feature/registration/src/test/java/org/signal/registration/RegistrationNavigationTest.kt b/feature/registration/src/test/java/org/signal/registration/RegistrationNavigationTest.kt index b75b9ae78c..bbe58304a1 100644 --- a/feature/registration/src/test/java/org/signal/registration/RegistrationNavigationTest.kt +++ b/feature/registration/src/test/java/org/signal/registration/RegistrationNavigationTest.kt @@ -7,6 +7,7 @@ package org.signal.registration import android.app.Application import androidx.compose.ui.test.assertIsDisplayed +import androidx.test.core.app.ApplicationProvider import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText @@ -39,7 +40,7 @@ class RegistrationNavigationTest { val composeTestRule = createComposeRule() @get:Rule - val coreUiDependenciesRule = CoreUiDependenciesRule() + val coreUiDependenciesRule = CoreUiDependenciesRule(ApplicationProvider.getApplicationContext()) private lateinit var viewModel: RegistrationViewModel private lateinit var mockRepository: RegistrationRepository diff --git a/feature/registration/src/test/java/org/signal/registration/screens/phonenumber/PhoneNumberScreenTest.kt b/feature/registration/src/test/java/org/signal/registration/screens/phonenumber/PhoneNumberScreenTest.kt index e5b8b4482c..3d2b2d3d9c 100644 --- a/feature/registration/src/test/java/org/signal/registration/screens/phonenumber/PhoneNumberScreenTest.kt +++ b/feature/registration/src/test/java/org/signal/registration/screens/phonenumber/PhoneNumberScreenTest.kt @@ -7,6 +7,7 @@ package org.signal.registration.screens.phonenumber import android.app.Application import androidx.compose.ui.test.assertIsEnabled +import androidx.test.core.app.ApplicationProvider import androidx.compose.ui.test.assertIsNotEnabled import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag @@ -31,7 +32,7 @@ class PhoneNumberScreenTest { val composeTestRule = createComposeRule() @get:Rule - val coreUiDependenciesRule = CoreUiDependenciesRule() + val coreUiDependenciesRule = CoreUiDependenciesRule(ApplicationProvider.getApplicationContext()) @Test fun `Next button is disabled when fields are empty`() { diff --git a/feature/registration/src/test/java/org/signal/registration/screens/verificationcode/VerificationCodeScreenTest.kt b/feature/registration/src/test/java/org/signal/registration/screens/verificationcode/VerificationCodeScreenTest.kt index 364135293e..8b3b33354d 100644 --- a/feature/registration/src/test/java/org/signal/registration/screens/verificationcode/VerificationCodeScreenTest.kt +++ b/feature/registration/src/test/java/org/signal/registration/screens/verificationcode/VerificationCodeScreenTest.kt @@ -7,6 +7,7 @@ package org.signal.registration.screens.verificationcode import android.app.Application import androidx.compose.ui.test.assertIsDisplayed +import androidx.test.core.app.ApplicationProvider import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText @@ -33,7 +34,7 @@ class VerificationCodeScreenTest { val composeTestRule = createComposeRule() @get:Rule - val coreUiDependenciesRule = CoreUiDependenciesRule() + val coreUiDependenciesRule = CoreUiDependenciesRule(ApplicationProvider.getApplicationContext()) @Test fun `screen displays title`() { diff --git a/feature/registration/src/test/java/org/signal/registration/screens/welcome/WelcomeScreenTest.kt b/feature/registration/src/test/java/org/signal/registration/screens/welcome/WelcomeScreenTest.kt index 07491d7cf9..00b0dc21db 100644 --- a/feature/registration/src/test/java/org/signal/registration/screens/welcome/WelcomeScreenTest.kt +++ b/feature/registration/src/test/java/org/signal/registration/screens/welcome/WelcomeScreenTest.kt @@ -7,6 +7,7 @@ package org.signal.registration.screens.welcome import android.app.Application import androidx.compose.ui.test.assertIsDisplayed +import androidx.test.core.app.ApplicationProvider import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText @@ -32,7 +33,7 @@ class WelcomeScreenTest { val composeTestRule = createComposeRule() @get:Rule - val coreUiDependenciesRule = CoreUiDependenciesRule() + val coreUiDependenciesRule = CoreUiDependenciesRule(ApplicationProvider.getApplicationContext()) @Test fun `when Get Started is clicked, Continue event is emitted`() {