Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d9d9ff4 authored by tibbi's avatar tibbi
Browse files

rewrite filepickeradapter to the new recyclerview adapter

parent c2db3816
Loading
Loading
Loading
Loading
+50 −53
Original line number Diff line number Diff line
package com.simplemobiletools.commons.adapters

import android.content.Context
import android.graphics.drawable.Drawable
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.Menu
import android.view.View
import android.view.ViewGroup
import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade
import com.bumptech.glide.request.RequestOptions
import com.simplemobiletools.commons.R
import com.simplemobiletools.commons.extensions.baseConfig
import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.formatSize
import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor
import com.simplemobiletools.commons.extensions.isActivityDestroyed
import com.simplemobiletools.commons.models.FileDirItem
import com.simplemobiletools.commons.views.MyRecyclerView
import kotlinx.android.synthetic.main.filepicker_list_item.view.*

class FilepickerItemsAdapter(val context: Context, private val mItems: List<FileDirItem>, val itemClick: (FileDirItem) -> Unit) :
        RecyclerView.Adapter<FilepickerItemsAdapter.ViewHolder>() {
class FilepickerItemsAdapter(activity: BaseSimpleActivity, val fileDirItems: List<FileDirItem>, recyclerView: MyRecyclerView,
                             itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, itemClick) {

    companion object {
        lateinit var folderDrawable: Drawable
        lateinit var fileDrawable: Drawable
        var textColor = 0
    }
    private val folderDrawable = activity.resources.getColoredDrawableWithColor(R.drawable.ic_folder, textColor)
    private val fileDrawable = activity.resources.getColoredDrawableWithColor(R.drawable.ic_file, textColor)

    init {
        textColor = context.baseConfig.textColor
        folderDrawable = context.resources.getColoredDrawableWithColor(R.drawable.ic_folder, textColor)
        folderDrawable.alpha = 180
        fileDrawable = context.resources.getColoredDrawableWithColor(R.drawable.ic_file, textColor)
        fileDrawable.alpha = 180
        selectableItemCount = fileDirItems.size
    }

    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent?.context).inflate(R.layout.filepicker_list_item, parent, false)
        return ViewHolder(context, view, itemClick)
    }
    override fun getActionMenuId() = 0

    override fun prepareItemSelection(view: View) {}

    override fun markItemSelection(select: Boolean, view: View?) {}

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bindView(mItems[position])
    override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int) = createViewHolder(R.layout.filepicker_list_item, parent)

    override fun onBindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int) {
        val fileDirItem = fileDirItems[position]
        val view = holder.bindView(fileDirItem, false) { itemView, layoutPosition ->
            setupView(itemView, fileDirItem)
        }
        bindViewHolder(holder, position, view)
    }

    override fun onViewRecycled(holder: ViewHolder?) {
    override fun getItemCount() = fileDirItems.size

    override fun prepareActionMode(menu: Menu) {}

    override fun actionItemPressed(id: Int) {}

    override fun onViewRecycled(holder: MyRecyclerViewAdapter.ViewHolder?) {
        super.onViewRecycled(holder)
        holder?.stopLoad()
        if (!activity.isActivityDestroyed()) {
            Glide.with(activity).clear(holder?.itemView?.list_item_icon)
        }
    }

    override fun getItemCount() = mItems.size

    class ViewHolder(val context: Context, val view: View, val itemClick: (FileDirItem) -> (Unit)) : RecyclerView.ViewHolder(view) {
        fun bindView(fileDirItem: FileDirItem) {
            itemView.apply {
    private fun setupView(view: View, fileDirItem: FileDirItem) {
        view.apply {
            list_item_name.text = fileDirItem.name
            list_item_name.setTextColor(textColor)

@@ -66,20 +72,11 @@ class FilepickerItemsAdapter(val context: Context, private val mItems: List<File
            }

            list_item_details.setTextColor(textColor)
                setOnClickListener { itemClick(fileDirItem) }
        }
    }

    private fun getChildrenCnt(item: FileDirItem): String {
        val children = item.children
            return context.resources.getQuantityString(R.plurals.items, children, children)
        }

        fun stopLoad() {
            try {
                Glide.with(context).clear(view.list_item_icon)
            } catch (ignored: Exception) {
            }
        }
        return activity.resources.getQuantityString(R.plurals.items, children, children)
    }
}
+3 −10
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ package com.simplemobiletools.commons.dialogs
import android.os.Environment
import android.os.Parcelable
import android.support.v7.app.AlertDialog
import android.support.v7.widget.DividerItemDecoration
import android.support.v7.widget.LinearLayoutManager
import android.view.KeyEvent
import android.view.LayoutInflater
@@ -111,8 +110,8 @@ class FilePickerDialog(val activity: BaseSimpleActivity,

        items = items.sortedWith(compareBy({ !it.isDirectory }, { it.name.toLowerCase() }))

        val adapter = FilepickerItemsAdapter(activity, items) {
            if (it.isDirectory) {
        val adapter = FilepickerItemsAdapter(activity, items, mDialogView.filepicker_list) {
            if ((it as FileDirItem).isDirectory) {
                currPath = it.path
                updateItems()
            } else if (pickFile) {
@@ -120,18 +119,12 @@ class FilePickerDialog(val activity: BaseSimpleActivity,
                verifyPath()
            }
        }
        adapter.addVerticalDividers(true)

        val layoutManager = mDialogView.filepicker_list.layoutManager as LinearLayoutManager
        mScrollStates.put(mPrevPath.trimEnd('/'), layoutManager.onSaveInstanceState())

        mDialogView.apply {
            if (filepicker_list.adapter == null) {
                DividerItemDecoration(context, DividerItemDecoration.VERTICAL).apply {
                    setDrawable(context.resources.getDrawable(R.drawable.divider))
                    filepicker_list.addItemDecoration(this)
                }
            }

            filepicker_list.adapter = adapter
            filepicker_breadcrumbs.setBreadcrumb(currPath)
            filepicker_fastscroller.setViews(filepicker_list)
+1 −2
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@
            android:paddingRight="@dimen/activity_margin"
            android:paddingTop="@dimen/activity_margin"/>

        <android.support.v7.widget.RecyclerView
        <com.simplemobiletools.commons.views.MyRecyclerView
            android:id="@+id/filepicker_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
@@ -49,7 +49,6 @@
                android:background="@drawable/fastscroller_handle_vertical"/>

        </com.simplemobiletools.commons.views.FastScroller>

    </RelativeLayout>

    <com.simplemobiletools.commons.views.MyFloatingActionButton
+2 −0
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/selectableItemBackground"
    android:clickable="true"
    android:focusable="true"
    android:paddingEnd="@dimen/activity_margin"
    android:paddingRight="@dimen/activity_margin">