diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt index fefad3538..844dd9b32 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/MainActivity.kt @@ -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 = arrayListOf(items_fragment, recents_fragment) private fun getCurrentFragment() = items_fragment diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/ViewPagerAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/ViewPagerAdapter.kt index 5115136b2..c95fa3256 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/ViewPagerAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/adapters/ViewPagerAdapter.kt @@ -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 + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt index e51971253..528dde370 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/ItemsFragment.kt @@ -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() - 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() } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/MyViewPagerFragment.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/MyViewPagerFragment.kt new file mode 100644 index 000000000..81f1886c1 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/MyViewPagerFragment.kt @@ -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() +} diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/RecentsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/RecentsFragment.kt index 4c6408acb..c2f899f17 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/RecentsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/fragments/RecentsFragment.kt @@ -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 - -class RecentsFragment : Fragment() { - lateinit var mView: View - - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - mView = inflater.inflate(R.layout.recents_fragment, container, false)!! - return mView +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(context: Context, attributeSet: AttributeSet) : MyViewPagerFragment(context, attributeSet), ItemOperationsListener { + override fun setupFragment(activity: SimpleActivity) {} + + 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) {} + + override fun selectedPaths(paths: ArrayList) {} + + override fun setupFontSize() {} + + override fun setupDateTimeFormat() {} } diff --git a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/helpers/Constants.kt index 672266143..556db0b32 100644 --- a/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/filemanager/pro/helpers/Constants.kt @@ -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 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 6a90f080c..bd527c30e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -21,6 +21,12 @@ android:layout_height="wrap_content" android:icon="@drawable/ic_folder_vector" /> + + - @@ -28,4 +28,4 @@ android:scrollbars="none" app:layoutManager="com.simplemobiletools.commons.views.MyGridLayoutManager" /> - +