Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions androidApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,6 @@ dependencies {
implementation(project(":shared"))
implementation(platform(libs.compose.bom))
implementation(libs.bundles.composeBundles)
implementation(libs.androidx.material3)
implementation(libs.androidx.navigation.compose)
}
2 changes: 1 addition & 1 deletion androidApp/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:name=".view.activity.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.github.dosukoijuku.octopusenergychecker.android.view.activity

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import io.github.dosukoijuku.octopusenergychecker.android.view.compose.top.TopScreen
import io.github.dosukoijuku.octopusenergychecker.android.view.theme.OctopusTheme

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
OctopusTheme {
TopScreen()
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package io.github.dosukoijuku.octopusenergychecker.android.view.compose.common

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.dp
import io.github.dosukoijuku.octopusenergychecker.android.R
import io.github.dosukoijuku.octopusenergychecker.android.view.theme.OctopusTheme

@Composable
fun LoginStateCard(
uiState: LoginStateCardUiState
) {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp),
colors = CardDefaults.cardColors(
containerColor = MaterialTheme.colorScheme.tertiaryContainer
)
) {
Column(
modifier = Modifier.padding(8.dp),
verticalArrangement = Arrangement.spacedBy(16.dp),
horizontalAlignment = Alignment.Start
) {
Text(
text = stringResource(R.string.title_login_status),
style = MaterialTheme.typography.headlineMedium
)
Row(
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.fillMaxWidth(),
) {
OutlinedButton(
onClick = { /*TODO*/ },
colors = ButtonDefaults.outlinedButtonColors(
containerColor = MaterialTheme.colorScheme.secondary,
contentColor = MaterialTheme.colorScheme.onSecondary
)
) {
Text(text = stringResource(R.string.to_check))
}
when (uiState) {
LoginStateCardUiState.UnChecked -> {} //Nothing
LoginStateCardUiState.Loading -> {
CircularProgressIndicator()
}

LoginStateCardUiState.NotLoggedIn -> {
Text(text = stringResource(R.string.not_login_message))
}

is LoginStateCardUiState.LoggedIn -> {
Text(text = stringResource(R.string.logged_in_message, uiState.name))
}
}
}
}
}
}

sealed class LoginStateCardUiState {
data object UnChecked : LoginStateCardUiState()
data object Loading : LoginStateCardUiState()
data class LoggedIn(
val name: String
) : LoginStateCardUiState()

data object NotLoggedIn : LoginStateCardUiState()
}

@Preview
@Composable
private fun LoginStateCardPreview(
@PreviewParameter(provider = PreviewLoginStateCardUiStateProvider::class) uiState: LoginStateCardUiState
) {
OctopusTheme {
LoginStateCard(
uiState = uiState
)
}
}

private class PreviewLoginStateCardUiStateProvider :
PreviewParameterProvider<LoginStateCardUiState> {
override val values: Sequence<LoginStateCardUiState>
get() = sequenceOf(
LoginStateCardUiState.UnChecked,
LoginStateCardUiState.Loading,
LoginStateCardUiState.LoggedIn(name = "土酢 個伊"),
LoginStateCardUiState.NotLoggedIn
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package io.github.dosukoijuku.octopusenergychecker.android.view.compose.home

import androidx.compose.material.Text
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable

@Composable
fun HomeScreen() {
Text(
text = "Hello World", color = MaterialTheme.colorScheme.onBackground
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package io.github.dosukoijuku.octopusenergychecker.android.view.compose.setting

import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import io.github.dosukoijuku.octopusenergychecker.android.R
import io.github.dosukoijuku.octopusenergychecker.android.view.compose.common.LoginStateCard
import io.github.dosukoijuku.octopusenergychecker.android.view.compose.common.LoginStateCardUiState
import io.github.dosukoijuku.octopusenergychecker.android.view.theme.OctopusTheme

@Composable
fun SettingScreen() {

//TODO ViewModelに吸収させる
val loginStateCardUiState by remember { mutableStateOf(LoginStateCardUiState.NotLoggedIn) }

Scaffold(
topBar = { SettingScreenTopBar() }
) {
Column(
modifier =
Modifier
.padding(it)
.fillMaxWidth(),
) {
LoginStateCard(
uiState = loginStateCardUiState
)
}
}
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun SettingScreenTopBar() {
TopAppBar(
title = {
Text(stringResource(id = R.string.nav_setting_title))
}
)
}

@Preview
@Composable
private fun SettingScreenPreview() {
OctopusTheme {
SettingScreen()
}
}
Loading