Skip to content

Commit

Permalink
Merge pull request #55 from emreesen27/v1.0.0-beta8
Browse files Browse the repository at this point in the history
V1.0.0 beta8
emreesen27 authored May 25, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
2 parents 83147d5 + 5d8dd8e commit b76d11a
Showing 24 changed files with 453 additions and 24 deletions.
8 changes: 6 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
## v1.0.0-beta-8 (25.05.2024)
* Sorting feature added for file and media items
* The synchronization issue with the show hidden files setting button has been fixed

## v1.0.0-beta7 (26.04.2024)

* ActivityNotFoundException and ClassNotFoundException fixed.
* ActivityNotFoundException and ClassNotFoundException fixed

## v1.0.0-beta6 (24.04.2024)

* The "Rename" feature added.
* Dialogs UI improvement
* The issue of license URLs redirecting to the wrong address fixed
* The 'Access Denied' error in the function calculating file count and size fixed.
* The 'Access Denied' error in the function calculating file count and size fixed

## v1.0.0-beta5 (08.04.2024)

4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
@@ -39,8 +39,8 @@ android {
applicationId "com.sn.snfilemanager"
minSdk 26
targetSdk 34
versionCode 7
versionName "1.0.0-beta7"
versionCode 8
versionName "1.0.0-beta8"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
17 changes: 17 additions & 0 deletions app/src/main/java/com/sn/snfilemanager/MainViewModel.kt
Original file line number Diff line number Diff line change
@@ -3,7 +3,10 @@ package com.sn.snfilemanager
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.sn.snfilemanager.core.util.Config
import com.sn.snfilemanager.core.util.Event
import com.sn.snfilemanager.core.util.SortCriterion
import com.sn.snfilemanager.core.util.SortOrder
import com.sn.snfilemanager.providers.preferences.MySharedPreferences
import com.sn.snfilemanager.providers.preferences.PrefsTag
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -20,10 +23,24 @@ class MainViewModel

init {
checkFirsRun()
getSortData()
}

private fun checkFirsRun() {
val firstRun: Boolean = mySharedPreferences.getBoolean(PrefsTag.FIRST_RUN)
_firstRunLiveData.postValue(Event(firstRun))
}

private fun getSortData() {
val criterionString = mySharedPreferences.getString(PrefsTag.SORT_CRITERION)
val sortOrderString = mySharedPreferences.getString(PrefsTag.SORT_ORDER)
val mediaCriterionString = mySharedPreferences.getString(PrefsTag.MEDIA_SORT_CRITERION)
val mediaSortOrderString = mySharedPreferences.getString(PrefsTag.MEDIA_SORT_ORDER)

Config.sortCriterion = SortCriterion.valueOf(criterionString ?: SortCriterion.NAME.name)
Config.sortOrder = SortOrder.valueOf(sortOrderString ?: SortOrder.ASCENDING.name)

Config.mediaSortCriterion = SortCriterion.valueOf(mediaCriterionString ?: SortCriterion.NAME.name)
Config.mediaSortOrder = SortOrder.valueOf(mediaSortOrderString ?: SortOrder.ASCENDING.name)
}
}
11 changes: 11 additions & 0 deletions app/src/main/java/com/sn/snfilemanager/core/extensions/String.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.sn.snfilemanager.core.extensions

import android.webkit.MimeTypeMap
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale

fun String.getDirectoryNameFromPath(): String {
val lastSeparatorIndex = this.lastIndexOf("/")
@@ -24,3 +27,11 @@ fun String.getMimeType(): String? {
val ext = if (extension.isNullOrEmpty()) this.getFileExtension() else extension
return MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext)
}

fun String.toDate(format: String = "dd/MM/yyyy"): Date? {
return try {
SimpleDateFormat(format, Locale.getDefault()).parse(this)
} catch (e: Exception) {
null
}
}
4 changes: 4 additions & 0 deletions app/src/main/java/com/sn/snfilemanager/core/util/Config.kt
Original file line number Diff line number Diff line change
@@ -2,4 +2,8 @@ package com.sn.snfilemanager.core.util

