Skip to content

Commit

Permalink
add FAB for list options
Browse files Browse the repository at this point in the history
  • Loading branch information
tsynik committed Apr 18, 2024
1 parent ac8396d commit 7dae9ae
Show file tree
Hide file tree
Showing 18 changed files with 165 additions and 46 deletions.
35 changes: 35 additions & 0 deletions app/src/main/java/ru/yourok/torrserve/server/api/Api.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package ru.yourok.torrserve.server.api

import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.withContext
import ru.yourok.torrserve.BuildConfig
import ru.yourok.torrserve.server.models.ffp.FFPModel
import ru.yourok.torrserve.server.models.torrent.Torrent
Expand Down Expand Up @@ -151,4 +155,35 @@ object Api {
private fun postJson(url: String, json: String): String {
return Net.postAuth(url, json)
}

suspend fun getMatrixVersionInt(): Int {
return try {
var verStr: String
withContext(Dispatchers.IO) {
verStr = echo()
}
val isMatrix = verStr.contains("MatriX", true)
val numbers = Regex("[0-9]+").findAll(verStr)
.map(MatchResult::value)
.toList()
val verMajor = numbers.firstOrNull()?.toIntOrNull() ?: 0
//val verMinor = numbers.getOrNull(1)?.toIntOrNull() ?: 0
//Log.i("getMatrixVersionInt", "$verMajor")
return if (isMatrix) verMajor else 0
} catch (e: Exception) {
0
}
}

suspend fun haveCategories(): Boolean {
var vi = 0
coroutineScope {
val data = async(Dispatchers.IO) {
getMatrixVersionInt()
}
val result = data.await()
vi = result
}
return vi > 131 // MatriX.132 add Categories
}
}
13 changes: 12 additions & 1 deletion app/src/main/java/ru/yourok/torrserve/settings/Settings.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import androidx.preference.PreferenceManager
import ru.yourok.torrserve.BuildConfig
import ru.yourok.torrserve.R
import ru.yourok.torrserve.app.App
import ru.yourok.torrserve.server.api.Api
import java.io.File

