Skip to content

Commit

Permalink
Refactor Screen class as interface.
Browse files Browse the repository at this point in the history
  • Loading branch information
terrakok committed Nov 1, 2020
1 parent 1c5b89d commit 3535f49
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 16 deletions.
@@ -1,8 +1,8 @@
package com.github.terrakok.cicerone

/**
* Screen is class for description application screen.
* Screen is interface for description application screen.
*/
abstract class Screen {
open val screenKey: String = this::class.qualifiedName!!
interface Screen {
val screenKey: String get() = this::class.java.name
}
Expand Up @@ -7,16 +7,19 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentFactory
import com.github.terrakok.cicerone.Screen

sealed class AppScreen : Screen()
sealed class AppScreen : Screen

open class FragmentScreen(
override val screenKey: String,
private val key: String? = null,
val createFragment: (FragmentFactory) -> Fragment
) : AppScreen()
) : AppScreen() {
override val screenKey: String get() = key ?: super.screenKey
}

open class ActivityScreen(
override val screenKey: String,
private val key: String? = null,
val createIntent: (context: Context) -> Intent
) : AppScreen() {
override val screenKey: String get() = key ?: super.screenKey
open val startActivityOptions: Bundle? = null
}
Expand Up @@ -24,39 +24,39 @@ object Screens {
SampleFragment.getNewInstance(number)
}

fun Start() = ActivityScreen("Start") {
fun Start() = ActivityScreen {
Intent(it, StartActivity::class.java)
}

fun Main() = ActivityScreen("Main") {
fun Main() = ActivityScreen {
Intent(it, MainActivity::class.java)
}

fun BottomNavigation() = ActivityScreen("BottomNavigation") {
fun BottomNavigation() = ActivityScreen {
Intent(it, BottomNavigationActivity::class.java)
}

fun Tab(tabName: String) = FragmentScreen("Tab") {
fun Tab(tabName: String) = FragmentScreen {
TabContainerFragment.getNewInstance(tabName)
}

fun Forward(containerName: String, number: Int) = FragmentScreen("Forward") {
fun Forward(containerName: String, number: Int) = FragmentScreen {
ForwardFragment.getNewInstance(containerName, number)
}

fun Github() = ActivityScreen("Github") {
fun Github() = ActivityScreen {
Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/terrakok/Cicerone"))
}

fun Profile() = ActivityScreen("Profile") {
fun Profile() = ActivityScreen {
Intent(it, ProfileActivity::class.java)
}

fun ProfileInfo() = FragmentScreen("ProfileInfo") {
fun ProfileInfo() = FragmentScreen {
ProfileFragment()
}

fun SelectPhoto(resultKey: String) = FragmentScreen("SelectPhoto") {
fun SelectPhoto(resultKey: String) = FragmentScreen {
SelectPhotoFragment.getNewInstance(resultKey)
}
}

0 comments on commit 3535f49

Please sign in to comment.