object Config {
var hiddenFile: Boolean = false
var sortCriterion: SortCriterion = SortCriterion.NAME
var sortOrder: SortOrder = SortOrder.ASCENDING
var mediaSortCriterion: SortCriterion = SortCriterion.NAME
var mediaSortOrder: SortOrder = SortOrder.ASCENDING
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.sn.snfilemanager.core.util

enum class SortCriterion {
NAME,
LAST_MODIFIED,
}
6 changes: 6 additions & 0 deletions app/src/main/java/com/sn/snfilemanager/core/util/SortOrder.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.sn.snfilemanager.core.util

enum class SortOrder {
ASCENDING,
DESCENDING,
}
Original file line number Diff line number Diff line change
@@ -21,6 +21,8 @@ import com.sn.snfilemanager.core.extensions.openFileWithOtherApp
import com.sn.snfilemanager.core.extensions.shareFiles
import com.sn.snfilemanager.core.extensions.visible
import com.sn.snfilemanager.core.extensions.warningToast
import com.sn.snfilemanager.core.util.Config.sortCriterion
import com.sn.snfilemanager.core.util.Config.sortOrder
import com.sn.snfilemanager.core.util.RootPath
import com.sn.snfilemanager.databinding.FragmentFilesListBinding
import com.sn.snfilemanager.feature.files.adapter.FileItemAdapter
@@ -37,6 +39,7 @@ import com.sn.snfilemanager.view.dialog.ConflictDialog
import com.sn.snfilemanager.view.dialog.CreateDirectoryDialog
import com.sn.snfilemanager.view.dialog.RenameFileDialog
import com.sn.snfilemanager.view.dialog.detail.DetailDialog
import com.sn.snfilemanager.view.dialog.sort.SortDialog
import dagger.hilt.android.AndroidEntryPoint
import java.io.File
import java.nio.file.Files
@@ -68,6 +71,11 @@ class FilesListFragment :
true
}

R.id.sort -> {
showSortDialog()
true
}

R.id.create_folder -> {
viewModel.currentPath?.let { path ->
showCreateDirectoryDialog(path)
@@ -188,15 +196,21 @@ class FilesListFragment :
JobType.CREATE -> {
activity?.runOnUiThread {
data?.filterIsInstance<Path>()?.firstOrNull()?.toFileModel()?.let { file ->
adapter?.addItem(file)
// adapter?.addItem(file)
viewModel.currentPath?.let { path ->
viewModel.getFilesList(path)
}
}
}
}

JobType.RENAME -> {
activity?.runOnUiThread {
data?.filterIsInstance<FileModel>()?.firstOrNull()?.let { file ->
adapter?.updateItem(file)
// adapter?.updateItem(file)
viewModel.currentPath?.let { path ->
viewModel.getFilesList(path)
}
}
}
}
@@ -379,6 +393,14 @@ class FilesListFragment :
}).showDialog(childFragmentManager)
}

private fun showSortDialog() {
SortDialog(isMedia = false, onConfirm = { sortData ->
sortCriterion = sortData.first
sortOrder = sortData.second
with(viewModel) { currentPath?.let { getFilesList(it) } }
}).showDialog(childFragmentManager)
}

