/
BaseLifecycleActivity.kt
69 lines (58 loc) · 2.49 KB
/
BaseLifecycleActivity.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.cleveroad.aropensource.ui.base
import android.content.Intent
import android.os.Bundle
import androidx.annotation.AnimRes
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager.POP_BACK_STACK_INCLUSIVE
abstract class BaseLifecycleActivity : AppCompatActivity() {
protected abstract val containerId: Int
protected abstract val layoutId: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(layoutId)
}
protected fun replaceFragment(fragment: Fragment,
needToAddToBackStack: Boolean = true,
@AnimRes inAnimRes: Int = 0,
@AnimRes outAnimRes: Int = 0) {
val name = fragment.javaClass.simpleName
supportFragmentManager.beginTransaction().apply {
if (inAnimRes != 0 || outAnimRes != 0) setCustomAnimations(inAnimRes, outAnimRes)
replace(containerId, fragment, name)
if (needToAddToBackStack) addToBackStack(name)
}.commit()
}
protected fun removeFragmentByTag(vararg tags: String) {
with(supportFragmentManager) {
for (fragmentTag in tags) {
findFragmentByTag(fragmentTag)?.let {
beginTransaction().remove(it).commit()
popBackStackImmediate()
}
}
}
}
protected fun clearFragmentBackStack() {
supportFragmentManager.fragments.forEach {
clearBackStackRecursive(it)
}
}
private fun clearBackStackRecursive(fragment: Fragment) {
fragment.childFragmentManager.run {
fragments.forEach {
clearBackStackRecursive(it)
}
popBackStack(null, POP_BACK_STACK_INCLUSIVE)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
supportFragmentManager.findFragmentById(containerId)?.onActivityResult(requestCode, resultCode, data)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
supportFragmentManager.findFragmentById(containerId)
?.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
}