Skip to content
Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
69aec0d
add:jetpackComposeに追加
harutiro Jan 20, 2025
6d3bfc6
fix: Activityの名前をMainActivityに変更
harutiro Jan 20, 2025
7ade9d7
fix: デフォルトのテーマを反映
harutiro Jan 20, 2025
5ceb594
add: 検索画面作成
harutiro Jan 20, 2025
21e0dd3
add: ローディング画面の作成
harutiro Jan 20, 2025
15c7546
add: 詳細画面に遷移できるようにした。
harutiro Jan 20, 2025
3d295eb
fix: レポジトリのリストを取得するものはそのような名前にするように変更
harutiro Jan 20, 2025
3ca8e44
add: 詳細を押した時に、詳細が表示されるyouni
harutiro Jan 20, 2025
e01f44c
add: 詳細画面に行くときに、AppBarに戻るボタンを用意した。
harutiro Jan 20, 2025
5f6e98c
add: エラーを表示させる時に、スナックバーに変更
harutiro Jan 20, 2025
acd828f
ref: リンターの変更
harutiro Jan 20, 2025
9baaee1
ref: material3の警告解除を消去
harutiro Jan 20, 2025
5c3c9e2
add: 詳細分のUnitTestを追加した。
harutiro Jan 20, 2025
23d3050
delete: fragmentの時の記述をすべて消去した。
harutiro Jan 20, 2025
d67d4a5
ref: リンターの修正
harutiro Jan 20, 2025
c30c479
ref: リンターの修正
harutiro Jan 20, 2025
3c5024e
fix: タイポグラフィーの完全の実装を行なった
harutiro Jan 20, 2025
d026e54
fix: アクセシビリティとローカライゼーションの改善
harutiro Jan 20, 2025
bedab2d
fix: エラーハンドリングの改善
harutiro Jan 20, 2025
99b1860
fix: アクセシビリティの改善
harutiro Jan 20, 2025
1942c47
fix: 画像読み込みの改善
harutiro Jan 20, 2025
0c89774
fix: エラーメッセージのリソース化
harutiro Jan 20, 2025
39c75af
fix: 状態管理とエラーハンドリングの改善
harutiro Jan 20, 2025
8513674
fix: エラーハンドリングとユーザー体験の改善
harutiro Jan 20, 2025
e9a1c79
fix: 統計情報のテキストをリソース化
harutiro Jan 20, 2025
230ba6c
fix: 初期ローディング状態の設定とUI表示の制御
harutiro Jan 20, 2025
e6cfc32
fix:文字列リソースの重複の解消
harutiro Jan 20, 2025
a94b51d
fix:カウント表示文字列の重複と不整合の修正
harutiro Jan 20, 2025
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 .editorconfig
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
[*.{kt,kts}]
ktlint_standard_package-name = disabled
ktlint_function_naming_ignore_when_annotated_with = Composable

28 changes: 22 additions & 6 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ plugins {
id("org.jlleitschuh.gradle.ktlint") version "12.1.2"
id 'com.google.dagger.hilt.android'
id 'jacoco'
id("org.jetbrains.kotlin.plugin.compose") version "2.1.0"
}