private fun showRenameDialog() {
RenameFileDialog(file = viewModel.getSelectedItem().first(), onRename = { newName ->
viewModel.renameFile(newName)
Original file line number Diff line number Diff line change
@@ -9,9 +9,14 @@ import androidx.lifecycle.viewModelScope
import com.sn.mediastorepv.data.ConflictStrategy
import com.sn.mediastorepv.data.MediaType
import com.sn.snfilemanager.core.base.BaseResult
import com.sn.snfilemanager.core.extensions.toDate
import com.sn.snfilemanager.core.util.Config
import com.sn.snfilemanager.core.util.Config.sortCriterion
import com.sn.snfilemanager.core.util.Config.sortOrder
import com.sn.snfilemanager.core.util.Event
import com.sn.snfilemanager.core.util.RootPath
import com.sn.snfilemanager.core.util.SortCriterion
import com.sn.snfilemanager.core.util.SortOrder
import com.sn.snfilemanager.feature.files.data.FileModel
import com.sn.snfilemanager.feature.files.data.toFileModel
import com.sn.snfilemanager.providers.filepath.FilePathProvider
@@ -28,6 +33,7 @@ import java.lang.Long.min
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import java.util.Locale
import javax.inject.Inject

@HiltViewModel
@@ -73,7 +79,8 @@ class FilesListViewModel
private val _startCreateFolderJob: MutableLiveData<Event<Path>> = MutableLiveData()
val startCreateFolderJob: LiveData<Event<Path>> = _startCreateFolderJob

private val _startRenameFileJob: MutableLiveData<Event<Pair<FileModel, String>>> = MutableLiveData()
private val _startRenameFileJob: MutableLiveData<Event<Pair<FileModel, String>>> =
MutableLiveData()
val startRenameFileJob: LiveData<Event<Pair<FileModel, String>>> = _startRenameFileJob

var conflictDialogDeferred = CompletableDeferred<Pair<ConflictStrategy, Boolean>>()
@@ -153,15 +160,13 @@ class FilesListViewModel
.limit(currentBatchSize)
.forEach { file ->
if (Files.isReadable(file) && (
Config.hiddenFile ||
!Files.isHidden(
file,
)
Config.hiddenFile || !Files.isHidden(file)
)
) {
fileList.add(file.toFileModel())
}
}
sortFileList(fileList)
}
withContext(Dispatchers.Main) {
_updateListLiveData.postValue(Event(fileList))
@@ -171,10 +176,6 @@ class FilesListViewModel
}
}

fun setUpdateList(files: MutableList<FileModel>) {
_updateListLiveData.postValue(Event(files))
}

fun cancelFileListJob() {
if (fileListJob != null && fileListJob?.isActive == true) {
fileListJob?.cancel()
@@ -222,7 +223,9 @@ class FilesListViewModel
}
}
job.await()
_startMoveJobLiveData.postValue(Event(Pair(operationItemList, destinationPath)))
if (operationItemList.isNotEmpty()) {
_startMoveJobLiveData.postValue(Event(Pair(operationItemList, destinationPath)))
}
}
}

@@ -247,6 +250,26 @@ class FilesListViewModel
_startDeleteJobLiveData.postValue(Event(operationItemList))
}

private fun sortFileList(fileList: MutableList<FileModel>) {
when (sortCriterion) {
SortCriterion.NAME -> {
if (sortOrder == SortOrder.ASCENDING) {
fileList.sortBy { it.name.lowercase(Locale.getDefault()) }
} else {
fileList.sortByDescending { it.name.lowercase(Locale.getDefault()) }
}
}

SortCriterion.LAST_MODIFIED -> {
if (sortOrder == SortOrder.ASCENDING) {
fileList.sortBy { it.lastModified.toDate() }
} else {
fileList.sortByDescending { it.lastModified.toDate() }
}
}
}
}

private fun removeSearchCallback() {
searchRunnable?.let { handler.removeCallbacks(it) }
}
Original file line number Diff line number Diff line change
@@ -17,6 +17,8 @@ import com.sn.snfilemanager.core.extensions.openFile
import com.sn.snfilemanager.core.extensions.openFileWithOtherApp
import com.sn.snfilemanager.core.extensions.shareFiles
import com.sn.snfilemanager.core.extensions.warningToast
import com.sn.snfilemanager.core.util.Config.mediaSortCriterion
import com.sn.snfilemanager.core.util.Config.mediaSortOrder
import com.sn.snfilemanager.core.util.DocumentType
import com.sn.snfilemanager.databinding.FragmentMediaBinding
import com.sn.snfilemanager.feature.media.adapter.MediaItemAdapter
@@ -29,6 +31,7 @@ import com.sn.snfilemanager.view.dialog.ConflictDialog
import com.sn.snfilemanager.view.dialog.FilterBottomSheetDialog
import com.sn.snfilemanager.view.dialog.RenameFileDialog
import com.sn.snfilemanager.view.dialog.detail.DetailDialog
import com.sn.snfilemanager.view.dialog.sort.SortDialog
import dagger.hilt.android.AndroidEntryPoint
import java.nio.file.Path
import java.nio.file.Paths
@@ -65,6 +68,10 @@ class MediaFragment :
true
}

