From bb5603ae2323ca35578e53e0894e486faf82d265 Mon Sep 17 00:00:00 2001
From: hwan04 <73435826+hwan04@users.noreply.github.com>
Date: Mon, 30 Sep 2024 10:16:55 +0900
Subject: [PATCH 1/5] =?UTF-8?q?design(MainActivity):=20xml=20=EC=A0=9C?=
=?UTF-8?q?=EC=9E=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/build.gradle.kts | 4 ++++
.../com/alom/androidstudy1/MainActivity.kt | 13 ++++++------
app/src/main/res/layout/activity_main.xml | 20 ++++++++++++-------
gradle/wrapper/gradle-wrapper.properties | 4 ++--
4 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index e86faf7..f00c680 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -7,6 +7,10 @@ android {
namespace = "com.alom.androidstudy1"
compileSdk = 34
+ buildFeatures{
+ viewBinding = true
+ }
+
defaultConfig {
applicationId = "com.alom.androidstudy1"
minSdk = 26
diff --git a/app/src/main/java/com/alom/androidstudy1/MainActivity.kt b/app/src/main/java/com/alom/androidstudy1/MainActivity.kt
index c1bcbbf..6821ab3 100644
--- a/app/src/main/java/com/alom/androidstudy1/MainActivity.kt
+++ b/app/src/main/java/com/alom/androidstudy1/MainActivity.kt
@@ -5,16 +5,15 @@ import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
+import com.alom.androidstudy1.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
+ private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- enableEdgeToEdge()
- setContentView(R.layout.activity_main)
- ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
- val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
- v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
- insets
- }
+ binding = ActivityMainBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+
}
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 86a5d97..6ae8f5e 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -7,13 +7,19 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
-
+
+
+ app:layout_constraintBottom_toBottomOf="parent"/>
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 551d768..3aa22c4 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Sep 25 21:41:25 KST 2024
+#Mon Sep 30 10:06:39 KST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
From a01bf7eae17a8da5adce21e5eb0a4fe33679e3a0 Mon Sep 17 00:00:00 2001
From: hwan04 <73435826+hwan04@users.noreply.github.com>
Date: Sun, 6 Oct 2024 22:57:25 +0900
Subject: [PATCH 2/5] =?UTF-8?q?feat(ViewModel,=20SharedPreference):=20?=
=?UTF-8?q?=EB=B7=B0=EB=AA=A8=EB=8D=B8=EA=B3=BC=20preference=20=ED=81=B4?=
=?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EA=B5=AC=ED=98=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/alom/androidstudy1/MemoViewModel.kt | 20 +++++++++++++++++++
.../com/alom/androidstudy1/PreferenceUtil.kt | 17 ++++++++++++++++
2 files changed, 37 insertions(+)
create mode 100644 app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt
create mode 100644 app/src/main/java/com/alom/androidstudy1/PreferenceUtil.kt
diff --git a/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt b/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt
new file mode 100644
index 0000000..9a00b23
--- /dev/null
+++ b/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt
@@ -0,0 +1,20 @@
+package com.alom.androidstudy1
+
+import android.content.Context
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+
+class MemoViewModel(context: Context) : ViewModel() {
+
+ private val preferenceUtil = PreferenceUtil(context)
+ private val _currentValue = MutableLiveData()
+
+ val currentValue: LiveData
+ get() = _currentValue
+
+ fun updateMemo(newMemo: String) {
+ _currentValue.value = newMemo
+ preferenceUtil.setString("memo", newMemo)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/alom/androidstudy1/PreferenceUtil.kt b/app/src/main/java/com/alom/androidstudy1/PreferenceUtil.kt
new file mode 100644
index 0000000..1291e50
--- /dev/null
+++ b/app/src/main/java/com/alom/androidstudy1/PreferenceUtil.kt
@@ -0,0 +1,17 @@
+package com.alom.androidstudy1
+
+import android.content.Context
+import android.content.SharedPreferences
+
+class PreferenceUtil(context: Context) {
+ private val prefs: SharedPreferences =
+ context.getSharedPreferences("MemoApplication", Context.MODE_PRIVATE)
+
+ fun getString(key: String, defValue: String): String {
+ return prefs.getString(key, defValue).toString()
+ }
+
+ fun setString(key: String, str: String) {
+ prefs.edit().putString(key, str).apply()
+ }
+}
\ No newline at end of file
From 73fa9e5cfc7120e73570affeba513af61901fe13 Mon Sep 17 00:00:00 2001
From: hwan04 <73435826+hwan04@users.noreply.github.com>
Date: Sun, 6 Oct 2024 23:04:46 +0900
Subject: [PATCH 3/5] =?UTF-8?q?feat(MainActivity):=20=EB=B2=84=ED=8A=BC=20?=
=?UTF-8?q?=ED=81=B4=EB=A6=AD=20=EC=9D=B4=EB=B2=A4=ED=8A=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/com/alom/androidstudy1/MainActivity.kt | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/app/src/main/java/com/alom/androidstudy1/MainActivity.kt b/app/src/main/java/com/alom/androidstudy1/MainActivity.kt
index 6821ab3..decb345 100644
--- a/app/src/main/java/com/alom/androidstudy1/MainActivity.kt
+++ b/app/src/main/java/com/alom/androidstudy1/MainActivity.kt
@@ -5,15 +5,21 @@ import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
+import androidx.lifecycle.ViewModelProvider
import com.alom.androidstudy1.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
+ private lateinit var memoViewModel: MemoViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
+ memoViewModel = ViewModelProvider(this)[MemoViewModel::class.java]
+ binding.btnSave.setOnClickListener{
+ memoViewModel.updateMemo(binding.etText.text.toString())
+ }
}
}
\ No newline at end of file
From ed61c3734dbf87b518cc42846644a63e528e39fd Mon Sep 17 00:00:00 2001
From: hwan04 <73435826+hwan04@users.noreply.github.com>
Date: Sun, 6 Oct 2024 23:10:17 +0900
Subject: [PATCH 4/5] =?UTF-8?q?feat(ViewModel):=20=EB=B7=B0=EB=AA=A8?=
=?UTF-8?q?=EB=8D=B8=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84=20=EB=B0=8F?=
=?UTF-8?q?=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
app/src/main/java/com/alom/androidstudy1/MainActivity.kt | 9 +++++++++
.../main/java/com/alom/androidstudy1/MemoViewModel.kt | 7 ++++---
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/com/alom/androidstudy1/MainActivity.kt b/app/src/main/java/com/alom/androidstudy1/MainActivity.kt
index decb345..37f08c1 100644
--- a/app/src/main/java/com/alom/androidstudy1/MainActivity.kt
+++ b/app/src/main/java/com/alom/androidstudy1/MainActivity.kt
@@ -6,7 +6,10 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider
+import androidx.lifecycle.lifecycleScope
import com.alom.androidstudy1.databinding.ActivityMainBinding
+import kotlinx.coroutines.flow.collect
+import kotlinx.coroutines.launch
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
@@ -21,5 +24,11 @@ class MainActivity : AppCompatActivity() {
binding.btnSave.setOnClickListener{
memoViewModel.updateMemo(binding.etText.text.toString())
}
+
+ lifecycleScope.launch {
+ memoViewModel.currentValue.collect{
+ binding.etText.setText(it)
+ }
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt b/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt
index 9a00b23..68ede7c 100644
--- a/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt
+++ b/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt
@@ -4,14 +4,15 @@ import android.content.Context
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
class MemoViewModel(context: Context) : ViewModel() {
private val preferenceUtil = PreferenceUtil(context)
- private val _currentValue = MutableLiveData()
+ private val _currentValue = MutableStateFlow("")
- val currentValue: LiveData
- get() = _currentValue
+ val currentValue: StateFlow = _currentValue
fun updateMemo(newMemo: String) {
_currentValue.value = newMemo
From bab493dac514008dd3a1694392adc63f11170530 Mon Sep 17 00:00:00 2001
From: hwan04 <73435826+hwan04@users.noreply.github.com>
Date: Sun, 6 Oct 2024 23:28:31 +0900
Subject: [PATCH 5/5] =?UTF-8?q?fix(ViewModel):=20Context=20=EB=AA=BB=20?=
=?UTF-8?q?=EB=B0=9B=EC=95=84=EC=98=A4=EB=8A=94=20=EC=98=A4=EB=A5=98=20?=
=?UTF-8?q?=ED=95=B4=EA=B2=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/com/alom/androidstudy1/MemoViewModel.kt | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt b/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt
index 68ede7c..a8ecd45 100644
--- a/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt
+++ b/app/src/main/java/com/alom/androidstudy1/MemoViewModel.kt
@@ -1,19 +1,25 @@
package com.alom.androidstudy1
+import android.app.Application
import android.content.Context
+import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
-class MemoViewModel(context: Context) : ViewModel() {
+class MemoViewModel(application: Application) : AndroidViewModel(application) {
- private val preferenceUtil = PreferenceUtil(context)
+ private val preferenceUtil = PreferenceUtil(getApplication().applicationContext)
private val _currentValue = MutableStateFlow("")
val currentValue: StateFlow = _currentValue
+ init{
+ _currentValue.value = preferenceUtil.getString("memo", "")
+ }
+
fun updateMemo(newMemo: String) {
_currentValue.value = newMemo
preferenceUtil.setString("memo", newMemo)