mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Back button now returns to start screen. Also fix #356
This commit is contained in:
		@@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.main
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.support.v4.app.Fragment
 | 
			
		||||
import android.support.v4.app.TaskStackBuilder
 | 
			
		||||
import android.support.v4.view.GravityCompat
 | 
			
		||||
import android.view.MenuItem
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
@@ -23,6 +24,15 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
 | 
			
		||||
    val preferences: PreferencesHelper by injectLazy()
 | 
			
		||||
 | 
			
		||||
    private val startScreenId by lazy {
 | 
			
		||||
        when (preferences.startScreen()) {
 | 
			
		||||
            1 -> R.id.nav_drawer_library
 | 
			
		||||
            2 -> R.id.nav_drawer_recently_read
 | 
			
		||||
            3 -> R.id.nav_drawer_recent_updates
 | 
			
		||||
            else -> R.id.nav_drawer_library
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedState: Bundle?) {
 | 
			
		||||
        setAppTheme()
 | 
			
		||||
        super.onCreate(savedState)
 | 
			
		||||
@@ -45,28 +55,28 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
            // Make information view invisible
 | 
			
		||||
            empty_view.hide()
 | 
			
		||||
 | 
			
		||||
            when (item.itemId) {
 | 
			
		||||
                R.id.nav_drawer_library -> setFragment(LibraryFragment.newInstance())
 | 
			
		||||
                R.id.nav_drawer_recent_updates -> setFragment(RecentChaptersFragment.newInstance())
 | 
			
		||||
                R.id.nav_drawer_recent_manga -> setFragment(RecentlyReadFragment.newInstance())
 | 
			
		||||
                R.id.nav_drawer_catalogues -> setFragment(CatalogueFragment.newInstance())
 | 
			
		||||
                R.id.nav_drawer_downloads -> setFragment(DownloadFragment.newInstance())
 | 
			
		||||
                R.id.nav_drawer_settings -> startActivity(Intent(this, SettingsActivity::class.java))
 | 
			
		||||
                R.id.nav_drawer_backup -> setFragment(BackupFragment.newInstance())
 | 
			
		||||
            val id = item.itemId
 | 
			
		||||
            when (id) {
 | 
			
		||||
                R.id.nav_drawer_library -> setFragment(LibraryFragment.newInstance(), id)
 | 
			
		||||
                R.id.nav_drawer_recently_read -> setFragment(RecentlyReadFragment.newInstance(), id)
 | 
			
		||||
                R.id.nav_drawer_recent_updates -> setFragment(RecentChaptersFragment.newInstance(), id)
 | 
			
		||||
                R.id.nav_drawer_catalogues -> setFragment(CatalogueFragment.newInstance(), id)
 | 
			
		||||
                R.id.nav_drawer_downloads -> setFragment(DownloadFragment.newInstance(), id)
 | 
			
		||||
                R.id.nav_drawer_settings -> {
 | 
			
		||||
                    val intent = Intent(this, SettingsActivity::class.java)
 | 
			
		||||
                    startActivityForResult(intent, REQUEST_OPEN_SETTINGS)
 | 
			
		||||
                }
 | 
			
		||||
                R.id.nav_drawer_backup -> setFragment(BackupFragment.newInstance(), id)
 | 
			
		||||
            }
 | 
			
		||||
            drawer.closeDrawer(GravityCompat.START)
 | 
			
		||||
            true
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (savedState == null) {
 | 
			
		||||
            // Set start screen
 | 
			
		||||
            setSelectedDrawerItem(startScreenId)
 | 
			
		||||
 | 
			
		||||
            when (preferences.startScreen()) {
 | 
			
		||||
                1 -> setFragment(LibraryFragment.newInstance())
 | 
			
		||||
                2 -> setFragment(RecentlyReadFragment.newInstance())
 | 
			
		||||
                3 -> setFragment(RecentChaptersFragment.newInstance())
 | 
			
		||||
                else -> setFragment(LibraryFragment.newInstance())
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Show changelog if needed
 | 
			
		||||
            ChangelogDialogFragment.show(preferences, supportFragmentManager)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -80,23 +90,45 @@ class MainActivity : BaseActivity() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onBackPressed() {
 | 
			
		||||
        supportFragmentManager.findFragmentById(R.id.frame_container)?.let {
 | 
			
		||||
            if (it !is LibraryFragment) {
 | 
			
		||||
                nav_view.setCheckedItem(R.id.nav_drawer_library)
 | 
			
		||||
                nav_view.menu.performIdentifierAction(R.id.nav_drawer_library, 0)
 | 
			
		||||
            } else {
 | 
			
		||||
                super.onBackPressed()
 | 
			
		||||
            }
 | 
			
		||||
        } ?: super.onBackPressed()
 | 
			
		||||
        val fragment = supportFragmentManager.findFragmentById(R.id.frame_container)
 | 
			
		||||
        if (fragment != null && fragment.tag.toInt() != startScreenId) {
 | 
			
		||||
            setSelectedDrawerItem(startScreenId)
 | 
			
		||||
        } else {
 | 
			
		||||
            super.onBackPressed()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun setFragment(fragment: Fragment) {
 | 
			
		||||
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
 | 
			
		||||
        if (requestCode == REQUEST_OPEN_SETTINGS && resultCode != 0) {
 | 
			
		||||
            if (resultCode and SettingsActivity.FLAG_DATABASE_CLEARED != 0) {
 | 
			
		||||
                // If database is cleared avoid undefined behavior by recreating the stack.
 | 
			
		||||
                TaskStackBuilder.create(this)
 | 
			
		||||
                        .addNextIntent(Intent(this, MainActivity::class.java))
 | 
			
		||||
                        .startActivities()
 | 
			
		||||
            } else if (resultCode and SettingsActivity.FLAG_THEME_CHANGED != 0) {
 | 
			
		||||
                recreate()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setSelectedDrawerItem(itemId: Int, triggerAction: Boolean = true) {
 | 
			
		||||
        nav_view.setCheckedItem(itemId)
 | 
			
		||||
        if (triggerAction) {
 | 
			
		||||
            nav_view.menu.performIdentifierAction(itemId, 0)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setFragment(fragment: Fragment, itemId: Int) {
 | 
			
		||||
        supportFragmentManager.beginTransaction()
 | 
			
		||||
                .replace(R.id.frame_container, fragment)
 | 
			
		||||
                .replace(R.id.frame_container, fragment, "$itemId")
 | 
			
		||||
                .commit()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun updateEmptyView(show: Boolean, textResource: Int, drawable: Int) {
 | 
			
		||||
        if (show) empty_view.show(drawable, textResource) else empty_view.hide()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        private const val REQUEST_OPEN_SETTINGS = 200
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -16,6 +16,15 @@ class SettingsActivity : BaseActivity(),
 | 
			
		||||
 | 
			
		||||
    private lateinit var replaceFragmentStrategy: ReplaceFragment
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Flags to send to the parent activity for reacting to preference changes.
 | 
			
		||||
     */
 | 
			
		||||
    var parentFlags = 0
 | 
			
		||||
        set(value) {
 | 
			
		||||
            field = field or value
 | 
			
		||||
            setResult(field)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    override fun onCreate(savedState: Bundle?) {
 | 
			
		||||
        setAppTheme()
 | 
			
		||||
        super.onCreate(savedState)
 | 
			
		||||
@@ -29,10 +38,16 @@ class SettingsActivity : BaseActivity(),
 | 
			
		||||
            supportFragmentManager.beginTransaction()
 | 
			
		||||
                .add(R.id.settings_content, SettingsFragment.newInstance(null), "Settings")
 | 
			
		||||
                .commit()
 | 
			
		||||
        } else {
 | 
			
		||||
            parentFlags = savedState.getInt(SettingsActivity::parentFlags.name)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        setupToolbar(toolbar, backNavigation = false)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onSaveInstanceState(outState: Bundle) {
 | 
			
		||||
        outState.putInt(SettingsActivity::parentFlags.name, parentFlags)
 | 
			
		||||
        super.onSaveInstanceState(outState)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onOptionsItemSelected(item: MenuItem): Boolean {
 | 
			
		||||
@@ -60,4 +75,9 @@ class SettingsActivity : BaseActivity(),
 | 
			
		||||
        return true
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        const val FLAG_THEME_CHANGED = 0x1
 | 
			
		||||
        const val FLAG_DATABASE_CLEARED = 0x2
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -97,6 +97,7 @@ class SettingsAdvancedFragment : SettingsFragment() {
 | 
			
		||||
                .positiveText(android.R.string.yes)
 | 
			
		||||
                .negativeText(android.R.string.no)
 | 
			
		||||
                .onPositive { dialog, which ->
 | 
			
		||||
                    (activity as SettingsActivity).parentFlags = SettingsActivity.FLAG_DATABASE_CLEARED
 | 
			
		||||
                    db.deleteMangasNotInLibrary().executeAsBlocking()
 | 
			
		||||
                    activity.toast(R.string.clear_database_completed)
 | 
			
		||||
                }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,6 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.setting
 | 
			
		||||
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.support.v4.app.TaskStackBuilder
 | 
			
		||||
import android.support.v7.preference.Preference
 | 
			
		||||
import android.support.v7.preference.PreferenceFragmentCompat
 | 
			
		||||
import android.support.v7.preference.XpPreferenceFragment
 | 
			
		||||
@@ -67,16 +65,14 @@ class SettingsGeneralFragment : SettingsFragment(),
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        themePreference.setOnPreferenceChangeListener { preference, newValue ->
 | 
			
		||||
            // Rebuild activity's to apply themes.
 | 
			
		||||
            TaskStackBuilder.create(context)
 | 
			
		||||
                    .addNextIntentWithParentStack(Intent(activity.intent))
 | 
			
		||||
                    .startActivities()
 | 
			
		||||
            (activity as SettingsActivity).parentFlags = SettingsActivity.FLAG_THEME_CHANGED
 | 
			
		||||
            activity.recreate()
 | 
			
		||||
            true
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    override fun onPreferenceDisplayDialog(p0: PreferenceFragmentCompat?, p: Preference): Boolean {
 | 
			
		||||
        if (p.key == getString(R.string.pref_library_columns_dialog_key)) {
 | 
			
		||||
        if (p === columnsPreference) {
 | 
			
		||||
            val fragment = LibraryColumnsDialog.newInstance(p)
 | 
			
		||||
            fragment.setTargetFragment(this, 0)
 | 
			
		||||
            fragment.show(fragmentManager, null)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@
 | 
			
		||||
            android:icon="@drawable/ic_book_black_24dp"
 | 
			
		||||
            android:title="@string/label_library" />
 | 
			
		||||
        <item
 | 
			
		||||
            android:id="@+id/nav_drawer_recent_manga"
 | 
			
		||||
            android:id="@+id/nav_drawer_recently_read"
 | 
			
		||||
            android:icon="@drawable/ic_glasses_black_24dp"
 | 
			
		||||
            android:title="@string/label_recent_manga"/>
 | 
			
		||||
        <item
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user