Skip to content

Commit 3f849da

Browse files
committed
allow changing the column count with gestures and menu buttons
1 parent 07ba82f commit 3f849da

File tree

6 files changed

+81
-2
lines changed

6 files changed

+81
-2
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ android {
5858
}
5959

6060
dependencies {
61-
implementation 'com.simplemobiletools:commons:5.31.15'
61+
implementation 'com.simplemobiletools:commons:5.31.16'
6262
implementation 'com.github.Stericson:RootTools:df729dcb13'
6363
implementation 'com.github.Stericson:RootShell:1.6'
6464
implementation 'com.alexvasilkov:gesture-views:2.5.2'

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import com.simplemobiletools.filemanager.pro.dialogs.ChangeViewTypeDialog
2525
import com.simplemobiletools.filemanager.pro.extensions.config
2626
import com.simplemobiletools.filemanager.pro.extensions.tryOpenPathIntent
2727
import com.simplemobiletools.filemanager.pro.fragments.ItemsFragment
28+
import com.simplemobiletools.filemanager.pro.helpers.MAX_COLUMN_COUNT
2829
import com.simplemobiletools.filemanager.pro.helpers.RootHelpers
2930
import com.stericson.RootTools.RootTools
3031
import kotlinx.android.synthetic.main.activity_main.*
@@ -95,6 +96,9 @@ class MainActivity : SimpleActivity() {
9596

9697
findItem(R.id.temporarily_show_hidden).isVisible = !config.shouldShowHidden
9798
findItem(R.id.stop_showing_hidden).isVisible = config.temporarilyShowHidden
99+
100+
findItem(R.id.increase_column_count).isVisible = config.viewType == VIEW_TYPE_GRID && config.fileColumnCnt < MAX_COLUMN_COUNT
101+
findItem(R.id.reduce_column_count).isVisible = config.viewType == VIEW_TYPE_GRID && config.fileColumnCnt > 1
98102
}
99103

100104
return true
@@ -111,6 +115,8 @@ class MainActivity : SimpleActivity() {
111115
R.id.change_view_type -> changeViewType()
112116
R.id.temporarily_show_hidden -> tryToggleTemporarilyShowHidden()
113117
R.id.stop_showing_hidden -> tryToggleTemporarilyShowHidden()
118+
R.id.increase_column_count -> fragment.increaseColumnCount()
119+
R.id.reduce_column_count -> fragment.reduceColumnCount()
114120
R.id.settings -> startActivity(Intent(applicationContext, SettingsActivity::class.java))
115121
R.id.about -> launchAbout()
116122
else -> return super.onOptionsItemSelected(item)

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

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import com.simplemobiletools.commons.helpers.isRPlus
1616
import com.simplemobiletools.commons.models.FileDirItem
1717
import com.simplemobiletools.commons.views.Breadcrumbs
1818
import com.simplemobiletools.commons.views.MyGridLayoutManager
19+
import com.simplemobiletools.commons.views.MyRecyclerView
1920
import com.simplemobiletools.filemanager.pro.R
2021
import com.simplemobiletools.filemanager.pro.activities.MainActivity
2122
import com.simplemobiletools.filemanager.pro.activities.SimpleActivity
@@ -24,6 +25,7 @@ import com.simplemobiletools.filemanager.pro.dialogs.CreateNewItemDialog
2425
import com.simplemobiletools.filemanager.pro.extensions.config
2526
import com.simplemobiletools.filemanager.pro.extensions.isPathOnRoot
2627
import com.simplemobiletools.filemanager.pro.extensions.tryOpenPathIntent
28+
import com.simplemobiletools.filemanager.pro.helpers.MAX_COLUMN_COUNT
2729
import com.simplemobiletools.filemanager.pro.helpers.PATH
2830
import com.simplemobiletools.filemanager.pro.helpers.RootHelpers
2931
import com.simplemobiletools.filemanager.pro.interfaces.ItemOperationsListener
@@ -45,6 +47,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
4547
private var isSearchOpen = false
4648
private var lastSearchedText = ""
4749
private var scrollStates = HashMap<String, Parcelable>()
50+
private var zoomListener: MyRecyclerView.MyZoomListener? = null
4851

4952
private var storedItems = ArrayList<ListItem>()
5053
private var storedTextColor = 0
@@ -69,6 +72,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
6972
breadcrumbs.updateFontSize(context!!.getTextSize())
7073
}
7174
setupLayoutManager(false)
75+
initZoomListener()
7276
}
7377

