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"> - - - - >? = 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 + } + } + } } diff --git a/app/src/main/java/org/cssnr/zipline/MainActivity.kt b/app/src/main/java/org/cssnr/zipline/MainActivity.kt index 9333d38..62f74f8 100644 --- a/app/src/main/java/org/cssnr/zipline/MainActivity.kt +++ b/app/src/main/java/org/cssnr/zipline/MainActivity.kt @@ -1,6 +1,5 @@ package org.cssnr.zipline -import android.Manifest import android.annotation.SuppressLint import android.content.Intent import android.net.Uri @@ -14,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 @@ -25,7 +25,6 @@ class MainActivity : AppCompatActivity() { internal lateinit var binding: ActivityMainBinding - private lateinit var permissionLauncher: ActivityResultLauncher> private lateinit var filePickerLauncher: ActivityResultLauncher> @@ -51,18 +50,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 +59,30 @@ 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") - val currentFragment = supportFragmentManager.findFragmentById(R.id.main) - Log.d("setNavigationItemSelectedListener", "currentFragment: $currentFragment") + Log.d("NavigationDrawer", "nav_item_home") if (currentFragment !is HomeFragment) { - Log.d("setNavigationItemSelectedListener", "NOT HomeFragment") - + Log.d("NavigationDrawer", "NOT ON 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 @@ -108,6 +90,25 @@ class MainActivity : AppCompatActivity() { //supportFragmentManager.beginTransaction() // .replace(R.id.main, HomeFragment()) // .commit() + } else { + Log.d("NavigationDrawer", "ALREADY ON HomeFragment") + val url = currentFragment.currentUrl + Log.d("NavigationDrawer", "currentFragment.currentUrl: $url") + 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().apply { + 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() @@ -115,24 +116,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 +133,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) { @@ -192,6 +187,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 }