diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 5cd407d..ec19d7a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -23,6 +23,11 @@ permissions: jobs: build: runs-on: ubuntu-latest + permissions: + contents: write + packages: write + issues: write + deployments: write steps: - name: Checkout repository @@ -70,6 +75,12 @@ jobs: release: needs: build runs-on: ubuntu-latest + permissions: + contents: write + packages: write + issues: write + deployments: write + steps: - name: Checkout repository uses: actions/checkout@v2 @@ -120,7 +131,9 @@ jobs: - name: Get commit title id: get_commit_title - run: echo "COMMIT_TITLE=$(git log -1 --pretty=%s | tr -d '\n' | tr -d '\r')" >> $GITHUB_ENV + run: | + COMMIT_TITLE=$(git log -1 --pretty=%s) + echo "COMMIT_TITLE=$(echo $COMMIT_TITLE | tr -d '\n' | tr -d '\r')" >> $GITHUB_ENV shell: bash - name: Create GitHub Release diff --git a/app/src/main/java/com/singa/asl/MainActivityViewModel.kt b/app/src/main/java/com/singa/asl/MainActivityViewModel.kt index 298a397..3c0ee77 100644 --- a/app/src/main/java/com/singa/asl/MainActivityViewModel.kt +++ b/app/src/main/java/com/singa/asl/MainActivityViewModel.kt @@ -85,7 +85,7 @@ class MainActivityViewModel( fun logout( - navigateToWelcome: () -> Unit + navigateToLogin: () -> Unit ) { viewModelScope.launch { singaUseCase.logout().collect { @@ -96,7 +96,7 @@ class MainActivityViewModel( showAlert("Success", "Logout success") _logoutIsLoading.value = false _authUser.value = Resource.Empty() - navigateToWelcome() + navigateToLogin() } is Resource.Empty -> { diff --git a/app/src/main/java/com/singa/asl/ui/MainApp.kt b/app/src/main/java/com/singa/asl/ui/MainApp.kt index b9b5a0e..fc8d81a 100644 --- a/app/src/main/java/com/singa/asl/ui/MainApp.kt +++ b/app/src/main/java/com/singa/asl/ui/MainApp.kt @@ -63,7 +63,7 @@ fun MainApp( getAuthUser: () -> Unit, isSecondLaunch: Boolean, onLogouts: ( - navigateToWelcome: () -> Unit, + navigateToLogin: () -> Unit, ) -> Unit, logoutIsLoading: Boolean, onUpdateProfile: ( @@ -154,7 +154,7 @@ fun MainApp( }, resetForm = viewModel::resetForm, navigateBack = { - navController.popBackStack() + navController.navigateUp() } ) } @@ -361,7 +361,7 @@ fun MainApp( }, onConfirmLogout = { onLogouts { - navController.navigate(Screen.Welcome.route) + navController.navigate(Screen.Login.route) } }, onNavigateToDetail = { @@ -390,7 +390,7 @@ fun MainApp( isSignUser = isSignUser, onChangeIsSignUser = viewModel::onChangeSignUser, navigateBack = { - navController.popBackStack() + navController.navigateUp() }, onUpdate = { uri, setLoadingState -> onUpdateProfile( @@ -421,7 +421,7 @@ fun MainApp( isConfirmPasswordError = viewModel.validationState.confirmPasswordError != null, confirmPasswordError = viewModel.validationState.confirmPasswordError ?: "", navigateBack = { - navController.popBackStack() + navController.navigateUp() }, resetForm = viewModel::clearPasswordAndConfirmPassword, onUpdatePassword = { setLoadingState -> @@ -460,7 +460,7 @@ fun MainApp( saveRefreshToken = saveRefreshToken, getAuthUser = getAuthUser, navigateBack = { - navController.popBackStack() + navController.navigateUp() } ) } @@ -518,7 +518,7 @@ fun MainApp( title = title, showDialog = showDialog, onNavigateBack = { - navController.popBackStack() + navController.navigateUp() } ) } @@ -532,7 +532,7 @@ fun MainApp( id = id.toInt(), showDialog = showDialog, onNavigateBack = { - navController.popBackStack() + navController.navigateUp() } ) } diff --git a/app/src/main/java/com/singa/asl/ui/components/ModalNavigation.kt b/app/src/main/java/com/singa/asl/ui/components/ModalNavigation.kt index b0b4be7..fe84fe2 100644 --- a/app/src/main/java/com/singa/asl/ui/components/ModalNavigation.kt +++ b/app/src/main/java/com/singa/asl/ui/components/ModalNavigation.kt @@ -54,7 +54,6 @@ fun ModalNavigation( viewModelConversation: ConversationViewModel = koinViewModel(), viewModelStatic: HistoryScreenViewModel = koinViewModel() ) { - val storagePermissionState = rememberPermissionState(Manifest.permission.READ_EXTERNAL_STORAGE) val cameraPermissionState = rememberPermissionState(Manifest.permission.CAMERA) val cameraPermissionLauncher = rememberLauncherForActivityResult( @@ -67,11 +66,11 @@ fun ModalNavigation( } } - val readStoragePermissionLauncher = rememberLauncherForActivityResult( + val cameraPermissionLauncherWithoutRedirect = rememberLauncherForActivityResult( ActivityResultContracts.RequestPermission() ) { if (it) { - navigateToRealtimeCamera() + Toast.makeText(context, "Permission granted", Toast.LENGTH_SHORT).show() } else { Toast.makeText(context, "Permission denied", Toast.LENGTH_SHORT).show() } @@ -91,8 +90,24 @@ fun ModalNavigation( ) { Button( onClick = { + when { + cameraPermissionState.hasPermission -> { + staticDialog = true + } + + cameraPermissionState.shouldShowRationale -> { + Toast.makeText( + context, + "Permission denied", + Toast.LENGTH_SHORT + ).show() + } - staticDialog = true + else -> { + cameraPermissionLauncherWithoutRedirect.launch(Manifest.permission.CAMERA) + staticDialog = true + } + } }, shape = RoundedCornerShape(20), colors = ButtonDefaults.buttonColors( @@ -118,7 +133,24 @@ fun ModalNavigation( Spacer(modifier = Modifier.height(12.dp)) OutlinedButton( onClick = { - conversationDialog = true + when { + cameraPermissionState.hasPermission -> { + conversationDialog = true + } + + cameraPermissionState.shouldShowRationale -> { + Toast.makeText( + context, + "Permission denied", + Toast.LENGTH_SHORT + ).show() + } + + else -> { + cameraPermissionLauncherWithoutRedirect.launch(Manifest.permission.CAMERA) + conversationDialog = true + } + } }, shape = RoundedCornerShape(20), colors = ButtonDefaults.outlinedButtonColors( @@ -160,21 +192,8 @@ fun ModalNavigation( ).show() } - storagePermissionState.hasPermission -> { - navigateToRealtimeCamera() - } - - storagePermissionState.shouldShowRationale -> { - Toast.makeText( - context, - "Permission denied", - Toast.LENGTH_SHORT - ).show() - } - else -> { cameraPermissionLauncher.launch(Manifest.permission.CAMERA) - readStoragePermissionLauncher.launch(Manifest.permission.READ_EXTERNAL_STORAGE) } } }, diff --git a/app/src/main/java/com/singa/asl/ui/components/OnBoardingItems.kt b/app/src/main/java/com/singa/asl/ui/components/OnBoardingItems.kt index 9339367..f5fb9f1 100644 --- a/app/src/main/java/com/singa/asl/ui/components/OnBoardingItems.kt +++ b/app/src/main/java/com/singa/asl/ui/components/OnBoardingItems.kt @@ -14,6 +14,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -84,7 +85,7 @@ fun OnBoardingItem( ), style = MaterialTheme.typography.headlineMedium, // fontSize = 24.sp, - color = MaterialTheme.colorScheme.onBackground, + color = Color.Black, fontWeight = FontWeight.Bold, textAlign = TextAlign.Center, letterSpacing = 1.sp, @@ -98,7 +99,7 @@ fun OnBoardingItem( id = items.description ), style = MaterialTheme.typography.bodyLarge, - color = MaterialTheme.colorScheme.onBackground, + color = Color.Black, fontWeight = FontWeight.Light, textAlign = TextAlign.Center, modifier = Modifier.padding(10.dp), diff --git a/app/src/main/java/com/singa/asl/ui/screen/history_camera/HistoryCameraScreen.kt b/app/src/main/java/com/singa/asl/ui/screen/history_camera/HistoryCameraScreen.kt index 3d9b826..ae26086 100644 --- a/app/src/main/java/com/singa/asl/ui/screen/history_camera/HistoryCameraScreen.kt +++ b/app/src/main/java/com/singa/asl/ui/screen/history_camera/HistoryCameraScreen.kt @@ -1,6 +1,7 @@ package com.singa.asl.ui.screen.history_camera import android.Manifest +import android.annotation.SuppressLint import android.content.Context import android.content.pm.PackageManager import android.os.Environment @@ -53,6 +54,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.app.ActivityCompat import androidx.lifecycle.LifecycleOwner +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.rememberPermissionState import com.singa.asl.R import com.singa.asl.ui.screen.history.HistoryScreenViewModel import com.singa.asl.ui.theme.Color1 @@ -93,6 +96,7 @@ fun HistoryCameraScreen( ) } +@OptIn(ExperimentalPermissionsApi::class) @Composable fun HistoryCameraContent( modifier: Modifier = Modifier, @@ -116,16 +120,7 @@ fun HistoryCameraContent( } } - - val recordAudioPermissionLauncher = rememberLauncherForActivityResult( - ActivityResultContracts.RequestPermission() - ) { - if (it) { - return@rememberLauncherForActivityResult - } else { - Toast.makeText(context, "Permission denied", Toast.LENGTH_SHORT).show() - } - } + val recordPermissionState = rememberPermissionState(Manifest.permission.RECORD_AUDIO) var recording by remember { mutableStateOf(null) @@ -145,6 +140,7 @@ fun HistoryCameraContent( var isProcessingVideo by remember { mutableStateOf(false) } var processingVideoProgress by remember { mutableIntStateOf(0) } + fun recordVideo() { val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(Date()) val outputFile = @@ -154,16 +150,7 @@ fun HistoryCameraContent( "video_${timeStamp}_processed.mp4" ) - - if (ActivityCompat.checkSelfPermission( - context, - Manifest.permission.RECORD_AUDIO - ) != PackageManager.PERMISSION_GRANTED - ) { - recordAudioPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO) - return - } - + @SuppressLint("MissingPermission") recording = cameraController.startRecording( FileOutputOptions.Builder(outputFile).build(), AudioConfig.create(true), @@ -204,6 +191,19 @@ fun HistoryCameraContent( } } + val recordAudioPermissionLauncher = rememberLauncherForActivityResult( + ActivityResultContracts.RequestPermission() + ) { + if (it) { + Toast.makeText(context, "Permission granted", Toast.LENGTH_SHORT).show() + isRecording = true + recordVideo() + } else { + Toast.makeText(context, "Permission denied", Toast.LENGTH_SHORT).show() + return@rememberLauncherForActivityResult + } + } + LaunchedEffect(isFrontCamera) { if (isFrontCamera) { cameraController.bindToLifecycle(lifecycleOwner) @@ -339,8 +339,22 @@ fun HistoryCameraContent( modifier = Modifier .padding(10.dp), onClick = { - isRecording = true - recordVideo() + when { + recordPermissionState.hasPermission -> { + isRecording = true + recordVideo() + } + recordPermissionState.shouldShowRationale -> { + Toast.makeText( + context, + "Permission denied", + Toast.LENGTH_SHORT + ).show() + } + else -> { + recordAudioPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO) + } + } }, colors = IconButtonDefaults.iconButtonColors( contentColor = Color.White diff --git a/app/src/main/java/com/singa/asl/ui/screen/message_camera/MessageCameraScreen.kt b/app/src/main/java/com/singa/asl/ui/screen/message_camera/MessageCameraScreen.kt index 46c15f0..18e0616 100644 --- a/app/src/main/java/com/singa/asl/ui/screen/message_camera/MessageCameraScreen.kt +++ b/app/src/main/java/com/singa/asl/ui/screen/message_camera/MessageCameraScreen.kt @@ -1,6 +1,7 @@ package com.singa.asl.ui.screen.message_camera import android.Manifest +import android.annotation.SuppressLint import android.content.Context import android.content.pm.PackageManager import android.os.Environment @@ -53,6 +54,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView import androidx.core.app.ActivityCompat import androidx.lifecycle.LifecycleOwner +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.rememberPermissionState import com.singa.asl.R import com.singa.asl.ui.theme.Color1 import com.singa.asl.ui.theme.Color2 @@ -91,6 +94,7 @@ fun MessageCameraScreen( ) } +@OptIn(ExperimentalPermissionsApi::class) @Composable fun MessageCameraContent( modifier: Modifier = Modifier, @@ -118,16 +122,7 @@ fun MessageCameraContent( } } - - val recordAudioPermissionLauncher = rememberLauncherForActivityResult( - ActivityResultContracts.RequestPermission() - ) { - if (it) { - return@rememberLauncherForActivityResult - } else { - Toast.makeText(context, "Permission denied", Toast.LENGTH_SHORT).show() - } - } + val recordPermissionState = rememberPermissionState(Manifest.permission.RECORD_AUDIO) var recording by remember { mutableStateOf(null) @@ -147,6 +142,7 @@ fun MessageCameraContent( var isProcessingVideo by remember { mutableStateOf(false) } var processingVideoProgress by remember { mutableIntStateOf(0) } + fun recordVideo() { val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US).format(Date()) val outputFile = @@ -157,24 +153,7 @@ fun MessageCameraContent( ) - if (ActivityCompat.checkSelfPermission( - context, - Manifest.permission.RECORD_AUDIO - ) != PackageManager.PERMISSION_GRANTED - ) { - recordAudioPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO) - return - } - -// val multipartBody = outputFile.let { it -> -// val contentType = "video/*".toMediaTypeOrNull() -// ProgressFileUpload(it, contentType) { progress -> -// uploadProgress = progress -// }.let { -// MultipartBody.Part.createFormData("file", outputFile.name, it) -// } -// } - + @SuppressLint("MissingPermission") recording = cameraController.startRecording( FileOutputOptions.Builder(outputFile).build(), AudioConfig.create(true), @@ -218,6 +197,19 @@ fun MessageCameraContent( } } + val recordAudioPermissionLauncher = rememberLauncherForActivityResult( + ActivityResultContracts.RequestPermission() + ) { + if (it) { + Toast.makeText(context, "Permission granted", Toast.LENGTH_SHORT).show() + isRecording = true + recordVideo() + } else { + Toast.makeText(context, "Permission denied", Toast.LENGTH_SHORT).show() + return@rememberLauncherForActivityResult + } + } + LaunchedEffect(isFrontCamera) { if (isFrontCamera) { cameraController.bindToLifecycle(lifecycleOwner) @@ -353,8 +345,24 @@ fun MessageCameraContent( modifier = Modifier .padding(10.dp), onClick = { - isRecording = true - recordVideo() + when { + recordPermissionState.hasPermission -> { + isRecording = true + recordVideo() + } + + recordPermissionState.shouldShowRationale -> { + Toast.makeText( + context, + "Permission denied", + Toast.LENGTH_SHORT + ).show() + } + + else -> { + recordAudioPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO) + } + } }, colors = IconButtonDefaults.iconButtonColors( contentColor = Color.White diff --git a/app/src/main/java/com/singa/asl/ui/screen/realtime_camera/RealtimeCameraScreen.kt b/app/src/main/java/com/singa/asl/ui/screen/realtime_camera/RealtimeCameraScreen.kt index 5302fec..e58bb88 100644 --- a/app/src/main/java/com/singa/asl/ui/screen/realtime_camera/RealtimeCameraScreen.kt +++ b/app/src/main/java/com/singa/asl/ui/screen/realtime_camera/RealtimeCameraScreen.kt @@ -23,16 +23,11 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.DropdownMenuItem -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.ExposedDropdownMenuBox -import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.material3.TextField import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue @@ -154,7 +149,7 @@ fun RealtimeCameraContent( val rightHandLandmarks = mutableListOf() // Pad left and right hand landmarks to 21 * 3 = 63 values each, if detected - if (handResults != null && handResults.isNotEmpty()) { + if (!handResults.isNullOrEmpty()) { for (result in handResults) { for (landmarkList in result.landmarks) { for (landmark in landmarkList) { diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..345888d --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000..c3b839d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index c209e78..0000000 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/app/src/main/res/mipmap-hdpi/ic_launcher_background.png new file mode 100644 index 0000000..2d07511 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_background.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..7621402 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..7621402 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000..74d4733 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp deleted file mode 100644 index 4f0f1d6..0000000 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/app/src/main/res/mipmap-mdpi/ic_launcher_background.png new file mode 100644 index 0000000..09b4170 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_background.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..85eef8f Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..85eef8f Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..e7dc7cc Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 948a307..0000000 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png new file mode 100644 index 0000000..ea00baa Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..ef4f3fa Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..ef4f3fa Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000..3328d6c Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 28d4b77..0000000 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png new file mode 100644 index 0000000..adcd3c2 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..ddcca34 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..ddcca34 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000..5a87e38 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index aa7d642..0000000 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png new file mode 100644 index 0000000..08eb24e Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000..3f3cdb2 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png new file mode 100644 index 0000000..3f3cdb2 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png differ