forked from hardcoresushi/DroidFS
Explorer grid layout
This commit is contained in:
parent
91de54018d
commit
4f9aa55dfe
@ -29,6 +29,7 @@ class ExplorerElementAdapter(
|
||||
val dateFormat: DateFormat = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.getDefault())
|
||||
var explorerElements = listOf<ExplorerElement>()
|
||||
val selectedItems: MutableList<Int> = ArrayList()
|
||||
var isUsingListLayout = true
|
||||
|
||||
override fun getItemCount(): Int {
|
||||
return explorerElements.size
|
||||
@ -197,7 +198,13 @@ class ExplorerElementAdapter(
|
||||
}
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
|
||||
val view = activity.layoutInflater.inflate(R.layout.adapter_explorer_element, parent, false)
|
||||
val view = activity.layoutInflater.inflate(
|
||||
if (isUsingListLayout) {
|
||||
R.layout.adapter_explorer_element_list
|
||||
} else {
|
||||
R.layout.adapter_explorer_element_grid
|
||||
}, parent, false
|
||||
)
|
||||
return when (viewType) {
|
||||
ExplorerElement.REGULAR_FILE_TYPE -> FileViewHolder(view)
|
||||
ExplorerElement.DIRECTORY_TYPE -> DirectoryViewHolder(view)
|
||||
|
@ -10,12 +10,14 @@ import android.os.IBinder
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.ImageButton
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
@ -60,6 +62,9 @@ open class BaseExplorerActivity : BaseActivity() {
|
||||
protected var isStartingActivity = false
|
||||
private var usf_open = false
|
||||
protected var usf_keep_open = false
|
||||
private lateinit var linearLayoutManager: LinearLayoutManager
|
||||
private var isUsingListLayout = true
|
||||
private lateinit var layoutIcon: ImageButton
|
||||
private lateinit var titleText: TextView
|
||||
private lateinit var recycler_view_explorer: RecyclerView
|
||||
private lateinit var refresher: SwipeRefreshLayout
|
||||
@ -103,12 +108,22 @@ open class BaseExplorerActivity : BaseActivity() {
|
||||
::onExplorerItemLongClick,
|
||||
sharedPrefs.getLong(ConstValues.THUMBNAIL_MAX_SIZE_KEY, ConstValues.DEFAULT_THUMBNAIL_MAX_SIZE)*1000,
|
||||
)
|
||||
explorerViewModel= ViewModelProvider(this).get(ExplorerViewModel::class.java)
|
||||
explorerViewModel = ViewModelProvider(this).get(ExplorerViewModel::class.java)
|
||||
currentDirectoryPath = explorerViewModel.currentDirectoryPath
|
||||
setCurrentPath(currentDirectoryPath)
|
||||
recycler_view_explorer.apply {
|
||||
adapter = explorerAdapter
|
||||
layoutManager = LinearLayoutManager(this@BaseExplorerActivity)
|
||||
linearLayoutManager = LinearLayoutManager(this@BaseExplorerActivity)
|
||||
recycler_view_explorer.adapter = explorerAdapter
|
||||
isUsingListLayout = sharedPrefs.getBoolean("useListLayout", true)
|
||||
layoutIcon = findViewById(R.id.layout_icon)
|
||||
setRecyclerViewLayout()
|
||||
layoutIcon.setOnClickListener {
|
||||
isUsingListLayout = !isUsingListLayout
|
||||
setRecyclerViewLayout()
|
||||
recycler_view_explorer.recycledViewPool.clear()
|
||||
with (sharedPrefs.edit()) {
|
||||
putBoolean("useListLayout", isUsingListLayout)
|
||||
apply()
|
||||
}
|
||||
}
|
||||
refresher.setOnRefreshListener {
|
||||
setCurrentPath(currentDirectoryPath)
|
||||
@ -121,6 +136,20 @@ open class BaseExplorerActivity : BaseActivity() {
|
||||
var currentDirectoryPath = ""
|
||||
}
|
||||
|
||||
private fun setRecyclerViewLayout() {
|
||||
layoutIcon.setImageResource(if (isUsingListLayout) {
|
||||
recycler_view_explorer.layoutManager = linearLayoutManager
|
||||
explorerAdapter.isUsingListLayout = true
|
||||
R.drawable.icon_view_list
|
||||
} else {
|
||||
val displayMetrics = resources.displayMetrics
|
||||
val columnsNumber = (displayMetrics.widthPixels / displayMetrics.density / 200 + 0.5).toInt()
|
||||
recycler_view_explorer.layoutManager = GridLayoutManager(this, columnsNumber)
|
||||
explorerAdapter.isUsingListLayout = false
|
||||
R.drawable.icon_view_grid
|
||||
})
|
||||
}
|
||||
|
||||
protected open fun init() {
|
||||
setContentView(R.layout.activity_explorer_base)
|
||||
}
|
||||
|
10
app/src/main/res/drawable/icon_view_grid.xml
Normal file
10
app/src/main/res/drawable/icon_view_grid.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M4,11h5L9,5L4,5v6zM4,18h5v-6L4,12v6zM10,18h5v-6h-5v6zM16,18h5v-6h-5v6zM10,11h5L15,5h-5v6zM16,5v6h5L21,5h-5z"/>
|
||||
</vector>
|
10
app/src/main/res/drawable/icon_view_list.xml
Normal file
10
app/src/main/res/drawable/icon_view_list.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M4,14h4v-4L4,10v4zM4,19h4v-4L4,15v4zM4,9h4L8,5L4,5v4zM9,14h12v-4L9,10v4zM9,19h12v-4L9,15v4zM9,5v4h12L21,5L9,5z"/>
|
||||
</vector>
|
59
app/src/main/res/layout/adapter_explorer_element_grid.xml
Normal file
59
app/src/main/res/layout/adapter_explorer_element_grid.xml
Normal file
@ -0,0 +1,59 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/selectable_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="?attr/selectableItemBackground"
|
||||
android:orientation="vertical"
|
||||
android:padding="10dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/icon_element"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="130dp"
|
||||
android:adjustViewBounds="true"
|
||||
android:layout_gravity="center_horizontal"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_gravity="center_horizontal|bottom"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_element_name"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="@dimen/adapter_text_size"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:layout_gravity="bottom">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_element_mtime"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="@dimen/details_text_size"
|
||||
android:layout_marginEnd="7dp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_element_size"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="@dimen/details_text_size"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
@ -35,14 +35,14 @@
|
||||
|
||||
<TextView
|
||||
android:id="@+id/text_path"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="7dp"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="middle"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintHorizontal_bias="0"
|
||||
app:layout_constraintWidth_default="wrap"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/text_info"
|
||||
|
@ -1,28 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="25dp"
|
||||
android:layout_height="50dp"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:background="?attr/infoBarBackgroundColor"
|
||||
android:gravity="center_vertical">
|
||||
android:paddingHorizontal="20dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/current_path_text"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/infoBarTextView"
|
||||
android:singleLine="true"
|
||||
android:ellipsize="start"
|
||||
app:layout_constraintHorizontal_chainStyle="packed"
|
||||
app:layout_constraintHorizontal_bias="0"
|
||||
app:layout_constrainedWidth="true"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toStartOf="@id/total_size_text"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/total_size_text"
|
||||
android:layout_width="0dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/infoBarTextView"
|
||||
android:text="@string/default_total_size"
|
||||
android:layout_marginHorizontal="20dp"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/current_path_text"/>
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toEndOf="@id/current_path_text"
|
||||
app:layout_constraintEnd_toStartOf="@id/layout_icon"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/layout_icon"
|
||||
android:layout_width="30dp"
|
||||
android:layout_height="30dp"
|
||||
android:src="@drawable/icon_view_grid"
|
||||
android:background="?attr/selectableItemBackgroundBorderless"
|
||||
android:contentDescription="@string/switch_display_layout"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -233,4 +233,5 @@
|
||||
<string name="invalid_number">Invalid number</string>
|
||||
<string name="new_volume_name">New volume name:</string>
|
||||
<string name="volume_rename_failed">Failed to rename volume</string>
|
||||
<string name="switch_display_layout">Switch display layout</string>
|
||||
</resources>
|
||||
|
@ -59,6 +59,5 @@
|
||||
<item name="android:ellipsize">start</item>
|
||||
<item name="android:singleLine">true</item>
|
||||
<item name="android:textSize">15sp</item>
|
||||
<item name="android:textAlignment">center</item>
|
||||
</style>
|
||||
</resources>
|
@ -6,7 +6,7 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.1.2'
|
||||
classpath 'com.android.tools.build:gradle:7.1.3'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user