@@ -8,11 +8,14 @@ import android.view.Menu
88import android.view.MenuItem
99import androidx.appcompat.widget.SearchView
1010import androidx.core.view.MenuItemCompat
11+ import androidx.recyclerview.widget.GridLayoutManager
1112import com.simplemobiletools.commons.extensions.*
1213import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID
14+ import com.simplemobiletools.commons.helpers.VIEW_TYPE_LIST
1315import com.simplemobiletools.commons.helpers.ensureBackgroundThread
1416import com.simplemobiletools.commons.models.FileDirItem
1517import com.simplemobiletools.commons.views.MyGridLayoutManager
18+ import com.simplemobiletools.commons.views.MyRecyclerView
1619import com.simplemobiletools.filemanager.pro.R
1720import com.simplemobiletools.filemanager.pro.adapters.ItemsAdapter
1821import com.simplemobiletools.filemanager.pro.dialogs.ChangeSortingDialog
@@ -28,8 +31,11 @@ import java.util.*
2831
2932class MimeTypesActivity : SimpleActivity (), ItemOperationsListener {
3033 private var isSearchOpen = false
31- private var searchMenuItem: MenuItem ? = null
3234 private var currentMimeType = " "
35+ private var searchMenuItem: MenuItem ? = null
36+ private var zoomListener: MyRecyclerView .MyZoomListener ? = null
37+ private var storedItems = ArrayList <ListItem >()
38+ private var currentViewType = VIEW_TYPE_LIST
3339
3440 override fun onCreate (savedInstanceState : Bundle ? ) {
3541 super .onCreate(savedInstanceState)
@@ -122,14 +128,14 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
122128 }
123129
124130 override fun increaseColumnCount () {
125- if (config.getFolderViewType(currentMimeType) == VIEW_TYPE_GRID ) {
131+ if (currentViewType == VIEW_TYPE_GRID ) {
126132 config.fileColumnCnt = ++ (mimetypes_list.layoutManager as MyGridLayoutManager ).spanCount
127133 columnCountChanged()
128134 }
129135 }
130136
131137 override fun reduceColumnCount () {
132- if (config.getFolderViewType(currentMimeType) == VIEW_TYPE_GRID ) {
138+ if (currentViewType == VIEW_TYPE_GRID ) {
133139 config.fileColumnCnt = -- (mimetypes_list.layoutManager as MyGridLayoutManager ).spanCount
134140 columnCountChanged()
135141 }
@@ -235,27 +241,31 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
235241 callback(fileDirItems)
236242 }
237243
238- private fun setupAdapter ( listItems : ArrayList <ListItem >) {
244+ private fun addItems ( items : ArrayList <ListItem >) {
239245 FileDirItem .sorting = config.getFolderSorting(currentMimeType)
240- listItems .sort()
246+ items .sort()
241247
242- runOnUiThread {
243- ItemsAdapter (this as SimpleActivity , listItems, this , mimetypes_list, false , items_fastscroller, null ) {
244- tryOpenPathIntent((it as ListItem ).path, false )
245- }.apply {
246- mimetypes_list.adapter = this
247- }
248+ if (isDestroyed || isFinishing) {
249+ return
250+ }
248251
249- if (areSystemAnimationsEnabled) {
250- mimetypes_list.scheduleLayoutAnimation()
251- }
252+ storedItems = items
253+ ItemsAdapter (this as SimpleActivity , storedItems, this , mimetypes_list, false , items_fastscroller, null ) {
254+ tryOpenPathIntent((it as ListItem ).path, false )
255+ }.apply {
256+ setupZoomListener(zoomListener)
257+ mimetypes_list.adapter = this
258+ }
252259
253- val dateFormat = config.dateFormat
254- val timeFormat = getTimeFormat()
255- items_fastscroller.setViews(mimetypes_list) {
256- val listItem = getRecyclerAdapter()?.listItems?.getOrNull(it)
257- items_fastscroller.updateBubbleText(listItem?.getBubbleText(this , dateFormat, timeFormat) ? : " " )
258- }
260+ if (areSystemAnimationsEnabled) {
261+ mimetypes_list.scheduleLayoutAnimation()
262+ }
263+
264+ val dateFormat = config.dateFormat
265+ val timeFormat = getTimeFormat()
266+ items_fastscroller.setViews(mimetypes_list) {
267+ val listItem = getRecyclerAdapter()?.listItems?.getOrNull(it)
268+ items_fastscroller.updateBubbleText(listItem?.getBubbleText(this , dateFormat, timeFormat) ? : " " )
259269 }
260270 }
261271
@@ -279,20 +289,27 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
279289 private fun changeViewType () {
280290 ChangeViewTypeDialog (this , currentMimeType, true ) {
281291 recreateList()
292+ setupLayoutManager()
282293 }
283294 }
284295
285296 private fun reFetchItems () {
286297 getProperFileDirItems { fileDirItems ->
287298 val listItems = getListItemsFromFileDirItems(fileDirItems)
288- setupAdapter(listItems)
299+
300+ runOnUiThread {
301+ addItems(listItems)
302+ if (currentViewType != config.getFolderViewType(currentMimeType)) {
303+ setupLayoutManager()
304+ }
305+ }
289306 }
290307 }
291308
292309 private fun recreateList () {
293310 val listItems = getRecyclerAdapter()?.listItems
294311 if (listItems != null ) {
295- setupAdapter (listItems as ArrayList <ListItem >)
312+ addItems (listItems as ArrayList <ListItem >)
296313 }
297314 }
298315
@@ -312,6 +329,64 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
312329 items_fastscroller.setScrollToY(mimetypes_list.computeVerticalScrollOffset())
313330 }
314331
332+ private fun setupLayoutManager () {
333+ if (config.getFolderViewType(currentMimeType) == VIEW_TYPE_GRID ) {
334+ currentViewType = VIEW_TYPE_GRID
335+ setupGridLayoutManager()
336+ } else {
337+ currentViewType = VIEW_TYPE_LIST
338+ setupListLayoutManager()
339+ }
340+
341+ mimetypes_list.adapter = null
342+ initZoomListener()
343+ addItems(storedItems)
344+ }
345+
346+ private fun setupGridLayoutManager () {
347+ val layoutManager = mimetypes_list.layoutManager as MyGridLayoutManager
348+ layoutManager.spanCount = config.fileColumnCnt ? : 3
349+
350+ layoutManager.spanSizeLookup = object : GridLayoutManager .SpanSizeLookup () {
351+ override fun getSpanSize (position : Int ): Int {
352+ return if (getRecyclerAdapter()?.isASectionTitle(position) == true ) {
353+ layoutManager.spanCount
354+ } else {
355+ 1
356+ }
357+ }
358+ }
359+ }
360+
361+ private fun setupListLayoutManager () {
362+ val layoutManager = mimetypes_list.layoutManager as MyGridLayoutManager
363+ layoutManager.spanCount = 1
364+ zoomListener = null
365+ }
366+
367+ private fun initZoomListener () {
368+ if (config.getFolderViewType(currentMimeType) == VIEW_TYPE_GRID ) {
369+ val layoutManager = mimetypes_list.layoutManager as MyGridLayoutManager
370+ zoomListener = object : MyRecyclerView .MyZoomListener {
371+ override fun zoomIn () {
372+ if (layoutManager.spanCount > 1 ) {
373+ reduceColumnCount()
374+ getRecyclerAdapter()?.finishActMode()
375+ }
376+ }
377+
378+ override fun zoomOut () {
379+ if (layoutManager.spanCount < MAX_COLUMN_COUNT ) {
380+ increaseColumnCount()
381+ getRecyclerAdapter()?.finishActMode()
382+ }
383+ }
384+ }
385+ } else {
386+ zoomListener = null
387+ }
388+ }
389+
315390 private fun tryToggleTemporarilyShowHidden () {
316391 if (config.temporarilyShowHidden) {
317392 toggleTemporarilyShowHidden(false )
@@ -324,6 +399,8 @@ class MimeTypesActivity : SimpleActivity(), ItemOperationsListener {
324399
325400 private fun toggleTemporarilyShowHidden (show : Boolean ) {
326401 config.temporarilyShowHidden = show
327- reFetchItems()
402+ ensureBackgroundThread {
403+ reFetchItems()
404+ }
328405 }
329406}
0 commit comments