R.id.sort -> {
showSortDialog()
true
}
else -> super.onMenuItemSelected(menuItemId)
}

@@ -192,6 +199,7 @@ class MediaFragment :
observe(getMediaLiveData) { event ->
event.getContentIfNotHandled()?.let { data ->
adapter?.setItems(data.toMutableList())
binding.recyclerView.scrollToPosition(0)
}
}
observe(conflictQuestionLiveData) { event ->
@@ -238,6 +246,16 @@ class MediaFragment :
context?.shareFiles(uris)
}

private fun showSortDialog() {
SortDialog(isMedia = true, onConfirm = { sortData ->
with(viewModel) {
mediaSortCriterion = sortData.first
mediaSortOrder = sortData.second
getMedia()
}
}).showDialog(childFragmentManager)
}

private fun actionDelete() {
ConfirmationDialog(
getString(R.string.are_you_sure),
Original file line number Diff line number Diff line change
@@ -8,10 +8,15 @@ import androidx.lifecycle.viewModelScope
import com.sn.mediastorepv.data.ConflictStrategy
import com.sn.mediastorepv.data.Media
import com.sn.mediastorepv.data.MediaType
import com.sn.mediastorepv.data.OrderStrategy
import com.sn.snfilemanager.core.base.BaseResult
import com.sn.snfilemanager.core.util.Config.mediaSortCriterion
import com.sn.snfilemanager.core.util.Config.mediaSortOrder
import com.sn.snfilemanager.core.util.DocumentType
import com.sn.snfilemanager.core.util.Event
import com.sn.snfilemanager.core.util.MimeTypes
import com.sn.snfilemanager.core.util.SortCriterion
import com.sn.snfilemanager.core.util.SortOrder
import com.sn.snfilemanager.providers.mediastore.MediaStoreProvider
import com.sn.snfilemanager.providers.preferences.MySharedPreferences
import com.sn.snfilemanager.providers.preferences.PrefsTag
@@ -83,11 +88,31 @@ class MediaViewModel
}
}

private fun getOrderStrategy(): String {
return when (mediaSortCriterion) {
SortCriterion.NAME -> {
if (mediaSortOrder == SortOrder.ASCENDING) {
OrderStrategy.name(OrderStrategy.ASC)
} else {
OrderStrategy.name(OrderStrategy.DESC)
}
}

SortCriterion.LAST_MODIFIED -> {
if (mediaSortOrder == SortOrder.ASCENDING) {
OrderStrategy.dateModified(OrderStrategy.ASC)
} else {
OrderStrategy.dateModified(OrderStrategy.DESC)
}
}
}
}

