Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Improve navigation with AuthFragment #1826

Merged
merged 2 commits into from
May 27, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 15 additions & 12 deletions app/src/main/java/org/fossasia/openevent/general/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,10 @@ import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.NavigationUI.setupWithNavController
import kotlinx.android.synthetic.main.activity_main.navigation
import kotlinx.android.synthetic.main.activity_main.mainFragmentCoordinatorLayout
import org.fossasia.openevent.general.auth.EditProfileFragment
import org.fossasia.openevent.general.auth.RC_CREDENTIALS_READ
import org.fossasia.openevent.general.auth.SmartAuthViewModel
import org.fossasia.openevent.general.auth.SmartAuthUtil
import org.fossasia.openevent.general.auth.AuthFragmentDirections
import org.fossasia.openevent.general.auth.AuthFragment
import org.fossasia.openevent.general.utils.Utils.navAnimGone
import org.fossasia.openevent.general.utils.Utils.navAnimVisible
import org.jetbrains.anko.design.snackbar
Expand Down Expand Up @@ -65,19 +64,19 @@ class MainActivity : AppCompatActivity() {
}

override fun onBackPressed() {
when (currentFragmentId) {
R.id.authFragment -> {
navController.navigate(AuthFragmentDirections.actionAuthToEventsPop())
mainFragmentCoordinatorLayout.snackbar(R.string.sign_in_canceled)
val hostFragment = supportFragmentManager.findFragmentById(R.id.frameContainer)
if (hostFragment is NavHostFragment) {
val currentFragment = hostFragment.childFragmentManager.fragments.first()
if (currentFragment is ComplexBackPressFragment) {
currentFragment.handleBackPress()
if (currentFragment is AuthFragment)
mainFragmentCoordinatorLayout.snackbar(R.string.sign_in_canceled)
return
}
}
when (currentFragmentId) {
R.id.orderCompletedFragment -> navController.popBackStack(R.id.eventDetailsFragment, false)
R.id.welcomeFragment -> finish()
R.id.editProfileFragment -> {

// Calls the handleBackPress method in EditProfileFragment
val hostFragment = supportFragmentManager.findFragmentById(R.id.frameContainer) as? NavHostFragment
(hostFragment?.childFragmentManager?.fragments?.get(0) as? EditProfileFragment)?.handleBackPress()
}
else -> super.onBackPressed()
}
}
Expand Down Expand Up @@ -110,3 +109,7 @@ class MainActivity : AppCompatActivity() {
interface ScrollToTop {
fun scrollToTop()
}

interface ComplexBackPressFragment {
fun handleBackPress()
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,16 @@ import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.Observer
import androidx.navigation.Navigation
import androidx.navigation.Navigation.findNavController
import androidx.navigation.fragment.navArgs
import kotlinx.android.synthetic.main.fragment_auth.view.getStartedButton
import kotlinx.android.synthetic.main.fragment_auth.view.email
import kotlinx.android.synthetic.main.fragment_auth.view.rootLayout
import org.fossasia.openevent.general.BuildConfig
import org.fossasia.openevent.general.ComplexBackPressFragment
import org.fossasia.openevent.general.PLAY_STORE_BUILD_FLAVOR
import org.fossasia.openevent.general.R
import org.fossasia.openevent.general.ticket.TICKETS_FRAGMENT
import org.fossasia.openevent.general.utils.Utils
import org.fossasia.openevent.general.utils.Utils.hideSoftKeyboard
import org.fossasia.openevent.general.utils.Utils.show
Expand All @@ -25,7 +27,7 @@ import org.jetbrains.anko.design.snackbar
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
import org.koin.androidx.viewmodel.ext.android.viewModel

class AuthFragment : Fragment() {
class AuthFragment : Fragment(), ComplexBackPressFragment {
private lateinit var rootView: View
private val authViewModel by viewModel<AuthViewModel>()
private val safeArgs: AuthFragmentArgs by navArgs()
Expand Down Expand Up @@ -91,19 +93,26 @@ class AuthFragment : Fragment() {
}

private fun redirectToLogin(email: String = "") {
Navigation.findNavController(rootView)
findNavController(rootView)
.navigate(AuthFragmentDirections
.actionAuthToLogIn(email, safeArgs.redirectedFrom)
)
}

private fun redirectToSignUp() {
Navigation.findNavController(rootView)
findNavController(rootView)
.navigate(AuthFragmentDirections
.actionAuthToSignUp(rootView.email.text.toString(), safeArgs.redirectedFrom)
)
}

override fun handleBackPress() {
when (safeArgs.redirectedFrom) {
TICKETS_FRAGMENT -> findNavController(rootView).popBackStack(R.id.ticketsFragment, false)
else -> findNavController(rootView).navigate(AuthFragmentDirections.actionAuthToEventsPop())
}
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
android.R.id.home -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import org.fossasia.openevent.general.CircleTransform
import org.fossasia.openevent.general.MainActivity
import org.fossasia.openevent.general.R
import org.fossasia.openevent.general.RotateBitmap
import org.fossasia.openevent.general.ComplexBackPressFragment
import org.fossasia.openevent.general.utils.Utils.hideSoftKeyboard
import org.fossasia.openevent.general.utils.Utils.requireDrawable
import org.fossasia.openevent.general.utils.extensions.nonNull
Expand All @@ -45,7 +46,7 @@ import java.io.FileNotFoundException
import org.fossasia.openevent.general.utils.Utils.setToolbar
import org.jetbrains.anko.design.snackbar

class EditProfileFragment : Fragment() {
class EditProfileFragment : Fragment(), ComplexBackPressFragment {

private val profileViewModel by viewModel<ProfileViewModel>()
private val editProfileViewModel by viewModel<EditProfileViewModel>()
Expand Down Expand Up @@ -209,7 +210,7 @@ class EditProfileFragment : Fragment() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
android.R.id.home -> {
handleBackPress()
activity?.onBackPressed()
true
}
else -> super.onOptionsItemSelected(item)
Expand Down Expand Up @@ -241,7 +242,7 @@ class EditProfileFragment : Fragment() {
/**
* Handles back press when up button or back button is pressed
*/
fun handleBackPress() {
override fun handleBackPress() {
val thisActivity = activity
if (!editProfileViewModel.avatarUpdated && rootView.lastName.text.toString() == userLastName &&
rootView.firstName.text.toString() == userFirstName) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import org.fossasia.openevent.general.R
import org.fossasia.openevent.general.event.EVENT_DETAIL_FRAGMENT
import org.fossasia.openevent.general.notification.NOTIFICATION_FRAGMENT
import org.fossasia.openevent.general.order.ORDERS_FRAGMENT
import org.fossasia.openevent.general.ticket.TICKETS_FRAGMNET
import org.fossasia.openevent.general.ticket.TICKETS_FRAGMENT
import org.fossasia.openevent.general.utils.Utils
import org.fossasia.openevent.general.utils.Utils.show
import org.fossasia.openevent.general.utils.Utils.hideSoftKeyboard
Expand Down Expand Up @@ -196,7 +196,7 @@ class LoginFragment : Fragment() {
PROFILE_FRAGMENT -> R.id.profileFragment
EVENT_DETAIL_FRAGMENT -> R.id.eventDetailsFragment
ORDERS_FRAGMENT -> R.id.orderUnderUserFragment
TICKETS_FRAGMNET -> R.id.ticketsFragment
TICKETS_FRAGMENT -> R.id.ticketsFragment
NOTIFICATION_FRAGMENT -> R.id.notificationFragment
else -> R.id.eventsFragment
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import androidx.navigation.fragment.navArgs
import org.fossasia.openevent.general.event.EVENT_DETAIL_FRAGMENT
import org.fossasia.openevent.general.notification.NOTIFICATION_FRAGMENT
import org.fossasia.openevent.general.order.ORDERS_FRAGMENT
import org.fossasia.openevent.general.ticket.TICKETS_FRAGMNET
import org.fossasia.openevent.general.ticket.TICKETS_FRAGMENT
import org.jetbrains.anko.design.longSnackbar
import org.jetbrains.anko.design.snackbar

Expand Down Expand Up @@ -259,7 +259,7 @@ class SignUpFragment : Fragment() {
PROFILE_FRAGMENT -> R.id.profileFragment
EVENT_DETAIL_FRAGMENT -> R.id.eventDetailsFragment
ORDERS_FRAGMENT -> R.id.orderUnderUserFragment
TICKETS_FRAGMNET -> R.id.ticketsFragment
TICKETS_FRAGMENT -> R.id.ticketsFragment
NOTIFICATION_FRAGMENT -> R.id.notificationFragment
else -> R.id.eventsFragment
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel
import org.fossasia.openevent.general.utils.Utils.setToolbar
import org.jetbrains.anko.design.longSnackbar

const val TICKETS_FRAGMNET = "ticketsFragment"
const val TICKETS_FRAGMENT = "ticketsFragment"

class TicketsFragment : Fragment() {
private val ticketsRecyclerAdapter: TicketsRecyclerAdapter = TicketsRecyclerAdapter()
Expand Down Expand Up @@ -161,7 +161,7 @@ class TicketsFragment : Fragment() {

private fun redirectToLogin() {
findNavController(rootView).navigate(TicketsFragmentDirections.actionTicketsToAuth(
getString(R.string.log_in_first), TICKETS_FRAGMNET
getString(R.string.log_in_first), TICKETS_FRAGMENT
))
}

Expand Down