Skip to content

Commit a47ec61

Browse files
committed
Fix and refine
1 parent 38db642 commit a47ec61

File tree

14 files changed

+94
-64
lines changed

14 files changed

+94
-64
lines changed

app/src/main/java/com/autocrop/activities/cropping/fragments/cropping/CroppingFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class CroppingFragment
6868
else
6969
// delay briefly to assure progress bar having reached 100% before UI change
7070
Handler(Looper.getMainLooper()).postDelayed(
71-
{ castedActivity.replaceCurrentFragmentWith(CroppingFailedFragment()) },
71+
{ typedActivity.replaceCurrentFragmentWith(CroppingFailedFragment()) },
7272
resources.getInteger(R.integer.small_delay).toLong()
7373
)
7474
}

app/src/main/java/com/autocrop/activities/cropping/fragments/croppingfailed/CroppingFailedFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class CroppingFailedFragment
1212
super.onViewCreated(view, savedInstanceState)
1313

1414
binding.croppingUnsuccessfulGotItButton.setOnClickListener {
15-
castedActivity.returnToMainActivity()
15+
typedActivity.returnToMainActivity()
1616
}
1717
}
1818
}

app/src/main/java/com/autocrop/activities/examination/fragments/apptitle/AppTitleFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ class AppTitleFragment
1212
override fun onViewCreatedCore(savedInstanceState: Bundle?) {
1313
binding.appTitleTextView.animate(
1414
listOf(Techniques.Shake, Techniques.Wobble, Techniques.Wave, Techniques.Tada).random()
15-
){castedActivity.returnToMainActivity()}
15+
){typedActivity.returnToMainActivity()}
1616
}
1717
}

