diff --git a/Pink/.claude/plans/ct-line-detection-fix.md b/Pink/.claude/plans/ct-line-detection-fix.md new file mode 100644 index 0000000..c52aa6a --- /dev/null +++ b/Pink/.claude/plans/ct-line-detection-fix.md @@ -0,0 +1,40 @@ +# Plan: 对齐 C++ C/T 线检测逻辑 + +## 问题 +当前 Kotlin 代码跳过条带定位步骤,直接在整张相机画面(960×1280)上用极低阈值检测 C/T 线,导致噪声轮廓大量通过,C 线检测不稳定。 + +C++ 方案正确:**先找绿色定位块 → 裁剪旋转条带区域 → 在裁剪后的条带上检测 C/T 线**。 + +## 修改范围 + +### 1. `StripLocator.kt` — `locate()` 函数(主路径) + +**a) 放宽 center distance ratio(第 408 行)** +- `1.65` → `1.7`(对齐 C++) + +**b) C/T 线过滤顺序和阈值(第 542-548 行)** +- 当前:Width(0.03~0.25) → Height(0.4~1.1) +- 改为:Height(0.7~1.1) → Width(0.045~0.20)(对齐 C++) + +**c) 去重逻辑(第 556-569 行)** +- 当前:保留离图像中心最近的 2 个轮廓 +- 改为:左右两侧各保留 1 个(最靠近中心线的),对齐 C++ + +### 2. `StripLocator.kt` — `locateCroppedStrip()` 函数(回退路径) + +**a) 过滤顺序和阈值(第 850-856 行)** +- 当前:Width(0.005~0.35) → Height(0.02~1.1) +- 改为:Height(0.15~1.1) → Width(0.01~0.25) + +**b) 去重逻辑(第 864-879 行)** +- 同 `locate()`,改为左右各保留 1 个 + +### 3. `ScanViewModel.kt` — `processFrameInternal()`(第 161-166 行) + +- 当前:直接调用 `locateCroppedStrip(rgbMat)` +- 改为:先 try `locate(srcRgba, roiRect, false)`,失败再 fallback 到 `locateCroppedStrip` + +## 预期效果 +- C/T 线检测在裁剪后的条带区域上进行,过滤阈值合理 +- C 线检测更稳定,减少"只检测到 1 条线"的情况 +- 即使 `locate()` 失败,fallback 路径也有改善的阈值 \ No newline at end of file diff --git a/Pink/.idea/gradle.xml b/Pink/.idea/gradle.xml index 7fb7a54..b0dcefd 100644 --- a/Pink/.idea/gradle.xml +++ b/Pink/.idea/gradle.xml @@ -10,6 +10,7 @@ diff --git a/Pink/.idea/misc.xml b/Pink/.idea/misc.xml index 2b2f1af..a599984 100644 --- a/Pink/.idea/misc.xml +++ b/Pink/.idea/misc.xml @@ -1,3 +1,4 @@ + diff --git a/Pink/app/build.gradle.kts b/Pink/app/build.gradle.kts index f640390..d0d5c8e 100644 --- a/Pink/app/build.gradle.kts +++ b/Pink/app/build.gradle.kts @@ -45,6 +45,7 @@ dependencies { implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.material3.adaptive.navigation.suite) + implementation(libs.androidx.compose.material.icons.core) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) implementation(libs.androidx.compose.ui.tooling.preview) @@ -59,6 +60,7 @@ dependencies { implementation(libs.androidx.room.runtime) implementation(libs.androidx.room.ktx) ksp(libs.androidx.room.compiler) + implementation(project(":library")) implementation(project(":openCVLibrary300")) testImplementation(libs.junit) androidTestImplementation(platform(libs.androidx.compose.bom)) diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/MainActivity.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/MainActivity.kt index b295b2d..3d14804 100644 --- a/Pink/app/src/main/java/com/pinkbear/pinkov/MainActivity.kt +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/MainActivity.kt @@ -78,7 +78,9 @@ fun PinkOVApp() { AppDestinations.HOME -> HomePage( onScanClick = { showScanPage = true } ) - AppDestinations.RECORDS -> RecordsPage() + AppDestinations.RECORDS -> RecordsPage( + onScanClick = { showScanPage = true } + ) AppDestinations.MINE -> MinePage() } } diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/data/database/AppDatabase.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/data/database/AppDatabase.kt index 09e3dff..62a525d 100644 --- a/Pink/app/src/main/java/com/pinkbear/pinkov/data/database/AppDatabase.kt +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/data/database/AppDatabase.kt @@ -15,7 +15,7 @@ import com.pinkbear.pinkov.data.entity.ScanRecord @Database( entities = [ScanRecord::class, PeriodSettings::class, DailyRecord::class], - version = 2, + version = 4, exportSchema = false ) abstract class AppDatabase : RoomDatabase() { @@ -56,6 +56,78 @@ abstract class AppDatabase : RoomDatabase() { } } + private val MIGRATION_3_4 = object : Migration(3, 4) { + override fun migrate(db: SupportSQLiteDatabase) { + // Recreate daily_records to replace follicle_size/follicle_time with + // the 4 new follicle_left_a/b / follicle_right_a/b columns. + db.execSQL(""" + CREATE TABLE IF NOT EXISTS `daily_records_new` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + `date` INTEGER NOT NULL, + `is_period_start` INTEGER NOT NULL DEFAULT 0, + `had_sex` INTEGER NOT NULL DEFAULT 0, + `mood` TEXT, + `discharge` TEXT, + `note` TEXT, + `temperature` REAL, + `temperature_time` INTEGER, + `sex_method` TEXT, + `sex_time` INTEGER, + `symptoms` TEXT, + `supplements` TEXT, + `weight` REAL, + `weight_time` INTEGER, + `habits` TEXT, + `stool_type` TEXT, + `plan` TEXT, + `follicle_left_a` INTEGER, + `follicle_left_b` INTEGER, + `follicle_right_a` INTEGER, + `follicle_right_b` INTEGER + ) + """.trimIndent()) + + // Copy existing data (old follicle_size/follicle_time are dropped) + db.execSQL(""" + INSERT INTO `daily_records_new` ( + `id`, `date`, `is_period_start`, `had_sex`, `mood`, `discharge`, `note`, + `temperature`, `temperature_time`, `sex_method`, `sex_time`, + `symptoms`, `supplements`, `weight`, `weight_time`, `habits`, + `stool_type`, `plan` + ) SELECT + `id`, `date`, `is_period_start`, `had_sex`, `mood`, `discharge`, `note`, + `temperature`, `temperature_time`, `sex_method`, `sex_time`, + `symptoms`, `supplements`, `weight`, `weight_time`, `habits`, + `stool_type`, `plan` + FROM `daily_records` + """.trimIndent()) + + db.execSQL("DROP TABLE `daily_records`") + db.execSQL("ALTER TABLE `daily_records_new` RENAME TO `daily_records`") + db.execSQL( + "CREATE UNIQUE INDEX IF NOT EXISTS `index_daily_records_date` ON `daily_records` (`date`)" + ) + } + } + + private val MIGRATION_2_3 = object : Migration(2, 3) { + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `temperature` REAL DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `temperature_time` INTEGER DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `sex_method` TEXT DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `sex_time` INTEGER DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `follicle_size` REAL DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `follicle_time` INTEGER DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `symptoms` TEXT DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `supplements` TEXT DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `weight` REAL DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `weight_time` INTEGER DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `habits` TEXT DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `stool_type` TEXT DEFAULT NULL") + db.execSQL("ALTER TABLE `daily_records` ADD COLUMN `plan` TEXT DEFAULT NULL") + } + } + fun getInstance(context: Context): AppDatabase { return INSTANCE ?: synchronized(this) { INSTANCE ?: Room.databaseBuilder( @@ -63,7 +135,7 @@ abstract class AppDatabase : RoomDatabase() { AppDatabase::class.java, "pinkov_database" ) - .addMigrations(MIGRATION_1_2) + .addMigrations(MIGRATION_1_2, MIGRATION_2_3, MIGRATION_3_4) .build() .also { INSTANCE = it } } diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/data/entity/DailyRecord.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/data/entity/DailyRecord.kt index 77d646f..ae698b6 100644 --- a/Pink/app/src/main/java/com/pinkbear/pinkov/data/entity/DailyRecord.kt +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/data/entity/DailyRecord.kt @@ -24,19 +24,91 @@ data class DailyRecord( @ColumnInfo(name = "is_period_start") val isPeriodStart: Boolean = false, + // ---- 基础体温 ---- + /** Basal body temperature in Celsius. Null = not recorded. */ + @ColumnInfo(name = "temperature") + val temperature: Float? = null, + + /** Time of temperature measurement (epoch millis). */ + @ColumnInfo(name = "temperature_time") + val temperatureTime: Long? = null, + + // ---- 爱爱 ---- /** User recorded sexual activity on this date. */ @ColumnInfo(name = "had_sex") val hadSex: Boolean = false, - /** Mood tag (e.g. 焦虑, 期待, 低落, 放松). Null = not recorded. */ - @ColumnInfo(name = "mood") - val mood: String? = null, + /** Sex method (e.g. 无措施, 避孕套, 体外排精…). Null = not recorded. */ + @ColumnInfo(name = "sex_method") + val sexMethod: String? = null, - /** Cervical mucus / discharge description. Null = not recorded. */ + /** Time of sexual activity (epoch millis). */ + @ColumnInfo(name = "sex_time") + val sexTime: Long? = null, + + // ---- 白带 ---- + /** Cervical mucus / discharge type. Null = not recorded. */ @ColumnInfo(name = "discharge") val discharge: String? = null, - /** Free-text notes for this date. */ + // ---- 卵泡监测 ---- + /** Left follicle width in mm. Null = not recorded. */ + @ColumnInfo(name = "follicle_left_a") + val follicleLeftA: Int? = null, + + /** Left follicle height in mm. Null = not recorded. */ + @ColumnInfo(name = "follicle_left_b") + val follicleLeftB: Int? = null, + + /** Right follicle width in mm. Null = not recorded. */ + @ColumnInfo(name = "follicle_right_a") + val follicleRightA: Int? = null, + + /** Right follicle height in mm. Null = not recorded. */ + @ColumnInfo(name = "follicle_right_b") + val follicleRightB: Int? = null, + + // ---- 症状 ---- + /** Symptom tags, comma-separated. Null = not recorded. */ + @ColumnInfo(name = "symptoms") + val symptoms: String? = null, + + // ---- 心情 ---- + /** Mood tag (e.g. 超开心, 焦虑, 低落, 放松). Null = not recorded. */ + @ColumnInfo(name = "mood") + val mood: String? = null, + + // ---- 营养补充 ---- + /** Supplement tags, comma-separated. Null = not recorded. */ + @ColumnInfo(name = "supplements") + val supplements: String? = null, + + // ---- 体重 ---- + /** Body weight in kg. Null = not recorded. */ + @ColumnInfo(name = "weight") + val weight: Float? = null, + + /** Time of weight measurement (epoch millis). */ + @ColumnInfo(name = "weight_time") + val weightTime: Long? = null, + + // ---- 日记 ---- + /** Free-text diary entry for this date. */ @ColumnInfo(name = "note") val note: String? = null, + + // ---- 好习惯 ---- + /** Habit tags, comma-separated. Null = not recorded. */ + @ColumnInfo(name = "habits") + val habits: String? = null, + + // ---- 便便 ---- + /** Stool type (e.g. 正常, 稀便, 干便…). Null = not recorded. */ + @ColumnInfo(name = "stool_type") + val stoolType: String? = null, + + // ---- 计划 ---- + /** Plan text for this date. Null = not recorded. */ + @ColumnInfo(name = "plan") + val plan: String? = null, ) diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/CheckInPanel.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/CheckInPanel.kt index 8242a7a..76ebcb9 100644 --- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/CheckInPanel.kt +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/CheckInPanel.kt @@ -1,42 +1,84 @@ package com.pinkbear.pinkov.ui.component +import androidx.compose.foundation.Image +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import com.pinkbear.pinkov.R import com.pinkbear.pinkov.data.entity.DailyRecord +import com.pinkbear.pinkov.ui.component.checkin.DiarySheet +import com.pinkbear.pinkov.ui.component.checkin.DischargeSheet +import com.pinkbear.pinkov.ui.component.checkin.FollicleSheet +import com.pinkbear.pinkov.ui.component.checkin.HabitSheet +import com.pinkbear.pinkov.ui.component.checkin.LoveSheet +import com.pinkbear.pinkov.ui.component.checkin.MoodSheet +import com.pinkbear.pinkov.ui.component.checkin.PlanSheet +import com.pinkbear.pinkov.ui.component.checkin.StoolSheet +import com.pinkbear.pinkov.ui.component.checkin.SupplementSheet +import com.pinkbear.pinkov.ui.component.checkin.SymptomSheet +import com.pinkbear.pinkov.ui.component.checkin.TemperatureSheet +import com.pinkbear.pinkov.ui.component.checkin.WeightSheet import java.time.LocalDate import java.time.format.DateTimeFormatter import java.util.Locale +/** + * Which check-in bottom sheet is currently open. + */ +private enum class CheckInSheet { + TEMPERATURE, LOVE, DISCHARGE, FOLLICLE, + SYMPTOM, MOOD, SUPPLEMENT, WEIGHT, + DIARY, HABIT, STOOL, PLAN +} + /** * Bottom panel showing check-in items for the selected calendar date. - * - * When no date is selected, shows a hint. When a date is selected, - * shows the "月经来了" switch and (in future) more check-in items. */ @Composable fun CheckInPanel( selectedDate: LocalDate?, record: DailyRecord?, onPeriodStartChanged: (LocalDate, Boolean) -> Unit, + onScanClick: () -> Unit, + onTemperatureSave: (LocalDate, Float, Long) -> Unit, + onLoveSave: (LocalDate, String, Long) -> Unit, + onDischargeSave: (LocalDate, String) -> Unit, + onFollicleSave: (LocalDate, Int, Int, Int, Int) -> Unit, + onSymptomSave: (LocalDate, String) -> Unit, + onMoodSave: (LocalDate, String) -> Unit, + onSupplementSave: (LocalDate, String) -> Unit, + onWeightSave: (LocalDate, Float, Long) -> Unit, + onDiarySave: (LocalDate, String) -> Unit, + onHabitSave: (LocalDate, String) -> Unit, + onStoolSave: (LocalDate, String) -> Unit, + onPlanSave: (LocalDate, String) -> Unit, modifier: Modifier = Modifier, ) { val formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日", Locale.CHINESE) + var openSheet by remember { mutableStateOf(null) } Column( modifier = modifier @@ -69,25 +111,233 @@ fun CheckInPanel( onPeriodStartChanged(selectedDate, checked) }, ) - HorizontalDivider( - thickness = 0.5.dp, - color = MaterialTheme.colorScheme.outlineVariant, - ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) - // ---- Placeholder items (future) ---- - PlaceholderCheckInRow(label = "爱爱") - HorizontalDivider( - thickness = 0.5.dp, - color = MaterialTheme.colorScheme.outlineVariant, + // ---- 13 check-in entries ---- + // 1. 排卵试纸 → navigate to scan + CheckInEntryRow( + iconRes = R.drawable.record_icon_pailuan, + label = "排卵试纸", + valueText = null, // never shows saved value, always navigates + onClick = onScanClick, ) - PlaceholderCheckInRow(label = "心情") - HorizontalDivider( - thickness = 0.5.dp, - color = MaterialTheme.colorScheme.outlineVariant, + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 2. 基础体温 + CheckInEntryRow( + iconRes = R.drawable.record_icon_tiwen_no, + label = "基础体温", + valueText = record?.temperature?.let { "${it}°C" }, + onClick = { openSheet = CheckInSheet.TEMPERATURE }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 3. 爱爱 + CheckInEntryRow( + iconRes = R.drawable.record_icon_aiai, + label = "爱爱", + valueText = record?.sexMethod, + onClick = { openSheet = CheckInSheet.LOVE }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 4. 白带 + CheckInEntryRow( + iconRes = R.drawable.record_icon_baidai, + label = "白带", + valueText = record?.discharge, + onClick = { openSheet = CheckInSheet.DISCHARGE }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 5. 卵泡监测 + CheckInEntryRow( + iconRes = R.drawable.record_icon_pailuan, + label = "卵泡监测", + valueText = buildFollicleDisplay(record), + onClick = { openSheet = CheckInSheet.FOLLICLE }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 6. 症状 + CheckInEntryRow( + iconRes = R.drawable.record_icon_ill, + label = "症状", + valueText = record?.symptoms, + onClick = { openSheet = CheckInSheet.SYMPTOM }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 7. 心情 + CheckInEntryRow( + iconRes = R.drawable.record_icon_xinqing, + label = "心情", + valueText = record?.mood, + onClick = { openSheet = CheckInSheet.MOOD }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 8. 营养补充 + CheckInEntryRow( + iconRes = R.drawable.record_icon_help, + label = "营养补充", + valueText = record?.supplements, + onClick = { openSheet = CheckInSheet.SUPPLEMENT }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 9. 体重 + CheckInEntryRow( + iconRes = R.drawable.record_icon_tizhong_no, + label = "体重", + valueText = record?.weight?.let { "${it}kg" }, + onClick = { openSheet = CheckInSheet.WEIGHT }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 10. 日记 + CheckInEntryRow( + iconRes = R.drawable.record_icon_riji, + label = "日记", + valueText = record?.note, + onClick = { openSheet = CheckInSheet.DIARY }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 11. 好习惯 + CheckInEntryRow( + iconRes = R.drawable.record_icon_habite, + label = "好习惯", + valueText = record?.habits, + onClick = { openSheet = CheckInSheet.HABIT }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 12. 便便 + CheckInEntryRow( + iconRes = R.drawable.record_icon_sleep, + label = "便便", + valueText = record?.stoolType, + onClick = { openSheet = CheckInSheet.STOOL }, + ) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + + // 13. 计划 + CheckInEntryRow( + iconRes = R.drawable.record_icon_tool, + label = "计划", + valueText = record?.plan, + onClick = { openSheet = CheckInSheet.PLAN }, ) - PlaceholderCheckInRow(label = "白带") } } + + // ---- Bottom Sheets ---- + when (openSheet) { + CheckInSheet.TEMPERATURE -> TemperatureSheet( + initialTemp = record?.temperature, + initialTime = record?.temperatureTime, + onSave = { temp, time -> + selectedDate?.let { onTemperatureSave(it, temp, time) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.LOVE -> LoveSheet( + initialMethod = record?.sexMethod, + initialTime = record?.sexTime, + onSave = { method, time -> + selectedDate?.let { onLoveSave(it, method, time) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.DISCHARGE -> DischargeSheet( + initialType = record?.discharge, + onSave = { type -> + selectedDate?.let { onDischargeSave(it, type) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.FOLLICLE -> FollicleSheet( + initialLeftA = record?.follicleLeftA, + initialLeftB = record?.follicleLeftB, + initialRightA = record?.follicleRightA, + initialRightB = record?.follicleRightB, + onSave = { leftA, leftB, rightA, rightB -> + selectedDate?.let { onFollicleSave(it, leftA, leftB, rightA, rightB) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.SYMPTOM -> SymptomSheet( + initialSymptoms = record?.symptoms, + onSave = { symptoms -> + selectedDate?.let { onSymptomSave(it, symptoms) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.MOOD -> MoodSheet( + initialMood = record?.mood, + onSave = { mood -> + selectedDate?.let { onMoodSave(it, mood) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.SUPPLEMENT -> SupplementSheet( + initialSupplements = record?.supplements, + onSave = { supplements -> + selectedDate?.let { onSupplementSave(it, supplements) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.WEIGHT -> WeightSheet( + initialWeight = record?.weight, + initialTime = record?.weightTime, + onSave = { weight, time -> + selectedDate?.let { onWeightSave(it, weight, time) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.DIARY -> DiarySheet( + initialNote = record?.note, + onSave = { note -> + selectedDate?.let { onDiarySave(it, note) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.HABIT -> HabitSheet( + initialHabits = record?.habits, + onSave = { habits -> + selectedDate?.let { onHabitSave(it, habits) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.STOOL -> StoolSheet( + initialType = record?.stoolType, + onSave = { type -> + selectedDate?.let { onStoolSave(it, type) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + CheckInSheet.PLAN -> PlanSheet( + initialPlan = record?.plan, + onSave = { plan -> + selectedDate?.let { onPlanSave(it, plan) } + openSheet = null + }, + onDismiss = { openSheet = null }, + ) + null -> { /* No sheet open */ } + } } @Composable @@ -112,24 +362,71 @@ private fun CheckInSwitchRow( } } +/** + * A single check-in entry row: icon | label | value/arrow. + */ @Composable -private fun PlaceholderCheckInRow(label: String) { +private fun CheckInEntryRow( + iconRes: Int, + label: String, + valueText: String?, + onClick: () -> Unit, +) { Row( modifier = Modifier .fillMaxWidth() + .clickable { onClick() } .padding(vertical = 10.dp), verticalAlignment = Alignment.CenterVertically, ) { + Image( + painter = painterResource(iconRes), + contentDescription = label, + modifier = Modifier.size(22.dp), + ) + Spacer(modifier = Modifier.width(12.dp)) Text( text = label, fontSize = 15.sp, - color = MaterialTheme.colorScheme.onSurfaceVariant, + color = MaterialTheme.colorScheme.onSurface, modifier = Modifier.weight(1f), ) - Text( - text = "—", - fontSize = 15.sp, - color = MaterialTheme.colorScheme.onSurfaceVariant, + if (valueText != null) { + Text( + text = valueText, + fontSize = 13.sp, + color = MaterialTheme.colorScheme.primary, + maxLines = 1, + ) + Spacer(modifier = Modifier.width(4.dp)) + } + Icon( + painter = painterResource(R.drawable.record_icon_right_arrow), + contentDescription = null, + modifier = Modifier.size(14.dp), + tint = MaterialTheme.colorScheme.onSurfaceVariant, ) } } + +/** + * Build display text for follicle data matching Meiyou's format: + * "左12×10mm", "右15×13mm", or "左12×10 右15×13mm". + */ +private fun buildFollicleDisplay(record: DailyRecord?): String? { + if (record == null) return null + val left = record.follicleLeftA?.takeIf { it > 0 } + val leftB = record.follicleLeftB?.takeIf { it > 0 } + val right = record.follicleRightA?.takeIf { it > 0 } + val rightB = record.follicleRightB?.takeIf { it > 0 } + + val leftStr = if (left != null && leftB != null) "左${left}×${leftB}mm" else null + val rightStr = if (right != null && rightB != null) "右${right}×${rightB}mm" else null + + return when { + leftStr != null && rightStr != null -> "$leftStr $rightStr" + leftStr != null -> leftStr + rightStr != null -> rightStr + else -> null + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/CheckInBottomSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/CheckInBottomSheet.kt new file mode 100644 index 0000000..8398667 --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/CheckInBottomSheet.kt @@ -0,0 +1,28 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable + +/** + * Generic bottom sheet wrapper for check-in forms. + * + * Provides a consistent [ModalBottomSheet] with skip-scrim-area behavior. + * Content is rendered via [content] slot. + */ +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun CheckInBottomSheet( + onDismiss: () -> Unit, + content: @Composable ColumnScope.() -> Unit, +) { + val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + + ModalBottomSheet( + onDismissRequest = onDismiss, + sheetState = sheetState, + content = content, + ) +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DiarySheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DiarySheet.kt new file mode 100644 index 0000000..dcb6d33 --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DiarySheet.kt @@ -0,0 +1,39 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import androidx.compose.foundation.layout.* +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +@Composable +fun DiarySheet( + initialNote: String?, + onSave: (String) -> Unit, + onDismiss: () -> Unit, +) { + var note by remember { mutableStateOf(initialNote ?: "") } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("日记", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + OutlinedTextField( + value = note, + onValueChange = { note = it }, + label = { Text("写点什么呢…") }, + modifier = Modifier.fillMaxWidth().height(160.dp), + maxLines = 8, + ) + + Spacer(modifier = Modifier.height(16.dp)) + Button( + onClick = { onSave(note) }, + modifier = Modifier.fillMaxWidth(), + enabled = note.isNotBlank(), + ) { Text("保存") } + Spacer(modifier = Modifier.height(8.dp)) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DischargeSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DischargeSheet.kt new file mode 100644 index 0000000..dad0a4b --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/DischargeSheet.kt @@ -0,0 +1,178 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import com.pinkbear.pinkov.R +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +/** + * One of the 5 leukorrhea / cervical-mucus types, matching Meiyou's data model. + */ +private data class DischargeOption( + val code: Int, + val iconRes: Int, + val name: String, + val description: String, +) + +/** The 5 discharge types, kept in Meiyou's V2 dialog order. */ +private val DISCHARGE_OPTIONS = listOf( + DischargeOption(3, R.drawable.icon_leukorrhea_ganzao, "干燥", "内裤干爽,分泌物量少,无水分"), + DischargeOption(2, R.drawable.icon_leukorrhea_nianchou, "粘稠", "分泌物稠厚,触感像胶状物"), + DischargeOption(4, R.drawable.icon_leukorrhea_xichou, "稀糊状", "含水量偏多偏黄色,触感像乳液"), + DischargeOption(5, R.drawable.icon_leukorrhea_shuizhuang, "水状", "呈白色或透明,触感似水滴"), + DischargeOption(1, R.drawable.icon_leukorrhea_danqing, "蛋清状", "呈透明状,两指间可拉丝"), +) + +/** Pink accent used for the selected ring — matches Meiyou's #ff94b8. */ +private val LeukorrheaPink = Color(0xFFFF94B8) + +/** + * Bottom sheet for recording cervical mucus / discharge type. + * + * Mimics Meiyou's [LeukorrheaAbBottomDialog] (V2): 5 icons in a horizontal row, + * each with a circular pink border when selected plus a check-mark overlay. + * Tap a selected item to deselect it (back to "unrecorded"). + */ +@Composable +fun DischargeSheet( + initialType: String?, + onSave: (String) -> Unit, + onDismiss: () -> Unit, +) { + // Resolve the initial type name → code for pre-selection + val initialCode = remember(initialType) { + DISCHARGE_OPTIONS.firstOrNull { it.name == initialType }?.code + } + var selectedCode by remember { mutableStateOf(initialCode) } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("白带", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(20.dp)) + + // ---- 5-icon horizontal row ---- + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceEvenly, + ) { + DISCHARGE_OPTIONS.forEach { option -> + val isSelected = selectedCode == option.code + DischargeIconItem( + option = option, + selected = isSelected, + onClick = { + selectedCode = if (isSelected) null else option.code + }, + ) + } + } + + // ---- Description for the selected type ---- + val selectedDesc = DISCHARGE_OPTIONS.firstOrNull { it.code == selectedCode }?.description + if (selectedDesc != null) { + Spacer(modifier = Modifier.height(16.dp)) + Surface( + shape = RoundedCornerShape(8.dp), + color = LeukorrheaPink.copy(alpha = 0.08f), + modifier = Modifier.fillMaxWidth(), + ) { + Text( + text = selectedDesc, + fontSize = 13.sp, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(12.dp), + ) + } + } + + Spacer(modifier = Modifier.height(20.dp)) + + // ---- Save button ---- + Button( + onClick = { + val name = DISCHARGE_OPTIONS.firstOrNull { it.code == selectedCode }?.name ?: "" + onSave(name) + }, + modifier = Modifier.fillMaxWidth(), + enabled = selectedCode != null, + ) { + Text("保存") + } + Spacer(modifier = Modifier.height(8.dp)) + } +} + +/** + * Single discharge icon cell: circle background (pink ring when selected), + * icon image, check overlay at bottom-right when selected, name label below. + */ +@Composable +private fun DischargeIconItem( + option: DischargeOption, + selected: Boolean, + onClick: () -> Unit, +) { + val ringWidth = if (selected) 2.dp else 0.dp + val ringColor = if (selected) LeukorrheaPink else Color.Transparent + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .clickable { onClick() } + .padding(4.dp), + ) { + // Circular icon with optional pink ring + check overlay + Box( + modifier = Modifier + .size(52.dp) + .border(ringWidth, ringColor, CircleShape) + .padding(4.dp), + contentAlignment = Alignment.Center, + ) { + Image( + painter = painterResource(option.iconRes), + contentDescription = option.name, + modifier = Modifier.size(44.dp), + contentScale = ContentScale.Fit, + ) + + // Check-mark overlay at bottom-right when selected + if (selected) { + Image( + painter = painterResource(R.drawable.icon_leukorrhea_choose), + contentDescription = "已选中", + modifier = Modifier + .size(20.dp) + .align(Alignment.BottomEnd), + contentScale = ContentScale.Fit, + ) + } + } + + Spacer(modifier = Modifier.height(4.dp)) + + Text( + text = option.name, + fontSize = 12.sp, + textAlign = TextAlign.Center, + color = if (selected) LeukorrheaPink else MaterialTheme.colorScheme.onSurfaceVariant, + fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Normal, + ) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/FollicleSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/FollicleSheet.kt new file mode 100644 index 0000000..9dcac44 --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/FollicleSheet.kt @@ -0,0 +1,166 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import com.pinkbear.pinkov.R +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +/** + * Bottom sheet for recording follicle monitoring data, matching Meiyou's + * [FollicleNumKeyboardDialog] design: + * - Two rows: left ovary (左侧卵泡大小) and right ovary (右侧卵泡大小) + * - Each row: width (A) × height (B) in mm, integer input, max 2 digits + * - No time field (Meiyou does not record time for follicle measurements) + */ +@Composable +fun FollicleSheet( + initialLeftA: Int?, + initialLeftB: Int?, + initialRightA: Int?, + initialRightB: Int?, + onSave: (Int, Int, Int, Int) -> Unit, + onDismiss: () -> Unit, +) { + var leftA by remember { mutableStateOf(initialLeftA?.toString() ?: "") } + var leftB by remember { mutableStateOf(initialLeftB?.toString() ?: "") } + var rightA by remember { mutableStateOf(initialRightA?.toString() ?: "") } + var rightB by remember { mutableStateOf(initialRightB?.toString() ?: "") } + + val hasAnyData = leftA.isNotBlank() || leftB.isNotBlank() || + rightA.isNotBlank() || rightB.isNotBlank() + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("卵泡监测", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(12.dp)) + + Text( + "建议记录最大卵泡", + fontSize = 13.sp, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.fillMaxWidth(), + ) + Spacer(modifier = Modifier.height(20.dp)) + + // ---- Left ovary row ---- + FollicleSizeRow( + label = "左侧卵泡大小", + valueA = leftA, + valueB = leftB, + onValueAChange = { leftA = it.take(2) }, + onValueBChange = { leftB = it.take(2) }, + ) + Spacer(modifier = Modifier.height(12.dp)) + + // ---- Right ovary row ---- + FollicleSizeRow( + label = "右侧卵泡大小", + valueA = rightA, + valueB = rightB, + onValueAChange = { rightA = it.take(2) }, + onValueBChange = { rightB = it.take(2) }, + ) + + Spacer(modifier = Modifier.height(24.dp)) + + // ---- Save button ---- + Button( + onClick = { + val la = leftA.toIntOrNull() ?: 0 + val lb = leftB.toIntOrNull() ?: 0 + val ra = rightA.toIntOrNull() ?: 0 + val rb = rightB.toIntOrNull() ?: 0 + onSave(la, lb, ra, rb) + }, + modifier = Modifier.fillMaxWidth(), + enabled = hasAnyData, + ) { + Text("保存") + } + Spacer(modifier = Modifier.height(8.dp)) + } +} + +/** + * A single follicle size input row: label + [EditText A] + × + [EditText B] + mm. + * Matches Meiyou's `dialog_layout_follicle_pink.xml` row layout. + */ +@Composable +private fun FollicleSizeRow( + label: String, + valueA: String, + valueB: String, + onValueAChange: (String) -> Unit, + onValueBChange: (String) -> Unit, +) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + ) { + // Label + Text( + text = label, + fontSize = 17.sp, + color = MaterialTheme.colorScheme.onSurface, + ) + + Spacer(modifier = Modifier.width(8.dp)) + + // Width input (A) + OutlinedTextField( + value = valueA, + onValueChange = onValueAChange, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + singleLine = true, + modifier = Modifier.width(68.dp).height(56.dp), + shape = RoundedCornerShape(8.dp), + textStyle = MaterialTheme.typography.bodyLarge.copy( + fontSize = 16.sp, + textAlign = androidx.compose.ui.text.style.TextAlign.Center, + ), + ) + + Spacer(modifier = Modifier.width(8.dp)) + + // Multiply sign + Image( + painter = painterResource(R.drawable.icon_multiply), + contentDescription = "乘", + modifier = Modifier.size(12.dp), + ) + + Spacer(modifier = Modifier.width(8.dp)) + + // Height input (B) + OutlinedTextField( + value = valueB, + onValueChange = onValueBChange, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number), + singleLine = true, + modifier = Modifier.width(68.dp).height(56.dp), + shape = RoundedCornerShape(8.dp), + textStyle = MaterialTheme.typography.bodyLarge.copy( + fontSize = 16.sp, + textAlign = androidx.compose.ui.text.style.TextAlign.Center, + ), + ) + + Spacer(modifier = Modifier.width(8.dp)) + + // Unit + Text( + text = "mm", + fontSize = 16.sp, + color = MaterialTheme.colorScheme.onSurface, + ) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/HabitSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/HabitSheet.kt new file mode 100644 index 0000000..2282952 --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/HabitSheet.kt @@ -0,0 +1,57 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import androidx.compose.foundation.layout.* +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +private val HABIT_OPTIONS = listOf( + "早睡", "运动", "泡脚", "喝豆浆", "不熬夜", + "冥想", "瑜伽", "散步", "阅读", "喝水2L", + "不吃辣", "戒咖啡", "吃早餐", "按时吃饭", "其他", +) + +@Composable +fun HabitSheet( + initialHabits: String?, + onSave: (String) -> Unit, + onDismiss: () -> Unit, +) { + val initialSet = remember(initialHabits) { + initialHabits?.split(",")?.map { it.trim() }?.filter { it.isNotEmpty() }?.toSet() ?: emptySet() + } + var selected by remember { mutableStateOf(initialSet) } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("好习惯", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + Column(modifier = Modifier.fillMaxWidth()) { + var rowItems = mutableListOf() + HABIT_OPTIONS.forEach { item -> + rowItems.add(item) + if (rowItems.size == 3) { + CheckInTagRow(rowItems, selected) { tag -> + selected = if (tag in selected) selected - tag else selected + tag + } + rowItems = mutableListOf() + } + } + if (rowItems.isNotEmpty()) { + CheckInTagRow(rowItems, selected) { tag -> + selected = if (tag in selected) selected - tag else selected + tag + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + Button( + onClick = { onSave(selected.joinToString(",")) }, + modifier = Modifier.fillMaxWidth(), + ) { Text("保存") } + Spacer(modifier = Modifier.height(8.dp)) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/LoveSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/LoveSheet.kt new file mode 100644 index 0000000..dfcb8b9 --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/LoveSheet.kt @@ -0,0 +1,190 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import com.pinkbear.pinkov.R +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import java.text.SimpleDateFormat +import java.util.* + +/** + * Love method option: icon resource + Chinese label. + */ +private data class LoveOption( + val iconRes: Int, + val label: String, +) + +/** Map of love icon resources to Chinese labels. */ +private val LOVE_OPTIONS = listOf( + LoveOption(R.drawable.icon_love_wcs, "无措施"), + LoveOption(R.drawable.icon_love_byt, "避孕套"), + LoveOption(R.drawable.icon_love_twpj, "体外排精"), + LoveOption(R.drawable.icon_love_wsj, "未射精"), + LoveOption(R.drawable.icon_love_jyh, "紧急避孕药"), + LoveOption(R.drawable.icon_love_cxby, "短效避孕药"), + LoveOption(R.drawable.icon_love_dxby, "长效避孕药"), + LoveOption(R.drawable.icon_love_jjbyy, "节育环"), + LoveOption(R.drawable.icon_love_qtyy, "其他措施"), + LoveOption(R.drawable.icon_love_ziwei, "自慰"), +) + +/** + * Bottom sheet for recording sexual activity method and time. + */ +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LoveSheet( + initialMethod: String?, + initialTime: Long?, + onSave: (String, Long) -> Unit, + onDismiss: () -> Unit, +) { + val now = remember { System.currentTimeMillis() } + var selectedMethod by remember { mutableStateOf(initialMethod) } + var time by remember { mutableStateOf(initialTime ?: now) } + var showTimePicker by remember { mutableStateOf(false) } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("同房方式", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + // 2 rows × 5 columns grid of love method icons + LazyVerticalGrid( + columns = GridCells.Fixed(5), + modifier = Modifier.fillMaxWidth().height(200.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(12.dp), + ) { + items(LOVE_OPTIONS.size) { index -> + val option = LOVE_OPTIONS[index] + val selected = selectedMethod == option.label + LoveMethodItem( + option = option, + selected = selected, + onClick = { selectedMethod = option.label }, + ) + } + } + + Spacer(modifier = Modifier.height(12.dp)) + + // Time row + val timeFmt = remember { SimpleDateFormat("HH:mm", Locale.getDefault()) } + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text("同房时间", fontSize = 14.sp) + TextButton(onClick = { showTimePicker = true }) { + Text(timeFmt.format(Date(time)), fontSize = 15.sp) + } + } + + Spacer(modifier = Modifier.height(16.dp)) + + // Save button + Button( + onClick = { + selectedMethod?.let { onSave(it, time) } + }, + modifier = Modifier.fillMaxWidth(), + enabled = selectedMethod != null, + ) { + Text("保存") + } + Spacer(modifier = Modifier.height(8.dp)) + } + + // Time picker dialog + if (showTimePicker) { + val tpState = rememberTimePickerState( + initialHour = (time % 86400000 / 3600000).toInt(), + initialMinute = (time % 3600000 / 60000).toInt(), + is24Hour = true, + ) + AlertDialog( + onDismissRequest = { showTimePicker = false }, + title = { Text("选择同房时间") }, + text = { + Box( + modifier = Modifier.fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + TimePicker(state = tpState) + } + }, + confirmButton = { + TextButton(onClick = { + val cal = Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, tpState.hour) + set(Calendar.MINUTE, tpState.minute) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + } + time = cal.timeInMillis + showTimePicker = false + }) { Text("确定") } + }, + dismissButton = { + TextButton(onClick = { showTimePicker = false }) { Text("取消") } + }, + ) + } +} + +@Composable +private fun LoveMethodItem( + option: LoveOption, + selected: Boolean, + onClick: () -> Unit, +) { + val borderColor = if (selected) MaterialTheme.colorScheme.primary else Color.Transparent + val bgColor = if (selected) + MaterialTheme.colorScheme.primary.copy(alpha = 0.1f) + else + Color.Transparent + + Column( + modifier = Modifier + .clip(RoundedCornerShape(8.dp)) + .border(2.dp, borderColor, RoundedCornerShape(8.dp)) + .background(bgColor) + .clickable { onClick() } + .padding(6.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Image( + painter = painterResource(option.iconRes), + contentDescription = option.label, + modifier = Modifier.size(40.dp), + contentScale = ContentScale.Fit, + ) + Spacer(modifier = Modifier.height(2.dp)) + Text( + text = option.label, + fontSize = 10.sp, + textAlign = TextAlign.Center, + maxLines = 1, + color = if (selected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant, + ) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/MoodSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/MoodSheet.kt new file mode 100644 index 0000000..cef9ddf --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/MoodSheet.kt @@ -0,0 +1,112 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import com.pinkbear.pinkov.R +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +/** + * Mood option with icon resource and label. + */ +private data class MoodOption(val iconRes: Int, val label: String) + +private val MOOD_OPTIONS = listOf( + MoodOption(R.drawable.icon_feeling_1_chaokaixin, "超开心"), + MoodOption(R.drawable.icon_feeling_2_tingkaixin, "挺开心"), + MoodOption(R.drawable.icon_feeling_3_yiban, "一般"), + MoodOption(R.drawable.icon_feeling_4_bukaixin, "不开心"), + MoodOption(R.drawable.icon_feeling_5_haoshangxin, "好伤心"), + MoodOption(R.drawable.icon_feeling_6_xingfen, "兴奋"), + MoodOption(R.drawable.icon_feeling_7_jingxi, "惊喜"), + MoodOption(R.drawable.icon_feeling_8_manzu, "满足"), + MoodOption(R.drawable.icon_feeling_9_xindong, "心动"), + MoodOption(R.drawable.icon_feeling_10_zixin, "自信"), + MoodOption(R.drawable.icon_feeling_11_fangsong, "放松"), + MoodOption(R.drawable.icon_feeling_12_pingjing, "平静"), + MoodOption(R.drawable.icon_feeling_13_fanzao, "烦躁"), + MoodOption(R.drawable.icon_feeling_14_yinu, "易怒"), + MoodOption(R.drawable.icon_feeling_15_shengqi, "生气"), + MoodOption(R.drawable.icon_feeling_16_jiaolv, "焦虑"), + MoodOption(R.drawable.icon_feeling_17_neihao, "内耗"), + MoodOption(R.drawable.icon_feeling_18_yali, "压力"), + MoodOption(R.drawable.icon_feeling_19_haipa, "害怕"), + MoodOption(R.drawable.icon_feeling_20_lengmo, "冷漠"), +) + +/** + * Bottom sheet for selecting mood (single-select grid). + */ +@Composable +fun MoodSheet( + initialMood: String?, + onSave: (String) -> Unit, + onDismiss: () -> Unit, +) { + var selected by remember { mutableStateOf(initialMood) } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("心情", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + LazyVerticalGrid( + columns = GridCells.Fixed(5), + modifier = Modifier.fillMaxWidth().height(280.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(12.dp), + ) { + items(MOOD_OPTIONS.size) { index -> + val option = MOOD_OPTIONS[index] + val isSelected = selected == option.label + Column( + modifier = Modifier + .clip(RoundedCornerShape(8.dp)) + .border(2.dp, if (isSelected) MaterialTheme.colorScheme.primary else Color.Transparent, RoundedCornerShape(8.dp)) + .background(if (isSelected) MaterialTheme.colorScheme.primary.copy(alpha = 0.1f) else Color.Transparent) + .clickable { selected = option.label } + .padding(6.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Image( + painter = painterResource(option.iconRes), + contentDescription = option.label, + modifier = Modifier.size(36.dp), + contentScale = ContentScale.Fit, + ) + Spacer(modifier = Modifier.height(2.dp)) + Text( + text = option.label, + fontSize = 10.sp, + textAlign = TextAlign.Center, + maxLines = 1, + color = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onSurfaceVariant, + ) + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + Button( + onClick = { selected?.let { onSave(it) } }, + modifier = Modifier.fillMaxWidth(), + enabled = selected != null, + ) { Text("保存") } + Spacer(modifier = Modifier.height(8.dp)) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/PlanSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/PlanSheet.kt new file mode 100644 index 0000000..490af0c --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/PlanSheet.kt @@ -0,0 +1,39 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import androidx.compose.foundation.layout.* +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +@Composable +fun PlanSheet( + initialPlan: String?, + onSave: (String) -> Unit, + onDismiss: () -> Unit, +) { + var plan by remember { mutableStateOf(initialPlan ?: "") } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("计划", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + OutlinedTextField( + value = plan, + onValueChange = { plan = it }, + label = { Text("今天有什么计划…") }, + modifier = Modifier.fillMaxWidth().height(120.dp), + maxLines = 6, + ) + + Spacer(modifier = Modifier.height(16.dp)) + Button( + onClick = { onSave(plan) }, + modifier = Modifier.fillMaxWidth(), + enabled = plan.isNotBlank(), + ) { Text("保存") } + Spacer(modifier = Modifier.height(8.dp)) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/StoolSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/StoolSheet.kt new file mode 100644 index 0000000..b0ecd83 --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/StoolSheet.kt @@ -0,0 +1,50 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +@Composable +fun StoolSheet( + initialType: String?, + onSave: (String) -> Unit, + onDismiss: () -> Unit, +) { + val options = listOf("正常", "稀便", "干便", "便秘", "腹泻", "黑便", "血便", "其他") + var selected by remember { mutableStateOf(initialType) } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("便便", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + Column(modifier = Modifier.fillMaxWidth()) { + options.forEach { label -> + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { selected = label } + .padding(vertical = 10.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + RadioButton(selected = selected == label, onClick = { selected = label }) + Spacer(modifier = Modifier.width(8.dp)) + Text(label, fontSize = 15.sp) + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + Button( + onClick = { selected?.let { onSave(it) } }, + modifier = Modifier.fillMaxWidth(), + enabled = selected != null, + ) { Text("保存") } + Spacer(modifier = Modifier.height(8.dp)) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SupplementSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SupplementSheet.kt new file mode 100644 index 0000000..4c2884c --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SupplementSheet.kt @@ -0,0 +1,96 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +private val SUPPLEMENT_OPTIONS = listOf( + "叶酸", "维生素D", "维生素E", "钙片", "铁剂", + "DHA", "辅酶Q10", "维生素C", "维生素B族", "锌", + "益生菌", "蔓越莓", "月见草油", "圣洁莓", "其他", +) + +@Composable +fun SupplementSheet( + initialSupplements: String?, + onSave: (String) -> Unit, + onDismiss: () -> Unit, +) { + val initialSet = remember(initialSupplements) { + initialSupplements?.split(",")?.map { it.trim() }?.filter { it.isNotEmpty() }?.toSet() ?: emptySet() + } + var selected by remember { mutableStateOf(initialSet) } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("营养补充", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + Column(modifier = Modifier.fillMaxWidth()) { + var rowItems = mutableListOf() + SUPPLEMENT_OPTIONS.forEach { item -> + rowItems.add(item) + if (rowItems.size == 3) { + CheckInTagRow(rowItems, selected) { tag -> + selected = if (tag in selected) selected - tag else selected + tag + } + rowItems = mutableListOf() + } + } + if (rowItems.isNotEmpty()) { + CheckInTagRow(rowItems, selected) { tag -> + selected = if (tag in selected) selected - tag else selected + tag + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + Button( + onClick = { onSave(selected.joinToString(",")) }, + modifier = Modifier.fillMaxWidth(), + ) { Text("保存") } + Spacer(modifier = Modifier.height(8.dp)) + } +} + +@Composable +internal fun CheckInTagRow( + items: List, + selected: Set, + onToggle: (String) -> Unit, +) { + Row( + modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + items.forEach { label -> + val isSelected = label in selected + Box( + modifier = Modifier + .weight(1f) + .clip(RoundedCornerShape(8.dp)) + .background( + if (isSelected) MaterialTheme.colorScheme.primary + else MaterialTheme.colorScheme.surfaceVariant + ) + .clickable { onToggle(label) } + .padding(horizontal = 12.dp, vertical = 10.dp), + ) { + Text( + text = label, + fontSize = 13.sp, + color = if (isSelected) MaterialTheme.colorScheme.onPrimary + else MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.fillMaxWidth(), + ) + } + } + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SymptomSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SymptomSheet.kt new file mode 100644 index 0000000..3a96a6c --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/SymptomSheet.kt @@ -0,0 +1,254 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import com.pinkbear.pinkov.R +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +/** + * A single symptom option with icon resource and Chinese name. + * @param id Numeric ID matching Meiyou's all_symptom_data.json. + */ +private data class SymptomOption( + val id: Int, + val iconRes: Int, + val name: String, +) + +// ---- Section 1: 身体症状 (pregnancy_prepare mode) ---- +private val BODY_SYMPTOMS = listOf( + SymptomOption(192, R.drawable.icon_zhengzhuang_192_meiyou, "没有症状"), + SymptomOption(11, R.drawable.icon_zhengzhuang_011_yaosuan, "腰酸"), + SymptomOption(10, R.drawable.icon_zhengzhuang_010_futong, "腹痛"), + SymptomOption(12, R.drawable.icon_zhengzhuang_012_xiaofuzhuizhang, "小腹坠胀"), + SymptomOption(4, R.drawable.icon_zhengzhuang_004_rufangzhangtong, "乳房胀痛"), + SymptomOption(1, R.drawable.icon_zhengzhuang_001_shentisuantong, "身体酸痛"), + SymptomOption(0, R.drawable.icon_zhengzhuang_000_toutong, "头痛"), + SymptomOption(3, R.drawable.icon_zhengzhuang_003_xuanyun, "眩晕"), + SymptomOption(7, R.drawable.icon_zhengzhuang_007_shimian, "失眠"), + SymptomOption(5, R.drawable.icon_zhengzhuang_005_fenci, "粉刺"), + SymptomOption(32, R.drawable.icon_zhengzhuang_032_pifuganzao, "皮肤干燥"), + SymptomOption(6, R.drawable.icon_zhengzhuang_006_shiyubuzhen, "食欲不振"), + SymptomOption(117, R.drawable.icon_zhengzhuang_117_shiyuwangsheng, "食欲旺盛"), + SymptomOption(2, R.drawable.icon_zhengzhuang_002_fuxie, "腹泻"), + SymptomOption(14, R.drawable.icon_zhengzhuang_014_bianmi, "便秘"), + SymptomOption(22, R.drawable.icon_zhengzhuang_022_pibei, "疲惫"), +) + +// ---- Section 2: 阴道分泌物 (pregnancy_prepare mode) ---- +private val DISCHARGE_SYMPTOMS = listOf( + SymptomOption(96, R.drawable.icon_zhengzhuang_096_hesefenmiwu, "褐色分泌物"), + SymptomOption(33, R.drawable.icon_zhengzhuang_033_chuxue, "出血"), + SymptomOption(127, R.drawable.icon_zhengzhuang_127_youxuekuai, "有血块"), + SymptomOption(25, R.drawable.icon_zhengzhuang_025_baidaizengduo, "白带增多"), +) + +/** Width for each icon cell: (screen - padding - gaps) / 4. Approx for bottom sheet. */ +private val CELL_WIDTH = 72.dp + +/** + * Bottom sheet for recording symptoms — three sections matching the Meiyou app design: + * 1. 身体症状 (body symptoms) — 4-column icon grid + * 2. 阴道分泌物 (vaginal discharge) — 4-column icon grid + * 3. 手工输入更多症状 — free-text input for custom symptoms + */ +@Composable +fun SymptomSheet( + initialSymptoms: String?, + onSave: (String) -> Unit, + onDismiss: () -> Unit, +) { + // Split saved symptoms into known names and custom text. + val knownNames = BODY_SYMPTOMS.map { it.name } + DISCHARGE_SYMPTOMS.map { it.name } + val initialParts = remember(initialSymptoms) { + initialSymptoms + ?.split(",") + ?.map { it.trim() } + ?.filter { it.isNotEmpty() } + ?: emptyList() + } + val initialSelected = remember(initialParts) { + initialParts.filter { it in knownNames }.toSet() + } + val initialCustom = remember(initialParts) { + initialParts.filter { it !in knownNames }.joinToString(",") + } + + var selected by remember { mutableStateOf(initialSelected) } + var customText by remember { mutableStateOf(initialCustom) } + + CheckInBottomSheet(onDismiss = onDismiss) { + Column( + modifier = Modifier + .fillMaxWidth() + .verticalScroll(rememberScrollState()), + ) { + Text("症状", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + // ===== Section 1: 身体症状 ===== + SectionTitle("身体症状") + Spacer(modifier = Modifier.height(8.dp)) + SymptomIconGrid( + options = BODY_SYMPTOMS, + selectedNames = selected, + onToggle = { name -> + selected = if (name in selected) selected - name else selected + name + }, + ) + + Spacer(modifier = Modifier.height(20.dp)) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + Spacer(modifier = Modifier.height(16.dp)) + + // ===== Section 2: 阴道分泌物 ===== + SectionTitle("阴道分泌物") + Spacer(modifier = Modifier.height(8.dp)) + SymptomIconGrid( + options = DISCHARGE_SYMPTOMS, + selectedNames = selected, + onToggle = { name -> + selected = if (name in selected) selected - name else selected + name + }, + ) + + Spacer(modifier = Modifier.height(20.dp)) + HorizontalDivider(thickness = 0.5.dp, color = MaterialTheme.colorScheme.outlineVariant) + Spacer(modifier = Modifier.height(16.dp)) + + // ===== Section 3: 手工输入更多症状 ===== + SectionTitle("手工输入更多症状") + Spacer(modifier = Modifier.height(8.dp)) + OutlinedTextField( + value = customText, + onValueChange = { customText = it }, + placeholder = { Text("输入其他症状,用逗号或分号分隔", fontSize = 13.sp) }, + modifier = Modifier + .fillMaxWidth() + .height(100.dp), + maxLines = 4, + ) + + Spacer(modifier = Modifier.height(20.dp)) + + // ===== Save button ===== + Button( + onClick = { + val parts = selected.toList() + customText + .split(",", ",", ";", ";") + .map { it.trim() } + .filter { it.isNotEmpty() } + onSave(parts.joinToString(",")) + }, + modifier = Modifier.fillMaxWidth(), + ) { + Text("保存") + } + Spacer(modifier = Modifier.height(8.dp)) + } + } +} + +@Composable +private fun SectionTitle(title: String) { + Text( + text = title, + fontSize = 15.sp, + fontWeight = FontWeight.SemiBold, + color = MaterialTheme.colorScheme.onSurface, + ) +} + +/** + * A 4-column grid of symptom icons. + */ +@Composable +private fun SymptomIconGrid( + options: List, + selectedNames: Set, + onToggle: (String) -> Unit, +) { + // Chunk into rows of 4 + val rows = options.chunked(4) + Column( + modifier = Modifier.fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(10.dp), + ) { + rows.forEach { rowItems -> + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + rowItems.forEach { option -> + SymptomIconItem( + option = option, + selected = option.name in selectedNames, + onClick = { onToggle(option.name) }, + modifier = Modifier.weight(1f), + ) + } + // Fill remaining slots with empty space to keep alignment + repeat(4 - rowItems.size) { + Spacer(modifier = Modifier.weight(1f)) + } + } + } + } +} + +@Composable +private fun SymptomIconItem( + option: SymptomOption, + selected: Boolean, + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + val borderColor = if (selected) MaterialTheme.colorScheme.primary else Color.Transparent + val bgColor = if (selected) + MaterialTheme.colorScheme.primary.copy(alpha = 0.1f) + else + Color.Transparent + + Column( + modifier = modifier + .clip(RoundedCornerShape(8.dp)) + .border(2.dp, borderColor, RoundedCornerShape(8.dp)) + .background(bgColor) + .clickable { onClick() } + .padding(vertical = 8.dp, horizontal = 4.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Image( + painter = painterResource(option.iconRes), + contentDescription = option.name, + modifier = Modifier.size(36.dp), + contentScale = ContentScale.Fit, + ) + Spacer(modifier = Modifier.height(4.dp)) + Text( + text = option.name, + fontSize = 10.sp, + textAlign = TextAlign.Center, + maxLines = 1, + color = if (selected) MaterialTheme.colorScheme.primary + else MaterialTheme.colorScheme.onSurfaceVariant, + ) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/TemperatureSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/TemperatureSheet.kt new file mode 100644 index 0000000..fd4ac89 --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/TemperatureSheet.kt @@ -0,0 +1,114 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +import java.text.SimpleDateFormat +import java.util.* + +/** + * Bottom sheet for recording basal body temperature. + */ +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TemperatureSheet( + initialTemp: Float?, + initialTime: Long?, + onSave: (Float, Long) -> Unit, + onDismiss: () -> Unit, +) { + val now = remember { System.currentTimeMillis() } + var temp by remember { mutableStateOf(initialTemp?.toString() ?: "") } + var time by remember { mutableStateOf(initialTime ?: now) } + var showTimePicker by remember { mutableStateOf(false) } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("基础体温", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + // Temperature input + OutlinedTextField( + value = temp, + onValueChange = { temp = it }, + label = { Text("体温") }, + suffix = { Text("°C") }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal), + singleLine = true, + modifier = Modifier.fillMaxWidth(), + ) + + Spacer(modifier = Modifier.height(12.dp)) + + // Time display + picker button + val timeFmt = remember { SimpleDateFormat("HH:mm", Locale.getDefault()) } + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text("测温时间", fontSize = 14.sp) + TextButton(onClick = { showTimePicker = true }) { + Text(timeFmt.format(Date(time)), fontSize = 15.sp) + } + } + + Spacer(modifier = Modifier.height(16.dp)) + + // Save button + Button( + onClick = { + val t = temp.toFloatOrNull() ?: return@Button + onSave(t, time) + }, + modifier = Modifier.fillMaxWidth(), + enabled = temp.isNotBlank(), + ) { + Text("保存") + } + Spacer(modifier = Modifier.height(8.dp)) + } + + // Time picker dialog + if (showTimePicker) { + val tpState = rememberTimePickerState( + initialHour = (time % 86400000 / 3600000).toInt(), + initialMinute = (time % 3600000 / 60000).toInt(), + is24Hour = true, + ) + AlertDialog( + onDismissRequest = { showTimePicker = false }, + title = { Text("选择测温时间") }, + text = { + Box( + modifier = Modifier.fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + TimePicker(state = tpState) + } + }, + confirmButton = { + TextButton(onClick = { + val cal = Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, tpState.hour) + set(Calendar.MINUTE, tpState.minute) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + } + time = cal.timeInMillis + showTimePicker = false + }) { Text("确定") } + }, + dismissButton = { + TextButton(onClick = { showTimePicker = false }) { Text("取消") } + }, + ) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/WeightSheet.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/WeightSheet.kt new file mode 100644 index 0000000..8bfd684 --- /dev/null +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/component/checkin/WeightSheet.kt @@ -0,0 +1,90 @@ +package com.pinkbear.pinkov.ui.component.checkin + +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import java.text.SimpleDateFormat +import java.util.* + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun WeightSheet( + initialWeight: Float?, + initialTime: Long?, + onSave: (Float, Long) -> Unit, + onDismiss: () -> Unit, +) { + val now = remember { System.currentTimeMillis() } + var weightStr by remember { mutableStateOf(initialWeight?.toString() ?: "") } + var time by remember { mutableStateOf(initialTime ?: now) } + var showTimePicker by remember { mutableStateOf(false) } + + CheckInBottomSheet(onDismiss = onDismiss) { + Text("体重", fontWeight = FontWeight.Bold, fontSize = 18.sp) + Spacer(modifier = Modifier.height(16.dp)) + + OutlinedTextField( + value = weightStr, + onValueChange = { weightStr = it }, + label = { Text("体重") }, + suffix = { Text("kg") }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Decimal), + singleLine = true, + modifier = Modifier.fillMaxWidth(), + ) + + Spacer(modifier = Modifier.height(12.dp)) + val timeFmt = remember { SimpleDateFormat("HH:mm", Locale.getDefault()) } + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text("测量时间", fontSize = 14.sp) + TextButton(onClick = { showTimePicker = true }) { + Text(timeFmt.format(Date(time)), fontSize = 15.sp) + } + } + + Spacer(modifier = Modifier.height(16.dp)) + Button( + onClick = { weightStr.toFloatOrNull()?.let { onSave(it, time) } }, + modifier = Modifier.fillMaxWidth(), + enabled = weightStr.isNotBlank(), + ) { Text("保存") } + Spacer(modifier = Modifier.height(8.dp)) + } + + if (showTimePicker) { + val tpState = rememberTimePickerState( + initialHour = (time % 86400000 / 3600000).toInt(), + initialMinute = (time % 3600000 / 60000).toInt(), + is24Hour = true, + ) + AlertDialog( + onDismissRequest = { showTimePicker = false }, + title = { Text("选择测量时间") }, + text = { Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) { TimePicker(state = tpState) } }, + confirmButton = { + TextButton(onClick = { + val cal = Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, tpState.hour) + set(Calendar.MINUTE, tpState.minute) + set(Calendar.SECOND, 0) + set(Calendar.MILLISECOND, 0) + } + time = cal.timeInMillis + showTimePicker = false + }) { Text("确定") } + }, + dismissButton = { TextButton(onClick = { showTimePicker = false }) { Text("取消") } }, + ) + } +} diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/HomePage.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/HomePage.kt index 26c3db1..82c2116 100644 --- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/HomePage.kt +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/HomePage.kt @@ -118,10 +118,13 @@ fun HomePage( brush = Brush.verticalGradient( colors = listOf( Color.Transparent, - Color.Black.copy(alpha = 0.03f), - Color.Black.copy(alpha = 0.08f), Color.Black.copy(alpha = 0.14f), - ) + + Color.Black.copy(alpha = 0.08f), + + Color.Black.copy(alpha = 0.03f), + + ) ) ) ) @@ -133,7 +136,7 @@ fun HomePage( modifier = Modifier .fillMaxWidth() .fillMaxHeight() - .background(MaterialTheme.colorScheme.surfaceVariant), + .background(MaterialTheme.colorScheme.surface), contentAlignment = Alignment.Center ) { Text( @@ -147,7 +150,7 @@ fun HomePage( modifier = Modifier .fillMaxWidth() .fillMaxHeight() - .background(MaterialTheme.colorScheme.surfaceVariant) + .background(MaterialTheme.colorScheme.surface) ) { item { Spacer(modifier = Modifier.height(12.dp)) @@ -199,7 +202,7 @@ private fun RecordHeaderRow() { Row( modifier = Modifier .fillMaxWidth() - .background(MaterialTheme.colorScheme.surfaceVariant) + .background(MaterialTheme.colorScheme.surface) .padding(vertical = 8.dp, horizontal = 16.dp), verticalAlignment = Alignment.CenterVertically ) { @@ -264,7 +267,7 @@ private fun RecordRow( "阴性" -> Color(0xFF4CAF50) "阳性" -> Color(0xFFFF9800) "强阳" -> Color(0xFFF44336) - else -> Color.White + else -> MaterialTheme.colorScheme.surface } Card( diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/MinePage.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/MinePage.kt index 5235a3e..09f4de7 100644 --- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/MinePage.kt +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/MinePage.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight import androidx.compose.material.icons.filled.Favorite @@ -82,65 +83,75 @@ fun MinePage(modifier: Modifier = Modifier) { } } - HorizontalDivider( - thickness = 1.dp, - color = MaterialTheme.colorScheme.outlineVariant - ) +// HorizontalDivider( +// thickness = 1.dp, +// color = MaterialTheme.colorScheme.outlineVariant +// ) - // ---- Bottom ~80%: Menu items ---- + // ---- Menu items ---- Column( modifier = Modifier .fillMaxWidth() .fillMaxHeight() + .padding(top = 16.dp) ) { - MenuItemRow( - icon = Icons.Default.Info, - title = "关于我们", - onClick = { /* TODO: navigate to about page */ } - ) - HorizontalDivider( - thickness = 0.5.dp, - color = MaterialTheme.colorScheme.outlineVariant - ) + // Group 1: 关于我们, 版本更新, 经期设置 + Card( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + elevation = CardDefaults.cardElevation(defaultElevation = 4.dp), + shape = RoundedCornerShape(12.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface) + ) { + Column { + MenuItemRow( + icon = Icons.Default.Info, + title = "关于我们", + onClick = { /* TODO: navigate to about page */ } + ) + MenuItemRow( + icon = Icons.Default.Refresh, + title = "版本更新", + onClick = { /* TODO: check for updates */ } + ) + MenuItemRow( + icon = Icons.Default.Favorite, + title = "经期设置", + onClick = { showPeriodSettings = true } + ) + } + } - MenuItemRow( - icon = Icons.Default.Refresh, - title = "版本更新", - onClick = { /* TODO: check for updates */ } - ) - HorizontalDivider( - thickness = 0.5.dp, - color = MaterialTheme.colorScheme.outlineVariant - ) + Spacer(modifier = Modifier.height(10.dp)) - // ---- 经期设置 (above 设置) ---- - MenuItemRow( - icon = Icons.Default.Favorite, - title = "经期设置", - onClick = { showPeriodSettings = true } - ) - HorizontalDivider( - thickness = 0.5.dp, - color = MaterialTheme.colorScheme.outlineVariant - ) - - MenuItemRow( - icon = Icons.Default.Settings, - title = "设置", - onClick = { /* TODO: navigate to settings page */ } - ) + // Group 2: 设置 + Card( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + elevation = CardDefaults.cardElevation(defaultElevation = 4.dp), + shape = RoundedCornerShape(12.dp), + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface) + ) { + MenuItemRow( + icon = Icons.Default.Settings, + title = "设置", + onClick = { /* TODO: navigate to settings page */ } + ) + } // Push version text to bottom Spacer(modifier = Modifier.weight(1f)) - Text( - text = "v1.0.0", - color = MaterialTheme.colorScheme.onSurfaceVariant, - fontSize = 12.sp, - modifier = Modifier - .align(Alignment.CenterHorizontally) - .padding(bottom = 16.dp) - ) +// Text( +// text = "v1.0.0", +// color = MaterialTheme.colorScheme.onSurfaceVariant, +// fontSize = 12.sp, +// modifier = Modifier +// .align(Alignment.CenterHorizontally) +// .padding(bottom = 16.dp) +// ) } } } @@ -178,7 +189,7 @@ private fun MenuItemRow( imageVector = icon, contentDescription = title, modifier = Modifier.size(24.dp), - tint = MaterialTheme.colorScheme.onSurfaceVariant + tint = MaterialTheme.colorScheme.primary ) Spacer(modifier = Modifier.width(16.dp)) diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsPage.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsPage.kt index d6b329d..1875c37 100644 --- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsPage.kt +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsPage.kt @@ -11,7 +11,9 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold @@ -45,6 +47,7 @@ import java.time.LocalDate @Composable fun RecordsPage( modifier: Modifier = Modifier, + onScanClick: () -> Unit = {}, recordsViewModel: RecordsViewModel = viewModel(), ) { val calendarState = rememberSelectableCalendarState( @@ -77,8 +80,9 @@ fun RecordsPage( Scaffold(modifier = modifier) { innerPadding -> Column( modifier = Modifier - .fillMaxSize() + .fillMaxWidth() .padding(innerPadding) + .verticalScroll(rememberScrollState()) ) { // Calendar section SelectableCalendar( @@ -114,6 +118,43 @@ fun RecordsPage( onPeriodStartChanged = { date, isStart -> recordsViewModel.setPeriodStart(date, isStart) }, + onScanClick = onScanClick, + onTemperatureSave = { date, temp, time -> + recordsViewModel.updateTemperature(date, temp, time) + }, + onLoveSave = { date, method, time -> + recordsViewModel.updateSexMethod(date, method, time) + }, + onDischargeSave = { date, type -> + recordsViewModel.updateDischarge(date, type) + }, + onFollicleSave = { date, leftA, leftB, rightA, rightB -> + recordsViewModel.updateFollicle(date, leftA, leftB, rightA, rightB) + }, + onSymptomSave = { date, symptoms -> + recordsViewModel.updateSymptoms(date, symptoms) + }, + onMoodSave = { date, mood -> + recordsViewModel.updateMood(date, mood) + }, + onSupplementSave = { date, supplements -> + recordsViewModel.updateSupplements(date, supplements) + }, + onWeightSave = { date, weight, time -> + recordsViewModel.updateWeight(date, weight, time) + }, + onDiarySave = { date, note -> + recordsViewModel.updateDiary(date, note) + }, + onHabitSave = { date, habits -> + recordsViewModel.updateHabits(date, habits) + }, + onStoolSave = { date, type -> + recordsViewModel.updateStool(date, type) + }, + onPlanSave = { date, plan -> + recordsViewModel.updatePlan(date, plan) + }, ) } } diff --git a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsViewModel.kt b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsViewModel.kt index 152f2c8..a6d3b5b 100644 --- a/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsViewModel.kt +++ b/Pink/app/src/main/java/com/pinkbear/pinkov/ui/page/RecordsViewModel.kt @@ -64,6 +64,134 @@ class RecordsViewModel(application: Application) : AndroidViewModel(application) } } + // ---- Check-in update methods ---- + + /** Update basal body temperature for a date. */ + fun updateTemperature(date: LocalDate, temp: Float, time: Long) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(temperature = temp, temperatureTime = time) + ?: DailyRecord(date = date.toEpochDay(), temperature = temp, temperatureTime = time) + recordDao.upsert(record) + } + } + + /** Update sex method and time for a date. */ + fun updateSexMethod(date: LocalDate, method: String, time: Long) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(hadSex = true, sexMethod = method, sexTime = time) + ?: DailyRecord(date = date.toEpochDay(), hadSex = true, sexMethod = method, sexTime = time) + recordDao.upsert(record) + } + } + + /** Update discharge type for a date. */ + fun updateDischarge(date: LocalDate, type: String) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(discharge = type) + ?: DailyRecord(date = date.toEpochDay(), discharge = type) + recordDao.upsert(record) + } + } + + /** Update follicle monitoring for a date (left/right ovary, width×height in mm). */ + fun updateFollicle(date: LocalDate, leftA: Int, leftB: Int, rightA: Int, rightB: Int) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy( + follicleLeftA = leftA, follicleLeftB = leftB, + follicleRightA = rightA, follicleRightB = rightB, + ) ?: DailyRecord( + date = date.toEpochDay(), + follicleLeftA = leftA, follicleLeftB = leftB, + follicleRightA = rightA, follicleRightB = rightB, + ) + recordDao.upsert(record) + } + } + + /** Update symptoms for a date (comma-separated). */ + fun updateSymptoms(date: LocalDate, symptoms: String) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(symptoms = symptoms) + ?: DailyRecord(date = date.toEpochDay(), symptoms = symptoms) + recordDao.upsert(record) + } + } + + /** Update mood for a date. */ + fun updateMood(date: LocalDate, mood: String) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(mood = mood) + ?: DailyRecord(date = date.toEpochDay(), mood = mood) + recordDao.upsert(record) + } + } + + /** Update supplements for a date (comma-separated). */ + fun updateSupplements(date: LocalDate, supplements: String) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(supplements = supplements) + ?: DailyRecord(date = date.toEpochDay(), supplements = supplements) + recordDao.upsert(record) + } + } + + /** Update weight for a date. */ + fun updateWeight(date: LocalDate, weight: Float, time: Long) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(weight = weight, weightTime = time) + ?: DailyRecord(date = date.toEpochDay(), weight = weight, weightTime = time) + recordDao.upsert(record) + } + } + + /** Update diary note for a date. */ + fun updateDiary(date: LocalDate, note: String) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(note = note) + ?: DailyRecord(date = date.toEpochDay(), note = note) + recordDao.upsert(record) + } + } + + /** Update habits for a date (comma-separated). */ + fun updateHabits(date: LocalDate, habits: String) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(habits = habits) + ?: DailyRecord(date = date.toEpochDay(), habits = habits) + recordDao.upsert(record) + } + } + + /** Update stool type for a date. */ + fun updateStool(date: LocalDate, type: String) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(stoolType = type) + ?: DailyRecord(date = date.toEpochDay(), stoolType = type) + recordDao.upsert(record) + } + } + + /** Update plan text for a date. */ + fun updatePlan(date: LocalDate, plan: String) { + viewModelScope.launch(Dispatchers.IO) { + val existing = recordDao.getRecordOnce(date.toEpochDay()) + val record = existing?.copy(plan = plan) + ?: DailyRecord(date = date.toEpochDay(), plan = plan) + recordDao.upsert(record) + } + } + /** Remove all period-start flags within the same month as [date], except [date] itself. */ private suspend fun clearPeriodStartsInMonth(date: LocalDate) { val monthStart = date.withDayOfMonth(1) diff --git a/Pink/app/src/main/res/drawable/ic_launcher_background.xml b/Pink/app/src/main/res/drawable/ic_launcher_background.xml index 07d5da9..87258f4 100644 --- a/Pink/app/src/main/res/drawable/ic_launcher_background.xml +++ b/Pink/app/src/main/res/drawable/ic_launcher_background.xml @@ -1,170 +1,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + diff --git a/Pink/app/src/main/res/drawable/ic_launcher_foreground.xml b/Pink/app/src/main/res/drawable/ic_launcher_foreground.xml index 2b068d1..8447401 100644 --- a/Pink/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/Pink/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,30 +1,80 @@ + - - - - - - - - + + - \ No newline at end of file + android:pathData="M24,32 A10,10 0 1,1 44,32 A10,10 0 1,1 24,32 Z" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Pink/app/src/main/res/drawable/icon_feeling_10_zixin.webp b/Pink/app/src/main/res/drawable/icon_feeling_10_zixin.webp new file mode 100644 index 0000000..baa11ea Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_10_zixin.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_11_fangsong.webp b/Pink/app/src/main/res/drawable/icon_feeling_11_fangsong.webp new file mode 100644 index 0000000..948e916 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_11_fangsong.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_12_pingjing.webp b/Pink/app/src/main/res/drawable/icon_feeling_12_pingjing.webp new file mode 100644 index 0000000..a1bc6b4 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_12_pingjing.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_13_fanzao.webp b/Pink/app/src/main/res/drawable/icon_feeling_13_fanzao.webp new file mode 100644 index 0000000..d311bda Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_13_fanzao.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_14_yinu.webp b/Pink/app/src/main/res/drawable/icon_feeling_14_yinu.webp new file mode 100644 index 0000000..fd36603 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_14_yinu.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_15_shengqi.webp b/Pink/app/src/main/res/drawable/icon_feeling_15_shengqi.webp new file mode 100644 index 0000000..bd0ca27 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_15_shengqi.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_16_jiaolv.webp b/Pink/app/src/main/res/drawable/icon_feeling_16_jiaolv.webp new file mode 100644 index 0000000..e2a5773 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_16_jiaolv.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_17_neihao.webp b/Pink/app/src/main/res/drawable/icon_feeling_17_neihao.webp new file mode 100644 index 0000000..7fc7f6d Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_17_neihao.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_18_yali.webp b/Pink/app/src/main/res/drawable/icon_feeling_18_yali.webp new file mode 100644 index 0000000..365ce97 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_18_yali.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_19_haipa.webp b/Pink/app/src/main/res/drawable/icon_feeling_19_haipa.webp new file mode 100644 index 0000000..3f8d486 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_19_haipa.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_1_chaokaixin.webp b/Pink/app/src/main/res/drawable/icon_feeling_1_chaokaixin.webp new file mode 100644 index 0000000..3b84499 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_1_chaokaixin.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_20_lengmo.webp b/Pink/app/src/main/res/drawable/icon_feeling_20_lengmo.webp new file mode 100644 index 0000000..d0540e7 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_20_lengmo.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_2_tingkaixin.webp b/Pink/app/src/main/res/drawable/icon_feeling_2_tingkaixin.webp new file mode 100644 index 0000000..8cd077c Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_2_tingkaixin.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_3_yiban.webp b/Pink/app/src/main/res/drawable/icon_feeling_3_yiban.webp new file mode 100644 index 0000000..9669c26 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_3_yiban.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_4_bukaixin.webp b/Pink/app/src/main/res/drawable/icon_feeling_4_bukaixin.webp new file mode 100644 index 0000000..cc2ba4e Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_4_bukaixin.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_5_haoshangxin.webp b/Pink/app/src/main/res/drawable/icon_feeling_5_haoshangxin.webp new file mode 100644 index 0000000..40dfd3e Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_5_haoshangxin.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_6_xingfen.webp b/Pink/app/src/main/res/drawable/icon_feeling_6_xingfen.webp new file mode 100644 index 0000000..7797a4e Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_6_xingfen.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_7_jingxi.webp b/Pink/app/src/main/res/drawable/icon_feeling_7_jingxi.webp new file mode 100644 index 0000000..8476119 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_7_jingxi.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_8_manzu.webp b/Pink/app/src/main/res/drawable/icon_feeling_8_manzu.webp new file mode 100644 index 0000000..30b41d4 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_8_manzu.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_feeling_9_xindong.webp b/Pink/app/src/main/res/drawable/icon_feeling_9_xindong.webp new file mode 100644 index 0000000..8f46109 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_feeling_9_xindong.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_choose.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_choose.webp new file mode 100644 index 0000000..2aaffd2 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_choose.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_danqing.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_danqing.webp new file mode 100644 index 0000000..6bbb44f Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_danqing.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_ganzao.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_ganzao.webp new file mode 100644 index 0000000..9a1d768 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_ganzao.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_nianchou.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_nianchou.webp new file mode 100644 index 0000000..8fe3dbd Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_nianchou.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_shuizhuang.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_shuizhuang.webp new file mode 100644 index 0000000..de7a8fe Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_shuizhuang.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_leukorrhea_xichou.webp b/Pink/app/src/main/res/drawable/icon_leukorrhea_xichou.webp new file mode 100644 index 0000000..4b83fc1 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_leukorrhea_xichou.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_byt.webp b/Pink/app/src/main/res/drawable/icon_love_byt.webp new file mode 100644 index 0000000..61ebb4f Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_byt.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_cxby.webp b/Pink/app/src/main/res/drawable/icon_love_cxby.webp new file mode 100644 index 0000000..5fe29db Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_cxby.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_dxby.webp b/Pink/app/src/main/res/drawable/icon_love_dxby.webp new file mode 100644 index 0000000..979b65c Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_dxby.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_jjbyy.webp b/Pink/app/src/main/res/drawable/icon_love_jjbyy.webp new file mode 100644 index 0000000..08b4ff9 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_jjbyy.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_jyh.webp b/Pink/app/src/main/res/drawable/icon_love_jyh.webp new file mode 100644 index 0000000..d320137 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_jyh.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_qtyy.webp b/Pink/app/src/main/res/drawable/icon_love_qtyy.webp new file mode 100644 index 0000000..8e492d3 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_qtyy.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_twpj.webp b/Pink/app/src/main/res/drawable/icon_love_twpj.webp new file mode 100644 index 0000000..36be421 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_twpj.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_wcs.webp b/Pink/app/src/main/res/drawable/icon_love_wcs.webp new file mode 100644 index 0000000..5aa6271 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_wcs.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_wsj.webp b/Pink/app/src/main/res/drawable/icon_love_wsj.webp new file mode 100644 index 0000000..d25359c Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_wsj.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_love_ziwei.webp b/Pink/app/src/main/res/drawable/icon_love_ziwei.webp new file mode 100644 index 0000000..37bff22 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_love_ziwei.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_multiply.webp b/Pink/app/src/main/res/drawable/icon_multiply.webp new file mode 100644 index 0000000..1a2a868 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_multiply.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_000_toutong.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_000_toutong.webp new file mode 100644 index 0000000..c66d27d Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_000_toutong.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_001_shentisuantong.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_001_shentisuantong.webp new file mode 100644 index 0000000..0b0337f Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_001_shentisuantong.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_002_fuxie.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_002_fuxie.webp new file mode 100644 index 0000000..cf65873 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_002_fuxie.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_003_xuanyun.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_003_xuanyun.webp new file mode 100644 index 0000000..e0ccdc9 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_003_xuanyun.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_004_rufangzhangtong.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_004_rufangzhangtong.webp new file mode 100644 index 0000000..6d6b186 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_004_rufangzhangtong.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_005_fenci.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_005_fenci.webp new file mode 100644 index 0000000..6e94e1c Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_005_fenci.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_006_shiyubuzhen.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_006_shiyubuzhen.webp new file mode 100644 index 0000000..c96e966 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_006_shiyubuzhen.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_007_shimian.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_007_shimian.webp new file mode 100644 index 0000000..7a80b0e Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_007_shimian.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_010_futong.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_010_futong.webp new file mode 100644 index 0000000..782b41a Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_010_futong.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_011_yaosuan.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_011_yaosuan.webp new file mode 100644 index 0000000..b92fcdb Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_011_yaosuan.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_012_xiaofuzhuizhang.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_012_xiaofuzhuizhang.webp new file mode 100644 index 0000000..febfb0b Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_012_xiaofuzhuizhang.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_014_bianmi.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_014_bianmi.webp new file mode 100644 index 0000000..51ac9ac Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_014_bianmi.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_022_pibei.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_022_pibei.webp new file mode 100644 index 0000000..fc7b3f5 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_022_pibei.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_025_baidaizengduo.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_025_baidaizengduo.webp new file mode 100644 index 0000000..b6a21ff Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_025_baidaizengduo.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_032_pifuganzao.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_032_pifuganzao.webp new file mode 100644 index 0000000..c49a587 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_032_pifuganzao.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_033_chuxue.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_033_chuxue.webp new file mode 100644 index 0000000..03147cd Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_033_chuxue.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_096_hesefenmiwu.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_096_hesefenmiwu.webp new file mode 100644 index 0000000..96f104e Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_096_hesefenmiwu.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_117_shiyuwangsheng.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_117_shiyuwangsheng.webp new file mode 100644 index 0000000..d00b40a Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_117_shiyuwangsheng.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_127_youxuekuai.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_127_youxuekuai.webp new file mode 100644 index 0000000..68b0082 Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_127_youxuekuai.webp differ diff --git a/Pink/app/src/main/res/drawable/icon_zhengzhuang_192_meiyou.webp b/Pink/app/src/main/res/drawable/icon_zhengzhuang_192_meiyou.webp new file mode 100644 index 0000000..89e4bfd Binary files /dev/null and b/Pink/app/src/main/res/drawable/icon_zhengzhuang_192_meiyou.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood1.webp b/Pink/app/src/main/res/drawable/record_btn_mood1.webp new file mode 100644 index 0000000..95b0233 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood1.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood1_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood1_dy.webp new file mode 100644 index 0000000..0c4110b Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood1_dy.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood1_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood1_hover.webp new file mode 100644 index 0000000..6b135d6 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood1_hover.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood2.webp b/Pink/app/src/main/res/drawable/record_btn_mood2.webp new file mode 100644 index 0000000..86fd75c Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood2.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood2_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood2_dy.webp new file mode 100644 index 0000000..1416f5c Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood2_dy.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood2_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood2_hover.webp new file mode 100644 index 0000000..cd58a17 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood2_hover.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood3.webp b/Pink/app/src/main/res/drawable/record_btn_mood3.webp new file mode 100644 index 0000000..618b565 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood3.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood3_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood3_dy.webp new file mode 100644 index 0000000..d758348 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood3_dy.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood3_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood3_hover.webp new file mode 100644 index 0000000..4e24cc2 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood3_hover.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood4.webp b/Pink/app/src/main/res/drawable/record_btn_mood4.webp new file mode 100644 index 0000000..c63d88b Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood4.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood4_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood4_dy.webp new file mode 100644 index 0000000..140b500 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood4_dy.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood4_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood4_hover.webp new file mode 100644 index 0000000..d2a1d17 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood4_hover.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood5.webp b/Pink/app/src/main/res/drawable/record_btn_mood5.webp new file mode 100644 index 0000000..0f03e4a Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood5.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood5_1.webp b/Pink/app/src/main/res/drawable/record_btn_mood5_1.webp new file mode 100644 index 0000000..215e265 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood5_1.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood5_dy.webp b/Pink/app/src/main/res/drawable/record_btn_mood5_dy.webp new file mode 100644 index 0000000..ef216b3 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood5_dy.webp differ diff --git a/Pink/app/src/main/res/drawable/record_btn_mood5_hover.webp b/Pink/app/src/main/res/drawable/record_btn_mood5_hover.webp new file mode 100644 index 0000000..6c830f0 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_btn_mood5_hover.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_aiai.webp b/Pink/app/src/main/res/drawable/record_icon_aiai.webp new file mode 100644 index 0000000..27d7bf2 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_aiai.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_arrow.webp b/Pink/app/src/main/res/drawable/record_icon_arrow.webp new file mode 100644 index 0000000..9b71b86 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_arrow.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_baby.webp b/Pink/app/src/main/res/drawable/record_icon_baby.webp new file mode 100644 index 0000000..9fa91d8 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_baby.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_babyill.webp b/Pink/app/src/main/res/drawable/record_icon_babyill.webp new file mode 100644 index 0000000..afc4608 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_babyill.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_babysleep.webp b/Pink/app/src/main/res/drawable/record_icon_babysleep.webp new file mode 100644 index 0000000..03937c0 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_babysleep.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_baidai.webp b/Pink/app/src/main/res/drawable/record_icon_baidai.webp new file mode 100644 index 0000000..148df1e Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_baidai.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_beiyun.webp b/Pink/app/src/main/res/drawable/record_icon_beiyun.webp new file mode 100644 index 0000000..3a54f5e Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_beiyun.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_bloodglucose.webp b/Pink/app/src/main/res/drawable/record_icon_bloodglucose.webp new file mode 100644 index 0000000..0e7fef4 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_bloodglucose.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_chanjian.webp b/Pink/app/src/main/res/drawable/record_icon_chanjian.webp new file mode 100644 index 0000000..2b0b661 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_chanjian.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_color.webp b/Pink/app/src/main/res/drawable/record_icon_color.webp new file mode 100644 index 0000000..0833e37 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_color.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_dadu.webp b/Pink/app/src/main/res/drawable/record_icon_dadu.webp new file mode 100644 index 0000000..57a3966 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_dadu.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_dui.webp b/Pink/app/src/main/res/drawable/record_icon_dui.webp new file mode 100644 index 0000000..92998d5 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_dui.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_habite.webp b/Pink/app/src/main/res/drawable/record_icon_habite.webp new file mode 100644 index 0000000..621a7bb Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_habite.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_help.webp b/Pink/app/src/main/res/drawable/record_icon_help.webp new file mode 100644 index 0000000..adb2de3 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_help.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_huaiyun.webp b/Pink/app/src/main/res/drawable/record_icon_huaiyun.webp new file mode 100644 index 0000000..7ca8e60 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_huaiyun.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_ill.webp b/Pink/app/src/main/res/drawable/record_icon_ill.webp new file mode 100644 index 0000000..e5fdbae Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_ill.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_lasttime.webp b/Pink/app/src/main/res/drawable/record_icon_lasttime.webp new file mode 100644 index 0000000..97ef1e2 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_lasttime.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_line_add.webp b/Pink/app/src/main/res/drawable/record_icon_line_add.webp new file mode 100644 index 0000000..f6f1da6 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_line_add.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_liuliang.webp b/Pink/app/src/main/res/drawable/record_icon_liuliang.webp new file mode 100644 index 0000000..55ac43e Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_liuliang.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_love.webp b/Pink/app/src/main/res/drawable/record_icon_love.webp new file mode 100644 index 0000000..d41157f Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_love.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_love_no.webp b/Pink/app/src/main/res/drawable/record_icon_love_no.webp new file mode 100644 index 0000000..6b3d029 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_love_no.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_measure.webp b/Pink/app/src/main/res/drawable/record_icon_measure.webp new file mode 100644 index 0000000..3febe7f Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_measure.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_pailuan.webp b/Pink/app/src/main/res/drawable/record_icon_pailuan.webp new file mode 100644 index 0000000..ec89961 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_pailuan.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_record.webp b/Pink/app/src/main/res/drawable/record_icon_record.webp new file mode 100644 index 0000000..60deca3 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_record.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_right_arrow.webp b/Pink/app/src/main/res/drawable/record_icon_right_arrow.webp new file mode 100644 index 0000000..d225797 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_right_arrow.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_riji.webp b/Pink/app/src/main/res/drawable/record_icon_riji.webp new file mode 100644 index 0000000..331ece5 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_riji.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_shizhi.webp b/Pink/app/src/main/res/drawable/record_icon_shizhi.webp new file mode 100644 index 0000000..fed4f7c Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_shizhi.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_sleep.webp b/Pink/app/src/main/res/drawable/record_icon_sleep.webp new file mode 100644 index 0000000..9bc7618 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_sleep.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_taidong.webp b/Pink/app/src/main/res/drawable/record_icon_taidong.webp new file mode 100644 index 0000000..2730483 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_taidong.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_tiwen_no.webp b/Pink/app/src/main/res/drawable/record_icon_tiwen_no.webp new file mode 100644 index 0000000..1b1f8f4 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_tiwen_no.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_tizhong_no.webp b/Pink/app/src/main/res/drawable/record_icon_tizhong_no.webp new file mode 100644 index 0000000..005271a Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_tizhong_no.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_tongjing.webp b/Pink/app/src/main/res/drawable/record_icon_tongjing.webp new file mode 100644 index 0000000..0ae5719 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_tongjing.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_tool.webp b/Pink/app/src/main/res/drawable/record_icon_tool.webp new file mode 100644 index 0000000..5dbae6e Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_tool.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_weight.webp b/Pink/app/src/main/res/drawable/record_icon_weight.webp new file mode 100644 index 0000000..1630e95 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_weight.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_weight_baby.webp b/Pink/app/src/main/res/drawable/record_icon_weight_baby.webp new file mode 100644 index 0000000..d38f3a9 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_weight_baby.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_wendu.webp b/Pink/app/src/main/res/drawable/record_icon_wendu.webp new file mode 100644 index 0000000..d172904 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_wendu.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_xin.webp b/Pink/app/src/main/res/drawable/record_icon_xin.webp new file mode 100644 index 0000000..bfbbe4d Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_xin.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_xin_kong.webp b/Pink/app/src/main/res/drawable/record_icon_xin_kong.webp new file mode 100644 index 0000000..c5940c9 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_xin_kong.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_xinqing.webp b/Pink/app/src/main/res/drawable/record_icon_xinqing.webp new file mode 100644 index 0000000..6577db9 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_xinqing.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_yuejing.webp b/Pink/app/src/main/res/drawable/record_icon_yuejing.webp new file mode 100644 index 0000000..e6e9c4f Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_yuejing.webp differ diff --git a/Pink/app/src/main/res/drawable/record_icon_yunqiriji.webp b/Pink/app/src/main/res/drawable/record_icon_yunqiriji.webp new file mode 100644 index 0000000..dd4ca97 Binary files /dev/null and b/Pink/app/src/main/res/drawable/record_icon_yunqiriji.webp differ diff --git a/Pink/app/src/main/res/values/strings.xml b/Pink/app/src/main/res/values/strings.xml index 4865b98..a2e20f8 100644 --- a/Pink/app/src/main/res/values/strings.xml +++ b/Pink/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - PinkOV + 粉熊好韵 Home Mine \ No newline at end of file diff --git a/Pink/build.gradle.kts b/Pink/build.gradle.kts index 18318be..7b0379b 100644 --- a/Pink/build.gradle.kts +++ b/Pink/build.gradle.kts @@ -1,5 +1,8 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false + alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false + alias(libs.plugins.ksp) apply false } \ No newline at end of file diff --git a/Pink/docs/fertility-calendar-design.md b/Pink/docs/fertility-calendar-design.md new file mode 100644 index 0000000..a675521 --- /dev/null +++ b/Pink/docs/fertility-calendar-design.md @@ -0,0 +1,575 @@ +# 备孕日历 — 架构设计方案 + +> 基于美柚 APP 备孕日历功能分析,结合 Pink 项目现有架构的增量实现方案。 + +--- + +## 一、需求分析 + +### 1.1 核心功能范围(第一步:基础经期展示与设置) + +| 模块 | 功能 | 优先级 | +|------|------|--------| +| 日历展示 | 月经期(深粉)、预测经期(浅粉)、排卵期(紫)、排卵日(深紫六边形) | P0 | +| 单选交互 | 点击日期 → 下方展示打卡项目列表 | P0 | +| 月经来了 | Switch 开关,标记当日为月经首日,自动填充经期 | P0 | +| 打卡项 | 月经来了、爱爱、心情、白带等(本期先做月经来了) | P0 | +| 经期设置 | 经期长度(3-15天)、周期长度(17-31天)、末次月经日期 | P0 | +| 周期推算 | 根据公式自动计算预测经期、排卵日、排卵期 | P0 | + +### 1.2 后续迭代范围(不在本次实现) + +- 排卵试纸记录与 LH 曲线 +- 基础体温(BBT)记录与双相曲线 +- 同房记录与分布统计 +- 身体症状库打卡 +- 早孕试纸记录 +- 生活习惯 & 药物记录 +- 受孕概率计算 +- 提醒推送 +- 数据导出 + +--- + +## 二、业务算法 + +### 2.1 核心公式 + +``` +已知:末次月经首日 LMP、周期长度 C(天)、经期长度 P(天) + +1. 下次月经首日 = LMP + C +2. 排卵日 = 下次月经首日 − 14 +3. 排卵期(易孕期): + - 起始 = 排卵日 − 5 + - 结束 = 排卵日 + 1 + - 区间共 7 天 +4. 预测经期: + - 起始 = 下次月经首日 + - 结束 = 下次月经首日 + P − 1 +5. 实际经期(用户标记"月经来了"): + - 起始 = 用户标记的日期(当月月经首日) + - 结束 = 起始 + P − 1 +``` + +### 2.2 月经期与预测经期的重叠处理 + +- **实际月经期** vs **预测经期** 在日历上可能重叠或不重叠 +- **重叠日期**:以深粉色(实际月经期)优先显示 +- **仅预测经期**:浅粉色 +- **仅实际月经期**:深粉色 + +### 2.3 预测经期的自动修正 + +当用户在当月标记了「月经来了」,则: +- 本月用实际日期 + `P` 计算实际经期 +- **下个月的预测经期** 使用本次实际月经首日 + `C` 重新推算 +- 现有的下月预测被覆盖 + +--- + +## 三、技术架构 + +### 3.1 整体分层 + +``` +┌──────────────────────────────────────────────────────┐ +│ UI Layer (Compose) │ +│ ┌──────────────┐ ┌────────────┐ ┌──────────────┐ │ +│ │ RecordsPage │ │MinePage │ │PeriodSettings│ │ +│ │ + DayContent │ │+ 经期设置入口│ │ Dialog │ │ +│ │ + CheckInPanel│ │ │ │ │ │ +│ └──────┬───────┘ └─────┬──────┘ └──────┬───────┘ │ +├─────────┼────────────────┼─────────────────┼─────────┤ +│ ViewModel Layer │ │ │ +│ ┌──────────────┐ ┌─────┴─────────────────┴───────┐ │ +│ │RecordsViewModel│ │ PeriodSettingsViewModel │ │ +│ │ - calendar │ │ - settings state │ │ +│ │ - selection │ │ - save/load │ │ +│ │ - period calc │ │ │ │ +│ │ - daily recs │ │ │ │ +│ └──────┬───────┘ └─────────────┬─────────────────┘ │ +├─────────┼────────────────────────┼───────────────────┤ +│ Data Layer (Room) │ │ +│ ┌──────┴───────┐ ┌────────────┴─────────────────┐ │ +│ │ DailyRecord │ │ PeriodSettings │ │ +│ │ Dao │ │ Dao │ │ +│ └──────────────┘ └──────────────────────────────┘ │ +│ ┌─────────────────────────────────────────────────┐ │ +│ │ CycleCalculator (pure logic, no DB) │ │ +│ │ - 推算排卵日、预测经期、排卵期 │ │ +│ └─────────────────────────────────────────────────┘ │ +└──────────────────────────────────────────────────────┘ +``` + +### 3.2 Room 数据库设计 + +#### 3.2.1 `PeriodSettings` — 经期设置(单行表) + +```kotlin +@Entity(tableName = "period_settings") +data class PeriodSettings( + @PrimaryKey val id: Int = 1, // 固定为 1,单行 + @ColumnInfo(name = "period_length") // 经期长度 (天), 默认 5 + val periodLength: Int = 5, + @ColumnInfo(name = "cycle_length") // 周期长度 (天), 默认 28 + val cycleLength: Int = 28, + @ColumnInfo(name = "last_period_date") // 最近一次月经首日 (epoch day) + val lastPeriodDate: Long = 0L, // LocalDate.toEpochDay() +) +``` + +#### 3.2.2 `DailyRecord` — 每日打卡记录 + +```kotlin +@Entity( + tableName = "daily_records", + indices = [Index(value = ["date"], unique = true)] +) +data class DailyRecord( + @PrimaryKey(autoGenerate = true) val id: Long = 0, + @ColumnInfo(name = "date") + val date: Long, // LocalDate.toEpochDay() + @ColumnInfo(name = "is_period_start") + val isPeriodStart: Boolean = false, // 月经来了 (是/否) + @ColumnInfo(name = "had_sex") + val hadSex: Boolean = false, // 爱爱 + @ColumnInfo(name = "mood") + val mood: String? = null, // 心情标签 + @ColumnInfo(name = "discharge") // 白带 + val discharge: String? = null, + @ColumnInfo(name = "note") + val note: String? = null, // 备注 +) +``` + +#### 3.2.3 DAO + +```kotlin +@Dao +interface PeriodSettingsDao { + @Query("SELECT * FROM period_settings WHERE id = 1") + fun getSettings(): Flow + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun upsertSettings(settings: PeriodSettings) +} + +@Dao +interface DailyRecordDao { + @Query("SELECT * FROM daily_records WHERE date = :date") + fun getRecord(date: Long): Flow + + @Query("SELECT * FROM daily_records WHERE date BETWEEN :start AND :end") + fun getRecordsInRange(start: Long, end: Long): Flow> + + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun upsert(record: DailyRecord) + + @Delete + suspend fun delete(record: DailyRecord) +} +``` + +#### 3.2.4 数据库迁移 + +```kotlin +@Database( + entities = [ScanRecord::class, PeriodSettings::class, DailyRecord::class], + version = 2, + exportSchema = false +) +abstract class AppDatabase : RoomDatabase() { + abstract fun scanRecordDao(): ScanRecordDao + abstract fun periodSettingsDao(): PeriodSettingsDao + abstract fun dailyRecordDao(): DailyRecordDao + // ... +} +``` + +由于现有 DB version=1 已有用户数据,需要提供 migration 1→2: + +```kotlin +val MIGRATION_1_2 = object : Migration(1, 2) { + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL(""" + CREATE TABLE IF NOT EXISTS `period_settings` ( + `id` INTEGER NOT NULL, + `period_length` INTEGER NOT NULL DEFAULT 5, + `cycle_length` INTEGER NOT NULL DEFAULT 28, + `last_period_date` INTEGER NOT NULL DEFAULT 0, + PRIMARY KEY(`id`) + ) + """) + db.execSQL(""" + CREATE TABLE IF NOT EXISTS `daily_records` ( + `id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, + `date` INTEGER NOT NULL, + `is_period_start` INTEGER NOT NULL DEFAULT 0, + `had_sex` INTEGER NOT NULL DEFAULT 0, + `mood` TEXT, + `discharge` TEXT, + `note` TEXT + ) + """) + db.execSQL("CREATE UNIQUE INDEX IF NOT EXISTS `index_daily_records_date` ON `daily_records` (`date`)") + } +} +``` + +### 3.3 周期计算引擎(纯 Kotlin,无 Android 依赖) + +```kotlin +// data/model/CycleCalculator.kt + +data class CycleInfo( + val actualPeriodRange: Set, // 实际月经期 + val predictedPeriodRange: Set, // 预测经期 + val ovulationDay: LocalDate?, // 排卵日 + val ovulationRange: Set, // 排卵期(易孕期) +) + +object CycleCalculator { + + /** + * @param yearMonth 要计算的月份 + * @param settings 经期设置 + * @param actualPeriodStarts 用户标记的所有"月经来了"日期集合 + */ + fun calculate( + yearMonth: YearMonth, + settings: PeriodSettings, + actualPeriodStarts: Set, + ): CycleInfo { + // 1. 推算下月预测经期 + // 2. 根据实际标记修正本月经期 + // 3. 计算排卵日 & 排卵期 + // ... + } +} +``` + +### 3.4 日历单元格渲染逻辑 + +```kotlin +enum class DayPhase { + NONE, // 无特殊状态 + ACTUAL_PERIOD, // 月经期 — 深粉色背景 + PREDICTED_PERIOD, // 预测经期 — 浅粉色背景 + OVULATION, // 排卵期 — 紫色背景 + OVULATION_DAY, // 排卵日 — 紫色背景 + 六边形标记 +} +``` + +自定义 `dayContent` 替换库默认的 `DefaultDay`: + +```kotlin +@Composable +fun FertilityDayContent(state: DayState, cycleInfo: CycleInfo) { + val date = state.date + val phase = getPhaseForDate(date, cycleInfo) + + Box( + modifier = Modifier + .aspectRatio(1f) + .padding(2.dp) + .background( + color = phase.backgroundColor(), + shape = RoundedCornerShape(4.dp) + ) + .clickable { state.selectionState.onDateSelected(date) }, + contentAlignment = Alignment.Center + ) { + Text(text = date.dayOfMonth.toString()) + + // 排卵日六边形标记 + if (phase == DayPhase.OVULATION_DAY) { + HexagonMarker( + modifier = Modifier.align(Alignment.BottomEnd).size(12.dp), + color = Color(0xFF7B1FA2) // 深紫 + ) + } + } +} +``` + +### 3.5 颜色定义 + +```kotlin +object FertilityColors { + val actualPeriod = Color(0xFFE91E63) // 深粉 — 实际月经期 + val predictedPeriod = Color(0xFFFFCDD2) // 浅粉 — 预测经期 + val ovulation = Color(0xFFCE93D8) // 紫色 — 排卵期 + val ovulationDayMarker = Color(0xFF7B1FA2) // 深紫 — 排卵日六边形 + val todayBorder = Color(0xFF2196F3) // 今日蓝色边框 + val selectedBorder = Color(0xFF1976D2) // 选中蓝色边框 +} +``` + +--- + +## 四、UI 设计 + +### 4.1 RecordsPage 结构调整 + +``` +┌─────────────────────────────┐ +│ 月 份 标 题 │ ← DefaultMonthHeader (保持) +├─┬─┬─┬─┬─┬─┬─┬─────────────┤ +│日│一│二│三│四│五│六│ 星期栏 │ +├─┼─┼─┼─┼─┼─┼─┼─┼───────────┤ +│ │ │ │ ●│ ■│ ■│ ■│ ← 实际经期 (深粉) +│ ■│ ■│ ■│ ■│ ■│ │ │ ← 预测经期 (浅粉) +│ ▓│ ▓│ ▓│ ▓│ ▓│ ▓│ ▓│ ← 排卵期 (紫) +│ │ │ │ │ │ │ │ +│ │ │ │ │ │◆│ │ ← 排卵日六边形 +├─────────────────────────────┤ +│ HorizontalDivider │ +├─────────────────────────────┤ +│ 选中日期: 2026-07-16 │ +│ ┌─────────────────────┐ │ +│ │ 月经来了 [Switch] │ │ +│ │ 爱爱 [ - ] │ │ ← 后续迭代 +│ │ 心情 [ - ] │ │ +│ │ 白带 [ - ] │ │ +│ └─────────────────────┘ │ +└─────────────────────────────┘ +``` + +### 4.2 RecordPage 核心逻辑伪代码 + +```kotlin +@Composable +fun RecordsPage(viewModel: RecordsViewModel = viewModel()) { + val calendarState = rememberSelectableCalendarState( + initialSelectionMode = SelectionMode.Single + ) + val selectedDate by derivedStateOf { calendarState.selectionState.selection.firstOrNull() } + val cycleInfo by viewModel.cycleInfoForMonth(calendarState.monthState.currentMonth).collectAsState() + val settings by viewModel.settings.collectAsState() + + Scaffold { + Column { + SelectableCalendar( + calendarState = calendarState, + dayContent = { dayState -> + FertilityDayContent(dayState, cycleInfo) + }, + // ... + ) + HorizontalDivider(...) + CheckInPanel(selectedDate, viewModel) + } + } +} +``` + +### 4.3 CheckInPanel + +```kotlin +@Composable +fun CheckInPanel(selectedDate: LocalDate?, viewModel: RecordsViewModel) { + if (selectedDate == null) { + // 提示文字 + return + } + val record by viewModel.getRecord(selectedDate).collectAsState(initial = null) + + Column(Modifier.padding(16.dp)) { + // 月经来了 — Switch + Row { + Text("月经来了") + Switch( + checked = record?.isPeriodStart ?: false, + onCheckedChange = { checked -> + viewModel.setPeriodStart(selectedDate, checked) + } + ) + } + // 后续迭代再加:爱爱、心情、白带... + } +} +``` + +### 4.4 MinePage — 添加经期设置入口 + +在"设置"上方插入一行: + +```kotlin +// 在 MenuItemRow(icon = Icons.Default.Settings, ...) 之前添加: +MenuItemRow( + icon = Icons.Default.CalendarMonth, // 或自定义 icon + title = "经期设置", + onClick = { showPeriodSettings = true } +) +``` + +### 4.5 PeriodSettingsDialog + +```kotlin +@Composable +fun PeriodSettingsDialog( + currentSettings: PeriodSettings, + onDismiss: () -> Unit, + onSave: (PeriodSettings) -> Unit +) { + var periodLength by remember { mutableIntStateOf(currentSettings.periodLength) } + var cycleLength by remember { mutableIntStateOf(currentSettings.cycleLength) } + var lastPeriodDate by remember { mutableStateOf(currentSettings.lastPeriodDate) } + var showDatePicker by remember { mutableStateOf(false) } + + AlertDialog(...) { + Column { + // 经期长度 — WheelPicker (3-15) + Text("设置您的月经大概维持几天?") + WheelPicker( + items = (3..15).toList(), + selected = periodLength, + onSelected = { periodLength = it } + ) + + // 周期长度 — WheelPicker (17-31) + Text("两次月经开始日大概间隔多久?") + WheelPicker( + items = (17..31).toList(), + selected = cycleLength, + onSelected = { cycleLength = it } + ) + + // 最近一次月经开始时间 — DatePicker + Text("最近一次月经开始时间") + TextButton(onClick = { showDatePicker = true }) { + Text(lastPeriodDate.toLocalDate().format(...)) + } + + // 确认/取消 + } + } + + if (showDatePicker) { + // DatePickerDialog + } +} +``` + +--- + +## 五、ViewModel 设计 + +### 5.1 RecordsViewModel + +```kotlin +class RecordsViewModel( + private val settingsDao: PeriodSettingsDao, + private val recordDao: DailyRecordDao, +) : ViewModel() { + + val settings: StateFlow + private val actualPeriodStarts: StateFlow> + + fun cycleInfoForMonth(yearMonth: YearMonth): Flow + fun getRecord(date: LocalDate): Flow + fun setPeriodStart(date: LocalDate, isStart: Boolean) + + // 重新计算 —— 当用户修改 periodStart 后触发 + private fun recalculate() +} +``` + +### 5.2 ViewModel 关键逻辑:setPeriodStart + +```kotlin +fun setPeriodStart(date: LocalDate, isStart: Boolean) { + viewModelScope.launch { + val record = recordDao.getRecordOnce(date) ?: DailyRecord(date = date.toEpochDay()) + recordDao.upsert(record.copy(isPeriodStart = isStart)) + + // 如果是月经来了,还需要清除本月之前的 periodStart 标记 + // (一个月只能有一个月经首日) + if (isStart) { + clearOtherPeriodStartsInMonth(date) + } + + // 重新计算触发 UI 更新 + _actualPeriodStarts.update { ... } + } +} +``` + +--- + +## 六、数据流 + +``` +用户设置经期参数 + │ + ▼ +PeriodSettings ──→ CycleCalculator.calculate() + │ │ + ▼ ▼ +用户标记"月经来了" ◇──→ CycleInfo (月经期/预测经期/排卵日/排卵期) + │ │ + ▼ ▼ +DailyRecord FertilityDayContent (日历格子渲染) +``` + +关键点: +- **预测数据不存储**,由 CycleCalculator 每次实时计算 +- 实际月经期 = 用户标记的 `isPeriodStart` 日期 + settings.periodLength +- 用户修改「经期设置」或「月经来了」→ 立即触发重算 → UI 自动更新 + +--- + +## 七、文件清单(本次需新增/修改) + +### 新增文件 + +| 路径 | 说明 | +|------|------| +| `data/entity/PeriodSettings.kt` | 经期设置 Room Entity | +| `data/entity/DailyRecord.kt` | 每日打卡记录 Room Entity | +| `data/dao/PeriodSettingsDao.kt` | 经期设置 DAO | +| `data/dao/DailyRecordDao.kt` | 每日记录 DAO | +| `data/model/CycleCalculator.kt` | 周期计算引擎,纯 Kotlin | +| `data/model/CycleInfo.kt` | 周期信息数据类 | +| `ui/page/RecordsViewModel.kt` | 日历页 ViewModel | +| `ui/component/FertilityDayContent.kt` | 自定义日历日单元格 | +| `ui/component/CheckInPanel.kt` | 打卡面板 | +| `ui/component/PeriodSettingsDialog.kt` | 经期设置弹窗 | +| `ui/component/WheelPicker.kt` | 滚轮选择器(经期/周期天数选择) | +| `ui/component/HexagonMarker.kt` | 六边形标记组件 | +| `ui/theme/FertilityColors.kt` | 备孕日历颜色常量 | + +### 修改文件 + +| 路径 | 改动 | +|------|------| +| `data/database/AppDatabase.kt` | 新增 entities、DAOs、migration 1→2 | +| `ui/page/RecordsPage.kt` | 完全重写:Single 选择 + 自定义 dayContent + CheckInPanel | +| `ui/page/MinePage.kt` | 添加"经期设置"入口 + 弹窗状态 | +| `PinkApplication.kt` | 无需改动(database 实例已在) | + +--- + +## 八、关于 ComposeCalendar 库的关键结论 + +1. **自定义 dayContent**:`SelectableCalendar` 支持 `dayContent: @Composable BoxScope.(DayState) -> Unit` 参数,可以完全替换默认的单元格渲染,实现我们需要的彩色背景 + 六边形标记 + +2. **不依赖库的选中机制来展示经期/排卵期**:库的 `DynamicSelectionState.selection` 用于用户交互(单选日期),而经期/排卵期的「自动多选」显示完全在自定义 `dayContent` 中通过判断日期位置来实现 + +3. **M2/M3 兼容**:库内部使用 M2 组件,但我们通过自定义 `dayContent` 绕过了库的 `DefaultDay`,可以在其中使用 M3 颜色体系 + +4. **MonthState 可用**:通过 `calendarState.monthState.currentMonth` 可以获知当前展示的月份,用于计算该月的周期信息 + +--- + +## 九、实施顺序(推荐) + +1. **Room 层**:新增 Entity + DAO + Migration +2. **CycleCalculator**:纯逻辑,可先写单元测试 +3. **FertilityDayContent + HexagonMarker**:自定义日历格子 +4. **RecordsViewModel**:连接数据与 UI +5. **RecordsPage 改造**:Single 选择 + 自定义 dayContent + CheckInPanel +6. **WheelPicker**:通用滚轮组件 +7. **PeriodSettingsDialog**:经期设置弹窗 +8. **MinePage 添加入口**:一行导航 diff --git a/Pink/docs/我的零碎.md b/Pink/docs/我的零碎.md new file mode 100644 index 0000000..1024f4d --- /dev/null +++ b/Pink/docs/我的零碎.md @@ -0,0 +1,32 @@ +项目下的 美柚APP备孕日历功能列表.md 和 经期设置和计算.md 是美柚这个产品跟备孕日历设置相关的内容(不一定完全准确)。 + 我想在pink项目里面,逐步实现大部分相关的功能。 +首先,我想实现经期设置 最基础的功能,在日历上展示:月经期、预测经期、排卵期、排卵日 +我们的日历需要相应的改造,能够呈现月经期、预测经期、排卵期、排卵日的状态。 + +预测经期:通过 淡粉色背景色填充日历的格子, 在日历上自动多选连续的预测经期。 +排卵期: 通过 紫色背景色填充日历的格子, 在日历上自动多选连续的排卵期。 +排卵日: 使用 深紫色的 小实心6变形,在日历中被预测的排卵日那个格子右下角花上这个6边形。 +月经期:当月日历中,实际的月经期,可能跟预测经期重叠,也可能不重叠。如果重叠或者部分重叠。重叠的格子,则显示深粉色的背景色(月经期的背景色)。 +目前你选择的日历是Period多选方式,对照美柚的UI ,可以看到这里应该采用单选,选中某个日期,则在当前界面日历的下面呈现可以打卡的项目列表(月经来了,爱爱、心情、白带等等)。 +月经来了:这是一个 是/否 这样的一个switch开关,用户点击了选择了**是**,则表示这一天是当月月经开始的第一天,根据用户设置的**经期长度**,自动通过 深粉色背景色填充日历的格子, 在日历上自动多选连续的实际的经期。 + 用户只要重新设置了**月经来了**,这自动重算当前月日历视图上的实际的月经期。 + + +在MinePage添加一行导航,放在“设置”上面,点击则弹出 经期设置 的界面(使用dialog方式),设置: +经期长度:通过轮播方式选择经期的天数,3,4,5,6,7,8....15 --- 设置您的月经大概维持几天? +周期长度:通过轮播方式选择周期的天数,17,18,......31 --- 两次月经开始日大概间隔多久? +最近一次月经开始时间:这里通过弹出一个日期选择? +有了以上3个数据,就可以根据公式,算出预测经期、排卵期、排卵日! + +### 标准计算公式 +1. 先算「下次月经来潮日」 + 本次月经首日 + 平均月经周期天数 = 下次月经首日 +2. 排卵日 = 下次月经首日 − 14天 +示例: +本次月经7.1,周期30天 +下次月经:7.1+30=7.31 +排卵日=7.31−14=7.17 + +--- + +你需要研究一下,怎么在本地的Room数据库存储,经期数据和关联的打卡数据。仔细分析美柚的两个文件、结合你对类似产品功能的设计能力,给出你的业务流程和建议,技术实现方案! 你把你的设计内容写成文档到docs目录 \ No newline at end of file diff --git a/Pink/gradle.properties b/Pink/gradle.properties index 34c5e9e..7c7f953 100644 --- a/Pink/gradle.properties +++ b/Pink/gradle.properties @@ -12,4 +12,6 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 # https://developer.android.com/r/tools/gradle-multi-project-decoupled-projects # org.gradle.parallel=true # Kotlin code style for this project: "official" or "obsolete": -kotlin.code.style=official \ No newline at end of file +kotlin.code.style=official +# Allow KSP to add Kotlin sources with built-in Kotlin support +android.disallowKotlinSourceSets=false \ No newline at end of file diff --git a/Pink/gradle/libs.versions.toml b/Pink/gradle/libs.versions.toml index f6339d8..d275e91 100644 --- a/Pink/gradle/libs.versions.toml +++ b/Pink/gradle/libs.versions.toml @@ -10,6 +10,10 @@ kotlin = "2.2.10" composeBom = "2025.12.00" camerax = "1.4.1" accompanist = "0.36.0" +room = "2.7.1" +ksp = "2.2.10-2.0.2" +snapper = "0.3.0" +timber = "5.0.1" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -29,12 +33,23 @@ androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui- androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } androidx-compose-material3-adaptive-navigation-suite = { group = "androidx.compose.material3", name = "material3-adaptive-navigation-suite" } +androidx-compose-material-icons-core = { group = "androidx.compose.material", name = "material-icons-core" } androidx-camera-core = { group = "androidx.camera", name = "camera-core", version.ref = "camerax" } androidx-camera-camera2 = { group = "androidx.camera", name = "camera-camera2", version.ref = "camerax" } androidx-camera-lifecycle = { group = "androidx.camera", name = "camera-lifecycle", version.ref = "camerax" } accompanist-permissions = { group = "com.google.accompanist", name = "accompanist-permissions", version.ref = "accompanist" } +androidx-room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } +androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } +androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } +androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" } +androidx-compose-material = { group = "androidx.compose.material", name = "material" } +snapper = { group = "dev.chrisbanes.snapper", name = "snapper", version.ref = "snapper" } +timber = { group = "com.jakewharton.timber", name = "timber", version.ref = "timber" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } +android-library = { id = "com.android.library", version.ref = "agp" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } diff --git a/Pink/library/.gitignore b/Pink/library/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/Pink/library/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/Pink/library/api/library.api b/Pink/library/api/library.api new file mode 100644 index 0000000..9c12ac3 --- /dev/null +++ b/Pink/library/api/library.api @@ -0,0 +1,256 @@ +public final class io/github/boguszpawlowski/composecalendar/BuildConfig { + public static final field BUILD_TYPE Ljava/lang/String; + public static final field DEBUG Z + public static final field LIBRARY_PACKAGE_NAME Ljava/lang/String; + public fun ()V +} + +public final class io/github/boguszpawlowski/composecalendar/CalendarKt { + public static final fun Calendar (Lio/github/boguszpawlowski/composecalendar/CalendarState;Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZZZLkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final fun SelectableCalendar (Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZZZLio/github/boguszpawlowski/composecalendar/CalendarState;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final fun StaticCalendar (Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZZZLio/github/boguszpawlowski/composecalendar/CalendarState;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V + public static final fun rememberCalendarState (Ljava/time/YearMonth;Ljava/time/YearMonth;Ljava/time/YearMonth;Lio/github/boguszpawlowski/composecalendar/header/MonthState;Landroidx/compose/runtime/Composer;II)Lio/github/boguszpawlowski/composecalendar/CalendarState; + public static final fun rememberSelectableCalendarState (Ljava/time/YearMonth;Ljava/time/YearMonth;Ljava/time/YearMonth;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;Lkotlin/jvm/functions/Function1;Lio/github/boguszpawlowski/composecalendar/header/MonthState;Lio/github/boguszpawlowski/composecalendar/selection/DynamicSelectionState;Landroidx/compose/runtime/Composer;II)Lio/github/boguszpawlowski/composecalendar/CalendarState; +} + +public final class io/github/boguszpawlowski/composecalendar/CalendarState { + public static final field $stable I + public fun (Lio/github/boguszpawlowski/composecalendar/header/MonthState;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;)V + public final fun getMonthState ()Lio/github/boguszpawlowski/composecalendar/header/MonthState; + public final fun getSelectionState ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionState; +} + +public final class io/github/boguszpawlowski/composecalendar/ComposableSingletons$CalendarKt { + public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/ComposableSingletons$CalendarKt; + public static field lambda-1 Lkotlin/jvm/functions/Function4; + public static field lambda-10 Lkotlin/jvm/functions/Function4; + public static field lambda-11 Lkotlin/jvm/functions/Function4; + public static field lambda-12 Lkotlin/jvm/functions/Function3; + public static field lambda-2 Lkotlin/jvm/functions/Function4; + public static field lambda-3 Lkotlin/jvm/functions/Function4; + public static field lambda-4 Lkotlin/jvm/functions/Function3; + public static field lambda-5 Lkotlin/jvm/functions/Function4; + public static field lambda-6 Lkotlin/jvm/functions/Function4; + public static field lambda-7 Lkotlin/jvm/functions/Function4; + public static field lambda-8 Lkotlin/jvm/functions/Function3; + public static field lambda-9 Lkotlin/jvm/functions/Function4; + public fun ()V + public final fun getLambda-1$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-10$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-11$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-12$library_release ()Lkotlin/jvm/functions/Function3; + public final fun getLambda-2$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-3$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-4$library_release ()Lkotlin/jvm/functions/Function3; + public final fun getLambda-5$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-6$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-7$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-8$library_release ()Lkotlin/jvm/functions/Function3; + public final fun getLambda-9$library_release ()Lkotlin/jvm/functions/Function4; +} + +public final class io/github/boguszpawlowski/composecalendar/ComposableSingletons$WeekCalendarKt { + public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/ComposableSingletons$WeekCalendarKt; + public static field lambda-1 Lkotlin/jvm/functions/Function4; + public static field lambda-2 Lkotlin/jvm/functions/Function4; + public static field lambda-3 Lkotlin/jvm/functions/Function4; + public static field lambda-4 Lkotlin/jvm/functions/Function4; + public static field lambda-5 Lkotlin/jvm/functions/Function4; + public static field lambda-6 Lkotlin/jvm/functions/Function4; + public static field lambda-7 Lkotlin/jvm/functions/Function4; + public static field lambda-8 Lkotlin/jvm/functions/Function4; + public static field lambda-9 Lkotlin/jvm/functions/Function4; + public fun ()V + public final fun getLambda-1$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-2$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-3$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-4$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-5$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-6$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-7$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-8$library_release ()Lkotlin/jvm/functions/Function4; + public final fun getLambda-9$library_release ()Lkotlin/jvm/functions/Function4; +} + +public final class io/github/boguszpawlowski/composecalendar/WeekCalendarKt { + public static final fun SelectableWeekCalendar (Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZZLio/github/boguszpawlowski/composecalendar/WeekCalendarState;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V + public static final fun StaticWeekCalendar (Landroidx/compose/ui/Modifier;Ljava/time/DayOfWeek;Ljava/time/LocalDate;ZLio/github/boguszpawlowski/composecalendar/WeekCalendarState;ZLkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V + public static final fun WeekCalendar (Lio/github/boguszpawlowski/composecalendar/WeekCalendarState;Landroidx/compose/ui/Modifier;Ljava/time/LocalDate;Ljava/time/DayOfWeek;ZZLkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V + public static final fun rememberSelectableWeekCalendarState (Ljava/time/DayOfWeek;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;Lkotlin/jvm/functions/Function1;Lio/github/boguszpawlowski/composecalendar/header/WeekState;Lio/github/boguszpawlowski/composecalendar/selection/DynamicSelectionState;Landroidx/compose/runtime/Composer;II)Lio/github/boguszpawlowski/composecalendar/WeekCalendarState; + public static final fun rememberWeekCalendarState (Ljava/time/DayOfWeek;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/header/WeekState;Landroidx/compose/runtime/Composer;II)Lio/github/boguszpawlowski/composecalendar/WeekCalendarState; +} + +public final class io/github/boguszpawlowski/composecalendar/WeekCalendarState { + public static final field $stable I + public fun (Lio/github/boguszpawlowski/composecalendar/header/WeekState;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;)V + public final fun getSelectionState ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionState; + public final fun getWeekState ()Lio/github/boguszpawlowski/composecalendar/header/WeekState; +} + +public abstract interface class io/github/boguszpawlowski/composecalendar/day/Day { + public abstract fun getDate ()Ljava/time/LocalDate; + public abstract fun isCurrentDay ()Z + public abstract fun isFromCurrentMonth ()Z +} + +public final class io/github/boguszpawlowski/composecalendar/day/DayState : io/github/boguszpawlowski/composecalendar/day/Day { + public static final field $stable I + public fun (Lio/github/boguszpawlowski/composecalendar/day/Day;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;)V + public final fun component2 ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionState; + public final fun copy (Lio/github/boguszpawlowski/composecalendar/day/Day;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;)Lio/github/boguszpawlowski/composecalendar/day/DayState; + public static synthetic fun copy$default (Lio/github/boguszpawlowski/composecalendar/day/DayState;Lio/github/boguszpawlowski/composecalendar/day/Day;Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;ILjava/lang/Object;)Lio/github/boguszpawlowski/composecalendar/day/DayState; + public fun equals (Ljava/lang/Object;)Z + public fun getDate ()Ljava/time/LocalDate; + public final fun getSelectionState ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionState; + public fun hashCode ()I + public fun isCurrentDay ()Z + public fun isFromCurrentMonth ()Z + public fun toString ()Ljava/lang/String; +} + +public final class io/github/boguszpawlowski/composecalendar/day/DefaultDayKt { + public static final fun DefaultDay-t6yy7ic (Lio/github/boguszpawlowski/composecalendar/day/DayState;Landroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V +} + +public final class io/github/boguszpawlowski/composecalendar/header/ComposableSingletons$DefaultMonthHeaderKt { + public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/header/ComposableSingletons$DefaultMonthHeaderKt; + public static field lambda-1 Lkotlin/jvm/functions/Function2; + public static field lambda-2 Lkotlin/jvm/functions/Function2; + public fun ()V + public final fun getLambda-1$library_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda-2$library_release ()Lkotlin/jvm/functions/Function2; +} + +public final class io/github/boguszpawlowski/composecalendar/header/ComposableSingletons$DefaultWeekHeaderKt { + public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/header/ComposableSingletons$DefaultWeekHeaderKt; + public static field lambda-1 Lkotlin/jvm/functions/Function2; + public static field lambda-2 Lkotlin/jvm/functions/Function2; + public fun ()V + public final fun getLambda-1$library_release ()Lkotlin/jvm/functions/Function2; + public final fun getLambda-2$library_release ()Lkotlin/jvm/functions/Function2; +} + +public final class io/github/boguszpawlowski/composecalendar/header/DefaultMonthHeaderKt { + public static final fun DefaultMonthHeader (Lio/github/boguszpawlowski/composecalendar/header/MonthState;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +} + +public final class io/github/boguszpawlowski/composecalendar/header/DefaultWeekHeaderKt { + public static final fun DefaultWeekHeader (Lio/github/boguszpawlowski/composecalendar/header/WeekState;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +} + +public abstract interface class io/github/boguszpawlowski/composecalendar/header/MonthState { + public static final field Companion Lio/github/boguszpawlowski/composecalendar/header/MonthState$Companion; + public abstract fun getCurrentMonth ()Ljava/time/YearMonth; + public abstract fun getMaxMonth ()Ljava/time/YearMonth; + public abstract fun getMinMonth ()Ljava/time/YearMonth; + public abstract fun setCurrentMonth (Ljava/time/YearMonth;)V + public abstract fun setMaxMonth (Ljava/time/YearMonth;)V + public abstract fun setMinMonth (Ljava/time/YearMonth;)V +} + +public final class io/github/boguszpawlowski/composecalendar/header/MonthState$Companion { + public final fun Saver ()Landroidx/compose/runtime/saveable/Saver; +} + +public final class io/github/boguszpawlowski/composecalendar/header/MonthStateKt { + public static final fun MonthState (Ljava/time/YearMonth;Ljava/time/YearMonth;Ljava/time/YearMonth;)Lio/github/boguszpawlowski/composecalendar/header/MonthState; +} + +public abstract interface class io/github/boguszpawlowski/composecalendar/header/WeekState { + public static final field Companion Lio/github/boguszpawlowski/composecalendar/header/WeekState$Companion; + public abstract fun getCurrentWeek ()Lio/github/boguszpawlowski/composecalendar/week/Week; + public abstract fun getMaxWeek ()Lio/github/boguszpawlowski/composecalendar/week/Week; + public abstract fun getMinWeek ()Lio/github/boguszpawlowski/composecalendar/week/Week; + public abstract fun setCurrentWeek (Lio/github/boguszpawlowski/composecalendar/week/Week;)V + public abstract fun setMaxWeek (Lio/github/boguszpawlowski/composecalendar/week/Week;)V + public abstract fun setMinWeek (Lio/github/boguszpawlowski/composecalendar/week/Week;)V +} + +public final class io/github/boguszpawlowski/composecalendar/header/WeekState$Companion { + public final fun Saver ()Landroidx/compose/runtime/saveable/Saver; +} + +public final class io/github/boguszpawlowski/composecalendar/header/WeekStateKt { + public static final fun WeekState (Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;)Lio/github/boguszpawlowski/composecalendar/header/WeekState; +} + +public final class io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler { + public static final field $stable I + public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler; + public final fun calculateNewSelection (Ljava/time/LocalDate;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;)Ljava/util/List; +} + +public final class io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionState : io/github/boguszpawlowski/composecalendar/selection/SelectionState { + public static final field $stable I + public fun (Lkotlin/jvm/functions/Function1;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;)V + public synthetic fun (Lkotlin/jvm/functions/Function1;Ljava/util/List;Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public final fun getSelection ()Ljava/util/List; + public final fun getSelectionMode ()Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode; + public fun isDateSelected (Ljava/time/LocalDate;)Z + public fun onDateSelected (Ljava/time/LocalDate;)V + public final fun setSelection (Ljava/util/List;)V + public final fun setSelectionMode (Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode;)V +} + +public final class io/github/boguszpawlowski/composecalendar/selection/EmptySelectionState : io/github/boguszpawlowski/composecalendar/selection/SelectionState { + public static final field $stable I + public static final field INSTANCE Lio/github/boguszpawlowski/composecalendar/selection/EmptySelectionState; + public fun isDateSelected (Ljava/time/LocalDate;)Z + public fun onDateSelected (Ljava/time/LocalDate;)V +} + +public final class io/github/boguszpawlowski/composecalendar/selection/SelectionMode : java/lang/Enum { + public static final field Multiple Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode; + public static final field None Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode; + public static final field Period Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode; + public static final field Single Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode; + public static fun values ()[Lio/github/boguszpawlowski/composecalendar/selection/SelectionMode; +} + +public abstract interface class io/github/boguszpawlowski/composecalendar/selection/SelectionState { + public abstract fun isDateSelected (Ljava/time/LocalDate;)Z + public abstract fun onDateSelected (Ljava/time/LocalDate;)V +} + +public final class io/github/boguszpawlowski/composecalendar/selection/SelectionState$DefaultImpls { + public static fun isDateSelected (Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;Ljava/time/LocalDate;)Z + public static fun onDateSelected (Lio/github/boguszpawlowski/composecalendar/selection/SelectionState;Ljava/time/LocalDate;)V +} + +public final class io/github/boguszpawlowski/composecalendar/week/DefaultWeekHeaderKt { + public static final fun DefaultDaysOfWeekHeader (Ljava/util/List;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V + public static final fun DefaultWeekHeader (Ljava/util/List;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +} + +public final class io/github/boguszpawlowski/composecalendar/week/Week { + public static final field $stable I + public static final field Companion Lio/github/boguszpawlowski/composecalendar/week/Week$Companion; + public fun (Ljava/util/List;)V + public final fun compareTo (Lio/github/boguszpawlowski/composecalendar/week/Week;)I + public final fun component1 ()Ljava/util/List; + public final fun copy (Ljava/util/List;)Lio/github/boguszpawlowski/composecalendar/week/Week; + public static synthetic fun copy$default (Lio/github/boguszpawlowski/composecalendar/week/Week;Ljava/util/List;ILjava/lang/Object;)Lio/github/boguszpawlowski/composecalendar/week/Week; + public final fun dec ()Lio/github/boguszpawlowski/composecalendar/week/Week; + public fun equals (Ljava/lang/Object;)Z + public final fun getDays ()Ljava/util/List; + public final fun getEnd ()Ljava/time/LocalDate; + public final fun getStart ()Ljava/time/LocalDate; + public final fun getYearMonth ()Ljava/time/YearMonth; + public fun hashCode ()I + public final fun inc ()Lio/github/boguszpawlowski/composecalendar/week/Week; + public final fun minusWeeks (J)Lio/github/boguszpawlowski/composecalendar/week/Week; + public final fun plusWeeks (J)Lio/github/boguszpawlowski/composecalendar/week/Week; + public fun toString ()Ljava/lang/String; +} + +public final class io/github/boguszpawlowski/composecalendar/week/Week$Companion { + public final fun now (Ljava/time/DayOfWeek;)Lio/github/boguszpawlowski/composecalendar/week/Week; + public static synthetic fun now$default (Lio/github/boguszpawlowski/composecalendar/week/Week$Companion;Ljava/time/DayOfWeek;ILjava/lang/Object;)Lio/github/boguszpawlowski/composecalendar/week/Week; +} + +public final class io/github/boguszpawlowski/composecalendar/week/WeekKt { + public static final fun between (Ljava/time/temporal/ChronoUnit;Lio/github/boguszpawlowski/composecalendar/week/Week;Lio/github/boguszpawlowski/composecalendar/week/Week;)I +} + diff --git a/Pink/library/build.gradle.kts b/Pink/library/build.gradle.kts new file mode 100644 index 0000000..6685122 --- /dev/null +++ b/Pink/library/build.gradle.kts @@ -0,0 +1,41 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.compose) +} + +android { + namespace = "io.github.boguszpawlowski.composecalendar" + compileSdk = 36 + + defaultConfig { + minSdk = 24 + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + + buildFeatures { + compose = true + } + + tasks.withType { + compilerOptions { + freeCompilerArgs.addAll(listOf("-Xexplicit-api=strict", "-Xcontext-receivers")) + } + } +} + +dependencies { + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.compose.foundation) + implementation(libs.androidx.compose.material) + implementation(libs.androidx.compose.material.icons.core) + implementation(libs.snapper) + implementation(libs.timber) +} diff --git a/Pink/library/gradle.properties b/Pink/library/gradle.properties new file mode 100644 index 0000000..9a193f6 --- /dev/null +++ b/Pink/library/gradle.properties @@ -0,0 +1,5 @@ +POM_ARTIFACT_ID=composecalendar +POM_DESCRIPTION=Library for handling the Calendar view in Jetpack Compose. +POM_PACKAGING=aar +SONATYPE_HOST=S01 +RELEASE_SIGNING_ENABLED=true diff --git a/Pink/library/src/main/AndroidManifest.xml b/Pink/library/src/main/AndroidManifest.xml new file mode 100644 index 0000000..8bdb7e1 --- /dev/null +++ b/Pink/library/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/Calendar.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/Calendar.kt new file mode 100644 index 0000000..b8f335b --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/Calendar.kt @@ -0,0 +1,286 @@ +@file:Suppress("MatchingDeclarationName") + +package io.github.boguszpawlowski.composecalendar + +import android.annotation.SuppressLint +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Modifier +import io.github.boguszpawlowski.composecalendar.day.DayState +import io.github.boguszpawlowski.composecalendar.day.DefaultDay +import io.github.boguszpawlowski.composecalendar.header.DefaultMonthHeader +import io.github.boguszpawlowski.composecalendar.header.MonthState +import io.github.boguszpawlowski.composecalendar.month.MonthContent +import io.github.boguszpawlowski.composecalendar.month.MonthPager +import io.github.boguszpawlowski.composecalendar.selection.DynamicSelectionState +import io.github.boguszpawlowski.composecalendar.selection.EmptySelectionState +import io.github.boguszpawlowski.composecalendar.selection.SelectionMode +import io.github.boguszpawlowski.composecalendar.selection.SelectionState +import io.github.boguszpawlowski.composecalendar.week.DaysInAWeek +import io.github.boguszpawlowski.composecalendar.week.DefaultDaysOfWeekHeader +import io.github.boguszpawlowski.composecalendar.week.rotateRight +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.YearMonth +import java.time.temporal.WeekFields +import java.util.Locale + +/** + * State of the calendar composable + * + * @property monthState currently showed month + * @property selectionState handler for the calendar's selection + */ +@Stable +public class CalendarState( + public val monthState: MonthState, + public val selectionState: T, +) + +/** + * [Calendar] implementation using a [DynamicSelectionState] as a selection handler. + * + * * Basic usage: + * ``` + * @Composable + * fun MainScreen() { + * SelectableCalendar() + * } + * ``` + * + * @param modifier + * @param firstDayOfWeek first day of a week, defaults to current locale's + * @param today current day, defaults to [LocalDate.now] + * @param showAdjacentMonths whenever to show or hide the days from adjacent months + * @param horizontalSwipeEnabled whenever user is able to change the month by horizontal swipe + * @param weekDaysScrollEnabled if the week days should be scrollable + * @param calendarState state of the composable + * @param dayContent composable rendering the current day + * @param monthHeader header for showing the current month and controls for changing it + * @param daysOfWeekHeader header for showing captions for each day of week + * @param monthContainer container composable for all the days in current month + */ +@Composable +@SuppressLint("NewApi") +public fun SelectableCalendar( + modifier: Modifier = Modifier, + firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek, + today: LocalDate = LocalDate.now(), + showAdjacentMonths: Boolean = true, + horizontalSwipeEnabled: Boolean = true, + weekDaysScrollEnabled: Boolean = true, + calendarState: CalendarState = rememberSelectableCalendarState(), + dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) }, + monthHeader: @Composable ColumnScope.(MonthState) -> Unit = { DefaultMonthHeader(it) }, + daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) }, + monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit = { content -> + Box { content(PaddingValues()) } + }, +) { + Calendar( + modifier = modifier, + firstDayOfWeek = firstDayOfWeek, + today = today, + showAdjacentMonths = showAdjacentMonths, + horizontalSwipeEnabled = horizontalSwipeEnabled, + weekDaysScrollEnabled = weekDaysScrollEnabled, + calendarState = calendarState, + dayContent = dayContent, + monthHeader = monthHeader, + daysOfWeekHeader = daysOfWeekHeader, + monthContainer = monthContainer + ) +} + +/** + * [Calendar] implementation without any mechanism for the selection. + * + * Basic usage: + * ``` + * @Composable + * fun MainScreen() { + * StaticCalendar() + * } + * ``` + * + * @param modifier + * @param firstDayOfWeek first day of a week, defaults to current locale's + * @param today current day, defaults to [LocalDate.now] + * @param showAdjacentMonths whenever to show or hide the days from adjacent months + * @param horizontalSwipeEnabled whenever user is able to change the month by horizontal swipe + * @param weekDaysScrollEnabled if the week days should be scrollable + * @param calendarState state of the composable + * @param dayContent composable rendering the current day + * @param monthHeader header for showing the current month and controls for changing it + * @param daysOfWeekHeader header for showing captions for each day of week + * @param monthContainer container composable for all the days in current month + */ +@Composable +@SuppressLint("NewApi") +public fun StaticCalendar( + modifier: Modifier = Modifier, + firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek, + today: LocalDate = LocalDate.now(), + showAdjacentMonths: Boolean = true, + horizontalSwipeEnabled: Boolean = true, + weekDaysScrollEnabled: Boolean = true, + calendarState: CalendarState = rememberCalendarState(), + dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) }, + monthHeader: @Composable ColumnScope.(MonthState) -> Unit = { DefaultMonthHeader(it) }, + daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) }, + monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit = { content -> + Box { content(PaddingValues()) } + }, +) { + Calendar( + modifier = modifier, + firstDayOfWeek = firstDayOfWeek, + today = today, + showAdjacentMonths = showAdjacentMonths, + horizontalSwipeEnabled = horizontalSwipeEnabled, + weekDaysScrollEnabled = weekDaysScrollEnabled, + calendarState = calendarState, + dayContent = dayContent, + monthHeader = monthHeader, + daysOfWeekHeader = daysOfWeekHeader, + monthContainer = monthContainer + ) +} + +/** + * Composable for showing a calendar. The calendar state has to be provided by the call site. If you + * want to use built-in implementation, check out: + * [SelectableCalendar] - calendar composable handling selection that can be changed at runtime + * [StaticCalendar] - calendar without any mechanism for selection + * + * @param modifier + * @param firstDayOfWeek first day of a week, defaults to current locale's + * @param today current day, defaults to [LocalDate.now] + * @param showAdjacentMonths whenever to show or hide the days from adjacent months + * @param horizontalSwipeEnabled whenever user is able to change the month by horizontal swipe + * @param calendarState state of the composable + * @param dayContent composable rendering the current day + * @param monthHeader header for showing the current month and controls for changing it + * @param daysOfWeekHeader header for showing captions for each day of week + * @param monthContainer container composable for all the days in current month + */ +@Composable +@SuppressLint("NewApi") +public fun Calendar( + calendarState: CalendarState, + modifier: Modifier = Modifier, + firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek, + today: LocalDate = LocalDate.now(), + showAdjacentMonths: Boolean = true, + horizontalSwipeEnabled: Boolean = true, + weekDaysScrollEnabled: Boolean = true, + dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) }, + monthHeader: @Composable ColumnScope.(MonthState) -> Unit = { DefaultMonthHeader(it) }, + daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) }, + monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit = { content -> + Box { content(PaddingValues()) } + }, +) { + val initialMonth = remember { calendarState.monthState.currentMonth } + val daysOfWeek = remember(firstDayOfWeek) { + DayOfWeek.values().rotateRight(DaysInAWeek - firstDayOfWeek.ordinal) + } + + Column( + modifier = modifier, + ) { + monthHeader(calendarState.monthState) + if (horizontalSwipeEnabled) { + MonthPager( + initialMonth = initialMonth, + showAdjacentMonths = showAdjacentMonths, + monthState = calendarState.monthState, + selectionState = calendarState.selectionState, + today = today, + weekDaysScrollEnabled = weekDaysScrollEnabled, + daysOfWeek = daysOfWeek, + dayContent = dayContent, + weekHeader = daysOfWeekHeader, + monthContainer = monthContainer, + ) + } else { + MonthContent( + modifier = Modifier.fillMaxWidth(), + currentMonth = calendarState.monthState.currentMonth, + showAdjacentMonths = showAdjacentMonths, + selectionState = calendarState.selectionState, + today = today, + weekDaysScrollEnabled = weekDaysScrollEnabled, + daysOfWeek = daysOfWeek, + dayContent = dayContent, + weekHeader = daysOfWeekHeader, + monthContainer = monthContainer, + ) + } + } +} + +/** + * Helper function for providing a [CalendarState] implementation with selection mechanism. + * + * @param initialMonth initially rendered month + * @param initialSelection initial selection of the composable + * @param initialSelectionMode initial mode of the selection + * @param confirmSelectionChange callback for optional side-effects handling and vetoing the state change + * @param minMonth first month that can be shown + * @param maxMonth last month that can be shown + */ +@Composable +@SuppressLint("NewApi") +public fun rememberSelectableCalendarState( + initialMonth: YearMonth = YearMonth.now(), + minMonth: YearMonth = initialMonth.minusMonths(DefaultCalendarPagerRange), + maxMonth: YearMonth = initialMonth.plusMonths(DefaultCalendarPagerRange), + initialSelection: List = emptyList(), + initialSelectionMode: SelectionMode = SelectionMode.Single, + confirmSelectionChange: (newValue: List) -> Boolean = { true }, + monthState: MonthState = rememberSaveable(saver = MonthState.Saver()) { + MonthState( + initialMonth = initialMonth, + minMonth = minMonth, + maxMonth = maxMonth + ) + }, + selectionState: DynamicSelectionState = rememberSaveable( + saver = DynamicSelectionState.Saver(confirmSelectionChange), + ) { + DynamicSelectionState(confirmSelectionChange, initialSelection, initialSelectionMode) + }, +): CalendarState = remember { CalendarState(monthState, selectionState) } + +/** + * Helper function for providing a [CalendarState] implementation without a selection mechanism. + * + * @param initialMonth initially rendered month + * @param minMonth first month that can be shown + * @param maxMonth last month that can be shown + */ +@Composable +@SuppressLint("NewApi") +public fun rememberCalendarState( + initialMonth: YearMonth = YearMonth.now(), + minMonth: YearMonth = initialMonth.minusMonths(DefaultCalendarPagerRange), + maxMonth: YearMonth = initialMonth.plusMonths(DefaultCalendarPagerRange), + monthState: MonthState = rememberSaveable(saver = MonthState.Saver()) { + MonthState( + initialMonth = initialMonth, + minMonth = minMonth, + maxMonth = maxMonth + ) + }, +): CalendarState = remember { CalendarState(monthState, EmptySelectionState) } + +internal const val DefaultCalendarPagerRange = 10_000L diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/WeekCalendar.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/WeekCalendar.kt new file mode 100644 index 0000000..28da35a --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/WeekCalendar.kt @@ -0,0 +1,264 @@ +@file:Suppress("MatchingDeclarationName", "LongParameterList") + +package io.github.boguszpawlowski.composecalendar + +import android.annotation.SuppressLint +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Modifier +import io.github.boguszpawlowski.composecalendar.day.DayState +import io.github.boguszpawlowski.composecalendar.day.DefaultDay +import io.github.boguszpawlowski.composecalendar.header.WeekState +import io.github.boguszpawlowski.composecalendar.selection.DynamicSelectionState +import io.github.boguszpawlowski.composecalendar.selection.EmptySelectionState +import io.github.boguszpawlowski.composecalendar.selection.SelectionMode +import io.github.boguszpawlowski.composecalendar.selection.SelectionState +import io.github.boguszpawlowski.composecalendar.week.DaysInAWeek +import io.github.boguszpawlowski.composecalendar.week.DefaultDaysOfWeekHeader +import io.github.boguszpawlowski.composecalendar.week.Week +import io.github.boguszpawlowski.composecalendar.week.WeekContent +import io.github.boguszpawlowski.composecalendar.week.WeekPager +import io.github.boguszpawlowski.composecalendar.week.getWeekDays +import io.github.boguszpawlowski.composecalendar.week.rotateRight +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.temporal.WeekFields +import java.util.Locale +import io.github.boguszpawlowski.composecalendar.header.DefaultWeekHeader as DefaultProperWeekHeader + +/** + * State of the week calendar composable + * + * @property weekState currently showed week + * @property selectionState handler for the calendar's selection + */ +@Stable +public class WeekCalendarState( + public val weekState: WeekState, + public val selectionState: T, +) + +/** + * [WeekCalendar] implementation using a [DynamicSelectionState] as a selection handler. + * + * * Basic usage: + * ``` + * @Composable + * fun MainScreen() { + * SelectableWeekCalendar() + * } + * ``` + * + * @param modifier + * @param firstDayOfWeek first day of a week, defaults to current locale's + * @param today current day, defaults to [LocalDate.now] + * @param horizontalSwipeEnabled whenever user is able to change the week by horizontal swipe + * @param weekDaysScrollEnabled if the week days should be scrollable + * @param calendarState state of the composable + * @param dayContent composable rendering the current day + * @param weekHeader header for showing the current week and controls for changing it + * @param daysOfWeekHeader header for showing captions for each day of week + */ +@Composable +public fun SelectableWeekCalendar( + modifier: Modifier = Modifier, + firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek, + today: LocalDate = LocalDate.now(), + horizontalSwipeEnabled: Boolean = true, + weekDaysScrollEnabled: Boolean = true, + calendarState: WeekCalendarState = rememberSelectableWeekCalendarState(), + dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) }, + weekHeader: @Composable ColumnScope.(WeekState) -> Unit = { + DefaultProperWeekHeader(it) + }, + daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) }, +) { + WeekCalendar( + modifier = modifier, + calendarState = calendarState, + today = today, + horizontalSwipeEnabled = horizontalSwipeEnabled, + firstDayOfWeek = firstDayOfWeek, + weekDaysScrollEnabled = weekDaysScrollEnabled, + dayContent = dayContent, + weekHeader = weekHeader, + daysOfWeekHeader = daysOfWeekHeader, + ) +} + +/** + * [WeekCalendar] implementation without any mechanism for the selection. + * + * * Basic usage: + * ``` + * @Composable + * fun MainScreen() { + * StaticWeekCalendar() + * } + * ``` + * + * @param modifier + * @param firstDayOfWeek first day of a week, defaults to current locale's + * @param today current day, defaults to [LocalDate.now] + * @param horizontalSwipeEnabled whenever user is able to change the week by horizontal swipe + * @param calendarState state of the composable + * @param dayContent composable rendering the current day + * @param weekHeader header for showing the current week and controls for changing it + * @param daysOfWeekHeader header for showing captions for each day of week + */ +@Composable +@SuppressLint("NewApi") +public fun StaticWeekCalendar( + modifier: Modifier = Modifier, + firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek, + today: LocalDate = LocalDate.now(), + horizontalSwipeEnabled: Boolean = true, + calendarState: WeekCalendarState = rememberWeekCalendarState(), + weekDaysScrollEnabled: Boolean = true, + dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) }, + weekHeader: @Composable ColumnScope.(WeekState) -> Unit = { + DefaultProperWeekHeader(it) + }, + daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) }, +) { + WeekCalendar( + modifier = modifier, + calendarState = calendarState, + today = today, + horizontalSwipeEnabled = horizontalSwipeEnabled, + firstDayOfWeek = firstDayOfWeek, + weekDaysScrollEnabled = weekDaysScrollEnabled, + dayContent = dayContent, + weekHeader = weekHeader, + daysOfWeekHeader = daysOfWeekHeader, + ) +} + +/** + * Composable for showing a week calendar. The calendar state has to be provided by the call site. If you + * want to use built-in implementation, check out: + * [SelectableWeekCalendar] - calendar composable handling selection that can be changed at runtime + * [StaticWeekCalendar] - calendar without any mechanism for selection + * + * @param modifier + * @param firstDayOfWeek first day of a week, defaults to current locale's + * @param today current day, defaults to [LocalDate.now] + * @param horizontalSwipeEnabled whenever user is able to change the week by horizontal swipe + * @param calendarState state of the composable + * @param dayContent composable rendering the current day + * @param weekHeader header for showing the current week and controls for changing it + * @param daysOfWeekHeader header for showing captions for each day of week + */ +@Composable +@SuppressLint("NewApi") +public fun WeekCalendar( + calendarState: WeekCalendarState, + modifier: Modifier = Modifier, + today: LocalDate = LocalDate.now(), + firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek, + horizontalSwipeEnabled: Boolean = true, + weekDaysScrollEnabled: Boolean = true, + dayContent: @Composable BoxScope.(DayState) -> Unit = { DefaultDay(it) }, + weekHeader: @Composable ColumnScope.(WeekState) -> Unit = { + DefaultProperWeekHeader(it) + }, + daysOfWeekHeader: @Composable BoxScope.(List) -> Unit = { DefaultDaysOfWeekHeader(it) }, +) { + val initialWeek = remember { calendarState.weekState.currentWeek } + val daysOfWeek = remember(firstDayOfWeek) { + DayOfWeek.values().rotateRight(DaysInAWeek - firstDayOfWeek.ordinal) + } + + Column( + modifier = modifier, + ) { + weekHeader(calendarState.weekState) + if (horizontalSwipeEnabled) { + WeekPager( + initialWeek = initialWeek, + daysOfWeek = daysOfWeek, + weekState = calendarState.weekState, + selectionState = calendarState.selectionState, + today = today, + weekDaysScrollEnabled = weekDaysScrollEnabled, + dayContent = dayContent, + daysOfWeekHeader = daysOfWeekHeader, + ) + } else { + WeekContent( + daysOfWeek = daysOfWeek, + weekDays = calendarState.weekState.currentWeek.getWeekDays(today), + selectionState = calendarState.selectionState, + weekDaysScrollEnabled = weekDaysScrollEnabled, + dayContent = dayContent, + daysOfWeekHeader = daysOfWeekHeader, + ) + } + } +} + +/** + * Helper function for providing a [WeekCalendarState] implementation with selection mechanism. + * + * @param firstDayOfWeek first day of a week, defaults to current locale's + * @param initialWeek initially rendered month + * @param initialSelection initial selection of the composable + * @param initialSelectionMode initial mode of the selection + * @param confirmSelectionChange callback for optional side-effects handling and vetoing the state change + * @param minWeek first week that can be shown + * @param maxWeek last week that can be shown + */ +@Composable +@SuppressLint("NewApi") +public fun rememberSelectableWeekCalendarState( + firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek, + initialWeek: Week = Week.now(firstDayOfWeek), + minWeek: Week = initialWeek.minusWeeks(DefaultCalendarPagerRange), + maxWeek: Week = initialWeek.plusWeeks(DefaultCalendarPagerRange), + initialSelection: List = emptyList(), + initialSelectionMode: SelectionMode = SelectionMode.Single, + confirmSelectionChange: (newValue: List) -> Boolean = { true }, + weekState: WeekState = rememberSaveable(saver = WeekState.Saver()) { + WeekState( + initialWeek = initialWeek, + minWeek = minWeek, + maxWeek = maxWeek, + ) + }, + selectionState: DynamicSelectionState = rememberSaveable( + saver = DynamicSelectionState.Saver(confirmSelectionChange), + ) { + DynamicSelectionState(confirmSelectionChange, initialSelection, initialSelectionMode) + }, +): WeekCalendarState = + remember { WeekCalendarState(weekState, selectionState) } + +/** + * Helper function for providing a [WeekCalendarState] implementation without a selection mechanism. + * + * @param firstDayOfWeek first day of a week, defaults to current locale's + * @param initialWeek initially rendered week + * @param minWeek first week that can be shown + * @param maxWeek last week that can be shown + */ +@Composable +@SuppressLint("NewApi") +public fun rememberWeekCalendarState( + firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek, + initialWeek: Week = Week.now(firstDayOfWeek), + minWeek: Week = initialWeek.minusWeeks(DefaultCalendarPagerRange), + maxWeek: Week = initialWeek.plusWeeks(DefaultCalendarPagerRange), + weekState: WeekState = rememberSaveable(saver = WeekState.Saver()) { + WeekState( + initialWeek = initialWeek, + minWeek = minWeek, + maxWeek = maxWeek, + ) + }, +): WeekCalendarState = + remember { WeekCalendarState(weekState, EmptySelectionState) } diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/Day.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/Day.kt new file mode 100644 index 0000000..e476ce8 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/Day.kt @@ -0,0 +1,16 @@ +package io.github.boguszpawlowski.composecalendar.day + +import java.time.LocalDate + +/** + * Container for basic info about the displayed day + * + * @param date local date of the day + * @param isCurrentDay whenever the day is the today's date + * @param isFromCurrentMonth whenever the day is from currently rendered month + */ +public interface Day { + public val date: LocalDate + public val isCurrentDay: Boolean + public val isFromCurrentMonth: Boolean +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DayState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DayState.kt new file mode 100644 index 0000000..a10a299 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DayState.kt @@ -0,0 +1,16 @@ +package io.github.boguszpawlowski.composecalendar.day + +import androidx.compose.runtime.Stable +import io.github.boguszpawlowski.composecalendar.selection.EmptySelectionState +import io.github.boguszpawlowski.composecalendar.selection.SelectionState + +public typealias NonSelectableDayState = DayState + +/** + * Contains information about current selection as well as date of rendered day + */ +@Stable +public data class DayState( + private val day: Day, + val selectionState: T, +) : Day by day diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DefaultDay.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DefaultDay.kt new file mode 100644 index 0000000..2afd0d4 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/DefaultDay.kt @@ -0,0 +1,63 @@ +package io.github.boguszpawlowski.composecalendar.day + +import android.annotation.SuppressLint +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Card +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.material.contentColorFor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import io.github.boguszpawlowski.composecalendar.selection.SelectionState +import java.time.LocalDate + +/** + * Default implementation for day content. It supports different appearance for days from + * current and adjacent month, as well as current day and selected day + * + * @param selectionColor color of the border, when day is selected + * @param currentDayColor color of content for the current date + * @param onClick callback for interacting with day clicks + */ +@Composable +@SuppressLint("NewApi") +public fun DefaultDay( + state: DayState, + modifier: Modifier = Modifier, + selectionColor: Color = MaterialTheme.colors.secondary, + currentDayColor: Color = MaterialTheme.colors.primary, + onClick: (LocalDate) -> Unit = {}, +) { + val date = state.date + val selectionState = state.selectionState + + val isSelected = selectionState.isDateSelected(date) + + Card( + modifier = modifier + .aspectRatio(1f) + .padding(2.dp), + elevation = if (state.isFromCurrentMonth) 4.dp else 0.dp, + border = if (state.isCurrentDay) BorderStroke(1.dp, currentDayColor) else null, + contentColor = if (isSelected) selectionColor else contentColorFor( + backgroundColor = MaterialTheme.colors.surface + ) + ) { + Box( + modifier = Modifier.clickable { + onClick(date) + selectionState.onDateSelected(date) + }, + contentAlignment = Alignment.Center, + ) { + Text(text = date.dayOfMonth.toString()) + } + } +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/WeekDay.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/WeekDay.kt new file mode 100644 index 0000000..7ac0002 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/day/WeekDay.kt @@ -0,0 +1,11 @@ +package io.github.boguszpawlowski.composecalendar.day + +import androidx.compose.runtime.Immutable +import java.time.LocalDate + +@Immutable +internal class WeekDay( + override val date: LocalDate, + override val isCurrentDay: Boolean, + override val isFromCurrentMonth: Boolean +) : Day diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/debug/RecomposeHighlighter.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/debug/RecomposeHighlighter.kt new file mode 100644 index 0000000..61b2744 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/debug/RecomposeHighlighter.kt @@ -0,0 +1,97 @@ +package io.github.boguszpawlowski.composecalendar.debug + +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.Stable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.draw.drawWithCache +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.drawscope.Fill +import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.graphics.lerp +import androidx.compose.ui.platform.debugInspectorInfo +import androidx.compose.ui.unit.dp +import kotlinx.coroutines.delay +import kotlin.math.min + +/** + * A [Modifier] that draws a border around elements that are recomposing. The border increases in + * size and interpolates from red to green as more recompositions occur before a timeout. + */ +@Stable +internal fun Modifier.recomposeHighlighter(): Modifier = this.then(recomposeModifier) + +// Use a single instance + @Stable to ensure that recompositions can enable skipping optimizations +// Modifier.composed will still remember unique data per call site. +private val recomposeModifier = + Modifier.composed(inspectorInfo = debugInspectorInfo { name = "recomposeHighlighter" }) { + // The total number of compositions that have occurred. We're not using a State<> here be + // able to read/write the value without invalidating (which would cause infinite + // recomposition). + val totalCompositions = remember { arrayOf(0L) } + totalCompositions[0]++ + + // The value of totalCompositions at the last timeout. + val totalCompositionsAtLastTimeout = remember { mutableStateOf(0L) } + + // Start the timeout, and reset everytime there's a recomposition. (Using totalCompositions + // as the key is really just to cause the timer to restart every composition). + LaunchedEffect(totalCompositions[0]) { + delay(3000) + totalCompositionsAtLastTimeout.value = totalCompositions[0] + } + + Modifier.drawWithCache { + onDrawWithContent { + // Draw actual content. + drawContent() + + // Below is to draw the highlight, if necessary. A lot of the logic is copied from + // Modifier.border + val numCompositionsSinceTimeout = + totalCompositions[0] - totalCompositionsAtLastTimeout.value + + val hasValidBorderParams = size.minDimension > 0f + if (!hasValidBorderParams || numCompositionsSinceTimeout <= 0) { + return@onDrawWithContent + } + + val (color, strokeWidthPx) = + when (numCompositionsSinceTimeout) { + // We need at least one composition to draw, so draw the smallest border + // color in blue. + 1L -> Color.Blue to 1f + // 2 compositions is _probably_ okay. + 2L -> Color.Green to 2.dp.toPx() + // 3 or more compositions before timeout may indicate an issue. lerp the + // color from yellow to red, and continually increase the border size. + else -> lerp( + Color.Yellow.copy(alpha = 0.8f), + Color.Red.copy(alpha = 0.5f), + min(1f, (numCompositionsSinceTimeout - 1).toFloat() / 100f) + ) to numCompositionsSinceTimeout.toInt().dp.toPx() + } + + val halfStroke = strokeWidthPx / 2 + val topLeft = Offset(halfStroke, halfStroke) + val borderSize = Size(size.width - strokeWidthPx, size.height - strokeWidthPx) + + val fillArea = strokeWidthPx * 2 > size.minDimension + val rectTopLeft = if (fillArea) Offset.Zero else topLeft + val size = if (fillArea) size else borderSize + val style = if (fillArea) Fill else Stroke(strokeWidthPx) + + drawRect( + brush = SolidColor(color), + topLeft = rectTopLeft, + size = size, + style = style + ) + } + } + } diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultMonthHeader.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultMonthHeader.kt new file mode 100644 index 0000000..653587c --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultMonthHeader.kt @@ -0,0 +1,87 @@ +package io.github.boguszpawlowski.composecalendar.header + +import android.annotation.SuppressLint +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.width +import androidx.compose.material.IconButton +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.KeyboardArrowLeft +import androidx.compose.material.icons.filled.KeyboardArrowRight +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.unit.dp +import java.time.format.TextStyle.FULL +import java.util.Locale + +/** + * Default implementation of month header, shows current month and year, as well as + * 2 arrows for changing currently showed month + */ +@Composable +@SuppressLint("NewApi") +public fun DefaultMonthHeader( + monthState: MonthState, + modifier: Modifier = Modifier, +) { + Row( + modifier = modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically, + ) { + DecrementButton(monthState = monthState) + Text( + modifier = Modifier.testTag("MonthLabel"), + text = monthState.currentMonth.month + .getDisplayName(FULL, Locale.getDefault()) + .lowercase() + .replaceFirstChar { it.titlecase() }, + style = MaterialTheme.typography.h4, + ) + Spacer(modifier = Modifier.width(8.dp)) + Text(text = monthState.currentMonth.year.toString(), style = MaterialTheme.typography.h4) + IncrementButton(monthState = monthState) + } +} + +@Composable +private fun DecrementButton( + monthState: MonthState, +) { + IconButton( + modifier = Modifier.testTag("Decrement"), + enabled = monthState.currentMonth > monthState.minMonth, + onClick = { monthState.currentMonth = monthState.currentMonth.minusMonths(1) } + ) { + Image( + imageVector = Icons.Default.KeyboardArrowLeft, + colorFilter = ColorFilter.tint(MaterialTheme.colors.onSurface), + contentDescription = "Previous", + ) + } +} + +@Composable +private fun IncrementButton( + monthState: MonthState, +) { + IconButton( + modifier = Modifier.testTag("Increment"), + enabled = monthState.currentMonth < monthState.maxMonth, + onClick = { monthState.currentMonth = monthState.currentMonth.plusMonths(1) } + ) { + Image( + imageVector = Icons.Default.KeyboardArrowRight, + colorFilter = ColorFilter.tint(MaterialTheme.colors.onSurface), + contentDescription = "Next", + ) + } +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultWeekHeader.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultWeekHeader.kt new file mode 100644 index 0000000..cb99137 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/DefaultWeekHeader.kt @@ -0,0 +1,91 @@ +package io.github.boguszpawlowski.composecalendar.header + +import android.annotation.SuppressLint +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.width +import androidx.compose.material.IconButton +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.KeyboardArrowLeft +import androidx.compose.material.icons.filled.KeyboardArrowRight +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.unit.dp +import java.time.format.TextStyle.FULL +import java.util.Locale + +/** + * Default implementation of week header, shows current month and year, as well as + * 2 arrows for changing currently showed month + */ +@Composable +@Suppress("LongMethod") +@SuppressLint("NewApi") +public fun DefaultWeekHeader( + weekState: WeekState, + modifier: Modifier = Modifier, +) { + Row( + modifier = modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically, + ) { + DecrementButton(weekState = weekState) + Text( + modifier = Modifier.testTag("WeekLabel"), + text = weekState.currentWeek.yearMonth.month + .getDisplayName(FULL, Locale.getDefault()) + .lowercase() + .replaceFirstChar { it.titlecase() }, + style = MaterialTheme.typography.h4, + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = weekState.currentWeek.yearMonth.year.toString(), + style = MaterialTheme.typography.h4 + ) + IncrementButton(monthState = weekState) + } +} + +@Composable +private fun DecrementButton( + weekState: WeekState, +) { + IconButton( + modifier = Modifier.testTag("Decrement"), + enabled = weekState.currentWeek > weekState.minWeek, + onClick = { weekState.currentWeek = weekState.currentWeek.dec() } + ) { + Image( + imageVector = Icons.Default.KeyboardArrowLeft, + colorFilter = ColorFilter.tint(MaterialTheme.colors.onSurface), + contentDescription = "Previous", + ) + } +} + +@Composable +private fun IncrementButton( + monthState: WeekState, +) { + IconButton( + modifier = Modifier.testTag("Increment"), + enabled = monthState.currentWeek < monthState.maxWeek, + onClick = { monthState.currentWeek = monthState.currentWeek.inc() } + ) { + Image( + imageVector = Icons.Default.KeyboardArrowRight, + colorFilter = ColorFilter.tint(MaterialTheme.colors.onSurface), + contentDescription = "Next", + ) + } +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/MonthState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/MonthState.kt new file mode 100644 index 0000000..2934798 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/MonthState.kt @@ -0,0 +1,76 @@ +package io.github.boguszpawlowski.composecalendar.header + +import android.annotation.SuppressLint +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.mapSaver +import androidx.compose.runtime.setValue +import java.time.YearMonth + +@Suppress("FunctionName") // Factory function +public fun MonthState( + initialMonth: YearMonth, + minMonth: YearMonth, + maxMonth: YearMonth, +): MonthState = MonthStateImpl(initialMonth, minMonth, maxMonth) + +@Stable +public interface MonthState { + public var currentMonth: YearMonth + public var minMonth: YearMonth + public var maxMonth: YearMonth + + public companion object { + public fun Saver(): Saver = mapSaver( + save = { monthState -> + mapOf( + "currentMonth" to monthState.currentMonth.toString(), + "minMonth" to monthState.minMonth.toString(), + "maxMonth" to monthState.maxMonth.toString(), + ) + }, + restore = { restoreMap -> + MonthState( + YearMonth.parse(restoreMap["currentMonth"] as String), + YearMonth.parse(restoreMap["minMonth"] as String), + YearMonth.parse(restoreMap["maxMonth"] as String), + ) + } + ) + } +} + +@Stable +@SuppressLint("NewApi") +private class MonthStateImpl( + initialMonth: YearMonth, + minMonth: YearMonth, + maxMonth: YearMonth, +) : MonthState { + + private var _currentMonth by mutableStateOf(initialMonth) + private var _minMonth by mutableStateOf(minMonth) + private var _maxMonth by mutableStateOf(maxMonth) + + override var currentMonth: YearMonth + get() = _currentMonth + set(value) { + _currentMonth = value + } + + override var minMonth: YearMonth + get() = _minMonth + set(value) { + if (value > _maxMonth) return + _minMonth = value + } + + override var maxMonth: YearMonth + get() = _maxMonth + set(value) { + if (value < _minMonth) return + _maxMonth = value + } +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/WeekState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/WeekState.kt new file mode 100644 index 0000000..f64182a --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/header/WeekState.kt @@ -0,0 +1,86 @@ +package io.github.boguszpawlowski.composecalendar.header + +import android.annotation.SuppressLint +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.mapSaver +import androidx.compose.runtime.setValue +import io.github.boguszpawlowski.composecalendar.week.Week +import java.time.LocalDate + +@Suppress("FunctionName") // Factory function +public fun WeekState( + initialWeek: Week, + minWeek: Week, + maxWeek: Week, +): WeekState = WeekStateImpl( + initialWeek = initialWeek, + minWeek = minWeek, + maxWeek = maxWeek, +) + +@Stable +@SuppressLint("NewApi") +public interface WeekState { + public var currentWeek: Week + public var minWeek: Week + public var maxWeek: Week + + public companion object { + @Suppress("FunctionName") // Factory function + public fun Saver(): Saver = mapSaver( + save = { weekState -> + mapOf( + CurrentWeekKey to weekState.currentWeek.days[0].toString(), + MinWeekKey to weekState.minWeek.days[0].toString(), + MaxWeekKey to weekState.maxWeek.days[0].toString(), + ) + }, + restore = { restoreMap -> + WeekState( + initialWeek = Week(firstDay = LocalDate.parse(restoreMap[CurrentWeekKey] as String)), + minWeek = Week(firstDay = LocalDate.parse(restoreMap[MinWeekKey] as String)), + maxWeek = Week(firstDay = LocalDate.parse(restoreMap[MaxWeekKey] as String)), + ) + } + ) + + private const val CurrentWeekKey = "CurrentWeek" + private const val MinWeekKey = "MinWeek" + private const val MaxWeekKey = "MaxWeek" + } +} + +@Stable +private class WeekStateImpl( + initialWeek: Week, + minWeek: Week, + maxWeek: Week, +) : WeekState { + + private var _currentWeek by mutableStateOf(initialWeek) + private var _minWeek by mutableStateOf(minWeek) + private var _maxWeek by mutableStateOf(maxWeek) + + override var currentWeek: Week + get() = _currentWeek + set(value) { + _currentWeek = value + } + + override var minWeek: Week + get() = _minWeek + set(value) { + if (value > _maxWeek) return + _minWeek = value + } + + override var maxWeek: Week + get() = _maxWeek + set(value) { + if (value < _minWeek) return + _maxWeek = value + } +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthContent.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthContent.kt new file mode 100644 index 0000000..2d02ed1 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthContent.kt @@ -0,0 +1,162 @@ +package io.github.boguszpawlowski.composecalendar.month + +import androidx.compose.animation.rememberSplineBasedDecay +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import dev.chrisbanes.snapper.ExperimentalSnapperApi +import dev.chrisbanes.snapper.SnapOffsets +import dev.chrisbanes.snapper.SnapperFlingBehaviorDefaults +import dev.chrisbanes.snapper.SnapperLayoutInfo +import dev.chrisbanes.snapper.rememberSnapperFlingBehavior +import io.github.boguszpawlowski.composecalendar.day.DayState +import io.github.boguszpawlowski.composecalendar.header.MonthState +import io.github.boguszpawlowski.composecalendar.selection.SelectionState +import io.github.boguszpawlowski.composecalendar.week.WeekRow +import io.github.boguszpawlowski.composecalendar.week.getWeeks +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.YearMonth +import java.time.temporal.ChronoUnit + +@OptIn(ExperimentalSnapperApi::class) +@Composable +@Suppress("LongMethod", "NewApi") +internal fun MonthPager( + initialMonth: YearMonth, + showAdjacentMonths: Boolean, + selectionState: T, + monthState: MonthState, + daysOfWeek: List, + today: LocalDate, + modifier: Modifier = Modifier, + weekDaysScrollEnabled: Boolean = true, + dayContent: @Composable BoxScope.(DayState) -> Unit, + weekHeader: @Composable BoxScope.(List) -> Unit, + monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit, +) { + val coroutineScope = rememberCoroutineScope() + + val initialFirstVisibleItemIndex = remember(initialMonth, monthState.minMonth) { + ChronoUnit.MONTHS.between(monthState.minMonth, initialMonth).toInt() + } + val listState = rememberLazyListState( + initialFirstVisibleItemIndex = initialFirstVisibleItemIndex, + ) + val flingBehavior = rememberSnapperFlingBehavior( + lazyListState = listState, + snapOffsetForItem = SnapOffsets.Start, + springAnimationSpec = SnapperFlingBehaviorDefaults.SpringAnimationSpec, + decayAnimationSpec = rememberSplineBasedDecay(), + snapIndex = coerceSnapIndex, + ) + + val monthListState = remember { + MonthListState( + coroutineScope = coroutineScope, + monthState = monthState, + listState = listState, + ) + } + + Column(modifier = Modifier.fillMaxWidth()) { + if (weekDaysScrollEnabled.not()) { + Box( + modifier = Modifier + .wrapContentHeight() + .fillMaxWidth(), + content = { weekHeader(daysOfWeek) }, + ) + } + val pagerCount = remember(monthState.minMonth, monthState.maxMonth) { + ChronoUnit.MONTHS.between(monthState.minMonth, monthState.maxMonth).toInt() + 1 + } + LazyRow( + modifier = modifier.testTag("MonthPager"), + state = listState, + flingBehavior = flingBehavior, + verticalAlignment = Alignment.Top, + ) { + items( + count = pagerCount, + key = { index -> + monthListState.getMonthForPage(index).let { "${it.year}-${it.monthValue}" } + } + ) { index -> + MonthContent( + modifier = Modifier.fillParentMaxWidth(), + showAdjacentMonths = showAdjacentMonths, + selectionState = selectionState, + currentMonth = monthListState.getMonthForPage(index), + today = today, + weekDaysScrollEnabled = weekDaysScrollEnabled, + daysOfWeek = daysOfWeek, + dayContent = dayContent, + weekHeader = weekHeader, + monthContainer = monthContainer + ) + } + } + } +} + +@Composable +internal fun MonthContent( + showAdjacentMonths: Boolean, + selectionState: T, + currentMonth: YearMonth, + daysOfWeek: List, + today: LocalDate, + modifier: Modifier = Modifier, + weekDaysScrollEnabled: Boolean = true, + dayContent: @Composable BoxScope.(DayState) -> Unit, + weekHeader: @Composable BoxScope.(List) -> Unit, + monthContainer: @Composable (content: @Composable (PaddingValues) -> Unit) -> Unit, +) { + Column { + if (weekDaysScrollEnabled) { + Box( + modifier = modifier + .wrapContentHeight(), + content = { weekHeader(daysOfWeek) }, + ) + } + monthContainer { paddingValues -> + Column( + modifier = modifier + .padding(paddingValues) + ) { + currentMonth.getWeeks( + includeAdjacentMonths = showAdjacentMonths, + firstDayOfTheWeek = daysOfWeek.first(), + today = today, + ).forEach { week -> + WeekRow( + weekDays = week, + selectionState = selectionState, + dayContent = dayContent, + ) + } + } + } + } +} + +@OptIn(ExperimentalSnapperApi::class) +internal val coerceSnapIndex: (SnapperLayoutInfo, startIndex: Int, targetIndex: Int) -> Int = + { _, startIndex, targetIndex -> + targetIndex + .coerceIn(startIndex - 1, startIndex + 1) + } diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthListState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthListState.kt new file mode 100644 index 0000000..d85fe24 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/month/MonthListState.kt @@ -0,0 +1,74 @@ +package io.github.boguszpawlowski.composecalendar.month + +import android.annotation.SuppressLint +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.runtime.Stable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.snapshotFlow +import io.github.boguszpawlowski.composecalendar.header.MonthState +import io.github.boguszpawlowski.composecalendar.util.throttleOnOffset +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch +import java.time.YearMonth +import java.time.temporal.ChronoUnit + +@Stable +@SuppressLint("NewApi") +internal class MonthListState( + private val coroutineScope: CoroutineScope, + private val monthState: MonthState, + private val listState: LazyListState, +) { + + private val currentFirstVisibleMonth by derivedStateOf { + getMonthForPage(listState.firstVisibleItemIndex) + } + + init { + snapshotFlow { monthState.currentMonth }.onEach { month -> + moveToMonth(month) + }.launchIn(coroutineScope) + + with(listState) { + snapshotFlow { currentFirstVisibleMonth } + .throttleOnOffset() + .onEach { newMonth -> + monthState.currentMonth = newMonth + }.launchIn(coroutineScope) + } + } + + fun getMonthForPage(index: Int): YearMonth = + monthState.minMonth.plusMonths(index.toLong()) + + private fun moveToMonth(month: YearMonth) { + if (month == currentFirstVisibleMonth) return + coroutineScope.launch { + listState.animateScrollToItem(ChronoUnit.MONTHS.between(monthState.minMonth, month).toInt()) + } + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as MonthListState + + if (monthState != other.monthState) return false + if (listState != other.listState) return false + + return true + } + + override fun hashCode(): Int { + var result = monthState.hashCode() + result = 31 * result + listState.hashCode() + return result + } +} + +private operator fun YearMonth.minus(other: YearMonth) = + ChronoUnit.MONTHS.between(other, this) diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler.kt new file mode 100644 index 0000000..d3f244e --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/DynamicSelectionHandler.kt @@ -0,0 +1,35 @@ +package io.github.boguszpawlowski.composecalendar.selection + +import android.annotation.SuppressLint +import io.github.boguszpawlowski.composecalendar.util.addOrRemoveIfExists +import java.time.LocalDate + +/** + * Helper class for calculating new selection, when using a [DynamicSelectionState] approach. + * @param date clicked on date + * @param selection current selection + * @param selectionMode current selection mode + * @returns new selection in a form of a list of local dates. + */ +@SuppressLint("NewApi") +public object DynamicSelectionHandler { + public fun calculateNewSelection( + date: LocalDate, + selection: List, + selectionMode: SelectionMode, + ): List = when (selectionMode) { + SelectionMode.None -> emptyList() + SelectionMode.Single -> if (date == selection.firstOrNull()) { + emptyList() + } else { + listOf(date) + } + SelectionMode.Multiple -> selection.addOrRemoveIfExists(date) + SelectionMode.Period -> when { + date.isBefore(selection.startOrMax()) -> listOf(date) + date.isAfter(selection.startOrMax()) -> selection.fillUpTo(date) + date == selection.startOrMax() -> emptyList() + else -> selection + } + } +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionExtensions.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionExtensions.kt new file mode 100644 index 0000000..0fdb706 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionExtensions.kt @@ -0,0 +1,15 @@ +package io.github.boguszpawlowski.composecalendar.selection + +import android.annotation.SuppressLint +import java.time.LocalDate + +@SuppressLint("NewApi") +internal fun Collection.startOrMax() = firstOrNull() ?: LocalDate.MAX + +internal fun Collection.endOrNull() = drop(1).lastOrNull() + +@SuppressLint("NewApi") +internal fun Collection.fillUpTo(date: LocalDate) = + (0..date.toEpochDay() - first().toEpochDay()).map { + first().plusDays(it) + } diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionMode.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionMode.kt new file mode 100644 index 0000000..7a1aeee --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionMode.kt @@ -0,0 +1,15 @@ +package io.github.boguszpawlowski.composecalendar.selection + +/** + * Selection modes for the [DynamicSelectionState] + * None - no selection allowed + * Single - only one date selected + * Multiple - multiple dates can be selected + * Period - period can be selected + */ +public enum class SelectionMode { + None, + Single, + Multiple, + Period, +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionState.kt new file mode 100644 index 0000000..79448f5 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/selection/SelectionState.kt @@ -0,0 +1,83 @@ +package io.github.boguszpawlowski.composecalendar.selection + +import android.annotation.SuppressLint +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.listSaver +import androidx.compose.runtime.setValue +import java.time.LocalDate + +@Stable +public interface SelectionState { + public fun isDateSelected(date: LocalDate): Boolean = false + public fun onDateSelected(date: LocalDate) { } +} + +/** + * Class that enables for dynamically changing selection modes in the runtime. Depending on the mode, selection changes differently. + * Mode can be varied by setting desired [SelectionMode] in the [selectionMode] mutable property. + * @param confirmSelectionChange return false from this callback to veto the selection change + */ +@Stable +@SuppressLint("NewApi") +public class DynamicSelectionState( + private val confirmSelectionChange: (newValue: List) -> Boolean = { true }, + selection: List, + selectionMode: SelectionMode, +) : SelectionState { + + private var _selection by mutableStateOf(selection) + private var _selectionMode by mutableStateOf(selectionMode) + + public var selection: List + get() = _selection + set(value) { + if (value != selection && confirmSelectionChange(value)) { + _selection = value + } + } + + public var selectionMode: SelectionMode + get() = _selectionMode + set(value) { + if (value != selectionMode) { + _selection = emptyList() + _selectionMode = value + } + } + + override fun isDateSelected(date: LocalDate): Boolean = selection.contains(date) + + override fun onDateSelected(date: LocalDate) { + selection = DynamicSelectionHandler.calculateNewSelection(date, selection, selectionMode) + } + + internal companion object { + @Suppress("FunctionName", "UNCHECKED_CAST") // Factory function + fun Saver( + confirmSelectionChange: (newValue: List) -> Boolean, + ): Saver = + listSaver( + save = { raw -> + listOf(raw.selectionMode, raw.selection.map { it.toString() }) + }, + restore = { restored -> + DynamicSelectionState( + confirmSelectionChange = confirmSelectionChange, + selectionMode = restored[0] as SelectionMode, + selection = (restored[1] as? List)?.map { LocalDate.parse(it) }.orEmpty(), + ) + } + ) + } +} + +@Immutable +public object EmptySelectionState : SelectionState { + override fun isDateSelected(date: LocalDate): Boolean = false + + override fun onDateSelected(date: LocalDate): Unit = Unit +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/DateUtil.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/DateUtil.kt new file mode 100644 index 0000000..76154cf --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/DateUtil.kt @@ -0,0 +1,13 @@ +package io.github.boguszpawlowski.composecalendar.util + +import java.time.DayOfWeek +import java.time.LocalDate + +internal fun Collection.addOrRemoveIfExists(date: LocalDate) = + if (contains(date)) { + this - date + } else { + this + date + } + +internal infix fun DayOfWeek.daysUntil(other: DayOfWeek) = (7 + (value - other.value)) % 7 diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/ListStateExtensions.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/ListStateExtensions.kt new file mode 100644 index 0000000..07c576d --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/ListStateExtensions.kt @@ -0,0 +1,19 @@ +package io.github.boguszpawlowski.composecalendar.util + +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.runtime.snapshotFlow +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.map + +context(LazyListState) internal fun Flow.throttleOnOffset() = + combine( + snapshotFlow { firstVisibleItemScrollOffset } + ) { newMonth, offset -> + newMonth to (offset <= MinimalOffsetForEmit) + }.filter { (_, shouldUpdate) -> + shouldUpdate + }.map { (newValue, _) -> newValue } + +private const val MinimalOffsetForEmit = 10 diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/YearMonthExtensions.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/YearMonthExtensions.kt new file mode 100644 index 0000000..f3479b0 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/util/YearMonthExtensions.kt @@ -0,0 +1,7 @@ +package io.github.boguszpawlowski.composecalendar.util + +import java.time.YearMonth + +internal operator fun YearMonth.dec() = this.minusMonths(1) + +internal operator fun YearMonth.inc() = this.plusMonths(1) diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/DefaultWeekHeader.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/DefaultWeekHeader.kt new file mode 100644 index 0000000..b5d7cdb --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/DefaultWeekHeader.kt @@ -0,0 +1,61 @@ +package io.github.boguszpawlowski.composecalendar.week + +import android.annotation.SuppressLint +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import java.time.DayOfWeek +import java.time.format.TextStyle.SHORT +import java.util.Locale +import kotlin.DeprecationLevel.WARNING + +@Composable +@Deprecated( + level = WARNING, + replaceWith = ReplaceWith( + "DefaultDaysOfWeekHeader(daysOfWeek, modifier)", + "io.github.boguszpawlowski.composecalendar.week.DefaultDaysOfWeekHeader", + ), + message = "Replace with DefaultDaysOfWeekHeader, DefaultWeekHeader will be removed in future versions" +) +@SuppressLint("NewApi") +public fun DefaultWeekHeader( + daysOfWeek: List, + modifier: Modifier = Modifier, +) { + Row(modifier = modifier) { + daysOfWeek.forEach { dayOfWeek -> + Text( + textAlign = TextAlign.Center, + text = dayOfWeek.getDisplayName(SHORT, Locale.getDefault()), + modifier = modifier + .weight(1f) + .wrapContentHeight() + ) + } + } +} + +@Composable +@SuppressLint("NewApi") +public fun DefaultDaysOfWeekHeader( + daysOfWeek: List, + modifier: Modifier = Modifier, +) { + Row(modifier = modifier) { + daysOfWeek.forEach { dayOfWeek -> + Text( + textAlign = TextAlign.Center, + text = dayOfWeek.getDisplayName(SHORT, Locale.getDefault()), + modifier = modifier + .weight(1f) + .wrapContentHeight() + ) + } + } +} + +internal fun Array.rotateRight(n: Int): List = takeLast(n) + dropLast(n) diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/Week.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/Week.kt new file mode 100644 index 0000000..815cedc --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/Week.kt @@ -0,0 +1,55 @@ +package io.github.boguszpawlowski.composecalendar.week + +import android.annotation.SuppressLint +import io.github.boguszpawlowski.composecalendar.selection.fillUpTo +import io.github.boguszpawlowski.composecalendar.util.daysUntil +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.YearMonth +import java.time.temporal.ChronoUnit +import java.time.temporal.WeekFields +import java.util.Locale + +@SuppressLint("NewApi") +public data class Week( + val days: List, +) { + + init { + require(days.size == DaysInAWeek) + } + + internal constructor(firstDay: LocalDate) : this( + listOf(firstDay).fillUpTo(firstDay.plusDays((DaysInAWeek - 1).toLong())) + ) + + public val start: LocalDate get() = days.first() + + public val end: LocalDate get() = days.last() + + public val yearMonth: YearMonth = YearMonth.of(start.year, start.month) + + public operator fun inc(): Week = plusWeeks(1) + + public operator fun dec(): Week = plusWeeks(-1) + + public operator fun compareTo(other: Week): Int = start.compareTo(other.start) + + public fun minusWeeks(value: Long): Week = plusWeeks(-value) + + public fun plusWeeks(value: Long): Week = copy(days = days.map { it.plusWeeks(value) }) + + public companion object { + public fun now(firstDayOfWeek: DayOfWeek = WeekFields.of(Locale.getDefault()).firstDayOfWeek): Week { + val today = LocalDate.now() + val offset = today.dayOfWeek.daysUntil(firstDayOfWeek) + val firstDay = today.minusDays(offset.toLong()) + + return Week(firstDay) + } + } +} + +@SuppressLint("NewApi") +public fun ChronoUnit.between(first: Week, other: Week): Int = + between(first.start, other.start).toInt() diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekDays.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekDays.kt new file mode 100644 index 0000000..374e175 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekDays.kt @@ -0,0 +1,10 @@ +package io.github.boguszpawlowski.composecalendar.week + +import androidx.compose.runtime.Immutable +import io.github.boguszpawlowski.composecalendar.day.Day + +@Immutable +internal data class WeekDays( + val isFirstWeekOfTheMonth: Boolean = false, + val days: List, +) diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekListState.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekListState.kt new file mode 100644 index 0000000..3dbc66d --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekListState.kt @@ -0,0 +1,70 @@ +package io.github.boguszpawlowski.composecalendar.week + +import android.annotation.SuppressLint +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.runtime.Stable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.snapshotFlow +import io.github.boguszpawlowski.composecalendar.header.WeekState +import io.github.boguszpawlowski.composecalendar.util.throttleOnOffset +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch +import java.time.temporal.ChronoUnit + +@Stable +@SuppressLint("NewApi") +internal class WeekListState( + private val coroutineScope: CoroutineScope, + private val weekState: WeekState, + private val listState: LazyListState, +) { + + private val currentlyFirstVisibleMonth by derivedStateOf { + getWeekForPage(listState.firstVisibleItemIndex) + } + + init { + snapshotFlow { weekState.currentWeek }.onEach { week -> + moveToWeek(week) + }.launchIn(coroutineScope) + + with(listState) { + snapshotFlow { currentlyFirstVisibleMonth } + .throttleOnOffset() + .onEach { newMonth -> + weekState.currentWeek = newMonth + }.launchIn(coroutineScope) + } + } + + fun getWeekForPage(index: Int): Week = + weekState.minWeek.plusWeeks(index.toLong()) + + private fun moveToWeek(week: Week) { + if (week == currentlyFirstVisibleMonth) return + coroutineScope.launch { + listState.animateScrollToItem(ChronoUnit.WEEKS.between(weekState.minWeek, week)) + } + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as WeekListState + + if (weekState != other.weekState) return false + if (listState != other.listState) return false + + return true + } + + override fun hashCode(): Int { + var result = weekState.hashCode() + result = 31 * result + listState.hashCode() + return result + } +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekPager.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekPager.kt new file mode 100644 index 0000000..5354d0e --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekPager.kt @@ -0,0 +1,150 @@ +package io.github.boguszpawlowski.composecalendar.week + +import android.annotation.SuppressLint +import androidx.compose.animation.rememberSplineBasedDecay +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import dev.chrisbanes.snapper.ExperimentalSnapperApi +import dev.chrisbanes.snapper.SnapOffsets +import dev.chrisbanes.snapper.SnapperFlingBehaviorDefaults +import dev.chrisbanes.snapper.rememberSnapperFlingBehavior +import io.github.boguszpawlowski.composecalendar.day.DayState +import io.github.boguszpawlowski.composecalendar.day.WeekDay +import io.github.boguszpawlowski.composecalendar.header.WeekState +import io.github.boguszpawlowski.composecalendar.month.coerceSnapIndex +import io.github.boguszpawlowski.composecalendar.selection.SelectionState +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.temporal.ChronoUnit + +@OptIn(ExperimentalSnapperApi::class) +@Composable +@Suppress("LongMethod") +@SuppressLint("NewApi") +internal fun WeekPager( + initialWeek: Week, + selectionState: T, + weekState: WeekState, + daysOfWeek: List, + today: LocalDate, + modifier: Modifier = Modifier, + weekDaysScrollEnabled: Boolean = true, + dayContent: @Composable BoxScope.(DayState) -> Unit, + daysOfWeekHeader: @Composable BoxScope.(List) -> Unit, +) { + val coroutineScope = rememberCoroutineScope() + + val initialFirstVisibleItemIndex = remember(initialWeek, weekState.minWeek) { + ChronoUnit.WEEKS.between(weekState.minWeek, initialWeek) + } + val listState = rememberLazyListState( + initialFirstVisibleItemIndex = initialFirstVisibleItemIndex, + ) + val flingBehavior = rememberSnapperFlingBehavior( + lazyListState = listState, + snapOffsetForItem = SnapOffsets.Start, + springAnimationSpec = SnapperFlingBehaviorDefaults.SpringAnimationSpec, + decayAnimationSpec = rememberSplineBasedDecay(), + snapIndex = coerceSnapIndex, + ) + + val weekListState = remember { + WeekListState( + coroutineScope = coroutineScope, + weekState = weekState, + listState = listState, + ) + } + Column( + modifier = modifier, + ) { + if (weekDaysScrollEnabled.not()) { + Box( + modifier = Modifier + .wrapContentHeight() + .fillMaxWidth(), + content = { daysOfWeekHeader(daysOfWeek) }, + ) + } + val pagerCount = remember(weekState.minWeek, weekState.maxWeek) { + ChronoUnit.WEEKS.between(weekState.minWeek, weekState.maxWeek) + 1 + } + LazyRow( + modifier = modifier.testTag("WeekPager"), + state = listState, + flingBehavior = flingBehavior, + verticalAlignment = Alignment.Top, + ) { + items( + count = pagerCount, + key = { index -> weekListState.getWeekForPage(index).start.let { "${it.month}-${it.dayOfMonth}" } }, + ) { index -> + WeekContent( + modifier = Modifier.fillParentMaxWidth(), + daysOfWeek = daysOfWeek, + weekDays = weekListState.getWeekForPage(index).getWeekDays(today = today), + selectionState = selectionState, + weekDaysScrollEnabled = weekDaysScrollEnabled, + dayContent = dayContent, + daysOfWeekHeader = daysOfWeekHeader, + ) + } + } + } +} + +@Composable +internal fun WeekContent( + selectionState: T, + weekDays: WeekDays, + daysOfWeek: List, + modifier: Modifier = Modifier, + weekDaysScrollEnabled: Boolean = true, + dayContent: @Composable BoxScope.(DayState) -> Unit, + daysOfWeekHeader: @Composable BoxScope.(List) -> Unit, +) { + Column( + modifier = modifier, + ) { + if (weekDaysScrollEnabled) { + Box( + modifier = Modifier + .wrapContentHeight() + .fillMaxWidth(), + content = { daysOfWeekHeader(daysOfWeek) }, + ) + } + WeekRow( + weekDays = weekDays, + modifier = Modifier.fillMaxWidth(), + selectionState = selectionState, + dayContent = dayContent, + ) + } +} + +internal fun Week.getWeekDays(today: LocalDate): WeekDays { + val weekDays = days.map { + WeekDay( + date = it, + isCurrentDay = it == today, + isFromCurrentMonth = true, + ) + } + + return WeekDays( + isFirstWeekOfTheMonth = false, + days = weekDays, + ) +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekRow.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekRow.kt new file mode 100644 index 0000000..61881e1 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekRow.kt @@ -0,0 +1,35 @@ +package io.github.boguszpawlowski.composecalendar.week + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import io.github.boguszpawlowski.composecalendar.day.DayState +import io.github.boguszpawlowski.composecalendar.selection.SelectionState + +@Composable +internal fun WeekRow( + weekDays: WeekDays, + selectionState: T, + modifier: Modifier = Modifier, + dayContent: @Composable BoxScope.(DayState) -> Unit +) { + Row( + modifier = modifier + .fillMaxWidth() + .wrapContentHeight(), + horizontalArrangement = if (weekDays.isFirstWeekOfTheMonth) Arrangement.End else Arrangement.Start + ) { + weekDays.days.forEachIndexed { index, day -> + Box( + modifier = Modifier.fillMaxWidth(1f / (7 - index)) + ) { + dayContent(DayState(day, selectionState)) + } + } + } +} diff --git a/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekUtil.kt b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekUtil.kt new file mode 100644 index 0000000..e926e14 --- /dev/null +++ b/Pink/library/src/main/java/io/github/boguszpawlowski/composecalendar/week/WeekUtil.kt @@ -0,0 +1,52 @@ +package io.github.boguszpawlowski.composecalendar.week + +import android.annotation.SuppressLint +import io.github.boguszpawlowski.composecalendar.day.WeekDay +import io.github.boguszpawlowski.composecalendar.util.daysUntil +import java.time.DayOfWeek +import java.time.LocalDate +import java.time.YearMonth + +internal const val DaysInAWeek = 7 + +@SuppressLint("NewApi") +internal fun YearMonth.getWeeks( + includeAdjacentMonths: Boolean, + firstDayOfTheWeek: DayOfWeek, + today: LocalDate, +): List { + val daysLength = lengthOfMonth() + + val starOffset = atDay(1).dayOfWeek daysUntil firstDayOfTheWeek + val endOffset = + DaysInAWeek - (atDay(daysLength).dayOfWeek daysUntil firstDayOfTheWeek) - 1 + + return (1 - starOffset..daysLength + endOffset).chunked(DaysInAWeek).mapIndexed { index, days -> + WeekDays( + isFirstWeekOfTheMonth = index == 0, + days = days.mapNotNull { dayOfMonth -> + val (date, isFromCurrentMonth) = when (dayOfMonth) { + in Int.MIN_VALUE..0 -> if (includeAdjacentMonths) { + val previousMonth = this.minusMonths(1) + previousMonth.atDay(previousMonth.lengthOfMonth() + dayOfMonth) to false + } else { + return@mapNotNull null + } + in 1..daysLength -> atDay(dayOfMonth) to true + else -> if (includeAdjacentMonths) { + val previousMonth = this.plusMonths(1) + previousMonth.atDay(dayOfMonth - daysLength) to false + } else { + return@mapNotNull null + } + } + + WeekDay( + date = date, + isFromCurrentMonth = isFromCurrentMonth, + isCurrentDay = date.equals(today), + ) + } + ) + } +} diff --git a/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/selection/SelectionStateTest.kt b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/selection/SelectionStateTest.kt new file mode 100644 index 0000000..75ca49c --- /dev/null +++ b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/selection/SelectionStateTest.kt @@ -0,0 +1,177 @@ +@file:Suppress("UnderscoresInNumericLiterals") + +package io.github.boguszpawlowski.composecalendar.selection + +import io.github.boguszpawlowski.composecalendar.selection.SelectionMode.Multiple +import io.kotest.assertions.throwables.shouldNotThrowAny +import io.kotest.core.spec.style.ShouldSpec +import io.kotest.matchers.collections.shouldContainExactly +import io.kotest.matchers.shouldBe +import java.time.LocalDate +import java.time.Month.APRIL + +internal class SelectionStateTest : ShouldSpec({ + + val yesterday = LocalDate.of(2020, APRIL, 9) + val today = LocalDate.of(2020, APRIL, 10) + val tomorrow = LocalDate.of(2020, APRIL, 11) + + context("Selection state with SelectionMode.None") { + should("not change selection after new value arrives") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.None) + + state.onDateSelected(LocalDate.now()) + + state.selection shouldBe emptyList() + } + + should("be able to change if mode has been changed") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.None) + + state.selectionMode = SelectionMode.Single + state.onDateSelected(today) + + state.selection shouldBe listOf(today) + } + } + + context("Selection state with SelectionMode.Single") { + should("change state to single after day is selected") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Single) + + state.onDateSelected(today) + + state.selection shouldBe listOf(today) + } + + should("change state to none when same day is selected") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Single) + + state.onDateSelected(today) + state.onDateSelected(today) + + state.selection shouldBe emptyList() + } + + should("change to other day when selected") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Single) + + state.onDateSelected(today) + state.onDateSelected(tomorrow) + + state.selection shouldBe listOf(tomorrow) + } + + should("not be mutable after selection mode is changed to None") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Single) + + state.selectionMode = SelectionMode.None + state.onDateSelected(today) + + state.selection shouldBe emptyList() + } + } + + context("Selection state with SelectionMode.Multiple") { + should("allow for multiple days selected") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Multiple) + + state.onDateSelected(today) + state.onDateSelected(tomorrow) + + state.selection shouldContainExactly listOf( + today, + tomorrow + ) + } + + should("switch selection off once day is selected second time") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Multiple) + + state.onDateSelected(today) + state.onDateSelected(tomorrow) + state.onDateSelected(today) + + state.selection shouldContainExactly listOf(tomorrow) + } + } + + context("Selection state with SelectionMode.Period") { + should("allow for period of days selected") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Period) + + state.onDateSelected(today) + state.onDateSelected(tomorrow) + + state.selection.first() shouldBe today + state.selection.last() shouldBe tomorrow + } + + should("switch selection off once start day is selected") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Period) + + state.onDateSelected(today) + state.onDateSelected(tomorrow) + state.onDateSelected(today) + + state.selection shouldBe emptyList() + } + should("change end date once the date selected is between start and the end") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Period) + + state.onDateSelected(yesterday) + state.onDateSelected(tomorrow) + state.onDateSelected(today) + + state.selection.first() shouldBe yesterday + state.selection.last() shouldBe today + } + should("change start day once day before start is selected") { + val state = DynamicSelectionState({ true }, emptyList(), SelectionMode.Period) + + state.onDateSelected(today) + state.onDateSelected(tomorrow) + state.onDateSelected(yesterday) + + state.selection.first() shouldBe yesterday + state.selection.endOrNull() shouldBe null + } + } + + context("Selection State interface default values") { + val myInterfaceWithNoMethods = object : SelectionState {} + + should("Default isDateSelected to false") { + myInterfaceWithNoMethods.isDateSelected(today) shouldBe false + } + + should("Have a default implementation that doesn't throw an exception for onDateSelected") { + shouldNotThrowAny { + myInterfaceWithNoMethods.onDateSelected(today) + } + } + } + context("Selection State with confirm state change callback") { + var nextVetoResult = false + val initialSelection = LocalDate.of(1999, 10, 12) + val newSelection = initialSelection.plusDays(1) + + val selectionState = DynamicSelectionState( + confirmSelectionChange = { nextVetoResult }, + selection = listOf(initialSelection), + selectionMode = Multiple, + ) + should("Not change the selection when change is vetoed") { + selectionState.onDateSelected(newSelection) + + selectionState.selection shouldBe listOf(initialSelection) + } + should("Change the selection when change is not vetoed") { + nextVetoResult = true + + selectionState.onDateSelected(newSelection) + + selectionState.selection shouldBe listOf(initialSelection, newSelection) + } + } +}) diff --git a/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekTest.kt b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekTest.kt new file mode 100644 index 0000000..c59c4fc --- /dev/null +++ b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekTest.kt @@ -0,0 +1,68 @@ +package io.github.boguszpawlowski.composecalendar.week + +import io.kotest.assertions.asClue +import io.kotest.assertions.throwables.shouldThrow +import io.kotest.core.spec.style.ShouldSpec +import io.kotest.matchers.shouldBe +import java.time.LocalDate + +internal class WeekTest : ShouldSpec({ + + val today = LocalDate.of(2000, 10, 2) + + context("Secondary constructor") { + val week = Week(firstDay = today) + + should("properly create an instance of week") { + week.asClue { + it.days.first() shouldBe today + it.days.last() shouldBe today.plusDays(6) + it.days.size shouldBe 7 + } + } + } + + context("Incrementing") { + val week = Week(firstDay = today).inc() + + should("shift the days by 7") { + week.asClue { + it.days.first() shouldBe today.plusWeeks(1) + it.days.last() shouldBe today.plusDays(6).plusWeeks(1) + it.days.size shouldBe 7 + } + } + } + + context("Decrementing") { + val week = Week(firstDay = today).dec() + + should("shift the days by -7") { + week.asClue { + it.days.first() shouldBe today.plusWeeks(-1) + it.days.last() shouldBe today.plusDays(6).plusWeeks(-1) + it.days.size shouldBe 7 + } + } + } + + context("Adding a week") { + val week = Week(firstDay = today).plusWeeks(7) + + should("add correct number of days") { + week.asClue { + it.days.first() shouldBe today.plusWeeks(7) + it.days.last() shouldBe today.plusDays(6).plusWeeks(7) + it.days.size shouldBe 7 + } + } + } + + context("Constructing a week with invalid number of days") { + should("throw") { + shouldThrow { + Week(List(18) { LocalDate.now() }) + } + } + } +}) diff --git a/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekUtilTest.kt b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekUtilTest.kt new file mode 100644 index 0000000..17ce731 --- /dev/null +++ b/Pink/library/src/test/java/io/github/boguszpawlowski/composecalendar/week/WeekUtilTest.kt @@ -0,0 +1,166 @@ +@file:Suppress("UnderscoresInNumericLiterals") + +package io.github.boguszpawlowski.composecalendar.week + +import io.kotest.core.spec.style.ShouldSpec +import io.kotest.matchers.collections.shouldContainAll +import io.kotest.matchers.collections.shouldContainExactly +import io.kotest.matchers.collections.shouldHaveSize +import io.kotest.matchers.shouldBe +import java.time.DayOfWeek.MONDAY +import java.time.DayOfWeek.SATURDAY +import java.time.DayOfWeek.SUNDAY +import java.time.LocalDate +import java.time.YearMonth + +internal class WeekUtilTest : ShouldSpec({ + + val today = LocalDate.of(2020, 9, 15) + val month = YearMonth.of(2020, 9) + val previousMonth = YearMonth.of(2020, 8) + val nextMonth = YearMonth.of(2020, 10) + + context("Extracting weeks without adjacent months") { + val includeAdjacentMonths = false + should("return days only from current month") { + val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today) + val days = weeks.flatMap { it.days } + + days.map { it.date }.forEach { + it.isFromMonth(month) shouldBe true + it.isFromMonth(previousMonth) shouldBe false + it.isFromMonth(nextMonth) shouldBe false + } + } + + should("return all days from the month") { + val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today) + val days = weeks.flatMap { it.days }.map { it.date } + + val daysLength = month.lengthOfMonth() + val daysFromCurrentMonth = (1..daysLength).map { month.atDay(it) } + + days shouldContainExactly daysFromCurrentMonth + } + + should("return days properly split to weeks") { + val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today) + + weeks[0].days shouldHaveSize 6 + weeks[1].days shouldHaveSize 7 + weeks[2].days shouldHaveSize 7 + weeks[3].days shouldHaveSize 7 + weeks[4].days shouldHaveSize 3 + + weeks shouldHaveSize 5 + } + + should("return days properly split to weeks when first day is Saturday") { + val weeks = month.getWeeks(includeAdjacentMonths, SATURDAY, today) + + weeks[0].days shouldHaveSize 4 + weeks[1].days shouldHaveSize 7 + weeks[2].days shouldHaveSize 7 + weeks[3].days shouldHaveSize 7 + weeks[4].days shouldHaveSize 5 + + weeks shouldHaveSize 5 + } + + should("return days properly split to weeks when first day is Sunday ") { + val weeks = month.getWeeks(includeAdjacentMonths, SUNDAY, today) + + weeks[0].days shouldHaveSize 5 + weeks[1].days shouldHaveSize 7 + weeks[2].days shouldHaveSize 7 + weeks[3].days shouldHaveSize 7 + weeks[4].days shouldHaveSize 4 + + weeks shouldHaveSize 5 + } + } + + context("Extracting weeks with adjacent months") { + val includeAdjacentMonths = true + should("return days from current and previous months") { + val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today) + val days = weeks.flatMap { it.days } + + days.map { it.date }.forEachIndexed { index, day -> + when (index) { + 0 -> { + day.isFromMonth(month) shouldBe false + day.isFromMonth(previousMonth) shouldBe true + day.isFromMonth(nextMonth) shouldBe false + } + in 1..30 -> { + day.isFromMonth(month) shouldBe true + day.isFromMonth(previousMonth) shouldBe false + day.isFromMonth(nextMonth) shouldBe false + } + else -> { + day.isFromMonth(month) shouldBe false + day.isFromMonth(previousMonth) shouldBe false + day.isFromMonth(nextMonth) shouldBe true + } + } + } + } + + should("return all days from the month") { + val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today) + val days = weeks.flatMap { it.days }.map { it.date } + + val daysLength = month.lengthOfMonth() + val endOffset = 6 - month.atEndOfMonth().dayOfWeek.ordinal + val startOffset = month.atDay(1).dayOfWeek.ordinal - 1 + val daysFromCurrentMonth = (1..daysLength).map { month.atDay(it) } + val daysFromNextMonth = (1..endOffset).map { nextMonth.atDay(it) } + val daysFromPreviousMonth = + (previousMonth.lengthOfMonth() - startOffset..previousMonth.lengthOfMonth()).map { + previousMonth.atDay(it) + } + + days shouldContainAll daysFromCurrentMonth + daysFromNextMonth + daysFromPreviousMonth + } + + should("return days properly split to weeks") { + val weeks = month.getWeeks(includeAdjacentMonths, MONDAY, today) + + weeks[0].days shouldHaveSize 7 + weeks[1].days shouldHaveSize 7 + weeks[2].days shouldHaveSize 7 + weeks[3].days shouldHaveSize 7 + weeks[4].days shouldHaveSize 7 + + weeks shouldHaveSize 5 + } + + should("return days properly split to weeks when first day is Sunday") { + val weeks = month.getWeeks(includeAdjacentMonths, SUNDAY, today) + + weeks[0].days shouldHaveSize 7 + weeks[1].days shouldHaveSize 7 + weeks[2].days shouldHaveSize 7 + weeks[3].days shouldHaveSize 7 + weeks[4].days shouldHaveSize 7 + + weeks shouldHaveSize 5 + } + + should("return days properly split to weeks when first day is Saturday") { + val weeks = month.getWeeks(includeAdjacentMonths, SATURDAY, today) + + weeks[0].days shouldHaveSize 7 + weeks[1].days shouldHaveSize 7 + weeks[2].days shouldHaveSize 7 + weeks[3].days shouldHaveSize 7 + weeks[4].days shouldHaveSize 7 + + weeks shouldHaveSize 5 + } + } +}) + +private fun LocalDate.isFromMonth(yearMonth: YearMonth) = + month == yearMonth.month && year == yearMonth.year diff --git a/Pink/meiyou.png b/Pink/meiyou.png new file mode 100644 index 0000000..fbec5b0 Binary files /dev/null and b/Pink/meiyou.png differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/results.bin b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/results.bin deleted file mode 100644 index 7ed749e..0000000 --- a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/results.bin +++ /dev/null @@ -1 +0,0 @@ -o/bundleLibRuntimeToDirDebug diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/OpenCVLoader.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/OpenCVLoader.dex deleted file mode 100644 index 890eb71..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/OpenCVLoader.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/StaticHelper.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/StaticHelper.dex deleted file mode 100644 index 3d97b95..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/StaticHelper.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/Utils.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/Utils.dex deleted file mode 100644 index 128b530..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/android/Utils.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/Calib3d.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/Calib3d.dex deleted file mode 100644 index 8ce82a0..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/Calib3d.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoBM.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoBM.dex deleted file mode 100644 index ee69a01..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoBM.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoMatcher.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoMatcher.dex deleted file mode 100644 index 77c4900..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoMatcher.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoSGBM.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoSGBM.dex deleted file mode 100644 index 83b7c74..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/calib3d/StereoSGBM.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Algorithm.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Algorithm.dex deleted file mode 100644 index a9049a1..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Algorithm.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core$MinMaxLocResult.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core$MinMaxLocResult.dex deleted file mode 100644 index 604cd47..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core$MinMaxLocResult.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core.dex deleted file mode 100644 index 612044d..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Core.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvException.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvException.dex deleted file mode 100644 index c5fe78b..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvException.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvType.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvType.dex deleted file mode 100644 index 66f6778..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/CvType.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/DMatch.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/DMatch.dex deleted file mode 100644 index ec6ecac..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/DMatch.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/KeyPoint.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/KeyPoint.dex deleted file mode 100644 index bdf09c8..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/KeyPoint.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Mat.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Mat.dex deleted file mode 100644 index be34a6c..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Mat.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfByte.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfByte.dex deleted file mode 100644 index 9d41535..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfByte.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDMatch.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDMatch.dex deleted file mode 100644 index dbaaaba..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDMatch.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDouble.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDouble.dex deleted file mode 100644 index 6cddc87..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfDouble.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat.dex deleted file mode 100644 index 936f28c..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat4.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat4.dex deleted file mode 100644 index 96a9fd5..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat4.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat6.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat6.dex deleted file mode 100644 index bb74892..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfFloat6.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt.dex deleted file mode 100644 index 65ffc44..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt4.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt4.dex deleted file mode 100644 index d08af6c..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfInt4.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfKeyPoint.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfKeyPoint.dex deleted file mode 100644 index c580577..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfKeyPoint.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint.dex deleted file mode 100644 index 956fd4c..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint2f.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint2f.dex deleted file mode 100644 index f083b1e..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint2f.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3.dex deleted file mode 100644 index fa469bc..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3f.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3f.dex deleted file mode 100644 index 0abf107..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfPoint3f.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfRect.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfRect.dex deleted file mode 100644 index 9cdec5b..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/MatOfRect.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point.dex deleted file mode 100644 index 21d7d09..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point3.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point3.dex deleted file mode 100644 index 914d44d..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Point3.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Range.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Range.dex deleted file mode 100644 index d6b18ea..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Range.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Rect.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Rect.dex deleted file mode 100644 index e7e5ec9..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Rect.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/RotatedRect.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/RotatedRect.dex deleted file mode 100644 index d6115ef..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/RotatedRect.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Scalar.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Scalar.dex deleted file mode 100644 index 158ed5e..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Scalar.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Size.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Size.dex deleted file mode 100644 index 41a152a..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/Size.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/TermCriteria.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/TermCriteria.dex deleted file mode 100644 index a9c3e9a..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/core/TermCriteria.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorExtractor.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorExtractor.dex deleted file mode 100644 index eebe0d8..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorExtractor.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorMatcher.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorMatcher.dex deleted file mode 100644 index 4412afe..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/DescriptorMatcher.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/FeatureDetector.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/FeatureDetector.dex deleted file mode 100644 index 511d43d..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/FeatureDetector.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/Features2d.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/Features2d.dex deleted file mode 100644 index b4e7189..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/features2d/Features2d.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgcodecs/Imgcodecs.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgcodecs/Imgcodecs.dex deleted file mode 100644 index 3b8a4ca..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgcodecs/Imgcodecs.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/CLAHE.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/CLAHE.dex deleted file mode 100644 index b656591..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/CLAHE.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Imgproc.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Imgproc.dex deleted file mode 100644 index 3bde5fe..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Imgproc.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/LineSegmentDetector.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/LineSegmentDetector.dex deleted file mode 100644 index cf0085f..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/LineSegmentDetector.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Subdiv2D.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Subdiv2D.dex deleted file mode 100644 index a793f83..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/imgproc/Subdiv2D.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/ANN_MLP.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/ANN_MLP.dex deleted file mode 100644 index 8c575a6..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/ANN_MLP.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Boost.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Boost.dex deleted file mode 100644 index 1001890..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Boost.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/DTrees.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/DTrees.dex deleted file mode 100644 index be5dca4..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/DTrees.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/EM.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/EM.dex deleted file mode 100644 index 3bd067e..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/EM.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/KNearest.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/KNearest.dex deleted file mode 100644 index 075209c..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/KNearest.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/LogisticRegression.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/LogisticRegression.dex deleted file mode 100644 index ce25919..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/LogisticRegression.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Ml.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Ml.dex deleted file mode 100644 index 3563ab9..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/Ml.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/NormalBayesClassifier.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/NormalBayesClassifier.dex deleted file mode 100644 index 9ad0b42..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/NormalBayesClassifier.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/RTrees.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/RTrees.dex deleted file mode 100644 index 16f4563..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/RTrees.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/SVM.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/SVM.dex deleted file mode 100644 index a2aff8a..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/SVM.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/StatModel.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/StatModel.dex deleted file mode 100644 index 087a22d..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/StatModel.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/TrainData.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/TrainData.dex deleted file mode 100644 index 40c5271..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/ml/TrainData.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/BaseCascadeClassifier.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/BaseCascadeClassifier.dex deleted file mode 100644 index 9482bcb..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/BaseCascadeClassifier.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/CascadeClassifier.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/CascadeClassifier.dex deleted file mode 100644 index da651a4..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/CascadeClassifier.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/HOGDescriptor.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/HOGDescriptor.dex deleted file mode 100644 index 5012246..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/HOGDescriptor.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/Objdetect.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/Objdetect.dex deleted file mode 100644 index bc0cd7c..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/objdetect/Objdetect.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignExposures.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignExposures.dex deleted file mode 100644 index a245a38..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignExposures.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignMTB.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignMTB.dex deleted file mode 100644 index 9f5ca29..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/AlignMTB.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateCRF.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateCRF.dex deleted file mode 100644 index c03a6a7..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateCRF.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateDebevec.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateDebevec.dex deleted file mode 100644 index 949c5b1..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateDebevec.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateRobertson.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateRobertson.dex deleted file mode 100644 index 34ebc6f..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/CalibrateRobertson.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeDebevec.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeDebevec.dex deleted file mode 100644 index 50e1471..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeDebevec.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeExposures.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeExposures.dex deleted file mode 100644 index 50acf49..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeExposures.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeMertens.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeMertens.dex deleted file mode 100644 index d3a0cda..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeMertens.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeRobertson.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeRobertson.dex deleted file mode 100644 index e78d7c3..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/MergeRobertson.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Photo.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Photo.dex deleted file mode 100644 index e9ff53e..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Photo.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Tonemap.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Tonemap.dex deleted file mode 100644 index 08dd966..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/Tonemap.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDrago.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDrago.dex deleted file mode 100644 index 30c28f5..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDrago.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDurand.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDurand.dex deleted file mode 100644 index 367a8f7..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapDurand.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapMantiuk.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapMantiuk.dex deleted file mode 100644 index f83c857..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapMantiuk.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapReinhard.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapReinhard.dex deleted file mode 100644 index b1f0446..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/photo/TonemapReinhard.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/utils/Converters.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/utils/Converters.dex deleted file mode 100644 index 58d1e39..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/utils/Converters.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractor.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractor.dex deleted file mode 100644 index f6bcee9..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractor.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorKNN.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorKNN.dex deleted file mode 100644 index 8fa5caf..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorKNN.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorMOG2.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorMOG2.dex deleted file mode 100644 index fa71c18..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/BackgroundSubtractorMOG2.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DenseOpticalFlow.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DenseOpticalFlow.dex deleted file mode 100644 index 1dd26f4..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DenseOpticalFlow.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DualTVL1OpticalFlow.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DualTVL1OpticalFlow.dex deleted file mode 100644 index 34f3fba..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/DualTVL1OpticalFlow.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/KalmanFilter.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/KalmanFilter.dex deleted file mode 100644 index 5ab943b..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/KalmanFilter.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/Video.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/Video.dex deleted file mode 100644 index 90f11bd..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/video/Video.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/VideoCapture.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/VideoCapture.dex deleted file mode 100644 index fc009e0..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/VideoCapture.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/Videoio.dex b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/Videoio.dex deleted file mode 100644 index 4314b0f..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/org/opencv/videoio/Videoio.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin b/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin deleted file mode 100644 index 2229006..0000000 Binary files a/Pink/openCVLibrary300/build/.transforms/cdef41747843aaf9f0a7d3b6629bbcaf/transformed/bundleLibRuntimeToDirDebug/desugar_graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml b/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml deleted file mode 100644 index e2f9160..0000000 --- a/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json b/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json deleted file mode 100644 index 4558666..0000000 --- a/Pink/openCVLibrary300/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/output-metadata.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 3, - "artifactType": { - "type": "AAPT_FRIENDLY_MERGED_MANIFESTS", - "kind": "Directory" - }, - "applicationId": "org.opencv", - "variantName": "debug", - "elements": [ - { - "type": "SINGLE", - "filters": [], - "attributes": [], - "outputFile": "AndroidManifest.xml" - } - ], - "elementType": "File" -} \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar b/Pink/openCVLibrary300/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar deleted file mode 100644 index 2dba30f..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties b/Pink/openCVLibrary300/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties deleted file mode 100644 index ba000c0..0000000 --- a/Pink/openCVLibrary300/build/intermediates/aar_metadata/debug/writeDebugAarMetadata/aar-metadata.properties +++ /dev/null @@ -1,6 +0,0 @@ -aarFormatVersion=1.0 -aarMetadataVersion=1.0 -minCompileSdk=36 -minCompileSdkExtension=0 -minAndroidGradlePluginVersion=1.0.0 -coreLibraryDesugaringEnabled=false diff --git a/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt b/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt deleted file mode 100644 index 91a7d06..0000000 --- a/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt +++ /dev/null @@ -1,9 +0,0 @@ -org.opencv.openCVLibrary300-pngs-0 D:\gitPlanet\yola\Pink\openCVLibrary300\build\generated\res\pngs\debug -org.opencv.openCVLibrary300-updated_navigation_xml-1 D:\gitPlanet\yola\Pink\openCVLibrary300\build\generated\updated_navigation_xml\debug -org.opencv.openCVLibrary300-mergeDebugResources-2 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\incremental\debug\mergeDebugResources\merged.dir -org.opencv.openCVLibrary300-mergeDebugResources-3 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\incremental\debug\mergeDebugResources\stripped.dir -org.opencv.openCVLibrary300-debug-4 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\merged_res\debug\mergeDebugResources -org.opencv.openCVLibrary300-debug-5 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\packaged_res\debug\packageDebugResources -org.opencv.openCVLibrary300-debug-6 D:\gitPlanet\yola\Pink\openCVLibrary300\src\debug\res -org.opencv.openCVLibrary300-main-7 D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\res -gradleHome-0 D:\.gradle \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debugAndroidTest/mapDebugAndroidTestSourceSetPaths/file-map.txt b/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debugAndroidTest/mapDebugAndroidTestSourceSetPaths/file-map.txt deleted file mode 100644 index b9ce104..0000000 --- a/Pink/openCVLibrary300/build/intermediates/android_res_source_set_path_map/debugAndroidTest/mapDebugAndroidTestSourceSetPaths/file-map.txt +++ /dev/null @@ -1,5 +0,0 @@ -org.opencv.test.openCVLibrary300-updated_navigation_xml-0 D:\gitPlanet\yola\Pink\openCVLibrary300\build\generated\updated_navigation_xml\debugAndroidTest -org.opencv.test.openCVLibrary300-packageDebugAndroidTestResources-1 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\incremental\debugAndroidTest\packageDebugAndroidTestResources\merged.dir -org.opencv.test.openCVLibrary300-packageDebugAndroidTestResources-2 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\incremental\debugAndroidTest\packageDebugAndroidTestResources\stripped.dir -org.opencv.test.openCVLibrary300-debugAndroidTest-3 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\merged_res\debugAndroidTest\mergeDebugAndroidTestResources -gradleHome-0 D:\.gradle \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json b/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debug/javaPreCompileDebug/annotationProcessors.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debugAndroidTest/javaPreCompileDebugAndroidTest/annotationProcessors.json b/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debugAndroidTest/javaPreCompileDebugAndroidTest/annotationProcessors.json deleted file mode 100644 index 9e26dfe..0000000 --- a/Pink/openCVLibrary300/build/intermediates/annotation_processor_list/debugAndroidTest/javaPreCompileDebugAndroidTest/annotationProcessors.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt b/Pink/openCVLibrary300/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Pink/openCVLibrary300/build/intermediates/apk_ide_redirect_file/debugAndroidTest/createDebugAndroidTestApkListingFileRedirect/redirect.txt b/Pink/openCVLibrary300/build/intermediates/apk_ide_redirect_file/debugAndroidTest/createDebugAndroidTestApkListingFileRedirect/redirect.txt deleted file mode 100644 index 84e7ae0..0000000 --- a/Pink/openCVLibrary300/build/intermediates/apk_ide_redirect_file/debugAndroidTest/createDebugAndroidTestApkListingFileRedirect/redirect.txt +++ /dev/null @@ -1,2 +0,0 @@ -#- File Locator - -listingFile=../../../../outputs/apk/androidTest/debug/output-metadata.json diff --git a/Pink/openCVLibrary300/build/intermediates/compile_and_runtime_r_class_jar/debugAndroidTest/processDebugAndroidTestResources/R.jar b/Pink/openCVLibrary300/build/intermediates/compile_and_runtime_r_class_jar/debugAndroidTest/processDebugAndroidTestResources/R.jar deleted file mode 100644 index b1cd1a8..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/compile_and_runtime_r_class_jar/debugAndroidTest/processDebugAndroidTestResources/R.jar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar b/Pink/openCVLibrary300/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar deleted file mode 100644 index 6742d4c..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar b/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar deleted file mode 100644 index 7aa4906..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debugAndroidTest/generateDebugAndroidTestRFile/R.jar b/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debugAndroidTest/generateDebugAndroidTestRFile/R.jar deleted file mode 100644 index ada5fc7..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/compile_r_class_jar/debugAndroidTest/generateDebugAndroidTestRFile/R.jar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt b/Pink/openCVLibrary300/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Pink/openCVLibrary300/build/intermediates/compile_symbol_list/debugAndroidTest/generateDebugAndroidTestRFile/R.txt b/Pink/openCVLibrary300/build/intermediates/compile_symbol_list/debugAndroidTest/generateDebugAndroidTestRFile/R.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_0/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_0/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_1/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_1/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_2/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_2/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_3/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_3/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_4/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_4/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_5/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_5/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_6/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_6/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_7/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_7/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_8/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_8/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_9/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/dirs_bucket_9/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_0/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_0/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_1/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_1/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_2/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_2/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_3/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_3/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_4/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_4/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_5/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_5/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_6/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_6/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_7/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_7/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_8/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_8/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_9/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/currentProject/jar_3060dc580b8b1457bfe8160c33024bbfe908f501b76d52e09e0e0b784ba4cb14_bucket_9/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_0/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_0/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_1/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_1/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_2/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_2/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_3/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_3/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_4/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_4/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_5/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_5/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_6/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_6/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_7/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_7/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_8/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_8/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_9/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/externalLibs/dirs_bucket_9/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_0/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_0/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_1/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_1/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_2/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_2/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_3/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_3/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_4/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_4/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_5/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_5/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_6/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_6/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_7/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_7/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_8/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_8/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_9/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/mixedScopes/dirs_bucket_9/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_0/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_0/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_0/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_1/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_1/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_1/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_2/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_2/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_2/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_3/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_3/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_3/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_4/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_4/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_4/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_5/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_5/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_5/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_6/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_6/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_6/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_7/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_7/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_7/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_8/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_8/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_8/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_9/graph.bin b/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_9/graph.bin deleted file mode 100644 index 601f245..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/desugar_graph/debugAndroidTest/dexBuilderDebugAndroidTest/out/otherProjects/dirs_bucket_9/graph.bin and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeExtDexDebugAndroidTest/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeExtDexDebugAndroidTest/classes.dex deleted file mode 100644 index 710db50..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeExtDexDebugAndroidTest/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/1/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/1/classes.dex deleted file mode 100644 index 1d2ec76..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/1/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/10/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/10/classes.dex deleted file mode 100644 index 1c06a6f..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/10/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/12/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/12/classes.dex deleted file mode 100644 index c59e771..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/12/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/13/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/13/classes.dex deleted file mode 100644 index 7434e1b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/13/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/2/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/2/classes.dex deleted file mode 100644 index dbecdb5..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/2/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/6/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/6/classes.dex deleted file mode 100644 index 9e4ac97..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/6/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/8/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/8/classes.dex deleted file mode 100644 index 85ffb4f..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/8/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/9/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/9/classes.dex deleted file mode 100644 index b64416a..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeLibDexDebugAndroidTest/9/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeProjectDexDebugAndroidTest/0/classes.dex b/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeProjectDexDebugAndroidTest/0/classes.dex deleted file mode 100644 index 26042e9..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex/debugAndroidTest/mergeProjectDexDebugAndroidTest/0/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/dexBuilderDebugAndroidTest/out b/Pink/openCVLibrary300/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/dexBuilderDebugAndroidTest/out deleted file mode 100644 index fa8c027..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/dex_archive_input_jar_hashes/debugAndroidTest/dexBuilderDebugAndroidTest/out and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/dex_number_of_buckets_file/debugAndroidTest/dexBuilderDebugAndroidTest/out b/Pink/openCVLibrary300/build/intermediates/dex_number_of_buckets_file/debugAndroidTest/dexBuilderDebugAndroidTest/out deleted file mode 100644 index 9a03714..0000000 --- a/Pink/openCVLibrary300/build/intermediates/dex_number_of_buckets_file/debugAndroidTest/dexBuilderDebugAndroidTest/out +++ /dev/null @@ -1 +0,0 @@ -10 \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/global_synthetics_dex/debugAndroidTest/generateDebugAndroidTestGlobalSynthetics/classes.dex b/Pink/openCVLibrary300/build/intermediates/global_synthetics_dex/debugAndroidTest/generateDebugAndroidTestGlobalSynthetics/classes.dex deleted file mode 100644 index 929ea64..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/global_synthetics_dex/debugAndroidTest/generateDebugAndroidTestGlobalSynthetics/classes.dex and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debug-mergeJavaRes/merge-state b/Pink/openCVLibrary300/build/intermediates/incremental/debug-mergeJavaRes/merge-state deleted file mode 100644 index 1c983fc..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/incremental/debug-mergeJavaRes/merge-state and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties deleted file mode 100644 index fec9f6b..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +++ /dev/null @@ -1 +0,0 @@ -#Mon Jul 13 17:00:29 CST 2026 diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/merger.xml deleted file mode 100644 index 1b721ab..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/debug/packageDebugResources/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/merge-state b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/merge-state deleted file mode 100644 index 2c2e394..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/merge-state and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/HhFKBdt5R6E2hJ3SdJC8TQ== b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/HhFKBdt5R6E2hJ3SdJC8TQ== deleted file mode 100644 index d92be7d..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/HhFKBdt5R6E2hJ3SdJC8TQ== +++ /dev/null @@ -1 +0,0 @@ -[{"key":"META-INF/MANIFEST.MF","name":"META-INF/MANIFEST.MF","size":128,"crc":219314733},{"key":"org/intellij/lang/annotations/Flow.class","name":"org/intellij/lang/annotations/Flow.class","size":1217,"crc":-2102043213},{"key":"org/intellij/lang/annotations/Identifier.class","name":"org/intellij/lang/annotations/Identifier.class","size":324,"crc":1003706824},{"key":"org/intellij/lang/annotations/JdkConstants$AdjustableOrientation.class","name":"org/intellij/lang/annotations/JdkConstants$AdjustableOrientation.class","size":299,"crc":585442457},{"key":"org/intellij/lang/annotations/JdkConstants$BoxLayoutAxis.class","name":"org/intellij/lang/annotations/JdkConstants$BoxLayoutAxis.class","size":283,"crc":2112307339},{"key":"org/intellij/lang/annotations/JdkConstants$CalendarMonth.class","name":"org/intellij/lang/annotations/JdkConstants$CalendarMonth.class","size":283,"crc":-1461794964},{"key":"org/intellij/lang/annotations/JdkConstants$CursorType.class","name":"org/intellij/lang/annotations/JdkConstants$CursorType.class","size":277,"crc":1261991804},{"key":"org/intellij/lang/annotations/JdkConstants$FlowLayoutAlignment.class","name":"org/intellij/lang/annotations/JdkConstants$FlowLayoutAlignment.class","size":295,"crc":-1309531958},{"key":"org/intellij/lang/annotations/JdkConstants$FontStyle.class","name":"org/intellij/lang/annotations/JdkConstants$FontStyle.class","size":275,"crc":672556144},{"key":"org/intellij/lang/annotations/JdkConstants$HorizontalAlignment.class","name":"org/intellij/lang/annotations/JdkConstants$HorizontalAlignment.class","size":295,"crc":-1845894850},{"key":"org/intellij/lang/annotations/JdkConstants$InputEventMask.class","name":"org/intellij/lang/annotations/JdkConstants$InputEventMask.class","size":285,"crc":115820859},{"key":"org/intellij/lang/annotations/JdkConstants$ListSelectionMode.class","name":"org/intellij/lang/annotations/JdkConstants$ListSelectionMode.class","size":291,"crc":1972304950},{"key":"org/intellij/lang/annotations/JdkConstants$PatternFlags.class","name":"org/intellij/lang/annotations/JdkConstants$PatternFlags.class","size":281,"crc":-1389407250},{"key":"org/intellij/lang/annotations/JdkConstants$TabLayoutPolicy.class","name":"org/intellij/lang/annotations/JdkConstants$TabLayoutPolicy.class","size":287,"crc":-636391766},{"key":"org/intellij/lang/annotations/JdkConstants$TabPlacement.class","name":"org/intellij/lang/annotations/JdkConstants$TabPlacement.class","size":281,"crc":-214765930},{"key":"org/intellij/lang/annotations/JdkConstants$TitledBorderJustification.class","name":"org/intellij/lang/annotations/JdkConstants$TitledBorderJustification.class","size":307,"crc":859456766},{"key":"org/intellij/lang/annotations/JdkConstants$TitledBorderTitlePosition.class","name":"org/intellij/lang/annotations/JdkConstants$TitledBorderTitlePosition.class","size":307,"crc":1103964778},{"key":"org/intellij/lang/annotations/JdkConstants$TreeSelectionMode.class","name":"org/intellij/lang/annotations/JdkConstants$TreeSelectionMode.class","size":291,"crc":-474777859},{"key":"org/intellij/lang/annotations/JdkConstants.class","name":"org/intellij/lang/annotations/JdkConstants.class","size":1730,"crc":1434561639},{"key":"org/intellij/lang/annotations/Language.class","name":"org/intellij/lang/annotations/Language.class","size":681,"crc":-1817758794},{"key":"org/intellij/lang/annotations/MagicConstant.class","name":"org/intellij/lang/annotations/MagicConstant.class","size":715,"crc":-1592799795},{"key":"org/intellij/lang/annotations/Pattern.class","name":"org/intellij/lang/annotations/Pattern.class","size":600,"crc":-530891111},{"key":"org/intellij/lang/annotations/PrintFormat.class","name":"org/intellij/lang/annotations/PrintFormat.class","size":356,"crc":1445148429},{"key":"org/intellij/lang/annotations/PrintFormatPattern.class","name":"org/intellij/lang/annotations/PrintFormatPattern.class","size":964,"crc":-1507760601},{"key":"org/intellij/lang/annotations/RegExp.class","name":"org/intellij/lang/annotations/RegExp.class","size":665,"crc":-762257026},{"key":"org/intellij/lang/annotations/Subst.class","name":"org/intellij/lang/annotations/Subst.class","size":199,"crc":-1769088951},{"key":"org/jetbrains/annotations/Contract.class","name":"org/jetbrains/annotations/Contract.class","size":531,"crc":562269709},{"key":"org/jetbrains/annotations/Nls.class","name":"org/jetbrains/annotations/Nls.class","size":502,"crc":776170298},{"key":"org/jetbrains/annotations/NonNls.class","name":"org/jetbrains/annotations/NonNls.class","size":508,"crc":1172811652},{"key":"org/jetbrains/annotations/NotNull.class","name":"org/jetbrains/annotations/NotNull.class","size":546,"crc":-316212578},{"key":"org/jetbrains/annotations/Nullable.class","name":"org/jetbrains/annotations/Nullable.class","size":548,"crc":-689673279},{"key":"org/jetbrains/annotations/PropertyKey.class","name":"org/jetbrains/annotations/PropertyKey.class","size":525,"crc":862906181},{"key":"org/jetbrains/annotations/TestOnly.class","name":"org/jetbrains/annotations/TestOnly.class","size":453,"crc":1033452998},{"key":"META-INF/maven/org.jetbrains/annotations/pom.xml","name":"META-INF/maven/org.jetbrains/annotations/pom.xml","size":4930,"crc":-127628560},{"key":"META-INF/maven/org.jetbrains/annotations/pom.properties","name":"META-INF/maven/org.jetbrains/annotations/pom.properties","size":108,"crc":97218998}] \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/weIrMVK1ix0u8bhEDn6+1A== b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/weIrMVK1ix0u8bhEDn6+1A== deleted file mode 100644 index ab2d85d..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest-mergeJavaRes/zip-cache/weIrMVK1ix0u8bhEDn6+1A== +++ /dev/null @@ -1 +0,0 @@ -[{"key":"META-INF/MANIFEST.MF","name":"META-INF/MANIFEST.MF","size":214,"crc":-1636014641},{"key":"META-INF/kotlin-stdlib.kotlin_module","name":"META-INF/kotlin-stdlib.kotlin_module","size":7998,"crc":-1122367492},{"key":"kotlin/ArrayIntrinsicsKt.class","name":"kotlin/ArrayIntrinsicsKt.class","size":676,"crc":-1042886199},{"key":"kotlin/BuilderInference.class","name":"kotlin/BuilderInference.class","size":977,"crc":975598725},{"key":"kotlin/CharCodeJVMKt.class","name":"kotlin/CharCodeJVMKt.class","size":639,"crc":-1261566073},{"key":"kotlin/CharCodeKt.class","name":"kotlin/CharCodeKt.class","size":1267,"crc":-1066299721},{"key":"kotlin/CompareToKt.class","name":"kotlin/CompareToKt.class","size":998,"crc":-1437364828},{"key":"kotlin/ConsistentCopyVisibility.class","name":"kotlin/ConsistentCopyVisibility.class","size":885,"crc":624718739},{"key":"kotlin/ContextFunctionTypeParams.class","name":"kotlin/ContextFunctionTypeParams.class","size":887,"crc":-1353286264},{"key":"kotlin/ContextParametersKt.class","name":"kotlin/ContextParametersKt.class","size":445,"crc":-2027989233},{"key":"kotlin/ContextParametersKt__ContextKt.class","name":"kotlin/ContextParametersKt__ContextKt.class","size":35182,"crc":-621796911},{"key":"kotlin/ContextParametersKt__ContextOfKt.class","name":"kotlin/ContextParametersKt__ContextOfKt.class","size":947,"crc":-378934333},{"key":"kotlin/DeepRecursiveFunction.class","name":"kotlin/DeepRecursiveFunction.class","size":2005,"crc":227459087},{"key":"kotlin/DeepRecursiveKt.class","name":"kotlin/DeepRecursiveKt.class","size":2274,"crc":1664982138},{"key":"kotlin/DeepRecursiveScope.class","name":"kotlin/DeepRecursiveScope.class","size":2811,"crc":460834415},{"key":"kotlin/DeepRecursiveScopeImpl$crossFunctionCompletion$$inlined$Continuation$1.class","name":"kotlin/DeepRecursiveScopeImpl$crossFunctionCompletion$$inlined$Continuation$1.class","size":2952,"crc":-2108420059},{"key":"kotlin/DeepRecursiveScopeImpl.class","name":"kotlin/DeepRecursiveScopeImpl.class","size":7720,"crc":1828693964},{"key":"kotlin/Deprecated.class","name":"kotlin/Deprecated.class","size":1384,"crc":-1579619016},{"key":"kotlin/DeprecatedSinceKotlin.class","name":"kotlin/DeprecatedSinceKotlin.class","size":1308,"crc":-1612004334},{"key":"kotlin/DeprecationLevel.class","name":"kotlin/DeprecationLevel.class","size":1774,"crc":-8695544},{"key":"kotlin/DslMarker.class","name":"kotlin/DslMarker.class","size":955,"crc":1183864331},{"key":"kotlin/ExceptionsKt.class","name":"kotlin/ExceptionsKt.class","size":419,"crc":-1320979256},{"key":"kotlin/ExceptionsKt__ExceptionsKt.class","name":"kotlin/ExceptionsKt__ExceptionsKt.class","size":3595,"crc":-1525291448},{"key":"kotlin/ExperimentalMultiplatform.class","name":"kotlin/ExperimentalMultiplatform.class","size":1205,"crc":7859721},{"key":"kotlin/ExperimentalStdlibApi.class","name":"kotlin/ExperimentalStdlibApi.class","size":1404,"crc":-1152202948},{"key":"kotlin/ExperimentalSubclassOptIn.class","name":"kotlin/ExperimentalSubclassOptIn.class","size":897,"crc":1891751042},{"key":"kotlin/ExperimentalUnsignedTypes.class","name":"kotlin/ExperimentalUnsignedTypes.class","size":1353,"crc":281249513},{"key":"kotlin/ExposedCopyVisibility.class","name":"kotlin/ExposedCopyVisibility.class","size":879,"crc":771391513},{"key":"kotlin/ExtensionFunctionType.class","name":"kotlin/ExtensionFunctionType.class","size":729,"crc":1756455024},{"key":"kotlin/Function.class","name":"kotlin/Function.class","size":404,"crc":-177326894},{"key":"kotlin/HashCodeKt.class","name":"kotlin/HashCodeKt.class","size":671,"crc":1797869338},{"key":"kotlin/IgnorableReturnValue.class","name":"kotlin/IgnorableReturnValue.class","size":868,"crc":861989893},{"key":"kotlin/InitializedLazyImpl.class","name":"kotlin/InitializedLazyImpl.class","size":1434,"crc":-2080344094},{"key":"kotlin/KotlinNothingValueException.class","name":"kotlin/KotlinNothingValueException.class","size":1366,"crc":-88244266},{"key":"kotlin/KotlinNullPointerException.class","name":"kotlin/KotlinNullPointerException.class","size":892,"crc":404762385},{"key":"kotlin/KotlinVersion$Companion.class","name":"kotlin/KotlinVersion$Companion.class","size":896,"crc":712082463},{"key":"kotlin/KotlinVersion.class","name":"kotlin/KotlinVersion.class","size":3996,"crc":487133441},{"key":"kotlin/KotlinVersionCurrentValue.class","name":"kotlin/KotlinVersionCurrentValue.class","size":908,"crc":1769819289},{"key":"kotlin/LateinitKt.class","name":"kotlin/LateinitKt.class","size":1266,"crc":403971938},{"key":"kotlin/Lazy.class","name":"kotlin/Lazy.class","size":544,"crc":-416411977},{"key":"kotlin/LazyKt.class","name":"kotlin/LazyKt.class","size":388,"crc":-1820728754},{"key":"kotlin/LazyKt__LazyJVMKt$WhenMappings.class","name":"kotlin/LazyKt__LazyJVMKt$WhenMappings.class","size":785,"crc":904221500},{"key":"kotlin/LazyKt__LazyJVMKt.class","name":"kotlin/LazyKt__LazyJVMKt.class","size":2654,"crc":264340140},{"key":"kotlin/LazyKt__LazyKt.class","name":"kotlin/LazyKt__LazyKt.class","size":1570,"crc":1552841679},{"key":"kotlin/LazyThreadSafetyMode.class","name":"kotlin/LazyThreadSafetyMode.class","size":1804,"crc":1352859333},{"key":"kotlin/Metadata$DefaultImpls.class","name":"kotlin/Metadata$DefaultImpls.class","size":792,"crc":1962896593},{"key":"kotlin/Metadata.class","name":"kotlin/Metadata.class","size":1952,"crc":-2097530815},{"key":"kotlin/MustUseReturnValue.class","name":"kotlin/MustUseReturnValue.class","size":788,"crc":346658972},{"key":"kotlin/NoWhenBranchMatchedException.class","name":"kotlin/NoWhenBranchMatchedException.class","size":1271,"crc":-828222707},{"key":"kotlin/NotImplementedError.class","name":"kotlin/NotImplementedError.class","size":1098,"crc":-1125735966},{"key":"kotlin/NumbersKt.class","name":"kotlin/NumbersKt.class","size":517,"crc":-1479938048},{"key":"kotlin/NumbersKt__BigDecimalsKt.class","name":"kotlin/NumbersKt__BigDecimalsKt.class","size":4209,"crc":-1726302516},{"key":"kotlin/NumbersKt__BigIntegersKt.class","name":"kotlin/NumbersKt__BigIntegersKt.class","size":4930,"crc":1306389689},{"key":"kotlin/NumbersKt__FloorDivModKt.class","name":"kotlin/NumbersKt__FloorDivModKt.class","size":6948,"crc":874244362},{"key":"kotlin/NumbersKt__NumbersJVMKt.class","name":"kotlin/NumbersKt__NumbersJVMKt.class","size":4947,"crc":-1197893716},{"key":"kotlin/NumbersKt__NumbersKt.class","name":"kotlin/NumbersKt__NumbersKt.class","size":2748,"crc":-1763593595},{"key":"kotlin/OptIn.class","name":"kotlin/OptIn.class","size":1301,"crc":-1060621139},{"key":"kotlin/OptionalExpectation.class","name":"kotlin/OptionalExpectation.class","size":887,"crc":-1528259583},{"key":"kotlin/OverloadResolutionByLambdaReturnType.class","name":"kotlin/OverloadResolutionByLambdaReturnType.class","size":961,"crc":572637005},{"key":"kotlin/Pair.class","name":"kotlin/Pair.class","size":2875,"crc":53209965},{"key":"kotlin/ParameterName.class","name":"kotlin/ParameterName.class","size":879,"crc":1928355952},{"key":"kotlin/PreconditionsKt.class","name":"kotlin/PreconditionsKt.class","size":439,"crc":2070011041},{"key":"kotlin/PreconditionsKt__AssertionsJVMKt.class","name":"kotlin/PreconditionsKt__AssertionsJVMKt.class","size":2041,"crc":-1884220802},{"key":"kotlin/PreconditionsKt__PreconditionsKt.class","name":"kotlin/PreconditionsKt__PreconditionsKt.class","size":3982,"crc":2040436560},{"key":"kotlin/PropertyReferenceDelegatesKt.class","name":"kotlin/PropertyReferenceDelegatesKt.class","size":2954,"crc":-84670136},{"key":"kotlin/PublishedApi.class","name":"kotlin/PublishedApi.class","size":1001,"crc":-1551160875},{"key":"kotlin/ReplaceWith.class","name":"kotlin/ReplaceWith.class","size":940,"crc":-1833104324},{"key":"kotlin/RequiresOptIn$Level.class","name":"kotlin/RequiresOptIn$Level.class","size":1794,"crc":-192680604},{"key":"kotlin/RequiresOptIn.class","name":"kotlin/RequiresOptIn.class","size":1229,"crc":-1851122549},{"key":"kotlin/Result$Companion.class","name":"kotlin/Result$Companion.class","size":1673,"crc":-69486185},{"key":"kotlin/Result$Failure.class","name":"kotlin/Result$Failure.class","size":1931,"crc":1229030413},{"key":"kotlin/Result.class","name":"kotlin/Result.class","size":4001,"crc":354614215},{"key":"kotlin/ResultKt.class","name":"kotlin/ResultKt.class","size":7586,"crc":121680304},{"key":"kotlin/SafePublicationLazyImpl$Companion.class","name":"kotlin/SafePublicationLazyImpl$Companion.class","size":1056,"crc":-743438637},{"key":"kotlin/SafePublicationLazyImpl.class","name":"kotlin/SafePublicationLazyImpl.class","size":3842,"crc":361899766},{"key":"kotlin/SinceKotlin.class","name":"kotlin/SinceKotlin.class","size":1077,"crc":-1657512116},{"key":"kotlin/StandardKt.class","name":"kotlin/StandardKt.class","size":413,"crc":982803685},{"key":"kotlin/StandardKt__StandardKt.class","name":"kotlin/StandardKt__StandardKt.class","size":4429,"crc":607920000},{"key":"kotlin/StandardKt__SynchronizedKt.class","name":"kotlin/StandardKt__SynchronizedKt.class","size":1546,"crc":1942582603},{"key":"kotlin/SubclassOptInRequired.class","name":"kotlin/SubclassOptInRequired.class","size":1179,"crc":796509163},{"key":"kotlin/Suppress.class","name":"kotlin/Suppress.class","size":1185,"crc":1366661261},{"key":"kotlin/SuspendKt.class","name":"kotlin/SuspendKt.class","size":1168,"crc":-2125523880},{"key":"kotlin/SynchronizedLazyImpl.class","name":"kotlin/SynchronizedLazyImpl.class","size":3100,"crc":1205679612},{"key":"kotlin/ThrowsKt.class","name":"kotlin/ThrowsKt.class","size":521,"crc":840888322},{"key":"kotlin/Triple.class","name":"kotlin/Triple.class","size":3370,"crc":859684593},{"key":"kotlin/TuplesKt.class","name":"kotlin/TuplesKt.class","size":1898,"crc":1387649546},{"key":"kotlin/TypeAliasesKt.class","name":"kotlin/TypeAliasesKt.class","size":3137,"crc":-2075206212},{"key":"kotlin/TypeCastException.class","name":"kotlin/TypeCastException.class","size":859,"crc":-1324665884},{"key":"kotlin/UByte$Companion.class","name":"kotlin/UByte$Companion.class","size":926,"crc":-1652339094},{"key":"kotlin/UByte.class","name":"kotlin/UByte.class","size":11339,"crc":-81995698},{"key":"kotlin/UByteArray$Iterator.class","name":"kotlin/UByteArray$Iterator.class","size":2033,"crc":1389916405},{"key":"kotlin/UByteArray.class","name":"kotlin/UByteArray.class","size":7272,"crc":119136859},{"key":"kotlin/UByteArrayKt.class","name":"kotlin/UByteArrayKt.class","size":1597,"crc":1268804148},{"key":"kotlin/UByteKt.class","name":"kotlin/UByteKt.class","size":1036,"crc":-531975113},{"key":"kotlin/UInt$Companion.class","name":"kotlin/UInt$Companion.class","size":921,"crc":-892657350},{"key":"kotlin/UInt.class","name":"kotlin/UInt.class","size":11218,"crc":1867964554},{"key":"kotlin/UIntArray$Iterator.class","name":"kotlin/UIntArray$Iterator.class","size":2025,"crc":855761052},{"key":"kotlin/UIntArray.class","name":"kotlin/UIntArray.class","size":7238,"crc":-1771813302},{"key":"kotlin/UIntArrayKt.class","name":"kotlin/UIntArrayKt.class","size":1587,"crc":888352499},{"key":"kotlin/UIntKt.class","name":"kotlin/UIntKt.class","size":1338,"crc":684636453},{"key":"kotlin/ULong$Companion.class","name":"kotlin/ULong$Companion.class","size":926,"crc":-1539805977},{"key":"kotlin/ULong.class","name":"kotlin/ULong.class","size":11240,"crc":773276901},{"key":"kotlin/ULongArray$Iterator.class","name":"kotlin/ULongArray$Iterator.class","size":2033,"crc":-404422618},{"key":"kotlin/ULongArray.class","name":"kotlin/ULongArray.class","size":7272,"crc":-277463538},{"key":"kotlin/ULongArrayKt.class","name":"kotlin/ULongArrayKt.class","size":1597,"crc":970377078},{"key":"kotlin/ULongKt.class","name":"kotlin/ULongKt.class","size":1347,"crc":641575051},{"key":"kotlin/UNINITIALIZED_VALUE.class","name":"kotlin/UNINITIALIZED_VALUE.class","size":662,"crc":-1642092020},{"key":"kotlin/UNumbersKt.class","name":"kotlin/UNumbersKt.class","size":6696,"crc":444646541},{"key":"kotlin/UShort$Companion.class","name":"kotlin/UShort$Companion.class","size":931,"crc":658735167},{"key":"kotlin/UShort.class","name":"kotlin/UShort.class","size":11293,"crc":-1131591493},{"key":"kotlin/UShortArray$Iterator.class","name":"kotlin/UShortArray$Iterator.class","size":2041,"crc":-576363267},{"key":"kotlin/UShortArray.class","name":"kotlin/UShortArray.class","size":7296,"crc":-107595123},{"key":"kotlin/UShortArrayKt.class","name":"kotlin/UShortArrayKt.class","size":1607,"crc":-799055181},{"key":"kotlin/UShortKt.class","name":"kotlin/UShortKt.class","size":1042,"crc":758333788},{"key":"kotlin/UninitializedPropertyAccessException.class","name":"kotlin/UninitializedPropertyAccessException.class","size":1293,"crc":351590973},{"key":"kotlin/Unit.class","name":"kotlin/Unit.class","size":772,"crc":-836854172},{"key":"kotlin/UnsafeLazyImpl.class","name":"kotlin/UnsafeLazyImpl.class","size":2819,"crc":18530018},{"key":"kotlin/UnsafeVariance.class","name":"kotlin/UnsafeVariance.class","size":799,"crc":1347949094},{"key":"kotlin/UnsignedKt.class","name":"kotlin/UnsignedKt.class","size":5151,"crc":-1331855686},{"key":"kotlin/WasExperimental.class","name":"kotlin/WasExperimental.class","size":1102,"crc":2066953338},{"key":"kotlin/_Assertions.class","name":"kotlin/_Assertions.class","size":1016,"crc":-1008575630},{"key":"kotlin/kotlin.kotlin_builtins","name":"kotlin/kotlin.kotlin_builtins","size":29399,"crc":-2111613243},{"key":"kotlin/annotation/AnnotationRetention.class","name":"kotlin/annotation/AnnotationRetention.class","size":1873,"crc":392454239},{"key":"kotlin/annotation/AnnotationTarget.class","name":"kotlin/annotation/AnnotationTarget.class","size":2709,"crc":-74338617},{"key":"kotlin/annotation/MustBeDocumented.class","name":"kotlin/annotation/MustBeDocumented.class","size":730,"crc":1038714699},{"key":"kotlin/annotation/Repeatable.class","name":"kotlin/annotation/Repeatable.class","size":718,"crc":-725200752},{"key":"kotlin/annotation/Retention.class","name":"kotlin/annotation/Retention.class","size":896,"crc":271774074},{"key":"kotlin/annotation/Target.class","name":"kotlin/annotation/Target.class","size":883,"crc":649784735},{"key":"kotlin/annotation/annotation.kotlin_builtins","name":"kotlin/annotation/annotation.kotlin_builtins","size":1006,"crc":96078319},{"key":"kotlin/collections/AbstractCollection.class","name":"kotlin/collections/AbstractCollection.class","size":5945,"crc":471656748},{"key":"kotlin/collections/AbstractIterator.class","name":"kotlin/collections/AbstractIterator.class","size":2220,"crc":633672658},{"key":"kotlin/collections/AbstractList$Companion.class","name":"kotlin/collections/AbstractList$Companion.class","size":4262,"crc":1001075051},{"key":"kotlin/collections/AbstractList$IteratorImpl.class","name":"kotlin/collections/AbstractList$IteratorImpl.class","size":1884,"crc":1514659473},{"key":"kotlin/collections/AbstractList$ListIteratorImpl.class","name":"kotlin/collections/AbstractList$ListIteratorImpl.class","size":2495,"crc":-91036020},{"key":"kotlin/collections/AbstractList$SubList.class","name":"kotlin/collections/AbstractList$SubList.class","size":2395,"crc":951485847},{"key":"kotlin/collections/AbstractList.class","name":"kotlin/collections/AbstractList.class","size":5868,"crc":1227861102},{"key":"kotlin/collections/AbstractMap$Companion.class","name":"kotlin/collections/AbstractMap$Companion.class","size":3315,"crc":222904621},{"key":"kotlin/collections/AbstractMap$keys$1$iterator$1.class","name":"kotlin/collections/AbstractMap$keys$1$iterator$1.class","size":1654,"crc":779695125},{"key":"kotlin/collections/AbstractMap$keys$1.class","name":"kotlin/collections/AbstractMap$keys$1.class","size":1754,"crc":304676057},{"key":"kotlin/collections/AbstractMap$values$1$iterator$1.class","name":"kotlin/collections/AbstractMap$values$1$iterator$1.class","size":1662,"crc":51177302},{"key":"kotlin/collections/AbstractMap$values$1.class","name":"kotlin/collections/AbstractMap$values$1.class","size":1812,"crc":-1397145174},{"key":"kotlin/collections/AbstractMap.class","name":"kotlin/collections/AbstractMap.class","size":9141,"crc":-1353339835},{"key":"kotlin/collections/AbstractMutableCollection.class","name":"kotlin/collections/AbstractMutableCollection.class","size":1174,"crc":804536269},{"key":"kotlin/collections/AbstractMutableList.class","name":"kotlin/collections/AbstractMutableList.class","size":1458,"crc":-635473708},{"key":"kotlin/collections/AbstractMutableMap.class","name":"kotlin/collections/AbstractMutableMap.class","size":2097,"crc":1687088304},{"key":"kotlin/collections/AbstractMutableSet.class","name":"kotlin/collections/AbstractMutableSet.class","size":1104,"crc":896642129},{"key":"kotlin/collections/AbstractSet$Companion.class","name":"kotlin/collections/AbstractSet$Companion.class","size":2140,"crc":-267610188},{"key":"kotlin/collections/AbstractSet.class","name":"kotlin/collections/AbstractSet.class","size":2121,"crc":109267619},{"key":"kotlin/collections/ArrayAsCollection.class","name":"kotlin/collections/ArrayAsCollection.class","size":4863,"crc":-2059840666},{"key":"kotlin/collections/ArrayDeque$Companion.class","name":"kotlin/collections/ArrayDeque$Companion.class","size":936,"crc":-1819639323},{"key":"kotlin/collections/ArrayDeque.class","name":"kotlin/collections/ArrayDeque.class","size":20287,"crc":-1542396276},{"key":"kotlin/collections/ArraysKt.class","name":"kotlin/collections/ArraysKt.class","size":539,"crc":-1637339797},{"key":"kotlin/collections/ArraysKt__ArraysJVMKt.class","name":"kotlin/collections/ArraysKt__ArraysJVMKt.class","size":3654,"crc":-1904063147},{"key":"kotlin/collections/ArraysKt__ArraysKt.class","name":"kotlin/collections/ArraysKt__ArraysKt.class","size":8797,"crc":-508391002},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$1.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$1.class","size":2491,"crc":1692911251},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$2.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$2.class","size":2496,"crc":-1198056879},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$3.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$3.class","size":2457,"crc":-521582231},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$4.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$4.class","size":2491,"crc":1566722559},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$5.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$5.class","size":4142,"crc":1518695577},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$6.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$6.class","size":4162,"crc":-525379243},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$7.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$7.class","size":2467,"crc":1000015347},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$8.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt$asList$8.class","size":2489,"crc":1961615083},{"key":"kotlin/collections/ArraysKt___ArraysJvmKt.class","name":"kotlin/collections/ArraysKt___ArraysJvmKt.class","size":78532,"crc":-1622883830},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1.class","size":2071,"crc":-44156590},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$2.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$2.class","size":2070,"crc":-1344237416},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$3.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$3.class","size":2073,"crc":1505550351},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$4.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$4.class","size":2075,"crc":-1722681993},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$5.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$5.class","size":2070,"crc":-207175006},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$6.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$6.class","size":2073,"crc":-1087950765},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$7.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$7.class","size":2076,"crc":-679837456},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$8.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$8.class","size":2079,"crc":891857750},{"key":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$9.class","name":"kotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$9.class","size":2080,"crc":-526375598},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$1.class","size":2025,"crc":471889687},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$2.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$2.class","size":2024,"crc":-700013094},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$3.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$3.class","size":2027,"crc":1093210536},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$4.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$4.class","size":2029,"crc":-1679513997},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$5.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$5.class","size":2024,"crc":-970010307},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$6.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$6.class","size":2027,"crc":-208897801},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$7.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$7.class","size":2030,"crc":776373468},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$8.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$8.class","size":2033,"crc":-681716823},{"key":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$9.class","name":"kotlin/collections/ArraysKt___ArraysKt$asSequence$$inlined$Sequence$9.class","size":2034,"crc":-1469718870},{"key":"kotlin/collections/ArraysKt___ArraysKt$groupingBy$1.class","name":"kotlin/collections/ArraysKt___ArraysKt$groupingBy$1.class","size":2173,"crc":1551394933},{"key":"kotlin/collections/ArraysKt___ArraysKt.class","name":"kotlin/collections/ArraysKt___ArraysKt.class","size":672232,"crc":-847959324},{"key":"kotlin/collections/BooleanIterator.class","name":"kotlin/collections/BooleanIterator.class","size":1342,"crc":-508203931},{"key":"kotlin/collections/ByteIterator.class","name":"kotlin/collections/ByteIterator.class","size":1321,"crc":-1836460752},{"key":"kotlin/collections/CharIterator.class","name":"kotlin/collections/CharIterator.class","size":1341,"crc":65765378},{"key":"kotlin/collections/CollectionsKt.class","name":"kotlin/collections/CollectionsKt.class","size":923,"crc":-462319590},{"key":"kotlin/collections/CollectionsKt__CollectionsJVMKt.class","name":"kotlin/collections/CollectionsKt__CollectionsJVMKt.class","size":7726,"crc":1846280269},{"key":"kotlin/collections/CollectionsKt__CollectionsKt$binarySearchBy$1.class","name":"kotlin/collections/CollectionsKt__CollectionsKt$binarySearchBy$1.class","size":2107,"crc":1106616659},{"key":"kotlin/collections/CollectionsKt__CollectionsKt.class","name":"kotlin/collections/CollectionsKt__CollectionsKt.class","size":16394,"crc":252140863},{"key":"kotlin/collections/CollectionsKt__IterablesKt$Iterable$1.class","name":"kotlin/collections/CollectionsKt__IterablesKt$Iterable$1.class","size":1849,"crc":1727614707},{"key":"kotlin/collections/CollectionsKt__IterablesKt.class","name":"kotlin/collections/CollectionsKt__IterablesKt.class","size":3904,"crc":2084538289},{"key":"kotlin/collections/CollectionsKt__IteratorsJVMKt$iterator$1.class","name":"kotlin/collections/CollectionsKt__IteratorsJVMKt$iterator$1.class","size":1644,"crc":1499745005},{"key":"kotlin/collections/CollectionsKt__IteratorsJVMKt.class","name":"kotlin/collections/CollectionsKt__IteratorsJVMKt.class","size":1330,"crc":1462354657},{"key":"kotlin/collections/CollectionsKt__IteratorsKt.class","name":"kotlin/collections/CollectionsKt__IteratorsKt.class","size":2352,"crc":1685254074},{"key":"kotlin/collections/CollectionsKt__MutableCollectionsJVMKt.class","name":"kotlin/collections/CollectionsKt__MutableCollectionsJVMKt.class","size":3708,"crc":1547857099},{"key":"kotlin/collections/CollectionsKt__MutableCollectionsKt.class","name":"kotlin/collections/CollectionsKt__MutableCollectionsKt.class","size":12481,"crc":938021924},{"key":"kotlin/collections/CollectionsKt__ReversedViewsKt.class","name":"kotlin/collections/CollectionsKt__ReversedViewsKt.class","size":3383,"crc":-710772650},{"key":"kotlin/collections/CollectionsKt___CollectionsJvmKt.class","name":"kotlin/collections/CollectionsKt___CollectionsJvmKt.class","size":10361,"crc":520180728},{"key":"kotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1.class","size":2037,"crc":990284568},{"key":"kotlin/collections/CollectionsKt___CollectionsKt$groupingBy$1.class","name":"kotlin/collections/CollectionsKt___CollectionsKt$groupingBy$1.class","size":2233,"crc":936451788},{"key":"kotlin/collections/CollectionsKt___CollectionsKt.class","name":"kotlin/collections/CollectionsKt___CollectionsKt.class","size":130570,"crc":-839163844},{"key":"kotlin/collections/DoubleIterator.class","name":"kotlin/collections/DoubleIterator.class","size":1335,"crc":-2038712628},{"key":"kotlin/collections/EmptyIterator.class","name":"kotlin/collections/EmptyIterator.class","size":2134,"crc":-600894504},{"key":"kotlin/collections/EmptyList.class","name":"kotlin/collections/EmptyList.class","size":6386,"crc":1210682634},{"key":"kotlin/collections/EmptyMap.class","name":"kotlin/collections/EmptyMap.class","size":4689,"crc":1593775982},{"key":"kotlin/collections/EmptySet.class","name":"kotlin/collections/EmptySet.class","size":3884,"crc":-2082987750},{"key":"kotlin/collections/FloatIterator.class","name":"kotlin/collections/FloatIterator.class","size":1328,"crc":270153532},{"key":"kotlin/collections/Grouping.class","name":"kotlin/collections/Grouping.class","size":837,"crc":-228092223},{"key":"kotlin/collections/GroupingKt.class","name":"kotlin/collections/GroupingKt.class","size":460,"crc":1535227795},{"key":"kotlin/collections/GroupingKt__GroupingJVMKt.class","name":"kotlin/collections/GroupingKt__GroupingJVMKt.class","size":6012,"crc":-1097531510},{"key":"kotlin/collections/GroupingKt__GroupingKt.class","name":"kotlin/collections/GroupingKt__GroupingKt.class","size":14396,"crc":-1563760491},{"key":"kotlin/collections/IndexedValue.class","name":"kotlin/collections/IndexedValue.class","size":2807,"crc":-29234203},{"key":"kotlin/collections/IndexingIterable.class","name":"kotlin/collections/IndexingIterable.class","size":1858,"crc":2072909410},{"key":"kotlin/collections/IndexingIterator.class","name":"kotlin/collections/IndexingIterator.class","size":2195,"crc":-475853869},{"key":"kotlin/collections/IntIterator.class","name":"kotlin/collections/IntIterator.class","size":1330,"crc":-104024471},{"key":"kotlin/collections/LongIterator.class","name":"kotlin/collections/LongIterator.class","size":1321,"crc":2126315459},{"key":"kotlin/collections/MapAccessorsKt.class","name":"kotlin/collections/MapAccessorsKt.class","size":2234,"crc":480688801},{"key":"kotlin/collections/MapWithDefault.class","name":"kotlin/collections/MapWithDefault.class","size":962,"crc":1826102782},{"key":"kotlin/collections/MapWithDefaultImpl.class","name":"kotlin/collections/MapWithDefaultImpl.class","size":5922,"crc":312146525},{"key":"kotlin/collections/MapsKt.class","name":"kotlin/collections/MapsKt.class","size":568,"crc":1508086211},{"key":"kotlin/collections/MapsKt__MapWithDefaultKt.class","name":"kotlin/collections/MapsKt__MapWithDefaultKt.class","size":4130,"crc":504243816},{"key":"kotlin/collections/MapsKt__MapsJVMKt.class","name":"kotlin/collections/MapsKt__MapsJVMKt.class","size":9125,"crc":1018164472},{"key":"kotlin/collections/MapsKt__MapsKt.class","name":"kotlin/collections/MapsKt__MapsKt.class","size":33434,"crc":-1083456230},{"key":"kotlin/collections/MapsKt___MapsJvmKt.class","name":"kotlin/collections/MapsKt___MapsJvmKt.class","size":4136,"crc":1331102020},{"key":"kotlin/collections/MapsKt___MapsKt.class","name":"kotlin/collections/MapsKt___MapsKt.class","size":29113,"crc":1498924712},{"key":"kotlin/collections/MovingSubList.class","name":"kotlin/collections/MovingSubList.class","size":2158,"crc":140750078},{"key":"kotlin/collections/MutableMapWithDefault.class","name":"kotlin/collections/MutableMapWithDefault.class","size":984,"crc":1639416687},{"key":"kotlin/collections/MutableMapWithDefaultImpl.class","name":"kotlin/collections/MutableMapWithDefaultImpl.class","size":6021,"crc":-1000516809},{"key":"kotlin/collections/ReversedList$listIterator$1.class","name":"kotlin/collections/ReversedList$listIterator$1.class","size":2920,"crc":-777064700},{"key":"kotlin/collections/ReversedList.class","name":"kotlin/collections/ReversedList.class","size":3271,"crc":-1501122477},{"key":"kotlin/collections/ReversedListReadOnly$listIterator$1.class","name":"kotlin/collections/ReversedListReadOnly$listIterator$1.class","size":2935,"crc":-516320673},{"key":"kotlin/collections/ReversedListReadOnly.class","name":"kotlin/collections/ReversedListReadOnly.class","size":2549,"crc":449322990},{"key":"kotlin/collections/RingBuffer$iterator$1.class","name":"kotlin/collections/RingBuffer$iterator$1.class","size":2414,"crc":2056354238},{"key":"kotlin/collections/RingBuffer.class","name":"kotlin/collections/RingBuffer.class","size":7028,"crc":-121190939},{"key":"kotlin/collections/SetsKt.class","name":"kotlin/collections/SetsKt.class","size":476,"crc":1537590887},{"key":"kotlin/collections/SetsKt__SetsJVMKt.class","name":"kotlin/collections/SetsKt__SetsJVMKt.class","size":4083,"crc":604600193},{"key":"kotlin/collections/SetsKt__SetsKt.class","name":"kotlin/collections/SetsKt__SetsKt.class","size":5764,"crc":1613821275},{"key":"kotlin/collections/SetsKt___SetsKt.class","name":"kotlin/collections/SetsKt___SetsKt.class","size":6687,"crc":1775046634},{"key":"kotlin/collections/ShortIterator.class","name":"kotlin/collections/ShortIterator.class","size":1328,"crc":1521792139},{"key":"kotlin/collections/SlidingWindowKt$windowedIterator$1.class","name":"kotlin/collections/SlidingWindowKt$windowedIterator$1.class","size":6590,"crc":-655554576},{"key":"kotlin/collections/SlidingWindowKt$windowedSequence$$inlined$Sequence$1.class","name":"kotlin/collections/SlidingWindowKt$windowedSequence$$inlined$Sequence$1.class","size":2270,"crc":2041651307},{"key":"kotlin/collections/SlidingWindowKt.class","name":"kotlin/collections/SlidingWindowKt.class","size":3037,"crc":1159662581},{"key":"kotlin/collections/State.class","name":"kotlin/collections/State.class","size":894,"crc":436293220},{"key":"kotlin/collections/TypeAliasesKt.class","name":"kotlin/collections/TypeAliasesKt.class","size":1480,"crc":-1780679160},{"key":"kotlin/collections/UArraySortingKt.class","name":"kotlin/collections/UArraySortingKt.class","size":4790,"crc":-853840792},{"key":"kotlin/collections/UCollectionsKt.class","name":"kotlin/collections/UCollectionsKt.class","size":467,"crc":849963116},{"key":"kotlin/collections/UCollectionsKt___UCollectionsKt.class","name":"kotlin/collections/UCollectionsKt___UCollectionsKt.class","size":4744,"crc":284946618},{"key":"kotlin/collections/collections.kotlin_builtins","name":"kotlin/collections/collections.kotlin_builtins","size":8308,"crc":327658458},{"key":"kotlin/collections/builders/AbstractMapBuilderEntrySet.class","name":"kotlin/collections/builders/AbstractMapBuilderEntrySet.class","size":1863,"crc":-1014180743},{"key":"kotlin/collections/builders/ListBuilder$BuilderSubList$Itr.class","name":"kotlin/collections/builders/ListBuilder$BuilderSubList$Itr.class","size":5027,"crc":-1675119993},{"key":"kotlin/collections/builders/ListBuilder$BuilderSubList.class","name":"kotlin/collections/builders/ListBuilder$BuilderSubList.class","size":13243,"crc":-1727511757},{"key":"kotlin/collections/builders/ListBuilder$Companion.class","name":"kotlin/collections/builders/ListBuilder$Companion.class","size":925,"crc":-1675680850},{"key":"kotlin/collections/builders/ListBuilder$Itr.class","name":"kotlin/collections/builders/ListBuilder$Itr.class","size":4489,"crc":-74740294},{"key":"kotlin/collections/builders/ListBuilder.class","name":"kotlin/collections/builders/ListBuilder.class","size":14096,"crc":1430147215},{"key":"kotlin/collections/builders/ListBuilderKt.class","name":"kotlin/collections/builders/ListBuilderKt.class","size":5085,"crc":-1674050423},{"key":"kotlin/collections/builders/MapBuilder$Companion.class","name":"kotlin/collections/builders/MapBuilder$Companion.class","size":2039,"crc":-806799840},{"key":"kotlin/collections/builders/MapBuilder$EntriesItr.class","name":"kotlin/collections/builders/MapBuilder$EntriesItr.class","size":3941,"crc":323329756},{"key":"kotlin/collections/builders/MapBuilder$EntryRef.class","name":"kotlin/collections/builders/MapBuilder$EntryRef.class","size":3843,"crc":1021437352},{"key":"kotlin/collections/builders/MapBuilder$Itr.class","name":"kotlin/collections/builders/MapBuilder$Itr.class","size":3922,"crc":2140388358},{"key":"kotlin/collections/builders/MapBuilder$KeysItr.class","name":"kotlin/collections/builders/MapBuilder$KeysItr.class","size":2270,"crc":1431836322},{"key":"kotlin/collections/builders/MapBuilder$ValuesItr.class","name":"kotlin/collections/builders/MapBuilder$ValuesItr.class","size":2331,"crc":843174007},{"key":"kotlin/collections/builders/MapBuilder.class","name":"kotlin/collections/builders/MapBuilder.class","size":20316,"crc":-407660365},{"key":"kotlin/collections/builders/MapBuilderEntries.class","name":"kotlin/collections/builders/MapBuilderEntries.class","size":4309,"crc":-1589756652},{"key":"kotlin/collections/builders/MapBuilderKeys.class","name":"kotlin/collections/builders/MapBuilderKeys.class","size":3399,"crc":-1951519414},{"key":"kotlin/collections/builders/MapBuilderValues.class","name":"kotlin/collections/builders/MapBuilderValues.class","size":3660,"crc":808939496},{"key":"kotlin/collections/builders/SerializedCollection$Companion.class","name":"kotlin/collections/builders/SerializedCollection$Companion.class","size":980,"crc":789565603},{"key":"kotlin/collections/builders/SerializedCollection.class","name":"kotlin/collections/builders/SerializedCollection.class","size":5031,"crc":-191724865},{"key":"kotlin/collections/builders/SerializedMap$Companion.class","name":"kotlin/collections/builders/SerializedMap$Companion.class","size":884,"crc":281162872},{"key":"kotlin/collections/builders/SerializedMap.class","name":"kotlin/collections/builders/SerializedMap.class","size":3873,"crc":-595999774},{"key":"kotlin/collections/builders/SetBuilder$Companion.class","name":"kotlin/collections/builders/SetBuilder$Companion.class","size":920,"crc":1070593506},{"key":"kotlin/collections/builders/SetBuilder.class","name":"kotlin/collections/builders/SetBuilder.class","size":5350,"crc":-164794860},{"key":"kotlin/collections/unsigned/UArraysKt.class","name":"kotlin/collections/unsigned/UArraysKt.class","size":523,"crc":-1065675903},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$1.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$1.class","size":2691,"crc":-464636824},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$2.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$2.class","size":2725,"crc":-1156796515},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$3.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$3.class","size":2725,"crc":1096133492},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$4.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt$asList$4.class","size":2730,"crc":-291481156},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysJvmKt.class","size":21905,"crc":-440549912},{"key":"kotlin/collections/unsigned/UArraysKt___UArraysKt.class","name":"kotlin/collections/unsigned/UArraysKt___UArraysKt.class","size":308587,"crc":413233185},{"key":"kotlin/comparisons/ComparisonsKt.class","name":"kotlin/comparisons/ComparisonsKt.class","size":533,"crc":1126907249},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareBy$2.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareBy$2.class","size":1879,"crc":231416385},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareBy$3.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareBy$3.class","size":1893,"crc":859797545},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareByDescending$1.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareByDescending$1.class","size":1929,"crc":1582161830},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareByDescending$2.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$compareByDescending$2.class","size":1943,"crc":1731607216},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenBy$1.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenBy$1.class","size":2157,"crc":-1549119441},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenBy$2.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenBy$2.class","size":2135,"crc":1167298737},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenByDescending$1.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenByDescending$1.class","size":2217,"crc":-1867771380},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenByDescending$2.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenByDescending$2.class","size":2195,"crc":1981369875},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenComparator$1.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt$thenComparator$1.class","size":2110,"crc":-905751859},{"key":"kotlin/comparisons/ComparisonsKt__ComparisonsKt.class","name":"kotlin/comparisons/ComparisonsKt__ComparisonsKt.class","size":13118,"crc":-182769456},{"key":"kotlin/comparisons/ComparisonsKt___ComparisonsJvmKt.class","name":"kotlin/comparisons/ComparisonsKt___ComparisonsJvmKt.class","size":9183,"crc":677243048},{"key":"kotlin/comparisons/ComparisonsKt___ComparisonsKt.class","name":"kotlin/comparisons/ComparisonsKt___ComparisonsKt.class","size":3211,"crc":1753444854},{"key":"kotlin/comparisons/NaturalOrderComparator.class","name":"kotlin/comparisons/NaturalOrderComparator.class","size":2039,"crc":-744204313},{"key":"kotlin/comparisons/ReverseOrderComparator.class","name":"kotlin/comparisons/ReverseOrderComparator.class","size":2039,"crc":1104482694},{"key":"kotlin/comparisons/ReversedComparator.class","name":"kotlin/comparisons/ReversedComparator.class","size":1752,"crc":1898284572},{"key":"kotlin/comparisons/UComparisonsKt.class","name":"kotlin/comparisons/UComparisonsKt.class","size":467,"crc":164237226},{"key":"kotlin/comparisons/UComparisonsKt___UComparisonsKt.class","name":"kotlin/comparisons/UComparisonsKt___UComparisonsKt.class","size":6572,"crc":-1351345183},{"key":"kotlin/concurrent/LocksKt.class","name":"kotlin/concurrent/LocksKt.class","size":3789,"crc":2044277944},{"key":"kotlin/concurrent/ThreadsKt$thread$thread$1.class","name":"kotlin/concurrent/ThreadsKt$thread$thread$1.class","size":1167,"crc":1813569414},{"key":"kotlin/concurrent/ThreadsKt.class","name":"kotlin/concurrent/ThreadsKt.class","size":3404,"crc":-935880296},{"key":"kotlin/concurrent/TimersKt$timerTask$1.class","name":"kotlin/concurrent/TimersKt$timerTask$1.class","size":1521,"crc":1558429878},{"key":"kotlin/concurrent/TimersKt.class","name":"kotlin/concurrent/TimersKt.class","size":6962,"crc":-1563040830},{"key":"kotlin/concurrent/VolatileKt.class","name":"kotlin/concurrent/VolatileKt.class","size":542,"crc":2095936555},{"key":"kotlin/concurrent/atomics/AtomicArraysKt.class","name":"kotlin/concurrent/atomics/AtomicArraysKt.class","size":520,"crc":684798684},{"key":"kotlin/concurrent/atomics/AtomicArraysKt__AtomicArrays_commonKt.class","name":"kotlin/concurrent/atomics/AtomicArraysKt__AtomicArrays_commonKt.class","size":5019,"crc":1030486368},{"key":"kotlin/concurrent/atomics/AtomicArraysKt__AtomicArrays_jvmKt.class","name":"kotlin/concurrent/atomics/AtomicArraysKt__AtomicArrays_jvmKt.class","size":2640,"crc":-1408302891},{"key":"kotlin/concurrent/atomics/AtomicsKt.class","name":"kotlin/concurrent/atomics/AtomicsKt.class","size":490,"crc":841119141},{"key":"kotlin/concurrent/atomics/AtomicsKt__Atomics_commonKt.class","name":"kotlin/concurrent/atomics/AtomicsKt__Atomics_commonKt.class","size":3326,"crc":347393141},{"key":"kotlin/concurrent/atomics/AtomicsKt__Atomics_jvmKt.class","name":"kotlin/concurrent/atomics/AtomicsKt__Atomics_jvmKt.class","size":2965,"crc":-879446116},{"key":"kotlin/concurrent/atomics/ExperimentalAtomicApi.class","name":"kotlin/concurrent/atomics/ExperimentalAtomicApi.class","size":1442,"crc":-1075744654},{"key":"kotlin/concurrent/atomics/atomics.kotlin_builtins","name":"kotlin/concurrent/atomics/atomics.kotlin_builtins","size":2674,"crc":1252866643},{"key":"kotlin/concurrent/internal/AtomicIntrinsicsKt.class","name":"kotlin/concurrent/internal/AtomicIntrinsicsKt.class","size":4280,"crc":199858775},{"key":"kotlin/contracts/CallsInPlace.class","name":"kotlin/contracts/CallsInPlace.class","size":573,"crc":155066332},{"key":"kotlin/contracts/ConditionalEffect.class","name":"kotlin/contracts/ConditionalEffect.class","size":583,"crc":49832771},{"key":"kotlin/contracts/ContractBuilder$DefaultImpls.class","name":"kotlin/contracts/ContractBuilder$DefaultImpls.class","size":1011,"crc":-332978805},{"key":"kotlin/contracts/ContractBuilder.class","name":"kotlin/contracts/ContractBuilder.class","size":1591,"crc":-1960966650},{"key":"kotlin/contracts/ContractBuilderKt.class","name":"kotlin/contracts/ContractBuilderKt.class","size":1117,"crc":2136943133},{"key":"kotlin/contracts/Effect.class","name":"kotlin/contracts/Effect.class","size":506,"crc":515566834},{"key":"kotlin/contracts/ExperimentalContracts.class","name":"kotlin/contracts/ExperimentalContracts.class","size":813,"crc":31643680},{"key":"kotlin/contracts/InvocationKind.class","name":"kotlin/contracts/InvocationKind.class","size":2102,"crc":2100812545},{"key":"kotlin/contracts/Returns.class","name":"kotlin/contracts/Returns.class","size":575,"crc":1334465765},{"key":"kotlin/contracts/ReturnsNotNull.class","name":"kotlin/contracts/ReturnsNotNull.class","size":589,"crc":-673871612},{"key":"kotlin/contracts/SimpleEffect.class","name":"kotlin/contracts/SimpleEffect.class","size":799,"crc":-1265247981},{"key":"kotlin/coroutines/AbstractCoroutineContextElement.class","name":"kotlin/coroutines/AbstractCoroutineContextElement.class","size":3449,"crc":-1529271207},{"key":"kotlin/coroutines/AbstractCoroutineContextKey.class","name":"kotlin/coroutines/AbstractCoroutineContextKey.class","size":2999,"crc":1208942673},{"key":"kotlin/coroutines/CombinedContext$Serialized$Companion.class","name":"kotlin/coroutines/CombinedContext$Serialized$Companion.class","size":963,"crc":-913305886},{"key":"kotlin/coroutines/CombinedContext$Serialized.class","name":"kotlin/coroutines/CombinedContext$Serialized.class","size":3187,"crc":-638303388},{"key":"kotlin/coroutines/CombinedContext.class","name":"kotlin/coroutines/CombinedContext.class","size":8315,"crc":-1924597084},{"key":"kotlin/coroutines/Continuation.class","name":"kotlin/coroutines/Continuation.class","size":913,"crc":-234888218},{"key":"kotlin/coroutines/ContinuationInterceptor$DefaultImpls.class","name":"kotlin/coroutines/ContinuationInterceptor$DefaultImpls.class","size":4079,"crc":435253908},{"key":"kotlin/coroutines/ContinuationInterceptor$Key.class","name":"kotlin/coroutines/ContinuationInterceptor$Key.class","size":1043,"crc":1983771101},{"key":"kotlin/coroutines/ContinuationInterceptor.class","name":"kotlin/coroutines/ContinuationInterceptor.class","size":2323,"crc":-153553047},{"key":"kotlin/coroutines/ContinuationKt$Continuation$1.class","name":"kotlin/coroutines/ContinuationKt$Continuation$1.class","size":2303,"crc":479953940},{"key":"kotlin/coroutines/ContinuationKt.class","name":"kotlin/coroutines/ContinuationKt.class","size":6811,"crc":1854751974},{"key":"kotlin/coroutines/CoroutineContext$DefaultImpls.class","name":"kotlin/coroutines/CoroutineContext$DefaultImpls.class","size":2923,"crc":234955245},{"key":"kotlin/coroutines/CoroutineContext$Element$DefaultImpls.class","name":"kotlin/coroutines/CoroutineContext$Element$DefaultImpls.class","size":3205,"crc":1504820592},{"key":"kotlin/coroutines/CoroutineContext$Element.class","name":"kotlin/coroutines/CoroutineContext$Element.class","size":1928,"crc":625857247},{"key":"kotlin/coroutines/CoroutineContext$Key.class","name":"kotlin/coroutines/CoroutineContext$Key.class","size":684,"crc":-201944483},{"key":"kotlin/coroutines/CoroutineContext.class","name":"kotlin/coroutines/CoroutineContext.class","size":1991,"crc":-1143016419},{"key":"kotlin/coroutines/CoroutineContextImplKt.class","name":"kotlin/coroutines/CoroutineContextImplKt.class","size":2701,"crc":468388887},{"key":"kotlin/coroutines/EmptyCoroutineContext.class","name":"kotlin/coroutines/EmptyCoroutineContext.class","size":3276,"crc":882068071},{"key":"kotlin/coroutines/RestrictsSuspension.class","name":"kotlin/coroutines/RestrictsSuspension.class","size":885,"crc":1486746068},{"key":"kotlin/coroutines/SafeContinuation$Companion.class","name":"kotlin/coroutines/SafeContinuation$Companion.class","size":1157,"crc":937968371},{"key":"kotlin/coroutines/SafeContinuation.class","name":"kotlin/coroutines/SafeContinuation.class","size":4789,"crc":-1443929962},{"key":"kotlin/coroutines/coroutines.kotlin_builtins","name":"kotlin/coroutines/coroutines.kotlin_builtins","size":137,"crc":1360136731},{"key":"kotlin/coroutines/cancellation/CancellationExceptionKt.class","name":"kotlin/coroutines/cancellation/CancellationExceptionKt.class","size":2328,"crc":1746396738},{"key":"kotlin/coroutines/intrinsics/CoroutineSingletons.class","name":"kotlin/coroutines/intrinsics/CoroutineSingletons.class","size":2041,"crc":1796530784},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt.class","size":512,"crc":-2011932098},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$1.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$1.class","size":2962,"crc":4371562},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$2.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineFromSuspendFunction$2.class","size":3111,"crc":-1527455024},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$1.class","size":3806,"crc":-947852834},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$2.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$2.class","size":3919,"crc":-1977374684},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$3.class","size":4042,"crc":1365027032},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$4.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createCoroutineUnintercepted$$inlined$createCoroutineFromSuspendFunction$IntrinsicsKt__IntrinsicsJvmKt$4.class","size":4156,"crc":1808889214},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createSimpleCoroutineForSuspendFunction$1.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createSimpleCoroutineForSuspendFunction$1.class","size":1681,"crc":-897448915},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createSimpleCoroutineForSuspendFunction$2.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt$createSimpleCoroutineForSuspendFunction$2.class","size":1794,"crc":-1360125908},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt.class","size":10652,"crc":694844132},{"key":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt.class","name":"kotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt.class","size":1912,"crc":-1955733620},{"key":"kotlin/coroutines/jvm/internal/BaseContinuationImpl.class","name":"kotlin/coroutines/jvm/internal/BaseContinuationImpl.class","size":5349,"crc":1399112197},{"key":"kotlin/coroutines/jvm/internal/Boxing.class","name":"kotlin/coroutines/jvm/internal/Boxing.class","size":2353,"crc":1772995913},{"key":"kotlin/coroutines/jvm/internal/CompletedContinuation.class","name":"kotlin/coroutines/jvm/internal/CompletedContinuation.class","size":1665,"crc":44987011},{"key":"kotlin/coroutines/jvm/internal/ContinuationImpl.class","name":"kotlin/coroutines/jvm/internal/ContinuationImpl.class","size":3760,"crc":1824531660},{"key":"kotlin/coroutines/jvm/internal/CoroutineStackFrame.class","name":"kotlin/coroutines/jvm/internal/CoroutineStackFrame.class","size":805,"crc":-608215596},{"key":"kotlin/coroutines/jvm/internal/DebugMetadata.class","name":"kotlin/coroutines/jvm/internal/DebugMetadata.class","size":1730,"crc":-683943283},{"key":"kotlin/coroutines/jvm/internal/DebugMetadataKt.class","name":"kotlin/coroutines/jvm/internal/DebugMetadataKt.class","size":5650,"crc":-1954868895},{"key":"kotlin/coroutines/jvm/internal/DebugProbesKt.class","name":"kotlin/coroutines/jvm/internal/DebugProbesKt.class","size":1441,"crc":-1680056492},{"key":"kotlin/coroutines/jvm/internal/GeneratedCodeMarkers.class","name":"kotlin/coroutines/jvm/internal/GeneratedCodeMarkers.class","size":1293,"crc":1973541810},{"key":"kotlin/coroutines/jvm/internal/ModuleNameRetriever$Cache.class","name":"kotlin/coroutines/jvm/internal/ModuleNameRetriever$Cache.class","size":1264,"crc":-1571073368},{"key":"kotlin/coroutines/jvm/internal/ModuleNameRetriever.class","name":"kotlin/coroutines/jvm/internal/ModuleNameRetriever.class","size":3881,"crc":-377834002},{"key":"kotlin/coroutines/jvm/internal/RestrictedContinuationImpl.class","name":"kotlin/coroutines/jvm/internal/RestrictedContinuationImpl.class","size":2000,"crc":-246532496},{"key":"kotlin/coroutines/jvm/internal/RestrictedSuspendLambda.class","name":"kotlin/coroutines/jvm/internal/RestrictedSuspendLambda.class","size":2371,"crc":1337256447},{"key":"kotlin/coroutines/jvm/internal/RunSuspend.class","name":"kotlin/coroutines/jvm/internal/RunSuspend.class","size":2783,"crc":2115617545},{"key":"kotlin/coroutines/jvm/internal/RunSuspendKt.class","name":"kotlin/coroutines/jvm/internal/RunSuspendKt.class","size":1428,"crc":-1201401450},{"key":"kotlin/coroutines/jvm/internal/SpillingKt.class","name":"kotlin/coroutines/jvm/internal/SpillingKt.class","size":700,"crc":-1034331864},{"key":"kotlin/coroutines/jvm/internal/SuspendFunction.class","name":"kotlin/coroutines/jvm/internal/SuspendFunction.class","size":478,"crc":-1633219434},{"key":"kotlin/coroutines/jvm/internal/SuspendLambda.class","name":"kotlin/coroutines/jvm/internal/SuspendLambda.class","size":2321,"crc":-672120496},{"key":"kotlin/enums/EnumEntries.class","name":"kotlin/enums/EnumEntries.class","size":800,"crc":1309015420},{"key":"kotlin/enums/EnumEntriesJVMKt.class","name":"kotlin/enums/EnumEntriesJVMKt.class","size":868,"crc":508210568},{"key":"kotlin/enums/EnumEntriesKt.class","name":"kotlin/enums/EnumEntriesKt.class","size":2115,"crc":1200226041},{"key":"kotlin/enums/EnumEntriesList.class","name":"kotlin/enums/EnumEntriesList.class","size":3805,"crc":-1943861090},{"key":"kotlin/enums/EnumEntriesSerializationProxy$Companion.class","name":"kotlin/enums/EnumEntriesSerializationProxy$Companion.class","size":906,"crc":1518500475},{"key":"kotlin/enums/EnumEntriesSerializationProxy.class","name":"kotlin/enums/EnumEntriesSerializationProxy.class","size":2143,"crc":-1994656396},{"key":"kotlin/experimental/BitwiseOperationsKt.class","name":"kotlin/experimental/BitwiseOperationsKt.class","size":1498,"crc":804947948},{"key":"kotlin/experimental/ExpectRefinement.class","name":"kotlin/experimental/ExpectRefinement.class","size":928,"crc":-406428372},{"key":"kotlin/experimental/ExperimentalNativeApi.class","name":"kotlin/experimental/ExperimentalNativeApi.class","size":1430,"crc":-1961196514},{"key":"kotlin/experimental/ExperimentalObjCName.class","name":"kotlin/experimental/ExperimentalObjCName.class","size":1041,"crc":-1969085273},{"key":"kotlin/experimental/ExperimentalObjCRefinement.class","name":"kotlin/experimental/ExperimentalObjCRefinement.class","size":1059,"crc":-1854755186},{"key":"kotlin/experimental/ExperimentalTypeInference.class","name":"kotlin/experimental/ExperimentalTypeInference.class","size":1197,"crc":342797367},{"key":"kotlin/internal/AccessibleLateinitPropertyLiteral.class","name":"kotlin/internal/AccessibleLateinitPropertyLiteral.class","size":931,"crc":-1651726416},{"key":"kotlin/internal/ContractsDsl.class","name":"kotlin/internal/ContractsDsl.class","size":677,"crc":1533494302},{"key":"kotlin/internal/DynamicExtension.class","name":"kotlin/internal/DynamicExtension.class","size":817,"crc":-946366799},{"key":"kotlin/internal/Exact.class","name":"kotlin/internal/Exact.class","size":724,"crc":884638363},{"key":"kotlin/internal/HidesMembers.class","name":"kotlin/internal/HidesMembers.class","size":809,"crc":1078808629},{"key":"kotlin/internal/InlineOnly.class","name":"kotlin/internal/InlineOnly.class","size":851,"crc":1801468400},{"key":"kotlin/internal/IntrinsicConstEvaluation.class","name":"kotlin/internal/IntrinsicConstEvaluation.class","size":950,"crc":-1139531332},{"key":"kotlin/internal/JvmBuiltin.class","name":"kotlin/internal/JvmBuiltin.class","size":726,"crc":-264661724},{"key":"kotlin/internal/LowPriorityInOverloadResolution.class","name":"kotlin/internal/LowPriorityInOverloadResolution.class","size":871,"crc":-1965371873},{"key":"kotlin/internal/NoInfer.class","name":"kotlin/internal/NoInfer.class","size":728,"crc":-134603213},{"key":"kotlin/internal/OnlyInputTypes.class","name":"kotlin/internal/OnlyInputTypes.class","size":752,"crc":1505635450},{"key":"kotlin/internal/PlatformDependent.class","name":"kotlin/internal/PlatformDependent.class","size":810,"crc":1546085225},{"key":"kotlin/internal/PlatformImplementations$ReflectThrowable.class","name":"kotlin/internal/PlatformImplementations$ReflectThrowable.class","size":2785,"crc":-69243658},{"key":"kotlin/internal/PlatformImplementations.class","name":"kotlin/internal/PlatformImplementations.class","size":3649,"crc":1853402763},{"key":"kotlin/internal/PlatformImplementationsKt.class","name":"kotlin/internal/PlatformImplementationsKt.class","size":2651,"crc":1890380977},{"key":"kotlin/internal/ProgressionUtilKt.class","name":"kotlin/internal/ProgressionUtilKt.class","size":1704,"crc":-1149182220},{"key":"kotlin/internal/PureReifiable.class","name":"kotlin/internal/PureReifiable.class","size":757,"crc":368542628},{"key":"kotlin/internal/RequireKotlin$Container.class","name":"kotlin/internal/RequireKotlin$Container.class","size":930,"crc":-1071349828},{"key":"kotlin/internal/RequireKotlin.class","name":"kotlin/internal/RequireKotlin.class","size":1769,"crc":-1456652940},{"key":"kotlin/internal/RequireKotlinVersionKind.class","name":"kotlin/internal/RequireKotlinVersionKind.class","size":1974,"crc":616057281},{"key":"kotlin/internal/SerializationUtilKt.class","name":"kotlin/internal/SerializationUtilKt.class","size":737,"crc":1991789605},{"key":"kotlin/internal/SuppressBytecodeGeneration.class","name":"kotlin/internal/SuppressBytecodeGeneration.class","size":758,"crc":1284751501},{"key":"kotlin/internal/UProgressionUtilKt.class","name":"kotlin/internal/UProgressionUtilKt.class","size":2137,"crc":1841018068},{"key":"kotlin/internal/internal.kotlin_builtins","name":"kotlin/internal/internal.kotlin_builtins","size":590,"crc":-739093672},{"key":"kotlin/io/AccessDeniedException.class","name":"kotlin/io/AccessDeniedException.class","size":1239,"crc":-907985078},{"key":"kotlin/io/ByteStreamsKt$iterator$1.class","name":"kotlin/io/ByteStreamsKt$iterator$1.class","size":2283,"crc":149480610},{"key":"kotlin/io/ByteStreamsKt.class","name":"kotlin/io/ByteStreamsKt.class","size":8270,"crc":-970865103},{"key":"kotlin/io/CloseableKt.class","name":"kotlin/io/CloseableKt.class","size":2195,"crc":1392542895},{"key":"kotlin/io/ConsoleKt.class","name":"kotlin/io/ConsoleKt.class","size":4288,"crc":-385529758},{"key":"kotlin/io/ConstantsKt.class","name":"kotlin/io/ConstantsKt.class","size":596,"crc":-1659818074},{"key":"kotlin/io/ExceptionsKt.class","name":"kotlin/io/ExceptionsKt.class","size":1353,"crc":1623342692},{"key":"kotlin/io/ExposingBufferByteArrayOutputStream.class","name":"kotlin/io/ExposingBufferByteArrayOutputStream.class","size":990,"crc":1155803584},{"key":"kotlin/io/FileAlreadyExistsException.class","name":"kotlin/io/FileAlreadyExistsException.class","size":1249,"crc":-943478023},{"key":"kotlin/io/FilePathComponents.class","name":"kotlin/io/FilePathComponents.class","size":4417,"crc":-2053562200},{"key":"kotlin/io/FileSystemException.class","name":"kotlin/io/FileSystemException.class","size":1905,"crc":29273748},{"key":"kotlin/io/FileTreeWalk$DirectoryState.class","name":"kotlin/io/FileTreeWalk$DirectoryState.class","size":1797,"crc":104315557},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$BottomUpDirectoryState.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$BottomUpDirectoryState.class","size":2902,"crc":-1298104313},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$SingleFileState.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$SingleFileState.class","size":2431,"crc":1189740185},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$TopDownDirectoryState.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$TopDownDirectoryState.class","size":2904,"crc":727986131},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$WhenMappings.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator$WhenMappings.class","size":837,"crc":-1973326227},{"key":"kotlin/io/FileTreeWalk$FileTreeWalkIterator.class","name":"kotlin/io/FileTreeWalk$FileTreeWalkIterator.class","size":3517,"crc":1006061075},{"key":"kotlin/io/FileTreeWalk$WalkState.class","name":"kotlin/io/FileTreeWalk$WalkState.class","size":1148,"crc":-350822373},{"key":"kotlin/io/FileTreeWalk.class","name":"kotlin/io/FileTreeWalk.class","size":6111,"crc":-994346204},{"key":"kotlin/io/FileWalkDirection.class","name":"kotlin/io/FileWalkDirection.class","size":1748,"crc":895972176},{"key":"kotlin/io/FilesKt.class","name":"kotlin/io/FilesKt.class","size":495,"crc":1729647545},{"key":"kotlin/io/FilesKt__FilePathComponentsKt.class","name":"kotlin/io/FilesKt__FilePathComponentsKt.class","size":5228,"crc":993176778},{"key":"kotlin/io/FilesKt__FileReadWriteKt.class","name":"kotlin/io/FilesKt__FileReadWriteKt.class","size":19606,"crc":1794106149},{"key":"kotlin/io/FilesKt__FileTreeWalkKt.class","name":"kotlin/io/FilesKt__FileTreeWalkKt.class","size":1794,"crc":-553157274},{"key":"kotlin/io/FilesKt__UtilsKt$copyRecursively$1.class","name":"kotlin/io/FilesKt__UtilsKt$copyRecursively$1.class","size":1296,"crc":-254558392},{"key":"kotlin/io/FilesKt__UtilsKt.class","name":"kotlin/io/FilesKt__UtilsKt.class","size":17676,"crc":-356172764},{"key":"kotlin/io/LineReader.class","name":"kotlin/io/LineReader.class","size":5960,"crc":-1486591124},{"key":"kotlin/io/LinesSequence$iterator$1.class","name":"kotlin/io/LinesSequence$iterator$1.class","size":2015,"crc":-1733404678},{"key":"kotlin/io/LinesSequence.class","name":"kotlin/io/LinesSequence.class","size":1530,"crc":-293497238},{"key":"kotlin/io/NoSuchFileException.class","name":"kotlin/io/NoSuchFileException.class","size":1235,"crc":-1367963014},{"key":"kotlin/io/OnErrorAction.class","name":"kotlin/io/OnErrorAction.class","size":1709,"crc":1813728682},{"key":"kotlin/io/ReadAfterEOFException.class","name":"kotlin/io/ReadAfterEOFException.class","size":759,"crc":1167563816},{"key":"kotlin/io/SerializableKt.class","name":"kotlin/io/SerializableKt.class","size":438,"crc":712403874},{"key":"kotlin/io/TerminateException.class","name":"kotlin/io/TerminateException.class","size":929,"crc":-1340532955},{"key":"kotlin/io/TextStreamsKt.class","name":"kotlin/io/TextStreamsKt.class","size":9177,"crc":1218618180},{"key":"kotlin/io/encoding/Base64$Default.class","name":"kotlin/io/encoding/Base64$Default.class","size":2100,"crc":2139962234},{"key":"kotlin/io/encoding/Base64$PaddingOption.class","name":"kotlin/io/encoding/Base64$PaddingOption.class","size":2095,"crc":281915315},{"key":"kotlin/io/encoding/Base64.class","name":"kotlin/io/encoding/Base64.class","size":17293,"crc":-1645566122},{"key":"kotlin/io/encoding/Base64JVMKt.class","name":"kotlin/io/encoding/Base64JVMKt.class","size":2805,"crc":1805035289},{"key":"kotlin/io/encoding/Base64Kt.class","name":"kotlin/io/encoding/Base64Kt.class","size":4490,"crc":-48987470},{"key":"kotlin/io/encoding/DecodeInputStream.class","name":"kotlin/io/encoding/DecodeInputStream.class","size":5320,"crc":-1629216089},{"key":"kotlin/io/encoding/EncodeOutputStream.class","name":"kotlin/io/encoding/EncodeOutputStream.class","size":4674,"crc":-1967607078},{"key":"kotlin/io/encoding/ExperimentalEncodingApi.class","name":"kotlin/io/encoding/ExperimentalEncodingApi.class","size":1434,"crc":-1147309988},{"key":"kotlin/io/encoding/StreamEncodingKt.class","name":"kotlin/io/encoding/StreamEncodingKt.class","size":475,"crc":23692494},{"key":"kotlin/io/encoding/StreamEncodingKt__Base64IOStreamKt.class","name":"kotlin/io/encoding/StreamEncodingKt__Base64IOStreamKt.class","size":1801,"crc":-1562591150},{"key":"kotlin/jdk7/AutoCloseableKt$AutoCloseable$1.class","name":"kotlin/jdk7/AutoCloseableKt$AutoCloseable$1.class","size":1433,"crc":-1656440326},{"key":"kotlin/jdk7/AutoCloseableKt.class","name":"kotlin/jdk7/AutoCloseableKt.class","size":2975,"crc":-1581259870},{"key":"kotlin/js/ExperimentalJsCollectionsApi.class","name":"kotlin/js/ExperimentalJsCollectionsApi.class","size":1184,"crc":1871931588},{"key":"kotlin/js/ExperimentalJsExport.class","name":"kotlin/js/ExperimentalJsExport.class","size":949,"crc":1932930194},{"key":"kotlin/js/ExperimentalJsFileName.class","name":"kotlin/js/ExperimentalJsFileName.class","size":953,"crc":655036994},{"key":"kotlin/js/ExperimentalJsReflectionCreateInstance.class","name":"kotlin/js/ExperimentalJsReflectionCreateInstance.class","size":1439,"crc":-210282807},{"key":"kotlin/js/ExperimentalJsStatic.class","name":"kotlin/js/ExperimentalJsStatic.class","size":949,"crc":1507256026},{"key":"kotlin/jvm/ImplicitlyActualizedByJvmDeclaration.class","name":"kotlin/jvm/ImplicitlyActualizedByJvmDeclaration.class","size":1364,"crc":1370058598},{"key":"kotlin/jvm/JvmClassMappingKt.class","name":"kotlin/jvm/JvmClassMappingKt.class","size":7227,"crc":1970325516},{"key":"kotlin/jvm/JvmDefault.class","name":"kotlin/jvm/JvmDefault.class","size":967,"crc":-929703724},{"key":"kotlin/jvm/JvmDefaultWithCompatibility.class","name":"kotlin/jvm/JvmDefaultWithCompatibility.class","size":900,"crc":1976587707},{"key":"kotlin/jvm/JvmDefaultWithoutCompatibility.class","name":"kotlin/jvm/JvmDefaultWithoutCompatibility.class","size":891,"crc":-595518676},{"key":"kotlin/jvm/JvmExposeBoxed.class","name":"kotlin/jvm/JvmExposeBoxed.class","size":1205,"crc":1552042606},{"key":"kotlin/jvm/JvmField.class","name":"kotlin/jvm/JvmField.class","size":857,"crc":-593891055},{"key":"kotlin/jvm/JvmInline.class","name":"kotlin/jvm/JvmInline.class","size":945,"crc":-1375631561},{"key":"kotlin/jvm/JvmMultifileClass.class","name":"kotlin/jvm/JvmMultifileClass.class","size":824,"crc":938695781},{"key":"kotlin/jvm/JvmName.class","name":"kotlin/jvm/JvmName.class","size":1005,"crc":-988547633},{"key":"kotlin/jvm/JvmOverloads.class","name":"kotlin/jvm/JvmOverloads.class","size":901,"crc":1606137905},{"key":"kotlin/jvm/JvmPackageName.class","name":"kotlin/jvm/JvmPackageName.class","size":984,"crc":-2003905462},{"key":"kotlin/jvm/JvmRecord.class","name":"kotlin/jvm/JvmRecord.class","size":944,"crc":-38856453},{"key":"kotlin/jvm/JvmSerializableLambda.class","name":"kotlin/jvm/JvmSerializableLambda.class","size":837,"crc":1172538178},{"key":"kotlin/jvm/JvmStatic.class","name":"kotlin/jvm/JvmStatic.class","size":926,"crc":782499764},{"key":"kotlin/jvm/JvmSuppressWildcards.class","name":"kotlin/jvm/JvmSuppressWildcards.class","size":1035,"crc":2068718627},{"key":"kotlin/jvm/JvmSynthetic.class","name":"kotlin/jvm/JvmSynthetic.class","size":862,"crc":222280181},{"key":"kotlin/jvm/JvmWildcard.class","name":"kotlin/jvm/JvmWildcard.class","size":820,"crc":151587719},{"key":"kotlin/jvm/KotlinReflectionNotSupportedError.class","name":"kotlin/jvm/KotlinReflectionNotSupportedError.class","size":1343,"crc":-1229018892},{"key":"kotlin/jvm/PurelyImplements.class","name":"kotlin/jvm/PurelyImplements.class","size":940,"crc":1470014282},{"key":"kotlin/jvm/Strictfp.class","name":"kotlin/jvm/Strictfp.class","size":952,"crc":-1756727334},{"key":"kotlin/jvm/Synchronized.class","name":"kotlin/jvm/Synchronized.class","size":911,"crc":-1638999556},{"key":"kotlin/jvm/Throws.class","name":"kotlin/jvm/Throws.class","size":1087,"crc":719828304},{"key":"kotlin/jvm/Transient.class","name":"kotlin/jvm/Transient.class","size":847,"crc":1424915363},{"key":"kotlin/jvm/Volatile.class","name":"kotlin/jvm/Volatile.class","size":845,"crc":-441074404},{"key":"kotlin/jvm/functions/Function0.class","name":"kotlin/jvm/functions/Function0.class","size":584,"crc":-2126411220},{"key":"kotlin/jvm/functions/Function1.class","name":"kotlin/jvm/functions/Function1.class","size":661,"crc":628821178},{"key":"kotlin/jvm/functions/Function10.class","name":"kotlin/jvm/functions/Function10.class","size":1351,"crc":1578278441},{"key":"kotlin/jvm/functions/Function11.class","name":"kotlin/jvm/functions/Function11.class","size":1431,"crc":1415613999},{"key":"kotlin/jvm/functions/Function12.class","name":"kotlin/jvm/functions/Function12.class","size":1511,"crc":2106560574},{"key":"kotlin/jvm/functions/Function13.class","name":"kotlin/jvm/functions/Function13.class","size":1591,"crc":-770428710},{"key":"kotlin/jvm/functions/Function14.class","name":"kotlin/jvm/functions/Function14.class","size":1671,"crc":1324059657},{"key":"kotlin/jvm/functions/Function15.class","name":"kotlin/jvm/functions/Function15.class","size":1753,"crc":1473099258},{"key":"kotlin/jvm/functions/Function16.class","name":"kotlin/jvm/functions/Function16.class","size":1833,"crc":1911316098},{"key":"kotlin/jvm/functions/Function17.class","name":"kotlin/jvm/functions/Function17.class","size":1913,"crc":1125038599},{"key":"kotlin/jvm/functions/Function18.class","name":"kotlin/jvm/functions/Function18.class","size":1993,"crc":-1828502760},{"key":"kotlin/jvm/functions/Function19.class","name":"kotlin/jvm/functions/Function19.class","size":2073,"crc":-545053459},{"key":"kotlin/jvm/functions/Function2.class","name":"kotlin/jvm/functions/Function2.class","size":737,"crc":1500835897},{"key":"kotlin/jvm/functions/Function20.class","name":"kotlin/jvm/functions/Function20.class","size":2153,"crc":-298729055},{"key":"kotlin/jvm/functions/Function21.class","name":"kotlin/jvm/functions/Function21.class","size":2233,"crc":1348955472},{"key":"kotlin/jvm/functions/Function22.class","name":"kotlin/jvm/functions/Function22.class","size":2313,"crc":998335617},{"key":"kotlin/jvm/functions/Function3.class","name":"kotlin/jvm/functions/Function3.class","size":813,"crc":-697916234},{"key":"kotlin/jvm/functions/Function4.class","name":"kotlin/jvm/functions/Function4.class","size":889,"crc":-1715368219},{"key":"kotlin/jvm/functions/Function5.class","name":"kotlin/jvm/functions/Function5.class","size":965,"crc":1254424018},{"key":"kotlin/jvm/functions/Function6.class","name":"kotlin/jvm/functions/Function6.class","size":1041,"crc":273349241},{"key":"kotlin/jvm/functions/Function7.class","name":"kotlin/jvm/functions/Function7.class","size":1117,"crc":752645592},{"key":"kotlin/jvm/functions/Function8.class","name":"kotlin/jvm/functions/Function8.class","size":1193,"crc":1599407206},{"key":"kotlin/jvm/functions/Function9.class","name":"kotlin/jvm/functions/Function9.class","size":1269,"crc":88617229},{"key":"kotlin/jvm/functions/FunctionN.class","name":"kotlin/jvm/functions/FunctionN.class","size":1062,"crc":-535196467},{"key":"kotlin/jvm/internal/ArrayBooleanIterator.class","name":"kotlin/jvm/internal/ArrayBooleanIterator.class","size":1520,"crc":1476554303},{"key":"kotlin/jvm/internal/ArrayByteIterator.class","name":"kotlin/jvm/internal/ArrayByteIterator.class","size":1520,"crc":-938656154},{"key":"kotlin/jvm/internal/ArrayCharIterator.class","name":"kotlin/jvm/internal/ArrayCharIterator.class","size":1520,"crc":-988195106},{"key":"kotlin/jvm/internal/ArrayDoubleIterator.class","name":"kotlin/jvm/internal/ArrayDoubleIterator.class","size":1530,"crc":-1748742058},{"key":"kotlin/jvm/internal/ArrayFloatIterator.class","name":"kotlin/jvm/internal/ArrayFloatIterator.class","size":1525,"crc":-717601610},{"key":"kotlin/jvm/internal/ArrayIntIterator.class","name":"kotlin/jvm/internal/ArrayIntIterator.class","size":1506,"crc":507203862},{"key":"kotlin/jvm/internal/ArrayIterator.class","name":"kotlin/jvm/internal/ArrayIterator.class","size":2111,"crc":370306508},{"key":"kotlin/jvm/internal/ArrayIteratorKt.class","name":"kotlin/jvm/internal/ArrayIteratorKt.class","size":1013,"crc":-474848299},{"key":"kotlin/jvm/internal/ArrayIteratorsKt.class","name":"kotlin/jvm/internal/ArrayIteratorsKt.class","size":3104,"crc":-371498616},{"key":"kotlin/jvm/internal/ArrayLongIterator.class","name":"kotlin/jvm/internal/ArrayLongIterator.class","size":1520,"crc":1724046069},{"key":"kotlin/jvm/internal/ArrayShortIterator.class","name":"kotlin/jvm/internal/ArrayShortIterator.class","size":1525,"crc":-356913191},{"key":"kotlin/jvm/internal/BooleanCompanionObject.class","name":"kotlin/jvm/internal/BooleanCompanionObject.class","size":771,"crc":1217606555},{"key":"kotlin/jvm/internal/BooleanSpreadBuilder.class","name":"kotlin/jvm/internal/BooleanSpreadBuilder.class","size":1730,"crc":2039947757},{"key":"kotlin/jvm/internal/BoxingConstructorMarker.class","name":"kotlin/jvm/internal/BoxingConstructorMarker.class","size":617,"crc":-297779738},{"key":"kotlin/jvm/internal/ByteCompanionObject.class","name":"kotlin/jvm/internal/ByteCompanionObject.class","size":1200,"crc":417125143},{"key":"kotlin/jvm/internal/ByteSpreadBuilder.class","name":"kotlin/jvm/internal/ByteSpreadBuilder.class","size":1724,"crc":-1241760500},{"key":"kotlin/jvm/internal/CharCompanionObject.class","name":"kotlin/jvm/internal/CharCompanionObject.class","size":1733,"crc":1197107489},{"key":"kotlin/jvm/internal/CharSpreadBuilder.class","name":"kotlin/jvm/internal/CharSpreadBuilder.class","size":1724,"crc":641915835},{"key":"kotlin/jvm/internal/ClassBasedDeclarationContainer.class","name":"kotlin/jvm/internal/ClassBasedDeclarationContainer.class","size":737,"crc":-1703136834},{"key":"kotlin/jvm/internal/ClassReference$Companion.class","name":"kotlin/jvm/internal/ClassReference$Companion.class","size":13841,"crc":-1636481799},{"key":"kotlin/jvm/internal/ClassReference.class","name":"kotlin/jvm/internal/ClassReference.class","size":11218,"crc":1400559011},{"key":"kotlin/jvm/internal/CollectionToArray.class","name":"kotlin/jvm/internal/CollectionToArray.class","size":6287,"crc":-1313706287},{"key":"kotlin/jvm/internal/DoubleCompanionObject.class","name":"kotlin/jvm/internal/DoubleCompanionObject.class","size":2300,"crc":1276311675},{"key":"kotlin/jvm/internal/DoubleSpreadBuilder.class","name":"kotlin/jvm/internal/DoubleSpreadBuilder.class","size":1728,"crc":116257681},{"key":"kotlin/jvm/internal/EnumCompanionObject.class","name":"kotlin/jvm/internal/EnumCompanionObject.class","size":709,"crc":-1104458009},{"key":"kotlin/jvm/internal/FloatCompanionObject.class","name":"kotlin/jvm/internal/FloatCompanionObject.class","size":2273,"crc":277345342},{"key":"kotlin/jvm/internal/FloatSpreadBuilder.class","name":"kotlin/jvm/internal/FloatSpreadBuilder.class","size":1726,"crc":-1397486193},{"key":"kotlin/jvm/internal/FunctionBase.class","name":"kotlin/jvm/internal/FunctionBase.class","size":587,"crc":788502332},{"key":"kotlin/jvm/internal/IntCompanionObject.class","name":"kotlin/jvm/internal/IntCompanionObject.class","size":1188,"crc":1901647266},{"key":"kotlin/jvm/internal/IntSpreadBuilder.class","name":"kotlin/jvm/internal/IntSpreadBuilder.class","size":1701,"crc":-1333193191},{"key":"kotlin/jvm/internal/KTypeBase.class","name":"kotlin/jvm/internal/KTypeBase.class","size":670,"crc":1315133298},{"key":"kotlin/jvm/internal/Lambda.class","name":"kotlin/jvm/internal/Lambda.class","size":1442,"crc":-1042024201},{"key":"kotlin/jvm/internal/LocalVariableReference.class","name":"kotlin/jvm/internal/LocalVariableReference.class","size":1374,"crc":1172117313},{"key":"kotlin/jvm/internal/LocalVariableReferencesKt.class","name":"kotlin/jvm/internal/LocalVariableReferencesKt.class","size":672,"crc":403127725},{"key":"kotlin/jvm/internal/LongCompanionObject.class","name":"kotlin/jvm/internal/LongCompanionObject.class","size":1213,"crc":1816071463},{"key":"kotlin/jvm/internal/LongSpreadBuilder.class","name":"kotlin/jvm/internal/LongSpreadBuilder.class","size":1724,"crc":297689882},{"key":"kotlin/jvm/internal/MutableLocalVariableReference.class","name":"kotlin/jvm/internal/MutableLocalVariableReference.class","size":1728,"crc":1303429273},{"key":"kotlin/jvm/internal/PackageReference.class","name":"kotlin/jvm/internal/PackageReference.class","size":2675,"crc":1554582805},{"key":"kotlin/jvm/internal/PrimitiveSpreadBuilder.class","name":"kotlin/jvm/internal/PrimitiveSpreadBuilder.class","size":2698,"crc":-1594699815},{"key":"kotlin/jvm/internal/SerializedIr.class","name":"kotlin/jvm/internal/SerializedIr.class","size":1067,"crc":-543402362},{"key":"kotlin/jvm/internal/ShortCompanionObject.class","name":"kotlin/jvm/internal/ShortCompanionObject.class","size":1202,"crc":1298997689},{"key":"kotlin/jvm/internal/ShortSpreadBuilder.class","name":"kotlin/jvm/internal/ShortSpreadBuilder.class","size":1726,"crc":-1355202178},{"key":"kotlin/jvm/internal/SourceDebugExtension.class","name":"kotlin/jvm/internal/SourceDebugExtension.class","size":992,"crc":-1038475687},{"key":"kotlin/jvm/internal/StringCompanionObject.class","name":"kotlin/jvm/internal/StringCompanionObject.class","size":713,"crc":-1850570579},{"key":"kotlin/jvm/internal/TypeParameterReference$Companion$WhenMappings.class","name":"kotlin/jvm/internal/TypeParameterReference$Companion$WhenMappings.class","size":902,"crc":-1790451992},{"key":"kotlin/jvm/internal/TypeParameterReference$Companion.class","name":"kotlin/jvm/internal/TypeParameterReference$Companion.class","size":2200,"crc":1731738497},{"key":"kotlin/jvm/internal/TypeParameterReference.class","name":"kotlin/jvm/internal/TypeParameterReference.class","size":4716,"crc":1545508144},{"key":"kotlin/jvm/internal/TypeReference$Companion.class","name":"kotlin/jvm/internal/TypeReference$Companion.class","size":957,"crc":-1244341124},{"key":"kotlin/jvm/internal/TypeReference$WhenMappings.class","name":"kotlin/jvm/internal/TypeReference$WhenMappings.class","size":787,"crc":1122334066},{"key":"kotlin/jvm/internal/TypeReference.class","name":"kotlin/jvm/internal/TypeReference.class","size":8658,"crc":-1046498709},{"key":"kotlin/jvm/internal/markers/KMappedMarker.class","name":"kotlin/jvm/internal/markers/KMappedMarker.class","size":374,"crc":1705792186},{"key":"kotlin/jvm/internal/markers/KMutableCollection.class","name":"kotlin/jvm/internal/markers/KMutableCollection.class","size":481,"crc":1308301189},{"key":"kotlin/jvm/internal/markers/KMutableIterable.class","name":"kotlin/jvm/internal/markers/KMutableIterable.class","size":471,"crc":-220076026},{"key":"kotlin/jvm/internal/markers/KMutableIterator.class","name":"kotlin/jvm/internal/markers/KMutableIterator.class","size":471,"crc":1766922427},{"key":"kotlin/jvm/internal/markers/KMutableList.class","name":"kotlin/jvm/internal/markers/KMutableList.class","size":473,"crc":1599856730},{"key":"kotlin/jvm/internal/markers/KMutableListIterator.class","name":"kotlin/jvm/internal/markers/KMutableListIterator.class","size":485,"crc":-258005691},{"key":"kotlin/jvm/internal/markers/KMutableMap$Entry.class","name":"kotlin/jvm/internal/markers/KMutableMap$Entry.class","size":557,"crc":-1709527613},{"key":"kotlin/jvm/internal/markers/KMutableMap.class","name":"kotlin/jvm/internal/markers/KMutableMap.class","size":558,"crc":-985691368},{"key":"kotlin/jvm/internal/markers/KMutableSet.class","name":"kotlin/jvm/internal/markers/KMutableSet.class","size":471,"crc":-1768021493},{"key":"kotlin/jvm/internal/unsafe/MonitorKt.class","name":"kotlin/jvm/internal/unsafe/MonitorKt.class","size":757,"crc":1070239463},{"key":"kotlin/math/Constants.class","name":"kotlin/math/Constants.class","size":1293,"crc":-746210373},{"key":"kotlin/math/MathKt.class","name":"kotlin/math/MathKt.class","size":488,"crc":2054544800},{"key":"kotlin/math/MathKt__MathHKt.class","name":"kotlin/math/MathKt__MathHKt.class","size":770,"crc":1340251484},{"key":"kotlin/math/MathKt__MathJVMKt.class","name":"kotlin/math/MathKt__MathJVMKt.class","size":14832,"crc":472634197},{"key":"kotlin/math/UMathKt.class","name":"kotlin/math/UMathKt.class","size":1263,"crc":1270985008},{"key":"kotlin/properties/Delegates$observable$1.class","name":"kotlin/properties/Delegates$observable$1.class","size":2232,"crc":-261914363},{"key":"kotlin/properties/Delegates$vetoable$1.class","name":"kotlin/properties/Delegates$vetoable$1.class","size":2294,"crc":-467644726},{"key":"kotlin/properties/Delegates.class","name":"kotlin/properties/Delegates.class","size":2799,"crc":1728157623},{"key":"kotlin/properties/NotNullVar.class","name":"kotlin/properties/NotNullVar.class","size":2588,"crc":-168446837},{"key":"kotlin/properties/ObservableProperty.class","name":"kotlin/properties/ObservableProperty.class","size":3029,"crc":1959223958},{"key":"kotlin/properties/PropertyDelegateProvider.class","name":"kotlin/properties/PropertyDelegateProvider.class","size":933,"crc":-1533513566},{"key":"kotlin/properties/ReadOnlyProperty.class","name":"kotlin/properties/ReadOnlyProperty.class","size":824,"crc":216810164},{"key":"kotlin/properties/ReadWriteProperty.class","name":"kotlin/properties/ReadWriteProperty.class","size":1184,"crc":-1870086854},{"key":"kotlin/random/AbstractPlatformRandom.class","name":"kotlin/random/AbstractPlatformRandom.class","size":2539,"crc":1335396207},{"key":"kotlin/random/FallbackThreadLocalRandom$implStorage$1.class","name":"kotlin/random/FallbackThreadLocalRandom$implStorage$1.class","size":1014,"crc":-2081479632},{"key":"kotlin/random/FallbackThreadLocalRandom.class","name":"kotlin/random/FallbackThreadLocalRandom.class","size":1293,"crc":947036432},{"key":"kotlin/random/KotlinRandom$Companion.class","name":"kotlin/random/KotlinRandom$Companion.class","size":843,"crc":-789931469},{"key":"kotlin/random/KotlinRandom.class","name":"kotlin/random/KotlinRandom.class","size":2784,"crc":-470642331},{"key":"kotlin/random/PlatformRandom$Companion.class","name":"kotlin/random/PlatformRandom$Companion.class","size":849,"crc":401880897},{"key":"kotlin/random/PlatformRandom.class","name":"kotlin/random/PlatformRandom.class","size":1508,"crc":-479568043},{"key":"kotlin/random/PlatformRandomKt.class","name":"kotlin/random/PlatformRandomKt.class","size":2012,"crc":1800954391},{"key":"kotlin/random/Random$Default$Serialized.class","name":"kotlin/random/Random$Default$Serialized.class","size":1162,"crc":-463183151},{"key":"kotlin/random/Random$Default.class","name":"kotlin/random/Random$Default.class","size":3815,"crc":-314930236},{"key":"kotlin/random/Random.class","name":"kotlin/random/Random.class","size":6432,"crc":1147069607},{"key":"kotlin/random/RandomKt.class","name":"kotlin/random/RandomKt.class","size":4366,"crc":1826215668},{"key":"kotlin/random/URandomKt.class","name":"kotlin/random/URandomKt.class","size":6468,"crc":504214208},{"key":"kotlin/random/XorWowRandom$Companion.class","name":"kotlin/random/XorWowRandom$Companion.class","size":841,"crc":256859007},{"key":"kotlin/random/XorWowRandom.class","name":"kotlin/random/XorWowRandom.class","size":2992,"crc":1800391187},{"key":"kotlin/ranges/CharProgression$Companion.class","name":"kotlin/ranges/CharProgression$Companion.class","size":1200,"crc":-664908367},{"key":"kotlin/ranges/CharProgression.class","name":"kotlin/ranges/CharProgression.class","size":3583,"crc":387509475},{"key":"kotlin/ranges/CharProgressionIterator.class","name":"kotlin/ranges/CharProgressionIterator.class","size":1552,"crc":1568083077},{"key":"kotlin/ranges/CharRange$Companion.class","name":"kotlin/ranges/CharRange$Companion.class","size":1073,"crc":-2089612353},{"key":"kotlin/ranges/CharRange.class","name":"kotlin/ranges/CharRange.class","size":4295,"crc":-1776462022},{"key":"kotlin/ranges/ClosedDoubleRange.class","name":"kotlin/ranges/ClosedDoubleRange.class","size":3161,"crc":-716891631},{"key":"kotlin/ranges/ClosedFloatRange.class","name":"kotlin/ranges/ClosedFloatRange.class","size":3154,"crc":2124662906},{"key":"kotlin/ranges/ClosedFloatingPointRange$DefaultImpls.class","name":"kotlin/ranges/ClosedFloatingPointRange$DefaultImpls.class","size":1418,"crc":1795297203},{"key":"kotlin/ranges/ClosedFloatingPointRange.class","name":"kotlin/ranges/ClosedFloatingPointRange.class","size":1179,"crc":995743375},{"key":"kotlin/ranges/ClosedRange$DefaultImpls.class","name":"kotlin/ranges/ClosedRange$DefaultImpls.class","size":1316,"crc":-514030111},{"key":"kotlin/ranges/ClosedRange.class","name":"kotlin/ranges/ClosedRange.class","size":1018,"crc":1812267449},{"key":"kotlin/ranges/ComparableOpenEndRange.class","name":"kotlin/ranges/ComparableOpenEndRange.class","size":2873,"crc":-70811101},{"key":"kotlin/ranges/ComparableRange.class","name":"kotlin/ranges/ComparableRange.class","size":2852,"crc":-191796225},{"key":"kotlin/ranges/IntProgression$Companion.class","name":"kotlin/ranges/IntProgression$Companion.class","size":1181,"crc":-1832196079},{"key":"kotlin/ranges/IntProgression.class","name":"kotlin/ranges/IntProgression.class","size":3421,"crc":-468174995},{"key":"kotlin/ranges/IntProgressionIterator.class","name":"kotlin/ranges/IntProgressionIterator.class","size":1447,"crc":-429141606},{"key":"kotlin/ranges/IntRange$Companion.class","name":"kotlin/ranges/IntRange$Companion.class","size":1068,"crc":549433879},{"key":"kotlin/ranges/IntRange.class","name":"kotlin/ranges/IntRange.class","size":4200,"crc":-1017606740},{"key":"kotlin/ranges/LongProgression$Companion.class","name":"kotlin/ranges/LongProgression$Companion.class","size":1187,"crc":414636351},{"key":"kotlin/ranges/LongProgression.class","name":"kotlin/ranges/LongProgression.class","size":3490,"crc":1743832563},{"key":"kotlin/ranges/LongProgressionIterator.class","name":"kotlin/ranges/LongProgressionIterator.class","size":1458,"crc":1434649141},{"key":"kotlin/ranges/LongRange$Companion.class","name":"kotlin/ranges/LongRange$Companion.class","size":1073,"crc":1201629386},{"key":"kotlin/ranges/LongRange.class","name":"kotlin/ranges/LongRange.class","size":4239,"crc":219648283},{"key":"kotlin/ranges/OpenEndDoubleRange.class","name":"kotlin/ranges/OpenEndDoubleRange.class","size":2973,"crc":-1168196044},{"key":"kotlin/ranges/OpenEndFloatRange.class","name":"kotlin/ranges/OpenEndFloatRange.class","size":2966,"crc":-995153201},{"key":"kotlin/ranges/OpenEndRange$DefaultImpls.class","name":"kotlin/ranges/OpenEndRange$DefaultImpls.class","size":1323,"crc":1728962885},{"key":"kotlin/ranges/OpenEndRange.class","name":"kotlin/ranges/OpenEndRange.class","size":1163,"crc":882150429},{"key":"kotlin/ranges/RangesKt.class","name":"kotlin/ranges/RangesKt.class","size":426,"crc":430762631},{"key":"kotlin/ranges/RangesKt__RangesKt.class","name":"kotlin/ranges/RangesKt__RangesKt.class","size":4843,"crc":364162059},{"key":"kotlin/ranges/RangesKt___RangesKt.class","name":"kotlin/ranges/RangesKt___RangesKt.class","size":39538,"crc":600863238},{"key":"kotlin/ranges/UIntProgression$Companion.class","name":"kotlin/ranges/UIntProgression$Companion.class","size":1297,"crc":131326168},{"key":"kotlin/ranges/UIntProgression.class","name":"kotlin/ranges/UIntProgression.class","size":3841,"crc":-2121643808},{"key":"kotlin/ranges/UIntProgressionIterator.class","name":"kotlin/ranges/UIntProgressionIterator.class","size":2340,"crc":-237562799},{"key":"kotlin/ranges/UIntRange$Companion.class","name":"kotlin/ranges/UIntRange$Companion.class","size":1067,"crc":283912930},{"key":"kotlin/ranges/UIntRange.class","name":"kotlin/ranges/UIntRange.class","size":4693,"crc":637688633},{"key":"kotlin/ranges/ULongProgression$Companion.class","name":"kotlin/ranges/ULongProgression$Companion.class","size":1305,"crc":-914354173},{"key":"kotlin/ranges/ULongProgression.class","name":"kotlin/ranges/ULongProgression.class","size":3977,"crc":2005427058},{"key":"kotlin/ranges/ULongProgressionIterator.class","name":"kotlin/ranges/ULongProgressionIterator.class","size":2350,"crc":468147372},{"key":"kotlin/ranges/ULongRange$Companion.class","name":"kotlin/ranges/ULongRange$Companion.class","size":1073,"crc":1766013895},{"key":"kotlin/ranges/ULongRange.class","name":"kotlin/ranges/ULongRange.class","size":4796,"crc":295749197},{"key":"kotlin/ranges/URangesKt.class","name":"kotlin/ranges/URangesKt.class","size":427,"crc":-880050274},{"key":"kotlin/ranges/URangesKt___URangesKt.class","name":"kotlin/ranges/URangesKt___URangesKt.class","size":16720,"crc":1950649546},{"key":"kotlin/ranges/ranges.kotlin_builtins","name":"kotlin/ranges/ranges.kotlin_builtins","size":4184,"crc":1405855901},{"key":"kotlin/reflect/GenericArrayTypeImpl.class","name":"kotlin/reflect/GenericArrayTypeImpl.class","size":2222,"crc":-381832731},{"key":"kotlin/reflect/KAnnotatedElement.class","name":"kotlin/reflect/KAnnotatedElement.class","size":636,"crc":61542354},{"key":"kotlin/reflect/KCallable$DefaultImpls.class","name":"kotlin/reflect/KCallable$DefaultImpls.class","size":984,"crc":-1349087401},{"key":"kotlin/reflect/KCallable.class","name":"kotlin/reflect/KCallable.class","size":2421,"crc":-1198106881},{"key":"kotlin/reflect/KClass$DefaultImpls.class","name":"kotlin/reflect/KClass$DefaultImpls.class","size":1397,"crc":-1046428166},{"key":"kotlin/reflect/KClass.class","name":"kotlin/reflect/KClass.class","size":3790,"crc":-436336588},{"key":"kotlin/reflect/KClasses.class","name":"kotlin/reflect/KClasses.class","size":2672,"crc":-1682639973},{"key":"kotlin/reflect/KClassesImplKt.class","name":"kotlin/reflect/KClassesImplKt.class","size":1114,"crc":1356511699},{"key":"kotlin/reflect/KClassifier.class","name":"kotlin/reflect/KClassifier.class","size":433,"crc":1747988473},{"key":"kotlin/reflect/KDeclarationContainer.class","name":"kotlin/reflect/KDeclarationContainer.class","size":681,"crc":1214565265},{"key":"kotlin/reflect/KFunction$DefaultImpls.class","name":"kotlin/reflect/KFunction$DefaultImpls.class","size":783,"crc":-427354729},{"key":"kotlin/reflect/KFunction.class","name":"kotlin/reflect/KFunction.class","size":1118,"crc":1171628778},{"key":"kotlin/reflect/KMutableProperty$Setter.class","name":"kotlin/reflect/KMutableProperty$Setter.class","size":824,"crc":1694257050},{"key":"kotlin/reflect/KMutableProperty.class","name":"kotlin/reflect/KMutableProperty.class","size":923,"crc":66916748},{"key":"kotlin/reflect/KMutableProperty0$Setter.class","name":"kotlin/reflect/KMutableProperty0$Setter.class","size":851,"crc":1613905322},{"key":"kotlin/reflect/KMutableProperty0.class","name":"kotlin/reflect/KMutableProperty0.class","size":1173,"crc":-705522734},{"key":"kotlin/reflect/KMutableProperty1$Setter.class","name":"kotlin/reflect/KMutableProperty1$Setter.class","size":894,"crc":1660646701},{"key":"kotlin/reflect/KMutableProperty1.class","name":"kotlin/reflect/KMutableProperty1.class","size":1268,"crc":-841500514},{"key":"kotlin/reflect/KMutableProperty2$Setter.class","name":"kotlin/reflect/KMutableProperty2$Setter.class","size":936,"crc":95096653},{"key":"kotlin/reflect/KMutableProperty2.class","name":"kotlin/reflect/KMutableProperty2.class","size":1364,"crc":-452000448},{"key":"kotlin/reflect/KParameter$DefaultImpls.class","name":"kotlin/reflect/KParameter$DefaultImpls.class","size":490,"crc":39464767},{"key":"kotlin/reflect/KParameter$Kind.class","name":"kotlin/reflect/KParameter$Kind.class","size":1904,"crc":418617929},{"key":"kotlin/reflect/KParameter.class","name":"kotlin/reflect/KParameter.class","size":1288,"crc":626359754},{"key":"kotlin/reflect/KProperty$Accessor.class","name":"kotlin/reflect/KProperty$Accessor.class","size":777,"crc":1283102832},{"key":"kotlin/reflect/KProperty$DefaultImpls.class","name":"kotlin/reflect/KProperty$DefaultImpls.class","size":561,"crc":1391387786},{"key":"kotlin/reflect/KProperty$Getter.class","name":"kotlin/reflect/KProperty$Getter.class","size":755,"crc":-1336166623},{"key":"kotlin/reflect/KProperty.class","name":"kotlin/reflect/KProperty.class","size":1201,"crc":-267659921},{"key":"kotlin/reflect/KProperty0$Getter.class","name":"kotlin/reflect/KProperty0$Getter.class","size":775,"crc":-543649250},{"key":"kotlin/reflect/KProperty0.class","name":"kotlin/reflect/KProperty0.class","size":1229,"crc":-1491341011},{"key":"kotlin/reflect/KProperty1$Getter.class","name":"kotlin/reflect/KProperty1$Getter.class","size":818,"crc":535518708},{"key":"kotlin/reflect/KProperty1.class","name":"kotlin/reflect/KProperty1.class","size":1373,"crc":1178227467},{"key":"kotlin/reflect/KProperty2$Getter.class","name":"kotlin/reflect/KProperty2$Getter.class","size":860,"crc":163446700},{"key":"kotlin/reflect/KProperty2.class","name":"kotlin/reflect/KProperty2.class","size":1480,"crc":-1253080778},{"key":"kotlin/reflect/KType$DefaultImpls.class","name":"kotlin/reflect/KType$DefaultImpls.class","size":557,"crc":-1915608191},{"key":"kotlin/reflect/KType.class","name":"kotlin/reflect/KType.class","size":1145,"crc":362454291},{"key":"kotlin/reflect/KTypeParameter.class","name":"kotlin/reflect/KTypeParameter.class","size":1075,"crc":1948605281},{"key":"kotlin/reflect/KTypeProjection$Companion.class","name":"kotlin/reflect/KTypeProjection$Companion.class","size":2155,"crc":218773531},{"key":"kotlin/reflect/KTypeProjection$WhenMappings.class","name":"kotlin/reflect/KTypeProjection$WhenMappings.class","size":783,"crc":2035984086},{"key":"kotlin/reflect/KTypeProjection.class","name":"kotlin/reflect/KTypeProjection.class","size":4572,"crc":1422260547},{"key":"kotlin/reflect/KVariance.class","name":"kotlin/reflect/KVariance.class","size":1831,"crc":-473796190},{"key":"kotlin/reflect/KVisibility.class","name":"kotlin/reflect/KVisibility.class","size":1917,"crc":25028458},{"key":"kotlin/reflect/ParameterizedTypeImpl$getTypeName$1$1.class","name":"kotlin/reflect/ParameterizedTypeImpl$getTypeName$1$1.class","size":1548,"crc":1835994038},{"key":"kotlin/reflect/ParameterizedTypeImpl.class","name":"kotlin/reflect/ParameterizedTypeImpl.class","size":5092,"crc":45084669},{"key":"kotlin/reflect/TypeImpl.class","name":"kotlin/reflect/TypeImpl.class","size":587,"crc":-1480646859},{"key":"kotlin/reflect/TypeOfKt.class","name":"kotlin/reflect/TypeOfKt.class","size":833,"crc":176327660},{"key":"kotlin/reflect/TypeVariableImpl.class","name":"kotlin/reflect/TypeVariableImpl.class","size":5799,"crc":1176011175},{"key":"kotlin/reflect/TypesJVMKt$WhenMappings.class","name":"kotlin/reflect/TypesJVMKt$WhenMappings.class","size":766,"crc":1312013894},{"key":"kotlin/reflect/TypesJVMKt$typeToString$unwrap$1.class","name":"kotlin/reflect/TypesJVMKt$typeToString$unwrap$1.class","size":1533,"crc":-1374731097},{"key":"kotlin/reflect/TypesJVMKt.class","name":"kotlin/reflect/TypesJVMKt.class","size":9477,"crc":216222109},{"key":"kotlin/reflect/WildcardTypeImpl$Companion.class","name":"kotlin/reflect/WildcardTypeImpl$Companion.class","size":1103,"crc":394334377},{"key":"kotlin/reflect/WildcardTypeImpl.class","name":"kotlin/reflect/WildcardTypeImpl.class","size":3277,"crc":452613260},{"key":"kotlin/reflect/reflect.kotlin_builtins","name":"kotlin/reflect/reflect.kotlin_builtins","size":4827,"crc":-575400209},{"key":"kotlin/sequences/ConstrainedOnceSequence.class","name":"kotlin/sequences/ConstrainedOnceSequence.class","size":1888,"crc":865723757},{"key":"kotlin/sequences/DistinctIterator.class","name":"kotlin/sequences/DistinctIterator.class","size":2284,"crc":-290731626},{"key":"kotlin/sequences/DistinctSequence.class","name":"kotlin/sequences/DistinctSequence.class","size":1853,"crc":-604290109},{"key":"kotlin/sequences/DropSequence$iterator$1.class","name":"kotlin/sequences/DropSequence$iterator$1.class","size":2364,"crc":259163752},{"key":"kotlin/sequences/DropSequence.class","name":"kotlin/sequences/DropSequence.class","size":3637,"crc":-101687501},{"key":"kotlin/sequences/DropTakeSequence.class","name":"kotlin/sequences/DropTakeSequence.class","size":823,"crc":-483183911},{"key":"kotlin/sequences/DropWhileSequence$iterator$1.class","name":"kotlin/sequences/DropWhileSequence$iterator$1.class","size":3183,"crc":406114991},{"key":"kotlin/sequences/DropWhileSequence.class","name":"kotlin/sequences/DropWhileSequence.class","size":2198,"crc":1563596121},{"key":"kotlin/sequences/EmptySequence.class","name":"kotlin/sequences/EmptySequence.class","size":1583,"crc":-1967592418},{"key":"kotlin/sequences/FilteringSequence$iterator$1.class","name":"kotlin/sequences/FilteringSequence$iterator$1.class","size":3292,"crc":-1220777937},{"key":"kotlin/sequences/FilteringSequence.class","name":"kotlin/sequences/FilteringSequence.class","size":2630,"crc":1497884437},{"key":"kotlin/sequences/FlatteningSequence$State.class","name":"kotlin/sequences/FlatteningSequence$State.class","size":949,"crc":-2055433535},{"key":"kotlin/sequences/FlatteningSequence$iterator$1.class","name":"kotlin/sequences/FlatteningSequence$iterator$1.class","size":3473,"crc":-398122684},{"key":"kotlin/sequences/FlatteningSequence.class","name":"kotlin/sequences/FlatteningSequence.class","size":2686,"crc":242870964},{"key":"kotlin/sequences/GeneratorSequence$iterator$1.class","name":"kotlin/sequences/GeneratorSequence$iterator$1.class","size":3117,"crc":-127156659},{"key":"kotlin/sequences/GeneratorSequence.class","name":"kotlin/sequences/GeneratorSequence.class","size":2274,"crc":554609855},{"key":"kotlin/sequences/IndexingSequence$iterator$1.class","name":"kotlin/sequences/IndexingSequence$iterator$1.class","size":2561,"crc":-1906805568},{"key":"kotlin/sequences/IndexingSequence.class","name":"kotlin/sequences/IndexingSequence.class","size":1791,"crc":1970829357},{"key":"kotlin/sequences/MergingSequence$iterator$1.class","name":"kotlin/sequences/MergingSequence$iterator$1.class","size":2514,"crc":-1203680541},{"key":"kotlin/sequences/MergingSequence.class","name":"kotlin/sequences/MergingSequence.class","size":2553,"crc":-112609174},{"key":"kotlin/sequences/Sequence.class","name":"kotlin/sequences/Sequence.class","size":618,"crc":1282883404},{"key":"kotlin/sequences/SequenceBuilderIterator.class","name":"kotlin/sequences/SequenceBuilderIterator.class","size":5783,"crc":-440315533},{"key":"kotlin/sequences/SequenceScope.class","name":"kotlin/sequences/SequenceScope.class","size":2640,"crc":1350930238},{"key":"kotlin/sequences/SequencesKt.class","name":"kotlin/sequences/SequencesKt.class","size":610,"crc":-864609223},{"key":"kotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1.class","name":"kotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1.class","size":2118,"crc":-133402735},{"key":"kotlin/sequences/SequencesKt__SequenceBuilderKt.class","name":"kotlin/sequences/SequencesKt__SequenceBuilderKt.class","size":3141,"crc":433352677},{"key":"kotlin/sequences/SequencesKt__SequencesJVMKt.class","name":"kotlin/sequences/SequencesKt__SequencesJVMKt.class","size":1311,"crc":1189773375},{"key":"kotlin/sequences/SequencesKt__SequencesKt$Sequence$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$Sequence$1.class","size":1790,"crc":1373372296},{"key":"kotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1.class","size":1901,"crc":202007975},{"key":"kotlin/sequences/SequencesKt__SequencesKt$flatMapIndexed$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$flatMapIndexed$1.class","size":4942,"crc":195243253},{"key":"kotlin/sequences/SequencesKt__SequencesKt$ifEmpty$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$ifEmpty$1.class","size":4353,"crc":-1834905550},{"key":"kotlin/sequences/SequencesKt__SequencesKt$sequenceOf$$inlined$Sequence$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$sequenceOf$$inlined$Sequence$1.class","size":2004,"crc":-826212920},{"key":"kotlin/sequences/SequencesKt__SequencesKt$sequenceOf$1$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$sequenceOf$1$1.class","size":1629,"crc":-630533487},{"key":"kotlin/sequences/SequencesKt__SequencesKt$shuffled$1.class","name":"kotlin/sequences/SequencesKt__SequencesKt$shuffled$1.class","size":4591,"crc":-1372081805},{"key":"kotlin/sequences/SequencesKt__SequencesKt.class","name":"kotlin/sequences/SequencesKt__SequencesKt.class","size":11998,"crc":-1462475474},{"key":"kotlin/sequences/SequencesKt___SequencesJvmKt.class","name":"kotlin/sequences/SequencesKt___SequencesJvmKt.class","size":10985,"crc":-1448296786},{"key":"kotlin/sequences/SequencesKt___SequencesKt$asIterable$$inlined$Iterable$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$asIterable$$inlined$Iterable$1.class","size":2073,"crc":1567611736},{"key":"kotlin/sequences/SequencesKt___SequencesKt$filterIsInstance$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$filterIsInstance$1.class","size":1746,"crc":-266251164},{"key":"kotlin/sequences/SequencesKt___SequencesKt$flatMap$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$flatMap$1.class","size":1636,"crc":-1879317587},{"key":"kotlin/sequences/SequencesKt___SequencesKt$flatMap$2.class","name":"kotlin/sequences/SequencesKt___SequencesKt$flatMap$2.class","size":1663,"crc":266841066},{"key":"kotlin/sequences/SequencesKt___SequencesKt$flatMapIndexed$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$flatMapIndexed$1.class","size":1657,"crc":359534941},{"key":"kotlin/sequences/SequencesKt___SequencesKt$flatMapIndexed$2.class","name":"kotlin/sequences/SequencesKt___SequencesKt$flatMapIndexed$2.class","size":1692,"crc":1833181704},{"key":"kotlin/sequences/SequencesKt___SequencesKt$groupingBy$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$groupingBy$1.class","size":2235,"crc":1007616242},{"key":"kotlin/sequences/SequencesKt___SequencesKt$minus$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$minus$1.class","size":2553,"crc":-305955381},{"key":"kotlin/sequences/SequencesKt___SequencesKt$minus$2.class","name":"kotlin/sequences/SequencesKt___SequencesKt$minus$2.class","size":2209,"crc":1038832985},{"key":"kotlin/sequences/SequencesKt___SequencesKt$minus$3.class","name":"kotlin/sequences/SequencesKt___SequencesKt$minus$3.class","size":2550,"crc":2114134072},{"key":"kotlin/sequences/SequencesKt___SequencesKt$minus$4.class","name":"kotlin/sequences/SequencesKt___SequencesKt$minus$4.class","size":2437,"crc":1519944118},{"key":"kotlin/sequences/SequencesKt___SequencesKt$runningFold$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$runningFold$1.class","size":4458,"crc":1558006351},{"key":"kotlin/sequences/SequencesKt___SequencesKt$runningFoldIndexed$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$runningFoldIndexed$1.class","size":4965,"crc":-118300893},{"key":"kotlin/sequences/SequencesKt___SequencesKt$runningReduce$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$runningReduce$1.class","size":4329,"crc":-890616744},{"key":"kotlin/sequences/SequencesKt___SequencesKt$runningReduceIndexed$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$runningReduceIndexed$1.class","size":4857,"crc":-1755309590},{"key":"kotlin/sequences/SequencesKt___SequencesKt$sorted$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$sorted$1.class","size":1489,"crc":573340019},{"key":"kotlin/sequences/SequencesKt___SequencesKt$sortedWith$1.class","name":"kotlin/sequences/SequencesKt___SequencesKt$sortedWith$1.class","size":1718,"crc":1414080937},{"key":"kotlin/sequences/SequencesKt___SequencesKt$zipWithNext$2.class","name":"kotlin/sequences/SequencesKt___SequencesKt$zipWithNext$2.class","size":4364,"crc":1041251936},{"key":"kotlin/sequences/SequencesKt___SequencesKt.class","name":"kotlin/sequences/SequencesKt___SequencesKt.class","size":96394,"crc":-1426404030},{"key":"kotlin/sequences/SubSequence$iterator$1.class","name":"kotlin/sequences/SubSequence$iterator$1.class","size":2610,"crc":618427518},{"key":"kotlin/sequences/SubSequence.class","name":"kotlin/sequences/SubSequence.class","size":4067,"crc":-1373916743},{"key":"kotlin/sequences/TakeSequence$iterator$1.class","name":"kotlin/sequences/TakeSequence$iterator$1.class","size":2300,"crc":-1341488208},{"key":"kotlin/sequences/TakeSequence.class","name":"kotlin/sequences/TakeSequence.class","size":3507,"crc":1699114532},{"key":"kotlin/sequences/TakeWhileSequence$iterator$1.class","name":"kotlin/sequences/TakeWhileSequence$iterator$1.class","size":3213,"crc":-1666050794},{"key":"kotlin/sequences/TakeWhileSequence.class","name":"kotlin/sequences/TakeWhileSequence.class","size":2198,"crc":1171566728},{"key":"kotlin/sequences/TransformingIndexedSequence$iterator$1.class","name":"kotlin/sequences/TransformingIndexedSequence$iterator$1.class","size":2745,"crc":1355692737},{"key":"kotlin/sequences/TransformingIndexedSequence.class","name":"kotlin/sequences/TransformingIndexedSequence.class","size":2303,"crc":-837378222},{"key":"kotlin/sequences/TransformingSequence$iterator$1.class","name":"kotlin/sequences/TransformingSequence$iterator$1.class","size":2195,"crc":-319302487},{"key":"kotlin/sequences/TransformingSequence.class","name":"kotlin/sequences/TransformingSequence.class","size":2770,"crc":-1556206322},{"key":"kotlin/sequences/USequencesKt.class","name":"kotlin/sequences/USequencesKt.class","size":451,"crc":-557255450},{"key":"kotlin/sequences/USequencesKt___USequencesKt.class","name":"kotlin/sequences/USequencesKt___USequencesKt.class","size":2701,"crc":-388842692},{"key":"kotlin/system/ProcessKt.class","name":"kotlin/system/ProcessKt.class","size":820,"crc":274646425},{"key":"kotlin/system/TimingKt.class","name":"kotlin/system/TimingKt.class","size":1430,"crc":-946610639},{"key":"kotlin/text/CharCategory$Companion.class","name":"kotlin/text/CharCategory$Companion.class","size":1654,"crc":119737177},{"key":"kotlin/text/CharCategory.class","name":"kotlin/text/CharCategory.class","size":4989,"crc":-1647046756},{"key":"kotlin/text/CharDirectionality$Companion.class","name":"kotlin/text/CharDirectionality$Companion.class","size":2100,"crc":931805186},{"key":"kotlin/text/CharDirectionality.class","name":"kotlin/text/CharDirectionality.class","size":6313,"crc":368352003},{"key":"kotlin/text/CharsKt.class","name":"kotlin/text/CharsKt.class","size":412,"crc":-1950353735},{"key":"kotlin/text/CharsKt__CharJVMKt.class","name":"kotlin/text/CharsKt__CharJVMKt.class","size":7616,"crc":1865390063},{"key":"kotlin/text/CharsKt__CharKt.class","name":"kotlin/text/CharsKt__CharKt.class","size":4624,"crc":1054679380},{"key":"kotlin/text/Charsets.class","name":"kotlin/text/Charsets.class","size":2791,"crc":878977593},{"key":"kotlin/text/CharsetsKt.class","name":"kotlin/text/CharsetsKt.class","size":925,"crc":-1944248469},{"key":"kotlin/text/DelimitedRangesSequence$iterator$1.class","name":"kotlin/text/DelimitedRangesSequence$iterator$1.class","size":4661,"crc":-1094554109},{"key":"kotlin/text/DelimitedRangesSequence.class","name":"kotlin/text/DelimitedRangesSequence.class","size":2942,"crc":-528697564},{"key":"kotlin/text/FlagEnum.class","name":"kotlin/text/FlagEnum.class","size":457,"crc":486137398},{"key":"kotlin/text/HexExtensionsKt.class","name":"kotlin/text/HexExtensionsKt.class","size":35159,"crc":1356547963},{"key":"kotlin/text/HexFormat$Builder.class","name":"kotlin/text/HexFormat$Builder.class","size":3952,"crc":85428446},{"key":"kotlin/text/HexFormat$BytesHexFormat$Builder.class","name":"kotlin/text/HexFormat$BytesHexFormat$Builder.class","size":4424,"crc":336245821},{"key":"kotlin/text/HexFormat$BytesHexFormat$Companion.class","name":"kotlin/text/HexFormat$BytesHexFormat$Companion.class","size":1208,"crc":2047310794},{"key":"kotlin/text/HexFormat$BytesHexFormat.class","name":"kotlin/text/HexFormat$BytesHexFormat.class","size":5102,"crc":-277654752},{"key":"kotlin/text/HexFormat$Companion.class","name":"kotlin/text/HexFormat$Companion.class","size":1224,"crc":1393620309},{"key":"kotlin/text/HexFormat$NumberHexFormat$Builder.class","name":"kotlin/text/HexFormat$NumberHexFormat$Builder.class","size":4138,"crc":-1220051491},{"key":"kotlin/text/HexFormat$NumberHexFormat$Companion.class","name":"kotlin/text/HexFormat$NumberHexFormat$Companion.class","size":1214,"crc":2028381211},{"key":"kotlin/text/HexFormat$NumberHexFormat.class","name":"kotlin/text/HexFormat$NumberHexFormat.class","size":4525,"crc":-2031902011},{"key":"kotlin/text/HexFormat.class","name":"kotlin/text/HexFormat.class","size":3732,"crc":-313295034},{"key":"kotlin/text/HexFormatKt.class","name":"kotlin/text/HexFormatKt.class","size":2804,"crc":-58663613},{"key":"kotlin/text/LinesIterator$State.class","name":"kotlin/text/LinesIterator$State.class","size":880,"crc":-2089737975},{"key":"kotlin/text/LinesIterator.class","name":"kotlin/text/LinesIterator.class","size":3046,"crc":-339343503},{"key":"kotlin/text/MatchGroup.class","name":"kotlin/text/MatchGroup.class","size":2813,"crc":-117722268},{"key":"kotlin/text/MatchGroupCollection.class","name":"kotlin/text/MatchGroupCollection.class","size":781,"crc":-1776031722},{"key":"kotlin/text/MatchNamedGroupCollection.class","name":"kotlin/text/MatchNamedGroupCollection.class","size":815,"crc":-1835558197},{"key":"kotlin/text/MatchResult$DefaultImpls.class","name":"kotlin/text/MatchResult$DefaultImpls.class","size":799,"crc":153161564},{"key":"kotlin/text/MatchResult$Destructured.class","name":"kotlin/text/MatchResult$Destructured.class","size":2736,"crc":-1585547917},{"key":"kotlin/text/MatchResult.class","name":"kotlin/text/MatchResult.class","size":1442,"crc":-1719703349},{"key":"kotlin/text/MatcherMatchResult$groupValues$1.class","name":"kotlin/text/MatcherMatchResult$groupValues$1.class","size":2287,"crc":-732136263},{"key":"kotlin/text/MatcherMatchResult$groups$1.class","name":"kotlin/text/MatcherMatchResult$groups$1.class","size":4447,"crc":-1578023666},{"key":"kotlin/text/MatcherMatchResult.class","name":"kotlin/text/MatcherMatchResult.class","size":4098,"crc":-1009115619},{"key":"kotlin/text/Regex$Companion.class","name":"kotlin/text/Regex$Companion.class","size":2226,"crc":-1815782253},{"key":"kotlin/text/Regex$Serialized$Companion.class","name":"kotlin/text/Regex$Serialized$Companion.class","size":884,"crc":1914975066},{"key":"kotlin/text/Regex$Serialized.class","name":"kotlin/text/Regex$Serialized.class","size":1990,"crc":-1620942971},{"key":"kotlin/text/Regex$findAll$2.class","name":"kotlin/text/Regex$findAll$2.class","size":1470,"crc":1757499400},{"key":"kotlin/text/Regex$special$$inlined$fromInt$1.class","name":"kotlin/text/Regex$special$$inlined$fromInt$1.class","size":1709,"crc":-245323399},{"key":"kotlin/text/Regex$splitToSequence$1.class","name":"kotlin/text/Regex$splitToSequence$1.class","size":4796,"crc":-1397166931},{"key":"kotlin/text/Regex.class","name":"kotlin/text/Regex.class","size":13358,"crc":-1401467764},{"key":"kotlin/text/RegexKt$fromInt$1$1.class","name":"kotlin/text/RegexKt$fromInt$1$1.class","size":1578,"crc":1749796829},{"key":"kotlin/text/RegexKt.class","name":"kotlin/text/RegexKt.class","size":4909,"crc":-650904006},{"key":"kotlin/text/RegexOption.class","name":"kotlin/text/RegexOption.class","size":2679,"crc":-2038521908},{"key":"kotlin/text/StringsKt.class","name":"kotlin/text/StringsKt.class","size":882,"crc":1250351734},{"key":"kotlin/text/StringsKt__AppendableKt.class","name":"kotlin/text/StringsKt__AppendableKt.class","size":3761,"crc":1431371205},{"key":"kotlin/text/StringsKt__IndentKt.class","name":"kotlin/text/StringsKt__IndentKt.class","size":14851,"crc":1046032515},{"key":"kotlin/text/StringsKt__RegexExtensionsJVMKt.class","name":"kotlin/text/StringsKt__RegexExtensionsJVMKt.class","size":1031,"crc":657189128},{"key":"kotlin/text/StringsKt__RegexExtensionsKt.class","name":"kotlin/text/StringsKt__RegexExtensionsKt.class","size":1706,"crc":883913269},{"key":"kotlin/text/StringsKt__StringBuilderJVMKt.class","name":"kotlin/text/StringsKt__StringBuilderJVMKt.class","size":12914,"crc":1120472385},{"key":"kotlin/text/StringsKt__StringBuilderKt.class","name":"kotlin/text/StringsKt__StringBuilderKt.class","size":5575,"crc":1405754583},{"key":"kotlin/text/StringsKt__StringNumberConversionsJVMKt.class","name":"kotlin/text/StringsKt__StringNumberConversionsJVMKt.class","size":14602,"crc":1571947069},{"key":"kotlin/text/StringsKt__StringNumberConversionsKt.class","name":"kotlin/text/StringsKt__StringNumberConversionsKt.class","size":4931,"crc":-685287199},{"key":"kotlin/text/StringsKt__StringsJVMKt.class","name":"kotlin/text/StringsKt__StringsJVMKt.class","size":27852,"crc":-154266504},{"key":"kotlin/text/StringsKt__StringsKt$iterator$1.class","name":"kotlin/text/StringsKt__StringsKt$iterator$1.class","size":1269,"crc":1966668997},{"key":"kotlin/text/StringsKt__StringsKt$lineSequence$$inlined$Sequence$1.class","name":"kotlin/text/StringsKt__StringsKt$lineSequence$$inlined$Sequence$1.class","size":2026,"crc":731646200},{"key":"kotlin/text/StringsKt__StringsKt.class","name":"kotlin/text/StringsKt__StringsKt.class","size":56283,"crc":-1360496028},{"key":"kotlin/text/StringsKt___StringsJvmKt.class","name":"kotlin/text/StringsKt___StringsJvmKt.class","size":7602,"crc":-761193061},{"key":"kotlin/text/StringsKt___StringsKt$asIterable$$inlined$Iterable$1.class","name":"kotlin/text/StringsKt___StringsKt$asIterable$$inlined$Iterable$1.class","size":2130,"crc":1492786417},{"key":"kotlin/text/StringsKt___StringsKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/text/StringsKt___StringsKt$asSequence$$inlined$Sequence$1.class","size":2084,"crc":-320785426},{"key":"kotlin/text/StringsKt___StringsKt$groupingBy$1.class","name":"kotlin/text/StringsKt___StringsKt$groupingBy$1.class","size":2497,"crc":1519006001},{"key":"kotlin/text/StringsKt___StringsKt.class","name":"kotlin/text/StringsKt___StringsKt.class","size":93466,"crc":463902968},{"key":"kotlin/text/SystemProperties.class","name":"kotlin/text/SystemProperties.class","size":1024,"crc":-1028457095},{"key":"kotlin/text/TypeAliasesKt.class","name":"kotlin/text/TypeAliasesKt.class","size":923,"crc":99667082},{"key":"kotlin/text/Typography.class","name":"kotlin/text/Typography.class","size":3745,"crc":-1075034045},{"key":"kotlin/text/UHexExtensionsKt.class","name":"kotlin/text/UHexExtensionsKt.class","size":7264,"crc":-218497711},{"key":"kotlin/text/UStringsKt.class","name":"kotlin/text/UStringsKt.class","size":7274,"crc":-1710233799},{"key":"kotlin/text/_OneToManyTitlecaseMappingsKt.class","name":"kotlin/text/_OneToManyTitlecaseMappingsKt.class","size":1649,"crc":2114141133},{"key":"kotlin/text/jdk8/RegexExtensionsJDK8Kt.class","name":"kotlin/text/jdk8/RegexExtensionsJDK8Kt.class","size":1522,"crc":-362775055},{"key":"kotlin/time/AbstractDoubleTimeSource$DoubleTimeMark.class","name":"kotlin/time/AbstractDoubleTimeSource$DoubleTimeMark.class","size":5233,"crc":496208716},{"key":"kotlin/time/AbstractDoubleTimeSource.class","name":"kotlin/time/AbstractDoubleTimeSource.class","size":2284,"crc":2088247897},{"key":"kotlin/time/AbstractLongTimeSource$LongTimeMark.class","name":"kotlin/time/AbstractLongTimeSource$LongTimeMark.class","size":6861,"crc":-574240891},{"key":"kotlin/time/AbstractLongTimeSource.class","name":"kotlin/time/AbstractLongTimeSource.class","size":3313,"crc":-628510618},{"key":"kotlin/time/AdjustedTimeMark.class","name":"kotlin/time/AdjustedTimeMark.class","size":2291,"crc":-1593139063},{"key":"kotlin/time/Clock$Companion.class","name":"kotlin/time/Clock$Companion.class","size":653,"crc":-1245924419},{"key":"kotlin/time/Clock$System.class","name":"kotlin/time/Clock$System.class","size":950,"crc":-166683765},{"key":"kotlin/time/Clock.class","name":"kotlin/time/Clock.class","size":861,"crc":859469174},{"key":"kotlin/time/ClocksKt$asClock$1.class","name":"kotlin/time/ClocksKt$asClock$1.class","size":1326,"crc":-731141283},{"key":"kotlin/time/ClocksKt.class","name":"kotlin/time/ClocksKt.class","size":1223,"crc":-1501264462},{"key":"kotlin/time/ComparableTimeMark$DefaultImpls.class","name":"kotlin/time/ComparableTimeMark$DefaultImpls.class","size":1764,"crc":-959777030},{"key":"kotlin/time/ComparableTimeMark.class","name":"kotlin/time/ComparableTimeMark.class","size":1564,"crc":-2140646205},{"key":"kotlin/time/Duration$Companion.class","name":"kotlin/time/Duration$Companion.class","size":8398,"crc":-121914574},{"key":"kotlin/time/Duration.class","name":"kotlin/time/Duration.class","size":21732,"crc":-1533272164},{"key":"kotlin/time/DurationJvmKt.class","name":"kotlin/time/DurationJvmKt.class","size":2767,"crc":983079051},{"key":"kotlin/time/DurationKt.class","name":"kotlin/time/DurationKt.class","size":13143,"crc":541275758},{"key":"kotlin/time/DurationUnit.class","name":"kotlin/time/DurationUnit.class","size":2603,"crc":1269299770},{"key":"kotlin/time/DurationUnitKt.class","name":"kotlin/time/DurationUnitKt.class","size":456,"crc":-519043702},{"key":"kotlin/time/DurationUnitKt__DurationUnitJvmKt$WhenMappings.class","name":"kotlin/time/DurationUnitKt__DurationUnitJvmKt$WhenMappings.class","size":1034,"crc":-234923662},{"key":"kotlin/time/DurationUnitKt__DurationUnitJvmKt.class","name":"kotlin/time/DurationUnitKt__DurationUnitJvmKt.class","size":3046,"crc":612567936},{"key":"kotlin/time/DurationUnitKt__DurationUnitKt$WhenMappings.class","name":"kotlin/time/DurationUnitKt__DurationUnitKt$WhenMappings.class","size":1010,"crc":744538924},{"key":"kotlin/time/DurationUnitKt__DurationUnitKt.class","name":"kotlin/time/DurationUnitKt__DurationUnitKt.class","size":3217,"crc":-928447330},{"key":"kotlin/time/ExperimentalTime.class","name":"kotlin/time/ExperimentalTime.class","size":1399,"crc":-1796049746},{"key":"kotlin/time/Instant$Companion.class","name":"kotlin/time/Instant$Companion.class","size":5002,"crc":1564226533},{"key":"kotlin/time/Instant.class","name":"kotlin/time/Instant.class","size":7743,"crc":-1719667584},{"key":"kotlin/time/InstantFormatException.class","name":"kotlin/time/InstantFormatException.class","size":910,"crc":-205005124},{"key":"kotlin/time/InstantJvmKt.class","name":"kotlin/time/InstantJvmKt.class","size":1637,"crc":-1137409511},{"key":"kotlin/time/InstantKt.class","name":"kotlin/time/InstantKt.class","size":17186,"crc":-727805672},{"key":"kotlin/time/InstantParseResult$Failure.class","name":"kotlin/time/InstantParseResult$Failure.class","size":2143,"crc":247749230},{"key":"kotlin/time/InstantParseResult$Success.class","name":"kotlin/time/InstantParseResult$Success.class","size":2238,"crc":1057127819},{"key":"kotlin/time/InstantParseResult.class","name":"kotlin/time/InstantParseResult.class","size":928,"crc":1552071098},{"key":"kotlin/time/InstantSerialized$Companion.class","name":"kotlin/time/InstantSerialized$Companion.class","size":848,"crc":815563929},{"key":"kotlin/time/InstantSerialized.class","name":"kotlin/time/InstantSerialized.class","size":2806,"crc":-1406615542},{"key":"kotlin/time/LongSaturatedMathKt.class","name":"kotlin/time/LongSaturatedMathKt.class","size":4914,"crc":679038815},{"key":"kotlin/time/MeasureTimeKt.class","name":"kotlin/time/MeasureTimeKt.class","size":4834,"crc":1059466846},{"key":"kotlin/time/MonoTimeSourceKt.class","name":"kotlin/time/MonoTimeSourceKt.class","size":438,"crc":736603013},{"key":"kotlin/time/MonotonicTimeSource.class","name":"kotlin/time/MonotonicTimeSource.class","size":2793,"crc":-1416410517},{"key":"kotlin/time/TestTimeSource.class","name":"kotlin/time/TestTimeSource.class","size":3443,"crc":-1040681226},{"key":"kotlin/time/TimeMark$DefaultImpls.class","name":"kotlin/time/TimeMark$DefaultImpls.class","size":1361,"crc":522473105},{"key":"kotlin/time/TimeMark.class","name":"kotlin/time/TimeMark.class","size":1033,"crc":-251955719},{"key":"kotlin/time/TimeSource$Companion.class","name":"kotlin/time/TimeSource$Companion.class","size":673,"crc":-904073714},{"key":"kotlin/time/TimeSource$Monotonic$ValueTimeMark.class","name":"kotlin/time/TimeSource$Monotonic$ValueTimeMark.class","size":6132,"crc":-1987781030},{"key":"kotlin/time/TimeSource$Monotonic.class","name":"kotlin/time/TimeSource$Monotonic.class","size":1653,"crc":1880019778},{"key":"kotlin/time/TimeSource$WithComparableMarks.class","name":"kotlin/time/TimeSource$WithComparableMarks.class","size":819,"crc":375050110},{"key":"kotlin/time/TimeSource.class","name":"kotlin/time/TimeSource.class","size":1034,"crc":684627597},{"key":"kotlin/time/TimedValue.class","name":"kotlin/time/TimedValue.class","size":3298,"crc":-1362441352},{"key":"kotlin/time/UnboundLocalDateTime$Companion.class","name":"kotlin/time/UnboundLocalDateTime$Companion.class","size":2619,"crc":-1746426210},{"key":"kotlin/time/UnboundLocalDateTime.class","name":"kotlin/time/UnboundLocalDateTime.class","size":4363,"crc":-160058757},{"key":"kotlin/uuid/ExperimentalUuidApi.class","name":"kotlin/uuid/ExperimentalUuidApi.class","size":1408,"crc":-1194385869},{"key":"kotlin/uuid/SecureRandomHolder.class","name":"kotlin/uuid/SecureRandomHolder.class","size":964,"crc":-1543261450},{"key":"kotlin/uuid/Uuid$Companion.class","name":"kotlin/uuid/Uuid$Companion.class","size":5331,"crc":-174885982},{"key":"kotlin/uuid/Uuid.class","name":"kotlin/uuid/Uuid.class","size":6185,"crc":-2043597966},{"key":"kotlin/uuid/UuidKt.class","name":"kotlin/uuid/UuidKt.class","size":408,"crc":-484276990},{"key":"kotlin/uuid/UuidKt__UuidJVMKt.class","name":"kotlin/uuid/UuidKt__UuidJVMKt.class","size":7787,"crc":-701344385},{"key":"kotlin/uuid/UuidKt__UuidKt.class","name":"kotlin/uuid/UuidKt__UuidKt.class","size":5801,"crc":697387313},{"key":"kotlin/uuid/UuidSerialized$Companion.class","name":"kotlin/uuid/UuidSerialized$Companion.class","size":836,"crc":1310149355},{"key":"kotlin/uuid/UuidSerialized.class","name":"kotlin/uuid/UuidSerialized.class","size":2725,"crc":-1389469090},{"key":"kotlin/collections/ArraysUtilJVM.class","name":"kotlin/collections/ArraysUtilJVM.class","size":596,"crc":570328725},{"key":"kotlin/jvm/internal/AdaptedFunctionReference.class","name":"kotlin/jvm/internal/AdaptedFunctionReference.class","size":2746,"crc":1457329729},{"key":"kotlin/jvm/internal/CallableReference$NoReceiver.class","name":"kotlin/jvm/internal/CallableReference$NoReceiver.class","size":898,"crc":1125258272},{"key":"kotlin/jvm/internal/CallableReference.class","name":"kotlin/jvm/internal/CallableReference.class","size":4181,"crc":500298900},{"key":"kotlin/jvm/internal/DefaultConstructorMarker.class","name":"kotlin/jvm/internal/DefaultConstructorMarker.class","size":337,"crc":47587920},{"key":"kotlin/jvm/internal/FunInterfaceConstructorReference.class","name":"kotlin/jvm/internal/FunInterfaceConstructorReference.class","size":1591,"crc":687584605},{"key":"kotlin/jvm/internal/FunctionAdapter.class","name":"kotlin/jvm/internal/FunctionAdapter.class","size":314,"crc":-72599158},{"key":"kotlin/jvm/internal/FunctionImpl.class","name":"kotlin/jvm/internal/FunctionImpl.class","size":13161,"crc":-558677605},{"key":"kotlin/jvm/internal/FunctionReference.class","name":"kotlin/jvm/internal/FunctionReference.class","size":3689,"crc":1951168182},{"key":"kotlin/jvm/internal/FunctionReferenceImpl.class","name":"kotlin/jvm/internal/FunctionReferenceImpl.class","size":1514,"crc":11015438},{"key":"kotlin/jvm/internal/InlineMarker.class","name":"kotlin/jvm/internal/InlineMarker.class","size":761,"crc":-1234111204},{"key":"kotlin/jvm/internal/Intrinsics$Kotlin.class","name":"kotlin/jvm/internal/Intrinsics$Kotlin.class","size":475,"crc":168489227},{"key":"kotlin/jvm/internal/Intrinsics.class","name":"kotlin/jvm/internal/Intrinsics.class","size":9086,"crc":1370135565},{"key":"kotlin/jvm/internal/MagicApiIntrinsics.class","name":"kotlin/jvm/internal/MagicApiIntrinsics.class","size":2575,"crc":-1698388096},{"key":"kotlin/jvm/internal/MutablePropertyReference.class","name":"kotlin/jvm/internal/MutablePropertyReference.class","size":942,"crc":-873243443},{"key":"kotlin/jvm/internal/MutablePropertyReference0.class","name":"kotlin/jvm/internal/MutablePropertyReference0.class","size":2307,"crc":1128124820},{"key":"kotlin/jvm/internal/MutablePropertyReference0Impl.class","name":"kotlin/jvm/internal/MutablePropertyReference0Impl.class","size":2126,"crc":-184418059},{"key":"kotlin/jvm/internal/MutablePropertyReference1.class","name":"kotlin/jvm/internal/MutablePropertyReference1.class","size":2347,"crc":377178670},{"key":"kotlin/jvm/internal/MutablePropertyReference1Impl.class","name":"kotlin/jvm/internal/MutablePropertyReference1Impl.class","size":2190,"crc":2046035585},{"key":"kotlin/jvm/internal/MutablePropertyReference2.class","name":"kotlin/jvm/internal/MutablePropertyReference2.class","size":2348,"crc":-571971330},{"key":"kotlin/jvm/internal/MutablePropertyReference2Impl.class","name":"kotlin/jvm/internal/MutablePropertyReference2Impl.class","size":2011,"crc":-677246454},{"key":"kotlin/jvm/internal/PropertyReference.class","name":"kotlin/jvm/internal/PropertyReference.class","size":3270,"crc":-917982476},{"key":"kotlin/jvm/internal/PropertyReference0.class","name":"kotlin/jvm/internal/PropertyReference0.class","size":1821,"crc":-1475025845},{"key":"kotlin/jvm/internal/PropertyReference0Impl.class","name":"kotlin/jvm/internal/PropertyReference0Impl.class","size":1798,"crc":1194211845},{"key":"kotlin/jvm/internal/PropertyReference1.class","name":"kotlin/jvm/internal/PropertyReference1.class","size":1861,"crc":-1829718760},{"key":"kotlin/jvm/internal/PropertyReference1Impl.class","name":"kotlin/jvm/internal/PropertyReference1Impl.class","size":1830,"crc":-1299899906},{"key":"kotlin/jvm/internal/PropertyReference2.class","name":"kotlin/jvm/internal/PropertyReference2.class","size":1862,"crc":-885315845},{"key":"kotlin/jvm/internal/PropertyReference2Impl.class","name":"kotlin/jvm/internal/PropertyReference2Impl.class","size":1619,"crc":617056996},{"key":"kotlin/jvm/internal/Ref$BooleanRef.class","name":"kotlin/jvm/internal/Ref$BooleanRef.class","size":593,"crc":904687793},{"key":"kotlin/jvm/internal/Ref$ByteRef.class","name":"kotlin/jvm/internal/Ref$ByteRef.class","size":584,"crc":1970120690},{"key":"kotlin/jvm/internal/Ref$CharRef.class","name":"kotlin/jvm/internal/Ref$CharRef.class","size":584,"crc":-2104091034},{"key":"kotlin/jvm/internal/Ref$DoubleRef.class","name":"kotlin/jvm/internal/Ref$DoubleRef.class","size":590,"crc":1433144171},{"key":"kotlin/jvm/internal/Ref$FloatRef.class","name":"kotlin/jvm/internal/Ref$FloatRef.class","size":587,"crc":-224759536},{"key":"kotlin/jvm/internal/Ref$IntRef.class","name":"kotlin/jvm/internal/Ref$IntRef.class","size":581,"crc":-414275565},{"key":"kotlin/jvm/internal/Ref$LongRef.class","name":"kotlin/jvm/internal/Ref$LongRef.class","size":584,"crc":526024706},{"key":"kotlin/jvm/internal/Ref$ObjectRef.class","name":"kotlin/jvm/internal/Ref$ObjectRef.class","size":827,"crc":168012497},{"key":"kotlin/jvm/internal/Ref$ShortRef.class","name":"kotlin/jvm/internal/Ref$ShortRef.class","size":587,"crc":-780272668},{"key":"kotlin/jvm/internal/Ref.class","name":"kotlin/jvm/internal/Ref.class","size":808,"crc":745872339},{"key":"kotlin/jvm/internal/Reflection.class","name":"kotlin/jvm/internal/Reflection.class","size":7937,"crc":901832041},{"key":"kotlin/jvm/internal/ReflectionFactory.class","name":"kotlin/jvm/internal/ReflectionFactory.class","size":6141,"crc":-1592711195},{"key":"kotlin/jvm/internal/RepeatableContainer.class","name":"kotlin/jvm/internal/RepeatableContainer.class","size":506,"crc":527536588},{"key":"kotlin/jvm/internal/SpreadBuilder.class","name":"kotlin/jvm/internal/SpreadBuilder.class","size":2089,"crc":238365591},{"key":"kotlin/jvm/internal/TypeIntrinsics.class","name":"kotlin/jvm/internal/TypeIntrinsics.class","size":9334,"crc":-1140538051},{"key":"META-INF/kotlin-stdlib-jdk7.kotlin_module","name":"META-INF/kotlin-stdlib-jdk7.kotlin_module","size":156,"crc":880661633},{"key":"kotlin/internal/jdk7/JDK7PlatformImplementations$ReflectSdkVersion.class","name":"kotlin/internal/jdk7/JDK7PlatformImplementations$ReflectSdkVersion.class","size":2341,"crc":-2105433895},{"key":"kotlin/internal/jdk7/JDK7PlatformImplementations.class","name":"kotlin/internal/jdk7/JDK7PlatformImplementations.class","size":2261,"crc":-497590488},{"key":"kotlin/io/path/CopyActionContext.class","name":"kotlin/io/path/CopyActionContext.class","size":879,"crc":-757334372},{"key":"kotlin/io/path/CopyActionResult.class","name":"kotlin/io/path/CopyActionResult.class","size":1950,"crc":704167179},{"key":"kotlin/io/path/DefaultCopyActionContext.class","name":"kotlin/io/path/DefaultCopyActionContext.class","size":2370,"crc":1327237361},{"key":"kotlin/io/path/DirectoryEntriesReader.class","name":"kotlin/io/path/DirectoryEntriesReader.class","size":4167,"crc":-12766321},{"key":"kotlin/io/path/ExceptionsCollector.class","name":"kotlin/io/path/ExceptionsCollector.class","size":3718,"crc":190126727},{"key":"kotlin/io/path/ExperimentalPathApi.class","name":"kotlin/io/path/ExperimentalPathApi.class","size":1419,"crc":1026282962},{"key":"kotlin/io/path/FileVisitorBuilder.class","name":"kotlin/io/path/FileVisitorBuilder.class","size":1792,"crc":400040566},{"key":"kotlin/io/path/FileVisitorBuilderImpl.class","name":"kotlin/io/path/FileVisitorBuilderImpl.class","size":4176,"crc":-1814083064},{"key":"kotlin/io/path/FileVisitorImpl.class","name":"kotlin/io/path/FileVisitorImpl.class","size":4719,"crc":-1017041734},{"key":"kotlin/io/path/IllegalFileNameException.class","name":"kotlin/io/path/IllegalFileNameException.class","size":1495,"crc":496587067},{"key":"kotlin/io/path/LinkFollowing.class","name":"kotlin/io/path/LinkFollowing.class","size":2018,"crc":-1474594995},{"key":"kotlin/io/path/OnErrorResult.class","name":"kotlin/io/path/OnErrorResult.class","size":1864,"crc":-874369701},{"key":"kotlin/io/path/PathNode.class","name":"kotlin/io/path/PathNode.class","size":2116,"crc":-1274527617},{"key":"kotlin/io/path/PathRelativizer.class","name":"kotlin/io/path/PathRelativizer.class","size":2866,"crc":1506652485},{"key":"kotlin/io/path/PathTreeWalk$bfsIterator$1.class","name":"kotlin/io/path/PathTreeWalk$bfsIterator$1.class","size":7472,"crc":-178981388},{"key":"kotlin/io/path/PathTreeWalk$dfsIterator$1.class","name":"kotlin/io/path/PathTreeWalk$dfsIterator$1.class","size":9638,"crc":2139274482},{"key":"kotlin/io/path/PathTreeWalk.class","name":"kotlin/io/path/PathTreeWalk.class","size":6338,"crc":259943469},{"key":"kotlin/io/path/PathTreeWalkKt.class","name":"kotlin/io/path/PathTreeWalkKt.class","size":2257,"crc":-1104735871},{"key":"kotlin/io/path/PathWalkOption.class","name":"kotlin/io/path/PathWalkOption.class","size":1998,"crc":1690708386},{"key":"kotlin/io/path/PathsKt.class","name":"kotlin/io/path/PathsKt.class","size":489,"crc":2040883135},{"key":"kotlin/io/path/PathsKt__PathReadWriteKt.class","name":"kotlin/io/path/PathsKt__PathReadWriteKt.class","size":19650,"crc":-1187607061},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$WhenMappings.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$WhenMappings.class","size":1106,"crc":-549721949},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$1.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$1.class","size":1492,"crc":-1562248579},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$3.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$3.class","size":1523,"crc":-582904199},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$5$2.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$5$2.class","size":3674,"crc":256235729},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$5$3.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt$copyToRecursively$5$3.class","size":2857,"crc":-740068133},{"key":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt.class","name":"kotlin/io/path/PathsKt__PathRecursiveFunctionsKt.class","size":28415,"crc":-1689683687},{"key":"kotlin/io/path/PathsKt__PathUtilsKt.class","name":"kotlin/io/path/PathsKt__PathUtilsKt.class","size":32588,"crc":726889840},{"key":"META-INF/kotlin-stdlib-jdk8.kotlin_module","name":"META-INF/kotlin-stdlib-jdk8.kotlin_module","size":323,"crc":2003306411},{"key":"kotlin/collections/jdk8/CollectionsJDK8Kt.class","name":"kotlin/collections/jdk8/CollectionsJDK8Kt.class","size":1921,"crc":-1317413492},{"key":"kotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion.class","name":"kotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion.class","size":2341,"crc":1542425448},{"key":"kotlin/internal/jdk8/JDK8PlatformImplementations$getSystemClock$1.class","name":"kotlin/internal/jdk8/JDK8PlatformImplementations$getSystemClock$1.class","size":1247,"crc":-605045436},{"key":"kotlin/internal/jdk8/JDK8PlatformImplementations$getSystemClock$2.class","name":"kotlin/internal/jdk8/JDK8PlatformImplementations$getSystemClock$2.class","size":1178,"crc":907281611},{"key":"kotlin/internal/jdk8/JDK8PlatformImplementations.class","name":"kotlin/internal/jdk8/JDK8PlatformImplementations.class","size":3232,"crc":985976419},{"key":"kotlin/jvm/jdk8/JvmRepeatableKt.class","name":"kotlin/jvm/jdk8/JvmRepeatableKt.class","size":600,"crc":-1675686258},{"key":"kotlin/jvm/optionals/OptionalsKt.class","name":"kotlin/jvm/optionals/OptionalsKt.class","size":4490,"crc":375701210},{"key":"kotlin/random/jdk8/PlatformThreadLocalRandom.class","name":"kotlin/random/jdk8/PlatformThreadLocalRandom.class","size":1727,"crc":172325910},{"key":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$1.class","name":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$1.class","size":2071,"crc":-356538716},{"key":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$2.class","name":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$2.class","size":2182,"crc":-1339575203},{"key":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$3.class","name":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$3.class","size":2181,"crc":-39728859},{"key":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$4.class","name":"kotlin/streams/jdk8/StreamsKt$asSequence$$inlined$Sequence$4.class","size":2195,"crc":139093511},{"key":"kotlin/streams/jdk8/StreamsKt.class","name":"kotlin/streams/jdk8/StreamsKt.class","size":5742,"crc":-1048739148},{"key":"kotlin/time/jdk8/DurationConversionsJDK8Kt.class","name":"kotlin/time/jdk8/DurationConversionsJDK8Kt.class","size":2607,"crc":1797854078},{"key":"kotlin/time/jdk8/InstantConversionsJDK8Kt.class","name":"kotlin/time/jdk8/InstantConversionsJDK8Kt.class","size":1726,"crc":809407760},{"key":"META-INF/versions/9/module-info.class","name":"META-INF/versions/9/module-info.class","size":1396,"crc":1364684967}] \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties deleted file mode 100644 index f24be77..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/compile-file-map.properties +++ /dev/null @@ -1 +0,0 @@ -#Mon Jul 13 18:22:00 CST 2026 diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml deleted file mode 100644 index 6c7f593..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/mergeDebugAndroidTestResources/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/compile-file-map.properties b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/compile-file-map.properties deleted file mode 100644 index 1dfb89b..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/compile-file-map.properties +++ /dev/null @@ -1 +0,0 @@ -#Mon Jul 13 18:18:07 CST 2026 diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/merger.xml deleted file mode 100644 index 6bd45d6..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/debugAndroidTest/packageDebugAndroidTestResources/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml deleted file mode 100644 index 37ca897..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestAssets/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml deleted file mode 100644 index 064e8bc..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAndroidTestJniLibFolders/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAssets/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAssets/merger.xml deleted file mode 100644 index d9e9b80..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugAssets/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml deleted file mode 100644 index a0c6a94..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt b/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt deleted file mode 100644 index 4bffea8..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/dex-renamer-state.txt +++ /dev/null @@ -1,34 +0,0 @@ -#Mon Jul 13 18:22:41 CST 2026 -base.0=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeExtDexDebugAndroidTest\\classes.dex -base.1=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\10\\classes.dex -base.10=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\global_synthetics_dex\\debugAndroidTest\\generateDebugAndroidTestGlobalSynthetics\\classes.dex -base.2=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\12\\classes.dex -base.3=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\13\\classes.dex -base.4=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\1\\classes.dex -base.5=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\2\\classes.dex -base.6=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\6\\classes.dex -base.7=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\8\\classes.dex -base.8=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeLibDexDebugAndroidTest\\9\\classes.dex -base.9=D\:\\gitPlanet\\yola\\Pink\\openCVLibrary300\\build\\intermediates\\dex\\debugAndroidTest\\mergeProjectDexDebugAndroidTest\\0\\classes.dex -path.0=classes.dex -path.1=10/classes.dex -path.10=classes.dex -path.2=12/classes.dex -path.3=13/classes.dex -path.4=1/classes.dex -path.5=2/classes.dex -path.6=6/classes.dex -path.7=8/classes.dex -path.8=9/classes.dex -path.9=0/classes.dex -renamed.0=classes.dex -renamed.1=classes2.dex -renamed.10=classes11.dex -renamed.2=classes3.dex -renamed.3=classes4.dex -renamed.4=classes5.dex -renamed.5=classes6.dex -renamed.6=classes7.dex -renamed.7=classes8.dex -renamed.8=classes9.dex -renamed.9=classes10.dex diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/androidResources b/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/androidResources deleted file mode 100644 index b31af31..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/androidResources +++ /dev/null @@ -1 +0,0 @@ -[{"key":"AndroidManifest.xml","name":"AndroidManifest.xml","size":1600,"crc":-993897491},{"key":"resources.arsc","name":"resources.arsc","size":40,"crc":322326539}] \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/javaResources0 b/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/javaResources0 deleted file mode 100644 index 93abdea..0000000 --- a/Pink/openCVLibrary300/build/intermediates/incremental/packageDebugAndroidTest/tmp/debugAndroidTest/zip-cache/javaResources0 +++ /dev/null @@ -1 +0,0 @@ -[{"key":"kotlin/annotation/annotation.kotlin_builtins","name":"kotlin/annotation/annotation.kotlin_builtins","size":1006,"crc":96078319},{"key":"kotlin/collections/collections.kotlin_builtins","name":"kotlin/collections/collections.kotlin_builtins","size":8308,"crc":327658458},{"key":"kotlin/concurrent/atomics/atomics.kotlin_builtins","name":"kotlin/concurrent/atomics/atomics.kotlin_builtins","size":2674,"crc":1252866643},{"key":"kotlin/coroutines/coroutines.kotlin_builtins","name":"kotlin/coroutines/coroutines.kotlin_builtins","size":137,"crc":1360136731},{"key":"kotlin/internal/internal.kotlin_builtins","name":"kotlin/internal/internal.kotlin_builtins","size":590,"crc":-739093672},{"key":"kotlin/kotlin.kotlin_builtins","name":"kotlin/kotlin.kotlin_builtins","size":29399,"crc":-2111613243},{"key":"kotlin/ranges/ranges.kotlin_builtins","name":"kotlin/ranges/ranges.kotlin_builtins","size":4184,"crc":1405855901},{"key":"kotlin/reflect/reflect.kotlin_builtins","name":"kotlin/reflect/reflect.kotlin_builtins","size":4827,"crc":-575400209}] \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/OpenCVLoader.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/OpenCVLoader.class deleted file mode 100644 index 144bace..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/OpenCVLoader.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/StaticHelper.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/StaticHelper.class deleted file mode 100644 index fa8c10b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/StaticHelper.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Utils.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Utils.class deleted file mode 100644 index 8483f74..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/android/Utils.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/Calib3d.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/Calib3d.class deleted file mode 100644 index 5bd734e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/Calib3d.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoBM.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoBM.class deleted file mode 100644 index bb9e85e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoBM.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoMatcher.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoMatcher.class deleted file mode 100644 index 8846f45..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoMatcher.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoSGBM.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoSGBM.class deleted file mode 100644 index ece84cc..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/calib3d/StereoSGBM.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Algorithm.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Algorithm.class deleted file mode 100644 index 4ed91f0..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Algorithm.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core$MinMaxLocResult.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core$MinMaxLocResult.class deleted file mode 100644 index b8b9015..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core$MinMaxLocResult.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core.class deleted file mode 100644 index f5f4171..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Core.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvException.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvException.class deleted file mode 100644 index 00a0bbe..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvException.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvType.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvType.class deleted file mode 100644 index 9c2956f..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/CvType.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/DMatch.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/DMatch.class deleted file mode 100644 index 992afb1..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/DMatch.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/KeyPoint.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/KeyPoint.class deleted file mode 100644 index 58256af..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/KeyPoint.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Mat.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Mat.class deleted file mode 100644 index c25a929..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Mat.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfByte.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfByte.class deleted file mode 100644 index 0a72d5b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfByte.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDMatch.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDMatch.class deleted file mode 100644 index 6149305..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDMatch.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDouble.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDouble.class deleted file mode 100644 index 4a6bae7..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfDouble.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat.class deleted file mode 100644 index 855d58d..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat4.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat4.class deleted file mode 100644 index b4cdc86..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat4.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat6.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat6.class deleted file mode 100644 index 20041f3..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfFloat6.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt.class deleted file mode 100644 index 6a3fea6..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt4.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt4.class deleted file mode 100644 index 063f5cf..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfInt4.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfKeyPoint.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfKeyPoint.class deleted file mode 100644 index 968fe31..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfKeyPoint.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint.class deleted file mode 100644 index 6c2c1c4..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint2f.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint2f.class deleted file mode 100644 index 2fc6703..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint2f.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3.class deleted file mode 100644 index b614133..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3f.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3f.class deleted file mode 100644 index e749df2..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfPoint3f.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfRect.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfRect.class deleted file mode 100644 index 4a95a12..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/MatOfRect.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point.class deleted file mode 100644 index 6e3ec57..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point3.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point3.class deleted file mode 100644 index 81359c7..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Point3.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Range.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Range.class deleted file mode 100644 index 43d562b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Range.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Rect.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Rect.class deleted file mode 100644 index 97a35aa..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Rect.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/RotatedRect.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/RotatedRect.class deleted file mode 100644 index bc84828..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/RotatedRect.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Scalar.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Scalar.class deleted file mode 100644 index 3ea704e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Scalar.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Size.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Size.class deleted file mode 100644 index d3ff35a..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/Size.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/TermCriteria.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/TermCriteria.class deleted file mode 100644 index b871ea2..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/core/TermCriteria.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorExtractor.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorExtractor.class deleted file mode 100644 index f4faa45..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorExtractor.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorMatcher.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorMatcher.class deleted file mode 100644 index 692eb4e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/DescriptorMatcher.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/FeatureDetector.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/FeatureDetector.class deleted file mode 100644 index c6310f6..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/FeatureDetector.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/Features2d.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/Features2d.class deleted file mode 100644 index f8a46ec..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/features2d/Features2d.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgcodecs/Imgcodecs.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgcodecs/Imgcodecs.class deleted file mode 100644 index 5cc6a99..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgcodecs/Imgcodecs.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/CLAHE.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/CLAHE.class deleted file mode 100644 index d6e39be..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/CLAHE.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Imgproc.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Imgproc.class deleted file mode 100644 index e33f1f7..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Imgproc.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/LineSegmentDetector.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/LineSegmentDetector.class deleted file mode 100644 index 824db7b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/LineSegmentDetector.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Subdiv2D.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Subdiv2D.class deleted file mode 100644 index 4df02fa..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/imgproc/Subdiv2D.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/ANN_MLP.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/ANN_MLP.class deleted file mode 100644 index 281f5f5..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/ANN_MLP.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Boost.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Boost.class deleted file mode 100644 index 3990793..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Boost.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/DTrees.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/DTrees.class deleted file mode 100644 index 5c3a784..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/DTrees.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/EM.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/EM.class deleted file mode 100644 index 47ac377..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/EM.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/KNearest.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/KNearest.class deleted file mode 100644 index b4bf98c..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/KNearest.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/LogisticRegression.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/LogisticRegression.class deleted file mode 100644 index cfa19a5..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/LogisticRegression.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Ml.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Ml.class deleted file mode 100644 index 49f8e80..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/Ml.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/NormalBayesClassifier.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/NormalBayesClassifier.class deleted file mode 100644 index 0b17ab5..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/NormalBayesClassifier.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/RTrees.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/RTrees.class deleted file mode 100644 index f799b04..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/RTrees.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/SVM.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/SVM.class deleted file mode 100644 index 3c3b4e0..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/SVM.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/StatModel.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/StatModel.class deleted file mode 100644 index c0b834e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/StatModel.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/TrainData.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/TrainData.class deleted file mode 100644 index baab064..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/ml/TrainData.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/BaseCascadeClassifier.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/BaseCascadeClassifier.class deleted file mode 100644 index 6d6b3b8..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/BaseCascadeClassifier.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/CascadeClassifier.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/CascadeClassifier.class deleted file mode 100644 index c5474ca..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/CascadeClassifier.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/HOGDescriptor.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/HOGDescriptor.class deleted file mode 100644 index db9122b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/HOGDescriptor.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/Objdetect.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/Objdetect.class deleted file mode 100644 index 64725ef..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/objdetect/Objdetect.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignExposures.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignExposures.class deleted file mode 100644 index 0e53f94..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignExposures.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignMTB.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignMTB.class deleted file mode 100644 index 30f0015..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/AlignMTB.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateCRF.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateCRF.class deleted file mode 100644 index 2af6e9e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateCRF.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateDebevec.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateDebevec.class deleted file mode 100644 index 84ff225..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateDebevec.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateRobertson.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateRobertson.class deleted file mode 100644 index 2a6c043..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/CalibrateRobertson.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeDebevec.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeDebevec.class deleted file mode 100644 index 7ae0447..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeDebevec.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeExposures.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeExposures.class deleted file mode 100644 index dc29ffc..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeExposures.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeMertens.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeMertens.class deleted file mode 100644 index 9483ad7..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeMertens.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeRobertson.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeRobertson.class deleted file mode 100644 index 9611617..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/MergeRobertson.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Photo.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Photo.class deleted file mode 100644 index 7bae1f8..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Photo.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Tonemap.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Tonemap.class deleted file mode 100644 index a7a1f7c..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/Tonemap.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDrago.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDrago.class deleted file mode 100644 index 1397472..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDrago.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDurand.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDurand.class deleted file mode 100644 index 2f44a97..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapDurand.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapMantiuk.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapMantiuk.class deleted file mode 100644 index 42e3260..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapMantiuk.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapReinhard.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapReinhard.class deleted file mode 100644 index 72b9f86..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/photo/TonemapReinhard.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/utils/Converters.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/utils/Converters.class deleted file mode 100644 index 3b136c3..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/utils/Converters.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractor.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractor.class deleted file mode 100644 index 9553945..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractor.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorKNN.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorKNN.class deleted file mode 100644 index 82931e4..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorKNN.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorMOG2.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorMOG2.class deleted file mode 100644 index 663657a..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/BackgroundSubtractorMOG2.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DenseOpticalFlow.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DenseOpticalFlow.class deleted file mode 100644 index 3c7dd1f..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DenseOpticalFlow.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DualTVL1OpticalFlow.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DualTVL1OpticalFlow.class deleted file mode 100644 index 3415b5d..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/DualTVL1OpticalFlow.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/KalmanFilter.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/KalmanFilter.class deleted file mode 100644 index 97309fd..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/KalmanFilter.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/Video.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/Video.class deleted file mode 100644 index 062947c..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/video/Video.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/VideoCapture.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/VideoCapture.class deleted file mode 100644 index ae5d365..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/VideoCapture.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/Videoio.class b/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/Videoio.class deleted file mode 100644 index 7448b9b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/org/opencv/videoio/Videoio.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/linked-resources-binary-format.ap_ b/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/linked-resources-binary-format.ap_ deleted file mode 100644 index 438930c..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/linked-resources-binary-format.ap_ and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/output-metadata.json b/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/output-metadata.json deleted file mode 100644 index e3d145e..0000000 --- a/Pink/openCVLibrary300/build/intermediates/linked_resources_binary_format/debugAndroidTest/processDebugAndroidTestResources/output-metadata.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "version": 3, - "artifactType": { - "type": "LINKED_RESOURCES_BINARY_FORMAT", - "kind": "Directory" - }, - "applicationId": "org.opencv.test", - "variantName": "debugAndroidTest", - "elements": [ - { - "type": "SINGLE", - "filters": [], - "attributes": [], - "versionCode": 0, - "versionName": "", - "outputFile": "linked-resources-binary-format.ap_" - } - ], - "elementType": "File" -} \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt b/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt deleted file mode 100644 index 78ac5b8..0000000 --- a/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +++ /dev/null @@ -1,2 +0,0 @@ -R_DEF: Internal format may change without notice -local diff --git a/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debugAndroidTest/parseDebugAndroidTestLocalResources/R-def.txt b/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debugAndroidTest/parseDebugAndroidTestLocalResources/R-def.txt deleted file mode 100644 index 78ac5b8..0000000 --- a/Pink/openCVLibrary300/build/intermediates/local_only_symbol_list/debugAndroidTest/parseDebugAndroidTestLocalResources/R-def.txt +++ /dev/null @@ -1,2 +0,0 @@ -R_DEF: Internal format may change without notice -local diff --git a/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt b/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt deleted file mode 100644 index 6145287..0000000 --- a/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +++ /dev/null @@ -1,11 +0,0 @@ -1 -2 -6 -7 -7-->D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:5-43 -7-->INJECTED -8 -9 diff --git a/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debugAndroidTest/processDebugAndroidTestManifest/manifest-merger-blame-debug-androidTest-report.txt b/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debugAndroidTest/processDebugAndroidTestManifest/manifest-merger-blame-debug-androidTest-report.txt deleted file mode 100644 index 1c698ef..0000000 --- a/Pink/openCVLibrary300/build/intermediates/manifest_merge_blame_file/debugAndroidTest/processDebugAndroidTestManifest/manifest-merger-blame-debug-androidTest-report.txt +++ /dev/null @@ -1,31 +0,0 @@ -1 -2 -4 -5 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:5:5-74 -6 android:minSdkVersion="24" -6-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:5:15-41 -7 android:targetSdkVersion="36" /> -7-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:5:42-71 -8 -9 D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:7:5-11:65 -10 android:name="androidx.test.runner.AndroidJUnitRunner" -10-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:7:22-76 -11 android:functionalTest="false" -11-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:10:22-52 -12 android:handleProfiling="false" -12-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:9:22-53 -13 android:label="Tests for org.opencv.test" -13-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:11:22-63 -14 android:targetPackage="org.opencv.test" /> -14-->D:\gitPlanet\yola\Pink\openCVLibrary300\build\intermediates\tmp\manifest\androidTest\debug\tempFile1ProcessTestManifest1114075493755902143.xml:8:22-61 -15 -16 INJECTED -17 android:debuggable="true" -18 android:extractNativeLibs="false" /> -18-->INJECTED -19 -20 diff --git a/Pink/openCVLibrary300/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-openCVLibrary300.jar b/Pink/openCVLibrary300/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-openCVLibrary300.jar deleted file mode 100644 index 15cb0ec..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-openCVLibrary300.jar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/merged_java_res/debugAndroidTest/mergeDebugAndroidTestJavaResource/feature-openCVLibrary300.jar b/Pink/openCVLibrary300/build/intermediates/merged_java_res/debugAndroidTest/mergeDebugAndroidTestJavaResource/feature-openCVLibrary300.jar deleted file mode 100644 index 493cf47..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/merged_java_res/debugAndroidTest/mergeDebugAndroidTestJavaResource/feature-openCVLibrary300.jar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml b/Pink/openCVLibrary300/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml deleted file mode 100644 index e2f9160..0000000 --- a/Pink/openCVLibrary300/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json b/Pink/openCVLibrary300/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json deleted file mode 100644 index 0637a08..0000000 --- a/Pink/openCVLibrary300/build/intermediates/navigation_json/debug/extractDeepLinksDebug/navigation.json +++ /dev/null @@ -1 +0,0 @@ -[] \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt b/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt deleted file mode 100644 index 08f4ebe..0000000 --- a/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +++ /dev/null @@ -1 +0,0 @@ -0 Warning/Error \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debugAndroidTest/generateDebugAndroidTestResources/nestedResourcesValidationReport.txt b/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debugAndroidTest/generateDebugAndroidTestResources/nestedResourcesValidationReport.txt deleted file mode 100644 index 08f4ebe..0000000 --- a/Pink/openCVLibrary300/build/intermediates/nested_resources_validation_report/debugAndroidTest/generateDebugAndroidTestResources/nestedResourcesValidationReport.txt +++ /dev/null @@ -1 +0,0 @@ -0 Warning/Error \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/AndroidManifest.xml b/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/AndroidManifest.xml deleted file mode 100644 index 8dd7239..0000000 --- a/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/AndroidManifest.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/output-metadata.json b/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/output-metadata.json deleted file mode 100644 index 06024f1..0000000 --- a/Pink/openCVLibrary300/build/intermediates/packaged_manifests/debugAndroidTest/processDebugAndroidTestManifest/output-metadata.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "version": 3, - "artifactType": { - "type": "PACKAGED_MANIFESTS", - "kind": "Directory" - }, - "applicationId": "org.opencv.test", - "variantName": "debugAndroidTest", - "elements": [ - { - "type": "SINGLE", - "filters": [], - "attributes": [], - "outputFile": "AndroidManifest.xml" - } - ], - "elementType": "File" -} \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_1.jar b/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_1.jar deleted file mode 100644 index c14b1e6..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_1.jar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_2.jar b/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_2.jar deleted file mode 100644 index 07ef01f..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/project_dex_archive/debugAndroidTest/dexBuilderDebugAndroidTest/out/52ccb3c1d32197a9e773b0a74f5d32c0228e32ba46b99acc9a880daa09af271c_2.jar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/OpenCVLoader.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/OpenCVLoader.class deleted file mode 100644 index 144bace..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/OpenCVLoader.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/StaticHelper.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/StaticHelper.class deleted file mode 100644 index fa8c10b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/StaticHelper.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/Utils.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/Utils.class deleted file mode 100644 index 8483f74..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/android/Utils.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/Calib3d.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/Calib3d.class deleted file mode 100644 index 5bd734e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/Calib3d.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoBM.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoBM.class deleted file mode 100644 index bb9e85e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoBM.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoMatcher.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoMatcher.class deleted file mode 100644 index 8846f45..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoMatcher.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoSGBM.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoSGBM.class deleted file mode 100644 index ece84cc..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/calib3d/StereoSGBM.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Algorithm.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Algorithm.class deleted file mode 100644 index 4ed91f0..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Algorithm.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core$MinMaxLocResult.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core$MinMaxLocResult.class deleted file mode 100644 index b8b9015..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core$MinMaxLocResult.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core.class deleted file mode 100644 index f5f4171..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Core.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvException.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvException.class deleted file mode 100644 index 00a0bbe..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvException.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvType.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvType.class deleted file mode 100644 index 9c2956f..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/CvType.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/DMatch.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/DMatch.class deleted file mode 100644 index 992afb1..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/DMatch.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/KeyPoint.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/KeyPoint.class deleted file mode 100644 index 58256af..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/KeyPoint.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Mat.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Mat.class deleted file mode 100644 index c25a929..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Mat.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfByte.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfByte.class deleted file mode 100644 index 0a72d5b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfByte.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDMatch.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDMatch.class deleted file mode 100644 index 6149305..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDMatch.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDouble.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDouble.class deleted file mode 100644 index 4a6bae7..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfDouble.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat.class deleted file mode 100644 index 855d58d..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat4.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat4.class deleted file mode 100644 index b4cdc86..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat4.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat6.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat6.class deleted file mode 100644 index 20041f3..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfFloat6.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt.class deleted file mode 100644 index 6a3fea6..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt4.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt4.class deleted file mode 100644 index 063f5cf..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfInt4.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfKeyPoint.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfKeyPoint.class deleted file mode 100644 index 968fe31..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfKeyPoint.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint.class deleted file mode 100644 index 6c2c1c4..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint2f.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint2f.class deleted file mode 100644 index 2fc6703..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint2f.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3.class deleted file mode 100644 index b614133..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3f.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3f.class deleted file mode 100644 index e749df2..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfPoint3f.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfRect.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfRect.class deleted file mode 100644 index 4a95a12..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/MatOfRect.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point.class deleted file mode 100644 index 6e3ec57..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point3.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point3.class deleted file mode 100644 index 81359c7..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Point3.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Range.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Range.class deleted file mode 100644 index 43d562b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Range.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Rect.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Rect.class deleted file mode 100644 index 97a35aa..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Rect.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/RotatedRect.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/RotatedRect.class deleted file mode 100644 index bc84828..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/RotatedRect.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Scalar.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Scalar.class deleted file mode 100644 index 3ea704e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Scalar.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Size.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Size.class deleted file mode 100644 index d3ff35a..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/Size.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/TermCriteria.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/TermCriteria.class deleted file mode 100644 index b871ea2..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/core/TermCriteria.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorExtractor.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorExtractor.class deleted file mode 100644 index f4faa45..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorExtractor.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorMatcher.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorMatcher.class deleted file mode 100644 index 692eb4e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/DescriptorMatcher.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/FeatureDetector.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/FeatureDetector.class deleted file mode 100644 index c6310f6..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/FeatureDetector.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/Features2d.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/Features2d.class deleted file mode 100644 index f8a46ec..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/features2d/Features2d.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgcodecs/Imgcodecs.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgcodecs/Imgcodecs.class deleted file mode 100644 index 5cc6a99..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgcodecs/Imgcodecs.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/CLAHE.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/CLAHE.class deleted file mode 100644 index d6e39be..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/CLAHE.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Imgproc.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Imgproc.class deleted file mode 100644 index e33f1f7..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Imgproc.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/LineSegmentDetector.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/LineSegmentDetector.class deleted file mode 100644 index 824db7b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/LineSegmentDetector.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Subdiv2D.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Subdiv2D.class deleted file mode 100644 index 4df02fa..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/imgproc/Subdiv2D.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/ANN_MLP.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/ANN_MLP.class deleted file mode 100644 index 281f5f5..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/ANN_MLP.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Boost.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Boost.class deleted file mode 100644 index 3990793..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Boost.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/DTrees.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/DTrees.class deleted file mode 100644 index 5c3a784..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/DTrees.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/EM.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/EM.class deleted file mode 100644 index 47ac377..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/EM.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/KNearest.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/KNearest.class deleted file mode 100644 index b4bf98c..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/KNearest.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/LogisticRegression.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/LogisticRegression.class deleted file mode 100644 index cfa19a5..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/LogisticRegression.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Ml.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Ml.class deleted file mode 100644 index 49f8e80..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/Ml.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/NormalBayesClassifier.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/NormalBayesClassifier.class deleted file mode 100644 index 0b17ab5..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/NormalBayesClassifier.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/RTrees.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/RTrees.class deleted file mode 100644 index f799b04..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/RTrees.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/SVM.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/SVM.class deleted file mode 100644 index 3c3b4e0..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/SVM.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/StatModel.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/StatModel.class deleted file mode 100644 index c0b834e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/StatModel.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/TrainData.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/TrainData.class deleted file mode 100644 index baab064..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/ml/TrainData.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/BaseCascadeClassifier.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/BaseCascadeClassifier.class deleted file mode 100644 index 6d6b3b8..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/BaseCascadeClassifier.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/CascadeClassifier.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/CascadeClassifier.class deleted file mode 100644 index c5474ca..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/CascadeClassifier.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/HOGDescriptor.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/HOGDescriptor.class deleted file mode 100644 index db9122b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/HOGDescriptor.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/Objdetect.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/Objdetect.class deleted file mode 100644 index 64725ef..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/objdetect/Objdetect.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignExposures.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignExposures.class deleted file mode 100644 index 0e53f94..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignExposures.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignMTB.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignMTB.class deleted file mode 100644 index 30f0015..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/AlignMTB.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateCRF.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateCRF.class deleted file mode 100644 index 2af6e9e..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateCRF.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateDebevec.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateDebevec.class deleted file mode 100644 index 84ff225..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateDebevec.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateRobertson.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateRobertson.class deleted file mode 100644 index 2a6c043..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/CalibrateRobertson.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeDebevec.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeDebevec.class deleted file mode 100644 index 7ae0447..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeDebevec.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeExposures.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeExposures.class deleted file mode 100644 index dc29ffc..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeExposures.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeMertens.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeMertens.class deleted file mode 100644 index 9483ad7..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeMertens.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeRobertson.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeRobertson.class deleted file mode 100644 index 9611617..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/MergeRobertson.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Photo.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Photo.class deleted file mode 100644 index 7bae1f8..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Photo.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Tonemap.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Tonemap.class deleted file mode 100644 index a7a1f7c..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/Tonemap.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDrago.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDrago.class deleted file mode 100644 index 1397472..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDrago.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDurand.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDurand.class deleted file mode 100644 index 2f44a97..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapDurand.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapMantiuk.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapMantiuk.class deleted file mode 100644 index 42e3260..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapMantiuk.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapReinhard.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapReinhard.class deleted file mode 100644 index 72b9f86..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/photo/TonemapReinhard.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/utils/Converters.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/utils/Converters.class deleted file mode 100644 index 3b136c3..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/utils/Converters.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractor.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractor.class deleted file mode 100644 index 9553945..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractor.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorKNN.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorKNN.class deleted file mode 100644 index 82931e4..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorKNN.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorMOG2.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorMOG2.class deleted file mode 100644 index 663657a..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/BackgroundSubtractorMOG2.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DenseOpticalFlow.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DenseOpticalFlow.class deleted file mode 100644 index 3c7dd1f..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DenseOpticalFlow.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DualTVL1OpticalFlow.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DualTVL1OpticalFlow.class deleted file mode 100644 index 3415b5d..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/DualTVL1OpticalFlow.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/KalmanFilter.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/KalmanFilter.class deleted file mode 100644 index 97309fd..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/KalmanFilter.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/Video.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/Video.class deleted file mode 100644 index 062947c..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/video/Video.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/VideoCapture.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/VideoCapture.class deleted file mode 100644 index ae5d365..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/VideoCapture.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/Videoio.class b/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/Videoio.class deleted file mode 100644 index 7448b9b..0000000 Binary files a/Pink/openCVLibrary300/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/org/opencv/videoio/Videoio.class and /dev/null differ diff --git a/Pink/openCVLibrary300/build/intermediates/runtime_symbol_list/debugAndroidTest/processDebugAndroidTestResources/R.txt b/Pink/openCVLibrary300/build/intermediates/runtime_symbol_list/debugAndroidTest/processDebugAndroidTestResources/R.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Pink/openCVLibrary300/build/intermediates/signing_config_versions/debugAndroidTest/writeDebugAndroidTestSigningConfigVersions/signing-config-versions.json b/Pink/openCVLibrary300/build/intermediates/signing_config_versions/debugAndroidTest/writeDebugAndroidTestSigningConfigVersions/signing-config-versions.json deleted file mode 100644 index 51f6368..0000000 --- a/Pink/openCVLibrary300/build/intermediates/signing_config_versions/debugAndroidTest/writeDebugAndroidTestSigningConfigVersions/signing-config-versions.json +++ /dev/null @@ -1 +0,0 @@ -{"enableV1Signing":false,"enableV2Signing":true,"enableV3Signing":false,"enableV4Signing":false} \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/intermediates/stable_resource_ids_file/debugAndroidTest/processDebugAndroidTestResources/stableIds.txt b/Pink/openCVLibrary300/build/intermediates/stable_resource_ids_file/debugAndroidTest/processDebugAndroidTestResources/stableIds.txt deleted file mode 100644 index e69de29..0000000 diff --git a/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt b/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt deleted file mode 100644 index 802704b..0000000 --- a/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +++ /dev/null @@ -1 +0,0 @@ -org.opencv diff --git a/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debugAndroidTest/generateDebugAndroidTestRFile/package-aware-r.txt b/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debugAndroidTest/generateDebugAndroidTestRFile/package-aware-r.txt deleted file mode 100644 index c747aaf..0000000 --- a/Pink/openCVLibrary300/build/intermediates/symbol_list_with_package_name/debugAndroidTest/generateDebugAndroidTestRFile/package-aware-r.txt +++ /dev/null @@ -1 +0,0 @@ -org.opencv.test diff --git a/Pink/openCVLibrary300/build/outputs/aar/openCVLibrary300-debug.aar b/Pink/openCVLibrary300/build/outputs/aar/openCVLibrary300-debug.aar deleted file mode 100644 index 56043e9..0000000 Binary files a/Pink/openCVLibrary300/build/outputs/aar/openCVLibrary300-debug.aar and /dev/null differ diff --git a/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/openCVLibrary300-debug-androidTest.apk b/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/openCVLibrary300-debug-androidTest.apk deleted file mode 100644 index 51d84dc..0000000 Binary files a/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/openCVLibrary300-debug-androidTest.apk and /dev/null differ diff --git a/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/output-metadata.json b/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/output-metadata.json deleted file mode 100644 index 508217c..0000000 --- a/Pink/openCVLibrary300/build/outputs/apk/androidTest/debug/output-metadata.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "version": 3, - "artifactType": { - "type": "APK", - "kind": "Directory" - }, - "applicationId": "org.opencv.test", - "variantName": "debugAndroidTest", - "elements": [ - { - "type": "SINGLE", - "filters": [], - "attributes": [], - "versionCode": 0, - "versionName": "", - "outputFile": "openCVLibrary300-debug-androidTest.apk" - } - ], - "elementType": "File", - "minSdkVersionForDexing": 24 -} \ No newline at end of file diff --git a/Pink/openCVLibrary300/build/outputs/logs/manifest-merger-debug-report.txt b/Pink/openCVLibrary300/build/outputs/logs/manifest-merger-debug-report.txt deleted file mode 100644 index dc5a258..0000000 --- a/Pink/openCVLibrary300/build/outputs/logs/manifest-merger-debug-report.txt +++ /dev/null @@ -1,22 +0,0 @@ --- Merging decision tree log --- -manifest -ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:2:1-8:12 -INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:2:1-8:12 - package - ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:3:7-27 - INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml - android:versionName - ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:5:7-34 - xmlns:android - ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:2:11-69 - android:versionCode - ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:4:7-33 -uses-sdk -ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:5-43 -INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:5-43 -INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:5-43 - android:targetSdkVersion - INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml - android:minSdkVersion - ADDED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml:7:15-40 - INJECTED from D:\gitPlanet\yola\Pink\openCVLibrary300\src\main\AndroidManifest.xml diff --git a/Pink/openCVLibrary300/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin b/Pink/openCVLibrary300/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin deleted file mode 100644 index aed6cf5..0000000 Binary files a/Pink/openCVLibrary300/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin and /dev/null differ diff --git a/Pink/settings.gradle.kts b/Pink/settings.gradle.kts index 9c53841..e42774f 100644 --- a/Pink/settings.gradle.kts +++ b/Pink/settings.gradle.kts @@ -24,4 +24,5 @@ dependencyResolutionManagement { rootProject.name = "PinkOV" include(":app") +include(":library") include(":openCVLibrary300") diff --git a/Pink/经期设置和计算.md b/Pink/经期设置和计算.md new file mode 100644 index 0000000..c84e1c5 --- /dev/null +++ b/Pink/经期设置和计算.md @@ -0,0 +1,72 @@ +易孕期、排卵日、排卵高峰、安全期 的计算方法 + +# 美柚四类日期计算逻辑(通用妇科标准+APP算法规则) +先明确核心基准:**以月经周期、排卵日为核心,所有区间围绕排卵日前后划分** +## 前置基础概念 +1. 排卵日:卵巢排出成熟卵子当天;卵子存活12~24小时,最长不超48h +2. 精子存活:进入女性体内可存活 **3~5天**(最多7天) +3. 黄体期:排卵后到下次来月经的固定阶段,绝大多数女性稳定 **14天**(美柚默认标准值) +> 公式核心:预估排卵日 = 下次月经第一天 − 14天 + +## 一、第一步:算出【预估排卵日】 +### 标准计算公式 +1. 先算「下次月经来潮日」 + 本次月经首日 + 平均月经周期天数 = 下次月经首日 +2. 排卵日 = 下次月经首日 − 14天 +示例: +本次月经7.1,周期30天 +下次月经:7.1+30=7.31 +排卵日=7.31−14=7.17 + +### APP修正逻辑(美柚动态校准) +单纯公式只是理论值,美柚会用实测数据修正真实排卵日: +- 排卵试纸强阳日、基础体温双相拐点、B超卵泡记录 → 自动修正排卵日,推翻纯公式推算 + +## 二、四大区间逐一定义+计算方式 +### 1. 排卵高峰(排卵峰值日) +- 定义:卵子最可能排出的当天,受孕概率最高 +- 计算:就是上面算出的**排卵日本身** +- APP判定加分项: + 当日试纸强阳、体温骤降次日升温、小腹排卵痛,会标记为「排卵高峰」,受孕概率标最高值 + +### 2. 易孕期(排卵期/受孕窗口期) +原理:精子能提前等卵子,排卵前5天~排卵后1天都有怀孕可能 +#### 计算公式 +易孕期起始日 = 排卵日 − 5天 +易孕期结束日 = 排卵日 + 1天 +区间:排卵前5天 ~ 排卵后1天,共7天 +举例:排卵日7.17 +易孕期:7.12 ~ 7.18 +这7天内同房都有受孕概率,越靠近排卵高峰概率越高 + +### 3. 安全期(分两段:排卵前安全期、排卵后安全期) +安全期=排除经期、排除易孕期的日期,理论受孕概率极低,分两段: +#### ① 排卵前安全期 +本次月经结束次日 → 易孕期前一天(排卵日前6天) +#### ② 排卵后安全期 +排卵日后2天 → 下次月经来前一天 +> 重要提醒:排卵后安全期相对更稳;排卵前安全期极容易因提前排卵、周期波动失效,不能可靠避孕 + +### 4. 补充:经期(月经期) +月经来潮第一天至结束,APP单独色块标注,不属于安全期/易孕期 + +## 三、完整区间举例演示(周期30天,月经7.1~7.6) +1. 下次月经:7.31 +2. 排卵日(排卵高峰):7.17 +3. 易孕期:7.12 ~ 7.18 +4. 排卵前安全期:7.7 ~ 7.11 +5. 排卵后安全期:7.19 ~ 7.30 + +## 四、美柚算法特殊修正规则(和纯手工计算区别) +1. 周期不固定人群:取近6个月平均周期计算基准,每月动态更新 +2. 实测数据优先:只要录入排卵试纸强阳、体温、B超,会自动偏移排卵日,重新计算全部区间 +3. 黄体期异常修正:若连续多周期高温期≠14天,APP会自动调整黄体基准天数,改变排卵推算 +4. 受孕概率权重: + - 排卵高峰(排卵日):概率最高 + - 易孕期前后几天:概率逐步递减 + - 安全期:极低概率,但不会显示0%(存在即兴排卵、周期紊乱意外) + +## 五、关键局限性(APP计算仅作参考) +1. 仅适用于有规律月经人群;多囊、周期经常推迟/提前,推算误差很大 +2. 情绪、熬夜、压力、药物会导致即兴排卵,安全期会失效 +3. 试纸、体温记录是提升推算准确度的核心数据,纯靠月经日期预测误差最大 diff --git a/Pink/美柚APP备孕日历功能列表.md b/Pink/美柚APP备孕日历功能列表.md new file mode 100644 index 0000000..184235e --- /dev/null +++ b/Pink/美柚APP备孕日历功能列表.md @@ -0,0 +1,121 @@ +# 美柚APP底部【记录】模块(备孕日历/备孕模式)完整功能清单 +底部导航「记录」页,切换至**备孕模式**后,核心载体为**备孕日历**,分为四大板块:日历视图、当日打卡记录项、备孕数据图表、模块全局设置,完整功能如下: + + + +## 一、备孕日历基础视图功能(日历主界面) +1. **周期智能预测展示** + - 日历色块标注:月经期、易孕期、排卵日、排卵高峰、安全期 + - 每日受孕概率百分比展示(基于月经、体温、试纸、同房数据计算) + - 月度/周视图切换,可左右滑动切换月份 + - 历史周期回溯:查看过往数月全部记录与排卵预测 + - 未来周期自动推算(经期、排卵、下次月经预估) +2. **日期操作能力** + - 点击任意日期,打开当日记录面板补录/修改数据 + - 长按日期快速新增单项记录(月经、同房、体温等) + - 日期标记:已记录数据的日期会显示对应图标(同房、试纸、体温、症状) +3. **今日核心备孕提示** + - 当日排卵状态、最佳同房时机提醒 + - 排卵试纸/基础体温打卡提醒 + - 经期、黄体期、卵泡期阶段提示 + +## 二、日历内当日打卡记录项(全部可录入数据) +### 1. 月经记录(核心基础项) +- 标记「大姨妈来了」,录入月经**开始/结束日期** +- 经量分级:少量/中等/量大 +- 经血状态:血块、褐色分泌物、淋漓不尽 +- 经期不适症状勾选:痛经、腰酸、乏力、头晕、胸胀等 +- 经期备注文字记录 + +### 2. 同房(爱爱)记录 +- 标记当日有无同房,可选择**内射/外射** +- 同房次数、时间段简易标注 +- 同房后行为记录(垫高臀部、冲洗等) +- 同房感受、身体异常备注 + +### 3. 排卵试纸记录(备孕核心工具项) +- 手动录入试纸结果:白板/弱阳/阳/强阳/转弱 +- **拍照识别试纸**:上传照片AI自动判读显色强度,支持大卫、金秀儿等主流试纸品牌 +- 记录测试时段(早/中/晚)、测试浓度 +- 多条试纸同一天多次测试可分次录入,生成试纸趋势 +- 试纸照片云端保存,日历对应日期可回看 + +### 4. 基础体温(BBT)记录 +- 手动输入晨起静息体温(精确0.1℃) +- 蓝牙体温计设备自动同步体温数据 +- 语音快捷录入体温 +- 标注测量异常情况(熬夜、醒后活动、生病发烧) +- 自动生成**双相体温曲线图**,区分卵泡低温期、黄体高温期,标记排卵拐点 + +### 5. 宫颈粘液(白带)记录 +- 拉丝度分级:无、少量、可拉丝、蛋清状长拉丝 +- 性状区分:浑浊粘稠、透明稀薄、乳白色 +- 颜色、异味异常记录 + +### 6. 身体症状库(全身体征打卡) +排卵相关:小腹坠痛、一侧卵巢刺痛、乳房胀痛、乳头敏感 +全身状态:头晕、嗜睡、失眠、腰酸、长痘、水肿、情绪烦躁 +其他:感冒、腹痛、疲劳、偏头痛等 + +### 7. 早孕试纸记录 +- 区分白板/浅印/明显双杠/强阳 +- 拍照识别早孕试纸,记录检测日期 +- 汇总早孕测试时间线,辅助判断是否受孕 + +### 8. 生活习惯&药物记录 +- 叶酸、维生素、促排药物、中药等服药打卡 +- 饮酒、熬夜、运动、饮食记录 +- 体检、抽血、B超卵泡监测备注 + +### 9. 心情&日记 +- 心情标签:焦虑、期待、低落、放松等 +- 文字日记:备孕感受、身体变化、就医记录、检查结果 +- 可插入图片(B超单、化验单、试纸照片) + +## 三、备孕数据图表&分析工具(日历附属功能) +1. **基础体温趋势图**:全周期曲线,自动标注排卵日、黄体高温区间 +2. **排卵试纸强度曲线**:可视化试纸强弱变化,定位峰值排卵日 +3. **月经周期统计**:平均周期、最短/最长周期、经期平均天数 +4. **同房分布统计**:易孕期同房频次、排卵日同房记录汇总 +5. **周期健康分析**:自动识别周期紊乱、黄体期过短、无双向体温等异常,给出备孕调理建议 +6. **数据导出**:周期记录截图/导出,可给医生查看 + +## 四、备孕日历模块内专属设置功能 +### 1. 基础周期参数设置 +- 自定义平均月经周期、标准经期天数、黄体期天数 +- 修正末次月经,重置全周期预测模型 +- 手动调整排卵预估日期(试纸/体温数据自动修正) + +### 2. 提醒设置(日历推送提醒) +- 经期到来提前提醒 +- 易孕期/排卵日同房提醒 +- 每日测排卵试纸打卡提醒 +- 晨起测基础体温闹钟提醒 +- 叶酸每日服用提醒 +- 自定义提醒时间、推送开关 + +### 3. 记录项自定义开关 +- 隐藏/显示不需要的打卡项(如不用体温可关闭体温模块) +- 自定义常用症状快捷勾选列表 + +### 4. 数据管理设置 +- 单条记录删除、批量删除单日全部记录 +- 周期数据备份、云端同步(多手机账号互通) +- 数据隐私:记录页面加密锁、隐藏生理数据 +- 清空历史周期记录、重置备孕档案 + +### 5. 模式切换设置 +- 备孕↔经期↔怀孕模式一键切换(切换后日历记录项同步变更) +- 切换怀孕模式后,日历自动转为孕周记录视图 + +## 五、辅助配套小工具(备孕日历页内嵌入口) +1. 卵泡监测记录:录入B超卵泡大小、内膜厚度 +2. 孕前检查清单、产检记录归档 +3. 预产期测算工具(测出双杠后一键推算) +4. 排卵计算小工具、安全期计算器 +5. 备孕知识卡片:每日好孕科普、排卵/受孕原理科普 + +## 六、日历数据联动能力 +1. 所有记录数据同步至「我-个人健康档案」 +2. 数据同步至美柚社区备孕圈子,可分享周期记录(可选私密/公开) +3. 试纸、体温、月经数据联动算法,动态修正每日排卵概率,提升预测准确度 \ No newline at end of file