7478
override fun onSaveInstanceState(outState: Bundle) {
@@ -173,6 +177,7 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
173177
ItemsAdapter(activity as SimpleActivity, storedItems, this@ItemsFragment, items_list, isPickMultipleIntent, items_fastscroller) {
174178
itemClicked(it as FileDirItem)
175179
}.apply {
180+
setupZoomListener(zoomListener)
176181
items_list.adapter = this
177182
}
178183

@@ -421,12 +426,50 @@ class ItemsFragment : Fragment(), ItemOperationsListener, Breadcrumbs.Breadcrumb
421426

422427
private fun setupGridLayoutManager() {
423428
val layoutManager = mView.items_list.layoutManager as MyGridLayoutManager
424-
layoutManager.spanCount = 4
429+
layoutManager.spanCount = context?.config?.fileColumnCnt ?: 3
425430
}
426431

427432
private fun setupListLayoutManager() {
428433
val layoutManager = mView.items_list.layoutManager as MyGridLayoutManager
429434
layoutManager.spanCount = 1
435+
zoomListener = null
436+
}
437+
438+
private fun initZoomListener() {
439+
if (context?.config?.viewType == VIEW_TYPE_GRID) {
440+
val layoutManager = mView.items_list.layoutManager as MyGridLayoutManager
441+
zoomListener = object : MyRecyclerView.MyZoomListener {
442+
override fun zoomIn() {
443+
if (layoutManager.spanCount > 1) {
444+
reduceColumnCount()
445+
getRecyclerAdapter()?.finishActMode()
446+
}
447+
}
448+
449+
override fun zoomOut() {
450+
if (layoutManager.spanCount < MAX_COLUMN_COUNT) {
451+
increaseColumnCount()
452+
getRecyclerAdapter()?.finishActMode()
453+
}
454+
}
455+
}
456+
} else {
457+
zoomListener = null
458+
}
459+
}
460+
461+
fun increaseColumnCount() {
462+
context?.config?.fileColumnCnt = ++(mView.items_list.layoutManager as MyGridLayoutManager).spanCount
463+
columnCountChanged()
464+
}
465+
466+
fun reduceColumnCount() {
467+
context?.config?.fileColumnCnt = --(mView.items_list.layoutManager as MyGridLayoutManager).spanCount
468+
columnCountChanged()
469+
}
470+
471+
private fun columnCountChanged() {
472+
mView.items_list.adapter?.notifyDataSetChanged()
430473
}
431474

432475
override fun breadcrumbClicked(id: Int) {

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/helpers/Config.kt

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

33
import android.content.Context
4+
import android.content.res.Configuration
45
import com.simplemobiletools.commons.extensions.getInternalStoragePath
56
import com.simplemobiletools.commons.helpers.BaseConfig
67
import com.simplemobiletools.commons.helpers.VIEW_TYPE_LIST
@@ -90,4 +91,22 @@ class Config(context: Context) : BaseConfig(context) {
9091
}
9192

9293
fun hasCustomViewType(path: String) = prefs.contains(VIEW_TYPE_PREFIX + path.toLowerCase())
94+
95+
var fileColumnCnt: Int
96+
get() = prefs.getInt(getFileColumnsField(), getDefaultFileColumnCount())
97+
set(fileColumnCnt) = prefs.edit().putInt(getFileColumnsField(), fileColumnCnt).apply()
98+
99+
private fun getFileColumnsField(): String {
100+
val isPortrait = context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT
101+
return if (isPortrait) {
102+
FILE_COLUMN_CNT
103+
} else {
104+
FILE_LANDSCAPE_COLUMN_CNT
105+
}
106+
}
107+
108+
private fun getDefaultFileColumnCount(): Int {
109+
val isPortrait = context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT
110+
return if (isPortrait) 3 else 5
111+
}
93112
}

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

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

33
const val PATH = "path"
4+
const val MAX_COLUMN_COUNT = 20
45

56
// shared preferences
67
const val SHOW_HIDDEN = "show_hidden"
@@ -11,6 +12,8 @@ const val ENABLE_ROOT_ACCESS = "enable_root_access"
1112
const val EDITOR_TEXT_ZOOM = "editor_text_zoom"
1213
const val VIEW_TYPE = "view_type"
1314
const val VIEW_TYPE_PREFIX = "view_type_folder_"
15+
const val FILE_COLUMN_CNT = "file_column_cnt"
16+
const val FILE_LANDSCAPE_COLUMN_CNT = "file_landscape_column_cnt"
1417

1518
// open as
1619
const val OPEN_AS_DEFAULT = 0

app/src/main/res/menu/menu.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@
4848
android:id="@+id/stop_showing_hidden"
4949
android:title="@string/stop_showing_hidden"
5050
app:showAsAction="never"/>
51+
<item
52+
android:id="@+id/increase_column_count"
53+
android:title="@string/increase_column_count"
54+
app:showAsAction="never"/>
55+
<item
56+
android:id="@+id/reduce_column_count"
57+
android:title="@string/reduce_column_count"
58+
app:showAsAction="never"/>
5159
<item
5260
android:id="@+id/settings"
5361
android:title="@string/settings"

0 commit comments

Comments
 (0)