Skip to content

Commit bdeccc9

Browse files
committed
improves fragment handling and fragment transactions
1 parent 25c99cc commit bdeccc9

File tree

5 files changed

+50
-20
lines changed

5 files changed

+50
-20
lines changed

app/src/main/java/de/stefanmedack/ccctv/ui/detail/DetailActivity.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import de.stefanmedack.ccctv.ui.base.BaseInjectableActivity
1313
import de.stefanmedack.ccctv.util.EVENT_ID
1414
import de.stefanmedack.ccctv.util.EVENT_PICTURE
1515
import de.stefanmedack.ccctv.util.SHARED_DETAIL_TRANSITION
16+
import de.stefanmedack.ccctv.util.replaceFragmentInTransaction
1617

1718
class DetailActivity : BaseInjectableActivity() {
1819

@@ -27,15 +28,13 @@ class DetailActivity : BaseInjectableActivity() {
2728
// prevent stand-by while playing videos
2829
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
2930

30-
if (savedInstanceState == null) {
31-
fragment = DetailFragment()
32-
fragment?.arguments = Bundle(2).apply {
31+
fragment = DetailFragment()
32+
fragment?.let { frag ->
33+
frag.arguments = Bundle(2).apply {
3334
putInt(EVENT_ID, intent.getIntExtra(EVENT_ID, -1))
3435
putString(EVENT_PICTURE, intent.getStringExtra(EVENT_PICTURE))
3536
}
36-
supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment, DETAIL_TAG).commit()
37-
} else {
38-
fragment = supportFragmentManager.findFragmentByTag(DETAIL_TAG) as DetailFragment
37+
replaceFragmentInTransaction(frag, R.id.fragment, DETAIL_TAG)
3938
}
4039
}
4140

app/src/main/java/de/stefanmedack/ccctv/ui/main/MainActivity.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.os.Bundle
44
import android.view.KeyEvent
55
import de.stefanmedack.ccctv.R
66
import de.stefanmedack.ccctv.ui.base.BaseInjectableActivity
7+
import de.stefanmedack.ccctv.util.replaceFragmentInTransaction
78

89
class MainActivity : BaseInjectableActivity() {
910

@@ -15,11 +16,9 @@ class MainActivity : BaseInjectableActivity() {
1516
super.onCreate(savedInstanceState)
1617
setContentView(R.layout.fragment_activity)
1718

18-
if (savedInstanceState == null) {
19-
fragment = MainFragment()
20-
supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment).commit()
21-
} else {
22-
fragment = supportFragmentManager.findFragmentByTag(MAIN_TAG) as MainFragment
19+
fragment = supportFragmentManager.findFragmentByTag(MAIN_TAG) as? MainFragment ?: MainFragment()
20+
fragment?.let { frag ->
21+
replaceFragmentInTransaction(frag, R.id.fragment, MAIN_TAG)
2322
}
2423
}
2524

app/src/main/java/de/stefanmedack/ccctv/ui/playback/ExoPlayerActivity.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.support.v4.app.FragmentActivity
66
import android.view.WindowManager
77
import de.stefanmedack.ccctv.R
88
import de.stefanmedack.ccctv.util.STREAM_URL
9+
import de.stefanmedack.ccctv.util.addFragmentInTransaction
910
import info.metadude.java.library.brockman.models.Stream
1011
import info.metadude.java.library.brockman.models.Url.TYPE
1112

@@ -18,14 +19,12 @@ class ExoPlayerActivity : FragmentActivity() {
1819
// prevent stand-by while playing videos
1920
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
2021

21-
val ft = supportFragmentManager.beginTransaction()
2222
val fragment = ExoPlayerFragment().apply {
2323
arguments = Bundle(1).also {
2424
it.putString(STREAM_URL, intent.getStringExtra(STREAM_URL))
2525
}
2626
}
27-
ft.add(R.id.videoFragment, fragment, ExoPlayerFragment.TAG)
28-
ft.commit()
27+
addFragmentInTransaction(fragment, R.id.videoFragment, ExoPlayerFragment.TAG)
2928
}
3029

3130
override fun onVisibleBehindCanceled() {

app/src/main/java/de/stefanmedack/ccctv/ui/search/SearchActivity.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Intent
44
import android.os.Bundle
55
import de.stefanmedack.ccctv.R
66
import de.stefanmedack.ccctv.ui.base.BaseInjectableActivity
7+
import de.stefanmedack.ccctv.util.replaceFragmentInTransaction
78

89
class SearchActivity : BaseInjectableActivity() {
910

@@ -15,11 +16,9 @@ class SearchActivity : BaseInjectableActivity() {
1516
super.onCreate(savedInstanceState)
1617
setContentView(R.layout.fragment_activity)
1718

18-
if (savedInstanceState == null) {
19-
fragment = SearchFragment()
20-
supportFragmentManager.beginTransaction().replace(R.id.fragment, fragment).commit()
21-
} else {
22-
fragment = supportFragmentManager.findFragmentByTag(SEARCH_TAG) as SearchFragment
19+
fragment = supportFragmentManager.findFragmentByTag(SEARCH_TAG) as? SearchFragment ?: SearchFragment()
20+
fragment?.let { frag ->
21+
replaceFragmentInTransaction(frag, R.id.fragment, SEARCH_TAG)
2322
}
2423
}
2524

app/src/main/java/de/stefanmedack/ccctv/util/AndroidExtensions.kt

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ import android.app.Activity
44
import android.content.pm.PackageManager.PERMISSION_GRANTED
55
import android.support.v17.leanback.widget.ArrayObjectAdapter
66
import android.support.v17.leanback.widget.Row
7+
import android.support.v4.app.Fragment
8+
import android.support.v4.app.FragmentActivity
9+
import android.support.v4.app.FragmentManager
10+
import android.support.v4.app.FragmentTransaction
711

812
fun Activity.hasPermission(permission: String) : Boolean =
913
PERMISSION_GRANTED == this.packageManager.checkPermission(permission, this.packageName)
@@ -12,4 +16,34 @@ operator fun ArrayObjectAdapter.plusAssign(items: List<*>?) {
1216
items?.forEach { this.add(it) }
1317
}
1418

15-
operator fun ArrayObjectAdapter.plusAssign(row: Row) = this.add(row)
19+
operator fun ArrayObjectAdapter.plusAssign(row: Row) = this.add(row)
20+
21+
inline fun FragmentManager.inTransaction(func: FragmentTransaction.() -> FragmentTransaction) {
22+
beginTransaction().func().commit()
23+
}
24+
25+
fun FragmentActivity.addFragmentInTransaction(
26+
fragment: Fragment,
27+
containerId: Int,
28+
tag: String? = null,
29+
addToBackStack: Boolean = false
30+
) {
31+
supportFragmentManager.inTransaction {
32+
add(containerId, fragment, tag).also {
33+
if (addToBackStack) addToBackStack(tag)
34+
}
35+
}
36+
}
37+
38+
fun FragmentActivity.replaceFragmentInTransaction(
39+
fragment: Fragment,
40+
containerId: Int,
41+
tag: String? = null,
42+
addToBackStack: Boolean = false
43+
) {
44+
supportFragmentManager.inTransaction {
45+
replace(containerId, fragment, tag).also {
46+
if (addToBackStack) addToBackStack(tag)
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)