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

Unverified Commit aec64fca authored by solokot's avatar solokot Committed by GitHub
Browse files

Merge pull request #16 from SimpleMobileTools/master

up
parents 72ce174e 5c9d4ee5
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ buildscript {
        propMinSdkVersion = 16
        propTargetSdkVersion = propCompileSdkVersion
        propVersionCode = 1
        propVersionName = '3.9.9'
        propVersionName = '3.11.3'
        kotlin_version = '1.2.21'
        support_libs = '27.0.2'
    }
+17 −14
Original line number Diff line number Diff line
@@ -27,8 +27,10 @@ abstract class MyRecyclerViewAdapter(val activity: BaseSimpleActivity, val recyc
    val layoutInflater = activity.layoutInflater
    var primaryColor = baseConfig.primaryColor
    var textColor = baseConfig.textColor
    var backgroundColor = baseConfig.backgroundColor
    var itemViews = SparseArray<View>()
    val selectedPositions = HashSet<Int>()
    var positionOffset = 0

    private val multiSelector = MultiSelector()
    private var actMode: ActionMode? = null
@@ -80,10 +82,10 @@ abstract class MyRecyclerViewAdapter(val activity: BaseSimpleActivity, val recyc
    }

    fun selectAll() {
        val cnt = itemCount
        val cnt = itemCount - positionOffset
        for (i in 0 until cnt) {
            selectedPositions.add(i)
            notifyItemChanged(i)
            notifyItemChanged(i + positionOffset)
        }
        updateTitle(cnt)
    }
@@ -96,7 +98,7 @@ abstract class MyRecyclerViewAdapter(val activity: BaseSimpleActivity, val recyc
                }

                override fun selectRange(initialSelection: Int, lastDraggedIndex: Int, minReached: Int, maxReached: Int) {
                    selectItemRange(initialSelection, lastDraggedIndex, minReached, maxReached)
                    selectItemRange(initialSelection, lastDraggedIndex - positionOffset, minReached, maxReached)
                }
            })
        } else {
@@ -223,7 +225,7 @@ abstract class MyRecyclerViewAdapter(val activity: BaseSimpleActivity, val recyc

    fun createViewHolder(layoutType: Int, parent: ViewGroup?): ViewHolder {
        val view = layoutInflater.inflate(layoutType, parent, false)
        return ViewHolder(view, adapterListener, activity, multiSelectorMode, multiSelector, itemClick)
        return ViewHolder(view, adapterListener, activity, multiSelectorMode, multiSelector, positionOffset, itemClick)
    }

    fun bindViewHolder(holder: MyRecyclerViewAdapter.ViewHolder, position: Int, view: View) {
@@ -234,7 +236,7 @@ abstract class MyRecyclerViewAdapter(val activity: BaseSimpleActivity, val recyc

    fun removeSelectedItems() {
        selectedPositions.sortedDescending().forEach {
            notifyItemRemoved(it)
            notifyItemRemoved(it + positionOffset)
            itemViews.put(it, null)
        }

@@ -248,8 +250,9 @@ abstract class MyRecyclerViewAdapter(val activity: BaseSimpleActivity, val recyc
        fastScroller?.measureRecyclerView()
    }

    class ViewHolder(view: View, val adapterListener: MyAdapterListener, val activity: BaseSimpleActivity, val multiSelectorCallback: ModalMultiSelectorCallback,
                     val multiSelector: MultiSelector, val itemClick: (Any) -> (Unit)) : SwappingHolder(view, multiSelector) {
    open class ViewHolder(view: View, val adapterListener: MyAdapterListener? = null, val activity: BaseSimpleActivity? = null,
                          val multiSelectorCallback: ModalMultiSelectorCallback? = null, val multiSelector: MultiSelector,
                          val positionOffset: Int = 0, val itemClick: ((Any) -> (Unit))? = null) : SwappingHolder(view, multiSelector) {
        fun bindView(any: Any, allowLongClick: Boolean = true, callback: (itemView: View, layoutPosition: Int) -> Unit): View {
            return itemView.apply {
                callback(this, layoutPosition)
@@ -266,20 +269,20 @@ abstract class MyRecyclerViewAdapter(val activity: BaseSimpleActivity, val recyc

        private fun viewClicked(any: Any) {
            if (multiSelector.isSelectable) {
                val isSelected = adapterListener.getSelectedPositions().contains(adapterPosition)
                adapterListener.toggleItemSelectionAdapter(!isSelected, adapterPosition)
                val isSelected = adapterListener?.getSelectedPositions()?.contains(adapterPosition - positionOffset) ?: false
                adapterListener?.toggleItemSelectionAdapter(!isSelected, adapterPosition - positionOffset)
            } else {
                itemClick(any)
                itemClick?.invoke(any)
            }
        }

        private fun viewLongClicked() {
            if (!multiSelector.isSelectable) {
                activity.startSupportActionMode(multiSelectorCallback)
                adapterListener.toggleItemSelectionAdapter(true, adapterPosition)
            if (!multiSelector.isSelectable && multiSelectorCallback != null) {
                activity?.startSupportActionMode(multiSelectorCallback)
                adapterListener?.toggleItemSelectionAdapter(true, adapterPosition - positionOffset)
            }

            adapterListener.itemLongClicked(adapterPosition)
            adapterListener?.itemLongClicked(adapterPosition - positionOffset)
        }
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -134,6 +134,8 @@ class CopyMoveTask(val activity: BaseSimpleActivity, val copyOnly: Boolean = fal
                    activity.scanFile(destination) {}
                }
            }
        } catch (e: Exception) {
            activity.showErrorToast(e)
        } finally {
            inputStream?.close()
            out?.close()
+11 −4
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ import com.simplemobiletools.commons.helpers.MyContentProvider.Companion.COL_TEX
import com.simplemobiletools.commons.models.SharedTheme
import com.simplemobiletools.commons.views.*
import java.io.File
import java.text.SimpleDateFormat
import java.util.*

fun Context.isOnMainThread() = Looper.myLooper() == Looper.getMainLooper()
fun Context.getSharedPrefs() = getSharedPreferences(PREFS_KEY, Context.MODE_PRIVATE)
@@ -114,13 +116,13 @@ fun Context.isThankYouInstalled(): Boolean {
fun Context.isFingerPrintSensorAvailable() = isMarshmallowPlus() && Reprint.isHardwarePresent()

fun Context.getLatestMediaId(uri: Uri = MediaStore.Files.getContentUri("external")): Long {
    val projection = arrayOf(BaseColumns._ID)
    val sortOrder = "${MediaStore.Images.ImageColumns.DATE_TAKEN} DESC"
    val MAX_VALUE = "max_value"
    val projection = arrayOf("MAX(${BaseColumns._ID}) AS $MAX_VALUE")
    var cursor: Cursor? = null
    try {
        cursor = contentResolver.query(uri, projection, null, null, sortOrder)
        cursor = contentResolver.query(uri, projection, null, null, null)
        if (cursor?.moveToFirst() == true) {
            return cursor.getLongValue(BaseColumns._ID)
            return cursor.getLongValue(MAX_VALUE)
        }
    } finally {
        cursor?.close()
@@ -311,3 +313,8 @@ fun Context.getSharedTheme(callback: (sharedTheme: SharedTheme?) -> Unit) {
}

fun Context.getDialogTheme() = if (baseConfig.backgroundColor.getContrastColor() == Color.WHITE) R.style.MyDialogTheme_Dark else R.style.MyDialogTheme

fun Context.getCurrentFormattedDateTime(): String {
    val simpleDateFormat = SimpleDateFormat("yyyy-MM-dd_HH-mm", Locale.getDefault())
    return simpleDateFormat.format(Date(System.currentTimeMillis()))
}
+5 −0
Original line number Diff line number Diff line
package com.simplemobiletools.commons.interfaces

interface RecyclerScrollCallback {
    fun onScrolled(scrollY: Int)
}
Loading