adding the Recents tab
This commit is contained in:
parent
eb5e565739
commit
a50977cb33
8 changed files with 102 additions and 30 deletions
|
@ -26,12 +26,16 @@ import com.simplemobiletools.filemanager.pro.dialogs.ChangeSortingDialog
|
|||
import com.simplemobiletools.filemanager.pro.dialogs.ChangeViewTypeDialog
|
||||
import com.simplemobiletools.filemanager.pro.extensions.config
|
||||
import com.simplemobiletools.filemanager.pro.extensions.tryOpenPathIntent
|
||||
import com.simplemobiletools.filemanager.pro.fragments.MyViewPagerFragment
|
||||
import com.simplemobiletools.filemanager.pro.helpers.MAX_COLUMN_COUNT
|
||||
import com.simplemobiletools.filemanager.pro.helpers.RootHelpers
|
||||
import com.simplemobiletools.filemanager.pro.helpers.TAB_FILES
|
||||
import com.simplemobiletools.filemanager.pro.helpers.TAB_RECENTS
|
||||
import com.stericson.RootTools.RootTools
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import kotlinx.android.synthetic.main.items_fragment.*
|
||||
import kotlinx.android.synthetic.main.items_fragment.view.*
|
||||
import kotlinx.android.synthetic.main.recents_fragment.*
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
|
||||
|
@ -59,6 +63,7 @@ class MainActivity : SimpleActivity() {
|
|||
handleAppPasswordProtection {
|
||||
mWasProtectionHandled = it
|
||||
if (it) {
|
||||
initFragments()
|
||||
mIsPasswordProtectionPending = false
|
||||
tryInitFileManager()
|
||||
checkWhatsNewDialog()
|
||||
|
@ -80,13 +85,13 @@ class MainActivity : SimpleActivity() {
|
|||
|
||||
if (storedFontSize != config.fontSize) {
|
||||
getAllFragments().forEach {
|
||||
it.updateFontSize()
|
||||
it?.setupFontSize()
|
||||
}
|
||||
}
|
||||
|
||||
if (storedDateFormat != config.dateFormat || storedTimeFormat != getTimeFormat()) {
|
||||
getAllFragments().forEach {
|
||||
it.updateDateTimeFormat()
|
||||
it?.setupDateTimeFormat()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -97,6 +102,10 @@ class MainActivity : SimpleActivity() {
|
|||
main_tabs_holder.background = ColorDrawable(config.backgroundColor)
|
||||
main_tabs_holder.setSelectedTabIndicatorColor(getAdjustedPrimaryColor())
|
||||
main_tabs_holder.getTabAt(main_view_pager.currentItem)?.icon?.applyColorFilter(getAdjustedPrimaryColor())
|
||||
|
||||
if (main_view_pager.adapter == null) {
|
||||
initFragments()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
|
@ -106,6 +115,7 @@ class MainActivity : SimpleActivity() {
|
|||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
config.lastUsedViewPagerPage = main_view_pager.currentItem
|
||||
config.temporarilyShowHidden = false
|
||||
}
|
||||
|
||||
|
@ -172,10 +182,10 @@ class MainActivity : SimpleActivity() {
|
|||
val path = savedInstanceState.getString(PICKED_PATH) ?: internalStoragePath
|
||||
|
||||
if (main_view_pager.adapter == null) {
|
||||
initFragments()
|
||||
main_view_pager.onGlobalLayout {
|
||||
restorePath(path)
|
||||
}
|
||||
updateTabColors()
|
||||
} else {
|
||||
restorePath(path)
|
||||
}
|
||||
|
@ -244,7 +254,7 @@ class MainActivity : SimpleActivity() {
|
|||
checkOTGPath()
|
||||
if (it) {
|
||||
if (main_view_pager.adapter == null) {
|
||||
main_view_pager.adapter = ViewPagerAdapter(this)
|
||||
initFragments()
|
||||
}
|
||||
|
||||
main_view_pager.onGlobalLayout {
|
||||
|
@ -287,6 +297,7 @@ class MainActivity : SimpleActivity() {
|
|||
|
||||
private fun initFragments() {
|
||||
main_view_pager.adapter = ViewPagerAdapter(this)
|
||||
main_view_pager.currentItem = config.lastUsedViewPagerPage
|
||||
main_view_pager.onPageChangeListener {
|
||||
main_tabs_holder.getTabAt(it)?.select()
|
||||
invalidateOptionsMenu()
|
||||
|
@ -322,6 +333,13 @@ class MainActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun updateTabColors() {
|
||||
getInactiveTabIndexes(main_view_pager.currentItem).forEach {
|
||||
main_tabs_holder.getTabAt(it)?.icon?.applyColorFilter(config.textColor)
|
||||
}
|
||||
main_tabs_holder.getTabAt(main_view_pager.currentItem)?.icon?.applyColorFilter(getAdjustedPrimaryColor())
|
||||
}
|
||||
|
||||
private fun checkOTGPath() {
|
||||
ensureBackgroundThread {
|
||||
if (!config.wasOTGHandled && hasPermission(PERMISSION_WRITE_STORAGE) && hasOTGConnected() && config.OTGPath.isEmpty()) {
|
||||
|
@ -512,9 +530,9 @@ class MainActivity : SimpleActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
private fun getInactiveTabIndexes(activeIndex: Int) = arrayListOf(0, 1).filter { it != activeIndex }
|
||||
private fun getInactiveTabIndexes(activeIndex: Int) = arrayListOf(TAB_FILES, TAB_RECENTS).filter { it != activeIndex }
|
||||
|
||||
private fun getAllFragments() = arrayListOf(items_fragment)
|
||||
private fun getAllFragments(): ArrayList<MyViewPagerFragment?> = arrayListOf(items_fragment, recents_fragment)
|
||||
|
||||
private fun getCurrentFragment() = items_fragment
|
||||
|
||||
|
|
|
@ -7,7 +7,8 @@ import com.simplemobiletools.commons.extensions.getAdjustedPrimaryColor
|
|||
import com.simplemobiletools.filemanager.pro.R
|
||||
import com.simplemobiletools.filemanager.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.filemanager.pro.extensions.config
|
||||
import com.simplemobiletools.filemanager.pro.fragments.ItemsFragment
|
||||
import com.simplemobiletools.filemanager.pro.fragments.MyViewPagerFragment
|
||||
import com.simplemobiletools.filemanager.pro.helpers.TAB_FILES
|
||||
|
||||
class ViewPagerAdapter(val activity: SimpleActivity) : PagerAdapter() {
|
||||
override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
||||
|
@ -15,7 +16,7 @@ class ViewPagerAdapter(val activity: SimpleActivity) : PagerAdapter() {
|
|||
val view = activity.layoutInflater.inflate(layout, container, false)
|
||||
container.addView(view)
|
||||
|
||||
(view as ItemsFragment).apply {
|
||||
(view as MyViewPagerFragment).apply {
|
||||
setupFragment(activity)
|
||||
setupColors(activity.config.textColor, activity.getAdjustedPrimaryColor())
|
||||
}
|
||||
|
@ -27,9 +28,12 @@ class ViewPagerAdapter(val activity: SimpleActivity) : PagerAdapter() {
|
|||
container.removeView(item as View)
|
||||
}
|
||||
|
||||
override fun getCount() = 1
|
||||
override fun getCount() = 2
|
||||
|
||||
override fun isViewFromObject(view: View, item: Any) = view == item
|
||||
|
||||
private fun getFragment(position: Int) = R.layout.items_fragment
|
||||
private fun getFragment(position: Int) = when (position) {
|
||||
TAB_FILES -> R.layout.items_fragment
|
||||
else -> R.layout.recents_fragment
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,6 @@ package com.simplemobiletools.filemanager.pro.fragments
|
|||
import android.content.Context
|
||||
import android.os.Parcelable
|
||||
import android.util.AttributeSet
|
||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.simplemobiletools.commons.activities.BaseSimpleActivity
|
||||
import com.simplemobiletools.commons.dialogs.StoragePickerDialog
|
||||
|
@ -30,7 +29,7 @@ import java.io.File
|
|||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
class ItemsFragment(context: Context, attributeSet: AttributeSet) : CoordinatorLayout(context, attributeSet), ItemOperationsListener, Breadcrumbs.BreadcrumbsListener {
|
||||
class ItemsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), ItemOperationsListener, Breadcrumbs.BreadcrumbsListener {
|
||||
var currentPath = ""
|
||||
var isGetContentIntent = false
|
||||
var isGetRingtonePicker = false
|
||||
|
@ -47,7 +46,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : CoordinatorL
|
|||
|
||||
private var storedItems = ArrayList<ListItem>()
|
||||
|
||||
fun setupFragment(activity: SimpleActivity) {
|
||||
override fun setupFragment(activity: SimpleActivity) {
|
||||
if (this.activity == null) {
|
||||
this.activity = activity
|
||||
items_swipe_refresh.setOnRefreshListener { refreshItems() }
|
||||
|
@ -56,7 +55,7 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : CoordinatorL
|
|||
}
|
||||
}
|
||||
|
||||
fun setupColors(textColor: Int, adjustedPrimaryColor: Int) {
|
||||
override fun setupColors(textColor: Int, adjustedPrimaryColor: Int) {
|
||||
context!!.updateTextColors(this)
|
||||
items_fastscroller.updatePrimaryColor()
|
||||
storedItems = ArrayList()
|
||||
|
@ -69,12 +68,12 @@ class ItemsFragment(context: Context, attributeSet: AttributeSet) : CoordinatorL
|
|||
items_fastscroller.updateBubbleColors()
|
||||
}
|
||||
|
||||
fun updateFontSize() {
|
||||
override fun setupFontSize() {
|
||||
getRecyclerAdapter()?.updateFontSizes()
|
||||
breadcrumbs.updateFontSize(context!!.getTextSize())
|
||||
}
|
||||
|
||||
fun updateDateTimeFormat() {
|
||||
override fun setupDateTimeFormat() {
|
||||
getRecyclerAdapter()?.updateDateTimeFormat()
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
package com.simplemobiletools.filemanager.pro.fragments
|
||||
|
||||
import android.content.Context
|
||||
import android.util.AttributeSet
|
||||
import android.widget.RelativeLayout
|
||||
import com.simplemobiletools.filemanager.pro.activities.SimpleActivity
|
||||
|
||||
abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet) : RelativeLayout(context, attributeSet) {
|
||||
abstract fun setupFragment(activity: SimpleActivity)
|
||||
|
||||
abstract fun setupColors(textColor: Int, adjustedPrimaryColor: Int)
|
||||
|
||||
abstract fun setupFontSize()
|
||||
|
||||
abstract fun setupDateTimeFormat()
|
||||
}
|
|
@ -1,17 +1,43 @@
|
|||
package com.simplemobiletools.filemanager.pro.fragments
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.simplemobiletools.filemanager.pro.R
|
||||
import android.content.Context
|
||||
import android.provider.MediaStore
|
||||
import android.util.AttributeSet
|
||||
import com.simplemobiletools.commons.extensions.getIntValue
|
||||
import com.simplemobiletools.commons.extensions.getStringValue
|
||||
import com.simplemobiletools.commons.models.FileDirItem
|
||||
import com.simplemobiletools.filemanager.pro.activities.SimpleActivity
|
||||
import com.simplemobiletools.filemanager.pro.interfaces.ItemOperationsListener
|
||||
import java.util.*
|
||||
|
||||
class RecentsFragment : Fragment() {
|
||||
lateinit var mView: View
|
||||
class RecentsFragment(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), ItemOperationsListener {
|
||||
override fun setupFragment(activity: SimpleActivity) {}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
mView = inflater.inflate(R.layout.recents_fragment, container, false)!!
|
||||
return mView
|
||||
override fun setupColors(textColor: Int, adjustedPrimaryColor: Int) {}
|
||||
|
||||
private fun getRecents() {
|
||||
val uri = MediaStore.Files.getContentUri("external")
|
||||
val projection = arrayOf(MediaStore.Files.FileColumns.DATA, MediaStore.Files.FileColumns.DATE_MODIFIED)
|
||||
val sortOrder = "${MediaStore.Files.FileColumns.DATE_MODIFIED} DESC LIMIT 20"
|
||||
val cursor = context?.contentResolver?.query(uri, projection, null, null, sortOrder)
|
||||
|
||||
cursor?.use {
|
||||
if (cursor.moveToFirst()) {
|
||||
do {
|
||||
val path = cursor.getStringValue(MediaStore.Files.FileColumns.DATA)
|
||||
val modified = cursor.getIntValue(MediaStore.Files.FileColumns.DATE_MODIFIED)
|
||||
} while (cursor.moveToNext())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun refreshItems() {}
|
||||
|
||||
override fun deleteFiles(files: ArrayList<FileDirItem>) {}
|
||||
|
||||
override fun selectedPaths(paths: ArrayList<String>) {}
|
||||
|
||||
override fun setupFontSize() {}
|
||||
|
||||
override fun setupDateTimeFormat() {}
|
||||
}
|
||||
|
|
|
@ -24,3 +24,6 @@ const val OPEN_AS_IMAGE = 2
|
|||
const val OPEN_AS_AUDIO = 3
|
||||
const val OPEN_AS_VIDEO = 4
|
||||
const val OPEN_AS_OTHER = 5
|
||||
|
||||
const val TAB_FILES = 0
|
||||
const val TAB_RECENTS = 1
|
||||
|
|
|
@ -21,6 +21,12 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:icon="@drawable/ic_folder_vector" />
|
||||
|
||||
<com.google.android.material.tabs.TabItem
|
||||
android:id="@+id/tab_recents"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:icon="@drawable/ic_clock_vector" />
|
||||
|
||||
</com.google.android.material.tabs.TabLayout>
|
||||
|
||||
<com.simplemobiletools.commons.views.MyViewPager
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<com.simplemobiletools.filemanager.pro.fragments.RecentsFragment xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/recents_wrapper"
|
||||
android:id="@+id/recents_fragment"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
@ -28,4 +28,4 @@
|
|||
android:scrollbars="none"
|
||||
app:layoutManager="com.simplemobiletools.commons.views.MyGridLayoutManager" />
|
||||
|
||||
</RelativeLayout>
|
||||
</com.simplemobiletools.filemanager.pro.fragments.RecentsFragment>
|
||||
|
|
Loading…
Reference in a new issue