1
0
forked from firka/firka

chore: dos2unix

This commit is contained in:
2025-08-29 08:39:30 +02:00
parent 0e31d3de3f
commit 3b89ba8e79
93 changed files with 2471 additions and 2471 deletions

View File

@@ -1,2 +1,2 @@
-keep class org.brotli.** { *; }
-keep class org.brotli.** { *; }
-keep class app.firka.naplo.glance.** { *; }

View File

@@ -1,99 +1,99 @@
package app.firka.naplo
import android.annotation.SuppressLint
import android.app.Application
import android.os.Build
import android.util.Log
import org.brotli.dec.BrotliInputStream
import org.json.JSONObject
import java.io.File
import java.io.FileOutputStream
import java.security.MessageDigest
import java.util.zip.ZipFile
class AppMain : Application() {
private fun File.sha256(): String {
if (!exists()) return "0000000000000000000000000000000000000000000000000000000000000000"
val md = MessageDigest.getInstance("SHA-256")
val digest = md.digest(this.readBytes())
return digest.fold("") { str, it -> str + "%02x".format(it) }
}
@SuppressLint("UnsafeDynamicallyLoadedCode")
override fun onCreate() {
super.onCreate()
var useUncompressedLibs = false
val abi = Build.SUPPORTED_ABIS[0]
val apks = File(applicationInfo.nativeLibraryDir, "../..").absoluteFile
.listFiles()!!
.filter { file -> file.name.endsWith(".apk") }
.toList()
var nativesApkN: ZipFile? = null
for (apk in apks) {
if (nativesApkN != null) break
val zip = ZipFile(apk)
val entries = zip.entries()
while (entries.hasMoreElements()) {
val entry = entries.nextElement()
if (entry.name.endsWith("$abi/index.so")) {
zip.close()
nativesApkN = ZipFile(apk)
break
}
if (entry.name.endsWith("$abi/libflutter.so")) {
useUncompressedLibs = true
break
}
}
zip.close()
}
if (useUncompressedLibs) {
return;
}
if (nativesApkN == null) {
throw Exception("Can't find native libraries")
}
val nativesApk: ZipFile = nativesApkN
val compressedLibsIndex = nativesApk.getInputStream(
nativesApk.getEntry("lib/$abi/index.so")
)
val compressedLibs = JSONObject(compressedLibsIndex.readBytes().toString(Charsets.UTF_8))
for (so in compressedLibs.keys()) {
val soFile = File(cacheDir, so)
if (soFile.sha256() == compressedLibs.getString(so)) {
System.load(soFile.absolutePath)
return
}
Log.d("AppMain", "Decompressing: $so")
val brInput = nativesApk.getInputStream(
nativesApk.getEntry("lib/$abi/${so.replace(".so", "-br.so")}")
)
val soOutput = FileOutputStream(soFile)
val brIn = BrotliInputStream(brInput)
brIn.copyTo(soOutput)
brInput.close()
soOutput.close()
System.load(soFile.absolutePath)
}
}
package app.firka.naplo
import android.annotation.SuppressLint
import android.app.Application
import android.os.Build
import android.util.Log
import org.brotli.dec.BrotliInputStream
import org.json.JSONObject
import java.io.File
import java.io.FileOutputStream
import java.security.MessageDigest
import java.util.zip.ZipFile
class AppMain : Application() {
private fun File.sha256(): String {
if (!exists()) return "0000000000000000000000000000000000000000000000000000000000000000"
val md = MessageDigest.getInstance("SHA-256")
val digest = md.digest(this.readBytes())
return digest.fold("") { str, it -> str + "%02x".format(it) }
}
@SuppressLint("UnsafeDynamicallyLoadedCode")
override fun onCreate() {
super.onCreate()
var useUncompressedLibs = false
val abi = Build.SUPPORTED_ABIS[0]
val apks = File(applicationInfo.nativeLibraryDir, "../..").absoluteFile
.listFiles()!!
.filter { file -> file.name.endsWith(".apk") }
.toList()
var nativesApkN: ZipFile? = null
for (apk in apks) {
if (nativesApkN != null) break
val zip = ZipFile(apk)
val entries = zip.entries()
while (entries.hasMoreElements()) {
val entry = entries.nextElement()
if (entry.name.endsWith("$abi/index.so")) {
zip.close()
nativesApkN = ZipFile(apk)
break
}
if (entry.name.endsWith("$abi/libflutter.so")) {
useUncompressedLibs = true
break
}
}
zip.close()
}
if (useUncompressedLibs) {
return;
}
if (nativesApkN == null) {
throw Exception("Can't find native libraries")
}
val nativesApk: ZipFile = nativesApkN
val compressedLibsIndex = nativesApk.getInputStream(
nativesApk.getEntry("lib/$abi/index.so")
)
val compressedLibs = JSONObject(compressedLibsIndex.readBytes().toString(Charsets.UTF_8))
for (so in compressedLibs.keys()) {
val soFile = File(cacheDir, so)
if (soFile.sha256() == compressedLibs.getString(so)) {
System.load(soFile.absolutePath)
return
}
Log.d("AppMain", "Decompressing: $so")
val brInput = nativesApk.getInputStream(
nativesApk.getEntry("lib/$abi/${so.replace(".so", "-br.so")}")
)
val soOutput = FileOutputStream(soFile)
val brIn = BrotliInputStream(brInput)
brIn.copyTo(soOutput)
brInput.close()
soOutput.close()
System.load(soFile.absolutePath)
}
}
}

View File

@@ -1,66 +1,66 @@
package app.firka.naplo
import app.firka.naplo.model.NameUid
import app.firka.naplo.model.NameUidDesc
import app.firka.naplo.model.Subject
import org.json.JSONObject
fun JSONObject.getStringOrNull(key: String): String? {
return try {
if (has(key)) {
getString(key)
} else {
null
}
} catch (_: Exception) {
null
}
}
fun JSONObject.getIntOrNull(key: String): Int? {
return try {
if (has(key)) {
getInt(key)
} else {
null
}
} catch (_: Exception) {
null
}
}
fun JSONObject.getNameUidDescOrNull(key: String): NameUidDesc? {
try {
return if (has(key)) {
NameUidDesc(getJSONObject(key))
} else {
null
}
} catch (_: Exception) {
return null
}
}
fun JSONObject.getNameUidOrNull(key: String): NameUid? {
try {
return if (has(key)) {
NameUid(getJSONObject(key))
} else {
null
}
} catch (_: Exception) {
return null
}
}
fun JSONObject.getSubjectOrNull(key: String): Subject? {
return try {
if (has(key)) {
Subject(getJSONObject(key))
} else {
null
}
} catch (_: Exception) {
null
}
package app.firka.naplo
import app.firka.naplo.model.NameUid
import app.firka.naplo.model.NameUidDesc
import app.firka.naplo.model.Subject
import org.json.JSONObject
fun JSONObject.getStringOrNull(key: String): String? {
return try {
if (has(key)) {
getString(key)
} else {
null
}
} catch (_: Exception) {
null
}
}
fun JSONObject.getIntOrNull(key: String): Int? {
return try {
if (has(key)) {
getInt(key)
} else {
null
}
} catch (_: Exception) {
null
}
}
fun JSONObject.getNameUidDescOrNull(key: String): NameUidDesc? {
try {
return if (has(key)) {
NameUidDesc(getJSONObject(key))
} else {
null
}
} catch (_: Exception) {
return null
}
}
fun JSONObject.getNameUidOrNull(key: String): NameUid? {
try {
return if (has(key)) {
NameUid(getJSONObject(key))
} else {
null
}
} catch (_: Exception) {
return null
}
}
fun JSONObject.getSubjectOrNull(key: String): Subject? {
return try {
if (has(key)) {
Subject(getJSONObject(key))
} else {
null
}
} catch (_: Exception) {
null
}
}

View File

@@ -1,111 +1,111 @@
package app.firka.naplo.glance
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.glance.GlanceModifier
import androidx.glance.appwidget.cornerRadius
import androidx.glance.background
import androidx.glance.color.ColorProvider
import androidx.glance.layout.Alignment
import androidx.glance.layout.Box
import androidx.glance.layout.Row
import androidx.glance.layout.Spacer
import androidx.glance.layout.fillMaxWidth
import androidx.glance.layout.padding
import androidx.glance.layout.width
import androidx.glance.text.FontWeight
import androidx.glance.text.Text
import androidx.glance.text.TextStyle
import app.firka.naplo.model.Colors
import app.firka.naplo.model.Lesson
import java.time.format.DateTimeFormatterBuilder
val hhmm = DateTimeFormatterBuilder()
.appendPattern("HH:mm")
.toFormatter()
@Composable
fun LessonCard(lesson: Lesson, colors: Colors,
modifier: GlanceModifier = GlanceModifier) {
Box(modifier =
modifier
.fillMaxWidth()
.padding(4.dp, 0.dp)
.cornerRadius(16.dp)
.background(colors.card)
) {
var bgColor = colors.a15p
var fgColor = colors.textSecondary
if (lesson.substituteTeacher == null) {
bgColor = colors.warning15p
fgColor = colors.warningText
}
Box(modifier = GlanceModifier.padding(12.dp)) {
Row {
Row(modifier = GlanceModifier.width(226.dp), verticalAlignment = Alignment.CenterVertically) {
if (lesson.lessonNumber != null) {
Box(modifier = GlanceModifier.cornerRadius(16.dp).background(bgColor)) {
Text(
lesson.lessonNumber.toString(),
style = TextStyle(
color = ColorProvider(fgColor, fgColor),
fontSize = 14.sp,
fontWeight = FontWeight.Bold
),
modifier = GlanceModifier.padding(8.dp, 4.dp),
)
}
Spacer(modifier = GlanceModifier.width(4.dp))
}
// TODO: Add subject icons
Text(
lesson.name,
style = TextStyle(
color = ColorProvider(colors.textPrimary, colors.textPrimary),
fontSize = 14.sp,
fontWeight = FontWeight.Bold
),
)
}
// Spacer(modifier = GlanceModifier.width(10.dp))
Row(verticalAlignment = Alignment.CenterVertically) {
Text(
lesson.start.format(hhmm),
style = TextStyle(
color = ColorProvider(colors.textPrimary, colors.textPrimary),
fontSize = 14.sp,
fontWeight = FontWeight.Bold
),
)
Spacer(modifier = GlanceModifier.width(8.dp))
Box(modifier = GlanceModifier.cornerRadius(16.dp).background(colors.a15p)) {
var roomName = "N/A";
if (lesson.roomName != null) {
roomName = lesson.roomName!!;
}
if (roomName.length < 2) {
roomName = " $roomName"
}
Text(
roomName,
style = TextStyle(
color = ColorProvider(colors.textSecondary, colors.textSecondary),
fontSize = 14.sp,
fontWeight = FontWeight.Bold
),
modifier = GlanceModifier.padding(8.dp, 4.dp),
)
}
}
}
}
}
package app.firka.naplo.glance
import androidx.compose.runtime.Composable
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.glance.GlanceModifier
import androidx.glance.appwidget.cornerRadius
import androidx.glance.background
import androidx.glance.color.ColorProvider
import androidx.glance.layout.Alignment
import androidx.glance.layout.Box
import androidx.glance.layout.Row
import androidx.glance.layout.Spacer
import androidx.glance.layout.fillMaxWidth
import androidx.glance.layout.padding
import androidx.glance.layout.width
import androidx.glance.text.FontWeight
import androidx.glance.text.Text
import androidx.glance.text.TextStyle
import app.firka.naplo.model.Colors
import app.firka.naplo.model.Lesson
import java.time.format.DateTimeFormatterBuilder
val hhmm = DateTimeFormatterBuilder()
.appendPattern("HH:mm")
.toFormatter()
@Composable
fun LessonCard(lesson: Lesson, colors: Colors,
modifier: GlanceModifier = GlanceModifier) {
Box(modifier =
modifier
.fillMaxWidth()
.padding(4.dp, 0.dp)
.cornerRadius(16.dp)
.background(colors.card)
) {
var bgColor = colors.a15p
var fgColor = colors.textSecondary
if (lesson.substituteTeacher == null) {
bgColor = colors.warning15p
fgColor = colors.warningText
}
Box(modifier = GlanceModifier.padding(12.dp)) {
Row {
Row(modifier = GlanceModifier.width(226.dp), verticalAlignment = Alignment.CenterVertically) {
if (lesson.lessonNumber != null) {
Box(modifier = GlanceModifier.cornerRadius(16.dp).background(bgColor)) {
Text(
lesson.lessonNumber.toString(),
style = TextStyle(
color = ColorProvider(fgColor, fgColor),
fontSize = 14.sp,
fontWeight = FontWeight.Bold
),
modifier = GlanceModifier.padding(8.dp, 4.dp),
)
}
Spacer(modifier = GlanceModifier.width(4.dp))
}
// TODO: Add subject icons
Text(
lesson.name,
style = TextStyle(
color = ColorProvider(colors.textPrimary, colors.textPrimary),
fontSize = 14.sp,
fontWeight = FontWeight.Bold
),
)
}
// Spacer(modifier = GlanceModifier.width(10.dp))
Row(verticalAlignment = Alignment.CenterVertically) {
Text(
lesson.start.format(hhmm),
style = TextStyle(
color = ColorProvider(colors.textPrimary, colors.textPrimary),
fontSize = 14.sp,
fontWeight = FontWeight.Bold
),
)
Spacer(modifier = GlanceModifier.width(8.dp))
Box(modifier = GlanceModifier.cornerRadius(16.dp).background(colors.a15p)) {
var roomName = "N/A";
if (lesson.roomName != null) {
roomName = lesson.roomName!!;
}
if (roomName.length < 2) {
roomName = " $roomName"
}
Text(
roomName,
style = TextStyle(
color = ColorProvider(colors.textSecondary, colors.textSecondary),
fontSize = 14.sp,
fontWeight = FontWeight.Bold
),
modifier = GlanceModifier.padding(8.dp, 4.dp),
)
}
}
}
}
}
}

View File

@@ -1,111 +1,111 @@
package app.firka.naplo.glance
import HomeWidgetGlanceState
import HomeWidgetGlanceStateDefinition
import android.content.Context
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.provideContent
import androidx.glance.background
import androidx.glance.color.ColorProvider
import androidx.glance.currentState
import androidx.glance.layout.Alignment
import androidx.glance.layout.Box
import androidx.glance.layout.Column
import androidx.glance.layout.Spacer
import androidx.glance.layout.fillMaxSize
import androidx.glance.layout.height
import androidx.glance.layout.padding
import androidx.glance.state.GlanceStateDefinition
import androidx.glance.text.FontWeight
import androidx.glance.text.Text
import androidx.glance.text.TextStyle
import app.firka.naplo.model.Colors
import app.firka.naplo.model.Lesson
import org.json.JSONObject
import java.io.File
import java.time.LocalDate
import java.time.LocalDateTime
class TimetableWidget : GlanceAppWidget() {
override val stateDefinition: GlanceStateDefinition<*>?
get() = HomeWidgetGlanceStateDefinition()
override suspend fun provideGlance(context: Context, id: GlanceId) {
provideContent {
GlanceContent(context, currentState())
}
}
@Composable
private fun GlanceContent(context: Context, currentState: HomeWidgetGlanceState) {
val appFlutter = File(context.applicationContext.dataDir, "app_flutter")
val widgetStateFile = File(appFlutter, "widget_state.json")
if (!widgetStateFile.exists()) {
Box(modifier =
GlanceModifier
.background(Color(0xFFFAFFF0))
.padding(16.dp)
.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Text(
"Widget használata előtt jelentkezz be",
style = TextStyle(
color = ColorProvider(Color(0xFF394C0A), Color(0xFF394C0A)),
fontSize = 12.sp,
fontWeight = FontWeight.Medium
)
)
}
return
}
val widgetState = JSONObject(widgetStateFile.readText(Charsets.UTF_8))
val colors = Colors(widgetState)
val tt = widgetState.getJSONArray("timetable")
var lessons = mutableListOf<Lesson>()
for (i in 0..<tt.length()) {
lessons.add(Lesson(tt.getJSONObject(i)))
}
val now = LocalDate.now()
val start = LocalDateTime.of(now.year, now.month, now.dayOfMonth, 0, 0)
val end = start.plusHours(23)
lessons = lessons.filter { lesson -> lesson.start.isAfter(start) && lesson.end.isBefore(end) }.toMutableList()
Box(modifier =
GlanceModifier
.background(colors.background)
.padding(16.dp)
.fillMaxSize()
) {
Column {
Text(
"Mai órarend",
style = TextStyle(
color = ColorProvider(colors.textSecondary, colors.textSecondary),
fontSize = 12.sp,
fontWeight = FontWeight.Medium
)
)
Spacer(modifier = GlanceModifier.height(4.dp))
for (lesson in lessons) {
LessonCard(lesson, colors)
Spacer(modifier = GlanceModifier.height(4.dp))
}
}
}
}
package app.firka.naplo.glance
import HomeWidgetGlanceState
import HomeWidgetGlanceStateDefinition
import android.content.Context
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.glance.GlanceId
import androidx.glance.GlanceModifier
import androidx.glance.appwidget.GlanceAppWidget
import androidx.glance.appwidget.provideContent
import androidx.glance.background
import androidx.glance.color.ColorProvider
import androidx.glance.currentState
import androidx.glance.layout.Alignment
import androidx.glance.layout.Box
import androidx.glance.layout.Column
import androidx.glance.layout.Spacer
import androidx.glance.layout.fillMaxSize
import androidx.glance.layout.height
import androidx.glance.layout.padding
import androidx.glance.state.GlanceStateDefinition
import androidx.glance.text.FontWeight
import androidx.glance.text.Text
import androidx.glance.text.TextStyle
import app.firka.naplo.model.Colors
import app.firka.naplo.model.Lesson
import org.json.JSONObject
import java.io.File
import java.time.LocalDate
import java.time.LocalDateTime
class TimetableWidget : GlanceAppWidget() {
override val stateDefinition: GlanceStateDefinition<*>?
get() = HomeWidgetGlanceStateDefinition()
override suspend fun provideGlance(context: Context, id: GlanceId) {
provideContent {
GlanceContent(context, currentState())
}
}
@Composable
private fun GlanceContent(context: Context, currentState: HomeWidgetGlanceState) {
val appFlutter = File(context.applicationContext.dataDir, "app_flutter")
val widgetStateFile = File(appFlutter, "widget_state.json")
if (!widgetStateFile.exists()) {
Box(modifier =
GlanceModifier
.background(Color(0xFFFAFFF0))
.padding(16.dp)
.fillMaxSize(),
contentAlignment = Alignment.Center,
) {
Text(
"Widget használata előtt jelentkezz be",
style = TextStyle(
color = ColorProvider(Color(0xFF394C0A), Color(0xFF394C0A)),
fontSize = 12.sp,
fontWeight = FontWeight.Medium
)
)
}
return
}
val widgetState = JSONObject(widgetStateFile.readText(Charsets.UTF_8))
val colors = Colors(widgetState)
val tt = widgetState.getJSONArray("timetable")
var lessons = mutableListOf<Lesson>()
for (i in 0..<tt.length()) {
lessons.add(Lesson(tt.getJSONObject(i)))
}
val now = LocalDate.now()
val start = LocalDateTime.of(now.year, now.month, now.dayOfMonth, 0, 0)
val end = start.plusHours(23)
lessons = lessons.filter { lesson -> lesson.start.isAfter(start) && lesson.end.isBefore(end) }.toMutableList()
Box(modifier =
GlanceModifier
.background(colors.background)
.padding(16.dp)
.fillMaxSize()
) {
Column {
Text(
"Mai órarend",
style = TextStyle(
color = ColorProvider(colors.textSecondary, colors.textSecondary),
fontSize = 12.sp,
fontWeight = FontWeight.Medium
)
)
Spacer(modifier = GlanceModifier.height(4.dp))
for (lesson in lessons) {
LessonCard(lesson, colors)
Spacer(modifier = GlanceModifier.height(4.dp))
}
}
}
}
}

View File

@@ -1,7 +1,7 @@
package app.firka.naplo.glance
import HomeWidgetGlanceWidgetReceiver
class TimetableWidgetReceiver : HomeWidgetGlanceWidgetReceiver<TimetableWidget>() {
override val glanceAppWidget = TimetableWidget()
package app.firka.naplo.glance
import HomeWidgetGlanceWidgetReceiver
class TimetableWidgetReceiver : HomeWidgetGlanceWidgetReceiver<TimetableWidget>() {
override val glanceAppWidget = TimetableWidget()
}

View File

@@ -1,37 +1,37 @@
package app.firka.naplo.model
import androidx.compose.ui.graphics.Color
import org.json.JSONObject
class Colors(widgetState: JSONObject) {
var background: Color = Color(widgetState.getJSONObject("colors").getInt("background"))
var backgroundAmoled: Color =
Color(widgetState.getJSONObject("colors").getInt("backgroundAmoled"))
var background0p: Color = Color(widgetState.getJSONObject("colors").getInt("background0p"))
var success: Color = Color(widgetState.getJSONObject("colors").getInt("success"))
var textPrimary: Color = Color(widgetState.getJSONObject("colors").getInt("textPrimary"))
var textSecondary: Color = Color(widgetState.getJSONObject("colors").getInt("textSecondary"))
var textTertiary: Color = Color(widgetState.getJSONObject("colors").getInt("textTertiary"))
var card: Color = Color(widgetState.getJSONObject("colors").getInt("card"))
var cardTranslucent: Color =
Color(widgetState.getJSONObject("colors").getInt("cardTranslucent"))
var buttonSecondaryFill: Color =
Color(widgetState.getJSONObject("colors").getInt("buttonSecondaryFill"))
var accent: Color = Color(widgetState.getJSONObject("colors").getInt("accent"))
var secondary: Color = Color(widgetState.getJSONObject("colors").getInt("secondary"))
var shadowColor: Color = Color(widgetState.getJSONObject("colors").getInt("shadowColor"))
var a15p: Color = Color(widgetState.getJSONObject("colors").getInt("a15p"))
var warningAccent: Color = Color(widgetState.getJSONObject("colors").getInt("warningAccent"))
var warningText: Color = Color(widgetState.getJSONObject("colors").getInt("warningText"))
var warning15p: Color = Color(widgetState.getJSONObject("colors").getInt("warning15p"))
var warningCard: Color = Color(widgetState.getJSONObject("colors").getInt("warningCard"))
var errorAccent: Color = Color(widgetState.getJSONObject("colors").getInt("errorAccent"))
var errorText: Color = Color(widgetState.getJSONObject("colors").getInt("errorText"))
var error15p: Color = Color(widgetState.getJSONObject("colors").getInt("error15p"))
var errorCard: Color = Color(widgetState.getJSONObject("colors").getInt("errorCard"))
var grade5: Color = Color(widgetState.getJSONObject("colors").getInt("grade5"))
var grade4: Color = Color(widgetState.getJSONObject("colors").getInt("grade4"))
var grade3: Color = Color(widgetState.getJSONObject("colors").getInt("grade3"))
var grade2: Color = Color(widgetState.getJSONObject("colors").getInt("grade2"))
var grade1: Color = Color(widgetState.getJSONObject("colors").getInt("grade1"))
package app.firka.naplo.model
import androidx.compose.ui.graphics.Color
import org.json.JSONObject
class Colors(widgetState: JSONObject) {
var background: Color = Color(widgetState.getJSONObject("colors").getInt("background"))
var backgroundAmoled: Color =
Color(widgetState.getJSONObject("colors").getInt("backgroundAmoled"))
var background0p: Color = Color(widgetState.getJSONObject("colors").getInt("background0p"))
var success: Color = Color(widgetState.getJSONObject("colors").getInt("success"))
var textPrimary: Color = Color(widgetState.getJSONObject("colors").getInt("textPrimary"))
var textSecondary: Color = Color(widgetState.getJSONObject("colors").getInt("textSecondary"))
var textTertiary: Color = Color(widgetState.getJSONObject("colors").getInt("textTertiary"))
var card: Color = Color(widgetState.getJSONObject("colors").getInt("card"))
var cardTranslucent: Color =
Color(widgetState.getJSONObject("colors").getInt("cardTranslucent"))
var buttonSecondaryFill: Color =
Color(widgetState.getJSONObject("colors").getInt("buttonSecondaryFill"))
var accent: Color = Color(widgetState.getJSONObject("colors").getInt("accent"))
var secondary: Color = Color(widgetState.getJSONObject("colors").getInt("secondary"))
var shadowColor: Color = Color(widgetState.getJSONObject("colors").getInt("shadowColor"))
var a15p: Color = Color(widgetState.getJSONObject("colors").getInt("a15p"))
var warningAccent: Color = Color(widgetState.getJSONObject("colors").getInt("warningAccent"))
var warningText: Color = Color(widgetState.getJSONObject("colors").getInt("warningText"))
var warning15p: Color = Color(widgetState.getJSONObject("colors").getInt("warning15p"))
var warningCard: Color = Color(widgetState.getJSONObject("colors").getInt("warningCard"))
var errorAccent: Color = Color(widgetState.getJSONObject("colors").getInt("errorAccent"))
var errorText: Color = Color(widgetState.getJSONObject("colors").getInt("errorText"))
var error15p: Color = Color(widgetState.getJSONObject("colors").getInt("error15p"))
var errorCard: Color = Color(widgetState.getJSONObject("colors").getInt("errorCard"))
var grade5: Color = Color(widgetState.getJSONObject("colors").getInt("grade5"))
var grade4: Color = Color(widgetState.getJSONObject("colors").getInt("grade4"))
var grade3: Color = Color(widgetState.getJSONObject("colors").getInt("grade3"))
var grade2: Color = Color(widgetState.getJSONObject("colors").getInt("grade2"))
var grade1: Color = Color(widgetState.getJSONObject("colors").getInt("grade1"))
}

View File

@@ -1,94 +1,94 @@
package app.firka.naplo.model
import app.firka.naplo.getIntOrNull
import app.firka.naplo.getNameUidDescOrNull
import app.firka.naplo.getNameUidOrNull
import app.firka.naplo.getStringOrNull
import app.firka.naplo.getSubjectOrNull
import org.json.JSONObject
import java.time.LocalDateTime
import java.time.format.DateTimeFormatterBuilder
class Lesson {
val formatter = DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
.optionalStart()
.appendLiteral('Z')
.optionalEnd()
.toFormatter()
constructor(data: JSONObject) {
uid = data.getString("Uid")
date = data.getString("Datum")
start = LocalDateTime.parse(data.getString("KezdetIdopont"), formatter)
end = LocalDateTime.parse(data.getString("VegIdopont"), formatter)
name = data.getString("Nev")
lessonNumber = data.getIntOrNull("Oraszam")
lessonSeqNumber = data.getIntOrNull("OraEvesSorszama")
classGroup = data.getNameUidOrNull("OsztalyCsoport")
teacher = data.getStringOrNull("TanarNeve")
subject = data.getSubjectOrNull("Tantargy")
theme = data.getStringOrNull("Tema")
roomName = data.getStringOrNull("TeremNeve")
type = NameUidDesc(data.getJSONObject("Tipus"))
studentPresence = data.getNameUidDescOrNull("TanuloJelenlet")
state = NameUidDesc(data.getJSONObject("Allapot"))
substituteTeacher = data.getStringOrNull("HelyettesTanarNeve")
homeworkUid = data.getStringOrNull("HaziFeladatUid")
taskGroupUid = data.getStringOrNull("FeladatGroupUid")
languageTaskGroupUid = data.getStringOrNull("NyelviFeladatGroupUid")
assessmentUid = data.getStringOrNull("BejelentettSzamonkeresUid")
canStudentEditHomework = data.getBoolean("IsTanuloHaziFeladatEnabled")
isHomeworkComplete = data.getBoolean("IsHaziFeladatMegoldva")
if (data.has("Csatolmanyok")) {
val rawAttachments = data.getJSONArray("Csatolmanyok")
for (i in 0..<rawAttachments.length()) {
attachments.add(NameUid(rawAttachments.getJSONObject(i)))
}
}
isDigitalLesson = data.getBoolean("IsDigitalisOra")
digitalDeviceList = data.getStringOrNull("DigitalisEszkozTipus")
digitalPlatformType = data.getStringOrNull("DigitalisPlatformTipus")
if (data.has("DigitalisTamogatoEszkozTipusList")) {
val rawDigitalSupportDeviceTypeList =
data.getJSONArray("DigitalisTamogatoEszkozTipusList")
for (i in 0..<rawDigitalSupportDeviceTypeList.length()) {
digitalSupportDeviceTypeList.add(rawDigitalSupportDeviceTypeList.getString(i))
}
}
createdAt = LocalDateTime.parse(data.getString("Letrehozas"), formatter)
lastModifiedAt = LocalDateTime.parse(data.getString("UtolsoModositas"), formatter)
}
var uid: String;
var date: String;
var start: LocalDateTime;
var end: LocalDateTime;
var name: String;
var lessonNumber: Int?;
var lessonSeqNumber: Int?;
var classGroup: NameUid?;
var teacher: String?;
var subject: Subject?;
var theme: String?;
var roomName: String?;
var type: NameUidDesc;
var studentPresence: NameUidDesc?;
var state: NameUidDesc;
var substituteTeacher: String?;
var homeworkUid: String?;
var taskGroupUid: String?;
var languageTaskGroupUid: String?;
var assessmentUid: String?;
var canStudentEditHomework: Boolean;
var isHomeworkComplete: Boolean;
var attachments = mutableListOf<NameUid>()
var isDigitalLesson: Boolean
var digitalDeviceList: String?
var digitalPlatformType: String?
var digitalSupportDeviceTypeList = mutableListOf<String>()
var createdAt: LocalDateTime
var lastModifiedAt: LocalDateTime
package app.firka.naplo.model
import app.firka.naplo.getIntOrNull
import app.firka.naplo.getNameUidDescOrNull
import app.firka.naplo.getNameUidOrNull
import app.firka.naplo.getStringOrNull
import app.firka.naplo.getSubjectOrNull
import org.json.JSONObject
import java.time.LocalDateTime
import java.time.format.DateTimeFormatterBuilder
class Lesson {
val formatter = DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")
.optionalStart()
.appendLiteral('Z')
.optionalEnd()
.toFormatter()
constructor(data: JSONObject) {
uid = data.getString("Uid")
date = data.getString("Datum")
start = LocalDateTime.parse(data.getString("KezdetIdopont"), formatter)
end = LocalDateTime.parse(data.getString("VegIdopont"), formatter)
name = data.getString("Nev")
lessonNumber = data.getIntOrNull("Oraszam")
lessonSeqNumber = data.getIntOrNull("OraEvesSorszama")
classGroup = data.getNameUidOrNull("OsztalyCsoport")
teacher = data.getStringOrNull("TanarNeve")
subject = data.getSubjectOrNull("Tantargy")
theme = data.getStringOrNull("Tema")
roomName = data.getStringOrNull("TeremNeve")
type = NameUidDesc(data.getJSONObject("Tipus"))
studentPresence = data.getNameUidDescOrNull("TanuloJelenlet")
state = NameUidDesc(data.getJSONObject("Allapot"))
substituteTeacher = data.getStringOrNull("HelyettesTanarNeve")
homeworkUid = data.getStringOrNull("HaziFeladatUid")
taskGroupUid = data.getStringOrNull("FeladatGroupUid")
languageTaskGroupUid = data.getStringOrNull("NyelviFeladatGroupUid")
assessmentUid = data.getStringOrNull("BejelentettSzamonkeresUid")
canStudentEditHomework = data.getBoolean("IsTanuloHaziFeladatEnabled")
isHomeworkComplete = data.getBoolean("IsHaziFeladatMegoldva")
if (data.has("Csatolmanyok")) {
val rawAttachments = data.getJSONArray("Csatolmanyok")
for (i in 0..<rawAttachments.length()) {
attachments.add(NameUid(rawAttachments.getJSONObject(i)))
}
}
isDigitalLesson = data.getBoolean("IsDigitalisOra")
digitalDeviceList = data.getStringOrNull("DigitalisEszkozTipus")
digitalPlatformType = data.getStringOrNull("DigitalisPlatformTipus")
if (data.has("DigitalisTamogatoEszkozTipusList")) {
val rawDigitalSupportDeviceTypeList =
data.getJSONArray("DigitalisTamogatoEszkozTipusList")
for (i in 0..<rawDigitalSupportDeviceTypeList.length()) {
digitalSupportDeviceTypeList.add(rawDigitalSupportDeviceTypeList.getString(i))
}
}
createdAt = LocalDateTime.parse(data.getString("Letrehozas"), formatter)
lastModifiedAt = LocalDateTime.parse(data.getString("UtolsoModositas"), formatter)
}
var uid: String;
var date: String;
var start: LocalDateTime;
var end: LocalDateTime;
var name: String;
var lessonNumber: Int?;
var lessonSeqNumber: Int?;
var classGroup: NameUid?;
var teacher: String?;
var subject: Subject?;
var theme: String?;
var roomName: String?;
var type: NameUidDesc;
var studentPresence: NameUidDesc?;
var state: NameUidDesc;
var substituteTeacher: String?;
var homeworkUid: String?;
var taskGroupUid: String?;
var languageTaskGroupUid: String?;
var assessmentUid: String?;
var canStudentEditHomework: Boolean;
var isHomeworkComplete: Boolean;
var attachments = mutableListOf<NameUid>()
var isDigitalLesson: Boolean
var digitalDeviceList: String?
var digitalPlatformType: String?
var digitalSupportDeviceTypeList = mutableListOf<String>()
var createdAt: LocalDateTime
var lastModifiedAt: LocalDateTime
}

View File

@@ -1,9 +1,9 @@
package app.firka.naplo.model
import app.firka.naplo.getStringOrNull
import org.json.JSONObject
class NameUid(data: JSONObject) {
var uid: String = data.getString("Uid")
var name: String? = data.getStringOrNull("Nev")
}
package app.firka.naplo.model
import app.firka.naplo.getStringOrNull
import org.json.JSONObject
class NameUid(data: JSONObject) {
var uid: String = data.getString("Uid")
var name: String? = data.getStringOrNull("Nev")
}

View File

@@ -1,10 +1,10 @@
package app.firka.naplo.model
import app.firka.naplo.getStringOrNull
import org.json.JSONObject
class NameUidDesc(data: JSONObject) {
var uid: String = data.getString("Uid")
var name: String? = data.getStringOrNull("Nev")
var description: String? = data.getStringOrNull("Leiras")
}
package app.firka.naplo.model
import app.firka.naplo.getStringOrNull
import org.json.JSONObject
class NameUidDesc(data: JSONObject) {
var uid: String = data.getString("Uid")
var name: String? = data.getStringOrNull("Nev")
var description: String? = data.getStringOrNull("Leiras")
}

View File

@@ -1,12 +1,12 @@
package app.firka.naplo.model
import app.firka.naplo.getNameUidDescOrNull
import app.firka.naplo.getStringOrNull
import org.json.JSONObject
class Subject(data: JSONObject) {
var uid: String? = data.getStringOrNull("Uid")
var name: String? = data.getStringOrNull("Nev")
var category: NameUidDesc? = data.getNameUidDescOrNull("Kategoria")
var sortIndex: Int = data.getInt("SortIndex")
package app.firka.naplo.model
import app.firka.naplo.getNameUidDescOrNull
import app.firka.naplo.getStringOrNull
import org.json.JSONObject
class Subject(data: JSONObject) {
var uid: String? = data.getStringOrNull("Uid")
var name: String? = data.getStringOrNull("Nev")
var category: NameUidDesc? = data.getNameUidDescOrNull("Kategoria")
var sortIndex: Int = data.getInt("SortIndex")
}

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_ace_background"/>
<foreground android:drawable="@mipmap/ic_ace_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_ace_background"/>
<foreground android:drawable="@mipmap/ic_ace_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_ace_f_background"/>
<foreground android:drawable="@mipmap/ic_ace_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_ace_f_background"/>
<foreground android:drawable="@mipmap/ic_ace_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_ace_f_background"/>
<foreground android:drawable="@mipmap/ic_ace_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_ace_f_background"/>
<foreground android:drawable="@mipmap/ic_ace_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_ace_background"/>
<foreground android:drawable="@mipmap/ic_ace_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_ace_background"/>
<foreground android:drawable="@mipmap/ic_ace_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_bi_background"/>
<foreground android:drawable="@mipmap/ic_bi_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_bi_background"/>
<foreground android:drawable="@mipmap/ic_bi_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_bi_f_background"/>
<foreground android:drawable="@mipmap/ic_bi_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_bi_f_background"/>
<foreground android:drawable="@mipmap/ic_bi_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_bi_f_background"/>
<foreground android:drawable="@mipmap/ic_bi_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_bi_f_background"/>
<foreground android:drawable="@mipmap/ic_bi_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_bi_background"/>
<foreground android:drawable="@mipmap/ic_bi_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_bi_background"/>
<foreground android:drawable="@mipmap/ic_bi_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_cactus_background"/>
<foreground android:drawable="@mipmap/ic_cactus_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_cactus_background"/>
<foreground android:drawable="@mipmap/ic_cactus_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_cactus_background"/>
<foreground android:drawable="@mipmap/ic_cactus_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_cactus_background"/>
<foreground android:drawable="@mipmap/ic_cactus_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_cc_background"/>
<foreground android:drawable="@mipmap/ic_cc_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_cc_background"/>
<foreground android:drawable="@mipmap/ic_cc_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_cc_background"/>
<foreground android:drawable="@mipmap/ic_cc_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_cc_background"/>
<foreground android:drawable="@mipmap/ic_cc_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_enby_background"/>
<foreground android:drawable="@mipmap/ic_enby_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_enby_background"/>
<foreground android:drawable="@mipmap/ic_enby_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_enby_f_background"/>
<foreground android:drawable="@mipmap/ic_enby_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_enby_f_background"/>
<foreground android:drawable="@mipmap/ic_enby_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_enby_f_background"/>
<foreground android:drawable="@mipmap/ic_enby_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_enby_f_background"/>
<foreground android:drawable="@mipmap/ic_enby_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_enby_background"/>
<foreground android:drawable="@mipmap/ic_enby_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_enby_background"/>
<foreground android:drawable="@mipmap/ic_enby_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_fidesz_background"/>
<foreground android:drawable="@mipmap/ic_fidesz_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_fidesz_background"/>
<foreground android:drawable="@mipmap/ic_fidesz_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_fidesz_background"/>
<foreground android:drawable="@mipmap/ic_fidesz_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_fidesz_background"/>
<foreground android:drawable="@mipmap/ic_fidesz_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_filc_background"/>
<foreground android:drawable="@mipmap/ic_filc_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_filc_background"/>
<foreground android:drawable="@mipmap/ic_filc_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_filc_background"/>
<foreground android:drawable="@mipmap/ic_filc_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_filc_background"/>
<foreground android:drawable="@mipmap/ic_filc_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_filco_background"/>
<foreground android:drawable="@mipmap/ic_filco_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_filco_background"/>
<foreground android:drawable="@mipmap/ic_filco_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_filco_background"/>
<foreground android:drawable="@mipmap/ic_filco_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_filco_background"/>
<foreground android:drawable="@mipmap/ic_filco_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_galaxy_background"/>
<foreground android:drawable="@mipmap/ic_galaxy_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_galaxy_background"/>
<foreground android:drawable="@mipmap/ic_galaxy_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_galaxy_background"/>
<foreground android:drawable="@mipmap/ic_galaxy_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_galaxy_background"/>
<foreground android:drawable="@mipmap/ic_galaxy_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_gay_background"/>
<foreground android:drawable="@mipmap/ic_gay_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_gay_background"/>
<foreground android:drawable="@mipmap/ic_gay_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_gay_f_background"/>
<foreground android:drawable="@mipmap/ic_gay_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_gay_f_background"/>
<foreground android:drawable="@mipmap/ic_gay_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_gay_f_background"/>
<foreground android:drawable="@mipmap/ic_gay_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_gay_f_background"/>
<foreground android:drawable="@mipmap/ic_gay_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_gay_background"/>
<foreground android:drawable="@mipmap/ic_gay_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_gay_background"/>
<foreground android:drawable="@mipmap/ic_gay_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_kreta_background"/>
<foreground android:drawable="@mipmap/ic_kreta_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_kreta_background"/>
<foreground android:drawable="@mipmap/ic_kreta_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_kreta_background"/>
<foreground android:drawable="@mipmap/ic_kreta_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_kreta_background"/>
<foreground android:drawable="@mipmap/ic_kreta_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lesb_background"/>
<foreground android:drawable="@mipmap/ic_lesb_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lesb_background"/>
<foreground android:drawable="@mipmap/ic_lesb_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lesb_f_background"/>
<foreground android:drawable="@mipmap/ic_lesb_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lesb_f_background"/>
<foreground android:drawable="@mipmap/ic_lesb_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lesb_f_background"/>
<foreground android:drawable="@mipmap/ic_lesb_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lesb_f_background"/>
<foreground android:drawable="@mipmap/ic_lesb_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lesb_background"/>
<foreground android:drawable="@mipmap/ic_lesb_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lesb_background"/>
<foreground android:drawable="@mipmap/ic_lesb_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtq_background"/>
<foreground android:drawable="@mipmap/ic_lgbtq_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtq_background"/>
<foreground android:drawable="@mipmap/ic_lgbtq_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtq_f_background"/>
<foreground android:drawable="@mipmap/ic_lgbtq_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtq_f_background"/>
<foreground android:drawable="@mipmap/ic_lgbtq_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtq_f_background"/>
<foreground android:drawable="@mipmap/ic_lgbtq_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtq_f_background"/>
<foreground android:drawable="@mipmap/ic_lgbtq_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtq_background"/>
<foreground android:drawable="@mipmap/ic_lgbtq_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtq_background"/>
<foreground android:drawable="@mipmap/ic_lgbtq_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtqp_background"/>
<foreground android:drawable="@mipmap/ic_lgbtqp_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtqp_background"/>
<foreground android:drawable="@mipmap/ic_lgbtqp_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtqp_f_background"/>
<foreground android:drawable="@mipmap/ic_lgbtqp_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtqp_f_background"/>
<foreground android:drawable="@mipmap/ic_lgbtqp_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtqp_f_background"/>
<foreground android:drawable="@mipmap/ic_lgbtqp_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtqp_f_background"/>
<foreground android:drawable="@mipmap/ic_lgbtqp_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtqp_background"/>
<foreground android:drawable="@mipmap/ic_lgbtqp_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_lgbtqp_background"/>
<foreground android:drawable="@mipmap/ic_lgbtqp_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_mkkp_background"/>
<foreground android:drawable="@mipmap/ic_mkkp_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_mkkp_background"/>
<foreground android:drawable="@mipmap/ic_mkkp_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_mkkp_background"/>
<foreground android:drawable="@mipmap/ic_mkkp_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_mkkp_background"/>
<foreground android:drawable="@mipmap/ic_mkkp_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_modern_background"/>
<foreground android:drawable="@mipmap/ic_modern_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_modern_background"/>
<foreground android:drawable="@mipmap/ic_modern_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_modern_background"/>
<foreground android:drawable="@mipmap/ic_modern_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_modern_background"/>
<foreground android:drawable="@mipmap/ic_modern_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_o1g_background"/>
<foreground android:drawable="@mipmap/ic_o1g_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_o1g_background"/>
<foreground android:drawable="@mipmap/ic_o1g_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_o1g_background"/>
<foreground android:drawable="@mipmap/ic_o1g_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_o1g_background"/>
<foreground android:drawable="@mipmap/ic_o1g_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_paper_background"/>
<foreground android:drawable="@mipmap/ic_paper_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_paper_background"/>
<foreground android:drawable="@mipmap/ic_paper_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_paper_background"/>
<foreground android:drawable="@mipmap/ic_paper_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_paper_background"/>
<foreground android:drawable="@mipmap/ic_paper_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_pixel_background"/>
<foreground android:drawable="@mipmap/ic_pixel_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_pixel_background"/>
<foreground android:drawable="@mipmap/ic_pixel_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_pixel_background"/>
<foreground android:drawable="@mipmap/ic_pixel_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_pixel_background"/>
<foreground android:drawable="@mipmap/ic_pixel_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_pixelized_background"/>
<foreground android:drawable="@mipmap/ic_pixelized_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_pixelized_background"/>
<foreground android:drawable="@mipmap/ic_pixelized_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_pixelized_background"/>
<foreground android:drawable="@mipmap/ic_pixelized_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_pixelized_background"/>
<foreground android:drawable="@mipmap/ic_pixelized_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_refilc_background"/>
<foreground android:drawable="@mipmap/ic_refilc_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_refilc_background"/>
<foreground android:drawable="@mipmap/ic_refilc_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_refilc_background"/>
<foreground android:drawable="@mipmap/ic_refilc_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_refilc_background"/>
<foreground android:drawable="@mipmap/ic_refilc_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_refulc_background"/>
<foreground android:drawable="@mipmap/ic_refulc_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_refulc_background"/>
<foreground android:drawable="@mipmap/ic_refulc_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_refulc_background"/>
<foreground android:drawable="@mipmap/ic_refulc_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_refulc_background"/>
<foreground android:drawable="@mipmap/ic_refulc_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_repont_background"/>
<foreground android:drawable="@mipmap/ic_repont_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_repont_background"/>
<foreground android:drawable="@mipmap/ic_repont_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_repont_background"/>
<foreground android:drawable="@mipmap/ic_repont_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_repont_background"/>
<foreground android:drawable="@mipmap/ic_repont_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_trans_background"/>
<foreground android:drawable="@mipmap/ic_trans_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_trans_background"/>
<foreground android:drawable="@mipmap/ic_trans_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_trans_f_background"/>
<foreground android:drawable="@mipmap/ic_trans_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_trans_f_background"/>
<foreground android:drawable="@mipmap/ic_trans_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_trans_f_background"/>
<foreground android:drawable="@mipmap/ic_trans_f_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_trans_f_background"/>
<foreground android:drawable="@mipmap/ic_trans_f_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_trans_background"/>
<foreground android:drawable="@mipmap/ic_trans_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_trans_background"/>
<foreground android:drawable="@mipmap/ic_trans_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_void_icon_background"/>
<foreground android:drawable="@mipmap/ic_void_icon_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_void_icon_background"/>
<foreground android:drawable="@mipmap/ic_void_icon_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_void_icon_background"/>
<foreground android:drawable="@mipmap/ic_void_icon_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_void_icon_background"/>
<foreground android:drawable="@mipmap/ic_void_icon_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas1_background"/>
<foreground android:drawable="@mipmap/ic_xmas1_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas1_background"/>
<foreground android:drawable="@mipmap/ic_xmas1_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas1_background"/>
<foreground android:drawable="@mipmap/ic_xmas1_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas1_background"/>
<foreground android:drawable="@mipmap/ic_xmas1_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas2_background"/>
<foreground android:drawable="@mipmap/ic_xmas2_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas2_background"/>
<foreground android:drawable="@mipmap/ic_xmas2_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas2_background"/>
<foreground android:drawable="@mipmap/ic_xmas2_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas2_background"/>
<foreground android:drawable="@mipmap/ic_xmas2_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas3_background"/>
<foreground android:drawable="@mipmap/ic_xmas3_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas3_background"/>
<foreground android:drawable="@mipmap/ic_xmas3_foreground"/>
</adaptive-icon>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas3_background"/>
<foreground android:drawable="@mipmap/ic_xmas3_foreground"/>
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/ic_xmas3_background"/>
<foreground android:drawable="@mipmap/ic_xmas3_foreground"/>
</adaptive-icon>

View File

@@ -1,7 +1,7 @@
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/glance_default_loading_layout"
android:minWidth="300dp"
android:minHeight="100dp"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="10000">
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/glance_default_loading_layout"
android:minWidth="300dp"
android:minHeight="100dp"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="10000">
</appwidget-provider>

View File

@@ -1,86 +1,86 @@
import 'dart:ui';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
// Taken from https://gist.github.com/darmawan01/9be266df44594ea59f07032e325ffa3b
// and adapted to use assets
final _globalImageCache = <String, Uint8List>{};
Future<void> precacheAsset(AssetBundle bundle, String asset) async {
if (!_globalImageCache.containsKey(asset)) {
final data = await bundle.load(asset);
_globalImageCache[asset] = data.buffer.asUint8List();
}
}
Future<void> precacheAssets(AssetBundle bundle, List<String> assets) async {
for (final asset in assets) {
await precacheAsset(bundle, asset);
}
}
Future<Uint8List> _cacheLoad(AssetBundle bundle, String asset) async {
if (!_globalImageCache.containsKey(asset)) {
final data = await bundle.load(asset);
_globalImageCache[asset] = data.buffer.asUint8List();
}
return Future.value(_globalImageCache[asset]!);
}
class CacheMemoryImageProvider extends ImageProvider<CacheMemoryImageProvider> {
final AssetBundle bundle;
final String path;
Uint8List? _img;
CacheMemoryImageProvider(this.bundle, this.path);
@override
ImageStreamCompleter loadImage(
CacheMemoryImageProvider key, ImageDecoderCallback decode) {
return MultiFrameImageStreamCompleter(
codec: _loadAsync(decode),
scale: 1.0,
debugLabel: path,
informationCollector: () sync* {
yield ErrorDescription('Tag: $path');
},
);
}
Future<Codec> _loadAsync(ImageDecoderCallback decode) async {
_img ??= await _cacheLoad(bundle, path);
// the DefaultCacheManager() encapsulation, it get cache from local storage.
final Uint8List bytes = _img!;
if (bytes.lengthInBytes == 0) {
// The file may become available later.
PaintingBinding.instance.imageCache.evict(this);
throw StateError('$path is empty and cannot be loaded as an image.');
}
final buffer = await ImmutableBuffer.fromUint8List(bytes);
return await decode(buffer);
}
@override
Future<CacheMemoryImageProvider> obtainKey(ImageConfiguration configuration) {
return SynchronousFuture<CacheMemoryImageProvider>(this);
}
@override
bool operator ==(Object other) {
if (other.runtimeType != runtimeType) return false;
bool res = other is CacheMemoryImageProvider && other.path == path;
return res;
}
@override
int get hashCode => path.hashCode;
@override
String toString() =>
'${objectRuntimeType(this, 'CacheImageProvider')}("$path")';
}
import 'dart:ui';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
// Taken from https://gist.github.com/darmawan01/9be266df44594ea59f07032e325ffa3b
// and adapted to use assets
final _globalImageCache = <String, Uint8List>{};
Future<void> precacheAsset(AssetBundle bundle, String asset) async {
if (!_globalImageCache.containsKey(asset)) {
final data = await bundle.load(asset);
_globalImageCache[asset] = data.buffer.asUint8List();
}
}
Future<void> precacheAssets(AssetBundle bundle, List<String> assets) async {
for (final asset in assets) {
await precacheAsset(bundle, asset);
}
}
Future<Uint8List> _cacheLoad(AssetBundle bundle, String asset) async {
if (!_globalImageCache.containsKey(asset)) {
final data = await bundle.load(asset);
_globalImageCache[asset] = data.buffer.asUint8List();
}
return Future.value(_globalImageCache[asset]!);
}
class CacheMemoryImageProvider extends ImageProvider<CacheMemoryImageProvider> {
final AssetBundle bundle;
final String path;
Uint8List? _img;
CacheMemoryImageProvider(this.bundle, this.path);
@override
ImageStreamCompleter loadImage(
CacheMemoryImageProvider key, ImageDecoderCallback decode) {
return MultiFrameImageStreamCompleter(
codec: _loadAsync(decode),
scale: 1.0,
debugLabel: path,
informationCollector: () sync* {
yield ErrorDescription('Tag: $path');
},
);
}
Future<Codec> _loadAsync(ImageDecoderCallback decode) async {
_img ??= await _cacheLoad(bundle, path);
// the DefaultCacheManager() encapsulation, it get cache from local storage.
final Uint8List bytes = _img!;
if (bytes.lengthInBytes == 0) {
// The file may become available later.
PaintingBinding.instance.imageCache.evict(this);
throw StateError('$path is empty and cannot be loaded as an image.');
}
final buffer = await ImmutableBuffer.fromUint8List(bytes);
return await decode(buffer);
}
@override
Future<CacheMemoryImageProvider> obtainKey(ImageConfiguration configuration) {
return SynchronousFuture<CacheMemoryImageProvider>(this);
}
@override
bool operator ==(Object other) {
if (other.runtimeType != runtimeType) return false;
bool res = other is CacheMemoryImageProvider && other.path == path;
return res;
}
@override
int get hashCode => path.hashCode;
@override
String toString() =>
'${objectRuntimeType(this, 'CacheImageProvider')}("$path")';
}

View File

@@ -1,71 +1,71 @@
import 'dart:convert';
import 'dart:io';
import 'package:firka/helpers/api/client/kreta_client.dart';
import 'package:firka/helpers/api/model/timetable.dart';
import 'package:firka/helpers/debug_helper.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import '../../ui/model/style.dart';
class WidgetCacheHelper {
static Map<String, dynamic> toJson(FirkaStyle style, List<Lesson> timetable) {
List<Map<String, dynamic>> timetableJson = [];
for (var lesson in timetable) {
timetableJson.add(lesson.toJson());
}
return {
'colors': {
'background': style.colors.background.toARGB32(),
'backgroundAmoled': style.colors.backgroundAmoled.toARGB32(),
'background0p': style.colors.background0p.toARGB32(),
'success': style.colors.success.toARGB32(),
'textPrimary': style.colors.textPrimary.toARGB32(),
'textSecondary': style.colors.textSecondary.toARGB32(),
'textTertiary': style.colors.textTertiary.toARGB32(),
'card': style.colors.card.toARGB32(),
'cardTranslucent': style.colors.cardTranslucent.toARGB32(),
'buttonSecondaryFill': style.colors.buttonSecondaryFill.toARGB32(),
'accent': style.colors.accent.toARGB32(),
'secondary': style.colors.secondary.toARGB32(),
'shadowColor': style.colors.shadowColor.toARGB32(),
'a15p': style.colors.a15p.toARGB32(),
'warningAccent': style.colors.warningAccent.toARGB32(),
'warningText': style.colors.warningText.toARGB32(),
'warning15p': style.colors.warning15p.toARGB32(),
'warningCard': style.colors.warningCard.toARGB32(),
'errorAccent': style.colors.errorAccent.toARGB32(),
'errorText': style.colors.errorText.toARGB32(),
'error15p': style.colors.error15p.toARGB32(),
'errorCard': style.colors.errorCard.toARGB32(),
'grade5': style.colors.grade5.toARGB32(),
'grade4': style.colors.grade4.toARGB32(),
'grade3': style.colors.grade3.toARGB32(),
'grade2': style.colors.grade2.toARGB32(),
'grade1': style.colors.grade1.toARGB32(),
},
'timetable': timetableJson,
};
}
static Future<void> updateWidgetCache(
FirkaStyle style, KretaClient client) async {
final dataDir = await getApplicationDocumentsDirectory();
final now = timeNow();
final start = now.subtract(Duration(days: 7));
final end = now.add(Duration(days: 14));
final lessons = await client.getTimeTable(start, end);
final widgetFile = File(p.join(dataDir.path, "widget_state.json"));
if (lessons.response != null) {
widgetFile.writeAsString(
jsonEncode(WidgetCacheHelper.toJson(style, lessons.response!)));
}
}
}
import 'dart:convert';
import 'dart:io';
import 'package:firka/helpers/api/client/kreta_client.dart';
import 'package:firka/helpers/api/model/timetable.dart';
import 'package:firka/helpers/debug_helper.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import '../../ui/model/style.dart';
class WidgetCacheHelper {
static Map<String, dynamic> toJson(FirkaStyle style, List<Lesson> timetable) {
List<Map<String, dynamic>> timetableJson = [];
for (var lesson in timetable) {
timetableJson.add(lesson.toJson());
}
return {
'colors': {
'background': style.colors.background.toARGB32(),
'backgroundAmoled': style.colors.backgroundAmoled.toARGB32(),
'background0p': style.colors.background0p.toARGB32(),
'success': style.colors.success.toARGB32(),
'textPrimary': style.colors.textPrimary.toARGB32(),
'textSecondary': style.colors.textSecondary.toARGB32(),
'textTertiary': style.colors.textTertiary.toARGB32(),
'card': style.colors.card.toARGB32(),
'cardTranslucent': style.colors.cardTranslucent.toARGB32(),
'buttonSecondaryFill': style.colors.buttonSecondaryFill.toARGB32(),
'accent': style.colors.accent.toARGB32(),
'secondary': style.colors.secondary.toARGB32(),
'shadowColor': style.colors.shadowColor.toARGB32(),
'a15p': style.colors.a15p.toARGB32(),
'warningAccent': style.colors.warningAccent.toARGB32(),
'warningText': style.colors.warningText.toARGB32(),
'warning15p': style.colors.warning15p.toARGB32(),
'warningCard': style.colors.warningCard.toARGB32(),
'errorAccent': style.colors.errorAccent.toARGB32(),
'errorText': style.colors.errorText.toARGB32(),
'error15p': style.colors.error15p.toARGB32(),
'errorCard': style.colors.errorCard.toARGB32(),
'grade5': style.colors.grade5.toARGB32(),
'grade4': style.colors.grade4.toARGB32(),
'grade3': style.colors.grade3.toARGB32(),
'grade2': style.colors.grade2.toARGB32(),
'grade1': style.colors.grade1.toARGB32(),
},
'timetable': timetableJson,
};
}
static Future<void> updateWidgetCache(
FirkaStyle style, KretaClient client) async {
final dataDir = await getApplicationDocumentsDirectory();
final now = timeNow();
final start = now.subtract(Duration(days: 7));
final end = now.add(Duration(days: 14));
final lessons = await client.getTimeTable(start, end);
final widgetFile = File(p.join(dataDir.path, "widget_state.json"));
if (lessons.response != null) {
widgetFile.writeAsString(
jsonEncode(WidgetCacheHelper.toJson(style, lessons.response!)));
}
}
}

View File

@@ -1,17 +1,17 @@
DateTime? debugFakeTime;
DateTime? debugSetAt;
var debugTimeAdvance = false;
DateTime timeNow() {
if (debugFakeTime != null) {
if (debugTimeAdvance && debugSetAt != null) {
var diff = DateTime.now().difference(debugSetAt!);
return debugFakeTime!.add(diff);
} else {
return debugFakeTime!;
}
} else {
return DateTime.now();
}
}
DateTime? debugFakeTime;
DateTime? debugSetAt;
var debugTimeAdvance = false;
DateTime timeNow() {
if (debugFakeTime != null) {
if (debugTimeAdvance && debugSetAt != null) {
var diff = DateTime.now().difference(debugSetAt!);
return debugFakeTime!.add(diff);
} else {
return debugFakeTime!;
}
} else {
return DateTime.now();
}
}

View File

@@ -1,56 +1,56 @@
import 'dart:async';
import 'dart:io';
import 'dart:convert';
import 'package:brotli/brotli.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
class FirkaBundle extends CachingAssetBundle {
// final bool _compressedBundle = !kDebugMode && Platform.isAndroid;
final bool _compressedBundle = false;
Map<String, dynamic>? index;
Future<Map<String, dynamic>> loadIndex() async {
var indexBrotli = await rootBundle.load("assets/firka.i");
var indexStr = brotli.decodeToString(indexBrotli.buffer.asInt8List());
return Future.value(jsonDecode(indexStr));
}
ByteData decode(Codec<List<int>, List<int>> codec, ByteData data) {
var dec = codec.decode(data.buffer.asInt8List());
var b = ByteData(dec.length);
var l = b.buffer.asInt8List();
for (var i = 0; i < dec.length; i++) {
l[i] = dec[i];
}
return b;
}
@override
Future<ByteData> load(String key) async {
if (!_compressedBundle) {
return rootBundle.load(key);
} else {
index ??= await loadIndex();
final gzip = GZipCodec();
debugPrint("assets/flutter_assets/$key");
switch (index!["assets/flutter_assets/$key"]!) {
case "b": // brotli
return decode(brotli, await rootBundle.load(key));
case "g": // gzip
return decode(gzip, await rootBundle.load(key));
case "r": // raw
return rootBundle.load(key);
default:
throw "Unknown file format: ${index![key]!}";
}
}
}
}
import 'dart:async';
import 'dart:io';
import 'dart:convert';
import 'package:brotli/brotli.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
class FirkaBundle extends CachingAssetBundle {
// final bool _compressedBundle = !kDebugMode && Platform.isAndroid;
final bool _compressedBundle = false;
Map<String, dynamic>? index;
Future<Map<String, dynamic>> loadIndex() async {
var indexBrotli = await rootBundle.load("assets/firka.i");
var indexStr = brotli.decodeToString(indexBrotli.buffer.asInt8List());
return Future.value(jsonDecode(indexStr));
}
ByteData decode(Codec<List<int>, List<int>> codec, ByteData data) {
var dec = codec.decode(data.buffer.asInt8List());
var b = ByteData(dec.length);
var l = b.buffer.asInt8List();
for (var i = 0; i < dec.length; i++) {
l[i] = dec[i];
}
return b;
}
@override
Future<ByteData> load(String key) async {
if (!_compressedBundle) {
return rootBundle.load(key);
} else {
index ??= await loadIndex();
final gzip = GZipCodec();
debugPrint("assets/flutter_assets/$key");
switch (index!["assets/flutter_assets/$key"]!) {
case "b": // brotli
return decode(brotli, await rootBundle.load(key));
case "g": // gzip
return decode(gzip, await rootBundle.load(key));
case "r": // raw
return rootBundle.load(key);
default:
throw "Unknown file format: ${index![key]!}";
}
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,24 +1,24 @@
import 'package:firka/ui/model/style.dart';
import 'package:flutter/material.dart';
class CounterDigitWidget extends StatelessWidget {
final String c;
final TextStyle? style;
const CounterDigitWidget(this.c, this.style, {super.key});
@override
Widget build(BuildContext context) {
return Card(
shadowColor: Colors.transparent,
color: appStyle.colors.buttonSecondaryFill,
child: Padding(
padding: EdgeInsets.only(left: 8, right: 8, top: 4, bottom: 4),
child: Text(
c,
style: style,
),
),
);
}
}
import 'package:firka/ui/model/style.dart';
import 'package:flutter/material.dart';
class CounterDigitWidget extends StatelessWidget {
final String c;
final TextStyle? style;
const CounterDigitWidget(this.c, this.style, {super.key});
@override
Widget build(BuildContext context) {
return Card(
shadowColor: Colors.transparent,
color: appStyle.colors.buttonSecondaryFill,
child: Padding(
padding: EdgeInsets.only(left: 8, right: 8, top: 4, bottom: 4),
child: Text(
c,
style: style,
),
),
);
}
}

View File

@@ -1,46 +1,46 @@
import 'dart:async';
import 'package:flutter/material.dart';
import '../model/style.dart';
class DelayedSpinnerWidget extends StatefulWidget {
const DelayedSpinnerWidget({super.key});
@override
State<DelayedSpinnerWidget> createState() => _DelayedSpinner();
}
class _DelayedSpinner extends State<DelayedSpinnerWidget> {
Timer? timer;
bool showSpinner = false;
@override
void initState() {
super.initState();
timer = Timer(Duration(milliseconds: 50), () {
setState(() {
showSpinner = true;
});
});
}
@override
Widget build(BuildContext context) {
if (showSpinner) {
return CircularProgressIndicator(
color: appStyle.colors.accent,
);
} else {
return SizedBox();
}
}
@override
void dispose() {
super.dispose();
timer?.cancel();
}
}
import 'dart:async';
import 'package:flutter/material.dart';
import '../model/style.dart';
class DelayedSpinnerWidget extends StatefulWidget {
const DelayedSpinnerWidget({super.key});
@override
State<DelayedSpinnerWidget> createState() => _DelayedSpinner();
}
class _DelayedSpinner extends State<DelayedSpinnerWidget> {
Timer? timer;
bool showSpinner = false;
@override
void initState() {
super.initState();
timer = Timer(Duration(milliseconds: 50), () {
setState(() {
showSpinner = true;
});
});
}
@override
Widget build(BuildContext context) {
if (showSpinner) {
return CircularProgressIndicator(
color: appStyle.colors.accent,
);
} else {
return SizedBox();
}
}
@override
void dispose() {
super.dispose();
timer?.cancel();
}
}

View File

@@ -1,41 +1,41 @@
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:majesticons_flutter/majesticons_flutter.dart';
enum FirkaIconType {
icons,
majesticons,
majesticonsLocal,
}
class FirkaIconWidget extends StatelessWidget {
final FirkaIconType iconType;
final Object iconData;
final Color color;
final double? size;
const FirkaIconWidget(this.iconType, this.iconData,
{super.key, this.color = Colors.white, this.size});
@override
Widget build(BuildContext context) {
switch (iconType) {
case FirkaIconType.icons:
return SvgPicture.asset(
'assets/icons/${iconData as String}.svg',
color: color,
height: size,
);
case FirkaIconType.majesticons:
return Majesticon(iconData as Uint8List, color: color, size: size);
case FirkaIconType.majesticonsLocal:
return SvgPicture.asset(
'assets/majesticons/${iconData as String}.svg',
color: color,
height: size,
);
}
}
}
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:majesticons_flutter/majesticons_flutter.dart';
enum FirkaIconType {
icons,
majesticons,
majesticonsLocal,
}
class FirkaIconWidget extends StatelessWidget {
final FirkaIconType iconType;
final Object iconData;
final Color color;
final double? size;
const FirkaIconWidget(this.iconType, this.iconData,
{super.key, this.color = Colors.white, this.size});
@override
Widget build(BuildContext context) {
switch (iconType) {
case FirkaIconType.icons:
return SvgPicture.asset(
'assets/icons/${iconData as String}.svg',
color: color,
height: size,
);
case FirkaIconType.majesticons:
return Majesticon(iconData as Uint8List, color: color, size: size);
case FirkaIconType.majesticonsLocal:
return SvgPicture.asset(
'assets/majesticons/${iconData as String}.svg',
color: color,
height: size,
);
}
}
}