diff --git a/app/src/main/java/org/cssnr/zipline/MainActivity.kt b/app/src/main/java/org/cssnr/zipline/MainActivity.kt index c94b325..016017f 100644 --- a/app/src/main/java/org/cssnr/zipline/MainActivity.kt +++ b/app/src/main/java/org/cssnr/zipline/MainActivity.kt @@ -162,8 +162,8 @@ class MainActivity : AppCompatActivity() { // TODO: Cleanup the logic for handling MAIN intent... val currentDestinationId = navController.currentDestination?.id Log.d("onNewIntent", "currentDestinationId: $currentDestinationId") - val launcherAction = preferences.getString("launcher_action", null) - Log.d("onNewIntent", "launcherAction: $launcherAction") + //val launcherAction = preferences.getString("launcher_action", null) + //Log.d("onNewIntent", "launcherAction: $launcherAction") val fromShortcut = intent.getStringExtra("fromShortcut") Log.d("onNewIntent", "fromShortcut: $fromShortcut") Log.d("onNewIntent", "nav_item_preview: ${R.id.nav_item_upload}") @@ -178,10 +178,10 @@ class MainActivity : AppCompatActivity() { .setPopUpTo(navController.graph.id, true) .build() ) - } else if (currentDestinationId != R.id.nav_item_home && launcherAction != "previous") { - Log.i("onNewIntent", "HOME SETTING SET - Navigating to HomeFragment") - navController.navigate(R.id.nav_item_home) } + //} else if (currentDestinationId != R.id.nav_item_home && launcherAction != "previous") { + // Log.i("onNewIntent", "HOME SETTING SET - Navigating to HomeFragment") + // navController.navigate(R.id.nav_item_home) // TODO: Determine if this needs to be in the above if/else if (fromShortcut == "upload") { Log.d("onNewIntent", "filePickerLauncher.launch") @@ -266,7 +266,10 @@ class MainActivity : AppCompatActivity() { } else { Toast.makeText(this, "That's a Bug!", Toast.LENGTH_LONG).show() Log.w("onNewIntent", "UNKNOWN INTENT - action: $action") + } + //} else if ("RECENT_FILE" == action) { + // Log.d("handleIntent", "RECENT_FILE") } override fun onStop() { diff --git a/app/src/main/java/org/cssnr/zipline/api/ZiplineApi.kt b/app/src/main/java/org/cssnr/zipline/api/ServerApi.kt similarity index 85% rename from app/src/main/java/org/cssnr/zipline/api/ZiplineApi.kt rename to app/src/main/java/org/cssnr/zipline/api/ServerApi.kt index 9200546..8e8b70c 100644 --- a/app/src/main/java/org/cssnr/zipline/api/ZiplineApi.kt +++ b/app/src/main/java/org/cssnr/zipline/api/ServerApi.kt @@ -29,10 +29,11 @@ import retrofit2.http.Header import retrofit2.http.Multipart import retrofit2.http.POST import retrofit2.http.Part +import retrofit2.http.Query import java.io.InputStream import java.net.URLConnection -class ZiplineApi(private val context: Context, url: String? = null) { +class ServerApi(private val context: Context, url: String? = null) { val api: ApiService private var ziplineUrl: String @@ -97,7 +98,7 @@ class ZiplineApi(private val context: Context, url: String? = null) { return response } - suspend fun upload(fileName: String, inputStream: InputStream): Response { + suspend fun upload(fileName: String, inputStream: InputStream): Response { Log.d("Api[upload]", "fileName: $fileName") val fileNameFormat = preferences.getString("file_name_format", null) ?: "random" Log.d("Api[upload]", "fileNameFormat: $fileNameFormat") @@ -126,6 +127,19 @@ class ZiplineApi(private val context: Context, url: String? = null) { return response } + suspend fun recent(take: String = "3"): Response> { + Log.d("Api[stats]", "stats") + val response = api.getRecent(take) + if (response.code() == 401) { + val token = reAuthenticate(api, ziplineUrl) + Log.d("Api[upload]", "reAuthenticate: token: $token") + if (token != null) { + return api.getRecent() + } + } + return response + } + private suspend fun reAuthenticate(api: ApiService, ziplineUrl: String): String? { return try { val cookies = CookieManager.getInstance().getCookie(ziplineUrl) @@ -196,12 +210,17 @@ class ZiplineApi(private val context: Context, url: String? = null) { @GET("user/stats") suspend fun getStats(): Response + @GET("user/recent") + suspend fun getRecent( + @Query("take") take: String = "3" + ): Response> + @Multipart @POST("upload") suspend fun postUpload( @Header("x-zipline-format") format: String, @Part file: MultipartBody.Part, - ): Response + ): Response @POST("user/urls") suspend fun postShort( @@ -221,12 +240,12 @@ class ZiplineApi(private val context: Context, url: String? = null) { ) @JsonClass(generateAdapter = true) - data class FileResponse( - val files: List, + data class UploadedFiles( + val files: List, ) @JsonClass(generateAdapter = true) - data class UploadedFile( + data class UploadResponse( val id: String, val type: String, val url: String, @@ -266,6 +285,24 @@ class ZiplineApi(private val context: Context, url: String? = null) { @Json(name = "urlViews") val urlViews: Int, ) + @JsonClass(generateAdapter = true) + data class FileResponse( + @Json(name = "createdAt") val createdAt: String, + @Json(name = "updatedAt") val updatedAt: String, + @Json(name = "deletesAt") val deletesAt: String?, + @Json(name = "favorite") val favorite: Boolean, + @Json(name = "id") val id: String, + @Json(name = "originalName") val originalName: String?, + @Json(name = "name") val name: String, + @Json(name = "size") val size: Int, + @Json(name = "type") val type: String, + @Json(name = "views") val views: Int, + @Json(name = "maxViews") val maxViews: Int?, + @Json(name = "folderId") val folderId: String?, + @Json(name = "thumbnail") val thumbnail: String?, + @Json(name = "password") val password: String?, + @Json(name = "url") val url: String + ) inner class SimpleCookieJar : CookieJar { private val cookieStore = mutableMapOf>() diff --git a/app/src/main/java/org/cssnr/zipline/ui/settings/SettingsFragment.kt b/app/src/main/java/org/cssnr/zipline/ui/settings/SettingsFragment.kt index a08aab5..28239bf 100644 --- a/app/src/main/java/org/cssnr/zipline/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/org/cssnr/zipline/ui/settings/SettingsFragment.kt @@ -61,9 +61,9 @@ class SettingsFragment : PreferenceFragmentCompat() { val fileNameFormat = findPreference("file_name_format") fileNameFormat?.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance() - // Launcher Icon Action - val launcherAction = findPreference("launcher_action") - launcherAction?.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance() + //// Launcher Icon Action + //val launcherAction = findPreference("launcher_action") + //launcherAction?.summaryProvider = ListPreference.SimpleSummaryProvider.getInstance() // Widget Settings findPreference("open_widget_settings")?.setOnPreferenceClickListener { diff --git a/app/src/main/java/org/cssnr/zipline/ui/setup/SetupFragment.kt b/app/src/main/java/org/cssnr/zipline/ui/setup/SetupFragment.kt index 95e1672..2a87bb4 100644 --- a/app/src/main/java/org/cssnr/zipline/ui/setup/SetupFragment.kt +++ b/app/src/main/java/org/cssnr/zipline/ui/setup/SetupFragment.kt @@ -26,7 +26,7 @@ import com.google.firebase.ktx.Firebase import kotlinx.coroutines.launch import org.cssnr.zipline.MainActivity import org.cssnr.zipline.R -import org.cssnr.zipline.api.ZiplineApi +import org.cssnr.zipline.api.ServerApi import org.cssnr.zipline.databinding.FragmentSetupBinding class SetupFragment : Fragment() { @@ -118,7 +118,7 @@ class SetupFragment : Fragment() { Log.d("loginButton", "lifecycleScope.launch") lifecycleScope.launch { - val api = ZiplineApi(ctx, host) + val api = ServerApi(ctx, host) val token = api.login(host, user, pass) Log.d("loginButton", "token: $token") if (token.isNullOrEmpty()) { diff --git a/app/src/main/java/org/cssnr/zipline/ui/upload/ShortFragment.kt b/app/src/main/java/org/cssnr/zipline/ui/upload/ShortFragment.kt index eb6e787..e41a636 100644 --- a/app/src/main/java/org/cssnr/zipline/ui/upload/ShortFragment.kt +++ b/app/src/main/java/org/cssnr/zipline/ui/upload/ShortFragment.kt @@ -19,7 +19,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.cssnr.zipline.R -import org.cssnr.zipline.api.ZiplineApi +import org.cssnr.zipline.api.ServerApi import org.cssnr.zipline.copyToClipboard import org.cssnr.zipline.databinding.FragmentShortBinding @@ -55,13 +55,6 @@ class ShortFragment : Fragment() { navController = findNavController() - //val callback = object : OnBackPressedCallback(true) { - // override fun handleOnBackPressed() { - // requireActivity().finish() - // } - //} - //requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback) - val url = requireArguments().getString("url") Log.d("Short[onViewCreated]", "url: $url") @@ -127,9 +120,11 @@ class ShortFragment : Fragment() { Log.d("processShort", "Vanity: $vanityName") val savedUrl = preferences.getString("ziplineUrl", null) - val authToken = preferences.getString("ziplineToken", null) Log.d("processShort", "savedUrl: $savedUrl") + val authToken = preferences.getString("ziplineToken", null) Log.d("processShort", "authToken: $authToken") + val shareUrl = preferences.getBoolean("share_after_short", true) + Log.d("processShort", "shareUrl: $shareUrl") if (savedUrl == null || authToken == null) { Log.e("processShort", "ziplineUrl || ziplineToken is null") @@ -143,7 +138,7 @@ class ShortFragment : Fragment() { return } - val api = ZiplineApi(requireContext()) + val api = ServerApi(requireContext()) lifecycleScope.launch { val response = api.shorten(longUrl, vanityName) Log.d("processShort", "response: $response") @@ -152,8 +147,6 @@ class ShortFragment : Fragment() { if (shortResponse != null) { Log.d("processShort", "shortResponse.url: ${shortResponse.url}") copyToClipboard(requireContext(), shortResponse.url) - val shareUrl = preferences.getBoolean("share_after_short", true) - Log.d("processShort", "shareUrl: $shareUrl") if (shareUrl) { val shareIntent = Intent(Intent.ACTION_SEND).apply { type = "text/plain" @@ -179,73 +172,4 @@ class ShortFragment : Fragment() { } } } - -// // TODO: This is the DjangoFiles processShort, Old Zipline processShort was used above... -// private fun processShort(url: String, vanity: String?) { -// Log.d("processShort", "url: $url") -// Log.d("processShort", "vanity: $vanity") -// //val preferences = getSharedPreferences(PREFS_NAME, MODE_PRIVATE) -// val savedUrl = preferences.getString("ziplineUrl", null) -// Log.d("processShort", "savedUrl: $savedUrl") -// val authToken = preferences.getString("ziplineToken", null) -// Log.d("processShort", "authToken: $authToken") -// if (savedUrl == null || authToken == null) { -// // TODO: Show settings dialog here... -// Log.w("processShort", "Missing OR savedUrl/authToken") -// Toast.makeText(requireContext(), getString(R.string.tst_no_url), Toast.LENGTH_SHORT) -// .show() -// return -// } -// val api = ZiplineApi(requireContext()) -// Log.d("processShort", "api: $api") -// Toast.makeText(requireContext(), "Creating Short URL...", Toast.LENGTH_SHORT).show() -// lifecycleScope.launch { -// try { -// val response = api.shorten(url, vanity, savedUrl) -// Log.d("processShort", "response: $response") -// if (response.isSuccessful) { -// val shortResponse = response.body() -// Log.d("processShort", "shortResponse: $shortResponse") -// withContext(Dispatchers.Main) { -// if (shortResponse != null) { -// copyToClipboard(requireContext(), shortResponse.url) -// val shareUrl = sharedPreferences.getBoolean("share_after_short", true) -// Log.d("processShort", "shareUrl: $shareUrl") -// if (shareUrl) { -// val shareIntent = Intent(Intent.ACTION_SEND).apply { -// type = "text/plain" -// putExtra(Intent.EXTRA_TEXT, shortResponse.url) -// } -// startActivity(Intent.createChooser(shareIntent, null)) -// } -// navController.navigate( -// R.id.nav_item_home, -// bundleOf("url" to "${savedUrl}/shorts/#shorts-table_wrapper"), -// NavOptions.Builder() -// .setPopUpTo(R.id.nav_graph, inclusive = true) -// .build() -// ) -// } else { -// Log.w("processShort", "shortResponse is null") -// val msg = "Unknown Response!" -// Toast.makeText(requireContext(), msg, Toast.LENGTH_LONG).show() -// } -// } -// } else { -// val msg = "Error: ${response.code()}: ${response.message()}" -// Log.w("processShort", "Error: $msg") -// withContext(Dispatchers.Main) { -// Toast.makeText(requireContext(), msg, Toast.LENGTH_LONG).show() -// } -// } -// } catch (e: Exception) { -// e.printStackTrace() -// val msg = e.message ?: "Unknown Error!" -// Log.i("processShort", "msg: $msg") -// withContext(Dispatchers.Main) { -// Toast.makeText(requireContext(), msg, Toast.LENGTH_LONG).show() -// } -// } -// } -// } } diff --git a/app/src/main/java/org/cssnr/zipline/ui/upload/TextFragment.kt b/app/src/main/java/org/cssnr/zipline/ui/upload/TextFragment.kt index 97036ef..50c7e9a 100644 --- a/app/src/main/java/org/cssnr/zipline/ui/upload/TextFragment.kt +++ b/app/src/main/java/org/cssnr/zipline/ui/upload/TextFragment.kt @@ -20,7 +20,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.cssnr.zipline.R -import org.cssnr.zipline.api.ZiplineApi +import org.cssnr.zipline.api.ServerApi import org.cssnr.zipline.copyToClipboard import org.cssnr.zipline.databinding.FragmentTextBinding @@ -59,30 +59,18 @@ class TextFragment : Fragment() { if (extraText.isEmpty()) { // TODO: Better Handle this Error - Log.e("Text[onViewCreated]", "extraText is null") + Log.w("Text[onViewCreated]", "extraText is null") Toast.makeText(requireContext(), "No Text to Process!", Toast.LENGTH_LONG).show() //return } - //val preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) - //val savedUrl = preferences.getString("ziplineUrl", null) - //Log.d("Text[onViewCreated]", "savedUrl: $savedUrl") - //val authToken = preferences.getString("ziplineToken", null) - //Log.d("Text[onViewCreated]", "authToken: $authToken") - //if (savedUrl == null) { - // // TODO: Better Handle this Error - // Log.e("Text[onViewCreated]", "savedUrl is null") - // Toast.makeText(requireContext(), "No Server Setup!", Toast.LENGTH_LONG).show() - // return - //} - binding.textContent.setText(extraText) binding.shareButton.setOnClickListener { Log.d("shareButton", "setOnClickListener") val shareIntent = Intent(Intent.ACTION_SEND).apply { type = "text/plain" - putExtra(Intent.EXTRA_TEXT, extraText) + putExtra(Intent.EXTRA_TEXT, binding.textContent.text) } startActivity(Intent.createChooser(shareIntent, null)) } @@ -120,6 +108,9 @@ class TextFragment : Fragment() { Log.d("processUpload", "savedUrl: $savedUrl") val authToken = preferences.getString("ziplineToken", null) Log.d("processUpload", "authToken: $authToken") + val shareUrl = preferences.getBoolean("share_after_upload", true) + Log.d("processShort", "shareUrl: $shareUrl") + if (savedUrl == null || authToken == null) { // TODO: Show settings dialog here... Log.w("processUpload", "Missing OR savedUrl/authToken/fileName") @@ -128,7 +119,7 @@ class TextFragment : Fragment() { return } val inputStream = textContent.byteInputStream() - val api = ZiplineApi(requireContext()) + val api = ServerApi(requireContext()) Log.d("processUpload", "api: $api") Toast.makeText(requireContext(), getString(R.string.tst_uploading_file), Toast.LENGTH_SHORT) .show() diff --git a/app/src/main/java/org/cssnr/zipline/ui/upload/UploadFragment.kt b/app/src/main/java/org/cssnr/zipline/ui/upload/UploadFragment.kt index e3ba799..4511316 100644 --- a/app/src/main/java/org/cssnr/zipline/ui/upload/UploadFragment.kt +++ b/app/src/main/java/org/cssnr/zipline/ui/upload/UploadFragment.kt @@ -38,7 +38,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.cssnr.zipline.R -import org.cssnr.zipline.api.ZiplineApi +import org.cssnr.zipline.api.ServerApi import org.cssnr.zipline.copyToClipboard import org.cssnr.zipline.databinding.FragmentUploadBinding import org.json.JSONObject @@ -49,7 +49,6 @@ class UploadFragment : Fragment() { private val binding get() = _binding!! private lateinit var navController: NavController - private lateinit var player: ExoPlayer private lateinit var webView: WebView @@ -86,21 +85,6 @@ class UploadFragment : Fragment() { navController = findNavController() - //val callback = object : OnBackPressedCallback(true) { - // override fun handleOnBackPressed() { - // requireActivity().finish() - // } - //} - //requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback) - - //val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - // requireArguments().getParcelable("EXTRA_INTENT", Intent::class.java) - //} else { - // @Suppress("DEPRECATION") - // requireArguments().getParcelable("EXTRA_INTENT") as? Intent - //} - //Log.d("Upload[onViewCreated]", "intent: $intent") - val uri = requireArguments().getString("uri")?.toUri() Log.d("Upload[onViewCreated]", "uri: $uri") @@ -163,6 +147,7 @@ class UploadFragment : Fragment() { webView.apply { settings.javaScriptEnabled = true addJavascriptInterface(object { + @Suppress("unused") @JavascriptInterface fun notifyReady() { webView.post { @@ -232,6 +217,9 @@ class UploadFragment : Fragment() { Log.d("processUpload", "savedUrl: $savedUrl") val authToken = preferences.getString("ziplineToken", null) Log.d("processUpload", "authToken: $authToken") + val shareUrl = preferences.getBoolean("share_after_upload", true) + Log.d("processUpload", "shareUrl: $shareUrl") + if (savedUrl == null || authToken == null) { // TODO: Show settings dialog here... Log.w("processUpload", "Missing OR savedUrl/authToken/fileName") @@ -260,7 +248,7 @@ class UploadFragment : Fragment() { return } Log.d("processUpload", "DEBUG 1") - val api = ZiplineApi(requireContext()) + val api = ServerApi(requireContext()) Log.d("processUpload", "DEBUG 2") Log.d("processUpload", "api: $api") Toast.makeText(requireContext(), getString(R.string.tst_uploading_file), Toast.LENGTH_SHORT) @@ -275,7 +263,16 @@ class UploadFragment : Fragment() { withContext(Dispatchers.Main) { if (uploadResponse != null) { logFileUpload() - copyToClipboard(requireContext(), uploadResponse.files.first().url) + val url = uploadResponse.files.first().url + Log.d("processUpload", "url: $url") + copyToClipboard(requireContext(), url) + if (shareUrl) { + val shareIntent = Intent(Intent.ACTION_SEND).apply { + type = "text/plain" + putExtra(Intent.EXTRA_TEXT, url) + } + startActivity(Intent.createChooser(shareIntent, null)) + } navController.navigate( R.id.nav_item_home, bundleOf("url" to "${savedUrl}/dashboard/files/"), diff --git a/app/src/main/java/org/cssnr/zipline/ui/upload/UploadMultiFragment.kt b/app/src/main/java/org/cssnr/zipline/ui/upload/UploadMultiFragment.kt index 9832547..0eabdea 100644 --- a/app/src/main/java/org/cssnr/zipline/ui/upload/UploadMultiFragment.kt +++ b/app/src/main/java/org/cssnr/zipline/ui/upload/UploadMultiFragment.kt @@ -1,5 +1,6 @@ package org.cssnr.zipline.ui.upload +import android.content.Intent import android.content.res.Configuration import android.graphics.Rect import android.net.Uri @@ -22,8 +23,8 @@ import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import kotlinx.coroutines.launch import org.cssnr.zipline.R -import org.cssnr.zipline.api.ZiplineApi -import org.cssnr.zipline.api.ZiplineApi.FileResponse +import org.cssnr.zipline.api.ServerApi +import org.cssnr.zipline.api.ServerApi.UploadedFiles import org.cssnr.zipline.databinding.FragmentUploadMultiBinding class UploadMultiFragment : Fragment() { @@ -171,6 +172,8 @@ class UploadMultiFragment : Fragment() { Log.d("processMultiUpload", "savedUrl: $savedUrl") val authToken = preferences.getString("ziplineToken", null) Log.d("processMultiUpload", "authToken: $authToken") + val shareUrl = preferences.getBoolean("share_after_upload", true) + Log.d("processUpload", "shareUrl: $shareUrl") if (savedUrl == null || authToken == null) { // TODO: Show settings dialog here... @@ -183,9 +186,9 @@ class UploadMultiFragment : Fragment() { val msg = "Uploading ${fileUris.size} Files..." Toast.makeText(requireContext(), msg, Toast.LENGTH_SHORT).show() - val api = ZiplineApi(requireContext()) + val api = ServerApi(requireContext()) Log.d("processMultiUpload", "api: $api") - val results: MutableList = mutableListOf() + val results: MutableList = mutableListOf() val currentContext = requireContext() lifecycleScope.launch { for (fileUri in fileUris) { @@ -201,10 +204,10 @@ class UploadMultiFragment : Fragment() { val response = api.upload(fileName!!, inputStream) Log.d("processMultiUpload", "response: $response") if (response.isSuccessful) { - val fileResponse = response.body() - Log.d("processMultiUpload", "fileResponse: $fileResponse") - if (fileResponse != null) { - results.add(fileResponse) + val uploadedFiles = response.body() + Log.d("processMultiUpload", "uploadedFiles: $uploadedFiles") + if (uploadedFiles != null) { + results.add(uploadedFiles) } } else { val msg = "Error: ${response.code()}: ${response.message()}" @@ -229,6 +232,15 @@ class UploadMultiFragment : Fragment() { Toast.makeText(requireContext(), msg, Toast.LENGTH_SHORT).show() val fcMsg = if (results.size == fileUris.size) null else "Some Files Failed to Upload" logFileUpload(true, fcMsg, true) + if (shareUrl && results.size == 1) { + val url = results.first().files.first().url + Log.d("processMultiUpload", "url: $url") + val shareIntent = Intent(Intent.ACTION_SEND).apply { + type = "text/plain" + putExtra(Intent.EXTRA_TEXT, url) + } + startActivity(Intent.createChooser(shareIntent, null)) + } navController.navigate( R.id.nav_item_home, bundleOf("url" to "${savedUrl}/dashboard/files/"), diff --git a/app/src/main/java/org/cssnr/zipline/widget/WidgetProvider.kt b/app/src/main/java/org/cssnr/zipline/widget/WidgetProvider.kt index ce76f10..ad4e170 100644 --- a/app/src/main/java/org/cssnr/zipline/widget/WidgetProvider.kt +++ b/app/src/main/java/org/cssnr/zipline/widget/WidgetProvider.kt @@ -110,6 +110,7 @@ class WidgetProvider : AppWidgetProvider() { views.setInt(R.id.widget_refresh_button, "setColorFilter", selectedTextColor) views.setInt(R.id.widget_upload_button, "setColorFilter", selectedTextColor) + //views.setInt(R.id.widget_recent_button, "setColorFilter", selectedTextColor) // Refresh val intent1 = Intent(context, WidgetProvider::class.java).apply { @@ -135,6 +136,15 @@ class WidgetProvider : AppWidgetProvider() { ) views.setOnClickPendingIntent(R.id.widget_upload_button, pendingIntent2) + //// Recent + //val pendingIntent3 = PendingIntent.getActivity( + // context, + // 0, + // Intent(context, MainActivity::class.java).apply { action = "RECENT_FILE" }, + // PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + //) + //views.setOnClickPendingIntent(R.id.widget_recent_button, pendingIntent3) + // Room Data GlobalScope.launch(Dispatchers.IO) { val dao: ServerDao = diff --git a/app/src/main/java/org/cssnr/zipline/work/AppWorker.kt b/app/src/main/java/org/cssnr/zipline/work/AppWorker.kt index aef7f23..914a5e9 100644 --- a/app/src/main/java/org/cssnr/zipline/work/AppWorker.kt +++ b/app/src/main/java/org/cssnr/zipline/work/AppWorker.kt @@ -8,7 +8,7 @@ import android.util.Log import androidx.preference.PreferenceManager import androidx.work.CoroutineWorker import androidx.work.WorkerParameters -import org.cssnr.zipline.api.ZiplineApi +import org.cssnr.zipline.api.ServerApi import org.cssnr.zipline.db.ServerDao import org.cssnr.zipline.db.ServerDatabase import org.cssnr.zipline.db.ServerEntity @@ -55,7 +55,7 @@ suspend fun Context.updateStats(): Boolean { val preferences = PreferenceManager.getDefaultSharedPreferences(this) val savedUrl = preferences.getString("ziplineUrl", null).toString() Log.d("updateStats", "savedUrl: $savedUrl") - val api = ZiplineApi(this, savedUrl) + val api = ServerApi(this, savedUrl) val statsResponse = api.stats() Log.d("updateStats", "statsResponse: $statsResponse") if (statsResponse.isSuccessful) { diff --git a/app/src/main/res/drawable/md_add_link_24px.xml b/app/src/main/res/drawable/md_add_link_24px.xml new file mode 100644 index 0000000..42fb1f7 --- /dev/null +++ b/app/src/main/res/drawable/md_add_link_24px.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/md_upload_file_24px.xml b/app/src/main/res/drawable/md_upload_file_24px.xml new file mode 100644 index 0000000..7f7df0f --- /dev/null +++ b/app/src/main/res/drawable/md_upload_file_24px.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/widget_layout.xml b/app/src/main/res/layout/widget_layout.xml index aa6784a..f037f42 100644 --- a/app/src/main/res/layout/widget_layout.xml +++ b/app/src/main/res/layout/widget_layout.xml @@ -72,6 +72,13 @@ android:contentDescription="Upload" android:background="?android:selectableItemBackgroundBorderless" android:src="@drawable/md_upload_24px" /> + + + + + + + + + - + + + + + + + +