diff --git a/app/src/main/java/com/hako/friendlists/view/MainActivity.kt b/app/src/main/java/com/hako/friendlists/view/MainActivity.kt
index 43a6891..14723a0 100644
--- a/app/src/main/java/com/hako/friendlists/view/MainActivity.kt
+++ b/app/src/main/java/com/hako/friendlists/view/MainActivity.kt
@@ -4,18 +4,21 @@ import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI.setupActionBarWithNavController
-import com.hako.base.extensions.observeNonNull
+import com.hako.base.extensions.*
import com.hako.base.navigation.NavigationRouter
+import com.hako.base.navigation.ShowFabButton
import com.hako.friendlists.BuildConfig
import com.hako.friendlists.R
import com.hako.friendlists.viewmodel.NavigationViewmodel
import com.squareup.picasso.Picasso
+import kotlinx.android.synthetic.main.activity_main.*
import org.koin.android.ext.android.inject
import org.koin.androidx.viewmodel.ext.android.viewModel
class MainActivity : AppCompatActivity() {
private val navController by lazy { findNavController(R.id.main_fragment_container) }
+ private val navHostFragment by lazy { findNavHostFragment(R.id.main_fragment_container) }
private val navRouter: NavigationRouter by inject()
private val picasso: Picasso by inject()
private val viewModel: NavigationViewmodel by viewModel()
@@ -39,6 +42,28 @@ class MainActivity : AppCompatActivity() {
}
setupActionBarWithNavController(this, navController)
+
+ navHostFragment.registerOnFragmentViewCreated { currentFragment ->
+ initializeViews()
+ when (currentFragment) {
+ is ShowFabButton -> fabButtonBehaviour(currentFragment)
+ }
+ }
+ }
+
+ private fun initializeViews() {
+ main_fragment_fab.hide()
+ }
+
+ private fun fabButtonBehaviour(currentFragment: ShowFabButton) {
+ main_fragment_fab.setOnClickListener {
+ currentFragment.fabButtonPressed().invoke()
+ }
+ if (currentFragment.shouldShowFabButton()) {
+ main_fragment_fab.show()
+ } else {
+ main_fragment_fab.hide()
+ }
}
private fun setupPicasso() {
diff --git a/app/src/main/java/com/hako/friendlists/viewmodel/NavigationViewmodel.kt b/app/src/main/java/com/hako/friendlists/viewmodel/NavigationViewmodel.kt
index 4c8bb76..aa1db70 100644
--- a/app/src/main/java/com/hako/friendlists/viewmodel/NavigationViewmodel.kt
+++ b/app/src/main/java/com/hako/friendlists/viewmodel/NavigationViewmodel.kt
@@ -35,6 +35,9 @@ class NavigationViewmodel : ViewModel() {
putString(FRAGMENT_TITLE, event.userName)
})
)
+ is UserlistNavigation.ClickedOnFab -> navigate.postValue(
+ buildNavigation(R.id.action_userlistFragment_to_favoriteUserlistFragment)
+ )
}
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 626a29b..78e06e2 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -15,4 +15,14 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index ecb305d..68bac2d 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -2,7 +2,7 @@
#37474F
#324047
- #CBCFD1
+ #D32F2F
#D32F2F
#333333
diff --git a/base/src/main/java/com/hako/base/extensions/NavigationExtensions.kt b/base/src/main/java/com/hako/base/extensions/NavigationExtensions.kt
index 24eff13..7e0e618 100644
--- a/base/src/main/java/com/hako/base/extensions/NavigationExtensions.kt
+++ b/base/src/main/java/com/hako/base/extensions/NavigationExtensions.kt
@@ -1,6 +1,32 @@
package com.hako.base.extensions
import android.os.Bundle
+import android.view.View
import androidx.annotation.IdRes
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.navigation.fragment.NavHostFragment
+
+fun AppCompatActivity.findNavHostFragment(@IdRes id: Int) =
+ supportFragmentManager.findFragmentById(id) as NavHostFragment
+
+fun NavHostFragment.registerOnFragmentViewCreated(
+ recursive: Boolean = true,
+ listener: (currentFragment: Fragment) -> Unit
+) {
+ childFragmentManager
+ .registerFragmentLifecycleCallbacks(object : FragmentManager.FragmentLifecycleCallbacks() {
+ override fun onFragmentViewCreated(
+ fm: FragmentManager,
+ f: Fragment,
+ v: View,
+ savedInstanceState: Bundle?
+ ) {
+ super.onFragmentViewCreated(fm, f, v, savedInstanceState)
+ listener(f)
+ }
+ }, recursive)
+}
fun buildNavigation(@IdRes id: Int, bundle: Bundle = Bundle()) = Pair(id, bundle)
diff --git a/base/src/main/java/com/hako/base/navigation/ShowFabButton.kt b/base/src/main/java/com/hako/base/navigation/ShowFabButton.kt
index 20475f8..9685690 100644
--- a/base/src/main/java/com/hako/base/navigation/ShowFabButton.kt
+++ b/base/src/main/java/com/hako/base/navigation/ShowFabButton.kt
@@ -1,3 +1,7 @@
package com.hako.base.navigation
-interface ShowFabButton
\ No newline at end of file
+interface ShowFabButton {
+ fun shouldShowFabButton(): Boolean
+
+ fun fabButtonPressed(): () -> Unit = {}
+}
\ No newline at end of file
diff --git a/base/src/main/res/drawable-hdpi/ic_heart.png b/base/src/main/res/drawable-hdpi/ic_heart.png
new file mode 100644
index 0000000..4fd52b2
Binary files /dev/null and b/base/src/main/res/drawable-hdpi/ic_heart.png differ
diff --git a/base/src/main/res/drawable-mdpi/ic_heart.png b/base/src/main/res/drawable-mdpi/ic_heart.png
new file mode 100644
index 0000000..ba121c8
Binary files /dev/null and b/base/src/main/res/drawable-mdpi/ic_heart.png differ
diff --git a/base/src/main/res/drawable-xhdpi/ic_heart.png b/base/src/main/res/drawable-xhdpi/ic_heart.png
new file mode 100644
index 0000000..e974a8e
Binary files /dev/null and b/base/src/main/res/drawable-xhdpi/ic_heart.png differ
diff --git a/base/src/main/res/drawable-xxhdpi/ic_heart.png b/base/src/main/res/drawable-xxhdpi/ic_heart.png
new file mode 100644
index 0000000..f3c77c1
Binary files /dev/null and b/base/src/main/res/drawable-xxhdpi/ic_heart.png differ
diff --git a/base/src/main/res/drawable-xxxhdpi/ic_heart.png b/base/src/main/res/drawable-xxxhdpi/ic_heart.png
new file mode 100644
index 0000000..ed2fc6f
Binary files /dev/null and b/base/src/main/res/drawable-xxxhdpi/ic_heart.png differ
diff --git a/userlist/src/main/java/com/hako/userlist/domain/usecase/SetFavoriteStatus.kt b/userlist/src/main/java/com/hako/userlist/domain/usecase/SetFavoriteStatus.kt
index f067ead..6afdcac 100644
--- a/userlist/src/main/java/com/hako/userlist/domain/usecase/SetFavoriteStatus.kt
+++ b/userlist/src/main/java/com/hako/userlist/domain/usecase/SetFavoriteStatus.kt
@@ -1,15 +1,8 @@
package com.hako.userlist.domain.usecase
import com.hako.base.domain.database.dao.UserDao
-import com.hako.base.extensions.wasUpdated
-import com.hako.userlist.domain.datasource.UserlistRemoteApi
-import com.hako.userlist.model.UserViewable
-import com.hako.userlist.model.toUserEntity
-import com.hako.userlist.model.toUserViewable
import io.reactivex.Single
import io.reactivex.schedulers.Schedulers
-import org.koin.core.KoinComponent
-import org.koin.core.get
class SetFavoriteStatus(private val dao: UserDao) {
diff --git a/userlist/src/main/java/com/hako/userlist/feature/FavoriteUserlistFragment.kt b/userlist/src/main/java/com/hako/userlist/feature/FavoriteUserlistFragment.kt
new file mode 100644
index 0000000..b32dfc8
--- /dev/null
+++ b/userlist/src/main/java/com/hako/userlist/feature/FavoriteUserlistFragment.kt
@@ -0,0 +1,9 @@
+package com.hako.userlist.feature
+
+class FavoriteUserlistFragment : UserlistFragment() {
+ override fun doRequest() {
+ viewModel.fetchFavoriteUsers()
+ }
+
+ override fun shouldShowFabButton() = false
+}
\ No newline at end of file
diff --git a/userlist/src/main/java/com/hako/userlist/feature/UserlistFragment.kt b/userlist/src/main/java/com/hako/userlist/feature/UserlistFragment.kt
index b837a41..db86a70 100644
--- a/userlist/src/main/java/com/hako/userlist/feature/UserlistFragment.kt
+++ b/userlist/src/main/java/com/hako/userlist/feature/UserlistFragment.kt
@@ -9,7 +9,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.hako.base.domain.network.RequestStatus
import com.hako.base.extensions.gone
import com.hako.base.extensions.observeNonNull
-import com.hako.base.extensions.toast
import com.hako.base.extensions.visible
import com.hako.base.navigation.NavigationRouter
import com.hako.base.navigation.ShowFabButton
@@ -23,11 +22,9 @@ import org.koin.android.ext.android.inject
import org.koin.androidx.viewmodel.ext.android.viewModel
import timber.log.Timber
-const val ALBUMLIST_FRAGMENT_BUNDLE_FAVORITES = "ALBUMLIST_FRAGMENT_BUNDLE_FAVORITES"
+open class UserlistFragment : Fragment(), ShowFabButton {
-class UserlistFragment : Fragment(), ShowFabButton {
-
- private val viewModel: UserlistViewmodel by viewModel()
+ val viewModel: UserlistViewmodel by viewModel()
private val listAdapter by lazy { UserlistAdapter() }
private val navigation: NavigationRouter by inject()
@@ -39,9 +36,19 @@ class UserlistFragment : Fragment(), ShowFabButton {
super.onViewCreated(view, savedInstanceState)
setRecycler()
setObservers()
+ doRequest()
+ }
+
+ open fun doRequest() {
viewModel.fetchUsers()
}
+ override fun shouldShowFabButton() = true
+
+ override fun fabButtonPressed(): () -> Unit = {
+ navigation.sendNavigation(UserlistNavigation.ClickedOnFab)
+ }
+
private fun setObservers() {
viewModel.userList.observeNonNull(this) {
it.either(::handleFetchError, ::handleFetchSuccess)
diff --git a/userlist/src/main/java/com/hako/userlist/navigation/UserlistNavigation.kt b/userlist/src/main/java/com/hako/userlist/navigation/UserlistNavigation.kt
index 3fb87d5..3edb0c3 100644
--- a/userlist/src/main/java/com/hako/userlist/navigation/UserlistNavigation.kt
+++ b/userlist/src/main/java/com/hako/userlist/navigation/UserlistNavigation.kt
@@ -4,4 +4,5 @@ import com.hako.base.navigation.NavigationEvent
sealed class UserlistNavigation : NavigationEvent {
data class ClickedOnUser(val userId: Int, val userName: String) : UserlistNavigation()
+ object ClickedOnFab : UserlistNavigation()
}
diff --git a/userlist/src/main/res/navigation/userlist_navigation.xml b/userlist/src/main/res/navigation/userlist_navigation.xml
index c680ef2..4424c70 100644
--- a/userlist/src/main/res/navigation/userlist_navigation.xml
+++ b/userlist/src/main/res/navigation/userlist_navigation.xml
@@ -9,6 +9,20 @@
android:id="@+id/userlistFragment"
android:name="com.hako.userlist.feature.UserlistFragment"
tools:layout="@layout/fragment_userlist"
- android:label="Friendlist" />
+ android:label="Friendlist" >
+
+
+
+
\ No newline at end of file