Skip to content

Commit 2f09e9b

Browse files
committed
Remove snackbars from app
1 parent dbd15b9 commit 2f09e9b

File tree

8 files changed

+157
-236
lines changed

8 files changed

+157
-236
lines changed

app/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,6 @@ dependencies {
121121

122122
// other
123123
implementation libs.slimber
124-
implementation libs.snacky
125124
implementation libs.animatoo
126125
implementation libs.lottie
127126

app/src/main/kotlin/com/w2sv/autocrop/activities/AppFragment.kt

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,10 @@ import androidx.core.view.doOnPreDraw
88
import androidx.lifecycle.LifecycleObserver
99
import androidx.lifecycle.lifecycleScope
1010
import androidx.viewbinding.ViewBinding
11-
import com.google.android.material.snackbar.Snackbar
1211
import com.w2sv.androidutils.extensions.getLong
1312
import com.w2sv.androidutils.extensions.launchDelayed
1413
import com.w2sv.autocrop.R
15-
import com.w2sv.common.extensions.snackyBuilder
1614
import com.w2sv.viewboundcontroller.ViewBoundFragment
17-
import de.mateware.snacky.Snacky
1815
import kotlinx.coroutines.CoroutineScope
1916

2017
abstract class AppFragment<VB : ViewBinding>(bindingClass: Class<VB>) :
@@ -38,17 +35,6 @@ abstract class AppFragment<VB : ViewBinding>(bindingClass: Class<VB>) :
3835
lifecycleScope.launchDelayed(resources.getLong(R.integer.delay_small), block = block)
3936
}
4037

41-
protected fun getSnackyBuilder(text: CharSequence, duration: Int = Snackbar.LENGTH_LONG): Snacky.Builder =
42-
requireActivity()
43-
.snackyBuilder(text, duration)
44-
.apply {
45-
snackbarAnchorView?.let {
46-
setView(it)
47-
}
48-
}
49-
50-
protected open val snackbarAnchorView: View? get() = null
51-
5238
/**
5339
* Activity retrieval
5440
*/

app/src/main/kotlin/com/w2sv/autocrop/activities/examination/fragments/pager/CropPagerFragment.kt

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ import com.w2sv.autocrop.activities.examination.ExaminationActivity
3535
import com.w2sv.autocrop.activities.examination.fragments.adjustment.CropAdjustmentFragment
3636
import com.w2sv.autocrop.activities.examination.fragments.comparison.ComparisonFragment
3737
import com.w2sv.autocrop.activities.examination.fragments.pager.dialogs.AbstractCropSavingDialogFragment
38+
import com.w2sv.autocrop.activities.examination.fragments.pager.dialogs.CropSavingDialogFragment
3839
import com.w2sv.autocrop.activities.examination.fragments.pager.dialogs.RecropDialogFragment
3940
import com.w2sv.autocrop.activities.examination.fragments.pager.dialogs.SaveAllCropsDialogFragment
40-
import com.w2sv.autocrop.activities.examination.fragments.pager.dialogs.CropSavingDialogFragment
4141
import com.w2sv.autocrop.activities.examination.fragments.pager.model.CropProcedure
4242
import com.w2sv.autocrop.activities.examination.fragments.saveall.SaveAllFragment
4343
import com.w2sv.autocrop.databinding.CropPagerBinding
@@ -63,13 +63,11 @@ import com.w2sv.preferences.IntPreferences
6363
import dagger.hilt.android.AndroidEntryPoint
6464
import dagger.hilt.android.lifecycle.HiltViewModel
6565
import dagger.hilt.android.qualifiers.ApplicationContext
66-
import de.mateware.snacky.Snacky
6766
import kotlinx.coroutines.CoroutineScope
6867
import kotlinx.coroutines.Dispatchers
6968
import kotlinx.coroutines.Job
7069
import kotlinx.coroutines.delay
7170
import kotlinx.coroutines.launch
72-
import slimber.log.i
7371
import javax.inject.Inject
7472

7573
@AndroidEntryPoint
@@ -139,24 +137,20 @@ class CropPagerFragment :
139137
dataSet.size - dataSet.livePosition.value!!
140138

141139
/**
142-
* Crop Results Snackbar
140+
* Crop Results Notification
143141
*/
144142

