diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 12ede98..76a077a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,33 +1,35 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - + + + \ No newline at end of file diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt index c4abaa0..d4d5b92 100644 --- a/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt @@ -1,19 +1,104 @@ -package com.illusionware.npsbrowser.activities - -import android.os.Bundle -import com.illusionware.npsbrowser.AppData -import com.illusionware.npsbrowser.databinding.ActivitySingleAppBinding - -class SingleAppActivity: BaseActivity() { - companion object { - lateinit var app : AppData - } - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val binding = ActivitySingleAppBinding.inflate(layoutInflater) - setContentView(binding.root) - - binding.titleID.text = app.titleID - binding.gameTitle.text = app.title - } +package com.illusionware.npsbrowser.activities + +import android.app.DownloadManager +import android.content.ClipData +import android.content.ClipboardManager +import android.net.Uri +import android.os.Bundle +import android.os.Environment +import android.util.Log +import android.view.View +import android.widget.Toast +import com.illusionware.npsbrowser.AppData +import com.illusionware.npsbrowser.databinding.ActivitySingleAppBinding +import java.lang.Exception + +class SingleAppActivity: BaseActivity() { + companion object { + lateinit var app : AppData + } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = ActivitySingleAppBinding.inflate(layoutInflater) + setContentView(binding.root) + + var downloadManager = getSystemService(DOWNLOAD_SERVICE) as DownloadManager + + binding.singleAppTitle.text = "[${app.titleID}] ${app.title}" + if (app.fileSize != null) { + binding.singleAppSize.text = prettifySize() + } else { + binding.singleAppSizeTitle.visibility = View.INVISIBLE + } + binding.singleAppContentId.text = app.contentID + binding.singleAppFwVer.text = app.minFW + // TODO: get and set app icon + if (app.minFW.isNullOrBlank()) { + binding.singleAppFwVerTitle.visibility = View.INVISIBLE + } + if (app.license == "MISSING") { + binding.singleAppError.text = "Warning: No license was provided for this app." + } + if (app.link == "CART ONLY") { + binding.singleAppError.text = "CART ONLY GAME" + binding.singleAppDownloadButton.isEnabled = false + } else if (app.link == "MISSING") { + binding.singleAppError.text = "Warning: No download link was provided for this app." + binding.singleAppDownloadButton.isEnabled = false + } + + binding.singleAppContentId.setOnLongClickListener { + val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager + val clipData = ClipData.newPlainText("Content ID", binding.singleAppContentId.text) + clipboardManager.setPrimaryClip(clipData) + Toast.makeText(this, "Content ID Copied to Clipboard!", Toast.LENGTH_SHORT).show() + true + } + + binding.singleAppDownloadButton.setOnClickListener { + try { + var request = DownloadManager.Request(Uri.parse(app.link)) + request.setTitle(app.title) + request.setDescription("Downloading...") + request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) + request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, app.title + ".pkg") // TODO: set up preference for this + downloadManager.enqueue(request) + } catch (e: Exception) { + Toast.makeText(this, "An error occurred while downloading. please try again", Toast.LENGTH_SHORT).show() + } + } + + binding.singleAppDownloadButton.setOnLongClickListener { + val clipboardManager = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager + val clipData = ClipData.newPlainText("PKG URL", app.link) + clipboardManager.setPrimaryClip(clipData) + Toast.makeText(this, "PKG URL Copied to Clipboard", Toast.LENGTH_SHORT).show() + true + } + } + + private fun prettifySize(): String { + if (app.fileSize!!.toFloat() / (1024 * 1024 * 1024) > 1) { + return "%.1f GB".format(toGB(app.fileSize!!)) + } + if (app.fileSize!!.toFloat() / (1024 * 1024) > 1) { + return "%.1f MB".format(toMB(app.fileSize!!)) + } + if (app.fileSize!!.toFloat() / 1024 > 1) { + return "%.1f KB".format(toKB(app.fileSize!!)) + } + return "${app.fileSize!!} Bytes"; + } + + private fun toKB(size: Number): Number { + return size.toFloat() / 1024 + } + + private fun toMB(size: Number): Number { + return size.toFloat() / (1024 * 1024) + } + + private fun toGB(size: Number): Number { + return size.toFloat() / (1024 * 1024 * 1024) + } } \ No newline at end of file diff --git a/app/src/main/res/drawable-v24/rect_light_blue.xml b/app/src/main/res/drawable-v24/rect_light_blue.xml index 6db8c54..0da9c7a 100644 --- a/app/src/main/res/drawable-v24/rect_light_blue.xml +++ b/app/src/main/res/drawable-v24/rect_light_blue.xml @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rect_red.xml b/app/src/main/res/drawable-v24/rect_red.xml similarity index 77% rename from app/src/main/res/drawable/rect_red.xml rename to app/src/main/res/drawable-v24/rect_red.xml index 60b0a21..48eeebb 100644 --- a/app/src/main/res/drawable/rect_red.xml +++ b/app/src/main/res/drawable-v24/rect_red.xml @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_single_app.xml b/app/src/main/res/layout/activity_single_app.xml index 9040fb9..d8f0777 100644 --- a/app/src/main/res/layout/activity_single_app.xml +++ b/app/src/main/res/layout/activity_single_app.xml @@ -1,59 +1,180 @@ - - - - - - - - - - - - - + + + + + + + + + + + +