Skip to content

Commit 3eb48cb

Browse files
committed
remember the scroll state when browsing between folders
1 parent 7c1ede4 commit 3eb48cb

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

app/src/main/kotlin/com/simplemobiletools/filemanager/Constants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.simplemobiletools.filemanager
22

33
val PATH = "path"
4+
val SCROLL_STATE = "scroll_state"
45

56
// shared preferences
67
val PREFS_KEY = "File Manager"

app/src/main/kotlin/com/simplemobiletools/filemanager/activities/MainActivity.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import android.content.Intent
55
import android.content.pm.PackageManager
66
import android.os.Bundle
77
import android.os.Handler
8+
import android.os.Parcelable
89
import android.support.v4.app.ActivityCompat
910
import android.view.Menu
1011
import android.view.MenuItem
1112
import com.simplemobiletools.filemanager.PATH
1213
import com.simplemobiletools.filemanager.R
14+
import com.simplemobiletools.filemanager.SCROLL_STATE
1315
import com.simplemobiletools.filemanager.fragments.ItemsFragment
1416
import com.simplemobiletools.filepicker.dialogs.StoragePickerDialog
1517
import com.simplemobiletools.filepicker.extensions.getInternalStoragePath
@@ -19,9 +21,12 @@ import com.simplemobiletools.filepicker.models.FileDirItem
1921
import com.simplemobiletools.filepicker.views.Breadcrumbs
2022
import kotlinx.android.synthetic.main.activity_main.*
2123
import java.io.File
24+
import java.util.*
2225

2326
class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Breadcrumbs.BreadcrumbsListener {
2427
var mBasePath = getInternalStoragePath()
28+
var latestFragment: ItemsFragment? = null
29+
var mScrollStates = HashMap<String, Parcelable>()
2530

2631
companion object {
2732
private val STORAGE_PERMISSION = 1
@@ -59,10 +64,18 @@ class MainActivity : SimpleActivity(), ItemsFragment.ItemInteractionListener, Br
5964
val bundle = Bundle()
6065
bundle.putString(PATH, path)
6166

62-
val fragment = ItemsFragment()
63-
fragment.arguments = bundle
64-
fragment.setListener(this)
65-
supportFragmentManager.beginTransaction().replace(R.id.fragment_holder, fragment).addToBackStack(path).commitAllowingStateLoss()
67+
if (mScrollStates.containsKey(path.trimEnd('/'))) {
68+
bundle.putParcelable(SCROLL_STATE, mScrollStates[path.trimEnd('/')])
69+
}
70+
71+
if (latestFragment != null) {
72+
mScrollStates.put(latestFragment!!.mPath.trimEnd('/'), latestFragment!!.getScrollState())
73+
}
74+
75+
latestFragment = ItemsFragment()
76+
latestFragment!!.arguments = bundle
77+
latestFragment!!.setListener(this)
78+
supportFragmentManager.beginTransaction().replace(R.id.fragment_holder, latestFragment).addToBackStack(path).commitAllowingStateLoss()
6679
}
6780

6881
override fun onCreateOptionsMenu(menu: Menu): Boolean {

app/src/main/kotlin/com/simplemobiletools/filemanager/fragments/ItemsFragment.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@ import android.content.Intent
55
import android.graphics.Color
66
import android.net.Uri
77
import android.os.Bundle
8+
import android.os.Parcelable
89
import android.support.design.widget.Snackbar
10+
import android.support.v7.widget.LinearLayoutManager
911
import android.view.LayoutInflater
1012
import android.view.View
1113
import android.view.ViewGroup
1214
import android.webkit.MimeTypeMap
1315
import com.simplemobiletools.filemanager.Config
1416
import com.simplemobiletools.filemanager.PATH
1517
import com.simplemobiletools.filemanager.R
18+
import com.simplemobiletools.filemanager.SCROLL_STATE
1619
import com.simplemobiletools.filemanager.activities.SimpleActivity
1720
import com.simplemobiletools.filemanager.adapters.ItemsAdapter
1821
import com.simplemobiletools.filemanager.dialogs.CreateNewItemDialog
@@ -31,8 +34,8 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
3134
lateinit var mConfig: Config
3235
lateinit var mToBeDeleted: MutableList<String>
3336

34-
private var mPath = ""
3537
private var mShowHidden = false
38+
var mPath = ""
3639

3740
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?) =
3841
inflater!!.inflate(R.layout.items_fragment, container, false)!!
@@ -87,8 +90,14 @@ class ItemsFragment : android.support.v4.app.Fragment(), ItemsAdapter.ItemOperat
8790
} else {
8891
(currAdapter as ItemsAdapter).updateItems(mItems)
8992
}
93+
94+
getRecyclerLayoutManager().onRestoreInstanceState(arguments.getParcelable<Parcelable>(SCROLL_STATE))
9095
}
9196

97+
fun getRecyclerLayoutManager() = (items_list.layoutManager as LinearLayoutManager)
98+
99+
fun getScrollState() = getRecyclerLayoutManager().onSaveInstanceState()
100+
92101
fun setListener(listener: ItemInteractionListener) {
93102
mListener = listener
94103
}

0 commit comments

Comments
 (0)