From f8281d8490ac287f988fbd7c59c03842799aa746 Mon Sep 17 00:00:00 2001 From: t4t5u0 Date: Mon, 15 Aug 2022 23:41:48 +0900 Subject: [PATCH 1/8] =?UTF-8?q?Update:=20=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=82=92=E7=A7=BB=E5=8B=95=EF=BC=8E=E7=99=BB=E9=8C=B2?= =?UTF-8?q?=E3=82=92Login=E3=81=A8=E5=AF=BE=E7=A7=B0=E7=9A=84=E3=81=AA?= =?UTF-8?q?=E8=8B=B1=E8=AA=9E=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 10 +++- .../wings/android/flat/MainActivity.kt | 3 +- .../{view => ui/startup}/StartupFragment.kt | 5 +- .../startup}/StartupViewModel.kt | 20 ++++---- .../login}/ForceLoginDialogFragment.kt | 43 ++++++++-------- .../startup/login}/LoginFragment.kt | 4 +- .../startup/login}/LoginViewModel.kt | 2 +- .../startup/signUp/SignUpFragment.kt} | 51 +++++++++---------- .../startup/signUp/SignUpViewModel.kt} | 2 +- .../android/flat/view/AddFriendFragment.kt | 2 - .../layout/fragment_account_registration.xml | 2 +- app/src/main/res/layout/fragment_login.xml | 2 +- app/src/main/res/layout/fragment_startup.xml | 4 +- app/src/main/res/navigation/nav_graph.xml | 6 +-- 14 files changed, 78 insertions(+), 78 deletions(-) rename app/src/main/java/com/websarva/wings/android/flat/{view => ui/startup}/StartupFragment.kt (93%) rename app/src/main/java/com/websarva/wings/android/flat/{viewmodel => ui/startup}/StartupViewModel.kt (73%) rename app/src/main/java/com/websarva/wings/android/flat/{view => ui/startup/login}/ForceLoginDialogFragment.kt (86%) rename app/src/main/java/com/websarva/wings/android/flat/{view => ui/startup/login}/LoginFragment.kt (97%) rename app/src/main/java/com/websarva/wings/android/flat/{viewmodel => ui/startup/login}/LoginViewModel.kt (98%) rename app/src/main/java/com/websarva/wings/android/flat/{view/AccountRegistrationFragment.kt => ui/startup/signUp/SignUpFragment.kt} (76%) rename app/src/main/java/com/websarva/wings/android/flat/{viewmodel/AccountRegistrationViewModel.kt => ui/startup/signUp/SignUpViewModel.kt} (98%) diff --git a/app/build.gradle b/app/build.gradle index b957a70..7c3c6b9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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" diff --git a/app/src/main/java/com/websarva/wings/android/flat/MainActivity.kt b/app/src/main/java/com/websarva/wings/android/flat/MainActivity.kt index 5cb4513..fc82880 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/MainActivity.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/MainActivity.kt @@ -117,7 +117,8 @@ class MainActivity : AppCompatActivity() { findViewById(R.id.bottom_navigation).visibility = View.GONE findViewById(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) { diff --git a/app/src/main/java/com/websarva/wings/android/flat/view/StartupFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt similarity index 93% rename from app/src/main/java/com/websarva/wings/android/flat/view/StartupFragment.kt rename to app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt index f6b9ec9..320b205 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/view/StartupFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt @@ -1,7 +1,6 @@ -package com.websarva.wings.android.flat.view +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 @@ -10,7 +9,7 @@ import androidx.fragment.app.viewModels import androidx.navigation.findNavController import com.websarva.wings.android.flat.FLATApplication import com.websarva.wings.android.flat.databinding.FragmentStartupBinding -import com.websarva.wings.android.flat.viewmodel.StartupViewModel +import com.websarva.wings.android.flat.view.setOnSafeClickListener class StartupFragment : Fragment() { diff --git a/app/src/main/java/com/websarva/wings/android/flat/viewmodel/StartupViewModel.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt similarity index 73% rename from app/src/main/java/com/websarva/wings/android/flat/viewmodel/StartupViewModel.kt rename to app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt index 5a9d0f4..1512c82 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/viewmodel/StartupViewModel.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt @@ -1,10 +1,10 @@ -package com.websarva.wings.android.flat.viewmodel - -import androidx.lifecycle.SavedStateHandle -import androidx.lifecycle.ViewModel - -class StartupViewModel( - saveStateHandle: SavedStateHandle -) : ViewModel() { - -} +package com.websarva.wings.android.flat.ui.startup + +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel + +class StartupViewModel( + saveStateHandle: SavedStateHandle +) : ViewModel() { + +} diff --git a/app/src/main/java/com/websarva/wings/android/flat/view/ForceLoginDialogFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/ForceLoginDialogFragment.kt similarity index 86% rename from app/src/main/java/com/websarva/wings/android/flat/view/ForceLoginDialogFragment.kt rename to app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/ForceLoginDialogFragment.kt index e026ab4..7d250d5 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/view/ForceLoginDialogFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/ForceLoginDialogFragment.kt @@ -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() + } } \ No newline at end of file diff --git a/app/src/main/java/com/websarva/wings/android/flat/view/LoginFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginFragment.kt similarity index 97% rename from app/src/main/java/com/websarva/wings/android/flat/view/LoginFragment.kt rename to app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginFragment.kt index 0cf89db..8dbff2b 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/view/LoginFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginFragment.kt @@ -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 @@ -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() diff --git a/app/src/main/java/com/websarva/wings/android/flat/viewmodel/LoginViewModel.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginViewModel.kt similarity index 98% rename from app/src/main/java/com/websarva/wings/android/flat/viewmodel/LoginViewModel.kt rename to app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginViewModel.kt index 48a6aeb..5b4acc2 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/viewmodel/LoginViewModel.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginViewModel.kt @@ -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 diff --git a/app/src/main/java/com/websarva/wings/android/flat/view/AccountRegistrationFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpFragment.kt similarity index 76% rename from app/src/main/java/com/websarva/wings/android/flat/view/AccountRegistrationFragment.kt rename to app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpFragment.kt index ac3138f..163d666 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/view/AccountRegistrationFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpFragment.kt @@ -1,6 +1,5 @@ -package com.websarva.wings.android.flat.view +package com.websarva.wings.android.flat.ui.startup.signUp -import android.content.Intent import android.os.Bundle import android.util.Log import android.view.LayoutInflater @@ -10,12 +9,11 @@ import android.widget.Toast import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.navigation.findNavController -import com.websarva.wings.android.flat.BeaconDetectionService import com.websarva.wings.android.flat.R import com.websarva.wings.android.flat.databinding.FragmentAccountRegistrationBinding -import com.websarva.wings.android.flat.viewmodel.AccountRegistrationViewModel +import com.websarva.wings.android.flat.view.setOnSafeClickListener -class AccountRegistrationFragment : Fragment() { +class SignUpFragment : Fragment() { private val viewModel: AccountRegistrationViewModel by viewModels() private var _binding: FragmentAccountRegistrationBinding? = null private val binding get() = _binding!! @@ -40,18 +38,12 @@ class AccountRegistrationFragment : Fragment() { isNameOk = false, isMatch = false, isCharaLenOk = false -// name = "aaaa", -// pass1 = "aaaaaaaa", -// pass2 = "aaaaaaaa", -// isNameOk = true, -// isMatch = true, -// isCharaLenOk = true ) viewModel.checkAndTrimName(input) } } - viewModel.trimmedName.observe(viewLifecycleOwner, { + viewModel.trimmedName.observe(viewLifecycleOwner) { viewModel.checkMatchPassword(it) if (it.isNameOk) { binding.tilInputNickname.apply { @@ -63,10 +55,10 @@ class AccountRegistrationFragment : Fragment() { isErrorEnabled = true } } - }) + } - viewModel.isMatchPassword.observe(viewLifecycleOwner, { + viewModel.isMatchPassword.observe(viewLifecycleOwner) { viewModel.checkCharacter(it) if (it.isMatch) { // エラーを消す @@ -80,9 +72,9 @@ class AccountRegistrationFragment : Fragment() { visibility = View.VISIBLE } } - }) + } - viewModel.isCharacterOk.observe(viewLifecycleOwner, { + viewModel.isCharacterOk.observe(viewLifecycleOwner) { if (it.isCharaLenOk) { viewModel.checkPasswordLength(it) } else { @@ -92,9 +84,9 @@ class AccountRegistrationFragment : Fragment() { isErrorEnabled = true } } - }) + } - viewModel.isLengthOk.observe(viewLifecycleOwner, { + viewModel.isLengthOk.observe(viewLifecycleOwner) { if (it.isCharaLenOk) { // エラーを消す binding.tilInputPassword.apply { @@ -102,7 +94,7 @@ class AccountRegistrationFragment : Fragment() { } if (it.isMatch && it.isNameOk) { // postする - Log.d("userData", "$it") + Log.d("userData", "$it") viewModel.registerUser(it) } } else { @@ -112,10 +104,10 @@ class AccountRegistrationFragment : Fragment() { isErrorEnabled = true } } - }) + } // レスポンスを監視し、名前重複のエラーメッセージを表示するorログイン - viewModel.postResponse.observe(viewLifecycleOwner, { + viewModel.postResponse.observe(viewLifecycleOwner) { when (it.code()) { 200 -> { viewModel.registerUserInRoom(it.body()!!) @@ -127,18 +119,23 @@ class AccountRegistrationFragment : Fragment() { } } else -> { - Toast.makeText(activity, getString(R.string.connection_error), Toast.LENGTH_SHORT).show() + Toast.makeText( + activity, + getString(R.string.connection_error), + Toast.LENGTH_SHORT + ).show() } } - }) + } - viewModel.registerOk.observe(viewLifecycleOwner, { - val action = AccountRegistrationFragmentDirections.actionAccountRegistrationFragmentToFriendListFragment() + viewModel.registerOk.observe(viewLifecycleOwner) { + val action = + SignUpFragmentDirections.actionAccountRegistrationFragmentToFriendListFragment() view.findNavController().navigate(action) - }) + } binding.tvHasAccountToLogin.setOnSafeClickListener{ - val action = AccountRegistrationFragmentDirections.actionAccountRegistrationFragmentToLoginFragment() + val action = SignUpFragmentDirections.actionAccountRegistrationFragmentToLoginFragment() view.findNavController().navigate(action) } } diff --git a/app/src/main/java/com/websarva/wings/android/flat/viewmodel/AccountRegistrationViewModel.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpViewModel.kt similarity index 98% rename from app/src/main/java/com/websarva/wings/android/flat/viewmodel/AccountRegistrationViewModel.kt rename to app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpViewModel.kt index a30d5cf..b868200 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/viewmodel/AccountRegistrationViewModel.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpViewModel.kt @@ -1,4 +1,4 @@ -package com.websarva.wings.android.flat.viewmodel +package com.websarva.wings.android.flat.ui.startup.signUp import android.util.Log import androidx.lifecycle.* diff --git a/app/src/main/java/com/websarva/wings/android/flat/view/AddFriendFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/view/AddFriendFragment.kt index 9dadcb1..85d2535 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/view/AddFriendFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/view/AddFriendFragment.kt @@ -12,9 +12,7 @@ import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager import android.widget.TextView import android.widget.Toast -import androidx.core.content.ContextCompat import androidx.fragment.app.viewModels -import androidx.lifecycle.Observer import androidx.recyclerview.widget.LinearLayoutManager import com.websarva.wings.android.flat.R import com.websarva.wings.android.flat.databinding.FragmentAddFriendBinding diff --git a/app/src/main/res/layout/fragment_account_registration.xml b/app/src/main/res/layout/fragment_account_registration.xml index d4017fa..d2289a4 100644 --- a/app/src/main/res/layout/fragment_account_registration.xml +++ b/app/src/main/res/layout/fragment_account_registration.xml @@ -4,7 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" - tools:context=".view.AccountRegistrationFragment"> + tools:context=".ui.startup.signUp.SignUpFragment"> + tools:context=".ui.startup.login.LoginFragment"> + type="com.websarva.wings.android.flat.ui.startup.StartupViewModel" /> + tools:context=".ui.startup.StartupFragment"> Date: Tue, 16 Aug 2022 00:26:24 +0900 Subject: [PATCH 2/8] =?UTF-8?q?Update:=20=E3=82=B9=E3=82=BF=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=82=A2=E3=83=83=E3=83=97=E7=94=BB=E9=9D=A2=E3=82=92?= =?UTF-8?q?Compose=E3=81=AB=E7=A7=BB=E8=A1=8C=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flat/ui/startup/StartupFragment.kt | 65 ++++++------ .../android/flat/ui/startup/StartupScreen.kt | 98 +++++++++++++++++++ 2 files changed, 135 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt index 320b205..1f519d0 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt @@ -4,6 +4,7 @@ import android.os.Bundle 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 @@ -20,34 +21,42 @@ class StartupFragment : Fragment() { override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View { - _binding = FragmentStartupBinding.inflate(inflater, container, false) - return binding.root - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - // Login時にmyId設定,FriendListFragmentに遷移させる - // Logout処理時に0にする.IDはサーバーの実装的に1スタート.実装が微妙だと思ったら書き換える - if (FLATApplication.myId != 0) { - val action = StartupFragmentDirections.actionStartupFragmentToFriendListFragment2() - view.findNavController().navigate(action) - } - - binding.btLogin.setOnSafeClickListener { - val action = StartupFragmentDirections.actionStartupFragmentToLoginFragment() - view.findNavController().navigate(action) - } - - binding.btNewAccountRegistration.setOnSafeClickListener { - val action = StartupFragmentDirections.actionStartupFragmentToAccountRegistrationFragment() - view.findNavController().navigate(action) + ): View = ComposeView(inflater.context).apply { + setContent { + StartupScreen(/*navController = findNavController()*/) } } +// { +// _binding = FragmentStartupBinding.inflate(inflater, container, false).apply { +//// composeView.setContent{} +// } +// return binding.root +// } +// +// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { +// super.onViewCreated(view, savedInstanceState) +// +// // Login時にmyId設定,FriendListFragmentに遷移させる +// // Logout処理時に0にする.IDはサーバーの実装的に1スタート.実装が微妙だと思ったら書き換える +// if (FLATApplication.myId != 0) { +// val action = StartupFragmentDirections.actionStartupFragmentToFriendListFragment2() +// view.findNavController().navigate(action) +// } +// +// binding.btLogin.setOnSafeClickListener { +// val action = StartupFragmentDirections.actionStartupFragmentToLoginFragment() +// view.findNavController().navigate(action) +// } +// +// binding.btNewAccountRegistration.setOnSafeClickListener { +// val action = StartupFragmentDirections.actionStartupFragmentToAccountRegistrationFragment() +// view.findNavController().navigate(action) +// } +// } +// +// override fun onDestroyView() { +// super.onDestroyView() +// _binding = null +// } +} - override fun onDestroyView() { - super.onDestroyView() - _binding = null - } -} \ No newline at end of file diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt new file mode 100644 index 0000000..47d376d --- /dev/null +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt @@ -0,0 +1,98 @@ +package com.websarva.wings.android.flat.ui.startup + +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.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import com.websarva.wings.android.flat.ui.theme.FLATTheme + +@Composable +fun StartupScreen( /*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)) + Buttons(/*navController*/) + Spacer(Modifier.padding(vertical = 16.dp)) + } + } + } +} + +@Composable +fun Buttons(/*navController: NavController*/) { + Row ( + modifier = Modifier + .fillMaxWidth() + .padding(start = 32.dp, end = 32.dp), + horizontalArrangement = Arrangement.SpaceBetween + ){ + LoginButton() + SignUpButton(/*navController*/) + } + +} + +@Composable +fun LoginButton() { + + Button( + onClick = { /*TODO*/ }, + shape = RoundedCornerShape(20.dp), +// colors = FLATTheme.colors.primary + colors = textButtonColors( + backgroundColor = Color.White, + contentColor = Color.Black + ), + modifier = Modifier.size(width = 140.dp, height = 40.dp), + elevation = ButtonDefaults.elevation() + ) { + Text("ログイン") + } +} + + +@Composable +fun SignUpButton(/*navController: NavController*/) { + Button( + onClick = { /*navController.navigate("signup")*/ }, + shape = RoundedCornerShape(20.dp), + colors = textButtonColors( + backgroundColor = FLATTheme.colors.primary, + contentColor = Color.White + ), + modifier = Modifier.size(width = 140.dp, height = 40.dp), + elevation = ButtonDefaults.elevation() + + ){ + Text("新規登録") + } +} + +@Preview +@Composable +fun DefaultPreview(){ + StartupScreen(/*navController = rememberNavController()*/) +} \ No newline at end of file From 40488cba58233d9d66b38d07c1c11c37b97a0f40 Mon Sep 17 00:00:00 2001 From: t4t5u0 Date: Tue, 16 Aug 2022 00:48:02 +0900 Subject: [PATCH 3/8] =?UTF-8?q?Update:=20StartUp=E7=94=BB=E9=9D=A2?= =?UTF-8?q?=E3=82=92Compose=E3=81=AB=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=88?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flat/ui/startup/StartupFragment.kt | 4 +- .../android/flat/ui/startup/StartupScreen.kt | 41 ++++++++++++------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt index 1f519d0..dff9325 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt @@ -23,7 +23,9 @@ class StartupFragment : Fragment() { savedInstanceState: Bundle? ): View = ComposeView(inflater.context).apply { setContent { - StartupScreen(/*navController = findNavController()*/) + StartupScreen( + onNavigate = {dest -> findNavController().navigate(dest)}, + /*navController = findNavController()*/) } } // { diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt index 47d376d..a5f616d 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt @@ -14,10 +14,14 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController +import com.websarva.wings.android.flat.R import com.websarva.wings.android.flat.ui.theme.FLATTheme @Composable -fun StartupScreen( /*navController: NavController*/){ +fun StartupScreen( + onNavigate: (Int) -> Unit +/*navController: NavController*/ +){ FLATTheme { Surface() { Column(modifier = Modifier.fillMaxSize()) { @@ -34,7 +38,9 @@ fun StartupScreen( /*navController: NavController*/){ thickness = 4.dp, modifier = Modifier.padding(start = 70.dp, end = 70.dp)) Spacer(Modifier.weight(1f)) - Buttons(/*navController*/) + Buttons( + onNavigate = onNavigate + /*navController*/) Spacer(Modifier.padding(vertical = 16.dp)) } } @@ -42,24 +48,29 @@ fun StartupScreen( /*navController: NavController*/){ } @Composable -fun Buttons(/*navController: NavController*/) { +fun Buttons( + onNavigate: (Int) -> Unit +/*navController: NavController*/) { Row ( modifier = Modifier .fillMaxWidth() .padding(start = 32.dp, end = 32.dp), horizontalArrangement = Arrangement.SpaceBetween ){ - LoginButton() - SignUpButton(/*navController*/) + LoginButton(onNavigate) + SignUpButton(onNavigate) } } @Composable -fun LoginButton() { +fun LoginButton(onNavigate: (Int) -> Unit) { Button( - onClick = { /*TODO*/ }, + onClick = { + /*TODO*/ + onNavigate(R.id.loginFragment) + }, shape = RoundedCornerShape(20.dp), // colors = FLATTheme.colors.primary colors = textButtonColors( @@ -75,9 +86,11 @@ fun LoginButton() { @Composable -fun SignUpButton(/*navController: NavController*/) { +fun SignUpButton( + onNavigate: (Int) -> Unit + /*navController: NavController*/) { Button( - onClick = { /*navController.navigate("signup")*/ }, + onClick = { onNavigate(R.id.accountRegistrationFragment) }, shape = RoundedCornerShape(20.dp), colors = textButtonColors( backgroundColor = FLATTheme.colors.primary, @@ -91,8 +104,8 @@ fun SignUpButton(/*navController: NavController*/) { } } -@Preview -@Composable -fun DefaultPreview(){ - StartupScreen(/*navController = rememberNavController()*/) -} \ No newline at end of file +//@Preview +//@Composable +//fun DefaultPreview(){ +// StartupScreen(/*navController = rememberNavController()*/) +//} \ No newline at end of file From 910a06d92c3efcde0ede0d10e2480c460cfced16 Mon Sep 17 00:00:00 2001 From: t4t5u0 Date: Tue, 16 Aug 2022 03:13:37 +0900 Subject: [PATCH 4/8] =?UTF-8?q?Update:=20=E3=82=B9=E3=82=BF=E3=83=BC?= =?UTF-8?q?=E3=83=88=E3=82=A2=E3=83=83=E3=83=97=E7=94=BB=E9=9D=A2=E3=82=92?= =?UTF-8?q?Composable=E3=81=AB=E7=BD=AE=E3=81=8D=E6=8F=9B=E3=81=88?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wings/android/flat/MainActivity.kt | 4 ++ .../wings/android/flat/model/UserDao.kt | 4 +- .../flat/repository/UserRoomRepository.kt | 2 +- .../flat/ui/startup/StartupFragment.kt | 45 +++---------------- .../android/flat/ui/startup/StartupScreen.kt | 4 +- .../flat/ui/startup/StartupViewModel.kt | 18 ++++++++ .../flat/ui/startup/login/LoginViewModel.kt | 2 +- .../flat/ui/startup/signUp/SignUpViewModel.kt | 2 +- 8 files changed, 35 insertions(+), 46 deletions(-) diff --git a/app/src/main/java/com/websarva/wings/android/flat/MainActivity.kt b/app/src/main/java/com/websarva/wings/android/flat/MainActivity.kt index fc82880..5bce21d 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/MainActivity.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/MainActivity.kt @@ -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() { @@ -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 diff --git a/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt b/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt index 7d9702a..70726c7 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt @@ -16,8 +16,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 diff --git a/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt b/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt index 42d19ef..8fada7b 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt @@ -6,7 +6,7 @@ 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() } diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt index dff9325..e03e46e 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt @@ -1,6 +1,7 @@ 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 @@ -8,57 +9,25 @@ import androidx.compose.ui.platform.ComposeView import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.navigation.findNavController -import com.websarva.wings.android.flat.FLATApplication -import com.websarva.wings.android.flat.databinding.FragmentStartupBinding -import com.websarva.wings.android.flat.view.setOnSafeClickListener class StartupFragment : Fragment() { private val viewModel: StartupViewModel by viewModels() - private var _binding: FragmentStartupBinding? = null - private val binding get() = _binding!! override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, + inflater: LayoutInflater, + container: ViewGroup?, savedInstanceState: Bundle? ): View = ComposeView(inflater.context).apply { setContent { + if (viewModel.user != null && viewModel.user!!.myId != 0){ + Log.d("StartupFragment", "user is not null") + } + Log.d("UserId in Fragment", "${viewModel.user}") StartupScreen( onNavigate = {dest -> findNavController().navigate(dest)}, /*navController = findNavController()*/) } } -// { -// _binding = FragmentStartupBinding.inflate(inflater, container, false).apply { -//// composeView.setContent{} -// } -// return binding.root -// } -// -// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { -// super.onViewCreated(view, savedInstanceState) -// -// // Login時にmyId設定,FriendListFragmentに遷移させる -// // Logout処理時に0にする.IDはサーバーの実装的に1スタート.実装が微妙だと思ったら書き換える -// if (FLATApplication.myId != 0) { -// val action = StartupFragmentDirections.actionStartupFragmentToFriendListFragment2() -// view.findNavController().navigate(action) -// } -// -// binding.btLogin.setOnSafeClickListener { -// val action = StartupFragmentDirections.actionStartupFragmentToLoginFragment() -// view.findNavController().navigate(action) -// } -// -// binding.btNewAccountRegistration.setOnSafeClickListener { -// val action = StartupFragmentDirections.actionStartupFragmentToAccountRegistrationFragment() -// view.findNavController().navigate(action) -// } -// } -// -// override fun onDestroyView() { -// super.onDestroyView() -// _binding = null -// } } diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt index a5f616d..354046a 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt @@ -1,5 +1,6 @@ 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.* @@ -9,11 +10,8 @@ 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.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.navigation.NavController -import androidx.navigation.compose.rememberNavController import com.websarva.wings.android.flat.R import com.websarva.wings.android.flat.ui.theme.FLATTheme diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt index 1512c82..4ed8e80 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt @@ -1,10 +1,28 @@ 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() { + var isReady = false + private val roomRepository = FLATApplication.userRoomRepository + var user: User? = null + init { + viewModelScope.launch { + // Coroutine that will be canceled when the ViewModel is cleared. + user = roomRepository.getUserData() + isReady = true + Log.d("UserId in ViewModel: ", "${user?.myId}") + } + } } diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginViewModel.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginViewModel.kt index 5b4acc2..6797c8a 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginViewModel.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/login/LoginViewModel.kt @@ -112,7 +112,7 @@ class LoginViewModel : ViewModel() { insertUserData(user) } //TODO: アプリケーションクラスに共有変数として持たせるので本当に良いのか吟味する - FLATApplication.myId = roomRepository.getUserData().myId +// FLATApplication.myId = roomRepository.getUserData().myId _roomChanged.postValue(true) } } diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpViewModel.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpViewModel.kt index b868200..5a6c1d4 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpViewModel.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/signUp/SignUpViewModel.kt @@ -112,7 +112,7 @@ class AccountRegistrationViewModel : ViewModel() { insertUserData(user) } //TODO: アプリケーションクラスに共有変数として持たせるので本当に良いのか吟味する - myId = roomRepository.getUserData().myId +// myId = roomRepository.getUserData().myId _registerOk.postValue(true) } } From de6ebbd80aa7dded12fd105ee7afa8fdb8e63571 Mon Sep 17 00:00:00 2001 From: t4t5u0 Date: Tue, 16 Aug 2022 04:18:10 +0900 Subject: [PATCH 5/8] =?UTF-8?q?Update:=20=E3=81=A8=E3=82=8A=E3=81=82?= =?UTF-8?q?=E3=81=88=E3=81=9A=E5=86=8D=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=92=E3=82=82=E3=81=A8=E3=82=81=E3=82=89=E3=82=8C=E3=81=AA?= =?UTF-8?q?=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wings/android/flat/model/UserDao.kt | 1 + .../flat/repository/UserRoomRepository.kt | 1 + .../flat/ui/startup/StartupFragment.kt | 18 +++++++++++++---- .../flat/ui/startup/StartupViewModel.kt | 20 +++++++++++++------ app/src/main/res/navigation/nav_graph.xml | 5 ++++- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt b/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt index 70726c7..2267956 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt @@ -1,5 +1,6 @@ package com.websarva.wings.android.flat.model +import androidx.lifecycle.LiveData import androidx.room.* @Dao diff --git a/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt b/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt index 8fada7b..2fece13 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt @@ -1,6 +1,7 @@ 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 diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt index e03e46e..c9b414c 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt @@ -9,6 +9,7 @@ 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() { @@ -19,15 +20,24 @@ class StartupFragment : Fragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View = ComposeView(inflater.context).apply { + setContent { - if (viewModel.user != null && viewModel.user!!.myId != 0){ - Log.d("StartupFragment", "user is not null") - } - Log.d("UserId in Fragment", "${viewModel.user}") + observeIsLoggedIn() StartupScreen( onNavigate = {dest -> findNavController().navigate(dest)}, /*navController = findNavController()*/) } } + + private fun observeIsLoggedIn(){ + viewModel.user.observe(viewLifecycleOwner) { + if (it != null) { + if(it.myId != 0){ + findNavController().navigate(StartupFragmentDirections.actionStartupFragmentToFriendListFragment()) + } + } + } + } + } diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt index 4ed8e80..65cd2e9 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt @@ -13,16 +13,24 @@ import kotlinx.coroutines.launch class StartupViewModel( saveStateHandle: SavedStateHandle ) : ViewModel() { - var isReady = false private val roomRepository = FLATApplication.userRoomRepository - var user: User? = null + + private var _user = LiveEvent() + val user: LiveEvent get() = _user + init { viewModelScope.launch { - // Coroutine that will be canceled when the ViewModel is cleared. - user = roomRepository.getUserData() - isReady = true - Log.d("UserId in ViewModel: ", "${user?.myId}") + _user.value = getUserData() } } + + +// suspend fun getUserData(): LiveData { +// return roomRepository.getUserLiveData() +// } + + suspend fun getUserData(): User? { + return roomRepository.getUserData() + } } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index d12a21a..1ab3068 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -49,10 +49,13 @@ android:id="@+id/action_startupFragment_to_loginFragment" app:destination="@id/loginFragment" /> + + + Date: Tue, 16 Aug 2022 04:55:02 +0900 Subject: [PATCH 6/8] =?UTF-8?q?Update:=20=E3=83=9C=E3=82=BF=E3=83=B3?= =?UTF-8?q?=E3=81=AE=E5=85=B1=E9=80=9A=E9=83=A8=E5=88=86=E3=82=92=E5=88=A5?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AB=E5=88=87=E3=82=8A?= =?UTF-8?q?=E5=87=BA=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wings/android/flat/ui/parts/Button.kt | 24 ++++++++ .../android/flat/ui/startup/StartupScreen.kt | 59 +------------------ .../ui/startup/components/CustomButtons.kt | 56 ++++++++++++++++++ 3 files changed, 82 insertions(+), 57 deletions(-) create mode 100644 app/src/main/java/com/websarva/wings/android/flat/ui/parts/Button.kt create mode 100644 app/src/main/java/com/websarva/wings/android/flat/ui/startup/components/CustomButtons.kt diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/parts/Button.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/parts/Button.kt new file mode 100644 index 0000000..cc17f83 --- /dev/null +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/parts/Button.kt @@ -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) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt index 354046a..8852db5 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupScreen.kt @@ -13,6 +13,7 @@ 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 @@ -36,7 +37,7 @@ fun StartupScreen( thickness = 4.dp, modifier = Modifier.padding(start = 70.dp, end = 70.dp)) Spacer(Modifier.weight(1f)) - Buttons( + LoginAndSignUpButtons( onNavigate = onNavigate /*navController*/) Spacer(Modifier.padding(vertical = 16.dp)) @@ -45,62 +46,6 @@ fun StartupScreen( } } -@Composable -fun Buttons( - 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) { - - Button( - onClick = { - /*TODO*/ - onNavigate(R.id.loginFragment) - }, - shape = RoundedCornerShape(20.dp), -// colors = FLATTheme.colors.primary - colors = textButtonColors( - backgroundColor = Color.White, - contentColor = Color.Black - ), - modifier = Modifier.size(width = 140.dp, height = 40.dp), - elevation = ButtonDefaults.elevation() - ) { - Text("ログイン") - } -} - - -@Composable -fun SignUpButton( - onNavigate: (Int) -> Unit - /*navController: NavController*/) { - Button( - onClick = { onNavigate(R.id.accountRegistrationFragment) }, - shape = RoundedCornerShape(20.dp), - colors = textButtonColors( - backgroundColor = FLATTheme.colors.primary, - contentColor = Color.White - ), - modifier = Modifier.size(width = 140.dp, height = 40.dp), - elevation = ButtonDefaults.elevation() - - ){ - Text("新規登録") - } -} //@Preview //@Composable diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/components/CustomButtons.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/components/CustomButtons.kt new file mode 100644 index 0000000..6ee03c7 --- /dev/null +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/components/CustomButtons.kt @@ -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 + ),) +} + From 5493f39515c50125caeb8d829be008ea0ec505ec Mon Sep 17 00:00:00 2001 From: t4t5u0 Date: Wed, 17 Aug 2022 14:44:48 +0900 Subject: [PATCH 7/8] =?UTF-8?q?Fix:=20=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=81=95=E3=82=8C=E3=81=A6=E3=82=8B?= =?UTF-8?q?=E9=83=A8=E5=88=86=E3=82=92=E6=B6=88=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wings/android/flat/ui/startup/StartupFragment.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt index e03e46e..bcf1bad 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt @@ -20,13 +20,13 @@ class StartupFragment : Fragment() { savedInstanceState: Bundle? ): View = ComposeView(inflater.context).apply { setContent { - if (viewModel.user != null && viewModel.user!!.myId != 0){ + if (viewModel.user != null && viewModel.user!!.myId != 0) { Log.d("StartupFragment", "user is not null") } Log.d("UserId in Fragment", "${viewModel.user}") StartupScreen( - onNavigate = {dest -> findNavController().navigate(dest)}, - /*navController = findNavController()*/) + onNavigate = { dest -> findNavController().navigate(dest) }, + ) } } } From e43355f748cc47d4dccea5965a91d2c9846fba11 Mon Sep 17 00:00:00 2001 From: t4t5u0 Date: Tue, 16 Aug 2022 04:18:10 +0900 Subject: [PATCH 8/8] =?UTF-8?q?Update:=20=E3=81=A8=E3=82=8A=E3=81=82?= =?UTF-8?q?=E3=81=88=E3=81=9A=E5=86=8D=E3=83=AD=E3=82=B0=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=92=E3=82=82=E3=81=A8=E3=82=81=E3=82=89=E3=82=8C=E3=81=AA?= =?UTF-8?q?=E3=81=8F=E3=81=AA=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wings/android/flat/model/UserDao.kt | 1 + .../flat/repository/UserRoomRepository.kt | 1 + .../flat/ui/startup/StartupFragment.kt | 18 +++++++++++++---- .../flat/ui/startup/StartupViewModel.kt | 20 +++++++++++++------ app/src/main/res/navigation/nav_graph.xml | 5 ++++- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt b/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt index 70726c7..2267956 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/model/UserDao.kt @@ -1,5 +1,6 @@ package com.websarva.wings.android.flat.model +import androidx.lifecycle.LiveData import androidx.room.* @Dao diff --git a/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt b/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt index 8fada7b..2fece13 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/repository/UserRoomRepository.kt @@ -1,6 +1,7 @@ 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 diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt index bcf1bad..e3e6da5 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupFragment.kt @@ -9,6 +9,7 @@ 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() { @@ -19,15 +20,24 @@ class StartupFragment : Fragment() { container: ViewGroup?, savedInstanceState: Bundle? ): View = ComposeView(inflater.context).apply { + setContent { - if (viewModel.user != null && viewModel.user!!.myId != 0) { - Log.d("StartupFragment", "user is not null") - } - Log.d("UserId in Fragment", "${viewModel.user}") + 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()) + } + } + } + } + } diff --git a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt index 4ed8e80..65cd2e9 100644 --- a/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt +++ b/app/src/main/java/com/websarva/wings/android/flat/ui/startup/StartupViewModel.kt @@ -13,16 +13,24 @@ import kotlinx.coroutines.launch class StartupViewModel( saveStateHandle: SavedStateHandle ) : ViewModel() { - var isReady = false private val roomRepository = FLATApplication.userRoomRepository - var user: User? = null + + private var _user = LiveEvent() + val user: LiveEvent get() = _user + init { viewModelScope.launch { - // Coroutine that will be canceled when the ViewModel is cleared. - user = roomRepository.getUserData() - isReady = true - Log.d("UserId in ViewModel: ", "${user?.myId}") + _user.value = getUserData() } } + + +// suspend fun getUserData(): LiveData { +// return roomRepository.getUserLiveData() +// } + + suspend fun getUserData(): User? { + return roomRepository.getUserData() + } } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index d12a21a..1ab3068 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -49,10 +49,13 @@ android:id="@+id/action_startupFragment_to_loginFragment" app:destination="@id/loginFragment" /> + + +