app/src/main/java/com/autocrop/activities/examination/fragments/saveall/SaveAllFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ class SaveAllFragment :
1212
ExaminationActivityFragment<ExaminationFragmentSaveallBinding>(ExaminationFragmentSaveallBinding::class.java) {
1313

1414
/**
15-
* Launch async [processRemainingCropBundles] task, call [castedActivity].invokeSubsequentFragment
15+
* Launch async [processRemainingCropBundles] task, call [typedActivity].invokeSubsequentFragment
1616
* onPostExecute
1717
*/
1818
override fun onViewCreatedCore(savedInstanceState: Bundle?) {
1919
lifecycleScope.executeAsyncTask(
2020
{ processRemainingCropBundles(BooleanUserPreferences.deleteScreenshots)},
21-
{ castedActivity.invokeSubsequentFragment() }
21+
{ typedActivity.invokeSubsequentFragment() }
2222
)
2323
}
2424

app/src/main/java/com/autocrop/activities/examination/fragments/sreenshotdeletionquery/ScreenshotDeletionQueryFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class ScreenshotDeletionQueryFragment :
4242
// launch appTitleFragment after small delay for UX smoothness
4343
Handler(Looper.getMainLooper()).postDelayed(
4444
{
45-
castedActivity.replaceCurrentFragmentWith(AppTitleFragment(), true)
45+
typedActivity.replaceCurrentFragmentWith(AppTitleFragment(), true)
4646
},
4747
resources.getInteger(R.integer.small_delay).toLong()
4848
)

app/src/main/java/com/autocrop/activities/examination/fragments/viewpager/ViewPagerFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class ViewPagerFragment:
7676
adapter = CropPagerAdapter(
7777
this,
7878
viewModel,
79-
castedActivity::invokeSubsequentFragment
79+
typedActivity::invokeSubsequentFragment
8080
)
8181

8282
registerOnPageChangeCallback(

app/src/main/java/com/autocrop/activities/examination/fragments/viewpager/views/ButtonToolbar.kt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,14 @@ import android.view.View
66
import androidx.appcompat.widget.AppCompatButton
77
import androidx.appcompat.widget.Toolbar
88
import androidx.core.view.children
9+
import androidx.lifecycle.LifecycleOwner
910
import com.autocrop.activities.examination.ExaminationActivity
1011
import com.autocrop.activities.examination.fragments.saveall.SaveAllFragment
1112
import com.autocrop.activities.examination.fragments.viewpager.dialogs.CropEntiretyProcedureDialog
1213
import com.autocrop.activities.examination.fragments.viewpager.dialogs.DiscardAllConfirmationDialog
1314
import com.autocrop.activities.examination.fragments.viewpager.dialogs.SaveAllConfirmationDialog
15+
import com.autocrop.uielements.view.ParentActivityRetriever
16+
import com.autocrop.uielements.view.ParentActivityRetrievingView
1417

1518
class ButtonToolbar(context: Context, attr: AttributeSet):
1619
Toolbar(context, attr){
@@ -25,40 +28,38 @@ class ButtonToolbar(context: Context, attr: AttributeSet):
2528
}
2629

2730
abstract class CropEntiretyRegardingButton(context: Context, attr: AttributeSet, private val dialogClass: CropEntiretyProcedureDialog):
28-
AppCompatButton(context, attr){
31+
AppCompatButton(context, attr),
32+
ParentActivityRetriever<ExaminationActivity> by ParentActivityRetrievingView(context){
2933

3034
init {
31-
examinationActivity.supportFragmentManager.setFragmentResultListener(
35+
fragmentActivity.supportFragmentManager.setFragmentResultListener(
3236
dialogClass.resultKey,
33-
examinationActivity
37+
activity as LifecycleOwner
3438
)
3539
{_, _ -> dialogResultListener()}
3640
}
3741

3842
override fun setOnClickListener(l: OnClickListener?) {
3943
super.setOnClickListener{
4044
dialogClass
41-
.show(examinationActivity.supportFragmentManager)
45+
.show(fragmentActivity.supportFragmentManager)
4246
}
4347
}
4448

4549
protected abstract fun dialogResultListener()
46-
47-
protected val examinationActivity: ExaminationActivity
48-
get() = (context as ExaminationActivity)
4950
}
5051

5152
class DiscardAllButton(context: Context, attr: AttributeSet):
5253
CropEntiretyRegardingButton(context, attr, DiscardAllConfirmationDialog()){
5354

5455
override fun dialogResultListener(){
55-
examinationActivity.invokeSubsequentFragment()
56+
typedActivity.invokeSubsequentFragment()
5657
}
5758
}
5859

5960
class SaveAllButton(context: Context, attr: AttributeSet):
6061
CropEntiretyRegardingButton(context, attr, SaveAllConfirmationDialog()){
6162

6263
override fun dialogResultListener() =
63-
examinationActivity.replaceCurrentFragmentWith(SaveAllFragment(), true)
64+
typedActivity.replaceCurrentFragmentWith(SaveAllFragment(), true)
6465
}

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

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class FlowFieldFragment:
9090
}
9191

9292
private fun invokeAboutFragment() =
93-
castedActivity.replaceCurrentFragmentWith(AboutFragment(), false)
93+
typedActivity.replaceCurrentFragmentWith(AboutFragment(), false)
9494

9595
private fun goToPlayStoreListing() =
9696
try{
@@ -115,17 +115,18 @@ class FlowFieldFragment:
115115
* then launch [selectImages] if all granted
116116
*/
117117
private fun setImageSelectionButtonOnClickListener() = binding.imageSelectionButton.setOnClickListener {
118-
ifPermissionsGranted {
118+
requestWritePermissionOrRun {
119119
selectImages()
120120
}
121121
}
122122

123-
private val ifPermissionsGranted = PermissionsHandler(
124-
requireActivity(),
125-
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
126-
"You'll have to permit media file access in order for the app to save generated crops",
127-
"Go to app settings and grant media file access in order for the app to save generated crops"
128-
)
123+
private val requestWritePermissionOrRun: PermissionsHandler =
124+
PermissionsHandler(
125+
this,
126+
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
127+
"You'll have to permit media file access in order for the app to save generated crops",
128+
"Go to app settings and grant media file access in order for the app to save generated crops"
129+
)
129130

130131
@Suppress("DEPRECATION")
131132
private fun selectImages() =
@@ -143,22 +144,17 @@ class FlowFieldFragment:
143144
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
144145
super.onActivityResult(requestCode, resultCode, data)
145146

146-
if (resultCode == RESULT_OK) {
147-
when (requestCode) {
148-
IntentCode.IMAGE_SELECTION.ordinal -> {
149-
startActivity(
150-
Intent(
151-
requireActivity(),
152-
CroppingActivity::class.java
153-
)
154-
.putParcelableArrayListExtra(
155-
IntentExtraIdentifier.SELECTED_IMAGE_URIS,
156-
ArrayList(data?.clipDataItems()!!.map { it.uri })
157-
)
147+
if (resultCode == RESULT_OK && requestCode == IntentCode.IMAGE_SELECTION.ordinal)
148+
startActivity(
149+
Intent(
150+
requireActivity(),
151+
CroppingActivity::class.java
152+
)
153+
.putParcelableArrayListExtra(
154+
IntentExtraIdentifier.SELECTED_IMAGE_URIS,
155+
ArrayList(data?.clipDataItems()!!.map { it.uri })
158156
)
159-
}
160-
}
161-
}
157+
)
162158
}
163159

164160
private enum class IntentCode {

app/src/main/java/com/autocrop/activities/main/fragments/flowfield/views/CropSharingButton.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,30 @@
11
package com.autocrop.activities.main.fragments.flowfield.views
22

3-
import android.app.Activity
43
import android.content.Context
54
import android.content.Intent
65
import android.net.Uri
76
import android.util.AttributeSet
87
import androidx.appcompat.widget.AppCompatImageButton
98
import com.autocrop.activities.IntentExtraIdentifier
9+
import com.autocrop.activities.main.MainActivity
10+
import com.autocrop.uielements.view.ParentActivityRetriever
11+
import com.autocrop.uielements.view.ParentActivityRetrievingView
1012
import com.autocrop.uielements.view.animate
1113
import com.autocrop.uielements.view.show
1214
import com.autocrop.utilsandroid.MimeTypes
1315
import com.daimajia.androidanimations.library.Techniques
1416
import com.w2sv.autocrop.R
1517

16-
class CropSharingButton(context: Context, attrs: AttributeSet)
17-
: AppCompatImageButton(context, attrs){
18+
class CropSharingButton(context: Context, attrs: AttributeSet):
19+
AppCompatImageButton(context, attrs),
20+
ParentActivityRetriever<MainActivity> by ParentActivityRetrievingView(context){
1821

1922
/**
2023
* If CROP_SAVING_URIS available from previous ExaminationActivity cycle show and
2124
* setOnClickListener
2225
*/
2326
init {
24-
(context as Activity).intent.extras?.getParcelableArrayList<Uri>(IntentExtraIdentifier.CROP_SAVING_URIS)?.let {
27+
activity.intent.extras?.getParcelableArrayList<Uri>(IntentExtraIdentifier.CROP_SAVING_URIS)?.let {
2528
show()
2629
setOnClickListener(it)
2730
}

app/src/main/java/com/autocrop/uicontroller/fragment/ApplicationFragment.kt

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,26 @@ package com.autocrop.uicontroller.fragment
33
import android.app.Activity
44
import android.os.Bundle
55
import android.view.View
6-
import androidx.fragment.app.Fragment
76
import androidx.lifecycle.ViewModel
87
import androidx.lifecycle.ViewModelProvider
98
import androidx.viewbinding.ViewBinding
109
import com.autocrop.uicontroller.ViewModelHolder
11-
import com.autocrop.utils.BlankFun
10+
import com.autocrop.utilsandroid.TypedActivityRetriever
1211

1312
abstract class ApplicationFragment<A: Activity, VB: ViewBinding, VM: ViewModel>(
1413
viewModelClass: Class<VM>,
1514
bindingClass: Class<VB>):
1615
ViewBoundFragment<VB>(bindingClass),
17-
ViewModelHolder<VM> {
16+
ViewModelHolder<VM>,
17+
TypedActivityRetriever<A>{
18+
19+
override fun onViewCreated(view: View, savedInstanceState: Bundle?){
20+
postponeEnterTransition()
1821

19-
override fun onViewCreated(view: View, savedInstanceState: Bundle?) = withPostponedEnterTransition {
2022
super.onViewCreated(view, savedInstanceState)
2123
onViewCreatedCore(savedInstanceState)
24+
25+
startPostponedEnterTransition()
2226
}
2327

2428
open fun onViewCreatedCore(savedInstanceState: Bundle?){}
@@ -27,17 +31,11 @@ abstract class ApplicationFragment<A: Activity, VB: ViewBinding, VM: ViewModel>(
2731
* Retyped [androidx.fragment.app.Fragment.requireActivity]
2832
*/
2933
@Suppress("UNCHECKED_CAST")
30-
val castedActivity: A by lazy {
34+
override val typedActivity: A by lazy {
3135
requireActivity() as A
3236
}
3337

3438
override val sharedViewModel: VM by lazy {
3539
ViewModelProvider(requireActivity())[viewModelClass]
3640
}
37-
}
38-
39-
private inline fun Fragment.withPostponedEnterTransition(f: BlankFun){
40-
postponeEnterTransition()
41-
f()
42-
startPostponedEnterTransition()
4341
}

0 commit comments

Comments
 (0)