Giter Club home page Giter Club logo

conference-app-2022's Introduction

DroidKaigi 2022 logo

DroidKaigi 2022 official app

DroidKaigi 2022 will be held from October 5 to October 7, 2022. We are developing its application. Let's develop the app together and make it exciting.

Features

top drawer

Design

Try it out

Android

You can install the production app via Get it on Google Play.

You can install the production app via Get it on Google Play

The builds being distributed through mobile app distribution services.

  • Try the latest staging through Download to device

You can download apk from the GitHub Artifact. https://github.com/DroidKaigi/conference-app-2022/actions/workflows/Build.yml?query=branch%3Amain

iOS

You can install the production app via Get it on App Store.

You can install the production app via Get it on App Store

Beta version of this app is available on TestFlight. You can try and test this app with following public link.

https://testflight.apple.com/join/YrBzLxIy

In this project, distribute beta version with Xcode Cloud.

Contributing

We always welcome any and all contributions! See CONTRIBUTING.md for more information.

For Japanese speakers, please see CONTRIBUTING.ja.md.

Requirements

Latest Android Studio Electric Eel or higher. You can download it from this page.

iOS Requirements.

Tech Stacks

This year's app pretty much takes the idea from now in android and adds a lot of ideas to it.

image

Configurable build logic

Management methods such as feature-xxx and core-xx, which are used in modularization, are introduced to manage the build logic. This method makes the build logic manageable.

It is managed by two types of plugins.

  • Primitive plugins

It includes several simple plugins, such as the Android plugin and the Compose plugin, as shown below. Even simple plugins require dependencies among plugins, which can be configured by indicating such dependencies in the package path. For example, android.hilt requires an android plugin.

plugins {
    id("droidkaigi.primitive.android")
    id("droidkaigi.primitive.android.kotlin")
    id("droidkaigi.primitive.android.compose")
}
  • Convention plugins

The Convention plugin for this project is written by combining several primitive plugins.

class AndroidFeaturePlugin : Plugin<Project> {
    override fun apply(target: Project) {
        with(target) {
            with(pluginManager) {
                apply("droidkaigi.primitive.android")
                apply("droidkaigi.primitive.android.kotlin")
                apply("droidkaigi.primitive.android.compose")
                apply("droidkaigi.primitive.android.hilt")
                apply("droidkaigi.primitive.spotless")
                apply("droidkaigi.primitive.molecule")
            }
        }
    }
}

Building a UiModel using Compose

https://github.com/cashapp/molecule is used to create the UiModel.
Jetpack Compose allows reactive streams such as Flow to be easily handled by Recompose. This also allows you to create an initial State.

val uiModel = moleculeScope.moleculeComposeState(clock = ContextClock) {
    val scheduleResult by scheduleResultFlow.collectAsState(initial = Result.Loading)

    val scheduleState by remember {
        derivedStateOf {
            val scheduleState = ScheduleState.of(scheduleResult)
            scheduleState.filter(filters.value)
        }
    }
    SessionsUiModel(scheduleState = scheduleState, isFilterOn = filters.value.filterFavorite)
}

Testing strategy

Make test scalable by using robot testing pattern

In this project, tests are separated into what and how. This makes the tests scalable, as there is no need to rewrite many tests when the Compose mechanism, layout, etc. changes.

The test describes what is to be tested.

@RunWith(AndroidJUnit4::class)
@HiltAndroidTest
class SessionsScreenTest {

    @get:Rule val robotTestRule = RobotTestRule(this)
    @Inject lateinit var sessionScreenRobot: SessionScreenRobot

    @Test
    fun canToggleFavorite() {
        sessionScreenRobot(robotTestRule) {
            clickFavoriteAt(0)
            checkFavoritedAt(index = 0, isFavorited = true)
            checkFavoriteIsSavedAt(0)
        }
    }
}

Robot describes how to test it. It therefore contains implementation details. There is no need to look at this code when adding tests on a regular basis.

class SessionScreenRobot @Inject constructor() {
    ...

    context(RobotTestRule)
    fun clickFavoriteAt(index: Int) {
        composeTestRule
            .onFavorite(
                index
            )
            .performClick()
    }

