diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml
index 37692bd..6138fd4 100644
--- a/.github/workflows/release.yaml
+++ b/.github/workflows/release.yaml
@@ -267,3 +267,4 @@ jobs:
uses: sarisia/actions-status-discord@eb045afee445dc055c18d3d90bd0f244fd062708 # v1.16.0
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
+ description: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
diff --git a/.gitignore b/.gitignore
index 67e4e53..17997ce 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,19 +1,23 @@
+# Generic
.DS_Store
-
.idea/
*.iml
-
-**/build/
+.vscode/
+.*cache*
+node_modules/
+build/
+dist/
+out/
+*.dll
+*.exe
.gradle/
.kotlin/
captures/
app/debug
app/release
-
+# App
local.properties
*.keystore
*.logcat
**/google-services.json
**/firebase-adminsdk.json
-
-**/dist/
diff --git a/.prettierignore b/.prettierignore
index ce80d28..eb5ad57 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,10 +1,5 @@
-# IDE
-.idea/
-.vscode/
-
-# Build
-**/dist/
-**/node_modules/
-
-# App
-app/src/main/assets/preview/**
+.github/assets
+.github/disabled
+.github/pull_request_template.md
+.github/assets
+app/src/main/assets/preview
diff --git a/README.md b/README.md
index 2bfcba2..0c928d4 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
-[](https://github.com/django-files/android-client/releases/latest/download/app-release.apk)
+[](https://github.com/django-files/android-client/releases)
[](https://github.com/django-files/android-client/releases/latest)
-[](https://github.com/django-files/android-client/pulse)
-[](https://github.com/django-files/android-client/actions/workflows/lint.yaml)
-[](https://github.com/django-files/android-client/actions/workflows/release.yaml)
+[](https://github.com/django-files/remote-wallpaper-android/releases/latest/download/app-release.apk)
[](https://github.com/django-files/android-client/blob/master/gradle/libs.versions.toml#L2)
+[](https://github.com/django-files/android-client/actions/workflows/lint.yaml)
+[](https://github.com/django-files/android-client/actions/workflows/release.yaml)
[](https://github.com/django-files/android-client/pulse)
[](https://github.com/django-files/android-client?tab=readme-ov-file#readme)
[](https://github.com/django-files/android-client?tab=readme-ov-file#readme)
@@ -17,7 +17,8 @@
# Django Files Android App
-[](https://github.com/django-files/android-client/releases/latest/download/app-release.apk)
+
+
- [Install](#Install)
- [Setup](#Setup)
@@ -38,6 +39,8 @@ The URL to the file is automatically copied to the clipboard and the preview is
Additional screenshots can be found on the website: https://django-files.github.io/android/
+[](https://github.com/django-files/android-client/releases/latest/download/app-release.apk)
+
| Django Files | Link |
| ----------------- | :-------------------------------------------- |
| Website | https://django-files.github.io/ |
@@ -203,7 +206,6 @@ If you are experiencing an issue/bug or getting unexpected results, you can:
- Report an Issue: https://github.com/django-files/android-client/issues
- Chat with us on Discord: https://discord.gg/wXy6m2X8wY
-- Provide General Feedback: [https://cssnr.github.io/feedback/](https://cssnr.github.io/feedback/?app=Django%20Files%20Android%20App)
# Development
@@ -342,10 +344,10 @@ You can also support other related projects:
- [Django Files Android App](https://github.com/django-files/android-client)
- [Django Files Web Extension](https://github.com/django-files/web-extension)
-
+
-
-
-
+
+
+
diff --git a/Taskfile.yml b/Taskfile.yml
index 3519170..999b5e4 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -13,8 +13,8 @@ tasks:
format:
desc: Format
aliases: [fmt]
- cmd: |
- prettier --write .
+ cmds:
+ - prettier --write .
build:
desc: Build (recommended android studio)
diff --git a/app/src/debug/java/com/djangofiles/djangofiles/DiscordApi.kt b/app/src/debug/java/com/djangofiles/djangofiles/DiscordApi.kt
index 4656590..763ff74 100644
--- a/app/src/debug/java/com/djangofiles/djangofiles/DiscordApi.kt
+++ b/app/src/debug/java/com/djangofiles/djangofiles/DiscordApi.kt
@@ -1,7 +1,6 @@
package com.djangofiles.djangofiles
import android.content.Context
-import android.util.Log
import com.google.gson.GsonBuilder
import okhttp3.Cookie
import okhttp3.CookieJar
@@ -65,7 +64,7 @@ class DiscordApi(
.build()
}
- inner class SimpleCookieJar : CookieJar {
+ class SimpleCookieJar : CookieJar {
private val cookieStore = mutableMapOf>()
override fun saveFromResponse(url: HttpUrl, cookies: List) {
diff --git a/app/src/main/java/com/djangofiles/djangofiles/MainActivity.kt b/app/src/main/java/com/djangofiles/djangofiles/MainActivity.kt
index d5ffc18..7f1882a 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/MainActivity.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/MainActivity.kt
@@ -16,6 +16,7 @@ import android.util.Log
import android.webkit.CookieManager
import android.widget.TextView
import android.widget.Toast
+import androidx.activity.SystemBarStyle
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
@@ -101,7 +102,13 @@ class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("Main[onCreate]", "savedInstanceState: ${savedInstanceState?.size()}")
- enableEdgeToEdge()
+ enableEdgeToEdge(
+ //statusBarStyle = SystemBarStyle.dark(Color.TRANSPARENT),
+ statusBarStyle = SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT),
+
+ //navigationBarStyle = SystemBarStyle.dark(Color.TRANSPARENT),
+ navigationBarStyle = SystemBarStyle.auto(Color.TRANSPARENT, Color.TRANSPARENT)
+ )
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
@@ -178,7 +185,7 @@ class MainActivity : AppCompatActivity() {
//preferences.registerOnSharedPreferenceChangeListener(listener)
// Update Status Bar
- window.statusBarColor = Color.TRANSPARENT
+ //window.statusBarColor = Color.TRANSPARENT
//WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = false
// Set Global Left/Right System Insets
@@ -194,7 +201,7 @@ class MainActivity : AppCompatActivity() {
//window.decorView.setOnApplyWindowInsetsListener { view, insets -> insets }
// Update Navigation Bar
- window.navigationBarColor = Color.TRANSPARENT
+ //window.navigationBarColor = Color.TRANSPARENT
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
window.setNavigationBarContrastEnforced(false)
}
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ServerApi.kt b/app/src/main/java/com/djangofiles/djangofiles/ServerApi.kt
index 007c7ca..c944815 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ServerApi.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ServerApi.kt
@@ -455,7 +455,7 @@ class ServerApi(val context: Context, host: String) {
.build()
}
- inner class SimpleCookieJar : CookieJar {
+ class SimpleCookieJar : CookieJar {
private val cookieStore = mutableMapOf>()
override fun saveFromResponse(url: HttpUrl, cookies: List) {
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesBottomSheet.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesBottomSheet.kt
index 5b8d37c..1fc6e65 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesBottomSheet.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesBottomSheet.kt
@@ -4,7 +4,6 @@ import android.app.Dialog
import android.app.DownloadManager
import android.content.Context
import android.content.res.ColorStateList
-import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.os.Environment
@@ -18,6 +17,7 @@ import android.widget.LinearLayout
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.core.net.toUri
+import androidx.core.view.WindowCompat
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.setFragmentResultListener
import androidx.lifecycle.lifecycleScope
@@ -60,7 +60,7 @@ class FilesBottomSheet : BottomSheetDialogFragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
- ): View? {
+ ): View {
_binding = FragmentFilesBottomBinding.inflate(inflater, container, false)
val root: View = binding.root
return root
@@ -78,12 +78,12 @@ class FilesBottomSheet : BottomSheetDialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
dialog.setOnShowListener {
- dialog.window?.navigationBarColor = Color.TRANSPARENT
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
- dialog.window?.setNavigationBarContrastEnforced(false)
+ dialog.window?.let { window ->
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+ window.setNavigationBarContrastEnforced(false)
+ }
+ WindowCompat.setDecorFitsSystemWindows(window, false)
}
- dialog.window?.decorView?.systemUiVisibility =
- View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
}
return dialog
}
@@ -210,12 +210,10 @@ class FilesBottomSheet : BottomSheetDialogFragment() {
// Image
val radius = requireContext().resources.getDimension(R.dimen.image_preview_large)
- binding.imagePreview.setShapeAppearanceModel(
- binding.imagePreview.shapeAppearanceModel
- .toBuilder()
- .setAllCorners(CornerFamily.ROUNDED, radius)
- .build()
- )
+ binding.imagePreview.shapeAppearanceModel = binding.imagePreview.shapeAppearanceModel
+ .toBuilder()
+ .setAllCorners(CornerFamily.ROUNDED, radius)
+ .build()
if (isGlideMime(data.mime)) {
Log.d("Bottom[onCreateView]", "isGlideMime")
Glide.with(this)
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesFragment.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesFragment.kt
index 7971484..8e48b80 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesFragment.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesFragment.kt
@@ -28,7 +28,6 @@ import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
-import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import com.bumptech.glide.Glide
import com.bumptech.glide.integration.okhttp3.OkHttpUrlLoader
import com.bumptech.glide.load.model.GlideUrl
@@ -188,7 +187,7 @@ class FilesFragment : Fragment() {
Log.i("File[onViewCreated]", "VIEW KEY MISMATCH - RESET DATA")
viewModel.filesData.value = null
viewModel.viewKey.value = key
- viewModel.selected.value = mutableSetOf()
+ viewModel.selected.value = mutableSetOf()
viewModel.atEnd.value = false
resetAdapter = true
}
@@ -197,7 +196,7 @@ class FilesFragment : Fragment() {
viewModel.viewKey.value = key
}
- val selected = viewModel.selected.value?.toMutableSet() ?: mutableSetOf()
+ val selected = viewModel.selected.value?.toMutableSet() ?: mutableSetOf()
Log.d("File[onViewCreated]", "viewModel.selected -> selected.size: ${selected.size}")
if (!::filesAdapter.isInitialized) {
@@ -212,9 +211,11 @@ class FilesFragment : Fragment() {
fun updateCheckButton() {
val selectedSize = viewModel.selected.value?.size ?: 0
val filesSize = viewModel.filesData.value?.size ?: 0
- binding.filesTotalText.text = getString(R.string.files_total, filesSize)
+ binding.filesTotalText.text = resources.getQuantityString(R.plurals.files_total, filesSize, filesSize)
binding.filesSelectedText.text =
- getString(R.string.files_selected_total, selectedSize, filesSize)
+ resources.getQuantityString(R.plurals.files_selected_total, selectedSize, selectedSize, filesSize)
+ binding.filesSelectedText.text =
+ resources.getQuantityString(R.plurals.files_selected_total, filesSize, selectedSize, filesSize)
if (selectedSize == filesSize) {
//Log.i("filesData[updateCheckButton]", "ALL SELECTED")
binding.filesSelectAll.setImageResource(R.drawable.md_check_box_24px)
@@ -225,7 +226,7 @@ class FilesFragment : Fragment() {
}
Log.d("File[onViewCreated]", "viewModel.selectedUris.value: ${viewModel.selected.value}")
- if (viewModel.selected.value != null && viewModel.selected.value!!.isEmpty() != true) {
+ if (viewModel.selected.value != null && !viewModel.selected.value!!.isEmpty()) {
Log.d(
"File[onViewCreated]",
"viewModel.selectedUris.value: ${viewModel.selected.value}"
@@ -308,54 +309,52 @@ class FilesFragment : Fragment() {
})
// Setup refresh listener which triggers new data loading
- binding.refreshLayout.setOnRefreshListener(object : OnRefreshListener {
- override fun onRefresh() {
- // TODO: This will be overhauled and possibly disabled until then...
- Log.d("File[refreshLayout]", "onRefresh")
- lifecycleScope.launch {
- Log.d("File[refreshLayout]", "START")
+ binding.refreshLayout.setOnRefreshListener {
+ // TODO: This will be overhauled and possibly disabled until then...
+ Log.d("File[refreshLayout]", "onRefresh")
+ lifecycleScope.launch {
+ Log.d("File[refreshLayout]", "START")
- Log.d("File[refreshLayout]", "Get Albums in the Background...")
- launch(Dispatchers.IO) {
- requireContext().getAlbums(savedUrl)
- }
+ Log.d("File[refreshLayout]", "Get Albums in the Background...")
+ launch(Dispatchers.IO) {
+ requireContext().getAlbums(savedUrl)
+ }
- //viewModel.selected.value?.clear()
- viewModel.selected.value = mutableSetOf()
- filesAdapter.selected.clear()
- Log.i("File[refreshLayout]", "3 - getFiles: ON REFRESH")
- getFiles(perPage, true)
- _binding?.let {
- it.refreshLayout.isRefreshing = false
- it.refreshLayout.isEnabled = false
- Log.d("File[refreshLayout]", "DONE")
- // Fade In
- it.refreshBanner.post {
- it.refreshBanner.translationY = -it.refreshBanner.height.toFloat()
- it.refreshBanner.visibility = View.VISIBLE
- it.refreshBanner.animate()
- .alpha(1f)
- .translationY(0f)
- .setDuration(400)
- .start()
- }
- Handler(Looper.getMainLooper()).postDelayed({
- // Fade Out
- it.refreshBanner.animate()
- .alpha(0f)
- .translationY(-it.refreshBanner.height.toFloat())
- .setDuration(400)
- .withEndAction {
- it.refreshBanner.visibility = View.GONE
- }
- .start()
- }, 1600)
+ //viewModel.selected.value?.clear()
+ viewModel.selected.value = mutableSetOf()
+ filesAdapter.selected.clear()
+ Log.i("File[refreshLayout]", "3 - getFiles: ON REFRESH")
+ getFiles(perPage, true)
+ _binding?.let {
+ it.refreshLayout.isRefreshing = false
+ it.refreshLayout.isEnabled = false
+ Log.d("File[refreshLayout]", "DONE")
+ // Fade In
+ it.refreshBanner.post {
+ it.refreshBanner.translationY = -it.refreshBanner.height.toFloat()
+ it.refreshBanner.visibility = View.VISIBLE
+ it.refreshBanner.animate()
+ .alpha(1f)
+ .translationY(0f)
+ .setDuration(400)
+ .start()
}
+ Handler(Looper.getMainLooper()).postDelayed({
+ // Fade Out
+ it.refreshBanner.animate()
+ .alpha(0f)
+ .translationY(-it.refreshBanner.height.toFloat())
+ .setDuration(400)
+ .withEndAction {
+ it.refreshBanner.visibility = View.GONE
+ }
+ .start()
+ }, 1600)
}
}
- })
+ }
- val filesSelectAll: (View) -> Unit = { view ->
+ val filesSelectAll: (View) -> Unit = { _ ->
val totalSize = viewModel.filesData.value?.size ?: 0
Log.d("File[filesSelectAll]", "totalSize: $totalSize")
val currentSelected = viewModel.selected.value?.toSet()
@@ -365,7 +364,7 @@ class FilesFragment : Fragment() {
Log.d("File[filesSelectAll]", "size: ${viewModel.selected.value?.size}")
binding.filesSelectedHeader.visibility = View.VISIBLE
val positionIds: MutableSet =
- viewModel.filesData.value?.indices?.toMutableSet() ?: mutableSetOf()
+ viewModel.filesData.value?.indices?.toMutableSet() ?: mutableSetOf()
Log.d("deleteId[observe]", "positionIds: $positionIds")
viewModel.selected.value = positionIds
filesAdapter.selected.addAll(viewModel.selected.value!!)
@@ -385,7 +384,7 @@ class FilesFragment : Fragment() {
}
} else {
Log.i("File[filesSelectAll]", "UNSELECT ALL")
- viewModel.selected.value = mutableSetOf()
+ viewModel.selected.value = mutableSetOf()
filesAdapter.selected.clear()
Log.d(
"File[filesSelectAll]",
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesViewAdapter.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesViewAdapter.kt
index b938370..70bca9d 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesViewAdapter.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/files/FilesViewAdapter.kt
@@ -194,12 +194,10 @@ class FilesViewAdapter(
// Image - Holder
val radius = context.resources.getDimension(R.dimen.image_preview_small)
- viewHolder.fileImage.setShapeAppearanceModel(
- viewHolder.fileImage.shapeAppearanceModel
- .toBuilder()
- .setAllCorners(CornerFamily.ROUNDED, radius)
- .build()
- )
+ viewHolder.fileImage.shapeAppearanceModel = viewHolder.fileImage.shapeAppearanceModel
+ .toBuilder()
+ .setAllCorners(CornerFamily.ROUNDED, radius)
+ .build()
//viewHolder.fileImage.transitionName = data.id.toString()
// Image - Glide Listener
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/home/HomeFragment.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/home/HomeFragment.kt
index 069e110..45934f4 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/home/HomeFragment.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/home/HomeFragment.kt
@@ -326,7 +326,6 @@ class HomeFragment : Fragment() {
}
}
- @Suppress("unused")
inner class WebAppInterface(private var context: Context) {
@JavascriptInterface
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/home/HomeViewModel.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/home/HomeViewModel.kt
index c622777..f0375c5 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/home/HomeViewModel.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/home/HomeViewModel.kt
@@ -19,7 +19,7 @@ class HomeViewModel : ViewModel() {
_urlToLoad.value = Event(url)
}
- inner class Event(private val content: T) {
+ class Event(private val content: T) {
private var hasBeenHandled = false
fun getContentIfNotHandled(): T? {
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/login/LoginFragment.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/login/LoginFragment.kt
index 8d1f02c..2c84286 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/login/LoginFragment.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/login/LoginFragment.kt
@@ -155,10 +155,8 @@ class LoginFragment : Fragment() {
val methodsResponse = api.methods()
Log.d("loginFunction", "methodsResponse: $methodsResponse")
- val methodsData = methodsResponse.body()
- if (methodsData == null) {
- throw Exception("methodsData is null")
- }
+ val methodsData =
+ methodsResponse.body() ?: throw Exception("methodsData is null")
viewModel.hostname.value = host
viewModel.siteName.value = methodsData.siteName
viewModel.authMethods.value = methodsData.authMethods
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/login/LoginTwoFragment.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/login/LoginTwoFragment.kt
index b024ca2..a92786a 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/login/LoginTwoFragment.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/login/LoginTwoFragment.kt
@@ -190,7 +190,7 @@ class LoginTwoFragment : Fragment() {
Log.d("OnClickListener", "it: ${it.id}")
val name = it.tag as? String
Log.d("OnClickListener", "name: $name")
- val url = authMethods.firstOrNull { it.name == name }?.url
+ val url = authMethods.firstOrNull { method -> method.name == name }?.url
Log.d("OnClickListener", "url: $url")
if (url == null) {
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/settings/SettingsFragment.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/settings/SettingsFragment.kt
index 65c151f..95e4ae9 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/settings/SettingsFragment.kt
@@ -7,8 +7,6 @@ import android.net.Uri
import android.os.Bundle
import android.os.PowerManager
import android.provider.Settings
-import android.text.Html
-import android.text.method.LinkMovementMethod
import android.util.Log
import android.view.LayoutInflater
import android.view.View
@@ -16,6 +14,7 @@ import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
+import androidx.core.content.pm.PackageInfoCompat
import androidx.core.net.toUri
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
@@ -467,7 +466,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
val formattedVersion = getString(
R.string.version_code_string,
packageInfo.versionName,
- packageInfo.versionCode.toString()
+ PackageInfoCompat.getLongVersionCode(packageInfo).toString()
)
Log.d("showAppInfoDialog", "formattedVersion: $formattedVersion")
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/settings/WidgetSettingsFragment.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/settings/WidgetSettingsFragment.kt
index dc4db27..081a0fc 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/settings/WidgetSettingsFragment.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/settings/WidgetSettingsFragment.kt
@@ -68,7 +68,7 @@ class WidgetSettingsFragment : PreferenceFragmentCompat() {
seekBar?.apply {
setOnPreferenceChangeListener { pref, newValue ->
val intValue = (newValue as Int)
- var stepped = ((intValue + 2) / 5) * 5
+ val stepped = ((intValue + 2) / 5) * 5
Log.d("WidgetSettingsFragment", "stepped: $stepped")
value = stepped
pref.summary = "Current Value: $stepped"
diff --git a/app/src/main/java/com/djangofiles/djangofiles/ui/upload/UploadMultiAdapter.kt b/app/src/main/java/com/djangofiles/djangofiles/ui/upload/UploadMultiAdapter.kt
index 7947803..1873afd 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/ui/upload/UploadMultiAdapter.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/ui/upload/UploadMultiAdapter.kt
@@ -40,7 +40,7 @@ class UploadMultiAdapter(
}
class ViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
- val imageHolder: FrameLayout = view.findViewById(R.id.image_holder)
+ //val imageHolder: FrameLayout = view.findViewById(R.id.image_holder)
val itemSelect: FrameLayout = view.findViewById(R.id.item_select)
val imageView: ImageView = view.findViewById(R.id.image_view)
val fileText: TextView = view.findViewById(R.id.file_name)
diff --git a/app/src/main/java/com/djangofiles/djangofiles/widget/WidgetProvider.kt b/app/src/main/java/com/djangofiles/djangofiles/widget/WidgetProvider.kt
index 7242a15..9a2b093 100644
--- a/app/src/main/java/com/djangofiles/djangofiles/widget/WidgetProvider.kt
+++ b/app/src/main/java/com/djangofiles/djangofiles/widget/WidgetProvider.kt
@@ -85,8 +85,7 @@ class WidgetProvider : AppWidgetProvider() {
val selectedTextColor = colorMap[textColor] ?: Color.WHITE
Log.d("Widget[onUpdate]", "selectedTextColor: $selectedTextColor")
- val opacityPercent = bgOpacity
- val alpha = (opacityPercent * 255 / 100).coerceIn(1, 255)
+ val alpha = (bgOpacity * 255 / 100).coerceIn(1, 255)
val finalBgColor = ColorUtils.setAlphaComponent(selectedBgColor, alpha)
Log.d("Widget[onUpdate]", "finalBgColor: $finalBgColor")
@@ -157,7 +156,7 @@ class WidgetProvider : AppWidgetProvider() {
// Room Data
CoroutineScope(SupervisorJob() + Dispatchers.IO).launch {
- val dao: ServerDao = ServerDatabase.Companion.getInstance(context).serverDao()
+ val dao: ServerDao = ServerDatabase.getInstance(context).serverDao()
Log.d("Widget[onUpdate]", "dao: $dao")
val server = dao.getByUrl(savedUrl)
Log.d("Widget[onUpdate]", "server: $server")
diff --git a/app/src/main/res/drawable/fa_arrow_right_to_bracket.xml b/app/src/main/res/drawable/fa_arrow_right_to_bracket.xml
deleted file mode 100644
index 95616b0..0000000
--- a/app/src/main/res/drawable/fa_arrow_right_to_bracket.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
diff --git a/app/src/main/res/layout/fragment_files.xml b/app/src/main/res/layout/fragment_files.xml
index 0ccd864..598bff0 100644
--- a/app/src/main/res/layout/fragment_files.xml
+++ b/app/src/main/res/layout/fragment_files.xml
@@ -86,7 +86,6 @@
android:gravity="center_vertical"
android:clickable="true"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
- android:text="@string/files_selected_total"
tools:text="999 / 999 Files" />
+
Django Files
v%s
%1$s (%2$s)
@@ -20,9 +20,15 @@
File List
App Settings
- Upload %1$d Files
- %1$d Files
- %1$d / %2$d Files
+ Upload %1$d Files
+
+ - %1$d File
+ - %1$d Files
+
+
+ - %1$d / %2$d File
+ - %1$d / %2$d Files
+
Delete
Preview
diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties
new file mode 100644
index 0000000..2ef1b89
--- /dev/null
+++ b/gradle/gradle-daemon-jvm.properties
@@ -0,0 +1,13 @@
+#This file is generated by updateDaemonJvm
+toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/29ee363f71d060405f729a8f1b7f7aef/redirect
+toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/ecd23fd7707c683afbcd6052998cb6a9/redirect
+toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/29ee363f71d060405f729a8f1b7f7aef/redirect
+toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/ecd23fd7707c683afbcd6052998cb6a9/redirect
+toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/10fc3bf1ee0001078a473afe6e43cfdb/redirect
+toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/9c55677aff3966382f3d853c0959bfb2/redirect
+toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/29ee363f71d060405f729a8f1b7f7aef/redirect
+toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/ecd23fd7707c683afbcd6052998cb6a9/redirect
+toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/39846e8427e64a3824c13e399d7d813c/redirect
+toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/ac151d55def6b6a9a159dc4cb4642851/redirect
+toolchainVendor=JETBRAINS
+toolchainVersion=21
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 93635d2..e6a5e62 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -20,15 +20,15 @@ workRuntimeKtx = "2.11.1"
room = "2.8.4"
media3 = "1.9.2"
-googleServices = "4.4.4"
-firebaseBom = "34.9.0"
-crashlyticsPlugin = "3.0.6"
-
okhttp = "5.3.2"
retrofit = "3.0.0"
moshiKotlinCodegen = "1.15.2"
glide = "5.0.5"
+googleServices = "4.4.4"
+firebaseBom = "34.9.0"
+crashlyticsPlugin = "3.0.6"
+
#navigationSafeargsVersion = "2.8.9"
#roomRuntime = "2.6.1"
#roomCompiler = "2.6.1"
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 0c56fd5..0d32a70 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Thu Mar 27 10:12:37 PDT 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/settings.gradle.kts b/settings.gradle.kts
index d07c935..1108afb 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1,3 +1,5 @@
+@file:Suppress("UnstableApiUsage")
+
pluginManagement {
repositories {
google {
@@ -11,6 +13,9 @@ pluginManagement {
gradlePluginPortal()
}
}
+plugins {
+ id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
+}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {