remember the scroll state when browsing between folders

This commit is contained in:
tibbi 2016-12-04 00:29:55 +01:00
parent 7c1ede4f4a
commit 3eb48cb3b1
3 changed files with 28 additions and 5 deletions

View file

@ -1,6 +1,7 @@
package com.simplemobiletools.filemanager
val PATH = "path"
val SCROLL_STATE = "scroll_state"
// shared preferences
val PREFS_KEY = "File Manager"

View file

@ -5,11 +5,13 @@ import android.content.Intent
import android.content.pm.PackageManager
import android.os.Bundle
import android.os.Handler
import android.os.Parcelable
import android.support.v4.app.ActivityCompat
import android.view.Menu
import android.view.MenuItem
import com.simplemobiletools.filemanager.PATH
import com.simplemobiletools.filemanager.R
import com.simplemobiletools.filemanager.SCROLL_STATE
import com.simplemobiletools.filemanager.fragments.ItemsFragment
import com.simplemobiletools.filepicker.dialogs.StoragePickerDialog
import com.simplemobiletools.filepicker.extensions.getInternalStoragePath
@ -19,9 +21,12 @@ import com.simplemobiletools.filepicker.models.FileDirItem
import com.simplemobiletools.filepicker.views.Breadcrumbs
import kotlinx.android.synthetic.main.activity_main.*
import java.io.File
import java.util.*
class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Breadcrumbs.BreadcrumbsListener {
var mBasePath = getInternalStoragePath()
var latestFragment: ItemsFragment? = null
var mScrollStates = HashMap<String, Parcelable>()
companion object {
private val STORAGE_PERMISSION = 1
@ -59,10 +64,18 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
val bundle = Bundle()
bundle.putString(PATH, path)
val fragment = ItemsFragment()
fragment.arguments = bundle
fragment.setListener(this)
supportFragmentManager.beginTransaction().replace(R.id.fragment_holder, fragment).addToBackStack(path).commitAllowingStateLoss()
if (mScrollStates.containsKey(path.trimEnd('/'))) {
bundle.putParcelable(SCROLL_STATE, mScrollStates[path.trimEnd('/')])
}
if (latestFragment != null) {
mScrollStates.put(latestFragment!!.mPath.trimEnd('/'), latestFragment!!.getScrollState())
}
latestFragment = ItemsFragment()
latestFragment!!.arguments = bundle
latestFragment!!.setListener(this)
supportFragmentManager.beginTransaction().replace(R.id.fragment_holder, latestFragment).addToBackStack(path).commitAllowingStateLoss()
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {

View file

@ -5,7 +5,9 @@ import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.os.Bundle
import android.os.Parcelable
import android.support.design.widget.Snackbar
import android.support.v7.widget.LinearLayoutManager
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
@ -13,6 +15,7 @@ import android.webkit.MimeTypeMap
import com.simplemobiletools.filemanager.Config
import com.simplemobiletools.filemanager.PATH
import com.simplemobiletools.filemanager.R
import com.simplemobiletools.filemanager.SCROLL_STATE
import com.simplemobiletools.filemanager.activities.SimpleActivity
import com.simplemobiletools.filemanager.adapters.ItemsAdapter
import com.simplemobiletools.filemanager.dialogs.CreateNewItemDialog
@ -31,8 +34,8 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
lateinit var mConfig: Config
lateinit var mToBeDeleted: MutableList<String>
private var mPath = ""
private var mShowHidden = false
var mPath = ""
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?) =
inflater!!.inflate(R.layout.items_fragment, container, false)!!
@ -87,8 +90,14 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
} else {
(currAdapter as ItemsAdapter).updateItems(mItems)
}
getRecyclerLayoutManager().onRestoreInstanceState(arguments.getParcelable<Parcelable>(SCROLL_STATE))
}
fun getRecyclerLayoutManager() = (items_list.layoutManager as LinearLayoutManager)
fun getScrollState() = getRecyclerLayoutManager().onSaveInstanceState()
fun setListener(listener: ItemInteractionListener) {
mListener = listener
}