update the ItemsAdapter to the new RecyclerViewAdapter

This commit is contained in:
tibbi
2017-11-18 22:24:08 +01:00
parent 0332bb9654
commit 554507f684
10 changed files with 125 additions and 296 deletions

View File

@@ -46,7 +46,7 @@ ext {
} }
dependencies { dependencies {
compile 'com.simplemobiletools:commons:2.38.6' compile 'com.simplemobiletools:commons:2.39.10'
compile 'com.bignerdranch.android:recyclerview-multiselect:0.2' compile 'com.bignerdranch.android:recyclerview-multiselect:0.2'
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
@@ -57,7 +57,7 @@ dependencies {
} }
buildscript { buildscript {
ext.kotlin_version = '1.1.51' ext.kotlin_version = '1.1.60'
repositories { repositories {
mavenCentral() mavenCentral()
} }

View File

@@ -1,10 +1,10 @@
package com.simplemobiletools.filemanager.activities package com.simplemobiletools.filemanager.activities
import android.graphics.PorterDuff
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import com.simplemobiletools.commons.dialogs.FilePickerDialog import com.simplemobiletools.commons.dialogs.FilePickerDialog
import com.simplemobiletools.commons.extensions.applyColorFilter
import com.simplemobiletools.commons.extensions.beVisibleIf import com.simplemobiletools.commons.extensions.beVisibleIf
import com.simplemobiletools.filemanager.R import com.simplemobiletools.filemanager.R
import com.simplemobiletools.filemanager.extensions.config import com.simplemobiletools.filemanager.extensions.config
@@ -31,7 +31,7 @@ class FavoritesActivity : SimpleActivity() {
setTextColor(config.textColor) setTextColor(config.textColor)
} }
favorite_icon.apply { favorite_icon.apply {
setColorFilter(config.textColor, PorterDuff.Mode.SRC_IN) applyColorFilter(config.textColor)
setOnClickListener { setOnClickListener {
config.removeFavorite(favorite) config.removeFavorite(favorite)
updateFavorites() updateFavorites()

View File

@@ -5,24 +5,22 @@ import android.content.ClipboardManager
import android.content.Context import android.content.Context
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.net.Uri import android.net.Uri
import android.os.Build
import android.support.v7.view.ActionMode
import android.support.v7.widget.RecyclerView
import android.util.SparseArray import android.util.SparseArray
import android.view.* import android.view.Menu
import com.bignerdranch.android.multiselector.ModalMultiSelectorCallback import android.view.View
import com.bignerdranch.android.multiselector.MultiSelector import android.view.ViewGroup
import com.bignerdranch.android.multiselector.SwappingHolder
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions
import com.bumptech.glide.request.RequestOptions import com.bumptech.glide.request.RequestOptions
import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter
import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.FilePickerDialog import com.simplemobiletools.commons.dialogs.FilePickerDialog
import com.simplemobiletools.commons.dialogs.PropertiesDialog import com.simplemobiletools.commons.dialogs.PropertiesDialog
import com.simplemobiletools.commons.dialogs.RenameItemDialog import com.simplemobiletools.commons.dialogs.RenameItemDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.models.FileDirItem import com.simplemobiletools.commons.models.FileDirItem
import com.simplemobiletools.commons.views.MyRecyclerView
import com.simplemobiletools.filemanager.BuildConfig import com.simplemobiletools.filemanager.BuildConfig
import com.simplemobiletools.filemanager.R import com.simplemobiletools.filemanager.R
import com.simplemobiletools.filemanager.activities.SimpleActivity import com.simplemobiletools.filemanager.activities.SimpleActivity
@@ -38,53 +36,67 @@ import java.util.zip.ZipEntry
import java.util.zip.ZipFile import java.util.zip.ZipFile
import java.util.zip.ZipOutputStream import java.util.zip.ZipOutputStream
class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDirItem>, val listener: ItemOperationsListener?, val isPickMultipleIntent: Boolean, class ItemsAdapter(activity: SimpleActivity, var fileDirItems: MutableList<FileDirItem>, val listener: ItemOperationsListener?, recyclerView: MyRecyclerView,
val itemClick: (FileDirItem) -> Unit) : RecyclerView.Adapter<ItemsAdapter.ViewHolder>() { val isPickMultipleIntent: Boolean, itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {
private var textColor = activity.config.textColor
private val multiSelector = MultiSelector()
private val config = activity.config private val config = activity.config
private var actMode: ActionMode? = null
private var itemViews = SparseArray<View>()
private val selectedPositions = HashSet<Int>()
lateinit private var folderDrawable: Drawable lateinit private var folderDrawable: Drawable
lateinit private var fileDrawable: Drawable lateinit private var fileDrawable: Drawable
fun toggleItemSelection(select: Boolean, pos: Int) {
if (select) {
if (itemViews[pos] != null) {
selectedPositions.add(pos)
}
} else {
selectedPositions.remove(pos)
}
itemViews[pos]?.item_frame?.isSelected = select
if (selectedPositions.isEmpty()) {
actMode?.finish()
return
}
updateTitle(selectedPositions.size)
}
private fun updateTitle(cnt: Int) {
actMode?.title = "$cnt / ${mItems.size}"
actMode?.invalidate()
}
init { init {
selectableItemCount = fileDirItems.count()
initDrawables() initDrawables()
} }
fun updateTextColor(color: Int) { override fun getActionMenuId() = R.menu.cab
textColor = color
initDrawables() override fun prepareActionMode(menu: Menu) {
menu.apply {
findItem(R.id.cab_rename).isVisible = isOneItemSelected()
findItem(R.id.cab_decompress).isVisible = getSelectedMedia().map { it.path }.any { it.isZipFile() }
findItem(R.id.cab_confirm_selection).isVisible = isPickMultipleIntent
findItem(R.id.cab_copy_path).isVisible = isOneItemSelected()
findItem(R.id.cab_open_with).isVisible = isOneFileSelected()
findItem(R.id.cab_set_as).isVisible = isOneFileSelected()
}
} }
override fun prepareItemSelection(view: View) {}
override fun markItemSelection(select: Boolean, view: View?) {
view?.item_frame?.isSelected = select
}
override fun actionItemPressed(id: Int) {
when (id) {
R.id.cab_confirm_selection -> confirmSelection()
R.id.cab_rename -> displayRenameDialog()
R.id.cab_properties -> showProperties()
R.id.cab_share -> shareFiles()
R.id.cab_copy_path -> copyPath()
R.id.cab_set_as -> setAs()
R.id.cab_open_with -> openWith()
R.id.cab_copy_to -> copyMoveTo(true)
R.id.cab_move_to -> copyMoveTo(false)
R.id.cab_compress -> compressSelection()
R.id.cab_decompress -> decompressSelection()
R.id.cab_select_all -> selectAll()
R.id.cab_delete -> askConfirmDelete()
}
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int) = createViewHolder(R.layout.list_item, parent)
override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
val fileDirItem = fileDirItems[position]
val view = holder.bindView(fileDirItem) {
setupView(it, fileDirItem)
}
bindViewHolder(holder, position, view)
}
override fun getItemCount() = fileDirItems.size
private fun initDrawables() { private fun initDrawables() {
folderDrawable = activity.resources.getColoredDrawableWithColor(R.drawable.ic_folder, textColor) folderDrawable = activity.resources.getColoredDrawableWithColor(R.drawable.ic_folder, textColor)
fileDrawable = activity.resources.getColoredDrawableWithColor(R.drawable.ic_file, textColor) fileDrawable = activity.resources.getColoredDrawableWithColor(R.drawable.ic_file, textColor)
@@ -92,67 +104,9 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
fileDrawable.alpha = 180 fileDrawable.alpha = 180
} }
private val adapterListener = object : MyAdapterListener { private fun isOneItemSelected() = selectedPositions.size == 1
override fun toggleItemSelectionAdapter(select: Boolean, position: Int) {
toggleItemSelection(select, position)
}
override fun getSelectedPositions() = selectedPositions private fun isOneFileSelected() = isOneItemSelected() && !fileDirItems[selectedPositions.first()].isDirectory
}
private val multiSelectorMode = object : ModalMultiSelectorCallback(multiSelector) {
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
when (item.itemId) {
R.id.cab_confirm_selection -> confirmSelection()
R.id.cab_rename -> displayRenameDialog()
R.id.cab_properties -> showProperties()
R.id.cab_share -> shareFiles()
R.id.cab_copy_path -> copyPath()
R.id.cab_set_as -> setAs()
R.id.cab_open_with -> openWith()
R.id.cab_copy_to -> copyMoveTo(true)
R.id.cab_move_to -> copyMoveTo(false)
R.id.cab_compress -> compressSelection()
R.id.cab_decompress -> decompressSelection()
R.id.cab_select_all -> selectAll()
R.id.cab_delete -> askConfirmDelete()
else -> return false
}
return true
}
override fun onCreateActionMode(actionMode: ActionMode?, menu: Menu?): Boolean {
super.onCreateActionMode(actionMode, menu)
actMode = actionMode
activity.menuInflater.inflate(R.menu.cab, menu)
return true
}
override fun onPrepareActionMode(actionMode: ActionMode?, menu: Menu): Boolean {
menu.apply {
findItem(R.id.cab_rename).isVisible = isOneItemSelected()
findItem(R.id.cab_decompress).isVisible = getSelectedMedia().map { it.path }.any { it.isZipFile() }
findItem(R.id.cab_confirm_selection).isVisible = isPickMultipleIntent
findItem(R.id.cab_copy_path).isVisible = isOneItemSelected()
findItem(R.id.cab_open_with).isVisible = isOneFileSelected()
findItem(R.id.cab_set_as).isVisible = isOneFileSelected()
}
return true
}
override fun onDestroyActionMode(actionMode: ActionMode?) {
super.onDestroyActionMode(actionMode)
selectedPositions.forEach {
itemViews[it]?.isSelected = false
}
selectedPositions.clear()
actMode = null
}
private fun isOneItemSelected() = selectedPositions.size == 1
private fun isOneFileSelected() = isOneItemSelected() && !mItems[selectedPositions.first()].isDirectory
}
private fun confirmSelection() { private fun confirmSelection() {
val paths = getSelectedMedia().filter { !it.isDirectory }.map { it.path } as ArrayList<String> val paths = getSelectedMedia().filter { !it.isDirectory }.map { it.path } as ArrayList<String>
@@ -163,17 +117,17 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
RenameItemDialog(activity, getSelectedMedia()[0].path) { RenameItemDialog(activity, getSelectedMedia()[0].path) {
activity.runOnUiThread { activity.runOnUiThread {
listener?.refreshItems() listener?.refreshItems()
actMode?.finish() finishActMode()
} }
} }
} }
private fun showProperties() { private fun showProperties() {
if (selectedPositions.size <= 1) { if (selectedPositions.size <= 1) {
PropertiesDialog(activity, mItems[selectedPositions.first()].path, config.shouldShowHidden) PropertiesDialog(activity, fileDirItems[selectedPositions.first()].path, config.shouldShowHidden)
} else { } else {
val paths = ArrayList<String>() val paths = ArrayList<String>()
selectedPositions.forEach { paths.add(mItems[it].path) } selectedPositions.forEach { paths.add(fileDirItems[it].path) }
PropertiesDialog(activity, paths, config.shouldShowHidden) PropertiesDialog(activity, paths, config.shouldShowHidden)
} }
} }
@@ -201,7 +155,7 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
val path = getSelectedMedia().first().path val path = getSelectedMedia().first().path
val clip = ClipData.newPlainText(activity.getString(R.string.app_name), path) val clip = ClipData.newPlainText(activity.getString(R.string.app_name), path)
(activity.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager).primaryClip = clip (activity.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager).primaryClip = clip
actMode?.finish() finishActMode()
activity.toast(R.string.path_copied) activity.toast(R.string.path_copied)
} }
@@ -217,7 +171,7 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
private fun copyMoveTo(isCopyOperation: Boolean) { private fun copyMoveTo(isCopyOperation: Boolean) {
val files = ArrayList<File>() val files = ArrayList<File>()
selectedPositions.forEach { files.add(File(mItems[it].path)) } selectedPositions.forEach { files.add(File(fileDirItems[it].path)) }
val source = if (files[0].isFile) files[0].parent else files[0].absolutePath val source = if (files[0].isFile) files[0].parent else files[0].absolutePath
FilePickerDialog(activity, source, false, config.shouldShowHidden, true) { FilePickerDialog(activity, source, false, config.shouldShowHidden, true) {
@@ -226,7 +180,7 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
} else { } else {
activity.copyMoveFilesTo(files, source, it, isCopyOperation, false) { activity.copyMoveFilesTo(files, source, it, isCopyOperation, false) {
listener?.refreshItems() listener?.refreshItems()
actMode?.finish() finishActMode()
} }
} }
} }
@@ -250,7 +204,7 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
activity.runOnUiThread { activity.runOnUiThread {
listener?.refreshItems() listener?.refreshItems()
actMode?.finish() finishActMode()
} }
}).start() }).start()
} }
@@ -259,17 +213,17 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
if (selectedPositions.isEmpty()) if (selectedPositions.isEmpty())
return return
val firstPath = mItems[selectedPositions.first()].path val firstPath = fileDirItems[selectedPositions.first()].path
CompressAsDialog(activity, firstPath) { CompressAsDialog(activity, firstPath) {
activity.handleSAFDialog(File(firstPath)) { activity.handleSAFDialog(File(firstPath)) {
activity.toast(R.string.compressing) activity.toast(R.string.compressing)
val paths = selectedPositions.map { mItems[it].path } val paths = selectedPositions.map { fileDirItems[it].path }
Thread({ Thread({
if (zipPaths(paths, it)) { if (zipPaths(paths, it)) {
activity.toast(R.string.compression_successful) activity.toast(R.string.compression_successful)
activity.runOnUiThread { activity.runOnUiThread {
listener?.refreshItems() listener?.refreshItems()
actMode?.finish() finishActMode()
} }
} else { } else {
activity.toast(R.string.compressing_failed) activity.toast(R.string.compressing_failed)
@@ -283,16 +237,16 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
if (selectedPositions.isEmpty()) if (selectedPositions.isEmpty())
return return
val firstPath = mItems[selectedPositions.first()].path val firstPath = fileDirItems[selectedPositions.first()].path
activity.handleSAFDialog(File(firstPath)) { activity.handleSAFDialog(File(firstPath)) {
activity.toast(R.string.decompressing) activity.toast(R.string.decompressing)
val paths = selectedPositions.map { mItems[it].path }.filter { it.isZipFile() } val paths = selectedPositions.map { fileDirItems[it].path }.filter { it.isZipFile() }
Thread({ Thread({
if (unzipPaths(paths)) { if (unzipPaths(paths)) {
activity.toast(R.string.decompression_successful) activity.toast(R.string.decompression_successful)
activity.runOnUiThread { activity.runOnUiThread {
listener?.refreshItems() listener?.refreshItems()
actMode?.finish() finishActMode()
} }
} else { } else {
activity.toast(R.string.decompressing_failed) activity.toast(R.string.decompressing_failed)
@@ -384,19 +338,10 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
return true return true
} }
fun selectAll() {
val cnt = mItems.size
for (i in 0 until cnt) {
selectedPositions.add(i)
notifyItemChanged(i)
}
updateTitle(cnt)
}
private fun askConfirmDelete() { private fun askConfirmDelete() {
ConfirmationDialog(activity) { ConfirmationDialog(activity) {
deleteFiles() deleteFiles()
actMode?.finish() finishActMode()
} }
} }
@@ -407,16 +352,16 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
val files = ArrayList<File>(selectedPositions.size) val files = ArrayList<File>(selectedPositions.size)
val removeFiles = ArrayList<FileDirItem>(selectedPositions.size) val removeFiles = ArrayList<FileDirItem>(selectedPositions.size)
activity.handleSAFDialog(File(mItems[selectedPositions.first()].path)) { activity.handleSAFDialog(File(fileDirItems[selectedPositions.first()].path)) {
selectedPositions.sortedDescending().forEach { selectedPositions.sortedDescending().forEach {
val file = mItems[it] val file = fileDirItems[it]
files.add(File(file.path)) files.add(File(file.path))
removeFiles.add(file) removeFiles.add(file)
notifyItemRemoved(it) notifyItemRemoved(it)
itemViews.put(it, null) itemViews.put(it, null)
} }
mItems.removeAll(removeFiles) fileDirItems.removeAll(removeFiles)
selectedPositions.clear() selectedPositions.clear()
listener?.deleteFiles(files) listener?.deleteFiles(files)
@@ -435,138 +380,48 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
private fun getSelectedMedia(): List<FileDirItem> { private fun getSelectedMedia(): List<FileDirItem> {
val selectedMedia = ArrayList<FileDirItem>(selectedPositions.size) val selectedMedia = ArrayList<FileDirItem>(selectedPositions.size)
selectedPositions.forEach { selectedMedia.add(mItems[it]) } selectedPositions.forEach { selectedMedia.add(fileDirItems[it]) }
return selectedMedia return selectedMedia
} }
fun updateItems(newItems: MutableList<FileDirItem>) { fun updateItems(newItems: MutableList<FileDirItem>) {
mItems = newItems fileDirItems = newItems
notifyDataSetChanged() notifyDataSetChanged()
actMode?.finish() finishActMode()
}
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent?.context).inflate(R.layout.list_item, parent, false)
return ViewHolder(view, adapterListener, activity, multiSelectorMode, multiSelector, listener, itemClick)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
itemViews.put(position, holder.bindView(mItems[position], fileDrawable, folderDrawable, textColor))
toggleItemSelection(selectedPositions.contains(position), position)
holder.itemView.tag = holder
} }
override fun onViewRecycled(holder: ViewHolder?) { override fun onViewRecycled(holder: ViewHolder?) {
super.onViewRecycled(holder) super.onViewRecycled(holder)
holder?.stopLoad() if (!activity.isActivityDestroyed()) {
} Glide.with(activity).clear(holder?.itemView?.item_icon)
override fun getItemCount() = mItems.size
fun selectItem(pos: Int) {
toggleItemSelection(true, pos)
}
fun selectRange(from: Int, to: Int, min: Int, max: Int) {
if (from == to) {
(min..max).filter { it != from }
.forEach { toggleItemSelection(false, it) }
return
}
if (to < from) {
for (i in to..from)
toggleItemSelection(true, i)
if (min > -1 && min < to) {
(min until to).filter { it != from }
.forEach { toggleItemSelection(false, it) }
}
if (max > -1) {
for (i in from + 1..max)
toggleItemSelection(false, i)
}
} else {
for (i in from..to)
toggleItemSelection(true, i)
if (max > -1 && max > to) {
(to + 1..max).filter { it != from }
.forEach { toggleItemSelection(false, it) }
}
if (min > -1) {
for (i in min until from)
toggleItemSelection(false, i)
}
} }
} }
class ViewHolder(val view: View, val adapterListener: MyAdapterListener, val activity: SimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback, private fun setupView(view: View, fileDirItem: FileDirItem) {
val multiSelector: MultiSelector, val listener: ItemOperationsListener?, val itemClick: (FileDirItem) -> (Unit)) : SwappingHolder(view, MultiSelector()) { view.apply {
fun bindView(fileDirItem: FileDirItem, fileDrawable: Drawable, folderDrawable: Drawable, textColor: Int): View { item_name.text = fileDirItem.name
itemView.apply { item_name.setTextColor(textColor)
item_name.text = fileDirItem.name item_details.setTextColor(textColor)
item_name.setTextColor(textColor)
item_details.setTextColor(textColor)
if (fileDirItem.isDirectory) { if (fileDirItem.isDirectory) {
item_icon.setImageDrawable(folderDrawable) item_icon.setImageDrawable(folderDrawable)
item_details.text = getChildrenCnt(fileDirItem) item_details.text = getChildrenCnt(fileDirItem)
} else {
val options = RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.error(fileDrawable)
.centerCrop()
val path = fileDirItem.path
Glide.with(activity).load(path).transition(DrawableTransitionOptions.withCrossFade()).apply(options).into(item_icon)
item_details.text = fileDirItem.size.formatSize()
}
setOnClickListener { viewClicked(fileDirItem) }
setOnLongClickListener { viewLongClicked(); true }
}
return itemView
}
private fun getChildrenCnt(item: FileDirItem): String {
val children = item.children
return activity.resources.getQuantityString(R.plurals.items, children, children)
}
private fun viewClicked(fileDirItem: FileDirItem) {
if (multiSelector.isSelectable) {
val isSelected = adapterListener.getSelectedPositions().contains(adapterPosition)
adapterListener.toggleItemSelectionAdapter(!isSelected, adapterPosition)
} else { } else {
itemClick(fileDirItem) val options = RequestOptions()
} .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
} .error(fileDrawable)
.centerCrop()
private fun viewLongClicked() { val path = fileDirItem.path
if (listener != null) { Glide.with(activity).load(path).transition(DrawableTransitionOptions.withCrossFade()).apply(options).into(item_icon)
if (!multiSelector.isSelectable) { item_details.text = fileDirItem.size.formatSize()
activity.startSupportActionMode(multiSelectorCallback)
adapterListener.toggleItemSelectionAdapter(true, adapterPosition)
}
listener.itemLongClicked(adapterPosition)
}
}
fun stopLoad() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && !activity.isDestroyed) {
Glide.with(activity).clear(view.item_icon)
} }
} }
} }
interface MyAdapterListener { private fun getChildrenCnt(item: FileDirItem): String {
fun toggleItemSelectionAdapter(select: Boolean, position: Int) val children = item.children
return activity.resources.getQuantityString(R.plurals.items, children, children)
fun getSelectedPositions(): HashSet<Int>
} }
interface ItemOperationsListener { interface ItemOperationsListener {
@@ -574,8 +429,6 @@ class ItemsAdapter(val activity: SimpleActivity, var mItems: MutableList<FileDir
fun deleteFiles(files: ArrayList<File>) fun deleteFiles(files: ArrayList<File>)
fun itemLongClicked(position: Int)
fun selectedPaths(paths: ArrayList<String>) fun selectedPaths(paths: ArrayList<String>)
} }
} }

View File

@@ -2,6 +2,7 @@ package com.simplemobiletools.filemanager.dialogs
import android.support.v7.app.AlertDialog import android.support.v7.app.AlertDialog
import android.view.LayoutInflater import android.view.LayoutInflater
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.setupDialogStuff
import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.filemanager.R import com.simplemobiletools.filemanager.R
@@ -9,7 +10,7 @@ import com.simplemobiletools.filemanager.activities.SimpleActivity
import com.simplemobiletools.filemanager.extensions.config import com.simplemobiletools.filemanager.extensions.config
import kotlinx.android.synthetic.main.dialog_change_sorting.view.* import kotlinx.android.synthetic.main.dialog_change_sorting.view.*
class ChangeSortingDialog(val activity: SimpleActivity, val path: String = "", val callback: () -> Unit) { class ChangeSortingDialog(val activity: BaseSimpleActivity, val path: String = "", val callback: () -> Unit) {
private var currSorting = 0 private var currSorting = 0
private var config = activity.config private var config = activity.config
private var view = LayoutInflater.from(activity).inflate(R.layout.dialog_change_sorting, null) private var view = LayoutInflater.from(activity).inflate(R.layout.dialog_change_sorting, null)

View File

@@ -3,15 +3,15 @@ package com.simplemobiletools.filemanager.dialogs
import android.support.v7.app.AlertDialog import android.support.v7.app.AlertDialog
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.dialogs.FilePickerDialog import com.simplemobiletools.commons.dialogs.FilePickerDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.filemanager.R import com.simplemobiletools.filemanager.R
import com.simplemobiletools.filemanager.activities.SimpleActivity
import com.simplemobiletools.filemanager.extensions.config import com.simplemobiletools.filemanager.extensions.config
import kotlinx.android.synthetic.main.dialog_compress_as.view.* import kotlinx.android.synthetic.main.dialog_compress_as.view.*
import java.io.File import java.io.File
class CompressAsDialog(val activity: SimpleActivity, val path: String, val callback: (destination: String) -> Unit) { class CompressAsDialog(val activity: BaseSimpleActivity, val path: String, val callback: (destination: String) -> Unit) {
private val view = activity.layoutInflater.inflate(R.layout.dialog_compress_as, null) private val view = activity.layoutInflater.inflate(R.layout.dialog_compress_as, null)
init { init {

View File

@@ -3,6 +3,7 @@ package com.simplemobiletools.filemanager.dialogs
import android.support.v7.app.AlertDialog import android.support.v7.app.AlertDialog
import android.view.View import android.view.View
import android.view.WindowManager import android.view.WindowManager
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.filemanager.R import com.simplemobiletools.filemanager.R
import com.simplemobiletools.filemanager.activities.SimpleActivity import com.simplemobiletools.filemanager.activities.SimpleActivity
@@ -10,7 +11,7 @@ import kotlinx.android.synthetic.main.dialog_create_new.view.*
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
class CreateNewItemDialog(val activity: SimpleActivity, val path: String, val callback: (success: Boolean) -> Unit) { class CreateNewItemDialog(val activity: BaseSimpleActivity, val path: String, val callback: (success: Boolean) -> Unit) {
private val view = activity.layoutInflater.inflate(R.layout.dialog_create_new, null) private val view = activity.layoutInflater.inflate(R.layout.dialog_create_new, null)
init { init {

View File

@@ -3,6 +3,7 @@ package com.simplemobiletools.filemanager.dialogs
import android.support.v7.app.AlertDialog import android.support.v7.app.AlertDialog
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.WindowManager import android.view.WindowManager
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.FilePickerDialog import com.simplemobiletools.commons.dialogs.FilePickerDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
@@ -11,7 +12,7 @@ import com.simplemobiletools.filemanager.activities.SimpleActivity
import kotlinx.android.synthetic.main.dialog_save_as.view.* import kotlinx.android.synthetic.main.dialog_save_as.view.*
import java.io.File import java.io.File
class SaveAsDialog(val activity: SimpleActivity, var path: String, val callback: (savePath: String) -> Unit) { class SaveAsDialog(val activity: BaseSimpleActivity, var path: String, val callback: (savePath: String) -> Unit) {
init { init {
if (path.isEmpty()) { if (path.isEmpty()) {

View File

@@ -13,7 +13,6 @@ import com.simplemobiletools.commons.dialogs.StoragePickerDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.models.FileDirItem import com.simplemobiletools.commons.models.FileDirItem
import com.simplemobiletools.commons.views.Breadcrumbs import com.simplemobiletools.commons.views.Breadcrumbs
import com.simplemobiletools.commons.views.MyScalableRecyclerView
import com.simplemobiletools.filemanager.R import com.simplemobiletools.filemanager.R
import com.simplemobiletools.filemanager.activities.MainActivity import com.simplemobiletools.filemanager.activities.MainActivity
import com.simplemobiletools.filemanager.activities.SimpleActivity import com.simplemobiletools.filemanager.activities.SimpleActivity
@@ -132,20 +131,17 @@ class ItemsFragment : Fragment(), ItemsAdapter.ItemOperationsListener, Breadcrum
storedItems = items storedItems = items
val currAdapter = items_list.adapter val currAdapter = items_list.adapter
if (currAdapter == null) { if (currAdapter == null) {
items_list.apply { val adapter = ItemsAdapter(activity as SimpleActivity, storedItems, this@ItemsFragment, items_list, isPickMultipleIntent) {
this.adapter = ItemsAdapter(activity as SimpleActivity, storedItems, this@ItemsFragment, isPickMultipleIntent) { itemClicked(it as FileDirItem)
itemClicked(it)
}
DividerItemDecoration(context, DividerItemDecoration.VERTICAL).apply {
setDrawable(context.resources.getDrawable(com.simplemobiletools.commons.R.drawable.divider))
addItemDecoration(this)
}
isDragSelectionEnabled = true
} }
adapter.setupDragListener(true)
DividerItemDecoration(context, DividerItemDecoration.VERTICAL).apply {
setDrawable(context.resources.getDrawable(com.simplemobiletools.commons.R.drawable.divider))
items_list.addItemDecoration(this)
}
items_list.adapter = adapter
items_fastscroller.setViews(items_list, items_swipe_refresh) items_fastscroller.setViews(items_list, items_swipe_refresh)
setupRecyclerViewListener()
} else { } else {
(currAdapter as ItemsAdapter).updateItems(storedItems) (currAdapter as ItemsAdapter).updateItems(storedItems)
@@ -160,28 +156,6 @@ class ItemsFragment : Fragment(), ItemsAdapter.ItemOperationsListener, Breadcrum
} }
} }
private fun setupRecyclerViewListener() {
mView.items_list?.listener = object : MyScalableRecyclerView.MyScalableRecyclerViewListener {
override fun zoomIn() {
}
override fun zoomOut() {
}
override fun selectItem(position: Int) {
getRecyclerAdapter().selectItem(position)
}
override fun selectRange(initialSelection: Int, lastDraggedIndex: Int, minReached: Int, maxReached: Int) {
getRecyclerAdapter().selectRange(initialSelection, lastDraggedIndex, minReached, maxReached)
}
}
}
private fun getRecyclerAdapter() = (items_list.adapter as ItemsAdapter)
fun getScrollState() = getRecyclerLayoutManager().onSaveInstanceState() fun getScrollState() = getRecyclerLayoutManager().onSaveInstanceState()
private fun getRecyclerLayoutManager() = (mView.items_list.layoutManager as LinearLayoutManager) private fun getRecyclerLayoutManager() = (mView.items_list.layoutManager as LinearLayoutManager)
@@ -288,10 +262,6 @@ class ItemsFragment : Fragment(), ItemsAdapter.ItemOperationsListener, Breadcrum
} }
} }
override fun itemLongClicked(position: Int) {
items_list.setDragSelectActive(position)
}
override fun selectedPaths(paths: ArrayList<String>) { override fun selectedPaths(paths: ArrayList<String>) {
(activity as MainActivity).pickedPaths(paths) (activity as MainActivity).pickedPaths(paths)
} }

View File

@@ -22,7 +22,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="@dimen/activity_margin"/> android:padding="@dimen/activity_margin"/>
<com.simplemobiletools.commons.views.MyScalableRecyclerView <com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/items_list" android:id="@+id/items_list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"

View File

@@ -1,10 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<FrameLayout <FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/item_frame" android:id="@+id/item_frame"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground" android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:foreground="@drawable/selector"> android:foreground="@drawable/selector">
<RelativeLayout <RelativeLayout
@@ -30,7 +33,7 @@
android:maxLines="3" android:maxLines="3"
android:paddingLeft="@dimen/small_margin" android:paddingLeft="@dimen/small_margin"
android:paddingTop="@dimen/small_margin" android:paddingTop="@dimen/small_margin"
android:text="Directory"/> tools:text="Directory"/>
<TextView <TextView
android:id="@+id/item_details" android:id="@+id/item_details"
@@ -39,8 +42,8 @@
android:layout_below="@+id/item_name" android:layout_below="@+id/item_name"
android:layout_toRightOf="@+id/item_icon" android:layout_toRightOf="@+id/item_icon"
android:paddingLeft="@dimen/small_margin" android:paddingLeft="@dimen/small_margin"
android:text="1 KB" android:textSize="@dimen/smaller_text_size"
android:textSize="@dimen/smaller_text_size"/> tools:text="1 KB"/>
</RelativeLayout> </RelativeLayout>
</FrameLayout> </FrameLayout>