Add preview functions for easy UI viewing in Android Studio (#1901)

This commit is contained in:
Daniel Shokouhi 2021-11-11 08:16:49 -08:00 committed by GitHub
parent f419778e80
commit b060f0c7f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 129 additions and 0 deletions

View file

@ -99,6 +99,7 @@ dependencies {
implementation("androidx.activity:activity-compose:1.4.0")
implementation("androidx.compose.compiler:compiler:1.0.5")
implementation("androidx.compose.foundation:foundation:1.0.5")
implementation("androidx.compose.ui:ui-tooling:1.0.5")
implementation("androidx.wear.compose:compose-foundation:1.0.0-alpha10")
implementation("androidx.wear.compose:compose-material:1.0.0-alpha10")
implementation("androidx.wear.compose:compose-navigation:1.0.0-alpha10")

View file

@ -1,5 +1,6 @@
package io.homeassistant.companion.android.home.views
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
@ -8,6 +9,7 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material.Chip
import androidx.wear.compose.material.Text
@ -19,6 +21,8 @@ import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.data.integration.Entity
import io.homeassistant.companion.android.home.HomePresenterImpl
import io.homeassistant.companion.android.util.getIcon
import io.homeassistant.companion.android.util.previewEntity1
import io.homeassistant.companion.android.util.previewEntity2
import io.homeassistant.companion.android.util.setChipDefaults
@Composable
@ -76,3 +80,18 @@ fun EntityUi(
)
}
}
@Preview
@Composable
private fun PreviewEntityUI() {
Column {
EntityUi(
entity = previewEntity1,
onEntityClicked = {}
)
EntityUi(
entity = previewEntity2,
onEntityClicked = {}
)
}
}

View file

@ -7,6 +7,7 @@ import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material.Chip
import androidx.wear.compose.material.ExperimentalWearMaterialApi
@ -96,3 +97,10 @@ fun LoadHomePage(
}
}
}
@ExperimentalWearMaterialApi
@Preview
@Composable
private fun PreviewHomeView() {
LoadHomePage(mainViewModel = MainViewModel())
}

View file

@ -6,8 +6,10 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.wear.compose.material.ListHeader
import androidx.wear.compose.material.Text
import io.homeassistant.companion.android.R
@Composable
fun ListHeader(
@ -39,3 +41,13 @@ fun ListHeader(id: Int) {
}
}
}
@Preview
@Composable
private fun PreviewListHeader() {
ListHeader(
stringId = R.string.other,
expanded = true,
onExpandChanged = {}
)
}

View file

@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.saveable.rememberSaveable
@ -17,6 +18,7 @@ import androidx.compose.ui.res.colorResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material.Chip
import androidx.wear.compose.material.ChipDefaults
@ -32,8 +34,11 @@ import com.mikepenz.iconics.compose.Image
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.data.integration.Entity
import io.homeassistant.companion.android.util.LocalRotaryEventDispatcher
import io.homeassistant.companion.android.util.RotaryEventDispatcher
import io.homeassistant.companion.android.util.RotaryEventState
import io.homeassistant.companion.android.util.previewEntityList
import io.homeassistant.companion.android.util.previewFavoritesList
import io.homeassistant.companion.android.util.setChipDefaults
@ExperimentalWearMaterialApi
@ -233,3 +238,21 @@ fun MainView(
}
}
}
@ExperimentalWearMaterialApi
@Preview
@Composable
private fun PreviewMainView() {
val rotaryEventDispatcher = RotaryEventDispatcher()
CompositionLocalProvider(
LocalRotaryEventDispatcher provides rotaryEventDispatcher
) {
MainView(
entities = previewEntityList,
favoriteEntityIds = previewFavoritesList,
onEntityClicked = {},
onSettingsClicked = {}
) {}
}
}

View file

@ -7,6 +7,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material.Chip
import androidx.wear.compose.material.ChipDefaults
@ -59,3 +60,12 @@ fun OtherSection(
)
}
}
@Preview
@Composable
private fun PreviewOtherSection() {
OtherSection(
onSettingsClicked = {},
onLogoutClicked = {}
)
}

View file

@ -5,12 +5,14 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material.ExperimentalWearMaterialApi
import androidx.wear.compose.material.PositionIndicator
@ -26,8 +28,13 @@ import com.mikepenz.iconics.compose.Image
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.common.data.integration.Entity
import io.homeassistant.companion.android.util.LocalRotaryEventDispatcher
import io.homeassistant.companion.android.util.RotaryEventDispatcher
import io.homeassistant.companion.android.util.RotaryEventHandlerSetup
import io.homeassistant.companion.android.util.RotaryEventState
import io.homeassistant.companion.android.util.getIcon
import io.homeassistant.companion.android.util.previewEntityList
import io.homeassistant.companion.android.util.previewFavoritesList
@ExperimentalWearMaterialApi
@Composable
@ -104,3 +111,20 @@ fun SetFavoritesView(
}
}
}
@ExperimentalWearMaterialApi
@Preview
@Composable
private fun PreviewSetFavoriteView() {
val rotaryEventDispatcher = RotaryEventDispatcher()
CompositionLocalProvider(
LocalRotaryEventDispatcher provides rotaryEventDispatcher
) {
RotaryEventHandlerSetup(rotaryEventDispatcher)
SetFavoritesView(
validEntities = previewEntityList,
favoriteEntityIds = previewFavoritesList,
onFavoriteSelected = { _, _ -> }
)
}
}

View file

@ -7,6 +7,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.wear.compose.material.Chip
import androidx.wear.compose.material.ChipDefaults
@ -14,6 +15,7 @@ import androidx.wear.compose.material.Text
import com.mikepenz.iconics.compose.Image
import com.mikepenz.iconics.typeface.library.community.material.CommunityMaterial
import io.homeassistant.companion.android.R
import io.homeassistant.companion.android.util.previewFavoritesList
@Composable
fun SettingsView(
@ -64,3 +66,13 @@ fun SettingsView(
)
}
}
@Preview
@Composable
private fun PreviewSettingsView() {
SettingsView(
favorites = previewFavoritesList,
onClickSetFavorites = { /*TODO*/ },
onClearFavorites = {}
)
}

View file

@ -0,0 +1,20 @@
package io.homeassistant.companion.android.util
import io.homeassistant.companion.android.common.data.integration.Entity
import java.util.Calendar
val attributes: Map<*, *> = mapOf(
"friendly_name" to "Testing",
"icon" to "mdi:cellphone"
)
private val calendar: Calendar = Calendar.getInstance()
val previewEntity1 = Entity("light.test", "on", attributes, calendar, calendar, mapOf())
val previewEntity2 = Entity("scene.test", "on", attributes, calendar, calendar, mapOf())
val previewEntityList = listOf(
previewEntity1, previewEntity2
)
val previewFavoritesList = listOf("light.test")