mirror of
https://github.com/d4rken-org/capod.git
synced 2026-09-14 18:26:11 -04:00
chore: Use List in Zipper and add global ExperimentalMaterial3Api opt-in
Replace Array<String> with List<String> in Zipper.zip(). Add global -opt-in flag for ExperimentalMaterial3Api in build.gradle.kts and remove per-file @OptIn annotations from 12 Compose screens.
This commit is contained in:
@@ -118,6 +118,7 @@ android {
|
||||
"-opt-in=kotlin.time.ExperimentalTime",
|
||||
"-opt-in=kotlin.RequiresOptIn",
|
||||
"-opt-in=kotlin.ExperimentalUnsignedTypes",
|
||||
"-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
|
||||
"-Xannotation-default-target=param-property"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -10,17 +10,16 @@ import java.io.FileOutputStream
|
||||
import java.util.zip.ZipEntry
|
||||
import java.util.zip.ZipOutputStream
|
||||
|
||||
// https://stackoverflow.com/a/48598099/1251958
|
||||
class Zipper {
|
||||
|
||||
@Throws(Exception::class)
|
||||
fun zip(files: Array<String>, zipFile: String) {
|
||||
fun zip(files: List<String>, zipFile: String) {
|
||||
ZipOutputStream(BufferedOutputStream(FileOutputStream(zipFile))).use { out ->
|
||||
for (i in files.indices) {
|
||||
log(TAG, VERBOSE) { "Compressing ${files[i]} into $zipFile" }
|
||||
val origin = BufferedInputStream(FileInputStream(files[i]), BUFFER)
|
||||
for (file in files) {
|
||||
log(TAG, VERBOSE) { "Compressing $file into $zipFile" }
|
||||
val origin = BufferedInputStream(FileInputStream(file), BUFFER)
|
||||
|
||||
val entry = ZipEntry(files[i].substring(files[i].lastIndexOf("/") + 1))
|
||||
val entry = ZipEntry(file.substring(file.lastIndexOf("/") + 1))
|
||||
out.putNextEntry(entry)
|
||||
|
||||
origin.use { input -> input.copyTo(out) }
|
||||
@@ -33,4 +32,4 @@ class Zipper {
|
||||
internal val TAG = logTag("Zipper")
|
||||
const val BUFFER = 2048
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ class DebugLogZipper @Inject constructor(
|
||||
val zipFile = File(logDir.parentFile, "${logDir.name}.zip")
|
||||
val tempFile = File(logDir.parentFile, "${logDir.name}.zip.tmp")
|
||||
try {
|
||||
Zipper().zip(logFiles.map { it.path }.toTypedArray(), tempFile.path)
|
||||
Zipper().zip(logFiles.map { it.path }, tempFile.path)
|
||||
try {
|
||||
Files.move(
|
||||
tempFile.toPath(),
|
||||
|
||||
@@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -133,7 +132,6 @@ fun OverviewScreenHost(vm: OverviewViewModel = hiltViewModel()) {
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun OverviewScreen(
|
||||
state: OverviewViewModel.State,
|
||||
|
||||
@@ -12,7 +12,6 @@ import androidx.compose.material.icons.twotone.Settings
|
||||
import androidx.compose.material.icons.twotone.SupportAgent
|
||||
import androidx.compose.material.icons.twotone.Translate
|
||||
import androidx.compose.material.icons.twotone.Widgets
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.Scaffold
|
||||
@@ -60,7 +59,6 @@ fun SettingsScreenHost(vm: SettingsViewModel = hiltViewModel()) {
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun SettingsScreen(
|
||||
state: SettingsViewModel.State,
|
||||
|
||||
@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.twotone.ArrowBack
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.Scaffold
|
||||
@@ -33,7 +32,6 @@ fun AcknowledgementsScreenHost(vm: AcknowledgementsViewModel = hiltViewModel())
|
||||
)
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun AcknowledgementsScreen(
|
||||
onNavigateUp: () -> Unit,
|
||||
|
||||
@@ -23,7 +23,6 @@ import androidx.compose.material.icons.twotone.Palette
|
||||
import androidx.compose.material.icons.twotone.SettingsBluetooth
|
||||
import androidx.compose.material.icons.automirrored.twotone.ViewList
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -87,7 +86,6 @@ fun GeneralSettingsScreenHost(vm: GeneralSettingsViewModel = hiltViewModel()) {
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun GeneralSettingsScreen(
|
||||
state: GeneralSettingsViewModel.State,
|
||||
|
||||
-2
@@ -7,7 +7,6 @@ import androidx.compose.material.icons.automirrored.twotone.ArrowBack
|
||||
import androidx.compose.material.icons.twotone.BugReport
|
||||
import androidx.compose.material.icons.twotone.DataArray
|
||||
import androidx.compose.material.icons.twotone.DevicesOther
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.Scaffold
|
||||
@@ -45,7 +44,6 @@ fun DebugSettingsScreenHost(vm: DebugSettingsViewModel = hiltViewModel()) {
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun DebugSettingsScreen(
|
||||
state: DebugSettingsViewModel.State,
|
||||
|
||||
@@ -26,7 +26,6 @@ import androidx.compose.material.icons.twotone.FiberManualRecord
|
||||
import androidx.compose.material.icons.twotone.Settings
|
||||
import androidx.compose.material.icons.twotone.Warning
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -170,7 +169,6 @@ private fun ShortRecordingWarningDialog(
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun SupportScreen(
|
||||
state: SupportViewModel.State,
|
||||
@@ -312,7 +310,6 @@ fun SupportScreen(
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
private fun DebugSessionsBottomSheet(
|
||||
sessions: List<DebugSession>,
|
||||
|
||||
+1
-2
@@ -26,7 +26,6 @@ import androidx.compose.material.icons.twotone.Email
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.FilterChip
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -154,7 +153,7 @@ fun ContactFormScreenHost(vm: ContactFormViewModel = hiltViewModel()) {
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
fun ContactFormScreen(
|
||||
state: ContactFormViewModel.State,
|
||||
|
||||
@@ -44,7 +44,6 @@ import androidx.compose.material.icons.twotone.Tune
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.FilterChip
|
||||
import androidx.compose.material3.FilterChipDefaults
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -81,7 +80,7 @@ import eu.darken.capod.common.compose.preview.MockPodDataProvider
|
||||
import eu.darken.capod.pods.core.PodDevice
|
||||
import eu.darken.capod.profiles.core.DeviceProfile
|
||||
|
||||
@OptIn(ExperimentalLayoutApi::class, ExperimentalMaterial3Api::class)
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
fun WidgetConfigurationScreen(
|
||||
state: WidgetConfigurationViewModel.State,
|
||||
|
||||
@@ -18,7 +18,6 @@ import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.twotone.ArrowBack
|
||||
import androidx.compose.material.icons.twotone.Add
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.FloatingActionButton
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
@@ -61,7 +60,6 @@ fun DeviceManagerScreenHost(vm: DeviceManagerViewModel = hiltViewModel()) {
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun DeviceManagerScreen(
|
||||
state: DeviceManagerViewModel.State,
|
||||
|
||||
@@ -24,7 +24,6 @@ import androidx.compose.material.icons.twotone.SettingsInputAntenna
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.DropdownMenuItem
|
||||
import androidx.compose.material3.ElevatedCard
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.ExposedDropdownMenuBox
|
||||
import androidx.compose.material3.ExposedDropdownMenuDefaults
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
@@ -138,7 +137,6 @@ fun DeviceProfileCreationScreenHost(
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun DeviceProfileCreationScreen(
|
||||
state: DeviceProfileCreationViewModel.State,
|
||||
@@ -292,7 +290,6 @@ private fun ProfileSectionCard(
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
private fun DeviceInfoCard(
|
||||
name: String,
|
||||
|
||||
@@ -19,7 +19,6 @@ import androidx.compose.material.icons.twotone.Stars
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.material.icons.twotone.Workspaces
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -72,7 +71,6 @@ fun ReactionSettingsScreenHost(vm: ReactionSettingsViewModel = hiltViewModel())
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun ReactionSettingsScreen(
|
||||
state: ReactionSettingsViewModel.State,
|
||||
|
||||
@@ -15,7 +15,6 @@ import androidx.compose.material.icons.automirrored.twotone.ArrowBack
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -52,7 +51,6 @@ fun TroubleShooterScreenHost(vm: TroubleShooterViewModel = hiltViewModel()) {
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun TroubleShooterScreen(
|
||||
state: TroubleShooterViewModel.State,
|
||||
|
||||
@@ -29,7 +29,7 @@ class ZipperTest : BaseTest() {
|
||||
val file2 = createFile("b.txt", "world")
|
||||
val zipPath = File(tempDir, "out.zip").path
|
||||
|
||||
Zipper().zip(arrayOf(file1.path, file2.path), zipPath)
|
||||
Zipper().zip(listOf(file1.path, file2.path), zipPath)
|
||||
|
||||
val zipFile = File(zipPath)
|
||||
zipFile.exists() shouldBe true
|
||||
@@ -42,7 +42,7 @@ class ZipperTest : BaseTest() {
|
||||
val file2 = createFile("extra.log", "extra content")
|
||||
val zipPath = File(tempDir, "out.zip").path
|
||||
|
||||
Zipper().zip(arrayOf(file1.path, file2.path), zipPath)
|
||||
Zipper().zip(listOf(file1.path, file2.path), zipPath)
|
||||
|
||||
ZipFile(zipPath).use { zf ->
|
||||
zf.entries().toList().map { it.name } shouldContainExactlyInAnyOrder listOf("core.log", "extra.log")
|
||||
@@ -57,7 +57,7 @@ class ZipperTest : BaseTest() {
|
||||
val file2 = createFile("b.txt", content2)
|
||||
val zipPath = File(tempDir, "out.zip").path
|
||||
|
||||
Zipper().zip(arrayOf(file1.path, file2.path), zipPath)
|
||||
Zipper().zip(listOf(file1.path, file2.path), zipPath)
|
||||
|
||||
ZipFile(zipPath).use { zf ->
|
||||
zf.getInputStream(zf.getEntry("a.txt")).bufferedReader().readText() shouldBe content1
|
||||
@@ -70,7 +70,7 @@ class ZipperTest : BaseTest() {
|
||||
val file = createFile("only.txt", "solo")
|
||||
val zipPath = File(tempDir, "out.zip").path
|
||||
|
||||
Zipper().zip(arrayOf(file.path), zipPath)
|
||||
Zipper().zip(listOf(file.path), zipPath)
|
||||
|
||||
ZipFile(zipPath).use { zf ->
|
||||
zf.entries().toList().map { it.name } shouldBe listOf("only.txt")
|
||||
@@ -82,7 +82,7 @@ class ZipperTest : BaseTest() {
|
||||
val file = createFile("empty.txt", "")
|
||||
val zipPath = File(tempDir, "out.zip").path
|
||||
|
||||
Zipper().zip(arrayOf(file.path), zipPath)
|
||||
Zipper().zip(listOf(file.path), zipPath)
|
||||
|
||||
ZipFile(zipPath).use { zf ->
|
||||
val entry = zf.getEntry("empty.txt")
|
||||
@@ -96,7 +96,7 @@ class ZipperTest : BaseTest() {
|
||||
val zipPath = File(tempDir, "out.zip").path
|
||||
|
||||
shouldThrow<FileNotFoundException> {
|
||||
Zipper().zip(arrayOf(missing), zipPath)
|
||||
Zipper().zip(listOf(missing), zipPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user