From 0a212c78c9d90e20f2bacee4c0b466043f445950 Mon Sep 17 00:00:00 2001 From: liveHarshit Date: Sat, 8 Dec 2018 22:52:55 +0530 Subject: [PATCH] fix: Move load fragments logic to utilities (#689) Fixes #689 --- .../openevent/general/AuthActivity.kt | 13 +++--- .../openevent/general/MainActivity.kt | 40 ++++++------------- .../fossasia/openevent/general/utils/Utils.kt | 26 ++++++++++++ 3 files changed, 44 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/org/fossasia/openevent/general/AuthActivity.kt b/app/src/main/java/org/fossasia/openevent/general/AuthActivity.kt index 1f8c91d394..5b3526dc89 100644 --- a/app/src/main/java/org/fossasia/openevent/general/AuthActivity.kt +++ b/app/src/main/java/org/fossasia/openevent/general/AuthActivity.kt @@ -9,6 +9,7 @@ import android.view.MenuItem import kotlinx.android.synthetic.main.activity_auth.* import org.fossasia.openevent.general.auth.LoginFragment import org.fossasia.openevent.general.auth.SignUpFragment +import org.fossasia.openevent.general.utils.Utils.loadFragment class AuthActivity : AppCompatActivity() { @@ -19,13 +20,13 @@ class AuthActivity : AppCompatActivity() { R.id.navigation_login -> { supportActionBar?.title = "Login" fragment = LoginFragment() - loadFragment(fragment) + setFragment(fragment) return@OnNavigationItemSelectedListener true } R.id.navigation_sign_up -> { supportActionBar?.title = "Sign Up" fragment = SignUpFragment() - loadFragment(fragment) + setFragment(fragment) return@OnNavigationItemSelectedListener true } } @@ -43,15 +44,13 @@ class AuthActivity : AppCompatActivity() { supportActionBar?.title = "Login" - loadFragment(LoginFragment()) + setFragment(LoginFragment()) } - private fun loadFragment(fragment: Fragment) { + private fun setFragment(fragment: Fragment) { if (bundle != null) fragment.arguments = bundle - supportFragmentManager.beginTransaction() - .replace(R.id.frameContainerAuth, fragment) - .commit() + loadFragment(supportFragmentManager, fragment, frameContainerAuth.id, false) } override fun onOptionsItemSelected(item: MenuItem?): Boolean { diff --git a/app/src/main/java/org/fossasia/openevent/general/MainActivity.kt b/app/src/main/java/org/fossasia/openevent/general/MainActivity.kt index f23a6e7707..443554ecbf 100644 --- a/app/src/main/java/org/fossasia/openevent/general/MainActivity.kt +++ b/app/src/main/java/org/fossasia/openevent/general/MainActivity.kt @@ -17,7 +17,8 @@ import org.fossasia.openevent.general.order.LAUNCH_TICKETS import org.fossasia.openevent.general.order.OrdersUnderUserFragment import org.fossasia.openevent.general.order.TICKETS import org.fossasia.openevent.general.search.SearchFragment -import timber.log.Timber +import org.fossasia.openevent.general.utils.Utils.checkAndLoadFragment +import org.fossasia.openevent.general.utils.Utils.loadFragment private const val TO_SEARCH: String = "ToSearchFragment" @@ -29,31 +30,31 @@ class MainActivity : AppCompatActivity() { R.id.navigation_events -> { supportActionBar?.title = "Events" fragment = EventsFragment() - checkAndLoadFragment(fragment) + checkAndLoadFragment(supportFragmentManager, fragment, frameContainer.id) return@OnNavigationItemSelectedListener true } R.id.navigation_search -> { supportActionBar?.title = "Search" fragment = SearchFragment() - checkAndLoadFragment(fragment) + checkAndLoadFragment(supportFragmentManager, fragment, frameContainer.id) return@OnNavigationItemSelectedListener true } R.id.navigation_profile -> { supportActionBar?.title = "Profile" fragment = ProfileFragment() - checkAndLoadFragment(fragment) + checkAndLoadFragment(supportFragmentManager, fragment, frameContainer.id) return@OnNavigationItemSelectedListener true } R.id.navigation_favorite -> { supportActionBar?.title = "Likes" fragment = FavoriteFragment() - checkAndLoadFragment(fragment) + checkAndLoadFragment(supportFragmentManager, fragment, frameContainer.id) return@OnNavigationItemSelectedListener true } R.id.navigation_tickets -> { supportActionBar?.title = "Tickets" fragment = OrdersUnderUserFragment() - checkAndLoadFragment(fragment) + checkAndLoadFragment(supportFragmentManager, fragment, frameContainer.id) return@OnNavigationItemSelectedListener true } } @@ -72,7 +73,7 @@ class MainActivity : AppCompatActivity() { var openEventsFragment = true if (bundle != null && bundle.getBoolean(TO_SEARCH)) { - loadFragment(SearchFragment()) + loadFragment(supportFragmentManager, SearchFragment(), frameContainer.id) supportActionBar?.title = "Search" navigation.selectedItemId = navigation_search openEventsFragment = false @@ -81,19 +82,19 @@ class MainActivity : AppCompatActivity() { if (bundle != null && bundle.getBoolean(LAUNCH_ATTENDEE)) { val fragment = AttendeeFragment() fragment.arguments = bundle - loadFragment(fragment) + loadFragment(supportFragmentManager, fragment, frameContainer.id) openEventsFragment = false } if (bundle != null && (bundle.getBoolean(TICKETS) || bundle.getBoolean(LAUNCH_TICKETS))) { - loadFragment(OrdersUnderUserFragment()) + loadFragment(supportFragmentManager, OrdersUnderUserFragment(), frameContainer.id) supportActionBar?.title = "Tickets" navigation.selectedItemId = R.id.navigation_tickets openEventsFragment = false } if (savedInstanceState == null && openEventsFragment) - loadFragment(EventsFragment()) + loadFragment(supportFragmentManager, EventsFragment(), frameContainer.id) } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -108,23 +109,6 @@ class MainActivity : AppCompatActivity() { return super.onPrepareOptionsMenu(menu) } - private fun checkAndLoadFragment(fragment: Fragment) { - val savedFragment = supportFragmentManager.findFragmentByTag(fragment::class.java.name) - if (savedFragment != null) { - loadFragment(savedFragment) - Timber.d("Loading fragment from stack ${fragment::class.java}") - } else { - loadFragment(fragment) - } - } - - private fun loadFragment(fragment: Fragment) { - supportFragmentManager.beginTransaction() - .replace(R.id.frameContainer, fragment, fragment::class.java.name) - .addToBackStack(null) - .commit() - } - override fun onBackPressed() { val currentFragment = this.supportFragmentManager.findFragmentById(R.id.frameContainer) val rootFragment = this.supportFragmentManager.findFragmentById(R.id.rootLayout) @@ -136,7 +120,7 @@ class MainActivity : AppCompatActivity() { is FavoriteFragment, is OrdersUnderUserFragment, is ProfileFragment -> { - loadFragment(EventsFragment()) + loadFragment(supportFragmentManager, EventsFragment(), frameContainer.id) navigation.selectedItemId = navigation_events } is EventsFragment -> finish() diff --git a/app/src/main/java/org/fossasia/openevent/general/utils/Utils.kt b/app/src/main/java/org/fossasia/openevent/general/utils/Utils.kt index 59979f5786..c3ce8fbfa9 100644 --- a/app/src/main/java/org/fossasia/openevent/general/utils/Utils.kt +++ b/app/src/main/java/org/fossasia/openevent/general/utils/Utils.kt @@ -5,11 +5,14 @@ import android.content.Context import android.graphics.BitmapFactory import android.net.Uri import android.support.customtabs.CustomTabsIntent +import android.support.v4.app.Fragment +import android.support.v4.app.FragmentManager import android.support.v4.content.ContextCompat import android.view.View import android.view.inputmethod.InputMethodManager import android.widget.ProgressBar import org.fossasia.openevent.general.R +import timber.log.Timber object Utils { @@ -43,4 +46,27 @@ object Utils { val inputManager: InputMethodManager = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputManager.hideSoftInputFromWindow(view.windowToken, InputMethodManager.SHOW_FORCED) } + + fun checkAndLoadFragment(fragmentManager: FragmentManager, + fragment: Fragment, + frameLayout: Int, + addToBackStack: Boolean = true) { + val savedFragment = fragmentManager.findFragmentByTag(fragment::class.java.name) + if (savedFragment != null) { + loadFragment(fragmentManager, savedFragment, frameLayout, addToBackStack) + Timber.d("Loading fragment from stack ${fragment::class.java}") + } else { + loadFragment(fragmentManager, fragment, frameLayout, addToBackStack) + } + } + + fun loadFragment(fragmentManager: FragmentManager, + fragment: Fragment, + frameLayout: Int, + addToBackStack: Boolean = true) { + val fragmentTransaction = fragmentManager.beginTransaction() + .replace(frameLayout, fragment, fragment::class.java.name) + if (addToBackStack) fragmentTransaction.addToBackStack(null) + fragmentTransaction.commit() + } }