Skip to content

Commit 9e25f74

Browse files
committed
fixing some mimetype file displaying related issues
1 parent a6976c4 commit 9e25f74

File tree

1 file changed

+100
-23
lines changed

1 file changed

+100
-23
lines changed

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

Lines changed: 100 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,14 @@ import android.view.Menu
88
import android.view.MenuItem
99
import androidx.appcompat.widget.SearchView
1010
import androidx.core.view.MenuItemCompat
11+
import androidx.recyclerview.widget.GridLayoutManager
1112
import com.simplemobiletools.commons.extensions.*
1213
import com.simplemobiletools.commons.helpers.VIEW_TYPE_GRID
14+
import com.simplemobiletools.commons.helpers.VIEW_TYPE_LIST
1315
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
1416
import com.simplemobiletools.commons.models.FileDirItem
1517
import com.simplemobiletools.commons.views.MyGridLayoutManager
18+
import com.simplemobiletools.commons.views.MyRecyclerView
1619
import com.simplemobiletools.filemanager.pro.R
1720
import com.simplemobiletools.filemanager.pro.adapters.ItemsAdapter
1821
import com.simplemobiletools.filemanager.pro.dialogs.ChangeSortingDialog
@@ -28,8 +31,11 @@ import java.util.*
2831

2932
class 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

Comments
 (0)