Skip to content

Commit

Permalink
update: 길게 눌러 삭제 기능 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
easyhz committed Apr 9, 2024
1 parent 4f2a8ef commit a11a716
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 1 deletion.
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.VIBRATE"/>

<application
android:name=".helper.Picly"
Expand Down
18 changes: 18 additions & 0 deletions app/src/main/java/com/easyhz/picly/util/Common.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package com.easyhz.picly.util

import android.content.Context
import android.content.Context.VIBRATOR_SERVICE
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.Build
import android.os.Environment
import android.os.VibrationEffect
import android.os.Vibrator
import android.os.VibratorManager
import androidx.core.content.ContextCompat
import com.easyhz.picly.R
import com.facebook.shimmer.Shimmer
Expand Down Expand Up @@ -106,3 +111,16 @@ fun getDefaultImage(context: Context): File? = try {
e.printStackTrace()
null
}

fun haptic(context: Context, durationMillis: Long) {
val vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val vibratorManager =
context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager
vibratorManager.defaultVibrator
} else {
@Suppress("DEPRECATION")
context.getSystemService(VIBRATOR_SERVICE) as Vibrator
}

vibrator.vibrate(VibrationEffect.createOneShot(durationMillis, 30))
}
9 changes: 9 additions & 0 deletions app/src/main/java/com/easyhz/picly/view/album/AlbumAdapter.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.easyhz.picly.view.album

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Filter
import android.widget.Filterable
Expand All @@ -13,6 +14,7 @@ import com.easyhz.picly.domain.model.album.AlbumItem
class AlbumAdapter(
private val noResult: (Boolean , String) -> Unit,
private val onClickLinkButton: (AlbumItem) -> Unit,
private val onLongClick: (AlbumItem, View) -> Unit,
private val onClickListener: (AlbumItem) -> Unit,
):RecyclerView.Adapter<AlbumAdapter.AlbumViewHolder>(), Filterable {
var originalList: List<AlbumItem> = listOf()
Expand Down Expand Up @@ -46,6 +48,13 @@ class AlbumAdapter(
albumCardView.setOnClickListener {
onClickListener(currentItem)
}
albumCardView.setOnLongClickListener {
fade.apply {
visibility = View.VISIBLE
onLongClick(currentItem, this)
}
true
}
linkButton.setOnClickListener {
onClickLinkButton(currentItem)
}
Expand Down
46 changes: 45 additions & 1 deletion app/src/main/java/com/easyhz/picly/view/album/AlbumFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,13 @@ import androidx.recyclerview.widget.GridLayoutManager
import com.easyhz.picly.R
import com.easyhz.picly.databinding.FragmentAlbumBinding
import com.easyhz.picly.domain.model.album.AlbumItem
import com.easyhz.picly.domain.usecase.album.DeleteAlbumUseCase
import com.easyhz.picly.util.BlueSnackBar
import com.easyhz.picly.util.PICLY
import com.easyhz.picly.util.haptic
import com.easyhz.picly.util.showAlertDialog
import com.easyhz.picly.util.toPICLY
import com.easyhz.picly.view.dialog.LoadingDialog
import com.easyhz.picly.view.navigation.NavControllerManager
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CoroutineScope
Expand All @@ -31,6 +35,7 @@ class AlbumFragment: Fragment() {
private lateinit var albumAdapter: AlbumAdapter
private lateinit var viewModel: AlbumViewModel
private lateinit var clipboardManager: ClipboardManager
private lateinit var loading: LoadingDialog

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
Expand All @@ -39,6 +44,8 @@ class AlbumFragment: Fragment() {
binding = FragmentAlbumBinding.inflate(layoutInflater)
viewModel = ViewModelProvider(requireActivity())[AlbumViewModel::class.java]
clipboardManager = requireActivity().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
loading = LoadingDialog(requireActivity())

return binding.root
}

Expand All @@ -64,7 +71,8 @@ class AlbumFragment: Fragment() {
private fun setRecyclerView() {
albumAdapter = AlbumAdapter(
noResult = { isEmpty, s -> setNoResult(isEmpty, s) },
onClickLinkButton = { onClickLinkButton(it) }
onClickLinkButton = { onClickLinkButton(it) },
onLongClick = { albumItem, view -> onLongClick(albumItem, view) }
) {
NavControllerManager.navigateMainToDetail(it)
}
Expand Down Expand Up @@ -105,6 +113,28 @@ class AlbumFragment: Fragment() {
clipboardManager.setPrimaryClip(clipData)
BlueSnackBar.make(binding.root, getString(R.string.link_copy)).show()
}

private fun onLongClick(albumItem: AlbumItem, view: View) {
CoroutineScope(Dispatchers.Main).launch {
haptic(requireContext(), 50)
delay(500)
showAlertDialog(
context = requireContext(),
title= R.string.dialog_delete_title,
message = R.string.dialog_delete_message,
positiveButtonText = R.string.delete,
onContinue = {
loading.show(true)
deleteAlbum(albumItem.documentId)
},
negativeButtonText = R.string.cancel,
onCancel = { },
style = R.style.DialogDeleteTheme
)
view.visibility = View.GONE
}
}

private fun setNoResult(isEmpty: Boolean, s: String) {
if (s.isEmpty() && albumAdapter.originalList.isEmpty()) updateNoResultMessage(true, getString(R.string.no_data_text))
else updateNoResultMessage(isEmpty, getString(R.string.no_search_text))
Expand All @@ -131,4 +161,18 @@ class AlbumFragment: Fragment() {
viewModel.setSwipe(true)
}
}

private fun deleteAlbum(id: String) {
CoroutineScope(Dispatchers.Main).launch {
when(val result = viewModel.deleteAlbum(id)) {
is DeleteAlbumUseCase.DeleteAlbumResult.Success -> { viewModel.fetchAlbums() }
is DeleteAlbumUseCase.DeleteAlbumResult.Error -> onFailure(result.errorMessage)
}
loading.show(false)
}
}

private fun onFailure(message: String) {
BlueSnackBar.make(binding.root, message).show()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope
import com.easyhz.picly.data.mapper.toAlbumItem
import com.easyhz.picly.domain.model.album.AlbumItem
import com.easyhz.picly.domain.usecase.album.AlbumUseCase
import com.easyhz.picly.domain.usecase.album.DeleteAlbumUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.distinctUntilChanged
Expand All @@ -17,6 +18,7 @@ import javax.inject.Inject
class AlbumViewModel
@Inject constructor(
private val albumUseCase: AlbumUseCase,
private val deleteAlbumUseCase: DeleteAlbumUseCase
):ViewModel() {
private val albumsLiveData = MutableLiveData<List<AlbumItem>>()
val albums : LiveData<List<AlbumItem>>
Expand All @@ -36,6 +38,8 @@ class AlbumViewModel
}
}

suspend fun deleteAlbum(id: String): DeleteAlbumUseCase.DeleteAlbumResult = deleteAlbumUseCase(id)

fun setSearchText(value: String) {
_searchText.value = value
}
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/res/drawable/ripple_card_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="?android:attr/colorControlHighlight">
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="@color/collectionViewCellBackground30" />
</shape>
</item>
</ripple>
7 changes: 7 additions & 0 deletions app/src/main/res/layout/item_album.xml
Original file line number Diff line number Diff line change
Expand Up @@ -122,5 +122,12 @@
/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/fade"
android:visibility="gone"
android:foreground="@drawable/ripple_card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" />
</androidx.cardview.widget.CardView>
</layout>
1 change: 1 addition & 0 deletions app/src/main/res/values/colors.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<color name="mainBackground">#FF2C2C35</color>
<color name="collectionViewCellBackground">#FF383843</color>
<color name="collectionViewCellBackground50">#B3383843</color>
<color name="collectionViewCellBackground30">#4D383843</color>
<color name="floatButtonBackground">#FF62626D</color>
<color name="highlightBlue">#FF83B4F9</color>
<color name="textFieldBackground">#FF1C1C1E</color>
Expand Down

0 comments on commit a11a716

Please sign in to comment.