Skip to content

Commit

Permalink
Merge pull request #11 from DO-SOPT-ANDROID/feat/week3
Browse files Browse the repository at this point in the history
PR : 실습 3주차 필수과제
  • Loading branch information
Jokwanhee authored Nov 11, 2023
2 parents 380e2dc + 3c3909e commit 3bcf660
Show file tree
Hide file tree
Showing 19 changed files with 385 additions and 95 deletions.
2 changes: 1 addition & 1 deletion .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ android {
dependencies {
implementation 'androidx.core:core-ktx:1.8.0'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'com.google.android.material:material:1.9.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
android:name=".presentation.SignUpActivity"
android:exported="false" />
<activity
android:name=".presentation.LoginActivity"
android:name=".presentation.login.LoginActivity"
android:exported="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package org.sopt.dosopttemplate.db.local

import android.content.Context
import android.content.SharedPreferences
import androidx.core.content.edit
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import org.sopt.dosopttemplate.R
import org.sopt.dosopttemplate.model.User

class PreferenceManager(val context: Context) {
init {
getInstance(context)
}
fun getId(): String = sharedPreferencesInstance.getString(ID, "").orEmpty()
fun getPassword(): String = sharedPreferencesInstance.getString(PWD, "").orEmpty()
fun getNickname(): String = sharedPreferencesInstance.getString(NICKNAME, "").orEmpty()
fun getMBTI(): String = sharedPreferencesInstance.getString(MBTI, "").orEmpty()
fun getAutoLogin(): Boolean = sharedPreferencesInstance.getBoolean(AUTO_LOGIN, false)

fun setAutoLogin(auto: Boolean) {
sharedPreferencesInstance.edit(commit = true) {
putBoolean(AUTO_LOGIN, auto)
}
}

fun setUser(user: User?) {
sharedPreferencesInstance.edit(commit = true) {
user?.let {
putString(ID, it.id)
putString(PWD, it.password)
putString(NICKNAME, it.nickname)
putString(MBTI, it.mbti.toString())
}
}
}

companion object {
const val EXTRA_USER = "USER"
const val ID = "ID"
const val PWD = "PWD"
const val NICKNAME = "NICKNAME"
const val MBTI = "MBTI"
const val AUTO_LOGIN = "AUTO_LOGIN"

lateinit var sharedPreferencesInstance: SharedPreferences

@Synchronized
private fun getInstance(context: Context) {
if (::sharedPreferencesInstance.isInitialized) {
sharedPreferencesInstance = context.getSharedPreferences(
context.getString(R.string.preference_file_key),
Context.MODE_PRIVATE
)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package org.sopt.dosopttemplate.presentation
import org.sopt.dosopttemplate.R
import org.sopt.dosopttemplate.base.BaseActivity
import org.sopt.dosopttemplate.databinding.ActivitySignUpBinding
import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.EXTRA_USER
import org.sopt.dosopttemplate.model.User
import org.sopt.dosopttemplate.presentation.LoginActivity.Companion.EXTRA_USER
import org.sopt.dosopttemplate.util.MBTI
import org.sopt.dosopttemplate.util.showShortSnackBar
import org.sopt.dosopttemplate.util.toMBTI
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,49 +2,40 @@ package org.sopt.dosopttemplate.presentation.home

import android.os.Bundle
import android.view.View
import androidx.core.content.edit
import org.sopt.dosopttemplate.R
import org.sopt.dosopttemplate.base.BaseFragment
import org.sopt.dosopttemplate.databinding.FragmentMypageBinding
import org.sopt.dosopttemplate.presentation.LoginActivity.Companion.AUTO_LOGIN
import org.sopt.dosopttemplate.presentation.LoginActivity.Companion.ID
import org.sopt.dosopttemplate.presentation.LoginActivity.Companion.MBTI
import org.sopt.dosopttemplate.presentation.LoginActivity.Companion.NICKNAME
import org.sopt.dosopttemplate.presentation.LoginActivity.Companion.getSharedPreferenceUser
import org.sopt.dosopttemplate.db.local.PreferenceManager

class MyPageFragment : BaseFragment<FragmentMypageBinding>() {
override val layoutId: Int
get() = R.layout.fragment_mypage
private val preferenceManager by lazy {
PreferenceManager(requireContext())
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

initMyData()
logout()
}

private fun initMyData() {
activity?.getSharedPreferenceUser()?.run {
binding.tvIdContent.text = this.getString(ID, "")
binding.tvProfileNickname.text = this.getString(NICKNAME, "")
binding.tvMbtiContent.text = this.getString(MBTI, "")
preferenceManager.run {
binding.tvIdContent.text = getId()
binding.tvProfileNickname.text = getNickname()
binding.tvMbtiContent.text = getMBTI()
}
}

private fun logout() {
binding.btnLogout.setOnClickListener {
activity?.run {
getSharedPreferenceUser().edit(commit = true) {
putBoolean(AUTO_LOGIN, false)
}
finish()
}
preferenceManager.setAutoLogin(false)
activity?.finish()
}
}

companion object {
fun newInstance(): MyPageFragment {
return MyPageFragment()
}
fun newInstance(): MyPageFragment = MyPageFragment()
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.sopt.dosopttemplate.presentation.home.dialog

import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels
import org.sopt.dosopttemplate.R
import org.sopt.dosopttemplate.base.BaseDialogFragment
Expand All @@ -12,6 +14,7 @@ import org.sopt.dosopttemplate.util.hideKeyboard
import org.sopt.dosopttemplate.util.showShortSnackBar
import org.sopt.dosopttemplate.util.toProfileBirth
import java.sql.Timestamp
import java.text.SimpleDateFormat

class HomeAddDialogFragment : BaseDialogFragment<DialogFragmentHomeAddBinding>() {
override val layoutResId: Int
Expand All @@ -32,21 +35,24 @@ class HomeAddDialogFragment : BaseDialogFragment<DialogFragmentHomeAddBinding>()
super.onViewCreated(view, savedInstanceState)
initBackgroundDismiss()
addProfile()
binding.tvBirth.setOnClickListener {
binding.soptNumberPicker.isVisible = !binding.soptNumberPicker.isVisible
}
}

private fun addProfile() {
binding.btnAdd.setOnClickListener {
if (binding.soptEvNickname.getEditText().isEmpty() ||
binding.soptEvBirth.getEditText().isEmpty()
) {
if (binding.evNickname.text.isNullOrEmpty()) {
binding.evNickname.showShortSnackBar(getString(R.string.set_nickname))
activity?.hideKeyboard(binding.root)
binding.root.showShortSnackBar(getString(R.string.fail))
} else if (!binding.soptNumberPicker.isVisible) {
binding.soptNumberPicker.showShortSnackBar(getString(R.string.set_birth))
} else {
val newProfile = HomeProfileModel.Profile(
id = homeViewModel.profileList.value?.size ?: 0,
name = binding.soptEvNickname.getEditText(),
description = binding.soptEvDescription.getEditText(),
birth = Timestamp.valueOf(binding.soptEvBirth.getEditText() + " 00:00:00").time,
name = binding.evNickname.text.toString(),
description = binding.evDescription.text.toString(),
birth = Timestamp.valueOf(binding.soptNumberPicker.getBirthday()).time,
update = System.currentTimeMillis()
)
homeViewModel.addProfileList(newProfile)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,43 +1,36 @@
package org.sopt.dosopttemplate.presentation
package org.sopt.dosopttemplate.presentation.login

import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.text.InputType
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.edit
import org.sopt.dosopttemplate.R
import org.sopt.dosopttemplate.base.BaseActivity
import org.sopt.dosopttemplate.databinding.ActivityLoginBinding
import org.sopt.dosopttemplate.db.local.PreferenceManager
import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.EXTRA_USER
import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.ID
import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.PWD
import org.sopt.dosopttemplate.model.User
import org.sopt.dosopttemplate.presentation.SignUpActivity
import org.sopt.dosopttemplate.presentation.home.HomeActivity
import org.sopt.dosopttemplate.util.getParcelableData
import org.sopt.dosopttemplate.util.hideKeyboard
import org.sopt.dosopttemplate.util.showShortSnackBar
import org.sopt.dosopttemplate.util.showShortToastMessage

class LoginActivity : BaseActivity<ActivityLoginBinding>(ActivityLoginBinding::inflate) {
private var user: User? = null
private val preferenceManager: PreferenceManager by lazy {
PreferenceManager(this)
}

private val startActivityForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == RESULT_OK) {
user = it.data?.getParcelableData(EXTRA_USER, User::class.java)
saveSharedFile(user)
preferenceManager.setUser(it.data?.getParcelableData(EXTRA_USER, User::class.java))
}
}

private fun saveSharedFile(user: User?) {
getSharedPreferenceUser().edit(commit = true) {
user?.let {
putString(ID, it.id)
putString(PWD, it.password)
putString(NICKNAME, it.nickname)
putString(MBTI, it.mbti.toString())
}
}
}

override fun onSaveInstanceState(outState: Bundle) {
outState.putString(ID, binding.soptEvId.getEditText())
outState.putString(PWD, binding.soptEvPwd.getEditText())
Expand All @@ -57,10 +50,8 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>(ActivityLoginBinding::i
}

private fun autoLogin() {
getSharedPreferenceUser().run {
if (getBoolean(AUTO_LOGIN, false)) {
goToMainActivity()
}
if (preferenceManager.getAutoLogin()) {
goToMainActivity()
}
}

Expand All @@ -78,7 +69,13 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>(ActivityLoginBinding::i

private fun initLogin() {
binding.btLogin.setOnClickListener {
checkLoginInfo(binding.soptEvId.getEditText(), binding.soptEvPwd.getEditText())
if (binding.soptEvId.getEditText().isEmpty()) {
binding.soptEvId.showShortSnackBar(getString(R.string.input_id))
} else if (binding.soptEvPwd.getEditText().isEmpty()) {
binding.soptEvId.showShortSnackBar(getString(R.string.input_pwd))
} else {
checkLoginInfo(binding.soptEvId.getEditText(), binding.soptEvPwd.getEditText())
}
}
}

Expand All @@ -89,8 +86,8 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>(ActivityLoginBinding::i
}

private fun checkLoginInfo(id: String, pwd: String) {
with(getSharedPreferenceUser()) {
if (id == getString(ID, "") && pwd == getString(PWD, "")) {
preferenceManager.run {
if (id == getId() && pwd == getPassword()) {
successLogin()
} else {
failLogin()
Expand All @@ -99,7 +96,7 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>(ActivityLoginBinding::i
}

private fun successLogin() {
getSharedPreferenceUser().edit().putBoolean(AUTO_LOGIN, true).apply()
preferenceManager.setAutoLogin(binding.switchAutoLogin.isChecked)
showShortToastMessage(getString(R.string.success_login))
goToMainActivity()
}
Expand All @@ -119,15 +116,4 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>(ActivityLoginBinding::i
startActivityForResult.launch(intent)
}

companion object {
const val EXTRA_USER = "user"
const val ID = "ID"
const val PWD = "PWD"
const val NICKNAME = "NICKNAME"
const val MBTI = "MBTI"
const val AUTO_LOGIN = "AUTO_LOGIN"

fun Context.getSharedPreferenceUser(): SharedPreferences =
getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
}
}
Loading

0 comments on commit 3bcf660

Please sign in to comment.