    private fun AndroidComposeTestRule<*, *>.onFavorite(index: Int): SemanticsNodeInteraction {
        val title = DroidKaigiSchedule.fake().itemAt(index)
            .title
            .currentLangTitle

        return onNode(
            matcher = hasTestTag("favorite") and hasAnySibling(hasText(title)),
            useUnmergedTree = true
        )
    }
...

Create a test with high fidelity without making it flaky

In this project, we will use Hilt in the JVM for integration testing to avoid device-specific problems.
We believe that the more we use the same classes as the actual production application, the better the test will be able to catch real problems. Therefore, we use production dependencies as much as possible with Hilt.
The test basically uses the actual dependencies and Fake the Repository, which is the point of contact with the outside world.

image

@TestInstallIn(
    components = [SingletonComponent::class],
    replaces = [SessionDataModule::class] // replace the production Module
)
@Module
class TestSessionDataModule {
    @Provides
    fun provideSessionsRepository(): SessionsRepository {
        return FakeSessionsRepository()
    }
}

Expose fields that are not used in the app only in the Fake repository to allow some testing. Here we see that Favorite has been saved.

class FakeSessionsRepository : SessionsRepository {
    private val favorites = MutableStateFlow(persistentSetOf<TimetableItemId>())
    
    // ...
    
    // for test
    val savedFavorites get(): PersistentSet<TimetableItemId> = favorites.value
}
class SessionScreenRobot @Inject constructor() {
    @Inject lateinit var sessionsRepository: SessionsRepository
    private val fakeSessionsRepository: FakeSessionsRepository
        get() = sessionsRepository as FakeSessionsRepository

    fun checkFavoriteIsSavedAt(index: Int) {
        val expected = DroidKaigiSchedule.fake().itemAt(index).id
        fakeSessionsRepository.savedFavorites shouldContain expected
    }
}

Instant logic updates using Kotlin JS

We are trying to use https://github.com/cashapp/zipline as an experimental approach.
This allows us to use the regular JVM Kotlin implementation as a fallback, while releasing logic implemented in Javascript, which can be updated instantly as well as development on the Web.
We are excited about these possibilities for Kotlin.

The following interface is implemented in Kotlin JS and Android.
You can add session announcements, etc. here. Since this is an experimental trial, it does not have such a practical role this time.

interface ScheduleModifier : ZiplineService {
    suspend fun modify(
        schedule: DroidKaigiSchedule
    ): DroidKaigiSchedule
}
class AndroidScheduleModifier : ScheduleModifier {
    override suspend fun modify(schedule: DroidKaigiSchedule): DroidKaigiSchedule {
        return schedule
    }
}
class JsScheduleModifier() : ScheduleModifier {
    override suspend fun modify(schedule: DroidKaigiSchedule): DroidKaigiSchedule {
...
    if (timetableItem is Session &&
        timetableItem.id == TimetableItemId("1")
    ) {
        timetableItem.copy(
            message = MultiLangText(
                enTitle = "This is a js message",
                jaTitle = "これはJSからのメッセージ",
            )
        )
    } else {
        timetableItem
    }
...
    }
}

You can check the manifest file to see how it works.
https://droidkaigi.github.io/conference-app-2022/manifest.zipline.json

LazyLayout

We are trying to draw a timetable using LazyLayout, a base implementation of LazyColumn and LazyGrid, which was introduced in the Lazy layouts in Compose session at Google I/O.

Special Thanks

conference-app-2022's People

Contributors

att55 avatar coffmark avatar corvus400 avatar fummicc1 avatar hikarusato avatar ho2ri2s avatar kafumi avatar kako351 avatar kittinunf avatar kubode avatar mtkw0127 avatar nakaokarei avatar numeroanddev avatar nyafunta9858 avatar obaya884 avatar renovate[bot] avatar rkowase avatar ry-itto avatar ryunen344 avatar sako810 avatar sobaya-0141 avatar sudachi808 avatar t-nonomura avatar takahirom avatar tnj avatar touyou avatar txxxxc avatar whitescent avatar woxtu avatar yukilabo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

conference-app-2022's Issues

Make KaigiTag slot API pattern 🎰

Describe the idea
Currently, we are passing parameters expressly like text: String . But if we can use label: @Composable () -> Unit, we can also add image in it. I think it will be more flexible.

And in the KaigiTag composable, I think we can add CompositionLocalProvider to adapt the text design. 🎨