android {
Expand Down Expand Up @@ -39,6 +40,10 @@ android {
buildFeatures {
viewBinding true
buildConfig true
compose true
}
composeOptions {
kotlinCompilerExtensionVersion '1.5.0'
}
}

Expand Down Expand Up @@ -69,13 +74,29 @@ dependencies {
kapt "com.google.dagger:hilt-compiler:2.55"
testImplementation "org.mockito:mockito-core:5.2.0"
testImplementation 'org.mockito:mockito-inline:5.2.0'
implementation 'androidx.hilt:hilt-navigation-compose:1.2.0'


// Retrofit
implementation("com.squareup.retrofit2:converter-moshi:2.9.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
implementation("com.squareup.retrofit2:retrofit:2.11.0")
implementation("com.squareup.moshi:moshi-kotlin:1.14.0")

// jetpack compose
def composeBom = platform('androidx.compose:compose-bom:2025.01.00')
implementation composeBom
androidTestImplementation composeBom
implementation 'androidx.compose.material3:material3'
implementation 'androidx.compose.foundation:foundation'
implementation 'androidx.compose.ui:ui'
implementation 'androidx.compose.ui:ui-tooling-preview'
debugImplementation 'androidx.compose.ui:ui-tooling'
implementation 'androidx.activity:activity-compose:1.10.0'
implementation 'androidx.navigation:navigation-compose:2.8.5'
implementation "io.coil-kt:coil-compose:2.4.0"
implementation "androidx.compose.material:material-icons-extended:1.7.6"

}

kapt {
Expand All @@ -86,11 +107,6 @@ jacoco {
toolVersion = "0.8.8"
}

//tasks.withType(Test) {
// useJUnitPlatform()
// finalizedBy(tasks.jacocoTestReport) // report is always generated after tests run
//}

tasks.register("jacocoTestReport", JacocoReport) {
dependsOn(tasks.test)

Expand All @@ -111,4 +127,4 @@ tasks.register("jacocoTestReport", JacocoReport) {
"jacoco/testDebugUnitTest.exec",
"outputs/code-coverage/connected/*coverage.ec"
]))
}
}
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
android:fullBackupContent="@xml/backup_descriptor"
android:name=".CodeCheckApplication">
<activity
android:name="jp.co.yumemi.android.code_check.TopActivity"
android:name="jp.co.yumemi.android.code_check.MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* Copyright © 2021 YUMEMI Inc. All rights reserved.
*/
package jp.co.yumemi.android.code_check

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import dagger.hilt.android.AndroidEntryPoint
import jp.co.yumemi.android.code_check.core.presenter.MainScreen
import jp.co.yumemi.android.code_check.core.presenter.theme.CodeCheckAppTheme

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
CodeCheckAppTheme {
MainScreen()
}
}
}
}
10 changes: 0 additions & 10 deletions app/src/main/kotlin/jp/co/yumemi/android/code_check/TopActivity.kt

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import android.os.Parcelable
import kotlinx.parcelize.Parcelize

@Parcelize
data class RepositoryItem(
data class RepositoryEntity(
val id: Int,
val name: String,
val ownerIconUrl: String,
val language: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package jp.co.yumemi.android.code_check.core.presenter

import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.ArrowBack
import androidx.compose.material.icons.outlined.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Snackbar
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontWeight
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import jp.co.yumemi.android.code_check.R
import jp.co.yumemi.android.code_check.core.presenter.router.BottomNavigationBarRoute
import jp.co.yumemi.android.code_check.core.presenter.router.MainRouter
import jp.co.yumemi.android.code_check.core.presenter.widget.EmptyCompose
import kotlinx.coroutines.launch

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MainScreen() {
val context = LocalContext.current
val appName = context.getString(R.string.app_name)

val navController = rememberNavController()
val navBackStackEntry by navController.currentBackStackEntryAsState()
var topBarTitle by remember {
mutableStateOf(appName)
}

val hostState = remember { SnackbarHostState() }
var isErrorMessage by remember { mutableStateOf(false) }
val scope = rememberCoroutineScope()

val navigationIcon: @Composable () -> Unit =
if (navBackStackEntry?.destination?.route != BottomNavigationBarRoute.SEARCH.route) {
{
IconButton(onClick = {
navController.popBackStack()
}) {
Icon(
imageVector = Icons.AutoMirrored.Outlined.ArrowBack,
contentDescription = "Back",
)
}
}
} else {
{
EmptyCompose()
}
}

Scaffold(
topBar = {
TopAppBar(
title = {
Text(
text = topBarTitle,
fontWeight = FontWeight.Bold,
)
},
colors =
TopAppBarDefaults.topAppBarColors(
containerColor = MaterialTheme.colorScheme.primaryContainer,
titleContentColor = MaterialTheme.colorScheme.primary,
),
navigationIcon = navigationIcon,
)
},
snackbarHost = { CustomSnackbarHost(hostState = hostState, isErrorMessage = isErrorMessage) },
) { innerPadding ->
MainRouter(
toDetailScreen = { id ->
navController.navigate("${BottomNavigationBarRoute.DETAIL.route}/$id")
},
toBackScreen = {
navController.popBackStack()
},
changeTopBarTitle = {
topBarTitle = it
},
showSnackbar = { message, isError ->
scope.launch {
isErrorMessage = isError
hostState.showSnackbar(message)
}
},
navController = navController,
modifier =
Modifier
.padding(innerPadding),
)
}
}

@Composable
fun CustomSnackbarHost(
hostState: SnackbarHostState,
isErrorMessage: Boolean,
) {
SnackbarHost(
hostState = hostState,
) { snackbarData ->
Snackbar(
snackbarData = snackbarData,
containerColor = if (isErrorMessage) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.primaryContainer,
contentColor = if (isErrorMessage) MaterialTheme.colorScheme.onError else MaterialTheme.colorScheme.onPrimaryContainer,
)
}
}

This file was deleted.

Loading
Loading