diff --git a/build.gradle.kts b/build.gradle.kts index e7c273a4d7..6bc49d742c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -127,7 +127,7 @@ tasks.register("format") { dependsOn( gradle.includedBuild("build-logic").task(":plugins:ktlintFormat"), gradle.includedBuild("build-logic").task(":tools:ktlintFormat"), - *subprojects.mapNotNull { tasks.findByPath(":${it.name}:ktlintFormat") }.toTypedArray() + *subprojects.mapNotNull { tasks.findByPath(":${it.path}:ktlintFormat") }.toTypedArray() ) } diff --git a/core/models/src/main/java/org/signal/core/models/UriSerializer.kt b/core/models/src/main/java/org/signal/core/models/UriSerializer.kt index e68b41a3a7..3636aebb3d 100644 --- a/core/models/src/main/java/org/signal/core/models/UriSerializer.kt +++ b/core/models/src/main/java/org/signal/core/models/UriSerializer.kt @@ -26,4 +26,4 @@ class UriSerializer : KSerializer { override fun deserialize(decoder: Decoder): Uri { return Uri.parse(decoder.decodeString()) } -} \ No newline at end of file +} diff --git a/core/models/src/test/java/org/signal/core/models/media/TransformPropertiesTest.kt b/core/models/src/test/java/org/signal/core/models/media/TransformPropertiesTest.kt index 733a58c567..6c76fdca11 100644 --- a/core/models/src/test/java/org/signal/core/models/media/TransformPropertiesTest.kt +++ b/core/models/src/test/java/org/signal/core/models/media/TransformPropertiesTest.kt @@ -58,4 +58,4 @@ class TransformPropertiesTest { Assert.assertEquals(false, parsed.videoTrim) Assert.assertEquals(false, parsed.videoEdited) } -} \ No newline at end of file +} diff --git a/core/ui/src/main/java/org/signal/core/ui/CoreUiDependencies.kt b/core/ui/src/main/java/org/signal/core/ui/CoreUiDependencies.kt index 3e0c737865..93b5479ee2 100644 --- a/core/ui/src/main/java/org/signal/core/ui/CoreUiDependencies.kt +++ b/core/ui/src/main/java/org/signal/core/ui/CoreUiDependencies.kt @@ -42,4 +42,4 @@ object CoreUiDependencies { fun provideIsScreenSecurityEnabled(): Boolean fun provideForceSplitPane(): Boolean } -} \ No newline at end of file +} diff --git a/core/ui/src/main/java/org/signal/core/ui/compose/DropdownMenus.kt b/core/ui/src/main/java/org/signal/core/ui/compose/DropdownMenus.kt index 8480a912c6..0b3742bda6 100644 --- a/core/ui/src/main/java/org/signal/core/ui/compose/DropdownMenus.kt +++ b/core/ui/src/main/java/org/signal/core/ui/compose/DropdownMenus.kt @@ -34,8 +34,8 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource -import androidx.compose.ui.unit.Dp import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import org.signal.core.ui.R diff --git a/core/ui/src/main/java/org/signal/core/ui/compose/ModifierExtensions.kt b/core/ui/src/main/java/org/signal/core/ui/compose/ModifierExtensions.kt index c070f64c84..274e6fc826 100644 --- a/core/ui/src/main/java/org/signal/core/ui/compose/ModifierExtensions.kt +++ b/core/ui/src/main/java/org/signal/core/ui/compose/ModifierExtensions.kt @@ -70,4 +70,4 @@ fun Modifier.ensureWidthIsAtLeastHeight(): Modifier { placeable.placeRelative((size - placeable.width) / 2, (size - placeable.height) / 2) } } -} \ No newline at end of file +} diff --git a/core/ui/src/main/java/org/signal/core/ui/navigation/TransitionSpecs.kt b/core/ui/src/main/java/org/signal/core/ui/navigation/TransitionSpecs.kt index 99553f9dc4..b46fd006a8 100644 --- a/core/ui/src/main/java/org/signal/core/ui/navigation/TransitionSpecs.kt +++ b/core/ui/src/main/java/org/signal/core/ui/navigation/TransitionSpecs.kt @@ -38,7 +38,7 @@ object TransitionSpecs { targetOffsetX = { -it }, animationSpec = tween(200) ) + fadeOut(animationSpec = tween(200)) - ) + ) } val popTransitionSpec: AnimatedContentTransitionScope>.() -> ContentTransform = { @@ -53,10 +53,10 @@ object TransitionSpecs { targetOffsetX = { it }, animationSpec = tween(200) ) + fadeOut(animationSpec = tween(200)) - ) + ) } - val predictivePopTransitonSpec: AnimatedContentTransitionScope>.(@NavigationEvent.SwipeEdge Int) -> ContentTransform = { + val predictivePopTransitonSpec: AnimatedContentTransitionScope>.(@NavigationEvent.SwipeEdge Int) -> ContentTransform = { ( slideInHorizontally( initialOffsetX = { -it }, @@ -68,7 +68,7 @@ object TransitionSpecs { targetOffsetX = { it }, animationSpec = tween(200) ) + fadeOut(animationSpec = tween(200)) - ) + ) } } -} \ No newline at end of file +} diff --git a/core/ui/src/testFixtures/java/org/signal/core/ui/CoreUiDependenciesRule.kt b/core/ui/src/testFixtures/java/org/signal/core/ui/CoreUiDependenciesRule.kt index 568aa31a0a..777d190130 100644 --- a/core/ui/src/testFixtures/java/org/signal/core/ui/CoreUiDependenciesRule.kt +++ b/core/ui/src/testFixtures/java/org/signal/core/ui/CoreUiDependenciesRule.kt @@ -22,7 +22,7 @@ class CoreUiDependenciesRule( private class Provider( val isIncognitoKeyboardEnabled: Boolean - ): CoreUiDependencies.Provider { + ) : CoreUiDependencies.Provider { override fun providePackageId(): String = "org.thoughtcrime.securesms" override fun provideIsIncognitoKeyboardEnabled(): Boolean = isIncognitoKeyboardEnabled override fun provideIsScreenSecurityEnabled(): Boolean = false diff --git a/core/util-jvm/src/main/java/org/signal/core/util/ProtoExtensions.kt b/core/util-jvm/src/main/java/org/signal/core/util/ProtoExtensions.kt index cf9aa43c43..598ceb045d 100644 --- a/core/util-jvm/src/main/java/org/signal/core/util/ProtoExtensions.kt +++ b/core/util-jvm/src/main/java/org/signal/core/util/ProtoExtensions.kt @@ -150,7 +150,7 @@ private fun Message<*, *>.appendSizeTree(name: String, depth: Int, sb: StringBui if (isMessageList) { for (i in value.indices) { sb.append("\n") - (value[i] as Message<*, *>).appendSizeTree("${fieldName}[$i]", depth + 2, sb) + (value[i] as Message<*, *>).appendSizeTree("$fieldName[$i]", depth + 2, sb) } } } diff --git a/core/util-jvm/src/main/java/org/signal/core/util/logging/Scrubber.kt b/core/util-jvm/src/main/java/org/signal/core/util/logging/Scrubber.kt index 552bbad791..d15f0ab04f 100644 --- a/core/util-jvm/src/main/java/org/signal/core/util/logging/Scrubber.kt +++ b/core/util-jvm/src/main/java/org/signal/core/util/logging/Scrubber.kt @@ -10,7 +10,6 @@ import org.signal.core.util.Hex import org.signal.core.util.isNotNullOrBlank import java.util.regex.Matcher import java.util.regex.Pattern -import kotlin.io.path.Path /** Given a [Matcher], update the [StringBuilder] with the scrubbed output you want for a given match. */ private typealias MatchProcessor = (Matcher, StringBuilder) -> Unit diff --git a/core/util/src/main/java/org/signal/core/util/BitmapExtensions.kt b/core/util/src/main/java/org/signal/core/util/BitmapExtensions.kt index 108d389b5c..e6ceba53e8 100644 --- a/core/util/src/main/java/org/signal/core/util/BitmapExtensions.kt +++ b/core/util/src/main/java/org/signal/core/util/BitmapExtensions.kt @@ -33,4 +33,4 @@ fun Bitmap.scaleWithAspectRatio(maxWidth: Int, maxHeight: Int): Bitmap { } return scale(newWidth, newHeight) -} \ No newline at end of file +} diff --git a/demo/camera/src/androidTest/java/org/signal/camera/demo/ExampleInstrumentedTest.kt b/demo/camera/src/androidTest/java/org/signal/camera/demo/ExampleInstrumentedTest.kt index 842a738a45..fd498dd2fa 100644 --- a/demo/camera/src/androidTest/java/org/signal/camera/demo/ExampleInstrumentedTest.kt +++ b/demo/camera/src/androidTest/java/org/signal/camera/demo/ExampleInstrumentedTest.kt @@ -1,13 +1,11 @@ package org.signal.camera.demo -import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 - +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert.assertEquals import org.junit.Test import org.junit.runner.RunWith -import org.junit.Assert.* - /** * Instrumented test, which will execute on an Android device. * @@ -21,4 +19,4 @@ class ExampleInstrumentedTest { val appContext = InstrumentationRegistry.getInstrumentation().targetContext assertEquals("org.signal.camera.demo", appContext.packageName) } -} \ No newline at end of file +} diff --git a/demo/camera/src/main/java/org/signal/camera/demo/MainActivity.kt b/demo/camera/src/main/java/org/signal/camera/demo/MainActivity.kt index 165ecaf447..8e69b028bc 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/MainActivity.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/MainActivity.kt @@ -24,4 +24,4 @@ class MainActivity : ComponentActivity() { } } } -} \ No newline at end of file +} diff --git a/demo/camera/src/main/java/org/signal/camera/demo/NavGraph.kt b/demo/camera/src/main/java/org/signal/camera/demo/NavGraph.kt index 91e4ebe5a6..d9070656c7 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/NavGraph.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/NavGraph.kt @@ -1,22 +1,15 @@ package org.signal.camera.demo -import androidx.compose.animation.AnimatedContentTransitionScope -import androidx.compose.animation.ContentTransform import androidx.compose.animation.core.tween -import androidx.compose.animation.fadeIn -import androidx.compose.animation.fadeOut import androidx.compose.animation.slideInHorizontally -import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideOutHorizontally -import androidx.compose.animation.slideOutVertically import androidx.compose.animation.togetherWith import androidx.compose.runtime.Composable -import androidx.navigation3.runtime.NavKey import androidx.compose.ui.Modifier import androidx.navigation3.runtime.NavBackStack +import androidx.navigation3.runtime.NavKey import androidx.navigation3.runtime.entryProvider import androidx.navigation3.runtime.rememberNavBackStack -import androidx.navigation3.scene.Scene import androidx.navigation3.ui.NavDisplay import org.signal.camera.demo.screens.gallery.GalleryScreen import org.signal.camera.demo.screens.imageviewer.ImageViewerScreen @@ -42,24 +35,24 @@ fun NavGraph( modifier: Modifier = Modifier ) { val backStack = rememberNavBackStack(Screen.Main) - + @Suppress("UNCHECKED_CAST") val typedBackStack = backStack as NavBackStack - + NavDisplay( backStack = backStack, modifier = modifier, transitionSpec = { // Gallery slides up from bottom slideInHorizontally( - initialOffsetX = { fullWidth -> fullWidth }, + initialOffsetX = { fullWidth -> fullWidth }, animationSpec = tween(500) ) togetherWith - // Camera stays in place and fades out - slideOutHorizontally ( - targetOffsetX = { fullWidth -> -fullWidth }, - animationSpec = tween(500) - ) + // Camera stays in place and fades out + slideOutHorizontally( + targetOffsetX = { fullWidth -> -fullWidth }, + animationSpec = tween(500) + ) }, popTransitionSpec = { // Camera slides back in from left @@ -67,11 +60,11 @@ fun NavGraph( initialOffsetX = { fullWidth -> -fullWidth }, animationSpec = tween(500) ) togetherWith - // Gallery slides out to right - slideOutHorizontally( - targetOffsetX = { fullWidth -> fullWidth }, - animationSpec = tween(500) - ) + // Gallery slides out to right + slideOutHorizontally( + targetOffsetX = { fullWidth -> fullWidth }, + animationSpec = tween(500) + ) }, predictivePopTransitionSpec = { progress -> // Camera slides back in from left (predictive with progress) @@ -79,21 +72,21 @@ fun NavGraph( initialOffsetX = { fullWidth -> -fullWidth }, animationSpec = tween(500) ) togetherWith - // Gallery slides out to right (predictive with progress) - slideOutHorizontally( - targetOffsetX = { fullWidth -> fullWidth }, - animationSpec = tween(500) - ) + // Gallery slides out to right (predictive with progress) + slideOutHorizontally( + targetOffsetX = { fullWidth -> fullWidth }, + animationSpec = tween(500) + ) }, entryProvider = entryProvider { addEntryProvider( - key = Screen.Main, - contentKey = Screen.Main, + key = Screen.Main, + contentKey = Screen.Main, metadata = emptyMap() ) { screen: Screen -> MainScreen(backStack = typedBackStack) } - + addEntryProvider( key = Screen.Gallery, contentKey = Screen.Gallery, @@ -101,7 +94,7 @@ fun NavGraph( ) { screen: Screen -> GalleryScreen(backStack = typedBackStack) } - + addEntryProvider( key = Screen.ImageViewer, contentKey = Screen.ImageViewer, @@ -109,7 +102,7 @@ fun NavGraph( ) { screen: Screen -> ImageViewerScreen(backStack = typedBackStack) } - + addEntryProvider( key = Screen.VideoViewer, contentKey = Screen.VideoViewer, diff --git a/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/GalleryScreen.kt b/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/GalleryScreen.kt index 7b1138440a..ac65e676ff 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/GalleryScreen.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/GalleryScreen.kt @@ -5,8 +5,6 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.asPaddingValues @@ -17,10 +15,10 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items +import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Delete import androidx.compose.material.icons.filled.PlayArrow @@ -59,11 +57,11 @@ fun GalleryScreen( val context = LocalContext.current val state = viewModel.state.value var showDeleteDialog by remember { mutableStateOf(false) } - + LaunchedEffect(Unit) { viewModel.loadMedia(context) } - + // Delete confirmation dialog if (showDeleteDialog) { AlertDialog( @@ -92,7 +90,7 @@ fun GalleryScreen( } ) } - + Box( modifier = Modifier .fillMaxSize() @@ -154,7 +152,7 @@ fun GalleryScreen( } } } - + // Delete all button at bottom (only show when there are items) if (state.mediaItems.isNotEmpty()) { Button( @@ -196,7 +194,7 @@ private fun MediaThumbnail( scaleType = GlideImageScaleType.CENTER_CROP, modifier = Modifier.fillMaxSize() ) - + if (mediaItem.isVideo) { Box( modifier = Modifier diff --git a/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/GalleryScreenViewModel.kt b/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/GalleryScreenViewModel.kt index eac4dbeaf2..6ebd608442 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/GalleryScreenViewModel.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/GalleryScreenViewModel.kt @@ -19,10 +19,10 @@ class GalleryScreenViewModel : ViewModel() { private val _state: MutableState = mutableStateOf(GalleryScreenState()) val state: State get() = _state - + fun loadMedia(context: Context) { _state.value = _state.value.copy(isLoading = true, error = null) - + viewModelScope.launch { try { val mediaItems = loadMediaFromInternalStorage(context) @@ -40,7 +40,7 @@ class GalleryScreenViewModel : ViewModel() { } } } - + fun deleteAllMedia(context: Context) { viewModelScope.launch { try { @@ -56,14 +56,14 @@ class GalleryScreenViewModel : ViewModel() { } } } - + private suspend fun loadMediaFromInternalStorage(context: Context): List = withContext(Dispatchers.IO) { val galleryDir = File(context.filesDir, GALLERY_FOLDER) - + if (!galleryDir.exists()) { return@withContext emptyList() } - + galleryDir.listFiles() ?.filter { it.isFile } ?.mapNotNull { file -> @@ -80,23 +80,23 @@ class GalleryScreenViewModel : ViewModel() { ?.sortedByDescending { it.lastModified } ?: emptyList() } - + private suspend fun deleteAllMediaFromInternalStorage(context: Context): Int = withContext(Dispatchers.IO) { val galleryDir = File(context.filesDir, GALLERY_FOLDER) - + if (!galleryDir.exists()) { return@withContext 0 } - + val files = galleryDir.listFiles() ?: return@withContext 0 var deletedCount = 0 - + files.forEach { file -> if (file.isFile && file.delete()) { deletedCount++ } } - + deletedCount } } diff --git a/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/MediaItem.kt b/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/MediaItem.kt index 95fefdb62c..655accfe37 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/MediaItem.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/screens/gallery/MediaItem.kt @@ -6,19 +6,19 @@ sealed class MediaItem { abstract val file: File abstract val name: String abstract val lastModified: Long - + data class Image( override val file: File, override val name: String = file.name, override val lastModified: Long = file.lastModified() ) : MediaItem() - + data class Video( override val file: File, override val name: String = file.name, override val lastModified: Long = file.lastModified() ) : MediaItem() - + val isImage: Boolean get() = this is Image val isVideo: Boolean get() = this is Video } diff --git a/demo/camera/src/main/java/org/signal/camera/demo/screens/imageviewer/ImageViewerScreen.kt b/demo/camera/src/main/java/org/signal/camera/demo/screens/imageviewer/ImageViewerScreen.kt index ce1e2a1dee..ebf891a437 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/screens/imageviewer/ImageViewerScreen.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/screens/imageviewer/ImageViewerScreen.kt @@ -36,18 +36,18 @@ fun ImageViewerScreen( backStack: NavBackStack ) { val selectedMedia = org.signal.camera.demo.MediaSelectionHolder.selectedMedia - + if (selectedMedia == null || selectedMedia !is MediaItem.Image) { // No image selected, go back backStack.removeLastOrNull() return } - + val imageFile = selectedMedia.file - + var scale by remember { mutableFloatStateOf(1f) } var offset by remember { mutableStateOf(Offset.Zero) } - + Box( modifier = Modifier .fillMaxSize() @@ -83,7 +83,7 @@ fun ImageViewerScreen( ) ) } - + // Back button IconButton( onClick = { backStack.removeLastOrNull() }, diff --git a/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreen.kt b/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreen.kt index aa003eefad..cc2cb8c6b9 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreen.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreen.kt @@ -5,6 +5,7 @@ package org.signal.camera.demo.screens.main import android.Manifest import android.os.Build import android.widget.Toast +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -25,35 +26,34 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel +import androidx.navigation3.runtime.NavBackStack import com.google.accompanist.permissions.ExperimentalPermissionsApi import com.google.accompanist.permissions.MultiplePermissionsState import com.google.accompanist.permissions.PermissionState import com.google.accompanist.permissions.rememberMultiplePermissionsState -import androidx.compose.foundation.background -import androidx.compose.ui.graphics.Color -import androidx.navigation3.runtime.NavBackStack -import org.signal.camera.demo.Screen -import org.signal.camera.hud.StandardCameraHudEvents import org.signal.camera.CameraScreen import org.signal.camera.CameraScreenEvents import org.signal.camera.CameraScreenViewModel +import org.signal.camera.demo.Screen import org.signal.camera.hud.StandardCameraHud +import org.signal.camera.hud.StandardCameraHudEvents @Composable fun MainScreen( backStack: NavBackStack, - viewModel: MainScreenViewModel = viewModel(), + viewModel: MainScreenViewModel = viewModel() ) { val cameraViewModel: CameraScreenViewModel = viewModel() val permissions = buildList { add(Manifest.permission.CAMERA) add(Manifest.permission.RECORD_AUDIO) - + if (Build.VERSION.SDK_INT >= 33) { add(Manifest.permission.READ_MEDIA_IMAGES) add(Manifest.permission.READ_MEDIA_VIDEO) @@ -61,7 +61,7 @@ fun MainScreen( add(Manifest.permission.READ_EXTERNAL_STORAGE) } } - + val permissionsState = rememberMultiplePermissionsState(permissions = permissions) val context = LocalContext.current @@ -126,7 +126,7 @@ fun MainScreen( } ) } - is StandardCameraHudEvents.VideoCaptureStopped-> { + is StandardCameraHudEvents.VideoCaptureStopped -> { cameraViewModel.stopRecording() } is StandardCameraHudEvents.GalleryClick -> { @@ -155,7 +155,7 @@ fun MainScreen( ) } } - + // QR Code Dialog if (qrCodeContent != null) { AlertDialog( diff --git a/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreenEvents.kt b/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreenEvents.kt index 460d243a7d..fcf05f29e1 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreenEvents.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreenEvents.kt @@ -5,8 +5,8 @@ import android.graphics.Bitmap sealed interface MainScreenEvents { data class SavePhoto(val context: Context, val bitmap: Bitmap) : MainScreenEvents - + data class VideoSaved(val result: org.signal.camera.VideoCaptureResult) : MainScreenEvents - + data object ClearSaveStatus : MainScreenEvents } diff --git a/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreenViewModel.kt b/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreenViewModel.kt index 95f6808232..2eb82e29da 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreenViewModel.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/screens/main/MainScreenViewModel.kt @@ -9,11 +9,11 @@ import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import org.signal.camera.VideoCaptureResult -import org.signal.camera.VideoOutput import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.signal.camera.VideoCaptureResult +import org.signal.camera.VideoOutput import java.io.File import java.text.SimpleDateFormat import java.util.Locale @@ -40,25 +40,25 @@ class MainScreenViewModel : ViewModel() { } } } - + fun createVideoOutput(context: Context): VideoOutput { // Create gallery directory in internal storage val galleryDir = File(context.filesDir, GALLERY_FOLDER) if (!galleryDir.exists()) { galleryDir.mkdirs() } - + // Generate filename with timestamp val name = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS", Locale.US) .format(System.currentTimeMillis()) val file = File(galleryDir, "$name.mp4") - + // Open the file as a ParcelFileDescriptor val fileDescriptor = ParcelFileDescriptor.open( file, ParcelFileDescriptor.MODE_READ_WRITE or ParcelFileDescriptor.MODE_CREATE ) - + return VideoOutput.FileDescriptorOutput(fileDescriptor) } @@ -87,7 +87,7 @@ class MainScreenViewModel : ViewModel() { is VideoCaptureResult.Success -> { // Close the file descriptor now that recording is complete result.fileDescriptor?.close() - + Log.d(TAG, "Video saved successfully") _state.value = state.copy(saveStatus = SaveStatus.Success) } @@ -97,7 +97,7 @@ class MainScreenViewModel : ViewModel() { } } } - + private fun handleClearSaveStatusEvent( state: MainScreenState, event: MainScreenEvents.ClearSaveStatus @@ -111,12 +111,12 @@ class MainScreenViewModel : ViewModel() { if (!galleryDir.exists()) { galleryDir.mkdirs() } - + // Generate filename with timestamp val name = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS", Locale.US) .format(System.currentTimeMillis()) val file = File(galleryDir, "$name.jpg") - + // Save bitmap to file file.outputStream().use { outputStream -> event.bitmap.compress(Bitmap.CompressFormat.JPEG, 95, outputStream) diff --git a/demo/camera/src/main/java/org/signal/camera/demo/screens/videoviewer/VideoViewerScreen.kt b/demo/camera/src/main/java/org/signal/camera/demo/screens/videoviewer/VideoViewerScreen.kt index 00898295ac..f53f2dd02b 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/screens/videoviewer/VideoViewerScreen.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/screens/videoviewer/VideoViewerScreen.kt @@ -27,7 +27,6 @@ import androidx.media3.exoplayer.ExoPlayer import androidx.media3.ui.PlayerView import androidx.navigation3.runtime.NavBackStack import org.signal.camera.demo.Screen -import java.io.File @OptIn(UnstableApi::class) @Composable @@ -35,16 +34,16 @@ fun VideoViewerScreen( backStack: NavBackStack ) { val selectedMedia = org.signal.camera.demo.MediaSelectionHolder.selectedMedia - + if (selectedMedia == null || selectedMedia !is org.signal.camera.demo.screens.gallery.MediaItem.Video) { // No video selected, go back backStack.removeAt(backStack.lastIndex) return } - + val context = LocalContext.current val videoFile = selectedMedia.file - + val exoPlayer = remember { ExoPlayer.Builder(context).build().apply { val mediaItem = MediaItem.fromUri(videoFile.toURI().toString()) @@ -54,13 +53,13 @@ fun VideoViewerScreen( repeatMode = Player.REPEAT_MODE_OFF } } - + DisposableEffect(Unit) { onDispose { exoPlayer.release() } } - + Box( modifier = Modifier .fillMaxSize() @@ -81,7 +80,7 @@ fun VideoViewerScreen( }, modifier = Modifier.fillMaxSize() ) - + // Back button IconButton( onClick = { backStack.removeAt(backStack.lastIndex) }, diff --git a/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Color.kt b/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Color.kt index 6b6b9d7fb8..1f4ea460ef 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Color.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Color.kt @@ -8,4 +8,4 @@ val Pink80 = Color(0xFFEFB8C8) val Purple40 = Color(0xFF6650a4) val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) \ No newline at end of file +val Pink40 = Color(0xFF7D5260) diff --git a/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Theme.kt b/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Theme.kt index 1bd4fa7a3c..0b0540a29e 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Theme.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Theme.kt @@ -1,6 +1,5 @@ package org.signal.camera.demo.ui.theme -import android.app.Activity import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme @@ -30,7 +29,7 @@ private val LightColorScheme = lightColorScheme( onTertiary = Color.White, onBackground = Color(0xFF1C1B1F), onSurface = Color(0xFF1C1B1F), - */ + */ ) @Composable @@ -55,4 +54,4 @@ fun CameraXTestTheme( typography = Typography, content = content ) -} \ No newline at end of file +} diff --git a/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Type.kt b/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Type.kt index 0044f2904a..2d2516864b 100644 --- a/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Type.kt +++ b/demo/camera/src/main/java/org/signal/camera/demo/ui/theme/Type.kt @@ -30,5 +30,5 @@ val Typography = Typography( lineHeight = 16.sp, letterSpacing = 0.5.sp ) - */ -) \ No newline at end of file + */ +) diff --git a/demo/camera/src/test/java/org/signal/camera/demo/ExampleUnitTest.kt b/demo/camera/src/test/java/org/signal/camera/demo/ExampleUnitTest.kt index 7d24a93360..4f92dd5b37 100644 --- a/demo/camera/src/test/java/org/signal/camera/demo/ExampleUnitTest.kt +++ b/demo/camera/src/test/java/org/signal/camera/demo/ExampleUnitTest.kt @@ -1,9 +1,8 @@ package org.signal.camera.demo +import org.junit.Assert.assertEquals import org.junit.Test -import org.junit.Assert.* - /** * Example local unit test, which will execute on the development machine (host). * @@ -14,4 +13,4 @@ class ExampleUnitTest { fun addition_isCorrect() { assertEquals(4, 2 + 2) } -} \ No newline at end of file +} 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 33d8a3ea5c..68f352162a 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 @@ -59,12 +59,15 @@ class RegistrationApplication : Application() { ) ) - 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 - }) + 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 + } + ) } private fun createPushServiceSocket(configuration: SignalServiceConfiguration): PushServiceSocket { diff --git a/demo/registration/src/main/java/org/signal/registration/sample/absbackup/RegistrationBackupAgent.kt b/demo/registration/src/main/java/org/signal/registration/sample/absbackup/RegistrationBackupAgent.kt index 7efd616188..107f48a004 100644 --- a/demo/registration/src/main/java/org/signal/registration/sample/absbackup/RegistrationBackupAgent.kt +++ b/demo/registration/src/main/java/org/signal/registration/sample/absbackup/RegistrationBackupAgent.kt @@ -8,7 +8,6 @@ package org.signal.registration.sample.absbackup import android.app.backup.BackupAgent import android.app.backup.BackupDataInput import android.app.backup.BackupDataOutput -import android.app.backup.FullBackupDataOutput import android.os.ParcelFileDescriptor import org.signal.core.util.logging.Log import org.signal.registration.NetworkController @@ -17,7 +16,6 @@ import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import java.io.DataInputStream import java.io.DataOutputStream -import java.io.File import java.io.FileInputStream import java.io.FileOutputStream import java.io.IOException @@ -108,4 +106,4 @@ class RegistrationBackupAgent : BackupAgent() { private val TAG = Log.tag(RegistrationBackupAgent::class) private const val BACKUP_KEY = "Svr2Credentials" } -} \ No newline at end of file +} diff --git a/demo/registration/src/main/java/org/signal/registration/sample/debug/DebugNetworkController.kt b/demo/registration/src/main/java/org/signal/registration/sample/debug/DebugNetworkController.kt index d61b30327c..84f21a7e50 100644 --- a/demo/registration/src/main/java/org/signal/registration/sample/debug/DebugNetworkController.kt +++ b/demo/registration/src/main/java/org/signal/registration/sample/debug/DebugNetworkController.kt @@ -10,6 +10,8 @@ import org.signal.core.util.logging.Log import org.signal.registration.NetworkController import org.signal.registration.NetworkController.AccountAttributes import org.signal.registration.NetworkController.BackupMasterKeyError +import org.signal.registration.NetworkController.CheckSvrCredentialsError +import org.signal.registration.NetworkController.CheckSvrCredentialsResponse import org.signal.registration.NetworkController.CreateSessionError import org.signal.registration.NetworkController.GetSessionStatusError import org.signal.registration.NetworkController.GetSvrCredentialsError @@ -27,8 +29,6 @@ import org.signal.registration.NetworkController.SubmitVerificationCodeError import org.signal.registration.NetworkController.SvrCredentials import org.signal.registration.NetworkController.UpdateSessionError import org.signal.registration.NetworkController.VerificationCodeTransport -import org.signal.registration.NetworkController.CheckSvrCredentialsError -import org.signal.registration.NetworkController.CheckSvrCredentialsResponse import java.util.Locale /** diff --git a/demo/registration/src/main/java/org/signal/registration/sample/dependencies/DemoNetworkController.kt b/demo/registration/src/main/java/org/signal/registration/sample/dependencies/DemoNetworkController.kt index 61d2674b15..afb96cfee5 100644 --- a/demo/registration/src/main/java/org/signal/registration/sample/dependencies/DemoNetworkController.kt +++ b/demo/registration/src/main/java/org/signal/registration/sample/dependencies/DemoNetworkController.kt @@ -17,6 +17,8 @@ import org.signal.libsignal.net.Network import org.signal.libsignal.protocol.util.Hex import org.signal.registration.NetworkController import org.signal.registration.NetworkController.AccountAttributes +import org.signal.registration.NetworkController.CheckSvrCredentialsRequest +import org.signal.registration.NetworkController.CheckSvrCredentialsResponse import org.signal.registration.NetworkController.CreateSessionError import org.signal.registration.NetworkController.GetSessionStatusError import org.signal.registration.NetworkController.PreKeyCollection @@ -25,8 +27,6 @@ import org.signal.registration.NetworkController.RegisterAccountResponse import org.signal.registration.NetworkController.RegistrationLockResponse import org.signal.registration.NetworkController.RegistrationNetworkResult import org.signal.registration.NetworkController.RequestVerificationCodeError -import org.signal.registration.NetworkController.CheckSvrCredentialsRequest -import org.signal.registration.NetworkController.CheckSvrCredentialsResponse import org.signal.registration.NetworkController.SessionMetadata import org.signal.registration.NetworkController.SubmitVerificationCodeError import org.signal.registration.NetworkController.ThirdPartyServiceErrorResponse diff --git a/feature/camera/src/main/java/org/signal/camera/CameraScreen.kt b/feature/camera/src/main/java/org/signal/camera/CameraScreen.kt index cd45b9021c..40e0da45dc 100644 --- a/feature/camera/src/main/java/org/signal/camera/CameraScreen.kt +++ b/feature/camera/src/main/java/org/signal/camera/CameraScreen.kt @@ -5,7 +5,6 @@ import androidx.camera.compose.CameraXViewfinder import androidx.camera.core.SurfaceRequest import androidx.camera.lifecycle.ProcessCameraProvider import androidx.camera.viewfinder.compose.MutableCoordinateTransformer -import androidx.camera.core.Preview as CameraPreview import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.Spring @@ -45,6 +44,7 @@ import androidx.compose.ui.unit.dp import kotlinx.coroutines.delay import kotlinx.coroutines.launch import org.signal.core.ui.compose.Previews +import androidx.camera.core.Preview as CameraPreview /** * A camera screen that handles core camera functionality, such as: diff --git a/feature/camera/src/main/java/org/signal/camera/CameraScreenEvents.kt b/feature/camera/src/main/java/org/signal/camera/CameraScreenEvents.kt index 5591a13d74..9d5dd8aed6 100644 --- a/feature/camera/src/main/java/org/signal/camera/CameraScreenEvents.kt +++ b/feature/camera/src/main/java/org/signal/camera/CameraScreenEvents.kt @@ -43,4 +43,4 @@ sealed interface CameraScreenEvents { /** Indicates the capture error has been handled and can be cleared. */ data object ClearCaptureError : CameraScreenEvents -} \ No newline at end of file +} diff --git a/feature/camera/src/main/java/org/signal/camera/CameraScreenState.kt b/feature/camera/src/main/java/org/signal/camera/CameraScreenState.kt index a6b34e5644..f7cd29e3d6 100644 --- a/feature/camera/src/main/java/org/signal/camera/CameraScreenState.kt +++ b/feature/camera/src/main/java/org/signal/camera/CameraScreenState.kt @@ -45,4 +45,3 @@ enum class FlashMode(val cameraxMode: Int) { } } } - diff --git a/feature/camera/src/main/java/org/signal/camera/CameraScreenViewModel.kt b/feature/camera/src/main/java/org/signal/camera/CameraScreenViewModel.kt index 071e0e687d..54351a24a2 100644 --- a/feature/camera/src/main/java/org/signal/camera/CameraScreenViewModel.kt +++ b/feature/camera/src/main/java/org/signal/camera/CameraScreenViewModel.kt @@ -3,8 +3,8 @@ package org.signal.camera import android.Manifest import android.app.Activity import android.content.Context -import android.content.pm.PackageManager import android.content.ContextWrapper +import android.content.pm.PackageManager import android.graphics.Bitmap import android.graphics.Matrix import android.os.Build @@ -81,7 +81,7 @@ class CameraScreenViewModel : ViewModel() { private var orientationListener: OrientationEventListener? = null private val _qrCodeDetected = MutableSharedFlow(extraBufferCapacity = 1) - + /** * Flow of detected QR codes. Observers can collect from this flow to receive QR code detections. * The flow filters consecutive duplicates and is throttled to avoid rapid-fire detections. @@ -133,7 +133,7 @@ class CameraScreenViewModel : ViewModel() { @androidx.annotation.OptIn(markerClass = [androidx.camera.core.ExperimentalGetImage::class]) fun capturePhoto( context: Context, - onPhotoCaptured: (Bitmap) -> Unit, + onPhotoCaptured: (Bitmap) -> Unit ) { val state = _state.value val capture = imageCapture ?: run { diff --git a/feature/camera/src/main/java/org/signal/camera/VideoOutput.kt b/feature/camera/src/main/java/org/signal/camera/VideoOutput.kt index b5cc92a25d..32d61b7c5f 100644 --- a/feature/camera/src/main/java/org/signal/camera/VideoOutput.kt +++ b/feature/camera/src/main/java/org/signal/camera/VideoOutput.kt @@ -13,7 +13,7 @@ sealed class VideoOutput { * The consumer is responsible for creating the file and managing its lifecycle. */ data class FileOutput(val file: File) : VideoOutput() - + /** * Save video to a file descriptor. * The consumer provides the file descriptor and is responsible for closing it. @@ -35,7 +35,7 @@ sealed class VideoCaptureResult { val outputFile: File? = null, val fileDescriptor: ParcelFileDescriptor? = null ) : VideoCaptureResult() - + /** * Video capture failed. * @param fileDescriptor The file descriptor that was being used (for cleanup) diff --git a/feature/camera/src/main/java/org/signal/camera/hud/CaptureButton.kt b/feature/camera/src/main/java/org/signal/camera/hud/CaptureButton.kt index b801020975..2390f728ad 100644 --- a/feature/camera/src/main/java/org/signal/camera/hud/CaptureButton.kt +++ b/feature/camera/src/main/java/org/signal/camera/hud/CaptureButton.kt @@ -22,12 +22,12 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.StrokeCap import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.tooling.preview.Preview diff --git a/feature/camera/src/main/java/org/signal/camera/hud/GalleryThumbnailButton.kt b/feature/camera/src/main/java/org/signal/camera/hud/GalleryThumbnailButton.kt index e813a6edb3..02a3fdbd98 100644 --- a/feature/camera/src/main/java/org/signal/camera/hud/GalleryThumbnailButton.kt +++ b/feature/camera/src/main/java/org/signal/camera/hud/GalleryThumbnailButton.kt @@ -32,14 +32,14 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext import org.signal.glide.compose.GlideImage import org.signal.glide.compose.GlideImageScaleType -import kotlinx.coroutines.withContext /** * A button that displays a thumbnail of the most recent image or video from the gallery. * Shows a circular thumbnail with a white border that opens the gallery when clicked. - * + * * @param modifier Modifier to apply to the button * @param onClick Callback when the button is clicked */ @@ -50,12 +50,12 @@ fun GalleryThumbnailButton( ) { val context = LocalContext.current var thumbnailUri by remember { mutableStateOf(null) } - + // Load the most recent media item LaunchedEffect(Unit) { thumbnailUri = getLatestMediaUri(context) } - + Box( modifier = modifier .size(52.dp) @@ -93,7 +93,7 @@ private suspend fun getLatestMediaUri(context: Context): Uri? = withContext(Disp try { val imageUri = getLatestImageUri(context) val videoUri = getLatestVideoUri(context) - + // Compare timestamps if both exist, otherwise return whichever is available when { imageUri != null && videoUri != null -> { @@ -122,9 +122,9 @@ private fun getLatestImageUri(context: Context): Uri? { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATE_ADDED ) - + val sortOrder = "${MediaStore.Images.Media.DATE_ADDED} DESC" - + context.contentResolver.query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, @@ -141,7 +141,7 @@ private fun getLatestImageUri(context: Context): Uri? { ) } } - + return null } @@ -153,9 +153,9 @@ private fun getLatestVideoUri(context: Context): Uri? { MediaStore.Video.Media._ID, MediaStore.Video.Media.DATE_ADDED ) - + val sortOrder = "${MediaStore.Video.Media.DATE_ADDED} DESC" - + context.contentResolver.query( MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, @@ -172,7 +172,7 @@ private fun getLatestVideoUri(context: Context): Uri? { ) } } - + return null } @@ -181,7 +181,7 @@ private fun getLatestVideoUri(context: Context): Uri? { */ private fun getMediaTimestamp(context: Context, uri: Uri): Long? { val projection = arrayOf(MediaStore.MediaColumns.DATE_ADDED) - + context.contentResolver.query( uri, projection, @@ -194,7 +194,7 @@ private fun getMediaTimestamp(context: Context, uri: Uri): Long? { return cursor.getLong(dateColumn) } } - + return null } @@ -208,7 +208,7 @@ fun hasMediaPermissions(context: Context): Boolean { // Android 13+ context.checkSelfPermission(Manifest.permission.READ_MEDIA_IMAGES) == PackageManager.PERMISSION_GRANTED || - context.checkSelfPermission(Manifest.permission.READ_MEDIA_VIDEO) == + context.checkSelfPermission(Manifest.permission.READ_MEDIA_VIDEO) == PackageManager.PERMISSION_GRANTED } else { // Older Android versions diff --git a/feature/camera/src/main/java/org/signal/camera/hud/StandardCameraHud.kt b/feature/camera/src/main/java/org/signal/camera/hud/StandardCameraHud.kt index 4e5c1827a9..46250b34cd 100644 --- a/feature/camera/src/main/java/org/signal/camera/hud/StandardCameraHud.kt +++ b/feature/camera/src/main/java/org/signal/camera/hud/StandardCameraHud.kt @@ -413,7 +413,7 @@ private fun MediaCountIndicator( .padding(horizontal = 12.dp), verticalAlignment = Alignment.CenterVertically ) { - val size = with (LocalDensity.current) { + val size = with(LocalDensity.current) { 22.sp.toDp() } Box( diff --git a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendActivity.kt b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendActivity.kt index 86bfdb47f7..17625988b7 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendActivity.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendActivity.kt @@ -8,7 +8,6 @@ import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Surface -import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier import androidx.fragment.app.FragmentActivity @@ -49,10 +48,10 @@ abstract class MediaSendActivity : FragmentActivity() { backStack = backStack, callback = viewModel, modifier = Modifier.fillMaxSize(), - cameraSlot = { }, - textStoryEditorSlot = { }, - videoEditorSlot = { }, - sendSlot = { } + cameraSlot = { }, + textStoryEditorSlot = { }, + videoEditorSlot = { }, + sendSlot = { } ) } } diff --git a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendDependencies.kt b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendDependencies.kt index 9253ae4e0f..1586c5ae48 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendDependencies.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendDependencies.kt @@ -38,4 +38,4 @@ object MediaSendDependencies { fun provideMediaSendRepository(): MediaSendRepository fun providePreUploadRepository(): PreUploadRepository } -} \ No newline at end of file +} diff --git a/feature/media-send/src/main/java/org/signal/mediasend/preupload/PreUploadRepository.kt b/feature/media-send/src/main/java/org/signal/mediasend/preupload/PreUploadRepository.kt index df220ed496..ada3aaa7b5 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/preupload/PreUploadRepository.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/preupload/PreUploadRepository.kt @@ -18,7 +18,7 @@ import org.signal.mediasend.MediaRecipientId * Threading: all callback methods are invoked on this manager's serialized background executor * thread (i.e., not the main thread). */ -interface PreUploadRepository { +interface PreUploadRepository { /** * Performs pre-upload side-effects (e.g., create attachment state + enqueue jobs). * @@ -75,4 +75,4 @@ interface PreUploadRepository { */ @WorkerThread fun deleteAbandonedPreuploadedAttachments(context: Context): Int -} \ No newline at end of file +} diff --git a/feature/registration/src/main/java/org/signal/registration/RegistrationActivity.kt b/feature/registration/src/main/java/org/signal/registration/RegistrationActivity.kt index d6382a5221..0e02fa5b15 100644 --- a/feature/registration/src/main/java/org/signal/registration/RegistrationActivity.kt +++ b/feature/registration/src/main/java/org/signal/registration/RegistrationActivity.kt @@ -6,7 +6,6 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.result.contract.ActivityResultContract -import androidx.activity.viewModels import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Surface import androidx.compose.ui.Modifier diff --git a/feature/registration/src/main/java/org/signal/registration/RegistrationFlowState.kt b/feature/registration/src/main/java/org/signal/registration/RegistrationFlowState.kt index ea06a0d971..633021380e 100644 --- a/feature/registration/src/main/java/org/signal/registration/RegistrationFlowState.kt +++ b/feature/registration/src/main/java/org/signal/registration/RegistrationFlowState.kt @@ -38,4 +38,3 @@ data class RegistrationFlowState( /** If true, do not attempt any flows where we generate RRP's. Create a session instead. */ val doNotAttemptRecoveryPassword: Boolean = false ) : Parcelable - diff --git a/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryViewModel.kt b/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryViewModel.kt index a2ecb9e06f..cb4e4e98c9 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryViewModel.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/phonenumber/PhoneNumberEntryViewModel.kt @@ -26,10 +26,7 @@ import org.signal.registration.RegistrationFlowState import org.signal.registration.RegistrationRepository import org.signal.registration.RegistrationRoute import org.signal.registration.screens.phonenumber.PhoneNumberEntryState.OneTimeEvent -import org.signal.registration.screens.phonenumber.PhoneNumberEntryState.OneTimeEvent.* import org.signal.registration.screens.util.navigateTo -import org.signal.registration.screens.verificationcode.VerificationCodeState -import org.signal.registration.screens.verificationcode.VerificationCodeViewModel class PhoneNumberEntryViewModel( val repository: RegistrationRepository, @@ -101,7 +98,7 @@ class PhoneNumberEntryViewModel( @VisibleForTesting fun applyParentState(state: PhoneNumberEntryState, parentState: RegistrationFlowState): PhoneNumberEntryState { return state.copy( - sessionE164 = parentState.sessionE164, + sessionE164 = parentState.sessionE164, sessionMetadata = parentState.sessionMetadata, preExistingRegistrationData = parentState.preExistingRegistrationData, restoredSvrCredentials = state.restoredSvrCredentials.takeUnless { parentState.doNotAttemptRecoveryPassword } ?: emptyList() @@ -238,7 +235,7 @@ class PhoneNumberEntryViewModel( if (state.restoredSvrCredentials.isNotEmpty()) { when (val result = repository.checkSvrCredentials(e164, state.restoredSvrCredentials)) { is NetworkController.RegistrationNetworkResult.Success -> { - Log.i(TAG, "[CheckSVRCredentials] Successfully validated credentials for ${e164}.") + Log.i(TAG, "[CheckSVRCredentials] Successfully validated credentials for $e164.") val credential = result.data.validCredential if (credential != null) { parentEventEmitter(RegistrationFlowEvent.E164Chosen(e164)) diff --git a/feature/registration/src/main/java/org/signal/registration/screens/pinentry/PinEntryForSmsBypassViewModel.kt b/feature/registration/src/main/java/org/signal/registration/screens/pinentry/PinEntryForSmsBypassViewModel.kt index 6589b109ed..41dc1143f0 100644 --- a/feature/registration/src/main/java/org/signal/registration/screens/pinentry/PinEntryForSmsBypassViewModel.kt +++ b/feature/registration/src/main/java/org/signal/registration/screens/pinentry/PinEntryForSmsBypassViewModel.kt @@ -217,7 +217,7 @@ class PinEntryForSmsBypassViewModel( override fun create(modelClass: Class): T { return PinEntryForSmsBypassViewModel( repository = repository, - parentState = parentState, + parentState = parentState, parentEventEmitter = parentEventEmitter, svrCredentials = svrCredentials ) as T diff --git a/feature/registration/src/main/java/org/signal/registration/util/ACIParceler.kt b/feature/registration/src/main/java/org/signal/registration/util/ACIParceler.kt index 11168fb62c..86acf3ab07 100644 --- a/feature/registration/src/main/java/org/signal/registration/util/ACIParceler.kt +++ b/feature/registration/src/main/java/org/signal/registration/util/ACIParceler.kt @@ -17,4 +17,4 @@ class ACIParceler : Parceler { override fun create(parcel: Parcel): ServiceId.ACI { return ServiceId.ACI.parseOrThrow(parcel.createByteArray()) } -} \ No newline at end of file +} diff --git a/feature/registration/src/main/java/org/signal/registration/util/KyberPreKeyRecordParceler.kt b/feature/registration/src/main/java/org/signal/registration/util/KyberPreKeyRecordParceler.kt index de8e7e69c5..b14747d7cb 100644 --- a/feature/registration/src/main/java/org/signal/registration/util/KyberPreKeyRecordParceler.kt +++ b/feature/registration/src/main/java/org/signal/registration/util/KyberPreKeyRecordParceler.kt @@ -17,4 +17,4 @@ class KyberPreKeyRecordParceler : Parceler { override fun create(parcel: Parcel): KyberPreKeyRecord { return KyberPreKeyRecord(parcel.createByteArray()) } -} \ No newline at end of file +} diff --git a/feature/registration/src/main/java/org/signal/registration/util/MasterKeyParceler.kt b/feature/registration/src/main/java/org/signal/registration/util/MasterKeyParceler.kt index 8574e0d9ae..39483a5ccd 100644 --- a/feature/registration/src/main/java/org/signal/registration/util/MasterKeyParceler.kt +++ b/feature/registration/src/main/java/org/signal/registration/util/MasterKeyParceler.kt @@ -19,4 +19,3 @@ object MasterKeyParceler : Parceler { parcel.writeByteArray(this?.serialize()) } } - diff --git a/feature/registration/src/main/java/org/signal/registration/util/PNIParceler.kt b/feature/registration/src/main/java/org/signal/registration/util/PNIParceler.kt index a233574742..09a4f5cb5f 100644 --- a/feature/registration/src/main/java/org/signal/registration/util/PNIParceler.kt +++ b/feature/registration/src/main/java/org/signal/registration/util/PNIParceler.kt @@ -17,4 +17,4 @@ class PNIParceler : Parceler { override fun create(parcel: Parcel): ServiceId.PNI { return ServiceId.PNI.parseOrThrow(parcel.createByteArray()) } -} \ No newline at end of file +} diff --git a/feature/registration/src/main/java/org/signal/registration/util/SensitiveLog.kt b/feature/registration/src/main/java/org/signal/registration/util/SensitiveLog.kt index 714370b598..c537b368d0 100644 --- a/feature/registration/src/main/java/org/signal/registration/util/SensitiveLog.kt +++ b/feature/registration/src/main/java/org/signal/registration/util/SensitiveLog.kt @@ -42,4 +42,4 @@ object SensitiveLog : Log.Logger() { override fun flush() { this.logger.flush() } -} \ No newline at end of file +} diff --git a/feature/registration/src/main/java/org/signal/registration/util/SignedPreKeyRecordParceler.kt b/feature/registration/src/main/java/org/signal/registration/util/SignedPreKeyRecordParceler.kt index b5bcbd0060..81549d0b32 100644 --- a/feature/registration/src/main/java/org/signal/registration/util/SignedPreKeyRecordParceler.kt +++ b/feature/registration/src/main/java/org/signal/registration/util/SignedPreKeyRecordParceler.kt @@ -17,4 +17,4 @@ class SignedPreKeyRecordParceler : Parceler { override fun create(parcel: Parcel): SignedPreKeyRecord { return SignedPreKeyRecord(parcel.createByteArray()) } -} \ No newline at end of file +} 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 3203db44b0..098601ce8d 100644 --- a/feature/registration/src/test/java/org/signal/registration/RegistrationNavigationTest.kt +++ b/feature/registration/src/test/java/org/signal/registration/RegistrationNavigationTest.kt @@ -7,11 +7,11 @@ 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.performClick import androidx.lifecycle.SavedStateHandle +import androidx.test.core.app.ApplicationProvider import com.google.accompanist.permissions.ExperimentalPermissionsApi import io.mockk.mockk import org.junit.Before 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 3d2b2d3d9c..ed460d06af 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,11 +7,11 @@ 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 import androidx.compose.ui.test.performClick +import androidx.test.core.app.ApplicationProvider import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith 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 8b3b33354d..de618598bf 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,12 +7,12 @@ 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 import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTextInput +import androidx.test.core.app.ApplicationProvider import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith 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 f38d523455..e04524f11d 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,10 +7,10 @@ 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.performClick +import androidx.test.core.app.ApplicationProvider import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith diff --git a/lib/glide/src/main/java/org/signal/glide/SignalGlideDependencies.kt b/lib/glide/src/main/java/org/signal/glide/SignalGlideDependencies.kt index 8b5abe4f56..4926597b1f 100644 --- a/lib/glide/src/main/java/org/signal/glide/SignalGlideDependencies.kt +++ b/lib/glide/src/main/java/org/signal/glide/SignalGlideDependencies.kt @@ -15,26 +15,26 @@ import org.signal.glide.common.io.InputStreamFactory object SignalGlideDependencies { private lateinit var _application: Application private lateinit var _provider: Provider - + @Synchronized fun init(application: Application, provider: Provider) { if (this::_application.isInitialized || this::_provider.isInitialized) { return } - + _application = application _provider = provider } - + val application: Application get() = _application fun getUriInputStreamFactory(uri: Uri): InputStreamFactory = _provider.getUriInputStreamFactory(uri) - + interface Provider { /** * A factory which can create an [java.io.InputStream] from a given [Uri] */ fun getUriInputStreamFactory(uri: Uri): InputStreamFactory } -} \ No newline at end of file +} diff --git a/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeActionsBuilderChangeSetModifier.kt b/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeActionsBuilderChangeSetModifier.kt index 20b8665095..eda0d5ec2f 100644 --- a/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeActionsBuilderChangeSetModifier.kt +++ b/lib/libsignal-service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeActionsBuilderChangeSetModifier.kt @@ -48,7 +48,7 @@ internal class GroupChangeActionsBuilderChangeSetModifier(private val result: Gr } override fun clearModifyDisappearingMessagesTimer() { - result.modifyDisappearingMessageTimer= null + result.modifyDisappearingMessageTimer = null } override fun clearModifyAttributesAccess() {