diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..bd4076d Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/accidentalproductions/tetristats/ui/history/HistoryFragment.kt b/app/src/main/java/com/accidentalproductions/tetristats/ui/history/HistoryFragment.kt index 0533a50..174e582 100644 --- a/app/src/main/java/com/accidentalproductions/tetristats/ui/history/HistoryFragment.kt +++ b/app/src/main/java/com/accidentalproductions/tetristats/ui/history/HistoryFragment.kt @@ -4,6 +4,10 @@ import android.Manifest import android.app.Activity import android.content.Intent import android.content.pm.PackageManager +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.graphics.drawable.ColorDrawable import android.net.Uri import android.os.Build import android.os.Bundle @@ -17,11 +21,15 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.content.FileProvider +import androidx.core.graphics.drawable.DrawableCompat import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.ItemTouchHelper +import androidx.recyclerview.widget.RecyclerView import com.accidentalproductions.tetristats.databinding.FragmentHistoryBinding import com.google.android.material.dialog.MaterialAlertDialogBuilder +import com.google.android.material.snackbar.Snackbar import java.io.File import java.text.SimpleDateFormat import java.util.Date @@ -93,6 +101,8 @@ class HistoryFragment : Fragment(), ScoreAdapter.MediaAttachmentListener { observeScores() observeExportResult() observeMediaSaveResult() + observeDeleteResult() + observeMediaRemoveResult() } private fun setupRecyclerView() { @@ -100,6 +110,9 @@ class HistoryFragment : Fragment(), ScoreAdapter.MediaAttachmentListener { binding.recyclerViewHistory.apply { adapter = scoreAdapter layoutManager = LinearLayoutManager(context) + + // Add swipe to delete functionality + setupSwipeToDelete(this) } } @@ -133,15 +146,55 @@ class HistoryFragment : Fragment(), ScoreAdapter.MediaAttachmentListener { when (result) { is MediaSaveResult.Success -> { Toast.makeText(context, "Media attached successfully", Toast.LENGTH_SHORT).show() + viewModel.clearMediaSaveResult() } is MediaSaveResult.Error -> { Toast.makeText(context, "Failed to attach media: ${result.message}", Toast.LENGTH_LONG).show() + viewModel.clearMediaSaveResult() } null -> { /* Ignore initial state */ } } } } + private fun observeDeleteResult() { + viewModel.deleteResult.observe(viewLifecycleOwner) { result -> + result?.let { + when (result) { + is DeleteResult.Success -> { + showUndoSnackbar(result.message) + viewModel.clearDeleteResult() + } + is DeleteResult.UndoSuccess -> { + Toast.makeText(context, result.message, Toast.LENGTH_SHORT).show() + viewModel.clearDeleteResult() + } + is DeleteResult.Error -> { + Toast.makeText(context, result.message, Toast.LENGTH_LONG).show() + viewModel.clearDeleteResult() + } + } + } + } + } + + private fun observeMediaRemoveResult() { + viewModel.mediaRemoveResult.observe(viewLifecycleOwner) { result -> + result?.let { + when (result) { + is MediaRemoveResult.Success -> { + Toast.makeText(context, "Media removed", Toast.LENGTH_SHORT).show() + viewModel.clearMediaRemoveResult() + } + is MediaRemoveResult.Error -> { + Toast.makeText(context, "Failed to remove media: ${result.message}", Toast.LENGTH_LONG).show() + viewModel.clearMediaRemoveResult() + } + } + } + } + } + private fun shareExportedFile(uri: Uri) { val shareIntent = Intent(Intent.ACTION_SEND).apply { type = "text/csv" @@ -153,6 +206,16 @@ class HistoryFragment : Fragment(), ScoreAdapter.MediaAttachmentListener { startActivity(chooserIntent) } + private fun showUndoSnackbar(message: String) { + view?.let { view -> + val snackbar = Snackbar.make(view, message, Snackbar.LENGTH_LONG) + snackbar.setAction("UNDO") { + viewModel.undoDelete() + } + snackbar.show() + } + } + // ScoreAdapter.MediaAttachmentListener implementation override fun onAddMediaClicked(scoreId: Long) { currentScoreId = scoreId @@ -327,4 +390,101 @@ class HistoryFragment : Fragment(), ScoreAdapter.MediaAttachmentListener { super.onDestroyView() _binding = null } + + // New ScoreAdapter.MediaAttachmentListener methods + override fun onRemoveMediaClicked(scoreId: Long) { + // Confirm media removal with a dialog + MaterialAlertDialogBuilder(requireContext()) + .setTitle("Remove Media") + .setMessage("Are you sure you want to remove the attached media?") + .setPositiveButton("Remove") { _, _ -> + viewModel.removeMedia(scoreId) + } + .setNegativeButton("Cancel", null) + .show() + } + + private fun setupSwipeToDelete(recyclerView: RecyclerView) { + val swipeCallback = object : ItemTouchHelper.SimpleCallback( + 0, // No drag and drop + ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT // Swipe left or right + ) { + private val deleteIcon = ContextCompat.getDrawable(requireContext(), android.R.drawable.ic_menu_delete) + private val background = ColorDrawable(Color.parseColor("#FF5252")) // Red background + private val backgroundPaint = Paint().apply { color = Color.parseColor("#FF5252") } + private val textPaint = Paint().apply { + color = Color.WHITE + textSize = 40f + textAlign = Paint.Align.CENTER + } + + override fun onMove( + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + target: RecyclerView.ViewHolder + ): Boolean { + return false // We don't support moving items + } + + override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) { + val position = viewHolder.adapterPosition + val score = scoreAdapter.currentList[position] + // Delete the score + viewModel.deleteScore(score.id) + } + + override fun onChildDraw( + c: Canvas, + recyclerView: RecyclerView, + viewHolder: RecyclerView.ViewHolder, + dX: Float, + dY: Float, + actionState: Int, + isCurrentlyActive: Boolean + ) { + val itemView = viewHolder.itemView + val itemHeight = itemView.bottom - itemView.top + + // Draw background + if (dX > 0) { // Swiping to the right + background.setBounds(itemView.left, itemView.top, itemView.left + dX.toInt(), itemView.bottom) + } else { // Swiping to the left + background.setBounds(itemView.right + dX.toInt(), itemView.top, itemView.right, itemView.bottom) + } + background.draw(c) + + // Draw delete icon + deleteIcon?.let { + val iconMargin = (itemHeight - it.intrinsicHeight) / 2 + val iconTop = itemView.top + (itemHeight - it.intrinsicHeight) / 2 + val iconBottom = iconTop + it.intrinsicHeight + + if (dX > 0) { // Swiping to the right + val iconLeft = itemView.left + iconMargin + val iconRight = iconLeft + it.intrinsicWidth + it.setBounds(iconLeft, iconTop, iconRight, iconBottom) + } else { // Swiping to the left + val iconRight = itemView.right - iconMargin + val iconLeft = iconRight - it.intrinsicWidth + it.setBounds(iconLeft, iconTop, iconRight, iconBottom) + } + DrawableCompat.setTint(it, Color.WHITE) + it.draw(c) + + // Draw "Delete" text + val text = "Delete" + if (dX > 0) { // Swiping to the right + c.drawText(text, itemView.left + 120f, itemView.top + itemHeight / 2f + 15, textPaint) + } else { // Swiping to the left + c.drawText(text, itemView.right - 120f, itemView.top + itemHeight / 2f + 15, textPaint) + } + } + + super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive) + } + } + + // Attach the swipe handler to the RecyclerView + ItemTouchHelper(swipeCallback).attachToRecyclerView(recyclerView) + } } \ No newline at end of file diff --git a/app/src/main/java/com/accidentalproductions/tetristats/ui/history/HistoryViewModel.kt b/app/src/main/java/com/accidentalproductions/tetristats/ui/history/HistoryViewModel.kt index 535777d..74de61b 100644 --- a/app/src/main/java/com/accidentalproductions/tetristats/ui/history/HistoryViewModel.kt +++ b/app/src/main/java/com/accidentalproductions/tetristats/ui/history/HistoryViewModel.kt @@ -43,6 +43,17 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application) private val _mediaSaveResult = MutableLiveData() val mediaSaveResult: LiveData = _mediaSaveResult + // For delete and undo functionality + private val _deleteResult = MutableLiveData() + val deleteResult: LiveData = _deleteResult + + // Keep track of recently deleted score for undo + private var lastDeletedScore: Score? = null + + // For media removal + private val _mediaRemoveResult = MutableLiveData() + val mediaRemoveResult: LiveData = _mediaRemoveResult + fun exportScoresToCsv() { viewModelScope.launch { try { @@ -195,6 +206,97 @@ class HistoryViewModel(application: Application) : AndroidViewModel(application) ) } } + + fun deleteScore(scoreId: Long) { + viewModelScope.launch { + try { + val score = getScoreById(scoreId) + if (score != null) { + // Store for potential undo + lastDeletedScore = score + + // Delete from database + scoreDao.delete(score) + + _deleteResult.postValue(DeleteResult.Success("Score deleted. Tap UNDO to restore.")) + } else { + _deleteResult.postValue(DeleteResult.Error("Score not found")) + } + } catch (e: Exception) { + _deleteResult.postValue(DeleteResult.Error("Delete failed: ${e.message}")) + } + } + } + + fun undoDelete() { + viewModelScope.launch { + try { + lastDeletedScore?.let { score -> + // Reinsert the score + scoreDao.insert(score) + + _deleteResult.postValue(DeleteResult.UndoSuccess("Score restored")) + + // Clear the stored score + lastDeletedScore = null + } ?: run { + _deleteResult.postValue(DeleteResult.Error("No score to restore")) + } + } catch (e: Exception) { + _deleteResult.postValue(DeleteResult.Error("Restore failed: ${e.message}")) + } + } + } + + fun removeMedia(scoreId: Long) { + viewModelScope.launch { + try { + val score = getScoreById(scoreId) + if (score != null && score.mediaUri != null) { + // Store media URI for potential cleanup + val mediaUri = score.mediaUri + + // Update score with null media + val updatedScore = score.copy(mediaUri = null) + updateScore(updatedScore) + + // Try to delete the physical file if it's in our app storage + if (mediaUri.startsWith("content://") && + mediaUri.contains(getApplication().packageName)) { + try { + val uriObj = Uri.parse(mediaUri) + val context = getApplication() + val contentResolver = context.contentResolver + contentResolver.delete(uriObj, null, null) + } catch (e: Exception) { + // Just log, don't fail the whole operation + e.printStackTrace() + } + } + + _mediaRemoveResult.postValue(MediaRemoveResult.Success) + } else { + _mediaRemoveResult.postValue(MediaRemoveResult.Error("Score not found or no media attached")) + } + } catch (e: Exception) { + e.printStackTrace() + _mediaRemoveResult.postValue(MediaRemoveResult.Error(e.message ?: "Unknown error")) + } + } + } + + // Methods to clear LiveData after consumption + fun clearDeleteResult() { + _deleteResult.value = null + } + + fun clearMediaSaveResult() { + _mediaSaveResult.value = null + } + + fun clearMediaRemoveResult() { + _mediaRemoveResult.value = null + } } sealed class ExportResult { @@ -207,6 +309,17 @@ sealed class MediaSaveResult { data class Error(val message: String) : MediaSaveResult() } +sealed class DeleteResult { + data class Success(val message: String) : DeleteResult() + data class UndoSuccess(val message: String) : DeleteResult() + data class Error(val message: String) : DeleteResult() +} + +sealed class MediaRemoveResult { + object Success : MediaRemoveResult() + data class Error(val message: String) : MediaRemoveResult() +} + class HistoryViewModelFactory(private val application: Application) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(HistoryViewModel::class.java)) { diff --git a/app/src/main/java/com/accidentalproductions/tetristats/ui/history/ScoreAdapter.kt b/app/src/main/java/com/accidentalproductions/tetristats/ui/history/ScoreAdapter.kt index 7ebac31..f63b8a4 100644 --- a/app/src/main/java/com/accidentalproductions/tetristats/ui/history/ScoreAdapter.kt +++ b/app/src/main/java/com/accidentalproductions/tetristats/ui/history/ScoreAdapter.kt @@ -17,6 +17,7 @@ import java.text.NumberFormat import java.text.SimpleDateFormat import java.util.Date import java.util.Locale +import com.google.android.material.dialog.MaterialAlertDialogBuilder class ScoreAdapter(private val mediaListener: MediaAttachmentListener? = null) : ListAdapter(ScoreDiffCallback()) { @@ -24,6 +25,7 @@ class ScoreAdapter(private val mediaListener: MediaAttachmentListener? = null) : interface MediaAttachmentListener { fun onAddMediaClicked(scoreId: Long) fun onMediaClicked(mediaUri: Uri, isVideo: Boolean) + fun onRemoveMediaClicked(scoreId: Long) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ScoreViewHolder { @@ -79,7 +81,7 @@ class ScoreAdapter(private val mediaListener: MediaAttachmentListener? = null) : binding.layoutLinesCleared.visibility = View.GONE } - // Handle media display + // Handle media display and options setupMedia(score) } @@ -88,6 +90,7 @@ class ScoreAdapter(private val mediaListener: MediaAttachmentListener? = null) : // We have media to display binding.cardViewMedia.visibility = View.VISIBLE binding.buttonAddMedia.visibility = View.GONE + binding.buttonRemoveMedia.visibility = View.GONE val uri = score.mediaUri.toUri() val isVideo = score.mediaUri.endsWith(".mp4", ignoreCase = true) || @@ -111,6 +114,12 @@ class ScoreAdapter(private val mediaListener: MediaAttachmentListener? = null) : mediaListener?.onMediaClicked(uri, true) } + // Add long press listener for media deletion + binding.videoContainer.setOnLongClickListener { + showDeleteMediaDialog(score.id) + true + } + retriever.release() } catch (e: Exception) { e.printStackTrace() @@ -128,6 +137,13 @@ class ScoreAdapter(private val mediaListener: MediaAttachmentListener? = null) : binding.imageViewMedia.setOnClickListener { mediaListener?.onMediaClicked(uri, false) } + + // Add long press listener for media deletion + binding.imageViewMedia.setOnLongClickListener { + showDeleteMediaDialog(score.id) + true + } + } catch (e: Exception) { e.printStackTrace() binding.cardViewMedia.visibility = View.GONE @@ -138,6 +154,7 @@ class ScoreAdapter(private val mediaListener: MediaAttachmentListener? = null) : // No media, show the add button binding.cardViewMedia.visibility = View.GONE binding.buttonAddMedia.visibility = View.VISIBLE + binding.buttonRemoveMedia.visibility = View.GONE // Set click listener to add media binding.buttonAddMedia.setOnClickListener { @@ -145,6 +162,19 @@ class ScoreAdapter(private val mediaListener: MediaAttachmentListener? = null) : } } } + + private fun showDeleteMediaDialog(scoreId: Long) { + val context = binding.root.context + // Create and show deletion popup + MaterialAlertDialogBuilder(context) + .setTitle("Remove Media") + .setMessage("Would you like to remove this media?") + .setPositiveButton("Remove") { _, _ -> + mediaListener?.onRemoveMediaClicked(scoreId) + } + .setNegativeButton("Cancel", null) + .show() + } } } diff --git a/app/src/main/res/drawable/gemini_generated_image_bz7213bz7213bz72.png b/app/src/main/res/drawable/gemini_generated_image_bz7213bz7213bz72.png new file mode 100644 index 0000000..6993398 Binary files /dev/null and b/app/src/main/res/drawable/gemini_generated_image_bz7213bz7213bz72.png differ diff --git a/app/src/main/res/drawable/gemini_generated_image_bz7213bz7213bz72__1_.png b/app/src/main/res/drawable/gemini_generated_image_bz7213bz7213bz72__1_.png new file mode 100644 index 0000000..ea741c5 Binary files /dev/null and b/app/src/main/res/drawable/gemini_generated_image_bz7213bz7213bz72__1_.png differ diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9..ca3826a 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,170 +1,74 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + xmlns:android="http://schemas.android.com/apk/res/android"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 72603f7..2df82e4 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,44 +1,17 @@ - + + android:fillColor="#7DD3DB" + android:pathData="M36,36h36v12h-12v24h-12v-24h-12z" /> - + - - - - - - - - - - - \ No newline at end of file + android:fillColor="#263238" + android:pathData="M36,36v12h12v24h12v-24h12v-12h-36zM37,37h34v10h-12v24h-10v-24h-12v-10z" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/item_score.xml b/app/src/main/res/layout/item_score.xml index 0f9074c..2b887ef 100644 --- a/app/src/main/res/layout/item_score.xml +++ b/app/src/main/res/layout/item_score.xml @@ -118,13 +118,15 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" - android:contentDescription="Score media" /> + android:contentDescription="Score media" + android:foreground="?attr/selectableItemBackground" /> + + + - - + + android:orientation="horizontal"> + + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index bb831bd..0000000 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index bb831bd..0000000 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/app/src/main/res/mipmap-anydpi/ic_launcher.xml deleted file mode 100644 index 6f3b755..0000000 --- a/app/src/main/res/mipmap-anydpi/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml deleted file mode 100644 index 6f3b755..0000000 --- a/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index c209e78..4261593 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.webp and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..53aef49 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp index b2dfe3d..728d0c7 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp index 4f0f1d6..0df5e2d 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.webp and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..b52251d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 62b611d..f2a4f1b 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index 948a307..01e32a5 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..b323f70 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index 1b9a695..7bcdd67 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp index 28d4b77..0f21b2c 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..7d67ba4 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp index 9287f50..a250e99 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index aa7d642..69040a5 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..b7b0f88 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 9126ae3..5ca595b 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 43ce940..9ed25b0 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -19,4 +19,5 @@ #48AAAA #000000 #FFFFFF + #F5C3C2 \ No newline at end of file diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml deleted file mode 100644 index b70557c..0000000 --- a/app/src/main/res/values/ic_launcher_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - @color/tetris_pink - \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 4985408..dac187a 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -19,7 +19,7 @@ @color/tetris_pink - @drawable/ic_launcher_foreground + @mipmap/ic_launcher @color/tetris_pink