fun getMedia() =
viewModelScope.launch {
val filteredMediaTypes: MutableSet<String>? = getFilteredMediaTypes()
mediaType?.let {
when (val result = mediaStoreProvider.getMedia(it, getDocumentMime())) {
when (val result = mediaStoreProvider.getMedia(it, getDocumentMime(), order = getOrderStrategy())) {
is BaseResult.Success -> {
fullMediaList = result.data
fullMediaList?.let { mediaList ->
@@ -147,7 +172,9 @@ class MediaViewModel
}
}
job.await()
_startMoveJobLiveData.postValue(Event(Pair(operationItemList, destinationPath)))
if (operationItemList.isNotEmpty()) {
_startMoveJobLiveData.postValue(Event(Pair(operationItemList, destinationPath)))
}
}
}

Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@ package com.sn.snfilemanager.providers.mediastore

import com.sn.mediastorepv.MediaStoreBuilder
import com.sn.mediastorepv.data.Media
import com.sn.mediastorepv.data.MediaSelectionData
import com.sn.mediastorepv.data.MediaType
import com.sn.snfilemanager.core.base.BaseResult
import kotlinx.coroutines.Dispatchers
@@ -14,10 +15,14 @@ class MediaStoreProvider
suspend fun getMedia(
mediaType: MediaType,
ext: List<String>?,
order: String?,
): BaseResult<MutableList<Media>> {
return try {
withContext(Dispatchers.IO) {
val result = mediaStoreBuilder.setExtCheck(ext).build().getMedia(mediaType)
val result =
mediaStoreBuilder
.setMediaSelectionData(MediaSelectionData(sortOrder = order))
.setExtCheck(ext).build().getMedia(mediaType)
BaseResult.Success(result)
}
} catch (e: Exception) {
Original file line number Diff line number Diff line change
@@ -14,9 +14,13 @@ enum class PrefsTag(val tag: String) {
FILTER_VIDEOS("FILTER_VIDEOS"),
FILTER_AUDIOS("FILTER_AUDIOS"),
FILTER_DOCUMENTS("FILTER_DOCUMENTS"),
FILTER_ARCHIVES("FILTER_ARCHIVES"),
PERMISSION_STORAGE("PERMISSION_STORAGE"),
PERMISSION_NOTIFICATION("PERMISSION_NOTIFICATION"),
FILTER_ARCHIVES("FILTER_ARCHIVES"),
SORT_CRITERION("SORT_CRITERION"),
SORT_ORDER("SORT_ORDER"),
MEDIA_SORT_CRITERION("MEDIA_SORT_CRITERION"),
MEDIA_SORT_ORDER("MEDIA_SORT_ORDER"),
}

@Singleton
@@ -42,7 +46,7 @@ class MySharedPreferences
data: String,
) = prefs.edit().putString(prefsTag.tag, data).apply()

fun getString(prefsTag: PrefsTag): String? = prefs.getString(prefsTag.tag, "")
fun getString(prefsTag: PrefsTag): String? = prefs.getString(prefsTag.tag, null)

fun putStringArray(
prefsTag: PrefsTag,
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package com.sn.snfilemanager.view.dialog.sort

import androidx.fragment.app.viewModels
import com.sn.snfilemanager.R
import com.sn.snfilemanager.core.base.BaseDialog
import com.sn.snfilemanager.core.extensions.click
import com.sn.snfilemanager.core.util.SortCriterion
import com.sn.snfilemanager.core.util.SortOrder
import com.sn.snfilemanager.databinding.DialogSortBinding
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class SortDialog(
private var isMedia: Boolean = false,
private val onConfirm: ((Pair<SortCriterion, SortOrder>) -> Unit)? = null,
) : BaseDialog<DialogSortBinding>() {
override fun getViewBinding() = DialogSortBinding.inflate(layoutInflater)

override val dialogTag: String
get() = "SORT_DIALOG"

private val vm: SortDialogViewModel by viewModels()
private var criterion = SortCriterion.NAME
private var sortOrder = SortOrder.ASCENDING

override fun setupViews() {
setPrefsTag()
initFirstValues()
initRadioGroupListener()
initButtonListener()
}

private fun setPrefsTag() {
vm.setPrefsTag(isMedia)
}

private fun initFirstValues() {
val (loadedCriterion, loadedSortOrder) = vm.getSortData()
criterion = loadedCriterion
sortOrder = loadedSortOrder

with(binding) {
when (criterion) {
SortCriterion.NAME -> rbName.isChecked = true
SortCriterion.LAST_MODIFIED -> rbModified.isChecked = true
}
when (sortOrder) {
SortOrder.ASCENDING -> rbAscending.isChecked = true
SortOrder.DESCENDING -> rbDescending.isChecked = true
}
}
}

private fun initRadioGroupListener() {
with(binding) {
rgCriteria.setOnCheckedChangeListener { _, checkedId ->
criterion =
when (checkedId) {
R.id.rb_name -> SortCriterion.NAME
R.id.rb_modified -> SortCriterion.LAST_MODIFIED
else -> criterion
}
}
rgSortOrder.setOnCheckedChangeListener { _, checkedId ->
sortOrder =
when (checkedId) {
R.id.rb_ascending -> SortOrder.ASCENDING
R.id.rb_descending -> SortOrder.DESCENDING
else -> sortOrder
}
}
}
}

private fun initButtonListener() {
with(binding) {
btnCancel.click { dismiss() }
btnConfirm.click {
vm.putSortData(criterion, sortOrder)
onConfirm?.invoke(Pair(criterion, sortOrder))
dismiss()
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.sn.snfilemanager.view.dialog.sort

import androidx.lifecycle.ViewModel
import com.sn.snfilemanager.core.util.SortCriterion
import com.sn.snfilemanager.core.util.SortOrder
import com.sn.snfilemanager.providers.preferences.MySharedPreferences
import com.sn.snfilemanager.providers.preferences.PrefsTag
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

@HiltViewModel
class SortDialogViewModel
@Inject
constructor(
private val sharedPreferences: MySharedPreferences,
) : ViewModel() {
private lateinit var tags: Pair<PrefsTag, PrefsTag>

fun setPrefsTag(isMedia: Boolean) {
tags =
if (isMedia) {
PrefsTag.MEDIA_SORT_CRITERION to PrefsTag.MEDIA_SORT_ORDER
} else {
PrefsTag.SORT_CRITERION to PrefsTag.SORT_ORDER
}
}

fun putSortData(
criterion: SortCriterion,
sortOrder: SortOrder,
) {
sharedPreferences.putString(tags.first, criterion.name)
sharedPreferences.putString(tags.second, sortOrder.name)
}

fun getSortData(): Pair<SortCriterion, SortOrder> {
val criterionString = sharedPreferences.getString(tags.first)
val sortOrderString = sharedPreferences.getString(tags.second)

val criterion = SortCriterion.valueOf(criterionString ?: SortCriterion.NAME.name)
val sortOrder = SortOrder.valueOf(sortOrderString ?: SortOrder.ASCENDING.name)

return Pair(criterion, sortOrder)
}
}
11 changes: 11 additions & 0 deletions app/src/main/res/drawable/ic_sort.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:tint="@color/first_text_color"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@color/first_text_color"
android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z" />
</vector>
115 changes: 115 additions & 0 deletions app/src/main/res/layout/dialog_sort.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<com.google.android.material.textview.MaterialTextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/adamina"
android:padding="@dimen/_10sdp"
android:text="@string/sort_by"
android:textColor="@color/first_text_color"
android:textSize="@dimen/_13ssp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<RadioGroup
android:id="@+id/rg_criteria"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/_8sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title">

<com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/rb_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/name" />

<com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/rb_modified"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/last_modified" />
</RadioGroup>


<View
android:id="@+id/divider"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginHorizontal="@dimen/_10sdp"
android:background="@color/divider_color"
app:layout_constraintTop_toBottomOf="@id/rg_criteria" />

<RadioGroup
android:id="@+id/rg_sort_order"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/_8sdp"
app:layout_constraintBottom_toTopOf="@+id/center_view"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/divider">

<com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/rb_ascending"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ascending" />

<com.google.android.material.radiobutton.MaterialRadioButton
android:id="@+id/rb_descending"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/descending" />

</RadioGroup>

<LinearLayout
android:id="@+id/center_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/_10sdp"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">

<com.google.android.material.textview.MaterialTextView
android:id="@+id/btn_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/_10sdp"
android:fontFamily="@font/adamina"
android:padding="@dimen/_5sdp"
android:text="@string/cancel"
android:textColor="@color/app_buton_state_list"
android:textSize="@dimen/_13ssp" />

<View
android:layout_width="1dp"
android:layout_height="@dimen/_40sdp"
android:background="@color/divider_color" />

<com.google.android.material.textview.MaterialTextView
android:id="@+id/btn_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="@dimen/_10sdp"
android:fontFamily="@font/adamina"
android:padding="@dimen/_5sdp"
android:text="@string/confirm"
android:textColor="@color/app_buton_state_list"
android:textSize="@dimen/_13ssp" />

</LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
6 changes: 6 additions & 0 deletions app/src/main/res/menu/menu_base.xml
Original file line number Diff line number Diff line change
@@ -9,4 +9,10 @@
app:showAsAction="always|collapseActionView"
app:actionViewClass="androidx.appcompat.widget.SearchView"/>

<item
android:id="@+id/sort"
android:icon="@drawable/ic_sort"
android:title="@string/sort"
app:showAsAction="ifRoom" />

</menu>
6 changes: 6 additions & 0 deletions app/src/main/res/menu/menu_files.xml
Original file line number Diff line number Diff line change
@@ -11,6 +11,12 @@
app:showAsAction="always|collapseActionView"
tools:ignore="AlwaysShowAction" />

<item
android:id="@+id/sort"
android:icon="@drawable/ic_sort"
android:title="@string/sort"
app:showAsAction="ifRoom" />

<item
android:id="@+id/create_folder"
android:title="@string/create_folder"
6 changes: 6 additions & 0 deletions app/src/main/res/menu/menu_media.xml
Original file line number Diff line number Diff line change
@@ -9,6 +9,12 @@
app:showAsAction="always|collapseActionView"
app:actionViewClass="androidx.appcompat.widget.SearchView"/>

<item
android:id="@+id/sort"
android:icon="@drawable/ic_sort"
android:title="@string/sort"
app:showAsAction="ifRoom" />


<item
android:id="@+id/action_filter"
6 changes: 5 additions & 1 deletion app/src/main/res/values-tr/strings.xml
Original file line number Diff line number Diff line change
@@ -46,7 +46,7 @@
<string name="share">Paylaş</string>
<string name="detail">Detay</string>
<string name="skip">Atla</string>
<string name="keep_both">İkisinide sakla</string>
<string name="keep_both">İkisinide tut</string>
<string name="overwrite">Üstüne yaz</string>
<string name="apply_selection_to_all">Hepsine uygula</string>
<string name="yes">Evet</string>
@@ -109,4 +109,8 @@
<string name="change_ext_warning">Uzantıyı değiştirmek dosyanın kullanılamaz hale gelmesine neden olabilir</string>
<string name="current_file_name_warning">Mevcut dosya adını girdiniz</string>
<string name="file_exists_warning">Bu isimde dosya zaten mevcut</string>
<string name="sort">Sırala</string>
<string name="sort_by">Sıralama ölçütü</string>
<string name="ascending">Artan</string>
<string name="descending">Azalan</string>
</resources>
4 changes: 4 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -113,4 +113,8 @@
<string name="change_ext_warning">Changing the extension may cause the file to become unusable</string>
<string name="current_file_name_warning">"You entered the current file name"</string>
<string name="file_exists_warning">The file with this name already exists</string>
<string name="sort">Sort</string>
<string name="sort_by">Sort by</string>
<string name="ascending">Ascending</string>
<string name="descending">Descending</string>
</resources>
2 changes: 1 addition & 1 deletion app/src/main/res/xml/preferences.xml
Original file line number Diff line number Diff line change
@@ -31,7 +31,7 @@
android:layout="@layout/item_switch_preference"
android:summaryOff="@string/hidden_file_off"
android:title="@string/hidden_file"
app:defaultValue="true"
app:defaultValue="false"
app:key="sn.hidden.file"
app:summaryOn="@string/hidden_file_on" />

0 comments on commit b76d11a

Please sign in to comment.