mirror of
https://github.com/rebelonion/Dantotsu.git
synced 2026-01-21 07:13:55 +00:00
This includes shadowed variables, unnecessary parameters, layouts with string literals, items that cause performance bottlenecks, and the merge of extension types into only the necessary separate classes.
138 lines
4.4 KiB
Kotlin
138 lines
4.4 KiB
Kotlin
package ani.dantotsu.widgets
|
|
|
|
import android.content.Context
|
|
import android.graphics.Bitmap
|
|
import android.graphics.BitmapFactory
|
|
import android.widget.RemoteViews
|
|
import android.widget.RemoteViewsService
|
|
import ani.dantotsu.R
|
|
import ani.dantotsu.util.Logger
|
|
import java.io.InputStream
|
|
import java.net.HttpURLConnection
|
|
import java.net.URL
|
|
|
|
class CurrentlyAiringRemoteViewsFactory(private val context: Context) :
|
|
RemoteViewsService.RemoteViewsFactory {
|
|
private var widgetItems = mutableListOf<WidgetItem>()
|
|
|
|
override fun onCreate() {
|
|
// 4 items for testing
|
|
widgetItems.clear()
|
|
Logger.log("CurrentlyAiringRemoteViewsFactory onCreate")
|
|
widgetItems = List(4) {
|
|
WidgetItem(
|
|
"Show $it",
|
|
"$it days $it hours $it minutes",
|
|
"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx14741-alxqoP4yx6WF.jpg"
|
|
)
|
|
}.toMutableList()
|
|
}
|
|
|
|
override fun onDataSetChanged() {
|
|
// 4 items for testing
|
|
Logger.log("CurrentlyAiringRemoteViewsFactory onDataSetChanged")
|
|
widgetItems.clear()
|
|
widgetItems.add(
|
|
WidgetItem(
|
|
"Show 1",
|
|
"1 day 2 hours 3 minutes",
|
|
"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx14741-alxqoP4yx6WF.jpg"
|
|
)
|
|
)
|
|
widgetItems.add(
|
|
WidgetItem(
|
|
"Show 2",
|
|
"2 days 3 hours 4 minutes",
|
|
"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx14741-alxqoP4yx6WF.jpg"
|
|
)
|
|
)
|
|
widgetItems.add(
|
|
WidgetItem(
|
|
"Show 3",
|
|
"3 days 4 hours 5 minutes",
|
|
"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx14741-alxqoP4yx6WF.jpg"
|
|
)
|
|
)
|
|
widgetItems.add(
|
|
WidgetItem(
|
|
"Show 4",
|
|
"4 days 5 hours 6 minutes",
|
|
"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx14741-alxqoP4yx6WF.jpg"
|
|
)
|
|
)
|
|
widgetItems.add(
|
|
WidgetItem(
|
|
"Show 5",
|
|
"5 days 6 hours 7 minutes",
|
|
"https://s4.anilist.co/file/anilistcdn/media/anime/cover/large/bx14741-alxqoP4yx6WF.jpg"
|
|
)
|
|
)
|
|
}
|
|
|
|
override fun onDestroy() {
|
|
widgetItems.clear()
|
|
}
|
|
|
|
override fun getCount(): Int {
|
|
return widgetItems.size
|
|
}
|
|
|
|
override fun getViewAt(position: Int): RemoteViews {
|
|
Logger.log("CurrentlyAiringRemoteViewsFactory getViewAt")
|
|
val item = widgetItems[position]
|
|
val rv = RemoteViews(context.packageName, R.layout.item_currently_airing_widget).apply {
|
|
setTextViewText(R.id.text_show_title, item.title)
|
|
setTextViewText(R.id.text_show_countdown, item.countdown)
|
|
val bitmap = downloadImageAsBitmap(item.image)
|
|
//setImageViewUri(R.id.image_show_icon, Uri.parse(item.image))
|
|
setImageViewBitmap(R.id.image_show_icon, bitmap)
|
|
}
|
|
|
|
return rv
|
|
}
|
|
|
|
private fun downloadImageAsBitmap(imageUrl: String): Bitmap? {
|
|
var bitmap: Bitmap? = null
|
|
var inputStream: InputStream? = null
|
|
var urlConnection: HttpURLConnection? = null
|
|
|
|
try {
|
|
val url = URL(imageUrl)
|
|
urlConnection = url.openConnection() as HttpURLConnection
|
|
urlConnection.requestMethod = "GET"
|
|
urlConnection.connect()
|
|
|
|
if (urlConnection.responseCode == HttpURLConnection.HTTP_OK) {
|
|
inputStream = urlConnection.inputStream
|
|
bitmap = BitmapFactory.decodeStream(inputStream)
|
|
}
|
|
} catch (e: Exception) {
|
|
e.printStackTrace()
|
|
// Handle the error according to your needs
|
|
} finally {
|
|
// Clean up resources
|
|
inputStream?.close()
|
|
urlConnection?.disconnect()
|
|
}
|
|
|
|
return bitmap
|
|
}
|
|
|
|
override fun getLoadingView(): RemoteViews {
|
|
return RemoteViews(context.packageName, R.layout.item_currently_airing_widget)
|
|
}
|
|
|
|
override fun getViewTypeCount(): Int {
|
|
return 1
|
|
}
|
|
|
|
override fun getItemId(p0: Int): Long {
|
|
return p0.toLong()
|
|
}
|
|
|
|
override fun hasStableIds(): Boolean {
|
|
return true
|
|
}
|
|
}
|
|
|
|
data class WidgetItem(val title: String, val countdown: String, val image: String) |