From c3909eb3e8224cd5c4cb1cd47a86d8a791715edb Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Thu, 18 Jan 2024 18:06:06 +0900
Subject: [PATCH 01/17] feat: add toolbar & navigation bar basic setting
---
.../java/com/smilegate/Easel/MainActivity.kt | 2 +
.../app/src/main/res/layout/activity_main.xml | 44 ++++++++++++++++---
.../src/main/res/layout/fragment_start.xml | 2 +-
.../app/src/main/res/menu/bottom_nav_menu.xml | 24 ++++++++++
.../app/src/main/res/menu/toolbar_menu.xml | 13 ++++++
5 files changed, 79 insertions(+), 6 deletions(-)
create mode 100644 src/mobile/app/src/main/res/menu/bottom_nav_menu.xml
create mode 100644 src/mobile/app/src/main/res/menu/toolbar_menu.xml
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
index 25515563..c520db2b 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
@@ -30,5 +30,7 @@ class MainActivity : AppCompatActivity() {
isAppearanceLightStatusBars = true
isAppearanceLightNavigationBars = true
}
+
+ window.decorView.setBackgroundColor(ContextCompat.getColor(this, android.R.color.white))
}
}
diff --git a/src/mobile/app/src/main/res/layout/activity_main.xml b/src/mobile/app/src/main/res/layout/activity_main.xml
index e4292c75..a0a40014 100644
--- a/src/mobile/app/src/main/res/layout/activity_main.xml
+++ b/src/mobile/app/src/main/res/layout/activity_main.xml
@@ -8,18 +8,52 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/mobile/app/src/main/res/layout/fragment_start.xml b/src/mobile/app/src/main/res/layout/fragment_start.xml
index 7098c178..39b536d8 100644
--- a/src/mobile/app/src/main/res/layout/fragment_start.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_start.xml
@@ -14,7 +14,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
- android:layout_marginTop="156dp"
+ android:layout_marginTop="136dp"
android:layout_marginEnd="24dp"
android:text="@string/start_fragment_headline"
android:textColor="@color/black"
diff --git a/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml b/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml
new file mode 100644
index 00000000..064452b1
--- /dev/null
+++ b/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml
@@ -0,0 +1,24 @@
+
+
\ No newline at end of file
diff --git a/src/mobile/app/src/main/res/menu/toolbar_menu.xml b/src/mobile/app/src/main/res/menu/toolbar_menu.xml
new file mode 100644
index 00000000..e0ff57f2
--- /dev/null
+++ b/src/mobile/app/src/main/res/menu/toolbar_menu.xml
@@ -0,0 +1,13 @@
+
+
+
+
From 7d19b3ef4aeb05e9ab1bf9ff9820b4e9ab2a217d Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Thu, 18 Jan 2024 20:33:25 +0900
Subject: [PATCH 02/17] feat: change constraintLayout into LinearLayout to pix
location & add TimelineFragment
---
.../view/Timeline/TimelineFragment.kt | 60 ++++++++
.../presentation/view/join/AskNameFragment.kt | 3 +
.../view/login/PasswordFragment.kt | 4 +
.../app/src/main/res/layout/activity_main.xml | 76 +++++----
.../src/main/res/layout/fragment_login.xml | 145 +++++++++---------
.../src/main/res/layout/fragment_password.xml | 2 +-
.../src/main/res/layout/fragment_start.xml | 133 ++++++++--------
.../src/main/res/layout/fragment_timeline.xml | 14 ++
.../app/src/main/res/layout/toolbar.xml | 14 ++
.../app/src/main/res/navigation/nav_graph.xml | 20 +++
.../app/src/main/res/values/strings.xml | 2 +
11 files changed, 309 insertions(+), 164 deletions(-)
create mode 100644 src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
create mode 100644 src/mobile/app/src/main/res/layout/fragment_timeline.xml
create mode 100644 src/mobile/app/src/main/res/layout/toolbar.xml
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
new file mode 100644
index 00000000..8319dbe8
--- /dev/null
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
@@ -0,0 +1,60 @@
+package com.smilegate.Easel.presentation.view.Timeline
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.smilegate.Easel.R
+
+// TODO: Rename parameter arguments, choose names that match
+// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
+private const val ARG_PARAM1 = "param1"
+private const val ARG_PARAM2 = "param2"
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [TimelineFragment.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class TimelineFragment : Fragment() {
+ // TODO: Rename and change types of parameters
+ private var param1: String? = null
+ private var param2: String? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ arguments?.let {
+ param1 = it.getString(ARG_PARAM1)
+ param2 = it.getString(ARG_PARAM2)
+ }
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_timeline, container, false)
+ }
+
+ companion object {
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param param1 Parameter 1.
+ * @param param2 Parameter 2.
+ * @return A new instance of fragment TimelineFragment.
+ */
+ // TODO: Rename and change types and number of parameters
+ @JvmStatic
+ fun newInstance(param1: String, param2: String) =
+ TimelineFragment().apply {
+ arguments = Bundle().apply {
+ putString(ARG_PARAM1, param1)
+ putString(ARG_PARAM2, param2)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
index 6e3b32d4..dd5fcd62 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
@@ -32,6 +32,9 @@ class AskNameFragment : Fragment() {
navController = findNavController()
+ binding.askNameFragmentJoinBtn.setOnClickListener {
+ navController.navigate(R.id.action_askNameFragment_to_timelineFragment)
+ }
return binding.root
}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
index a43c3673..6291a1a0 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
@@ -43,6 +43,10 @@ class PasswordFragment : Fragment() {
navController.navigate(R.id.action_passwordFragment_to_FindAccountFragment)
}
+ binding.passwordFragmentLoginBtn.setOnClickListener {
+ navController.navigate(R.id.action_passwordFragment_to_timelineFragment)
+ }
+
return binding.root
}
diff --git a/src/mobile/app/src/main/res/layout/activity_main.xml b/src/mobile/app/src/main/res/layout/activity_main.xml
index a0a40014..536f80d7 100644
--- a/src/mobile/app/src/main/res/layout/activity_main.xml
+++ b/src/mobile/app/src/main/res/layout/activity_main.xml
@@ -1,59 +1,75 @@
-
-
+ app:layout_constraintTop_toTopOf="parent">
-
-
+ android:background="@color/white"
+ android:elevation="0dp"
+ app:layout_scrollFlags="scroll|enterAlways"
+ android:minHeight="?attr/actionBarSize"
+ android:orientation="horizontal"
+ app:contentInsetStart="0dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:titleTextColor="@color/black">
+
+
+
-
+
-
+
-
+
+
+
-
+
diff --git a/src/mobile/app/src/main/res/layout/fragment_login.xml b/src/mobile/app/src/main/res/layout/fragment_login.xml
index 09478b0c..fe3c00b0 100644
--- a/src/mobile/app/src/main/res/layout/fragment_login.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_login.xml
@@ -1,5 +1,5 @@
-
-
-
-
+ android:layout_height="match_parent"
+ android:backgroundTint="@color/white">
-
+
+
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@+id/textView">
+
-
+
-
+
-
+
-
+
+
-
+
diff --git a/src/mobile/app/src/main/res/layout/fragment_password.xml b/src/mobile/app/src/main/res/layout/fragment_password.xml
index f9035ef1..761ff934 100644
--- a/src/mobile/app/src/main/res/layout/fragment_password.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_password.xml
@@ -15,8 +15,8 @@
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="28dp"
- android:text="@string/password_fragment_get_password"
android:enabled="false"
+ android:text="@string/password_fragment_get_password"
android:textColor="@color/black"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
diff --git a/src/mobile/app/src/main/res/layout/fragment_start.xml b/src/mobile/app/src/main/res/layout/fragment_start.xml
index 39b536d8..7f7b763b 100644
--- a/src/mobile/app/src/main/res/layout/fragment_start.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_start.xml
@@ -1,5 +1,5 @@
-
-
+
-
+
-
+
+
+
+
+
-
+
-
+
-
+
diff --git a/src/mobile/app/src/main/res/layout/fragment_timeline.xml b/src/mobile/app/src/main/res/layout/fragment_timeline.xml
new file mode 100644
index 00000000..dc62ed78
--- /dev/null
+++ b/src/mobile/app/src/main/res/layout/fragment_timeline.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/mobile/app/src/main/res/layout/toolbar.xml b/src/mobile/app/src/main/res/layout/toolbar.xml
new file mode 100644
index 00000000..f74ca97c
--- /dev/null
+++ b/src/mobile/app/src/main/res/layout/toolbar.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
diff --git a/src/mobile/app/src/main/res/navigation/nav_graph.xml b/src/mobile/app/src/main/res/navigation/nav_graph.xml
index 7585e74b..f3fc0741 100644
--- a/src/mobile/app/src/main/res/navigation/nav_graph.xml
+++ b/src/mobile/app/src/main/res/navigation/nav_graph.xml
@@ -47,6 +47,10 @@
android:id="@+id/action_passwordFragment_to_FindAccountFragment"
app:destination="@id/findAccountFragment"/>
+
+
+
+
+
+
+
+
+
+
diff --git a/src/mobile/app/src/main/res/values/strings.xml b/src/mobile/app/src/main/res/values/strings.xml
index 3ca0f3d9..a9acefa0 100644
--- a/src/mobile/app/src/main/res/values/strings.xml
+++ b/src/mobile/app/src/main/res/values/strings.xml
@@ -59,5 +59,7 @@
\@사용자 아이디는 고유한 나만의 아이디입니다. 나중에 언\n제든 바꿀 수 있습니다.
사용자 아이디
가입
+
+ Hello blank fragment
From c8d0b8125d11799426837ac730d09e8eee1b3fe1 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Thu, 18 Jan 2024 23:07:05 +0900
Subject: [PATCH 03/17] feat: edit toolbar navigate icon & actions for
login/join Views
---
.../java/com/smilegate/Easel/MainActivity.kt | 4 +
.../presentation/view/join/AskNameFragment.kt | 9 +++
.../view/join/CreateAccountFragment.kt | 14 ++++
.../view/join/NeedPasswordFragment.kt | 9 +++
.../view/join/ProfileImageFragment.kt | 7 ++
.../view/join/SendCodeFragment.kt | 9 +++
.../presentation/view/join/StartFragment.kt | 12 +++
.../view/login/FindAccountFragment.kt | 9 +++
.../presentation/view/login/LoginFragment.kt | 9 +++
.../view/login/PasswordFragment.kt | 9 +++
.../app/src/main/res/layout/activity_main.xml | 81 +++++++++++--------
11 files changed, 137 insertions(+), 35 deletions(-)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
index c520db2b..a37024c3 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
@@ -2,6 +2,7 @@ package com.smilegate.Easel
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import android.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.navigation.NavController
@@ -32,5 +33,8 @@ class MainActivity : AppCompatActivity() {
}
window.decorView.setBackgroundColor(ContextCompat.getColor(this, android.R.color.white))
+
+ val toolbar = findViewById(R.id.toolbar_container)
+ setSupportActionBar(toolbar)
}
}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
index dd5fcd62..8e115ddf 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
@@ -11,6 +11,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
+import android.widget.ImageView
import androidx.core.content.ContextCompat
import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
@@ -42,6 +43,14 @@ class AskNameFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.VISIBLE
+
+ backButton.setOnClickListener {
+ findNavController().navigateUp()
+ }
+
binding.askNameFragmentIdField.addTextChangedListener(object : TextWatcher {
// 텍스트 변경 전에 호출되는 메소드
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/CreateAccountFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/CreateAccountFragment.kt
index 4510a188..e2f174c2 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/CreateAccountFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/CreateAccountFragment.kt
@@ -1,6 +1,7 @@
package com.smilegate.Easel.presentation.view.join
import android.graphics.Color
+import android.graphics.PorterDuff
import android.os.Bundle
import android.text.Editable
import android.text.SpannableString
@@ -11,9 +12,13 @@ import android.text.style.ClickableSpan
import android.util.Log
import android.view.LayoutInflater
import android.view.View
+import android.view.View.GONE
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
+import android.widget.ImageView
import android.widget.Toast
+import android.widget.Toolbar
+import androidx.appcompat.widget.AppCompatImageView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
@@ -62,6 +67,15 @@ class CreateAccountFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.VISIBLE
+
+ backButton.setOnClickListener {
+ findNavController().navigateUp()
+ backButton.visibility = GONE
+ }
+
binding.createAccountInfoField.setOnFocusChangeListener { _, hasFocus ->
if (!hasFocus) {
validateEmail()
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/NeedPasswordFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/NeedPasswordFragment.kt
index 2a9b5900..ed0d5269 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/NeedPasswordFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/NeedPasswordFragment.kt
@@ -11,6 +11,7 @@ import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.widget.Button
import android.widget.EditText
+import android.widget.ImageView
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.navigation.NavController
@@ -50,6 +51,14 @@ class NeedPasswordFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.VISIBLE
+
+ backButton.setOnClickListener {
+ findNavController().navigateUp()
+ }
+
binding.needPasswordFragmentPwShowBtn.setOnClickListener {
passwordVisibility()
}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/ProfileImageFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/ProfileImageFragment.kt
index 51074db8..43d2c9ba 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/ProfileImageFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/ProfileImageFragment.kt
@@ -106,6 +106,13 @@ class ProfileImageFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.VISIBLE
+
+ backButton.setOnClickListener {
+ findNavController().navigateUp()
+ }
}
// override fun onDestroyView() {
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/SendCodeFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/SendCodeFragment.kt
index beba7e32..5e2f28e8 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/SendCodeFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/SendCodeFragment.kt
@@ -10,6 +10,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
+import android.widget.ImageView
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.fragment.app.activityViewModels
@@ -52,6 +53,14 @@ class SendCodeFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.VISIBLE
+
+ backButton.setOnClickListener {
+ findNavController().navigateUp()
+ }
+
// LiveData를 사용하여 데이터 변경 감지
joinViewModel.email.observe(viewLifecycleOwner) { email ->
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/StartFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/StartFragment.kt
index dd6738fb..b2060abc 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/StartFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/StartFragment.kt
@@ -4,6 +4,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.ImageView
import androidx.fragment.app.Fragment
import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
@@ -19,16 +20,27 @@ class StartFragment : Fragment() {
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
+
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.GONE
+
+ backButton.setOnClickListener {
+ findNavController().navigateUp()
+ }
+
binding = FragmentStartBinding.inflate(inflater, container, false)
navController = findNavController()
binding.startFragmentLoginBtn.setOnClickListener {
navController.navigate(R.id.action_startFragment_to_loginFragment)
+ backButton.visibility = View.GONE
}
binding.startFragmentJoinBtn.setOnClickListener {
navController.navigate(R.id.action_startFragment_to_CreateAccountFragment)
+ backButton.visibility = View.VISIBLE
}
return binding.root
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/FindAccountFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/FindAccountFragment.kt
index 9e8138bb..97e943b7 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/FindAccountFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/FindAccountFragment.kt
@@ -8,6 +8,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
+import android.widget.ImageView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.navigation.NavController
@@ -39,6 +40,14 @@ class FindAccountFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.VISIBLE
+
+ backButton.setOnClickListener {
+ findNavController().navigateUp()
+ }
+
binding.findAccountFragmentInputField.addTextChangedListener(object : TextWatcher {
// 텍스트 변경 전에 호출되는 메소드
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/LoginFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/LoginFragment.kt
index d7b2f128..e2f3fdbf 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/LoginFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/LoginFragment.kt
@@ -10,6 +10,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
+import android.widget.ImageView
import androidx.core.content.ContextCompat
import androidx.fragment.app.activityViewModels
import androidx.navigation.NavController
@@ -70,6 +71,14 @@ class LoginFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.VISIBLE
+
+ backButton.setOnClickListener {
+ findNavController().navigateUp()
+ }
+
binding.loginFragmentInputField.addTextChangedListener(object : TextWatcher {
// 텍스트 변경 전에 호출되는 메소드
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
index 6291a1a0..6c102a3d 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
@@ -9,6 +9,7 @@ import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
+import android.widget.ImageView
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
@@ -54,6 +55,14 @@ class PasswordFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
Log.d("PasswordFragment", "onViewCreated")
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.VISIBLE
+
+ backButton.setOnClickListener {
+ findNavController().navigateUp()
+ }
+
//LiveData를 사용하여 데이터 변경 감지
loginViewModel.email.observe(viewLifecycleOwner) { email ->
Log.d("PasswordFragment", "email value retrieved: $email")
diff --git a/src/mobile/app/src/main/res/layout/activity_main.xml b/src/mobile/app/src/main/res/layout/activity_main.xml
index 536f80d7..696742c5 100644
--- a/src/mobile/app/src/main/res/layout/activity_main.xml
+++ b/src/mobile/app/src/main/res/layout/activity_main.xml
@@ -9,55 +9,66 @@
android:orientation="vertical"
tools:context=".MainActivity">
-
+ app:layout_constraintTop_toTopOf="parent"
+ app:titleTextColor="@color/black">
-
+
+ android:orientation="horizontal">
-
-
+
-
+
-
+
-
+
-
+
Date: Thu, 18 Jan 2024 23:09:30 +0900
Subject: [PATCH 04/17] feat: setting basic things for timelineFragment
---
.../view/Timeline/TimelineFragment.kt | 64 ++++++-------------
.../presentation/view/join/StartFragment.kt | 4 +-
.../src/main/res/layout/fragment_timeline.xml | 2 +-
3 files changed, 24 insertions(+), 46 deletions(-)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
index 8319dbe8..dc05b916 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
@@ -5,56 +5,34 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.navigation.NavController
+import androidx.navigation.fragment.findNavController
import com.smilegate.Easel.R
+import com.smilegate.Easel.databinding.FragmentStartBinding
-// TODO: Rename parameter arguments, choose names that match
-// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
-private const val ARG_PARAM1 = "param1"
-private const val ARG_PARAM2 = "param2"
-
-/**
- * A simple [Fragment] subclass.
- * Use the [TimelineFragment.newInstance] factory method to
- * create an instance of this fragment.
- */
class TimelineFragment : Fragment() {
- // TODO: Rename and change types of parameters
- private var param1: String? = null
- private var param2: String? = null
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- arguments?.let {
- param1 = it.getString(ARG_PARAM1)
- param2 = it.getString(ARG_PARAM2)
- }
- }
+ private lateinit var binding: FragmentStartBinding
+
+ private lateinit var navController: NavController
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
- ): View? {
- // Inflate the layout for this fragment
- return inflater.inflate(R.layout.fragment_timeline, container, false)
+ ): View {
+ binding = FragmentStartBinding.inflate(inflater, container, false)
+
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.GONE
+
+ navController = findNavController()
+
+ return binding.root
}
- companion object {
- /**
- * Use this factory method to create a new instance of
- * this fragment using the provided parameters.
- *
- * @param param1 Parameter 1.
- * @param param2 Parameter 2.
- * @return A new instance of fragment TimelineFragment.
- */
- // TODO: Rename and change types and number of parameters
- @JvmStatic
- fun newInstance(param1: String, param2: String) =
- TimelineFragment().apply {
- arguments = Bundle().apply {
- putString(ARG_PARAM1, param1)
- putString(ARG_PARAM2, param2)
- }
- }
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
}
-}
\ No newline at end of file
+}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/StartFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/StartFragment.kt
index b2060abc..89511e73 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/StartFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/StartFragment.kt
@@ -21,6 +21,8 @@ class StartFragment : Fragment() {
savedInstanceState: Bundle?
): View {
+ binding = FragmentStartBinding.inflate(inflater, container, false)
+
val toolbar = requireActivity().findViewById(R.id.toolbar_container)
val backButton = toolbar.findViewById(R.id.back_btn)
backButton.visibility = View.GONE
@@ -29,8 +31,6 @@ class StartFragment : Fragment() {
findNavController().navigateUp()
}
- binding = FragmentStartBinding.inflate(inflater, container, false)
-
navController = findNavController()
binding.startFragmentLoginBtn.setOnClickListener {
diff --git a/src/mobile/app/src/main/res/layout/fragment_timeline.xml b/src/mobile/app/src/main/res/layout/fragment_timeline.xml
index dc62ed78..b484735d 100644
--- a/src/mobile/app/src/main/res/layout/fragment_timeline.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_timeline.xml
@@ -11,4 +11,4 @@
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
-
\ No newline at end of file
+
From d2437e1b63e8ffa82fd3f98d7115fafe5d90e180 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Thu, 18 Jan 2024 23:27:22 +0900
Subject: [PATCH 05/17] feat: add toolbar icon in TimelineFragment
---
.../Easel/presentation/view/Timeline/TimelineFragment.kt | 9 +++++++--
.../Easel/presentation/view/join/AskNameFragment.kt | 4 ++++
.../Easel/presentation/view/join/NeedPasswordFragment.kt | 2 +-
.../Easel/presentation/view/login/PasswordFragment.kt | 4 ++++
4 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
index dc05b916..b8d63159 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
@@ -10,9 +10,10 @@ import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
import com.smilegate.Easel.R
import com.smilegate.Easel.databinding.FragmentStartBinding
+import com.smilegate.Easel.databinding.FragmentTimelineBinding
class TimelineFragment : Fragment() {
- private lateinit var binding: FragmentStartBinding
+ private lateinit var binding: FragmentTimelineBinding
private lateinit var navController: NavController
@@ -20,12 +21,16 @@ class TimelineFragment : Fragment() {
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
- binding = FragmentStartBinding.inflate(inflater, container, false)
+ binding = FragmentTimelineBinding.inflate(inflater, container, false)
val toolbar = requireActivity().findViewById(R.id.toolbar_container)
val backButton = toolbar.findViewById(R.id.back_btn)
backButton.visibility = View.GONE
+ val settingButton = toolbar.findViewById(R.id.else_btn)
+ settingButton.setImageResource(R.drawable.ic_setting)
+ settingButton.visibility = View.VISIBLE
+
navController = findNavController()
return binding.root
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
index 8e115ddf..d002b6c9 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
@@ -51,6 +51,10 @@ class AskNameFragment : Fragment() {
findNavController().navigateUp()
}
+ val settingButton = toolbar.findViewById(R.id.else_btn)
+ settingButton.setImageResource(R.drawable.ic_setting)
+ settingButton.visibility = View.GONE
+
binding.askNameFragmentIdField.addTextChangedListener(object : TextWatcher {
// 텍스트 변경 전에 호출되는 메소드
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/NeedPasswordFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/NeedPasswordFragment.kt
index ed0d5269..2ddd5487 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/NeedPasswordFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/NeedPasswordFragment.kt
@@ -134,7 +134,7 @@ class NeedPasswordFragment : Fragment() {
private fun validatePassword() {
val password = binding.needPasswordFragmentPwField.text.toString()
- if (password.length < 8) {
+ if (password.length < maxPasswordLength) {
// 비밀번호가 8자 미만인 경우
val pwColorResourceId = ContextCompat.getColor(requireContext(), R.color.Red_200)
binding.needPasswordFragmentPwField.setTextColor(pwColorResourceId)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
index 6c102a3d..ed70c5df 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
@@ -63,6 +63,10 @@ class PasswordFragment : Fragment() {
findNavController().navigateUp()
}
+ val settingButton = toolbar.findViewById(R.id.else_btn)
+ settingButton.setImageResource(R.drawable.ic_setting)
+ settingButton.visibility = View.GONE
+
//LiveData를 사용하여 데이터 변경 감지
loginViewModel.email.observe(viewLifecycleOwner) { email ->
Log.d("PasswordFragment", "email value retrieved: $email")
From d9eaf3566a15a8b7c56e55871c66fb065ca9e128 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Thu, 18 Jan 2024 23:39:54 +0900
Subject: [PATCH 06/17] feat: create Fragments for add bottom navigation bar
---
.../view/message/MessageFragment.kt | 43 +++++++++++++++++++
.../view/notice/NoticeFragment.kt | 43 +++++++++++++++++++
.../view/search/SearchFragment.kt | 43 +++++++++++++++++++
.../src/main/res/layout/fragment_message.xml | 14 ++++++
.../src/main/res/layout/fragment_notice.xml | 14 ++++++
.../src/main/res/layout/fragment_search.xml | 14 ++++++
6 files changed, 171 insertions(+)
create mode 100644 src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt
create mode 100644 src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt
create mode 100644 src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt
create mode 100644 src/mobile/app/src/main/res/layout/fragment_message.xml
create mode 100644 src/mobile/app/src/main/res/layout/fragment_notice.xml
create mode 100644 src/mobile/app/src/main/res/layout/fragment_search.xml
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt
new file mode 100644
index 00000000..4f1d09a9
--- /dev/null
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt
@@ -0,0 +1,43 @@
+package com.smilegate.Easel.presentation.view.message
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.navigation.NavController
+import androidx.navigation.fragment.findNavController
+import com.smilegate.Easel.R
+import com.smilegate.Easel.databinding.FragmentMessageBinding
+import com.smilegate.Easel.databinding.FragmentNoticeBinding
+
+class MessageFragment : Fragment() {
+ private lateinit var binding: FragmentMessageBinding
+
+ private lateinit var navController: NavController
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentMessageBinding.inflate(inflater, container, false)
+
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.GONE
+
+ val settingButton = toolbar.findViewById(R.id.else_btn)
+ settingButton.setImageResource(R.drawable.ic_setting)
+ settingButton.visibility = View.VISIBLE
+
+ navController = findNavController()
+
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ }
+}
\ No newline at end of file
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt
new file mode 100644
index 00000000..0ddb9904
--- /dev/null
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt
@@ -0,0 +1,43 @@
+package com.smilegate.Easel.presentation.view.notice
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.navigation.NavController
+import androidx.navigation.fragment.findNavController
+import com.smilegate.Easel.R
+import com.smilegate.Easel.databinding.FragmentNoticeBinding
+import com.smilegate.Easel.databinding.FragmentSearchBinding
+
+class NoticeFragment : Fragment() {
+ private lateinit var binding: FragmentNoticeBinding
+
+ private lateinit var navController: NavController
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentNoticeBinding.inflate(inflater, container, false)
+
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.GONE
+
+ val settingButton = toolbar.findViewById(R.id.else_btn)
+ settingButton.setImageResource(R.drawable.ic_setting)
+ settingButton.visibility = View.VISIBLE
+
+ navController = findNavController()
+
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ }
+}
\ No newline at end of file
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt
new file mode 100644
index 00000000..7a8dc29a
--- /dev/null
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt
@@ -0,0 +1,43 @@
+package com.smilegate.Easel.presentation.view.search
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.navigation.NavController
+import androidx.navigation.fragment.findNavController
+import com.smilegate.Easel.R
+import com.smilegate.Easel.databinding.FragmentSearchBinding
+
+
+class SearchFragment : Fragment() {
+ private lateinit var binding: FragmentSearchBinding
+
+ private lateinit var navController: NavController
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentSearchBinding.inflate(inflater, container, false)
+
+ val toolbar = requireActivity().findViewById(R.id.toolbar_container)
+ val backButton = toolbar.findViewById(R.id.back_btn)
+ backButton.visibility = View.GONE
+
+ val settingButton = toolbar.findViewById(R.id.else_btn)
+ settingButton.setImageResource(R.drawable.ic_setting)
+ settingButton.visibility = View.VISIBLE
+
+ navController = findNavController()
+
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ }
+}
\ No newline at end of file
diff --git a/src/mobile/app/src/main/res/layout/fragment_message.xml b/src/mobile/app/src/main/res/layout/fragment_message.xml
new file mode 100644
index 00000000..e453588e
--- /dev/null
+++ b/src/mobile/app/src/main/res/layout/fragment_message.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/src/mobile/app/src/main/res/layout/fragment_notice.xml b/src/mobile/app/src/main/res/layout/fragment_notice.xml
new file mode 100644
index 00000000..6aaedf1f
--- /dev/null
+++ b/src/mobile/app/src/main/res/layout/fragment_notice.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
diff --git a/src/mobile/app/src/main/res/layout/fragment_search.xml b/src/mobile/app/src/main/res/layout/fragment_search.xml
new file mode 100644
index 00000000..e96f8244
--- /dev/null
+++ b/src/mobile/app/src/main/res/layout/fragment_search.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
From 556ae48d48bc2ea249d77f7084f6da09876cd0e7 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Fri, 19 Jan 2024 00:09:43 +0900
Subject: [PATCH 07/17] feat: edit activity_main.xml for
toolbar/navbar/fragmentContainer view problem
---
.../java/com/smilegate/Easel/MainActivity.kt | 2 +
.../app/src/main/res/layout/activity_main.xml | 149 ++++++++++--------
.../app/src/main/res/menu/bottom_nav_menu.xml | 6 +-
.../app/src/main/res/navigation/nav_graph.xml | 24 +++
4 files changed, 116 insertions(+), 65 deletions(-)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
index a37024c3..6f399368 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
@@ -6,7 +6,9 @@ import android.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.navigation.NavController
+import androidx.navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
+import androidx.navigation.ui.AppBarConfiguration
import com.smilegate.Easel.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
diff --git a/src/mobile/app/src/main/res/layout/activity_main.xml b/src/mobile/app/src/main/res/layout/activity_main.xml
index 696742c5..242fcc29 100644
--- a/src/mobile/app/src/main/res/layout/activity_main.xml
+++ b/src/mobile/app/src/main/res/layout/activity_main.xml
@@ -1,5 +1,5 @@
-
-
+ app:layout_constraintTop_toTopOf="parent">
-
-
+ android:elevation="0dp"
+ android:minHeight="?attr/actionBarSize"
+ android:orientation="horizontal"
+ app:contentInsetStart="0dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_scrollFlags="scroll|enterAlways"
+ app:titleTextColor="@color/black">
-
+
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
-
+
diff --git a/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml b/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml
index 064452b1..25c55d5c 100644
--- a/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml
+++ b/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml
@@ -7,17 +7,17 @@
android:title="@null"/>
diff --git a/src/mobile/app/src/main/res/navigation/nav_graph.xml b/src/mobile/app/src/main/res/navigation/nav_graph.xml
index f3fc0741..0aba4332 100644
--- a/src/mobile/app/src/main/res/navigation/nav_graph.xml
+++ b/src/mobile/app/src/main/res/navigation/nav_graph.xml
@@ -133,4 +133,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
From aef77d62f0d369ea5c916f6279b90994a96ab150 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Fri, 19 Jan 2024 00:46:52 +0900
Subject: [PATCH 08/17] feat: edit margin in loginFragment
---
src/mobile/app/src/main/res/layout/fragment_login.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/mobile/app/src/main/res/layout/fragment_login.xml b/src/mobile/app/src/main/res/layout/fragment_login.xml
index fe3c00b0..702c78b3 100644
--- a/src/mobile/app/src/main/res/layout/fragment_login.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_login.xml
@@ -18,9 +18,9 @@
style="@style/SubHeadline1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginStart="24dp"
+ android:layout_marginStart="22dp"
android:layout_marginTop="28dp"
- android:layout_marginEnd="24dp"
+ android:layout_marginEnd="22dp"
android:text="@string/login_fragment_headline"
android:textColor="@color/black"
app:layout_constraintEnd_toEndOf="parent"
From 1352d643133a2bc7023955cded4f1d9be6641655 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Fri, 19 Jan 2024 01:07:54 +0900
Subject: [PATCH 09/17] edit bottom_nav
---
.../app/src/main/res/layout/activity_main.xml | 11 ++++++-----
.../app/src/main/res/menu/bottom_nav_menu.xml | 18 ++++++++++++------
2 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/src/mobile/app/src/main/res/layout/activity_main.xml b/src/mobile/app/src/main/res/layout/activity_main.xml
index 242fcc29..b31a2c35 100644
--- a/src/mobile/app/src/main/res/layout/activity_main.xml
+++ b/src/mobile/app/src/main/res/layout/activity_main.xml
@@ -1,5 +1,5 @@
-
-
-
+
-
+
diff --git a/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml b/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml
index 25c55d5c..d1ca08fb 100644
--- a/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml
+++ b/src/mobile/app/src/main/res/menu/bottom_nav_menu.xml
@@ -1,24 +1,30 @@
-
From 788ff581dd4ec89ff64c8751096f73ba5df03554 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Fri, 19 Jan 2024 10:04:41 +0900
Subject: [PATCH 10/17] feat: chained fragmentContainerView in activityMain
---
.../java/com/smilegate/Easel/MainActivity.kt | 4 +
.../app/src/main/res/layout/activity_main.xml | 158 ++++++++----------
2 files changed, 73 insertions(+), 89 deletions(-)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
index 6f399368..0fdd9ff6 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
@@ -38,5 +38,9 @@ class MainActivity : AppCompatActivity() {
val toolbar = findViewById(R.id.toolbar_container)
setSupportActionBar(toolbar)
+
+ // 타이틀을 비워서 보이지 않도록 설정
+ supportActionBar?.title = ""
+ toolbar.setBackgroundColor(ContextCompat.getColor(this, R.color.white))
}
}
diff --git a/src/mobile/app/src/main/res/layout/activity_main.xml b/src/mobile/app/src/main/res/layout/activity_main.xml
index b31a2c35..b1696137 100644
--- a/src/mobile/app/src/main/res/layout/activity_main.xml
+++ b/src/mobile/app/src/main/res/layout/activity_main.xml
@@ -1,112 +1,92 @@
-
-
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_scrollFlags="scroll|enterAlways"
+ app:titleTextColor="@color/black">
-
-
-
-
-
-
-
-
+ app:tint="@color/black" />
-
-
-
-
-
-
-
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:tint="@color/black" />
-
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:tint="@color/black" />
-
+
+
+
+
+
-
+
From 291263ae057a8304ba9f6b5cece58f5f73cfe952 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Fri, 19 Jan 2024 21:03:47 +0900
Subject: [PATCH 11/17] feat: edit toolbar & bottom navigationbar
---
.../java/com/smilegate/Easel/MainActivity.kt | 81 +++++++++
.../view/Timeline/TimelineFragment.kt | 43 +++++
.../presentation/view/join/AskNameFragment.kt | 14 ++
.../view/login/FindAccountFragment.kt | 20 ++-
.../view/login/PasswordFragment.kt | 19 ++-
.../view/message/MessageFragment.kt | 34 ++++
.../view/notice/NoticeFragment.kt | 38 +++++
.../view/search/SearchFragment.kt | 39 +++++
.../app/src/main/res/drawable/ic_clip.xml | 17 ++
.../app/src/main/res/drawable/ic_earth.xml | 17 ++
.../app/src/main/res/drawable/ic_globe.xml | 10 --
.../app/src/main/res/drawable/ic_money.xml | 17 +-
.../app/src/main/res/drawable/ic_pen.xml | 7 +-
.../main/res/drawable/ic_selected_search.xml | 13 ++
.../app/src/main/res/drawable/ic_setting.xml | 4 +-
.../src/main/res/drawable/ic_solid_bell.xml | 10 ++
.../src/main/res/drawable/ic_solid_home.xml | 9 +
.../src/main/res/drawable/ic_solid_mail.xml | 10 ++
.../app/src/main/res/layout/activity_main.xml | 156 ++++++++++--------
.../src/main/res/layout/fragment_message.xml | 2 +-
.../src/main/res/layout/fragment_notice.xml | 2 +-
.../src/main/res/layout/fragment_search.xml | 2 +-
.../src/main/res/layout/fragment_timeline.xml | 2 +-
src/mobile/app/src/main/res/values/themes.xml | 2 +-
24 files changed, 459 insertions(+), 109 deletions(-)
create mode 100644 src/mobile/app/src/main/res/drawable/ic_clip.xml
create mode 100644 src/mobile/app/src/main/res/drawable/ic_earth.xml
delete mode 100644 src/mobile/app/src/main/res/drawable/ic_globe.xml
create mode 100644 src/mobile/app/src/main/res/drawable/ic_selected_search.xml
create mode 100644 src/mobile/app/src/main/res/drawable/ic_solid_bell.xml
create mode 100644 src/mobile/app/src/main/res/drawable/ic_solid_home.xml
create mode 100644 src/mobile/app/src/main/res/drawable/ic_solid_mail.xml
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
index 0fdd9ff6..ea23bf48 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
@@ -2,7 +2,10 @@ package com.smilegate.Easel
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
+import android.view.MenuItem
+import android.view.MotionEvent
import android.widget.Toolbar
+import androidx.activity.OnBackPressedCallback
import androidx.core.content.ContextCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.navigation.NavController
@@ -18,6 +21,8 @@ class MainActivity : AppCompatActivity() {
ActivityMainBinding.inflate(layoutInflater)
}
+ private var lastSelectedIconId: Int = 0
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -42,5 +47,81 @@ class MainActivity : AppCompatActivity() {
// 타이틀을 비워서 보이지 않도록 설정
supportActionBar?.title = ""
toolbar.setBackgroundColor(ContextCompat.getColor(this, R.color.white))
+
+ // 앱 초기 실행 시 홈화면으로 설정
+ if (savedInstanceState == null) {
+ binding.navView.selectedItemId = R.id.timelineFragment
+ lastSelectedIconId = R.id.navigation_home
+ updateIcon(R.id.navigation_home, R.drawable.ic_solid_home)
+ }
+
+ binding.navView.setOnNavigationItemSelectedListener { item ->
+ onNavigationItemSelected(item)
+ }
+ }
+
+ private fun updateIcon(itemId: Int, iconResId: Int) {
+ val item = binding.navView.menu.findItem(itemId)
+ // 현재 아이콘과 변경하려는 아이콘이 같지 않을 때만 변경
+ if (item?.icon?.constantState != ContextCompat.getDrawable(this, iconResId)?.constantState) {
+ item?.setIcon(iconResId)
+ }
+ }
+
+ fun onNavigationItemSelected(item: MenuItem): Boolean {
+ val currentIconId = item.itemId // 현재 선택된 아이콘 ID
+
+ // 현재 아이콘을 선택한 아이콘으로 변경
+ item.setIcon(getSelectedIcon(currentIconId))
+
+ // 이전에 선택된 아이콘 원래 아이콘으로 변경
+ if (lastSelectedIconId != 0) {
+ val lastSelectedItem = binding.navView.menu.findItem(lastSelectedIconId)
+ lastSelectedItem?.setIcon(getOriginalIcon(lastSelectedIconId))
+ }
+
+ // 이전에 선택된 아이콘 ID 업데이트
+ lastSelectedIconId = currentIconId
+
+ // Navigation 처리
+ when (currentIconId) {
+ R.id.navigation_home -> {
+ findNavController(R.id.nav_host_fragment).navigate(R.id.timelineFragment)
+ return true
+ }
+ R.id.navigation_search -> {
+ findNavController(R.id.nav_host_fragment).navigate(R.id.searchFragment)
+ return true
+ }
+ R.id.navigation_notice -> {
+ findNavController(R.id.nav_host_fragment).navigate(R.id.noticeFragment)
+ return true
+ }
+ R.id.navigation_message -> {
+ findNavController(R.id.nav_host_fragment).navigate(R.id.messageFragment)
+ return true
+ }
+ }
+ return false
+ }
+
+ private fun getSelectedIcon(itemId: Int): Int {
+ return when (itemId) {
+ R.id.navigation_home -> R.drawable.ic_solid_home
+ R.id.navigation_search -> R.drawable.ic_selected_search
+ R.id.navigation_notice -> R.drawable.ic_solid_bell
+ R.id.navigation_message -> R.drawable.ic_solid_mail
+ else -> throw IllegalArgumentException("Invalid item ID")
+ }
+ }
+
+ private fun getOriginalIcon(itemId: Int): Int {
+ return when (itemId) {
+ R.id.navigation_home -> R.drawable.ic_home
+ R.id.navigation_search -> R.drawable.ic_search
+ R.id.navigation_notice -> R.drawable.ic_bell
+ R.id.navigation_message -> R.drawable.ic_mail
+ else -> throw IllegalArgumentException("Invalid item ID")
+ }
}
}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
index b8d63159..8a6e7b46 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
@@ -1,13 +1,19 @@
package com.smilegate.Easel.presentation.view.Timeline
import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.view.KeyEvent
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
+import android.widget.Toast
+import androidx.activity.addCallback
import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
+import com.google.android.material.bottomnavigation.BottomNavigationView
import com.smilegate.Easel.R
import com.smilegate.Easel.databinding.FragmentStartBinding
import com.smilegate.Easel.databinding.FragmentTimelineBinding
@@ -17,6 +23,8 @@ class TimelineFragment : Fragment() {
private lateinit var navController: NavController
+ private var doubleBackPressed = false
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@@ -33,11 +41,46 @@ class TimelineFragment : Fragment() {
navController = findNavController()
+ // 바텀 네비게이션바 보이기
+ val bottomNavigation = activity?.findViewById(R.id.nav_view)
+ bottomNavigation?.visibility = View.VISIBLE
+
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ // 바텀 네비게이션바 보이기
+ val bottomNavigation = activity?.findViewById(R.id.nav_view)
+ bottomNavigation?.visibility = View.VISIBLE
+
+ // 뒤로가기 버튼을 처리하는 부분
+ view.isFocusableInTouchMode = true
+ view.requestFocus()
+ view.setOnKeyListener { _, keyCode, _ ->
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (isCurrentFragment()) {
+ // 현재 프래그먼트에서 뒤로가기 버튼 처리
+ if (doubleBackPressed) {
+ // 두 번째 눌림
+ requireActivity().finish()
+ } else {
+ // 첫 번째 눌림
+ doubleBackPressed = true
+ // 2초 내에 두 번 누르지 않으면 초기화
+ Handler(Looper.getMainLooper()).postDelayed({
+ doubleBackPressed = false
+ }, 2000)
+ }
+ return@setOnKeyListener true
+ }
+ }
+ false
+ }
}
+ private fun isCurrentFragment(): Boolean {
+ return true
+ }
+
}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
index d002b6c9..c87c2307 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/join/AskNameFragment.kt
@@ -1,5 +1,6 @@
package com.smilegate.Easel.presentation.view.join
+import android.content.Context
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
@@ -9,6 +10,7 @@ import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
@@ -35,6 +37,7 @@ class AskNameFragment : Fragment() {
binding.askNameFragmentJoinBtn.setOnClickListener {
navController.navigate(R.id.action_askNameFragment_to_timelineFragment)
+ hideKeyboard()
}
return binding.root
@@ -94,4 +97,15 @@ class AskNameFragment : Fragment() {
nextButton?.setTextColor(textColor)
}
}
+
+ private fun hideKeyboard() {
+ val inputMethodManager =
+ requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
+
+ // 현재 포커스된 뷰에서 키패드를 감춥니다.
+ val focusedView = requireActivity().currentFocus
+ focusedView?.let {
+ inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
+ }
+ }
}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/FindAccountFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/FindAccountFragment.kt
index 97e943b7..817159ea 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/FindAccountFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/FindAccountFragment.kt
@@ -1,11 +1,13 @@
package com.smilegate.Easel.presentation.view.login
+import android.content.Context
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
@@ -30,9 +32,10 @@ class FindAccountFragment : Fragment() {
navController = findNavController()
-// binding.loginFragmentNextBtn.setOnClickListener {
-// navController.navigate(R.id.action_loginFragment_to_passwordFragment)
-// }
+ binding.findAccountFragmentOkBtn.setOnClickListener {
+ navController.navigate(R.id.action_findAccountFragment_to_startFragment)
+ hideKeyboard()
+ }
return binding.root
}
@@ -87,4 +90,15 @@ class FindAccountFragment : Fragment() {
nextButton?.setTextColor(textColor)
}
}
+
+ private fun hideKeyboard() {
+ val inputMethodManager =
+ requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
+
+ // 현재 포커스된 뷰에서 키패드를 감춥니다.
+ val focusedView = requireActivity().currentFocus
+ focusedView?.let {
+ inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
+ }
+ }
}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
index ed70c5df..e348c847 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
@@ -1,5 +1,6 @@
package com.smilegate.Easel.presentation.view.login
+import android.content.Context
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
@@ -7,6 +8,7 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.inputmethod.InputMethodManager
import android.widget.Button
import android.widget.EditText
import android.widget.ImageView
@@ -15,6 +17,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
+import com.google.android.material.bottomnavigation.BottomNavigationView
import com.smilegate.Easel.R
import com.smilegate.Easel.databinding.FragmentPasswordBinding
import com.smilegate.Easel.domain.containsSpaceOrNewline
@@ -46,6 +49,7 @@ class PasswordFragment : Fragment() {
binding.passwordFragmentLoginBtn.setOnClickListener {
navController.navigate(R.id.action_passwordFragment_to_timelineFragment)
+ hideKeyboard()
}
return binding.root
@@ -144,9 +148,14 @@ class PasswordFragment : Fragment() {
}
}
- override fun onDestroyView() {
- super.onDestroyView()
- // 뷰 바인딩 해제
- _binding = null
+ private fun hideKeyboard() {
+ val inputMethodManager =
+ requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
+
+ // 현재 포커스된 뷰에서 키패드를 감춥니다.
+ val focusedView = requireActivity().currentFocus
+ focusedView?.let {
+ inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
+ }
}
-}
+}
\ No newline at end of file
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt
index 4f1d09a9..edc3eba9 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt
@@ -1,13 +1,18 @@
package com.smilegate.Easel.presentation.view.message
import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.view.KeyEvent
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
+import android.widget.Toast
import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
+import com.google.android.material.bottomnavigation.BottomNavigationView
import com.smilegate.Easel.R
import com.smilegate.Easel.databinding.FragmentMessageBinding
import com.smilegate.Easel.databinding.FragmentNoticeBinding
@@ -17,6 +22,8 @@ class MessageFragment : Fragment() {
private lateinit var navController: NavController
+ private var doubleBackPressed = false
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@@ -39,5 +46,32 @@ class MessageFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ // 뒤로가기 버튼을 처리하는 부분
+ view.isFocusableInTouchMode = true
+ view.requestFocus()
+ view.setOnKeyListener { _, keyCode, _ ->
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (isCurrentFragment()) {
+ // 현재 프래그먼트에서 뒤로가기 버튼 처리
+ if (doubleBackPressed) {
+ // 두 번째 눌림
+ requireActivity().finish()
+ } else {
+ // 첫 번째 눌림
+ doubleBackPressed = true
+ // 2초 내에 두 번 누르지 않으면 초기화
+ Handler(Looper.getMainLooper()).postDelayed({
+ doubleBackPressed = false
+ }, 2000)
+ }
+ return@setOnKeyListener true
+ }
+ }
+ false
+ }
+ }
+
+ private fun isCurrentFragment(): Boolean {
+ return true
}
}
\ No newline at end of file
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt
index 0ddb9904..99358bb8 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt
@@ -1,13 +1,18 @@
package com.smilegate.Easel.presentation.view.notice
import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.view.KeyEvent
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
+import android.widget.Toast
import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
+import com.google.android.material.bottomnavigation.BottomNavigationView
import com.smilegate.Easel.R
import com.smilegate.Easel.databinding.FragmentNoticeBinding
import com.smilegate.Easel.databinding.FragmentSearchBinding
@@ -17,6 +22,8 @@ class NoticeFragment : Fragment() {
private lateinit var navController: NavController
+ private var doubleBackPressed = false
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@@ -39,5 +46,36 @@ class NoticeFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ // 바텀 네비게이션바 보이기
+ val bottomNavigation = activity?.findViewById(R.id.nav_view)
+ bottomNavigation?.visibility = View.VISIBLE
+
+ // 뒤로가기 버튼을 처리하는 부분
+ view.isFocusableInTouchMode = true
+ view.requestFocus()
+ view.setOnKeyListener { _, keyCode, _ ->
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (isCurrentFragment()) {
+ // 현재 프래그먼트에서 뒤로가기 버튼 처리
+ if (doubleBackPressed) {
+ // 두 번째 눌림
+ requireActivity().finish()
+ } else {
+ // 첫 번째 눌림
+ doubleBackPressed = true
+ // 2초 내에 두 번 누르지 않으면 초기화
+ Handler(Looper.getMainLooper()).postDelayed({
+ doubleBackPressed = false
+ }, 2000)
+ }
+ return@setOnKeyListener true
+ }
+ }
+ false
+ }
+ }
+
+ private fun isCurrentFragment(): Boolean {
+ return true
}
}
\ No newline at end of file
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt
index 7a8dc29a..1b02610b 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt
@@ -1,13 +1,18 @@
package com.smilegate.Easel.presentation.view.search
import android.os.Bundle
+import android.os.Handler
+import android.os.Looper
+import android.view.KeyEvent
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
+import android.widget.Toast
import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
+import com.google.android.material.bottomnavigation.BottomNavigationView
import com.smilegate.Easel.R
import com.smilegate.Easel.databinding.FragmentSearchBinding
@@ -17,6 +22,8 @@ class SearchFragment : Fragment() {
private lateinit var navController: NavController
+ private var doubleBackPressed = false
+
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
@@ -33,11 +40,43 @@ class SearchFragment : Fragment() {
navController = findNavController()
+
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ // 바텀 네비게이션바 보이기
+ val bottomNavigation = activity?.findViewById(R.id.nav_view)
+ bottomNavigation?.visibility = View.VISIBLE
+
+ // 뒤로가기 버튼을 처리하는 부분
+ view.isFocusableInTouchMode = true
+ view.requestFocus()
+ view.setOnKeyListener { _, keyCode, _ ->
+ if (keyCode == KeyEvent.KEYCODE_BACK) {
+ if (isCurrentFragment()) {
+ // 현재 프래그먼트에서 뒤로가기 버튼 처리
+ if (doubleBackPressed) {
+ // 두 번째 눌림
+ requireActivity().finish()
+ } else {
+ // 첫 번째 눌림
+ doubleBackPressed = true
+ // 2초 내에 두 번 누르지 않으면 초기화
+ Handler(Looper.getMainLooper()).postDelayed({
+ doubleBackPressed = false
+ }, 2000)
+ }
+ return@setOnKeyListener true
+ }
+ }
+ false
+ }
+ }
+
+ private fun isCurrentFragment(): Boolean {
+ return true
}
}
\ No newline at end of file
diff --git a/src/mobile/app/src/main/res/drawable/ic_clip.xml b/src/mobile/app/src/main/res/drawable/ic_clip.xml
new file mode 100644
index 00000000..346e45af
--- /dev/null
+++ b/src/mobile/app/src/main/res/drawable/ic_clip.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
diff --git a/src/mobile/app/src/main/res/drawable/ic_earth.xml b/src/mobile/app/src/main/res/drawable/ic_earth.xml
new file mode 100644
index 00000000..b5fede98
--- /dev/null
+++ b/src/mobile/app/src/main/res/drawable/ic_earth.xml
@@ -0,0 +1,17 @@
+
+
+
+
diff --git a/src/mobile/app/src/main/res/drawable/ic_globe.xml b/src/mobile/app/src/main/res/drawable/ic_globe.xml
deleted file mode 100644
index 77af017c..00000000
--- a/src/mobile/app/src/main/res/drawable/ic_globe.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
diff --git a/src/mobile/app/src/main/res/drawable/ic_money.xml b/src/mobile/app/src/main/res/drawable/ic_money.xml
index a96277ad..1afd3a3a 100644
--- a/src/mobile/app/src/main/res/drawable/ic_money.xml
+++ b/src/mobile/app/src/main/res/drawable/ic_money.xml
@@ -1,13 +1,10 @@
+ android:width="20dp"
+ android:height="17dp"
+ android:viewportWidth="20"
+ android:viewportHeight="17">
+ android:pathData="M4.079,0.207H3.329V1.707H4.079H18.497V7.039V13.121V13.871H19.997V13.121V7.039V0.957C19.997,0.543 19.662,0.207 19.247,0.207H4.079ZM2.514,2.795H4.221H4.224H13.151H13.154H14.861L16.625,2.795C17.039,2.795 17.375,3.131 17.375,3.545V6.522V6.522V12.476V12.476V15.453C17.375,15.652 17.296,15.842 17.156,15.983C17.015,16.124 16.824,16.203 16.625,16.203L15.403,16.202L14.861,16.202H13.154H13.152H4.224H4.221H2.514L1.973,16.202L0.75,16.203C0.551,16.203 0.36,16.124 0.22,15.983C0.079,15.842 0,15.652 0,15.453V12.476V12.476V6.522V6.522V3.545C0,3.346 0.079,3.156 0.22,3.015C0.36,2.874 0.551,2.795 0.75,2.795L1.727,2.795L2.514,2.795ZM4.928,4.295H12.448C12.469,4.467 12.502,4.656 12.551,4.851C12.698,5.431 13.015,6.156 13.718,6.643C14.463,7.158 15.29,7.281 15.875,7.298V11.7C15.29,11.716 14.463,11.839 13.718,12.355C13.015,12.842 12.698,13.566 12.551,14.147C12.502,14.342 12.469,14.531 12.448,14.703H4.928C4.906,14.531 4.873,14.342 4.824,14.147C4.677,13.566 4.361,12.842 3.657,12.355C2.912,11.839 2.085,11.716 1.5,11.7V7.298C2.085,7.281 2.912,7.158 3.657,6.643C4.361,6.156 4.677,5.431 4.824,4.851C4.873,4.656 4.906,4.467 4.928,4.295ZM14.005,4.483C13.989,4.42 13.976,4.357 13.965,4.295H14.861L15.875,4.295V5.793C15.469,5.785 15.012,5.714 14.572,5.409C14.283,5.209 14.106,4.879 14.005,4.483ZM14.572,13.589C15.012,13.284 15.469,13.212 15.875,13.205V14.703L15.403,14.703L14.861,14.703H13.965C13.976,14.641 13.989,14.578 14.005,14.515C14.106,14.119 14.283,13.789 14.572,13.589ZM3.37,14.515C3.386,14.578 3.399,14.641 3.411,14.703H2.514L1.972,14.703L1.5,14.703V13.205C1.906,13.212 2.364,13.284 2.804,13.589C3.093,13.789 3.27,14.119 3.37,14.515ZM2.804,5.409C2.364,5.714 1.906,5.785 1.5,5.793V4.295L1.727,4.295L2.514,4.295H3.411C3.399,4.357 3.386,4.42 3.37,4.483C3.27,4.879 3.093,5.209 2.804,5.409ZM8.63,12.656C9.298,12.656 10.444,11.792 10.444,9.69C10.444,7.587 9.306,6.701 8.637,6.701C7.969,6.701 6.815,7.587 6.815,9.69C6.815,11.792 7.962,12.656 8.63,12.656Z"
+ android:fillColor="#141619"
+ android:fillType="evenOdd"/>
diff --git a/src/mobile/app/src/main/res/drawable/ic_pen.xml b/src/mobile/app/src/main/res/drawable/ic_pen.xml
index c71502e6..93331b03 100644
--- a/src/mobile/app/src/main/res/drawable/ic_pen.xml
+++ b/src/mobile/app/src/main/res/drawable/ic_pen.xml
@@ -4,7 +4,10 @@
android:viewportWidth="22"
android:viewportHeight="21">
+
diff --git a/src/mobile/app/src/main/res/drawable/ic_selected_search.xml b/src/mobile/app/src/main/res/drawable/ic_selected_search.xml
new file mode 100644
index 00000000..0aba5ef1
--- /dev/null
+++ b/src/mobile/app/src/main/res/drawable/ic_selected_search.xml
@@ -0,0 +1,13 @@
+
+
+
diff --git a/src/mobile/app/src/main/res/drawable/ic_setting.xml b/src/mobile/app/src/main/res/drawable/ic_setting.xml
index dd10361d..df01c4ec 100644
--- a/src/mobile/app/src/main/res/drawable/ic_setting.xml
+++ b/src/mobile/app/src/main/res/drawable/ic_setting.xml
@@ -9,14 +9,14 @@
diff --git a/src/mobile/app/src/main/res/drawable/ic_solid_bell.xml b/src/mobile/app/src/main/res/drawable/ic_solid_bell.xml
new file mode 100644
index 00000000..60b514da
--- /dev/null
+++ b/src/mobile/app/src/main/res/drawable/ic_solid_bell.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/src/mobile/app/src/main/res/drawable/ic_solid_home.xml b/src/mobile/app/src/main/res/drawable/ic_solid_home.xml
new file mode 100644
index 00000000..f6a33749
--- /dev/null
+++ b/src/mobile/app/src/main/res/drawable/ic_solid_home.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/src/mobile/app/src/main/res/drawable/ic_solid_mail.xml b/src/mobile/app/src/main/res/drawable/ic_solid_mail.xml
new file mode 100644
index 00000000..46c85cd9
--- /dev/null
+++ b/src/mobile/app/src/main/res/drawable/ic_solid_mail.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/src/mobile/app/src/main/res/layout/activity_main.xml b/src/mobile/app/src/main/res/layout/activity_main.xml
index b1696137..fbed8dc8 100644
--- a/src/mobile/app/src/main/res/layout/activity_main.xml
+++ b/src/mobile/app/src/main/res/layout/activity_main.xml
@@ -1,92 +1,104 @@
-
+ tools:context=".MainActivity"
+ android:id="@+id/activity_main">
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
-
+ app:layout_scrollFlags="scroll|enterAlways"
+ app:titleTextColor="@color/black">
-
+
+
+
+
+
+
+
-
-
-
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toRightOf="parent"
+ app:menu="@menu/bottom_nav_menu" />
-
+
-
+
-
+
diff --git a/src/mobile/app/src/main/res/layout/fragment_message.xml b/src/mobile/app/src/main/res/layout/fragment_message.xml
index e453588e..8a23f2cc 100644
--- a/src/mobile/app/src/main/res/layout/fragment_message.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_message.xml
@@ -9,6 +9,6 @@
+ android:text="message_fragment" />
diff --git a/src/mobile/app/src/main/res/layout/fragment_notice.xml b/src/mobile/app/src/main/res/layout/fragment_notice.xml
index 6aaedf1f..f2b690c8 100644
--- a/src/mobile/app/src/main/res/layout/fragment_notice.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_notice.xml
@@ -9,6 +9,6 @@
+ android:text="notice_fragment" />
diff --git a/src/mobile/app/src/main/res/layout/fragment_search.xml b/src/mobile/app/src/main/res/layout/fragment_search.xml
index e96f8244..3bd8268a 100644
--- a/src/mobile/app/src/main/res/layout/fragment_search.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_search.xml
@@ -9,6 +9,6 @@
+ android:text="search_fragment" />
diff --git a/src/mobile/app/src/main/res/layout/fragment_timeline.xml b/src/mobile/app/src/main/res/layout/fragment_timeline.xml
index b484735d..13b31a49 100644
--- a/src/mobile/app/src/main/res/layout/fragment_timeline.xml
+++ b/src/mobile/app/src/main/res/layout/fragment_timeline.xml
@@ -9,6 +9,6 @@
+ android:text="timeline_fragment" />
diff --git a/src/mobile/app/src/main/res/values/themes.xml b/src/mobile/app/src/main/res/values/themes.xml
index 39bf3498..9b768919 100644
--- a/src/mobile/app/src/main/res/values/themes.xml
+++ b/src/mobile/app/src/main/res/values/themes.xml
@@ -78,7 +78,7 @@
- @font/chirp_heavy
- 700
- -0.04
- - 16sp
+ - 20sp
- 14sp
From 877d766d655ef7fa2480efc6f7283d16deb3dcc7 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Fri, 19 Jan 2024 22:33:08 +0900
Subject: [PATCH 12/17] feat: delete sucks itemActiceIndicator
---
src/mobile/app/build.gradle.kts | 3 ++-
.../app/src/main/java/com/smilegate/Easel/MainActivity.kt | 4 ++++
src/mobile/app/src/main/res/layout/activity_main.xml | 4 +++-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/mobile/app/build.gradle.kts b/src/mobile/app/build.gradle.kts
index 27b954ef..2f3f9644 100644
--- a/src/mobile/app/build.gradle.kts
+++ b/src/mobile/app/build.gradle.kts
@@ -74,8 +74,9 @@ dependencies {
//CircleImageView
implementation ("de.hdodenhof:circleimageview:3.1.0")
-
//lottie Animation
implementation("com.airbnb.android:lottie:6.0.0")
+ //bottom navigation bar
+ implementation ("me.majiajie:pager-bottom-tab-strip:2.4.0")
}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
index ea23bf48..15f0bcc2 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
@@ -12,6 +12,8 @@ import androidx.navigation.NavController
import androidx.navigation.findNavController
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.ui.AppBarConfiguration
+import com.google.android.material.bottomnavigation.LabelVisibilityMode
+import com.google.android.material.navigation.NavigationBarView
import com.smilegate.Easel.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
@@ -55,6 +57,8 @@ class MainActivity : AppCompatActivity() {
updateIcon(R.id.navigation_home, R.drawable.ic_solid_home)
}
+ binding.navView.labelVisibilityMode = NavigationBarView.LABEL_VISIBILITY_UNLABELED
+
binding.navView.setOnNavigationItemSelectedListener { item ->
onNavigationItemSelected(item)
}
diff --git a/src/mobile/app/src/main/res/layout/activity_main.xml b/src/mobile/app/src/main/res/layout/activity_main.xml
index fbed8dc8..27db446e 100644
--- a/src/mobile/app/src/main/res/layout/activity_main.xml
+++ b/src/mobile/app/src/main/res/layout/activity_main.xml
@@ -75,13 +75,15 @@
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:backgroundTint="@color/white"
+ app:itemBackground="@color/white"
android:background="#FFFFFF"
app:elevation="0dp"
app:labelVisibilityMode="unlabeled"
- android:visibility="gone"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
+ app:itemIconSize="20dp"
+ app:itemActiveIndicatorStyle="@color/white"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/bottom_nav_menu" />
From d03f4a7af875ef9ee088270d62feda574ece97ab Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Fri, 19 Jan 2024 22:37:19 +0900
Subject: [PATCH 13/17] feat: clear doubleClicked icon focus issue
---
.../src/main/java/com/smilegate/Easel/MainActivity.kt | 9 ++++-----
src/mobile/app/src/main/res/layout/activity_main.xml | 1 +
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
index 15f0bcc2..e16f42cc 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
@@ -73,13 +73,13 @@ class MainActivity : AppCompatActivity() {
}
fun onNavigationItemSelected(item: MenuItem): Boolean {
- val currentIconId = item.itemId // 현재 선택된 아이콘 ID
+ val currentIconId = item.itemId
- // 현재 아이콘을 선택한 아이콘으로 변경
- item.setIcon(getSelectedIcon(currentIconId))
+ val selectedIcon = getSelectedIcon(currentIconId)
+ item.setIcon(selectedIcon)
// 이전에 선택된 아이콘 원래 아이콘으로 변경
- if (lastSelectedIconId != 0) {
+ if (lastSelectedIconId != 0 && lastSelectedIconId != currentIconId) {
val lastSelectedItem = binding.navView.menu.findItem(lastSelectedIconId)
lastSelectedItem?.setIcon(getOriginalIcon(lastSelectedIconId))
}
@@ -87,7 +87,6 @@ class MainActivity : AppCompatActivity() {
// 이전에 선택된 아이콘 ID 업데이트
lastSelectedIconId = currentIconId
- // Navigation 처리
when (currentIconId) {
R.id.navigation_home -> {
findNavController(R.id.nav_host_fragment).navigate(R.id.timelineFragment)
diff --git a/src/mobile/app/src/main/res/layout/activity_main.xml b/src/mobile/app/src/main/res/layout/activity_main.xml
index 27db446e..fb111837 100644
--- a/src/mobile/app/src/main/res/layout/activity_main.xml
+++ b/src/mobile/app/src/main/res/layout/activity_main.xml
@@ -78,6 +78,7 @@
app:itemBackground="@color/white"
android:background="#FFFFFF"
app:elevation="0dp"
+ android:visibility="gone"
app:labelVisibilityMode="unlabeled"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
app:layout_constraintBottom_toBottomOf="parent"
From 50e88311f3a25b166aed30b1794701992c269102 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Fri, 19 Jan 2024 22:44:27 +0900
Subject: [PATCH 14/17] chore: add eol
---
.../smilegate/Easel/presentation/view/login/PasswordFragment.kt | 2 +-
.../Easel/presentation/view/message/MessageFragment.kt | 2 +-
.../smilegate/Easel/presentation/view/notice/NoticeFragment.kt | 2 +-
.../smilegate/Easel/presentation/view/search/SearchFragment.kt | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
index e348c847..f25da5a8 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/login/PasswordFragment.kt
@@ -158,4 +158,4 @@ class PasswordFragment : Fragment() {
inputMethodManager.hideSoftInputFromWindow(it.windowToken, 0)
}
}
-}
\ No newline at end of file
+}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt
index edc3eba9..16f6aaba 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/message/MessageFragment.kt
@@ -74,4 +74,4 @@ class MessageFragment : Fragment() {
private fun isCurrentFragment(): Boolean {
return true
}
-}
\ No newline at end of file
+}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt
index 99358bb8..e50c509c 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/notice/NoticeFragment.kt
@@ -78,4 +78,4 @@ class NoticeFragment : Fragment() {
private fun isCurrentFragment(): Boolean {
return true
}
-}
\ No newline at end of file
+}
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt
index 1b02610b..d38428df 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/search/SearchFragment.kt
@@ -79,4 +79,4 @@ class SearchFragment : Fragment() {
private fun isCurrentFragment(): Boolean {
return true
}
-}
\ No newline at end of file
+}
From bcf8bc42d6112dd08f2576c6b6aaffdbd3fcbb97 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Sat, 20 Jan 2024 00:13:21 +0900
Subject: [PATCH 15/17] chore: reflect review
---
.../app/src/main/java/com/smilegate/Easel/MainActivity.kt | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
index e16f42cc..4f2b6f1c 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/MainActivity.kt
@@ -23,7 +23,7 @@ class MainActivity : AppCompatActivity() {
ActivityMainBinding.inflate(layoutInflater)
}
- private var lastSelectedIconId: Int = 0
+ private var lastSelectedIconId: Int? = null
override fun onCreate(savedInstanceState: Bundle?) {
@@ -79,9 +79,9 @@ class MainActivity : AppCompatActivity() {
item.setIcon(selectedIcon)
// 이전에 선택된 아이콘 원래 아이콘으로 변경
- if (lastSelectedIconId != 0 && lastSelectedIconId != currentIconId) {
- val lastSelectedItem = binding.navView.menu.findItem(lastSelectedIconId)
- lastSelectedItem?.setIcon(getOriginalIcon(lastSelectedIconId))
+ if (lastSelectedIconId != null && lastSelectedIconId != currentIconId) {
+ val lastSelectedItem = binding.navView.menu.findItem(lastSelectedIconId!!)
+ lastSelectedItem?.setIcon(getOriginalIcon(lastSelectedIconId!!))
}
// 이전에 선택된 아이콘 ID 업데이트
From 81a4f893fe03fee4e989e98bdf182ec73d7c39e8 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Sat, 20 Jan 2024 00:30:55 +0900
Subject: [PATCH 16/17] chore: reflect review
---
.../java/com/smilegate/Easel/domain/Utils.kt | 20 +++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/domain/Utils.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/domain/Utils.kt
index 876e435c..449d4aad 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/domain/Utils.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/domain/Utils.kt
@@ -1,7 +1,11 @@
package com.smilegate.Easel.domain
+import android.os.Handler
+import android.os.Looper
import android.view.KeyEvent
import android.view.inputmethod.EditorInfo
+import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.FragmentActivity
fun isDoneAction(actionId: Int, event: KeyEvent?): Boolean {
return actionId == EditorInfo.IME_ACTION_DONE ||
@@ -12,3 +16,19 @@ fun isDoneAction(actionId: Int, event: KeyEvent?): Boolean {
fun containsSpaceOrNewline(s: CharSequence?): Boolean {
return s?.contains(" ") == true || s?.contains("\n") == true
}
+
+
+fun handleBackPressed(activity: AppCompatActivity, doubleBackPressed: Boolean): Boolean {
+ var doubleBackPressedVar = doubleBackPressed
+
+ if (doubleBackPressedVar) {
+ // 두 번째 눌림
+ activity.finish()
+ } else {
+ // 2초 내에 두 번 누르지 않으면 초기화
+ Handler(Looper.getMainLooper()).postDelayed({
+ doubleBackPressedVar = false
+ }, 2000)
+ }
+ return true
+}
From 8a2b7c740d985ac24f475880bd4e9fbac6ca1996 Mon Sep 17 00:00:00 2001
From: HeewonP825 <7hwon@naver.com>
Date: Sat, 20 Jan 2024 00:35:50 +0900
Subject: [PATCH 17/17] chore: reflect review
---
.../Easel/presentation/view/Timeline/TimelineFragment.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
index 8a6e7b46..37f22feb 100644
--- a/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
+++ b/src/mobile/app/src/main/java/com/smilegate/Easel/presentation/view/Timeline/TimelineFragment.kt
@@ -79,8 +79,8 @@ class TimelineFragment : Fragment() {
false
}
}
+
private fun isCurrentFragment(): Boolean {
return true
}
-
}