From 7bcd8352819de0538198a0e41e4a451eae0d85ea Mon Sep 17 00:00:00 2001
From: Shane <6071159+smashedr@users.noreply.github.com>
Date: Tue, 15 Apr 2025 19:05:14 -0700
Subject: [PATCH 1/6] Parse Intent.EXTRA_TEXT and Use requireArguments() for
URI
---
app/src/main/java/org/cssnr/zipline/MainActivity.kt | 3 +++
app/src/main/java/org/cssnr/zipline/PreviewFragment.kt | 10 ++++++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/cssnr/zipline/MainActivity.kt b/app/src/main/java/org/cssnr/zipline/MainActivity.kt
index 9333d38..36b1afc 100644
--- a/app/src/main/java/org/cssnr/zipline/MainActivity.kt
+++ b/app/src/main/java/org/cssnr/zipline/MainActivity.kt
@@ -192,6 +192,9 @@ class MainActivity : AppCompatActivity() {
Log.d("handleIntent", "intent.type: ${intent.type}")
Log.d("handleIntent", "intent.action: ${intent.action}")
+ val extraText = intent.getStringExtra(Intent.EXTRA_TEXT)
+ Log.d("handleIntent", "extraText: $extraText")
+
val sharedPreferences = getSharedPreferences("default_preferences", MODE_PRIVATE)
val ziplineUrl = sharedPreferences.getString("ziplineUrl", null)
val ziplineToken = sharedPreferences.getString("ziplineToken", null)
diff --git a/app/src/main/java/org/cssnr/zipline/PreviewFragment.kt b/app/src/main/java/org/cssnr/zipline/PreviewFragment.kt
index 5b71604..06a4377 100644
--- a/app/src/main/java/org/cssnr/zipline/PreviewFragment.kt
+++ b/app/src/main/java/org/cssnr/zipline/PreviewFragment.kt
@@ -50,16 +50,22 @@ class PreviewFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
Log.d("onViewCreated", "savedInstanceState: $savedInstanceState")
+ Log.d("onViewCreated", "arguments: $arguments")
- val uri = arguments?.getString("uri")?.toUri()
+ //val uri = arguments?.getString("uri")?.toUri()
+ val uri = requireArguments().getString("uri")?.toUri()
Log.d("onViewCreated", "uri: $uri")
+
val type = arguments?.getString("type")
Log.d("onViewCreated", "type: $type")
+ //val text = arguments?.getString("text")
+ //Log.d("onViewCreated", "text: $text")
+
if (uri == null) {
// TODO: Better Handle this Error
Log.e("onViewCreated", "URI is null")
- Toast.makeText(requireContext(), "Error Parsing URI!", Toast.LENGTH_LONG).show()
+ Toast.makeText(requireContext(), "No URI to Process!", Toast.LENGTH_LONG).show()
return
}
From 5fb607139b6dba66f7d87580dc4cbfe6e7e42198 Mon Sep 17 00:00:00 2001
From: Shane <6071159+smashedr@users.noreply.github.com>
Date: Tue, 15 Apr 2025 23:10:48 -0700
Subject: [PATCH 2/6] Remove Permissions Request
---
app/src/main/AndroidManifest.xml | 4 --
.../java/org/cssnr/zipline/MainActivity.kt | 63 ++++++-------------
2 files changed, 20 insertions(+), 47 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bd02030..fdfc053 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,10 +3,6 @@
xmlns:tools="http://schemas.android.com/tools">
-
-
-
-
>
private lateinit var filePickerLauncher: ActivityResultLauncher>
@@ -51,18 +49,6 @@ class MainActivity : AppCompatActivity() {
insets
}
- permissionLauncher =
- registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
- val allGranted = permissions.all { it.value }
- Log.d("permissionLauncher", "allGranted: $allGranted")
- if (allGranted) {
- filePickerLauncher.launch(arrayOf("*/*"))
- } else {
- Log.w("permissionLauncher", "Permission Denied!")
- Toast.makeText(this, "Permission Denied!", Toast.LENGTH_LONG).show()
- }
- }
-
filePickerLauncher =
registerForActivityResult(ActivityResultContracts.OpenDocument()) { uri ->
Log.d("filePickerLauncher", "uri: $uri")
@@ -72,35 +58,32 @@ class MainActivity : AppCompatActivity() {
showPreview(uri, mimeType)
} else {
Log.w("filePickerLauncher", "No File Selected!")
- Toast.makeText(this, "No File Selected!", Toast.LENGTH_LONG).show()
+ Toast.makeText(this, "No File Selected!", Toast.LENGTH_SHORT).show()
}
}
// Navigation - On Click
binding.navigationView.setNavigationItemSelectedListener { menuItem ->
- Log.d("setNavigationItemSelectedListener", "menuItem: $menuItem")
+ Log.d("NavigationDrawer", "menuItem: $menuItem")
val currentFragment = supportFragmentManager.findFragmentById(R.id.main)
- Log.d("setNavigationItemSelectedListener", "currentFragment: $currentFragment")
+ Log.d("NavigationDrawer", "currentFragment: $currentFragment")
when (menuItem.itemId) {
-
R.id.nav_item_home -> {
- Log.d("setNavigationItemSelectedListener", "nav_item_home")
+ Log.d("NavigationDrawer", "nav_item_home")
val currentFragment = supportFragmentManager.findFragmentById(R.id.main)
- Log.d("setNavigationItemSelectedListener", "currentFragment: $currentFragment")
+ Log.d("NavigationDrawer", "currentFragment: $currentFragment")
if (currentFragment !is HomeFragment) {
- Log.d("setNavigationItemSelectedListener", "NOT HomeFragment")
-
+ Log.d("NavigationDrawer", "NOT HomeFragment")
if (supportFragmentManager.backStackEntryCount > 0) {
- Log.i("setNavigationItemSelectedListener", "popBackStack()")
+ Log.i("NavigationDrawer", "popBackStack()")
supportFragmentManager.popBackStack()
} else {
- Log.i("setNavigationItemSelectedListener", "beginTransaction()")
+ Log.i("NavigationDrawer", "beginTransaction()")
supportFragmentManager.beginTransaction()
.replace(R.id.main, HomeFragment())
.commitNow()
}
-
//supportFragmentManager.popBackStack(
// null,
// FragmentManager.POP_BACK_STACK_INCLUSIVE
@@ -115,24 +98,14 @@ class MainActivity : AppCompatActivity() {
}
R.id.nav_item_upload -> {
- Log.d("setNavigationItemSelectedListener", "nav_item_upload")
- val permissions = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
- arrayOf(
- Manifest.permission.READ_MEDIA_IMAGES,
- Manifest.permission.READ_MEDIA_VIDEO,
- Manifest.permission.READ_MEDIA_AUDIO
- )
- } else {
- arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
- }
- Log.d("setNavigationItemSelectedListener", "permissions: $permissions")
- permissionLauncher.launch(permissions)
+ Log.d("NavigationDrawer", "nav_item_upload")
+ filePickerLauncher.launch(arrayOf("*/*"))
binding.drawerLayout.closeDrawers()
false
}
R.id.nav_item_settings -> {
- Log.d("setNavigationItemSelectedListener", "nav_item_settings")
+ Log.d("NavigationDrawer", "nav_item_settings")
supportFragmentManager.beginTransaction()
.replace(R.id.main, SettingsFragment())
.addToBackStack(null)
@@ -142,26 +115,30 @@ class MainActivity : AppCompatActivity() {
true
}
- else -> false
+ else -> {
+ Log.w("NavigationDrawer", "UNKNOWN")
+ Toast.makeText(this, "Unknown Menu Item!", Toast.LENGTH_LONG).show()
+ false
+ }
}
}
// Navigation - Back Button
supportFragmentManager.addOnBackStackChangedListener {
val currentFragment = supportFragmentManager.findFragmentById(R.id.main)
- Log.d("addOnBackStackChangedListener", "currentFragment: $currentFragment")
+ Log.d("BackStackChanged", "currentFragment: $currentFragment")
val itemId = when (currentFragment) {
is SettingsFragment -> R.id.nav_item_settings
is HomeFragment -> R.id.nav_item_home
is PreviewFragment -> View.NO_ID
else -> View.NO_ID
}
- Log.d("addOnBackStackChangedListener", "itemId: $itemId")
+ Log.d("BackStackChanged", "itemId: $itemId")
if (itemId != View.NO_ID) {
- Log.d("addOnBackStackChangedListener", "SET isChecked")
+ Log.d("BackStackChanged", "SET isChecked")
binding.navigationView.menu.findItem(itemId)?.isChecked = true
} else {
- Log.d("addOnBackStackChangedListener", "NOT Checkable")
+ Log.d("BackStackChanged", "NOT Checkable")
//binding.navigationView.menu.setGroupCheckable(0, false, true)
binding.navigationView.menu.setGroupCheckable(0, true, true)
for (i in 0 until binding.navigationView.menu.size) {
From 85417f6f5284c229294c8298cffa649399cb636c Mon Sep 17 00:00:00 2001
From: Shane <6071159+smashedr@users.noreply.github.com>
Date: Tue, 15 Apr 2025 23:16:30 -0700
Subject: [PATCH 3/6] Add WebChromeClient
---
.../java/org/cssnr/zipline/HomeFragment.kt | 41 +++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/app/src/main/java/org/cssnr/zipline/HomeFragment.kt b/app/src/main/java/org/cssnr/zipline/HomeFragment.kt
index f4a88d4..a3559ab 100644
--- a/app/src/main/java/org/cssnr/zipline/HomeFragment.kt
+++ b/app/src/main/java/org/cssnr/zipline/HomeFragment.kt
@@ -3,16 +3,20 @@ package org.cssnr.zipline
import android.annotation.SuppressLint
import android.content.Context.MODE_PRIVATE
import android.content.Intent
+import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.webkit.ValueCallback
+import android.webkit.WebChromeClient
import android.webkit.WebResourceError
import android.webkit.WebResourceRequest
import android.webkit.WebResourceResponse
import android.webkit.WebView
import android.webkit.WebViewClient
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.edit
import androidx.core.net.toUri
import androidx.fragment.app.Fragment
@@ -74,6 +78,7 @@ class HomeFragment : Fragment() {
binding.webView.apply {
webViewClient = MyWebViewClient()
+ webChromeClient = MyWebChromeClient()
settings.domStorageEnabled = true
settings.javaScriptEnabled = true
settings.allowFileAccess = true
@@ -177,4 +182,40 @@ class HomeFragment : Fragment() {
Log.d("onReceivedHttpError", "ERROR: " + errorResponse.statusCode)
}
}
+
+ inner class MyWebChromeClient : WebChromeClient() {
+ private var filePathCallback: ValueCallback>? = null
+
+ private val fileChooserLauncher =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ val clipData = result.data?.clipData
+ val dataUri = result.data?.data
+ val uris = when {
+ clipData != null -> Array(clipData.itemCount) { i -> clipData.getItemAt(i).uri }
+ dataUri != null -> arrayOf(dataUri)
+ else -> null
+ }
+ Log.d("fileChooserLauncher", "uris: ${uris?.contentToString()}")
+ filePathCallback?.onReceiveValue(uris)
+ filePathCallback = null
+ }
+
+ override fun onShowFileChooser(
+ view: WebView,
+ callback: ValueCallback>,
+ params: FileChooserParams
+ ): Boolean {
+ filePathCallback?.onReceiveValue(null)
+ filePathCallback = callback
+ return try {
+ Log.d("onShowFileChooser", "fileChooserLauncher.launch")
+ fileChooserLauncher.launch(params.createIntent())
+ true
+ } catch (e: Exception) {
+ Log.w("onShowFileChooser", "Exception: $e")
+ filePathCallback = null
+ false
+ }
+ }
+ }
}
From 034af4c4c9f190a0f649dee4a5414147d984caa6 Mon Sep 17 00:00:00 2001
From: Shane <6071159+smashedr@users.noreply.github.com>
Date: Tue, 15 Apr 2025 23:57:27 -0700
Subject: [PATCH 4/6] Add WELCOME HOME BABY Hack
---
.../java/org/cssnr/zipline/HomeFragment.kt | 3 +++
.../java/org/cssnr/zipline/MainActivity.kt | 25 +++++++++++++++++--
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/cssnr/zipline/HomeFragment.kt b/app/src/main/java/org/cssnr/zipline/HomeFragment.kt
index a3559ab..055e755 100644
--- a/app/src/main/java/org/cssnr/zipline/HomeFragment.kt
+++ b/app/src/main/java/org/cssnr/zipline/HomeFragment.kt
@@ -24,6 +24,8 @@ import org.cssnr.zipline.databinding.FragmentHomeBinding
class HomeFragment : Fragment() {
+ var currentUrl: String = ""
+
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!
@@ -147,6 +149,7 @@ class HomeFragment : Fragment() {
override fun doUpdateVisitedHistory(view: WebView, url: String, isReload: Boolean) {
Log.d("doUpdateVisitedHistory", "url: $url")
+ currentUrl = url
if (url.endsWith("/auth/login") == true) {
Log.d("doUpdateVisitedHistory", "LOGOUT: $url")
diff --git a/app/src/main/java/org/cssnr/zipline/MainActivity.kt b/app/src/main/java/org/cssnr/zipline/MainActivity.kt
index eed2068..4f89553 100644
--- a/app/src/main/java/org/cssnr/zipline/MainActivity.kt
+++ b/app/src/main/java/org/cssnr/zipline/MainActivity.kt
@@ -13,6 +13,7 @@ import androidx.activity.enableEdgeToEdge
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
+import androidx.core.os.bundleOf
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.get
@@ -71,8 +72,6 @@ class MainActivity : AppCompatActivity() {
when (menuItem.itemId) {
R.id.nav_item_home -> {
Log.d("NavigationDrawer", "nav_item_home")
- val currentFragment = supportFragmentManager.findFragmentById(R.id.main)
- Log.d("NavigationDrawer", "currentFragment: $currentFragment")
if (currentFragment !is HomeFragment) {
Log.d("NavigationDrawer", "NOT HomeFragment")
if (supportFragmentManager.backStackEntryCount > 0) {
@@ -91,6 +90,28 @@ class MainActivity : AppCompatActivity() {
//supportFragmentManager.beginTransaction()
// .replace(R.id.main, HomeFragment())
// .commit()
+ } else {
+ Log.d("NavigationDrawer", "WELCOME HOME BABY")
+ //val fragment = supportFragmentManager.findFragmentByTag("HomeFragment")
+ val fragment = supportFragmentManager.findFragmentById(R.id.main) as? HomeFragment
+ Log.d("NavigationDrawer", "fragment: $fragment")
+ val url = fragment?.currentUrl
+ Log.d("NavigationDrawer", "url: $url")
+ val sharedPreferences = getSharedPreferences("default_preferences", MODE_PRIVATE)
+ val ziplineUrl = sharedPreferences.getString("ziplineUrl", null)
+ Log.d("handleIntent", "ziplineUrl: $ziplineUrl")
+ if (url != null && ziplineUrl != null){
+ val path = url.removePrefix(ziplineUrl)
+ if (path.startsWith("/u/") || path.startsWith("/view/")) {
+ val home = HomeFragment()
+ home.arguments = bundleOf("url" to ziplineUrl)
+ Log.d("processUpload", "arguments.url: $ziplineUrl")
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.main, home)
+ .commit()
+ }
+ }
+
}
binding.navigationView.setCheckedItem(R.id.nav_item_home)
binding.drawerLayout.closeDrawers()
From 392827ee10043cd4b42730c4ce6efde545f5dbe8 Mon Sep 17 00:00:00 2001
From: Shane <6071159+smashedr@users.noreply.github.com>
Date: Wed, 16 Apr 2025 00:13:13 -0700
Subject: [PATCH 5/6] Cleanup Hack
---
.../java/org/cssnr/zipline/MainActivity.kt | 38 +++++++++----------
1 file changed, 17 insertions(+), 21 deletions(-)
diff --git a/app/src/main/java/org/cssnr/zipline/MainActivity.kt b/app/src/main/java/org/cssnr/zipline/MainActivity.kt
index 4f89553..8dc9ad9 100644
--- a/app/src/main/java/org/cssnr/zipline/MainActivity.kt
+++ b/app/src/main/java/org/cssnr/zipline/MainActivity.kt
@@ -73,7 +73,7 @@ class MainActivity : AppCompatActivity() {
R.id.nav_item_home -> {
Log.d("NavigationDrawer", "nav_item_home")
if (currentFragment !is HomeFragment) {
- Log.d("NavigationDrawer", "NOT HomeFragment")
+ Log.d("NavigationDrawer", "NOT ON HomeFragment")
if (supportFragmentManager.backStackEntryCount > 0) {
Log.i("NavigationDrawer", "popBackStack()")
supportFragmentManager.popBackStack()
@@ -91,27 +91,23 @@ class MainActivity : AppCompatActivity() {
// .replace(R.id.main, HomeFragment())
// .commit()
} else {
- Log.d("NavigationDrawer", "WELCOME HOME BABY")
- //val fragment = supportFragmentManager.findFragmentByTag("HomeFragment")
- val fragment = supportFragmentManager.findFragmentById(R.id.main) as? HomeFragment
- Log.d("NavigationDrawer", "fragment: $fragment")
- val url = fragment?.currentUrl
- Log.d("NavigationDrawer", "url: $url")
- val sharedPreferences = getSharedPreferences("default_preferences", MODE_PRIVATE)
- val ziplineUrl = sharedPreferences.getString("ziplineUrl", null)
- Log.d("handleIntent", "ziplineUrl: $ziplineUrl")
- if (url != null && ziplineUrl != null){
- val path = url.removePrefix(ziplineUrl)
- if (path.startsWith("/u/") || path.startsWith("/view/")) {
- val home = HomeFragment()
- home.arguments = bundleOf("url" to ziplineUrl)
- Log.d("processUpload", "arguments.url: $ziplineUrl")
- supportFragmentManager.beginTransaction()
- .replace(R.id.main, home)
- .commit()
- }
+ Log.d("NavigationDrawer", "ALREADY ON HomeFragment")
+ val url = currentFragment.currentUrl
+ Log.d("NavigationDrawer", "currentFragment.currentUrl: $url")
+ val preferences = getSharedPreferences("default_preferences", MODE_PRIVATE)
+ val ziplineUrl = preferences.getString("ziplineUrl", null)
+ Log.d("NavigationDrawer", "ziplineUrl: $ziplineUrl")
+ val path = url.removePrefix(ziplineUrl!!)
+ Log.d("NavigationDrawer", "path: $path")
+ if (path.startsWith("/u/") || path.startsWith("/view/")) {
+ Log.i("NavigationDrawer", "Reloading HomeFragment!")
+ val home = HomeFragment()
+ home.arguments = bundleOf("url" to ziplineUrl)
+ Log.d("NavigationDrawer", "arguments.url: $ziplineUrl")
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.main, home)
+ .commit()
}
-
}
binding.navigationView.setCheckedItem(R.id.nav_item_home)
binding.drawerLayout.closeDrawers()
From ca786528bd744c3d20d6c6e101e0776594c0d09d Mon Sep 17 00:00:00 2001
From: Shane <6071159+smashedr@users.noreply.github.com>
Date: Wed, 16 Apr 2025 00:14:56 -0700
Subject: [PATCH 6/6] Little Water
---
app/src/main/java/org/cssnr/zipline/MainActivity.kt | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/app/src/main/java/org/cssnr/zipline/MainActivity.kt b/app/src/main/java/org/cssnr/zipline/MainActivity.kt
index 8dc9ad9..62f74f8 100644
--- a/app/src/main/java/org/cssnr/zipline/MainActivity.kt
+++ b/app/src/main/java/org/cssnr/zipline/MainActivity.kt
@@ -94,15 +94,16 @@ class MainActivity : AppCompatActivity() {
Log.d("NavigationDrawer", "ALREADY ON HomeFragment")
val url = currentFragment.currentUrl
Log.d("NavigationDrawer", "currentFragment.currentUrl: $url")
- val preferences = getSharedPreferences("default_preferences", MODE_PRIVATE)
- val ziplineUrl = preferences.getString("ziplineUrl", null)
+ val ziplineUrl = getSharedPreferences("default_preferences", MODE_PRIVATE)
+ .getString("ziplineUrl", null)
Log.d("NavigationDrawer", "ziplineUrl: $ziplineUrl")
val path = url.removePrefix(ziplineUrl!!)
Log.d("NavigationDrawer", "path: $path")
if (path.startsWith("/u/") || path.startsWith("/view/")) {
Log.i("NavigationDrawer", "Reloading HomeFragment!")
- val home = HomeFragment()
- home.arguments = bundleOf("url" to ziplineUrl)
+ val home = HomeFragment().apply {
+ arguments = bundleOf("url" to ziplineUrl)
+ }
Log.d("NavigationDrawer", "arguments.url: $ziplineUrl")
supportFragmentManager.beginTransaction()
.replace(R.id.main, home)