Skip to content

Commit

Permalink
Merge pull request #66 from BCSDLab/feature/#65-withdrawal-and-sign-out
Browse files Browse the repository at this point in the history
Feature/#65 withdrawal and sign out
  • Loading branch information
wnehdals authored Jul 26, 2023
2 parents 34c3d98 + aa602b0 commit dadb109
Show file tree
Hide file tree
Showing 60 changed files with 1,604 additions and 180 deletions.
6 changes: 0 additions & 6 deletions .idea/compiler.xml

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

3 changes: 2 additions & 1 deletion .idea/misc.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.kts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ plugins {
}

android {
compileSdk = Constants.compileSdk

compileSdk = Constants.compileSdk
defaultConfig {
applicationId = Constants.packageName
minSdk = Constants.minSdk
Expand Down
12 changes: 6 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="28" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Expand All @@ -24,9 +22,12 @@
android:theme="@style/Theme.JJBAKSAAOS"
tools:replace="android:appComponentFactory"
tools:targetApi="31">
<activity
android:name=".ui.withdrawal.WithdrawalActivity"
android:exported="false" />
<activity
android:name=".ui.splash.SplashActivity"
android:exported="true" >
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand Down Expand Up @@ -65,8 +66,7 @@
android:exported="false" />
<activity
android:name=".ui.login.LoginActivity"
android:exported="false">
</activity>
android:exported="false"></activity>
<activity
android:name="com.kakao.sdk.auth.AuthCodeHandlerActivity"
android:exported="true">
Expand Down
9 changes: 9 additions & 0 deletions app/src/main/java/com/jjbaksa/jjbaksa/JjbaksaApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@ import com.kakao.sdk.common.KakaoSdk
import android.content.Context
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import com.jjbaksa.data.database.PreferenceKeys
import com.jjbaksa.data.database.userDataStore
import com.jjbaksa.jjbaksa.util.MyInfo
import dagger.hilt.android.HiltAndroidApp
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch

@HiltAndroidApp
class JjbaksaApp : Application() {
Expand All @@ -17,6 +23,9 @@ class JjbaksaApp : Application() {
super.onCreate()
KakaoSdk.init(this, BuildConfig.kakao_native_app_key)
instance = this
GlobalScope.launch {
MyInfo.id = appContext.userDataStore.data.first()[PreferenceKeys.NICKNAME] ?: ""
}
}

/**
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/java/com/jjbaksa/jjbaksa/base/BaseActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ abstract class BaseActivity<T : ViewDataBinding> : AppCompatActivity() {
abstract fun initView()
abstract fun subscribe()
abstract fun initEvent()
// abstract fun initData()
open fun initState() {
initView()
initEvent()
subscribe()
// initData()
}

fun isPermissionGranted(perm: String): Boolean {
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/java/com/jjbaksa/jjbaksa/dialog/ConfirmDialog.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.jjbaksa.jjbaksa.dialog

import android.app.Dialog
import android.graphics.Color
import android.view.View
import com.jjbaksa.jjbaksa.R
import com.jjbaksa.jjbaksa.base.BaseDialogFragment
Expand All @@ -11,6 +12,7 @@ class ConfirmDialog(
val msg: String? = null,
val confirmText: String,
val confirmClick: (Dialog) -> Unit,
val titleColor: String = "#ff7f23",
val isCancel: Boolean = true
) : BaseDialogFragment<DialogConfirmBinding>() {
override val layoutResId: Int
Expand All @@ -20,6 +22,7 @@ class ConfirmDialog(
isCancelable = isCancel
with(binding) {
confirmDialogTitle.text = title
confirmDialogTitle.setTextColor(Color.parseColor(titleColor))
if (msg == null) {
confirmDialogMsg.visibility = View.GONE
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
package com.jjbaksa.jjbaksa.dialog

import android.Manifest
import android.app.Activity
import android.content.Intent
import android.view.View
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.widget.addTextChangedListener
import androidx.fragment.app.activityViewModels
import com.jjbaksa.jjbaksa.R
import com.jjbaksa.jjbaksa.base.BaseBottomSheetDialogFragment
import com.jjbaksa.jjbaksa.databinding.DialogMypageBinding
import com.jjbaksa.jjbaksa.ui.mainpage.mypage.viewmodel.MyPageViewModel
import dagger.hilt.android.AndroidEntryPoint
import coil.load
import coil.transform.CircleCropTransformation
import com.example.imageselector.gallery.GalleryActivity
import com.jjbaksa.jjbaksa.util.hasPermission

@AndroidEntryPoint
class MyPageBottomSheetDialog : BaseBottomSheetDialogFragment<DialogMypageBinding>() {
override val layoutResId: Int
get() = R.layout.dialog_mypage
private val viewModel: MyPageViewModel by activityViewModels()

private val galleryActivityLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
if (it.resultCode == Activity.RESULT_OK) {
val images = it.data!!.getStringArrayListExtra("images")!!
viewModel.setLoadImage(images[0])
binding.profileImageView.load(images[0]) {
transformations(CircleCropTransformation())
}
}
}
private val requestPermissions = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) {
if (it) {
val intent = Intent(requireContext(), GalleryActivity::class.java)
intent.putExtra("limit", 1)
galleryActivityLauncher.launch(intent)
} else {
}
}

override fun initView(view: View) {
binding.vm = viewModel
viewModel.getUserProfile()
this.heightPercent = 0.55f
this.setLayoutMaxHeight(view)
}

override fun initEvent() {
confirmProfile()
cancelProfile()
loadProfileImage()
setTextLength()
observeData()
}

private fun confirmProfile() {
binding.confirmButton.setOnClickListener {
if (viewModel.loadImage.value.isNullOrEmpty() || viewModel.textLength.value == "0") {
// todo:: empty profile image or nickname
} else {
viewModel.uploadProfileImgAndNickname(
viewModel.loadImage.value.toString(),
binding.profileNicknameEditText.text.toString()
)
}
}
}

private fun cancelProfile() {
binding.cancelButton.setOnClickListener {
dismiss()
}
}

private fun loadProfileImage() {
binding.addProfileImage.setOnClickListener {
if (requireContext().hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
val intent = Intent(requireContext(), GalleryActivity::class.java)
intent.putExtra("limit", 1)
galleryActivityLauncher.launch(intent)
} else {
requestPermissions.launch(Manifest.permission.WRITE_EXTERNAL_STORAGE)
}
}
}

private fun setTextLength() {
binding.profileNicknameEditText.addTextChangedListener {
viewModel.setTextLength(it?.length.toString())
}
}

private fun observeData() {
viewModel.textLength.observe(viewLifecycleOwner) {
binding.textLengthCountTextView.text = getString(R.string.text_length, it)
}
viewModel.isResult.observe(viewLifecycleOwner) {
if (it) dismiss()
}
}

override fun subscribe() {
}

override fun initData() {
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.jjbaksa.jjbaksa.ui.changepassword

import android.graphics.drawable.Drawable
import androidx.activity.viewModels
import androidx.core.content.ContextCompat
import com.jjbaksa.jjbaksa.R
import com.jjbaksa.jjbaksa.base.BaseActivity
import com.jjbaksa.jjbaksa.databinding.ActivityChangePasswordBinding
Expand All @@ -14,8 +16,51 @@ class ChangePasswordActivity : BaseActivity<ActivityChangePasswordBinding>() {
get() = R.layout.activity_change_password
private val viewModel: ChangePasswordViewModel by viewModels()

var currentPasswordText = ""
var newPasswordText = ""
var checkPasswordText = ""
var isFailedCurrentPassword = false
var isFailedNewPassword = false

override fun initView() {
binding.jjAppBarContainer.setOnClickListener { finish() }
observeData()
}

private fun observeData() {
viewModel.currentPasswordState.observe(this) {
isFailedCurrentPassword = !it?.isSuccess!!
if (isFailedCurrentPassword) {
binding.currentPasswordEditText.editTextBackground = failButtonBackground()
showSnackBar(it?.msg.toString(), getString(R.string.cancel))
} else {
if (newPasswordText != checkPasswordText) {
showSnackBar(
getString(R.string.not_match_new_password),
getString(R.string.cancel)
)
binding.newPasswordEditText.editTextBackground = failButtonBackground()
binding.checkNewPasswordEditText.editTextBackground = failButtonBackground()
isFailedNewPassword = true
} else {
viewModel.setNewPassword(binding.newPasswordEditText.editTextText)
}
}
}
viewModel.newPasswordState.observe(this) {
if (it?.isSuccess!!) {
setConfirmDialog()
} else {
showSnackBar(it.msg.toString(), getString(R.string.cancel))
binding.newPasswordEditText.editTextBackground = failButtonBackground()
binding.checkNewPasswordEditText.editTextBackground = failButtonBackground()
isFailedNewPassword = true
}
}
viewModel.isEnableButton.observe(this) {
binding.changePasswordButton.isEnabled = it
binding.changePasswordButton.isSelected = it
}
}

override fun subscribe() {
Expand All @@ -25,29 +70,80 @@ class ChangePasswordActivity : BaseActivity<ActivityChangePasswordBinding>() {
setCurrentPassword()
setNewPassword()
setCheckNewPassword()
setConfirmButton()
}

private fun setCurrentPassword() {
binding.currentPasswordEditText.also {
it.setOnFocusChangeListener { _, _ -> }
it.addTextChangedListener { currentPassword -> }
it.addTextChangedListener { currentPassword ->
if (isFailedCurrentPassword) {
it.editTextBackground = comeBackButtonBackground()
isFailedCurrentPassword = false
}
currentPasswordText = currentPassword.toString()
setEditTextState()
}
}
}

private fun setNewPassword() {
binding.newPasswordEditText.also {
it.setOnFocusChangeListener { _, _ -> }
it.addTextChangedListener { newPassword -> }
it.addTextChangedListener { newPassword ->
if (isFailedNewPassword) {
it.editTextBackground = comeBackButtonBackground()
binding.checkNewPasswordEditText.editTextBackground = comeBackButtonBackground()
isFailedNewPassword = false
}
newPasswordText = newPassword.toString()
setEditTextState()
}
}
}

private fun setCheckNewPassword() {
binding.checkNewPasswordEditText.also {
it.setOnFocusChangeListener { _, _ -> }
it.addTextChangedListener { checkNewPassword -> }
it.addTextChangedListener { checkNewPassword ->
if (isFailedNewPassword) {
it.editTextBackground = comeBackButtonBackground()
binding.newPasswordEditText.editTextBackground = comeBackButtonBackground()
isFailedNewPassword = false
}
checkPasswordText = checkNewPassword.toString()
setEditTextState()
}
}
}

private fun isNotEmptyEditText(): Boolean =
currentPasswordText.isNotEmpty() && newPasswordText.isNotEmpty() && checkPasswordText.isNotEmpty()

private fun setEditTextState() {
if (isNotEmptyEditText()) {
viewModel.setEnabledButton(true)
} else {
viewModel.setEnabledButton(false)
}
}

private fun setConfirmButton() {
binding.changePasswordButton.setOnClickListener {
viewModel.checkPassword(binding.currentPasswordEditText.editTextText)
}
}

private fun failButtonBackground(): Drawable? = ContextCompat.getDrawable(
this,
R.drawable.shape_rect_eeeeee_solid_radius_100_stroke_ff7f23
)

private fun comeBackButtonBackground(): Drawable? = ContextCompat.getDrawable(
this,
R.drawable.shape_rect_eeeeee_solid_radius_100_padding_7_11_11_8
)

private fun setConfirmDialog() {
ConfirmDialog(
getString(R.string.success_change_password),
Expand Down
Loading

0 comments on commit dadb109

Please sign in to comment.