    CompositionLocalProvider(
        LocalContentColor provides labelColor,
        LocalTextStyle provides labelTextStyle
    ) {
      label()

Reference images and links

image

  • You can also use Material3 chip as a reference.

https://developer.android.com/reference/kotlin/androidx/compose/material3/package-summary#AssistChip(kotlin.Function0,kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Function0,kotlin.Function0,androidx.compose.ui.graphics.Shape,androidx.compose.material3.ChipColors,androidx.compose.material3.ChipElevation,androidx.compose.material3.ChipBorder,androidx.compose.foundation.interaction.MutableInteractionSource)

Scroll up when taps current tab

Idea Description
We can scroll on the timetable and sessions list.
So, we want to scroll up to top when we tap current tab.

Reference images and links
image

Make a navigation drawer divider by group

Idea Description
Make DrawerGroup and add it in DrawerItem for inserting divider.
like this,

DrawerItem.Sessions(DrawerGroup.Session, R.string.title_sessions, Icons.Default.Event, SessionsNavGraph.sessionRoute),

Currently, this feature is implemented by a if statement in NavigationDrawerItem

if (drawerItem == DrawerItem.Sessions || drawerItem == DrawerItem.Map) {

Reference images and links

screenshot

Separate the hours from Pager

Idea Description
see #151

The hours is built in the Pager because of ScreenScrollState issues.
If possible, it is preferable that the Hours be separated from the Pager.

Hours is in the Pager, so when we switch pages (tabs), the hours moves with it.
We want to detach the Hours from the Pager.

To do this, I think we need to consider how to handle ScreenScrollState.

Reference images and links
#109
#151

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

Rate-Limited

These updates are currently rate-limited. Click on a checkbox below to force their creation now.

  • Update androidGradlePlugin to v7.4.2 (com.android.library, com.android.application, com.android.tools.build:gradle)
  • Update dependency androidx.appcompat:appcompat to v1.6.1
  • Update dependency androidx.benchmark:benchmark-macro-junit4 to v1.2.4
  • Update dependency androidx.core:core-splashscreen to v1.0.1
  • Update dependency androidx.test.ext:junit to v1.1.5
  • Update dependency com.android.tools:desugar_jdk_libs to v2.0.4
  • Update dependency com.google.android.gms:oss-licenses-plugin to v0.10.6
  • Update dependency com.google.android.gms:play-services-oss-licenses to v17.0.1
  • Update dependency com.google.firebase:firebase-crashlytics-gradle to v2.9.9
  • Update dependency org.jetbrains.kotlinx:kotlinx-collections-immutable to v0.3.7
  • Update showkase to v1.0.2 (com.airbnb.android:showkase-processor, com.airbnb.android:showkase)
  • Update sqldelight to v1.5.5 (com.squareup.sqldelight, com.squareup.sqldelight:coroutines-extensions, com.squareup.sqldelight:native-driver, com.squareup.sqldelight:android-driver, com.squareup.sqldelight:gradle-plugin)
  • Update zipline to v0.9.20 (app.cash.zipline:zipline-loader, app.cash.zipline:zipline, app.cash.zipline:zipline-gradle-plugin, app.cash.zipline:zipline-kotlin-plugin)
  • Update accompanist to v0.34.0 (com.google.accompanist:accompanist-placeholder-material, com.google.accompanist:accompanist-flowlayout, com.google.accompanist:accompanist-pager)
  • Update actions/github-script action to v3.2.0
  • Update compose to v1.6.7 (androidx.compose.ui:ui-test-manifest, androidx.compose.ui:ui-tooling, androidx.compose.ui:ui-test-junit4, androidx.compose.ui:ui-tooling-preview, androidx.compose.ui:ui-text-google-fonts, androidx.compose.ui:ui, androidx.compose.runtime:runtime)
  • Update dagger to v2.51.1 (com.google.dagger.hilt.android, com.google.dagger:hilt-android-testing, com.google.dagger:hilt-android-compiler, com.google.dagger:hilt-android, com.google.dagger:hilt-android-gradle-plugin)
  • Update dependency androidx.browser:browser to v1.8.0
  • Update dependency androidx.compose.foundation:foundation to v1.6.7
  • Update dependency androidx.compose.material3:material3 to v1.2.1
  • Update dependency androidx.compose.material3:material3-window-size-class to v1.2.1
  • Update dependency androidx.compose.material:material to v1.6.7
  • Update dependency androidx.compose.material:material-icons-extended to v1.6.7
  • Update dependency androidx.core:core-ktx to v1.13.1
  • Update dependency androidx.datastore:datastore-preferences to v1.1.1
  • Update dependency androidx.fragment:fragment to v1.7.1
  • Update dependency androidx.hilt:hilt-navigation-compose to v1.2.0
  • Update dependency androidx.lifecycle:lifecycle-runtime-ktx to v2.8.0
  • Update dependency androidx.navigation:navigation-compose to v2.7.7
  • Update dependency androidx.profileinstaller:profileinstaller to v1.3.1
  • Update dependency androidx.test.espresso:espresso-core to v3.5.1
  • Update dependency androidx.test.uiautomator:uiautomator to v2.3.0
  • Update dependency app.cash.molecule:molecule-gradle-plugin to v0.11.0
  • Update dependency app.cash.zipline:zipline to v1.10.1
  • Update dependency co.touchlab:kermit to v1.2.3
  • Update dependency com.codingfeline.buildkonfig:buildkonfig-gradle-plugin to v0.15.1
  • Update dependency com.diffplug.spotless:spotless-plugin-gradle to v6.25.0
  • Update dependency com.google.android.material:material to v1.12.0
  • Update dependency com.google.firebase:firebase-analytics-ktx to v21.6.2
  • Update dependency com.google.firebase:firebase-common to v20.4.3
  • Update dependency com.google.firebase:firebase-crashlytics-ktx to v18.6.4
  • Update dependency com.google.gms:google-services to v4.4.1
  • Update dependency com.google.testparameterinjector:test-parameter-injector to v1.16
  • Update dependency cybozu/LicenseList to from: "0.7.0"
  • Update dependency dev.gitlive:firebase-auth to v1.12.0
  • Update dependency firebase/firebase-ios-sdk to from: "10.26.0"
  • Update dependency gradle to v7.6.4
  • Update dependency io.coil-kt:coil-compose to v2.6.0
  • Update dependency io.insert-koin:koin-core to v3.5.6
  • Update dependency onevcat/Kingfisher to from: "7.11.0"
  • Update dependency org.jetbrains.kotlinx:kotlinx-coroutines-core to v1.8.1
  • Update dependency org.jetbrains.kotlinx:kotlinx-datetime to v0.6.0
  • Update dependency org.jetbrains.kotlinx:kotlinx-serialization-json to v1.6.3
  • Update dependency org.robolectric:robolectric to v4.12.2
  • Update detekt to v1.23.6 (io.gitlab.arturbosch.detekt, io.gitlab.arturbosch.detekt:detekt-gradle-plugin)
  • Update gradle/wrapper-validation-action action to v1.1.0
  • Update kotlin monorepo to v1.9.24 (org.jetbrains.kotlin.android, org.jetbrains.kotlin:kotlin-serialization, org.jetbrains.kotlin:kotlin-gradle-plugin)
  • Update ktor monorepo to v2.3.11 (io.ktor:ktor-client-content-negotiation, io.ktor:ktor-serialization-kotlinx-json, io.ktor:ktor-client-darwin, io.ktor:ktor-client-okhttp, io.ktor:ktor-client-core)
  • Update mokoResources to v0.23.0 (dev.icerock.moko:resources-compose, dev.icerock.moko:resources, dev.icerock.moko:resources-generator)
  • Update okhttp monorepo to v4.12.0 (com.squareup.okhttp3:logging-interceptor, com.squareup.okhttp3:okhttp)
  • Update actions/cache action to v4
  • Update actions/checkout action to v4
  • Update actions/configure-pages action to v5
  • Update actions/deploy-pages action to v4
  • Update actions/github-script action to v7
  • Update actions/setup-java action to v4
  • Update actions/upload-artifact action to v4
  • Update actions/upload-pages-artifact action to v3
  • Update androidGradlePlugin to v8 (major) (com.android.library, com.android.application, com.android.tools.build:gradle)
  • Update dawidd6/action-download-artifact action to v3
  • Update dependency app.cash.molecule:molecule-gradle-plugin to v1
  • Update dependency co.touchlab:kermit to v2
  • Update dependency com.google.firebase:firebase-analytics-ktx to v22
  • Update dependency com.google.firebase:firebase-auth to v23
  • Update dependency com.google.firebase:firebase-common to v21
  • Update dependency com.google.firebase:firebase-crashlytics-gradle to v3
  • Update dependency com.google.firebase:firebase-crashlytics-ktx to v19
  • Update dependency gradle to v8
  • Update dependency macos to v14
  • Update dependency pointfreeco/swift-composable-architecture to v1
  • Update gradle/wrapper-validation-action action to v3
  • Update multiplatformSettings to v1 (major) (com.russhwolf:multiplatform-settings-datastore, com.russhwolf:multiplatform-settings-coroutines)
  • Update zipline to v1 (major) (app.cash.zipline:zipline-loader, app.cash.zipline:zipline, app.cash.zipline:zipline-gradle-plugin, app.cash.zipline:zipline-kotlin-plugin)
  • 🔐 Create all rate-limited PRs at once 🔐

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/Build.yml
  • actions/checkout v3
  • actions/cache v3
  • gradle/wrapper-validation-action v1.0.4
  • actions/setup-java v3
  • gradle/gradle-build-action v2
  • actions/upload-artifact v3
  • actions/upload-artifact v3
  • macos 12
.github/workflows/CommentPR.yml
  • actions/github-script v3.1.1
  • actions/checkout v3
  • actions/github-script v3
.github/workflows/DependencyDiff.yml
  • actions/checkout v3
  • actions/setup-java v3
  • peter-evans/find-comment b1c41cb2fb7ede4111f49c934663a66f1a664b63
  • peter-evans/create-or-update-comment 6fcd282399b3c9ad0bd9bd8025b8fb2c18b085dd
.github/workflows/DeployZipline.yml
  • actions/checkout v3
  • gradle/wrapper-validation-action v1.0.4
  • actions/setup-java v3
  • gradle/gradle-build-action v2
  • actions/configure-pages v2
  • actions/upload-pages-artifact v1
  • actions/deploy-pages v1
.github/workflows/DropStaging.yml
  • actions/github-script v3
  • actions/checkout v3
.github/workflows/Format.yml
  • actions/checkout v3
  • actions/setup-java v3
  • reviewdog/action-suggester v1
.github/workflows/ScreenShotTest.yml
  • actions/checkout v3
  • gradle/wrapper-validation-action v1.0.4
  • actions/setup-java v3
  • gradle/gradle-build-action v2
  • dawidd6/action-download-artifact v2
  • actions/upload-artifact v3
  • macos 12
.github/workflows/StagePullRequest.yml
  • actions/checkout v3
  • actions/checkout v3
  • actions/github-script v3
  • actions/github-script v3
  • jmatsu/dg-upload-app-action v0.2
.github/workflows/StagePush.yml
  • actions/checkout v3
  • actions/checkout v3
  • actions/github-script v3
  • jmatsu/dg-upload-app-action v0.2
.github/workflows/UpdateScreenshots.yml
  • actions/checkout v3
  • actions/setup-java v3
  • actions/upload-artifact v3
  • macos 12
.github/workflows/iOSBuild.yml
  • actions/checkout v3
  • gradle/wrapper-validation-action v1.0.4
  • actions/setup-java v3
  • gradle/gradle-build-action v2
  • actions/upload-artifact v3
  • macos 12
.github/workflows/iOSLint.yml
  • actions/checkout v3
  • macos 12
gradle
gradle.properties
settings.gradle.kts
build.gradle.kts
app-android/build.gradle.kts
app-ios-combined/build.gradle.kts
benchmark/build.gradle.kts
core/data/build.gradle.kts
core/designsystem/build.gradle.kts
core/model/build.gradle.kts
core/testing/build.gradle.kts
core/ui/build.gradle.kts
core/zipline/build.gradle.kts
feature/about/build.gradle.kts
feature/announcement/build.gradle.kts
feature/contributors/build.gradle.kts
feature/map/build.gradle.kts
feature/sessions/build.gradle.kts
feature/setting/build.gradle.kts
feature/sponsors/build.gradle.kts
feature/staff/build.gradle.kts
gradle/libs.versions.toml
  • com.android.tools.build:gradle 7.4.0
  • org.jetbrains.kotlin:kotlin-gradle-plugin 1.7.20
  • com.diffplug.spotless:spotless-plugin-gradle 6.11.0
  • com.google.dagger:hilt-android-gradle-plugin 2.44.2
  • app.cash.molecule:molecule-gradle-plugin 0.5.0
  • androidx.compose.compiler:compiler 1.3.2
  • org.jetbrains.kotlin:kotlin-serialization 1.7.20
  • com.codingfeline.buildkonfig:buildkonfig-gradle-plugin 0.13.3
  • app.cash.zipline:zipline-kotlin-plugin 0.9.8
  • app.cash.zipline:zipline-gradle-plugin 0.9.8
  • com.google.gms:google-services 4.3.14
  • dev.icerock.moko:resources-generator 0.20.1
  • com.android.tools:desugar_jdk_libs 2.0.0
  • io.gitlab.arturbosch.detekt:detekt-gradle-plugin 1.22.0-RC2
  • com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin 1.7.20-1.0.6
  • app.cash.paparazzi:paparazzi-gradle-plugin 1.0.0
  • com.google.android.gms:oss-licenses-plugin 0.10.5
  • com.google.firebase:firebase-crashlytics-gradle 2.9.2
  • androidx.compose.runtime:runtime 1.3.2
  • androidx.compose.ui:ui 1.3.2
  • androidx.compose.ui:ui-text-google-fonts 1.3.2
  • androidx.compose.material:material 1.3.1
  • androidx.compose.foundation:foundation 1.3.1
  • androidx.compose.material:material-icons-extended 1.3.1
  • androidx.compose.material3:material3 1.0.0-rc01
  • androidx.compose.ui:ui-tooling-preview 1.3.2
  • androidx.compose.ui:ui-test-junit4 1.3.2
  • androidx.compose.ui:ui-tooling 1.3.2
  • androidx.compose.ui:ui-test-manifest 1.3.2
  • androidx.compose.material3:material3-window-size-class 1.0.0-rc01
  • com.google.dagger:hilt-android 2.44.2
  • com.google.dagger:hilt-android-compiler 2.44.2
  • com.google.accompanist:accompanist-pager 0.26.2-beta
  • com.google.accompanist:accompanist-flowlayout 0.26.2-beta
  • com.google.accompanist:accompanist-placeholder-material 0.26.2-beta
  • org.jetbrains.kotlinx:kotlinx-serialization-json 1.4.1
  • androidx.core:core-ktx 1.9.0
  • androidx.appcompat:appcompat 1.6.0-rc01
  • androidx.navigation:navigation-compose 2.5.2
  • androidx.lifecycle:lifecycle-runtime-ktx 2.5.1
  • androidx.activity:activity-compose 1.6.0
  • androidx.fragment:fragment 1.5.3
  • androidx.datastore:datastore-preferences 1.0.0
  • androidx.startup:startup-runtime 1.1.1
  • androidx.browser:browser 1.4.0
  • androidx.core:core-splashscreen 1.0.0
  • com.russhwolf:multiplatform-settings-coroutines 0.9
  • com.russhwolf:multiplatform-settings-datastore 0.9
  • com.google.android.material:material 1.6.1
  • androidx.hilt:hilt-navigation-compose 1.0.0
  • io.ktor:ktor-client-core 2.1.2
  • io.ktor:ktor-client-okhttp 2.1.2
  • io.ktor:ktor-client-darwin 2.1.2
  • io.ktor:ktor-serialization-kotlinx-json 2.1.2
  • io.ktor:ktor-client-content-negotiation 2.1.2
  • org.jetbrains.kotlinx:kotlinx-coroutines-core 1.6.4
  • org.jetbrains.kotlinx:kotlinx-datetime 0.4.0
  • app.cash.zipline:zipline 0.9.8
  • app.cash.zipline:zipline 1.0.0-SNAPSHOT
  • app.cash.zipline:zipline-loader 0.9.8
  • com.squareup.okhttp3:okhttp 4.10.0
  • com.squareup.okhttp3:logging-interceptor 4.10.0
  • com.squareup.sqldelight:gradle-plugin 1.5.4
  • com.squareup.sqldelight:android-driver 1.5.4
  • com.squareup.sqldelight:native-driver 1.5.4
  • com.squareup.sqldelight:coroutines-extensions 1.5.4
  • org.jetbrains.kotlinx:kotlinx-collections-immutable 0.3.5
  • co.touchlab:kermit 1.1.3
  • dev.gitlive:firebase-auth 1.6.2
  • com.google.firebase:firebase-common 20.2.0
  • com.google.firebase:firebase-auth 21.0.8
  • io.coil-kt:coil-compose 2.2.2
  • dev.icerock.moko:resources 0.20.1
  • dev.icerock.moko:resources-compose 0.20.1
  • com.google.android.gms:play-services-oss-licenses 17.0.0
  • com.google.firebase:firebase-crashlytics-ktx 18.3.0
  • com.google.firebase:firebase-analytics-ktx 21.2.0
  • com.twitter.compose.rules:detekt 0.0.20
  • io.insert-koin:koin-core 3.2.2
  • junit:junit 4.13.2
  • androidx.test.ext:junit 1.1.3
  • androidx.test.espresso:espresso-core 3.4.0
  • androidx.test.uiautomator:uiautomator 2.2.0
  • androidx.benchmark:benchmark-macro-junit4 1.2.0-alpha05
  • androidx.profileinstaller:profileinstaller 1.2.0
  • com.google.dagger:hilt-android-testing 2.44.2
  • org.robolectric:robolectric 4.9
  • org.amshove.kluent:kluent-android 1.69
  • com.airbnb.android:showkase 1.0.0-beta13
  • com.airbnb.android:showkase-processor 1.0.0-beta13
  • com.google.testparameterinjector:test-parameter-injector 1.9
  • com.android.application 7.4.0
  • com.android.library 7.4.0
  • org.jetbrains.kotlin.android 1.7.20
  • com.google.dagger.hilt.android 2.44.2
  • com.google.devtools.ksp 1.7.20-1.0.6
  • app.cash.paparazzi 1.0.0
  • com.squareup.sqldelight 1.5.4
  • io.gitlab.arturbosch.detekt 1.22.0-RC2
gradle/plugins/gradle.properties
gradle/plugins/settings.gradle
gradle/plugins/build.gradle.kts
preview-screenshots/build.gradle.kts
gradle-wrapper
gradle/plugins/gradle/wrapper/gradle-wrapper.properties
  • gradle 7.5.1
gradle/wrapper/gradle-wrapper.properties
  • gradle 7.5.1
swift
app-ios/Package.swift
  • firebase/firebase-ios-sdk from: "10.0.0"
  • pointfreeco/swift-composable-architecture from: "0.42.0"
  • cybozu/LicenseList from: "0.2.0"
  • onevcat/Kingfisher from: "7.4.0"

  • Check this box to trigger a request for Renovate to run again on this repository

create Search Screen without design

Idea Description

  • create only search screen without design
  • fill in name , filtered list shows
  • issue devided apply design

Reference images and links
design coming soon

create floor map screen

Idea Description
create floor map screen without design

issue devided apply design

Reference images and links
coming soon

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.