145-
fun showCropResultsSnackbarIfApplicable(getSnackyBuilder: (CharSequence) -> Snacky.Builder) {
146-
if (uncroppedScreenshotsSnackbarText != null && !showedCropResultsSnackbar) {
147-
getSnackyBuilder(uncroppedScreenshotsSnackbarText)
148-
.setIcon(com.w2sv.common.R.drawable.ic_error_24)
149-
.build()
150-
.show()
151-
showedCropResultsSnackbar = true
143+
fun showCropResultsToastIfApplicable(context: Context) {
144+
if (uncroppedScreenshotsSnackbarText != null && !showedCropResultsNotification) {
145+
context.showToast(uncroppedScreenshotsSnackbarText, duration = Toast.LENGTH_LONG)
146+
showedCropResultsNotification = true
152147
}
153148
}
154149

155150
private val uncroppedScreenshotsSnackbarText: SpannableStringBuilder? =
156151
SpannableStringBuilder()
157152
.run {
158153
val cropResults = savedStateHandle.get<CropResults>(CropResults.EXTRA)!!
159-
i { "$cropResults" }
160154

161155
if (cropResults.nNotCroppableImages != 0) {
162156
append("Couldn't find crop bounds for")
@@ -167,26 +161,10 @@ class CropPagerFragment :
167161
}
168162
append(" ${"screenshot".numericallyInflected(cropResults.nNotCroppableImages)}")
169163
}
170-
171-
if (cropResults.nNotOpenableImages != 0) {
172-
append(
173-
if (isEmpty())
174-
"Couldn't"
175-
else
176-
" & couldn't"
177-
)
178-
append(" open")
179-
bold {
180-
color(context.getColor(R.color.highlight)) {
181-
append(" ${cropResults.nNotOpenableImages}")
182-
}
183-
}
184-
append(" ${"image".numericallyInflected(cropResults.nNotOpenableImages)}")
185-
}
186164
ifEmpty { null }
187165
}
188166

189-
private var showedCropResultsSnackbar: Boolean = false
167+
private var showedCropResultsNotification: Boolean = false
190168

191169
/**
192170
* Other
@@ -285,7 +263,7 @@ class CropPagerFragment :
285263
?: false
286264

287265
buildList {
288-
add(snackbarRepelledLayout)
266+
add(currentCropLayout)
289267
add(popupMenuButton)
290268
if (!viewModel.dataSet.holdingSingularElement)
291269
add(allCropsButtonsWLabel)
@@ -295,7 +273,7 @@ class CropPagerFragment :
295273
)
296274

297275
launchAfterShortDelay {
298-
viewModel.showCropResultsSnackbarIfApplicable(::getSnackyBuilder)
276+
viewModel.showCropResultsToastIfApplicable(requireContext())
299277
}
300278

301279
viewPager.setPageTransformer(CubeOutPageTransformer())
@@ -491,9 +469,6 @@ class CropPagerFragment :
491469
?: false
492470
}
493471

494-
override val snackbarAnchorView: View
495-
get() = binding.snackbarRepelledLayout.parent as View
496-
497472
fun onBackPress() {
498473
viewModel.backPressHandler(
499474
{

app/src/main/kotlin/com/w2sv/autocrop/activities/main/fragments/flowfield/FlowFieldFragment.kt

Lines changed: 7 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import android.os.Bundle
1111
import android.text.SpannableStringBuilder
1212
import android.view.View
1313
import android.widget.Toast
14-
import androidx.core.text.buildSpannedString
1514
import androidx.core.text.color
1615
import androidx.drawerlayout.widget.DrawerLayout
1716
import androidx.fragment.app.viewModels
@@ -25,7 +24,6 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager
2524
import com.daimajia.androidanimations.library.Techniques
2625
import com.w2sv.androidutils.BackPressHandler
2726
import com.w2sv.androidutils.SelfManagingLocalBroadcastReceiver
28-
import com.w2sv.androidutils.extensions.getColoredDrawable
2927
import com.w2sv.androidutils.extensions.getLong
3028
import com.w2sv.androidutils.extensions.hide
3129
import com.w2sv.androidutils.extensions.postValue
@@ -35,12 +33,11 @@ import com.w2sv.androidutils.extensions.uris
3533
import com.w2sv.autocrop.R
3634
import com.w2sv.autocrop.activities.AppFragment
3735
import com.w2sv.autocrop.activities.crop.CropActivity
38-
import com.w2sv.autocrop.domain.AccumulatedIOResults
3936
import com.w2sv.autocrop.activities.main.MainActivity
4037
import com.w2sv.autocrop.activities.main.fragments.flowfield.contracthandlers.OpenDocumentTreeContractHandler
4138
import com.w2sv.autocrop.activities.main.fragments.flowfield.contracthandlers.SelectImagesContractHandlerCompat
4239
import com.w2sv.autocrop.databinding.FlowfieldBinding
43-
import com.w2sv.autocrop.ui.model.SnackbarData
40+
import com.w2sv.autocrop.domain.AccumulatedIOResults
4441
import com.w2sv.autocrop.ui.views.animate
4542
import com.w2sv.autocrop.ui.views.fadeIn
4643
import com.w2sv.autocrop.ui.views.fadeInAnimationComposer
@@ -51,13 +48,11 @@ import com.w2sv.autocrop.utils.getMediaUri
5148
import com.w2sv.autocrop.utils.pathIdentifier
5249
import com.w2sv.common.PermissionHandler
5350
import com.w2sv.cropbundle.io.IMAGE_MIME_TYPE
54-
import com.w2sv.kotlinutils.extensions.numericallyInflected
5551
import com.w2sv.preferences.CropSaveDirPreferences
5652
import com.w2sv.screenshotlistening.ScreenshotListener
5753
import dagger.hilt.android.AndroidEntryPoint
5854
import dagger.hilt.android.lifecycle.HiltViewModel
5955
import dagger.hilt.android.qualifiers.ApplicationContext
60-
import de.mateware.snacky.Snacky
6156
import javax.inject.Inject
6257

6358
@AndroidEntryPoint
@@ -81,46 +76,17 @@ class FlowFieldFragment :
8176
var fadedInForegroundOnEntry = false
8277

8378
/**
84-
* IO Results Snackbar
79+
* IO Results Notification
8580
*/
8681

87-
fun showIOResultsSnackbarIfApplicable(
88-
getSnackyBuilder: (CharSequence) -> Snacky.Builder
82+
fun showIOResultsNotificationIfApplicable(
83+
context: Context
8984
) {
90-
ioResultsSnackbarData?.let {
91-
getSnackyBuilder(it.text)
92-
.setIcon(it.icon)
93-
.build()
94-
.show()
85+
accumulatedIoResults?.let {
86+
context.showToast(it.getNotificationText())
9587
}
9688
}
9789

98-
private val ioResultsSnackbarData: SnackbarData? = accumulatedIoResults?.let {
99-
if (it.nSavedCrops == 0)
100-
SnackbarData("Discarded all crops")
101-
else
102-
SnackbarData(
103-
buildSpannedString {
104-
append(
105-
"Saved ${it.nSavedCrops} ${"crop".numericallyInflected(it.nSavedCrops)} to "
106-
)
107-
color(context.getColor(R.color.success)) {
108-
append(cropSaveDirPreferences.pathIdentifier)
109-
}
110-
if (it.nDeletedScreenshots != 0)
111-
append(
112-
" and deleted ${
113-
if (it.nDeletedScreenshots == it.nSavedCrops)
114-
"corresponding"
115-
else
116-
it.nDeletedScreenshots
117-
} ${"screenshot".numericallyInflected(it.nDeletedScreenshots)}"
118-
)
119-
},
120-
context.getColoredDrawable(R.drawable.ic_check_24, R.color.success)
121-
)
122-
}
123-
12490
/**
12591
* Misc LiveData
12692
*/
@@ -202,7 +168,7 @@ class FlowFieldFragment :
202168
.fadeInAnimationComposer(resources.getLong(R.integer.duration_flowfield_buttons_fade_in))
203169
.onHalfwayFinished(lifecycleScope) {
204170
viewModel.fadedInForegroundOnEntry = true
205-
viewModel.showIOResultsSnackbarIfApplicable(::getSnackyBuilder)
171+
viewModel.showIOResultsNotificationIfApplicable(requireContext())
206172

207173
if (anyCropsSaved) {
208174
with(shareCropsButton) {
@@ -340,9 +306,6 @@ class FlowFieldFragment :
340306
}
341307
}
342308

343-
override val snackbarAnchorView: View
344-
get() = binding.snackbarRepelledLayout.parent as View
345-
346309
fun onBackPress() {
347310
binding.drawerLayout.run {
348311
if (isOpen)

app/src/main/kotlin/com/w2sv/autocrop/domain/AccumulatedIOResults.kt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package com.w2sv.autocrop.domain
22

33
import android.net.Uri
44
import android.os.Parcelable
5+
import androidx.core.text.buildSpannedString
56
import com.w2sv.cropbundle.io.CropBundleIOResult
7+
import com.w2sv.kotlinutils.extensions.numericallyInflected
68
import com.w2sv.kotlinutils.extensions.toInt
79
import kotlinx.parcelize.Parcelize
810

@@ -28,4 +30,23 @@ data class AccumulatedIOResults(
2830
nDeletedScreenshots += it.toInt()
2931
}
3032
}
33+
34+
fun getNotificationText(): CharSequence =
35+
if (nSavedCrops == 0)
36+
"Discarded all crops"
37+
else
38+
buildSpannedString {
39+
append(
40+
"Saved $nSavedCrops ${"crop".numericallyInflected(nSavedCrops)}"
41+
)
42+
if (nDeletedScreenshots != 0)
43+
append(
44+
" and deleted ${
45+
if (nDeletedScreenshots == nSavedCrops)
46+
"corresponding"
47+
else
48+
nDeletedScreenshots
49+
} ${"screenshot".numericallyInflected(nDeletedScreenshots)}"
50+
)
51+
}
3152
}

app/src/main/kotlin/com/w2sv/autocrop/ui/model/SnackbarData.kt

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)