Skip to content
Open
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
10 changes: 8 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,20 @@ dependencies {
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'



// Jetpack Compose
implementation 'androidx.activity:activity-compose:1.5.1'
implementation "androidx.compose.ui:ui:1.2.1"
implementation "androidx.compose.material:material:1.2.1"
implementation "androidx.compose.ui:ui-tooling-preview:1.2.1"
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
implementation 'androidx.activity:activity-compose:1.5.1'
androidTestImplementation "androidx.compose.ui:ui-test-junit4:1.2.1"
debugImplementation "androidx.compose.ui:ui-tooling:1.2.1"
debugImplementation "androidx.compose.ui:ui-test-manifest:1.2.1"
implementation "androidx.navigation:navigation-compose:2.5.1"

// Navigation
def nav_version = '2.3.5'
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,11 @@ import android.content.IntentFilter

import android.content.BroadcastReceiver
import android.content.Context
import android.view.ViewTreeObserver
import androidx.activity.viewModels
import androidx.room.Room
import com.websarva.wings.android.flat.model.UserRoomDatabase
import com.websarva.wings.android.flat.ui.startup.StartupViewModel


class MainActivity : AppCompatActivity() {
Expand Down Expand Up @@ -94,6 +97,7 @@ class MainActivity : AppCompatActivity() {
val serviceIntent = Intent(this, BeaconDetectionService::class.java)
startForegroundService(serviceIntent)


// 全体の画面遷移を制御
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.navHost) as NavHostFragment
Expand All @@ -117,7 +121,8 @@ class MainActivity : AppCompatActivity() {
findViewById<BottomNavigationView>(R.id.bottom_navigation).visibility = View.GONE
findViewById<Toolbar>(R.id.toolbar).also {
it.title = getString(R.string.change_name)
it.navigationIcon = AppCompatResources.getDrawable(this, R.drawable.ic_baseline_arrow_back_24)
it.navigationIcon =
AppCompatResources.getDrawable(this, R.drawable.ic_baseline_arrow_back_24)
it.visibility = View.VISIBLE
}
} else if (destination.id == R.id.startupFragment || destination.id == R.id.accountRegistrationFragment || destination.id == R.id.loginFragment) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.websarva.wings.android.flat.model

import androidx.lifecycle.LiveData
import androidx.room.*

@Dao
Expand All @@ -16,8 +17,8 @@ interface UserDao {
@Query("DELETE FROM user_table")
suspend fun deleteAll()

@Query("SELECT * FROM user_table")
suspend fun getUserData(): User
@Query("SELECT * FROM user_table LIMIT 1")
suspend fun getUserData(): User?

@Query("SELECT COUNT(*) FROM user_table")
suspend fun countData(): Int
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.websarva.wings.android.flat.repository

import android.app.Application
import androidx.lifecycle.LiveData
import com.websarva.wings.android.flat.model.User
import com.websarva.wings.android.flat.model.UserDao

class UserRoomRepository(private val dao: UserDao) {

suspend fun getUserData(): User {
suspend fun getUserData(): User ?{
return dao.getUserData()
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.websarva.wings.android.flat.ui.parts

import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Button
import androidx.compose.material.ButtonColors
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

@Composable
fun MidiumRoundedButton(text: String, onClick: () -> Unit, colors: ButtonColors) {
Button(
onClick = onClick,
shape = RoundedCornerShape(20.dp),
colors = colors,
modifier = Modifier.size(width = 140.dp, height = 40.dp),
elevation = ButtonDefaults.elevation()
){
Text(text)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.websarva.wings.android.flat.ui.startup

import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController

class StartupFragment : Fragment() {

private val viewModel: StartupViewModel by viewModels()

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View = ComposeView(inflater.context).apply {

setContent {
observeIsLoggedIn()
StartupScreen(
onNavigate = { dest -> findNavController().navigate(dest) },
)
}
}

private fun observeIsLoggedIn(){
viewModel.user.observe(viewLifecycleOwner) {
if (it != null) {
if(it.myId != 0){
findNavController().navigate(StartupFragmentDirections.actionStartupFragmentToFriendListFragment())
}
}
}
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.websarva.wings.android.flat.ui.startup

import android.util.Log
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.material.ButtonDefaults.textButtonColors
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
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.websarva.wings.android.flat.R
import com.websarva.wings.android.flat.ui.startup.components.LoginAndSignUpButtons
import com.websarva.wings.android.flat.ui.theme.FLATTheme

@Composable
fun StartupScreen(
onNavigate: (Int) -> Unit
/*navController: NavController*/
){
FLATTheme {
Surface() {
Column(modifier = Modifier.fillMaxSize()) {
Spacer(Modifier.height(120.dp))
Text(
text = "FLAT",
fontSize = 40.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center,
)
Divider(
color=FLATTheme.colors.primary,
thickness = 4.dp,
modifier = Modifier.padding(start = 70.dp, end = 70.dp))
Spacer(Modifier.weight(1f))
LoginAndSignUpButtons(
onNavigate = onNavigate
/*navController*/)
Spacer(Modifier.padding(vertical = 16.dp))
}
}
}
}


//@Preview
//@Composable
//fun DefaultPreview(){
// StartupScreen(/*navController = rememberNavController()*/)
//}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.websarva.wings.android.flat.ui.startup

import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.hadilq.liveevent.LiveEvent
import com.websarva.wings.android.flat.FLATApplication
import com.websarva.wings.android.flat.model.User
import kotlinx.coroutines.launch

class StartupViewModel(
saveStateHandle: SavedStateHandle
) : ViewModel() {
private val roomRepository = FLATApplication.userRoomRepository


private var _user = LiveEvent<User?>()
val user: LiveEvent<User?> get() = _user

init {
viewModelScope.launch {
_user.value = getUserData()
}
}


// suspend fun getUserData(): LiveData<User?> {
// return roomRepository.getUserLiveData()
// }

suspend fun getUserData(): User? {
return roomRepository.getUserData()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.websarva.wings.android.flat.ui.startup.components

import android.widget.Button
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Button
import androidx.compose.material.ButtonColors
import androidx.compose.material.ButtonDefaults
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import com.websarva.wings.android.flat.R
import com.websarva.wings.android.flat.ui.parts.MidiumRoundedButton
import com.websarva.wings.android.flat.ui.theme.FLATTheme

@Composable
fun LoginAndSignUpButtons(
onNavigate: (Int) -> Unit
/*navController: NavController*/) {
Row (
modifier = Modifier
.fillMaxWidth()
.padding(start = 32.dp, end = 32.dp),
horizontalArrangement = Arrangement.SpaceBetween
){
LoginButton(onNavigate)
SignUpButton(onNavigate)
}

}

@Composable
fun LoginButton(onNavigate: (Int) -> Unit) {
MidiumRoundedButton(
text = "ログイン",
onClick = { onNavigate(R.id.loginFragment)},
colors = ButtonDefaults.textButtonColors(
backgroundColor = Color.White,
contentColor = Color.Black
) )
}


@Composable
fun SignUpButton(onNavigate: (Int) -> Unit) {
MidiumRoundedButton(
text="新規登録",
onClick = { onNavigate(R.id.accountRegistrationFragment) },
colors=ButtonDefaults.textButtonColors(
backgroundColor = FLATTheme.colors.primary,
contentColor = Color.White
),)
}

Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
package com.websarva.wings.android.flat.view

import android.app.Dialog
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.activityViewModels
import com.websarva.wings.android.flat.R
import com.websarva.wings.android.flat.viewmodel.LoginViewModel

class ForceLoginDialogFragment(private val input: LoginViewModel.LoginInput): DialogFragment() {
private val viewModel: LoginViewModel by activityViewModels()
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val builder = AlertDialog.Builder(requireContext()).apply {
setMessage(getString(R.string.force_login_dialog_message))
setPositiveButton(getString(R.string.to_login)) { _, _ ->
viewModel.login(input)
}
setNegativeButton(getString(R.string.cancel), null)
}
return builder.create()
}
package com.websarva.wings.android.flat.ui.startup.login

import android.app.Dialog
import android.os.Bundle
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.activityViewModels
import com.websarva.wings.android.flat.R

class ForceLoginDialogFragment(private val input: LoginViewModel.LoginInput): DialogFragment() {
private val viewModel: LoginViewModel by activityViewModels()
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val builder = AlertDialog.Builder(requireContext()).apply {
setMessage(getString(R.string.force_login_dialog_message))
setPositiveButton(getString(R.string.to_login)) { _, _ ->
viewModel.login(input)
}
setNegativeButton(getString(R.string.cancel), null)
}
return builder.create()
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.websarva.wings.android.flat.view
package com.websarva.wings.android.flat.ui.startup.login

import android.os.Bundle
import android.view.LayoutInflater
Expand All @@ -10,7 +10,7 @@ import androidx.fragment.app.activityViewModels
import androidx.navigation.findNavController
import com.websarva.wings.android.flat.R
import com.websarva.wings.android.flat.databinding.FragmentLoginBinding
import com.websarva.wings.android.flat.viewmodel.LoginViewModel
import com.websarva.wings.android.flat.view.setOnSafeClickListener

class LoginFragment : Fragment() {
private val viewModel: LoginViewModel by activityViewModels()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.websarva.wings.android.flat.viewmodel
package com.websarva.wings.android.flat.ui.startup.login

import android.util.Log
import androidx.lifecycle.LiveData
Expand Down Expand Up @@ -112,7 +112,7 @@ class LoginViewModel : ViewModel() {
insertUserData(user)
}
//TODO: アプリケーションクラスに共有変数として持たせるので本当に良いのか吟味する
FLATApplication.myId = roomRepository.getUserData().myId
// FLATApplication.myId = roomRepository.getUserData().myId
_roomChanged.postValue(true)
}
}
Expand Down
Loading