object Settings {
Expand Down Expand Up @@ -67,7 +68,7 @@ object Settings {
filesDir = App.context.getExternalFilesDir(null)

if (filesDir?.canWrite() != true || Build.VERSION.SDK_INT > Build.VERSION_CODES.TIRAMISU) {
if (BuildConfig.DEBUG) Log.d("*****","Can't write to $filesDir or SDK>33")
if (BuildConfig.DEBUG) Log.d("*****", "Can't write to $filesDir or SDK>33")
filesDir = null
}

Expand All @@ -84,6 +85,16 @@ object Settings {
return filesDir.path
}

suspend fun isShowCat(): Boolean {
return try {
val vi = Api.getMatrixVersionInt()
vi > 131 && get("show_cats", false) // MatriX.132 add Categories
} catch (e: Exception) {
false
}
}


@Suppress("UNCHECKED_CAST")
fun <T> get(name: String, def: T): T {
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ru.yourok.torrserve.ui.activities.main

import android.content.DialogInterface.BUTTON_POSITIVE
import android.content.Intent
import android.content.res.ColorStateList
import android.content.res.Configuration
import android.net.Uri
import android.os.Bundle
Expand Down Expand Up @@ -48,6 +49,7 @@ import ru.yourok.torrserve.utils.Permission
import ru.yourok.torrserve.utils.ThemeUtil
import kotlin.system.exitProcess


class MainActivity : AppCompatActivity() {

private lateinit var viewModel: StatusViewModel
Expand All @@ -59,12 +61,18 @@ class MainActivity : AppCompatActivity() {
if (BuildConfig.DEBUG) Log.d("MainActivity", "handleOnBackPressed()")
if (isMenuVisible)
closeMenu()
else if (supportFragmentManager.backStackEntryCount > 0)
else if (supportFragmentManager.backStackEntryCount > 0) {
supportFragmentManager.popBackStack()
else finish()
} else finish()
}
}

private val isInTorrents: Boolean
get() {
val f = supportFragmentManager.findFragmentById(R.id.container)
return f is TorrentsFragment
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
firebaseAnalytics = FirebaseAnalytics.getInstance(this)
Expand Down Expand Up @@ -132,6 +140,13 @@ class MainActivity : AppCompatActivity() {
//TorrService.start()
updateStatus()
if (Settings.showFab()) setupFab()
lifecycleScope.launch(Dispatchers.IO) {
if (Settings.isShowCat()) {
withContext(Dispatchers.Main) {
setupCatFab()
}
}
}
}

override fun onConfigurationChanged(newConfig: Configuration) {
Expand Down Expand Up @@ -170,12 +185,19 @@ class MainActivity : AppCompatActivity() {
private val drawerListener = object : DrawerLayout.SimpleDrawerListener() {
override fun onDrawerOpened(drawerView: View) {
super.onDrawerOpened(drawerView)

if (Settings.showFab()) showFab(false)
lifecycleScope.launch(Dispatchers.IO) {
if (Settings.isShowCat()) withContext(Dispatchers.Main) { showCatFab(false) }
}
}

override fun onDrawerClosed(drawerView: View) {
super.onDrawerClosed(drawerView)
if (Settings.showFab()) showFab(true)
lifecycleScope.launch(Dispatchers.IO) {
if (Settings.isShowCat() && isInTorrents) withContext(Dispatchers.Main) { showCatFab(true) } else withContext(Dispatchers.Main) { showCatFab(false) }
}
}
}

Expand Down Expand Up @@ -251,10 +273,10 @@ class MainActivity : AppCompatActivity() {
fab?.hide()
}

private fun setupFab() { // Fab TODO: animate?
private fun setupFab() { // Fab
val fab: FloatingActionButton? = findViewById(R.id.fab)
fab?.apply {
setImageDrawable(AppCompatResources.getDrawable(this.context, R.mipmap.ic_launcher)) // R.drawable.ts_round
setImageDrawable(AppCompatResources.getDrawable(this.context, R.mipmap.ic_launcher))
customSize = dp2px(32f)
setMaxImageSize(dp2px(30f))
setOnClickListener {
Expand All @@ -272,6 +294,32 @@ class MainActivity : AppCompatActivity() {
}
}

private fun showCatFab(show: Boolean = true) {
val fab: FloatingActionButton? = findViewById(R.id.cat_fab)
if (show)
fab?.show()
else
fab?.hide()
}

private fun setupCatFab() { // categories options menu
val fab: FloatingActionButton? = findViewById(R.id.cat_fab)
val color = ThemeUtil.getColorFromAttr(this, R.attr.colorAccent)
fab?.apply {
setImageDrawable(AppCompatResources.getDrawable(this.context, R.drawable.round_view_list_24))
customSize = dp2px(32f)
setMaxImageSize(dp2px(24f))
backgroundTintList = ColorStateList.valueOf(
color
)
setOnClickListener {
// TODO
}
}
if (isInTorrents)
showCatFab(true)
}

private fun setupNavigator() {
// Logo
findViewById<FrameLayout>(R.id.header)?.setOnClickListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import androidx.appcompat.view.ContextThemeWrapper
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.ViewModel
import androidx.lifecycle.lifecycleScope
import com.google.android.material.progressindicator.LinearProgressIndicator
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import ru.yourok.torrserve.R
import ru.yourok.torrserve.app.App
Expand All @@ -27,7 +29,10 @@ abstract class TSFragment : Fragment() {
if (back)
addToBackStack(this.toString())
}
// hide progress after main menu click
lifecycleScope.launch { hideProgress() }
}

// https://material.io/components/progress-indicators/android
suspend fun showProgress(prog: Int = -1) = withContext(Dispatchers.Main) {
if (isActive) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,16 +83,8 @@ class AddFragment : TSFragment() {
// SEARCH and CATEGORY
lifecycleScope.launch {
withContext(Dispatchers.IO) {
val ver = Api.echo()
val numbers = Regex("[0-9]+").findAll(ver)
.map(MatchResult::value)
.toList()
val verMajor = numbers.firstOrNull()?.toIntOrNull() ?: 0
val rutorEnabled = loadSettings()?.EnableRutorSearch == true
val categoryEnabled = ( // MatriX.132 add Categories
ver.contains("MatriX", true) &&
verMajor > 131
)
val categoryEnabled = Api.getMatrixVersionInt() > 131
withContext(Dispatchers.Main) {
findViewById<TextInputLayout>(R.id.tvRutor)?.apply {
visibility = if (rutorEnabled)
Expand Down Expand Up @@ -326,10 +318,10 @@ class AddFragment : TSFragment() {
arrayOf(
intArrayOf(android.R.attr.state_focused), // Focused
intArrayOf(android.R.attr.state_enabled), // Enabled
intArrayOf() // normal
intArrayOf() // Normal
),
intArrayOf(
selectedColor, // The color for the Focused state
selectedColor, // color for the Focused state
defaultColor,
defaultColor
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ru.yourok.torrserve.ui.fragments.main.servfinder
import android.annotation.SuppressLint
import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -82,10 +83,14 @@ class ServerFinderFragment : TSFragment() {
}
}

override fun onDestroyView() {
lifecycleScope.launch {
override fun onStop() {
lifecycleScope.launch(Dispatchers.Main) {
hideProgress()
}
super.onStop()
}

override fun onDestroyView() {
super.onDestroyView()
lifecycleScope.launch {
onResult?.invoke(null)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,16 +65,9 @@ class ServerSettingsFragment : TSFragment() {
}
// hide disk cache options for older server versions
lifecycleScope.launch(Dispatchers.IO) {
val ver = Api.echo()
val numbers = Regex("[0-9]+").findAll(ver)
.map(MatchResult::value)
.toList()
val verMajor = numbers.firstOrNull()?.toIntOrNull() ?: 0
//val verMinor = numbers.getOrNull(1)?.toIntOrNull() ?: 0
if ( // MatriX.94 is 1st disk cache release
ver.contains("MatriX", true) &&
verMajor < 94
) {
val ver = Api.getMatrixVersionInt()
if (ver < 94) // MatriX.94 is 1st disk cache release
{
withContext(Dispatchers.Main) {
vi.findViewById<SwitchMaterial>(R.id.cbSaveOnDisk)?.visibility = View.GONE
vi.findViewById<TextView>(R.id.lbSaveOnDisk)?.visibility = View.GONE
Expand All @@ -84,40 +77,32 @@ class ServerSettingsFragment : TSFragment() {
vi.findViewById<Button>(R.id.btnContentPath)?.visibility = View.GONE
}
}
if ( // MatriX.101 add PreloadCache
ver.contains("MatriX", true) &&
verMajor > 100
) {
if (ver > 100) // MatriX.101 add PreloadCache
{
withContext(Dispatchers.Main) {
vi.findViewById<TextInputLayout>(R.id.lbPreloadCache)?.visibility = View.VISIBLE
//vi.findViewById<TextInputEditText>(R.id.etPreloadCache)?.visibility = View.VISIBLE
vi.findViewById<SwitchMaterial>(R.id.cbPreloadBuffer)?.visibility = View.GONE
vi.findViewById<TextView>(R.id.lbPreloadBuffer)?.visibility = View.GONE
}
}
if ( // MatriX.105 add DLNA / disable DhtConnectionLimit
ver.contains("MatriX", true) &&
verMajor > 104
) {
if (ver > 104) // MatriX.105 add DLNA / disable DhtConnectionLimit
{
withContext(Dispatchers.Main) {
vi.findViewById<TextInputLayout>(R.id.tvConnectionsDhtLimit)?.visibility = View.GONE
//vi.findViewById<TextInputEditText>(R.id.etConnectionsDhtLimit)?.visibility = View.GONE
vi.findViewById<SwitchMaterial>(R.id.cbEnableDLNA)?.visibility = View.VISIBLE
}
}
if ( // MatriX.115 add DLNA Friendly Name
ver.contains("MatriX", true) &&
verMajor > 114
) {
if (ver > 114) // MatriX.115 add DLNA Friendly Name
{
withContext(Dispatchers.Main) {
vi.findViewById<TextInputLayout>(R.id.tvFriendlyName)?.visibility = View.VISIBLE
//vi.findViewById<TextInputEditText>(R.id.etFriendlyName)?.visibility = View.VISIBLE
}
}
if ( // MatriX.120 add Rutor search
ver.contains("MatriX", true) &&
verMajor > 119
) {
if (ver > 119) // MatriX.120 add Rutor search
{
withContext(Dispatchers.Main) {
vi.findViewById<SwitchMaterial>(R.id.cbEnableRutorSearch)?.visibility = View.VISIBLE
vi.findViewById<TextView>(R.id.tvEnableRutorSearch)?.visibility = View.VISIBLE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,13 @@ class ServerUpdateFragment : TSFragment() {
updateUI()
}

override fun onStop() {
lifecycleScope.launch(Dispatchers.Main) {
hideProgress()
}
super.onStop()
}

private fun updateUI() {
lifecycleScope.launch(Dispatchers.IO) {
withContext(Dispatchers.Main) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ object UpdaterServer {
}
}
if (version == null)
rv = error
rv = App.context.getString(R.string.no_data) // error
return rv
}

Expand Down
5 changes: 5 additions & 0 deletions app/src/main/res/drawable/round_filter_list_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="#EEEEEE" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">

<path android:fillColor="@android:color/white" android:pathData="M11,18h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM3,7c0,0.55 0.45,1 1,1h16c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,6c-0.55,0 -1,0.45 -1,1zM7,13h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L7,11c-0.55,0 -1,0.45 -1,1s0.45,1 1,1z"/>

</vector>
5 changes: 5 additions & 0 deletions app/src/main/res/drawable/round_view_list_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:autoMirrored="true" android:height="24dp" android:tint="#EEEEEE" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">

<path android:fillColor="@android:color/white" android:pathData="M4,14h2c0.55,0 1,-0.45 1,-1v-2c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v2C3,13.55 3.45,14 4,14zM4,19h2c0.55,0 1,-0.45 1,-1v-2c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v2C3,18.55 3.45,19 4,19zM4,9h2c0.55,0 1,-0.45 1,-1V6c0,-0.55 -0.45,-1 -1,-1H4C3.45,5 3,5.45 3,6v2C3,8.55 3.45,9 4,9zM9,14h11c0.55,0 1,-0.45 1,-1v-2c0,-0.55 -0.45,-1 -1,-1H9c-0.55,0 -1,0.45 -1,1v2C8,13.55 8.45,14 9,14zM9,19h11c0.55,0 1,-0.45 1,-1v-2c0,-0.55 -0.45,-1 -1,-1H9c-0.55,0 -1,0.45 -1,1v2C8,18.55 8.45,19 9,19zM8,6v2c0,0.55 0.45,1 1,1h11c0.55,0 1,-0.45 1,-1V6c0,-0.55 -0.45,-1 -1,-1H9C8.45,5 8,5.45 8,6z"/>

</vector>
Loading

0 comments on commit 7dae9ae

Please sign in to comment.