Skip to content
This repository has been archived by the owner on Oct 20, 2024. It is now read-only.

Commit

Permalink
๐Ÿ“Œ Home Bookmark Diary Crash Fix (#46)
Browse files Browse the repository at this point in the history
* [feat] Home Crash Fix

* [clean] Toast ์ •๋ฆฌ

* [fix] ์ผ๊ธฐ ๋ณด๊ธฐ - ์บ˜๋ฆฐ๋” ์•„์ดํ…œ ์ˆ˜์ •

* [fix] Home Crash Fix

* [clean] Remove Unused Import
  • Loading branch information
moondev03 authored Aug 6, 2024
1 parent 4f4b44d commit 60946c7
Show file tree
Hide file tree
Showing 27 changed files with 54 additions and 105 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
package com.nabi.data.datasource

import com.nabi.data.model.BaseResponse
import com.nabi.data.model.auth.NicknameResponseDTO
import com.nabi.data.model.auth.SignInRequestDTO
import com.nabi.data.model.auth.SignInResponseDTO
import com.nabi.data.model.emotion.DiaryStatisticsResponseDTO
import com.nabi.domain.model.emotion.EmotionStatistics

interface EmotionRemoteDataSource {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
package com.nabi.data.datasourceImpl

import com.nabi.data.datasource.AuthRemoteDataSource
import com.nabi.data.datasource.EmotionRemoteDataSource
import com.nabi.data.model.BaseResponse
import com.nabi.data.model.auth.NicknameResponseDTO
import com.nabi.data.model.auth.SignInRequestDTO
import com.nabi.data.model.auth.SignInResponseDTO
import com.nabi.data.model.emotion.DiaryStatisticsResponseDTO
import com.nabi.data.service.AuthService
import com.nabi.data.service.EmotionService
import javax.inject.Inject

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
package com.nabi.data.repository

import com.nabi.data.datasource.AuthRemoteDataSource
import com.nabi.data.datasource.EmotionRemoteDataSource
import com.nabi.data.model.auth.SignInRequestDTO
import com.nabi.domain.enums.AuthProvider
import com.nabi.domain.model.auth.NicknameInfo
import com.nabi.domain.model.auth.SignInInfo
import com.nabi.domain.model.emotion.EmotionStatistics
import com.nabi.domain.repository.AuthRepository
import com.nabi.domain.repository.EmotionRepository
import javax.inject.Inject

Expand Down
2 changes: 0 additions & 2 deletions Nabi/data/src/main/java/com/nabi/data/service/DiaryService.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package com.nabi.data.service

import com.nabi.data.model.BaseResponse
import com.nabi.data.model.MessageResponseDTO
import com.nabi.data.model.PageableResponse
import com.nabi.data.model.auth.SignInRequestDTO
import com.nabi.data.model.diary.AddDiaryRequestDTO
import com.nabi.data.model.diary.AddDiaryResponseDTO
import com.nabi.data.model.diary.DiaryDetailResponseDTO
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package com.nabi.domain.repository

import com.nabi.domain.enums.AuthProvider
import com.nabi.domain.model.auth.NicknameInfo
import com.nabi.domain.model.auth.SignInInfo
import com.nabi.domain.model.emotion.EmotionStatistics

interface EmotionRepository {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package com.nabi.nabi.base
import android.app.Application
import com.kakao.sdk.common.KakaoSdk
import com.kakao.sdk.common.util.Utility
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.BuildConfig
import com.nabi.nabi.utils.LoggerUtils
import dagger.hilt.android.HiltAndroidApp

@HiltAndroidApp
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.RectF
import android.util.AttributeSet
import android.util.Log
import android.view.View
import androidx.core.content.ContextCompat
import com.nabi.nabi.R
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package com.nabi.nabi.di

import com.nabi.domain.repository.EmotionRepository
import com.nabi.domain.repository.HomeRepository
import com.nabi.domain.usecase.emotion.GetEmotionStatisticsUseCase
import com.nabi.domain.usecase.home.HomeUseCase
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ import androidx.work.WorkerParameters
import com.google.firebase.messaging.FirebaseMessaging
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.R
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.views.splash.StartActivity
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.tasks.await
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,17 @@
package com.nabi.nabi.views.diary.add

import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.Bundle
import android.speech.RecognitionListener
import android.speech.RecognizerIntent
import android.speech.SpeechRecognizer
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
import com.nabi.nabi.R
import com.nabi.nabi.base.BaseActivity
import com.nabi.nabi.base.BaseFragment
import com.nabi.nabi.databinding.ActivityMainBinding
import com.nabi.nabi.databinding.FragmentAddDiaryBinding
import com.nabi.nabi.utils.Constants
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.utils.UiState
import dagger.hilt.android.AndroidEntryPoint
import java.time.LocalDate
Expand Down Expand Up @@ -105,7 +97,6 @@ class AddDiaryFragment(
}

is UiState.Success -> {
showToast("์ผ๊ธฐ ์ถ”๊ฐ€ ์„ฑ๊ณต")
binding.etDiary.text.clear()
requireActivity().supportFragmentManager.popBackStack()
}
Expand All @@ -127,24 +118,19 @@ class AddDiaryFragment(
private val recognitionListener: RecognitionListener = object : RecognitionListener {
// ๋งํ•˜๊ธฐ ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€๋˜๋ฉด ํ˜ธ์ถœ
override fun onReadyForSpeech(params: Bundle) {
Toast.makeText(requireContext(), "์Œ์„ฑ์ธ์‹ ์‹œ์ž‘", Toast.LENGTH_SHORT).show()
showToast("์Œ์„ฑ ์ธ์‹ ์‹œ์ž‘")
}

// ๋งํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ
override fun onBeginningOfSpeech() {
}

// ์ž…๋ ฅ๋ฐ›๋Š” ์†Œ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์•Œ๋ ค์คŒ
override fun onRmsChanged(rmsdB: Float) {}

// ๋ง์„ ์‹œ์ž‘ํ•˜๊ณ  ์ธ์‹์ด ๋œ ๋‹จ์–ด๋ฅผ buffer์— ๋‹ด์Œ
override fun onBufferReceived(buffer: ByteArray) {}
override fun onBeginningOfSpeech() {} // ๋งํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ
override fun onRmsChanged(rmsdB: Float) {} // ์ž…๋ ฅ๋ฐ›๋Š” ์†Œ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์•Œ๋ ค์คŒ
override fun onBufferReceived(buffer: ByteArray) {} // ๋ง์„ ์‹œ์ž‘ํ•˜๊ณ  ์ธ์‹์ด ๋œ ๋‹จ์–ด๋ฅผ buffer์— ๋‹ด์Œ

// ๋งํ•˜๊ธฐ๋ฅผ ์ค‘์ง€ํ•˜๋ฉด ํ˜ธ์ถœ
override fun onEndOfSpeech() {
// ์Œ์„ฑ ์ธ์‹์ด ๋๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์ค‘์ง€
isListening = false
Toast.makeText(requireContext(), "์Œ์„ฑ ์ธ์‹ ์ค‘์ง€", Toast.LENGTH_SHORT).show()
showToast("์Œ์„ฑ ์ธ์‹ ๋งˆ์นจ")
}

// ์˜ค๋ฅ˜ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ
Expand All @@ -159,8 +145,10 @@ class AddDiaryFragment(
SpeechRecognizer.ERROR_RECOGNIZER_BUSY -> "RECOGNIZER ๊ฐ€ ๋ฐ”์จ"
SpeechRecognizer.ERROR_SERVER -> "์„œ๋ฒ„๊ฐ€ ์ด์ƒํ•จ"
SpeechRecognizer.ERROR_SPEECH_TIMEOUT -> "๋งํ•˜๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ"
else -> "์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜์ž„"
else -> "์•Œ ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜"
}

showToast(message)
}

// ์ธ์‹ ๊ฒฐ๊ณผ๊ฐ€ ์ค€๋น„๋˜๋ฉด ํ˜ธ์ถœ
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.nabi.nabi.views.diary.add

import android.annotation.SuppressLint
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.R
import com.nabi.nabi.base.BaseFragment
import com.nabi.nabi.databinding.FragmentSelectDateBinding
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.utils.UiState
import com.nabi.nabi.views.MainActivity
import dagger.hilt.android.AndroidEntryPoint
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.nabi.domain.model.diary.DiaryInfo
import com.nabi.domain.repository.DataStoreRepository
import com.nabi.domain.usecase.diary.AddDiaryUseCase
import com.nabi.domain.usecase.diary.GetMonthlyDiaryUseCase
import com.nabi.domain.usecase.diary.UpdateDiaryUseCase
import com.nabi.nabi.utils.UiState
import dagger.hilt.android.lifecycle.HiltViewModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import com.nabi.domain.repository.DataStoreRepository
import com.nabi.domain.usecase.bookmark.AddBookmarkUseCase
import com.nabi.domain.usecase.bookmark.DeleteBookmarkUseCase
import com.nabi.domain.usecase.diary.GetDiaryDetailUseCase
import com.nabi.domain.usecase.diary.UpdateDiaryUseCase
import com.nabi.nabi.utils.UiState
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import com.nabi.domain.model.emotion.EmotionStatistics
import com.nabi.nabi.R
import com.nabi.nabi.base.BaseFragment
import com.nabi.nabi.databinding.FragmentStatisticsDiaryBinding
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.utils.UiState
import dagger.hilt.android.AndroidEntryPoint
import java.text.SimpleDateFormat
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,8 @@ import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.nabi.domain.model.diary.DiaryInfo
import com.nabi.domain.model.emotion.EmotionStatistics
import com.nabi.domain.repository.DataStoreRepository
import com.nabi.domain.usecase.diary.GetMonthlyDiaryUseCase
import com.nabi.domain.usecase.emotion.GetEmotionStatisticsUseCase
import com.nabi.nabi.utils.UiState
import dagger.hilt.android.lifecycle.HiltViewModel
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class SelectDiaryDayCalendarAdapter() : ListAdapter<Pair<String, DiaryInfo?>, Se
}

inner class DateViewHolder(val binding: ItemSelectDiaryDayBinding) : RecyclerView.ViewHolder(binding.root) {

fun bind(diaryInfo: Pair<String, DiaryInfo?>) {
binding.tvDay.text = diaryInfo.first
binding.root.isClickable = true
Expand All @@ -49,10 +50,9 @@ class SelectDiaryDayCalendarAdapter() : ListAdapter<Pair<String, DiaryInfo?>, Se
"ํ™”๋‚จ" -> R.drawable.img_anger
"๋ถˆ์•ˆ" -> R.drawable.img_anxiety
"์ง€๋ฃจ" -> R.drawable.img_boredom
else -> R.drawable.shape_radius_50_with_stroke // todo ๊ฐ์ • ๋ฐ์ดํ„ฐ Null ๊ฒฝ์šฐ ์ž„์‹œ๋กœ ์ฒ˜๋ฆฌ
else -> R.color.transparent
}
binding.ivDiaryCheck.setImageResource(resourceId)
if(it.emotion.isNullOrEmpty()) binding.ivDiaryCheck.alpha = 0.2f // todo ๊ฐ์ • ๋ฐ์ดํ„ฐ Null ๊ฒฝ์šฐ ์ž„์‹œ๋กœ ์ฒ˜๋ฆฌ
}

itemView.setOnClickListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ package com.nabi.nabi.views.diary.view
import android.os.Bundle
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.domain.model.diary.DiaryInfo
import com.nabi.nabi.R
import com.nabi.nabi.base.BaseFragment
import com.nabi.nabi.databinding.FragmentSelectDiaryMonthBinding
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.utils.UiState
import com.nabi.nabi.views.MainActivity
import com.nabi.nabi.views.OnRvItemClickListener
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.nabi.nabi.views.home

import android.annotation.SuppressLint
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.nabi.domain.model.home.RecentFiveDiary
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.R
import com.nabi.nabi.base.BaseFragment
import com.nabi.nabi.databinding.FragmentHomeBinding
import com.nabi.nabi.databinding.ItemDiaryBinding
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.utils.UiState
import com.nabi.nabi.views.MainActivity
import com.nabi.nabi.views.OnRvItemClickListener
Expand All @@ -34,6 +32,7 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(R.layout.fragment_home) {
homeRvAdapter = HomeRvAdapter().apply {
setRvItemClickListener(object : OnRvItemClickListener<Int> {
override fun onClick(item: Int) {
(requireActivity() as MainActivity).replaceFragment(DetailDiaryFragment(item), true)
}
})
setRvItemBookmarkClickListener(object : OnRvItemClickListener<RecentFiveDiary> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,26 +1,19 @@
package com.nabi.nabi.views.home

import android.annotation.SuppressLint
import android.os.Handler
import android.os.Looper
import android.text.Spannable
import android.text.SpannableStringBuilder
import android.text.TextPaint
import android.text.method.LinkMovementMethod
import android.text.style.ClickableSpan
import android.text.style.ForegroundColorSpan
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.ViewTreeObserver
import android.widget.TextView
import android.widget.Toast
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.nabi.domain.model.home.RecentFiveDiary
import com.nabi.nabi.R
import com.nabi.nabi.databinding.ItemDiaryBinding
import com.nabi.nabi.utils.LoggerUtils
import com.nabi.nabi.views.OnRvItemClickListener
import java.text.SimpleDateFormat
import java.util.Date
Expand All @@ -46,9 +39,7 @@ class HomeRvAdapter : RecyclerView.Adapter<HomeRvAdapter.ActivityViewHolder>() {
binding.tvDiaryDate.text = formatDateString(diary.diaryEntryDate)
binding.tvDiary.text = diary.content

binding.tvDiary.post {
adjustText(binding.tvDiary, diary.diaryId)
}
adjustText(binding.tvDiary, diary.diaryId)
}

fun isBookmarked(): Boolean {
Expand Down Expand Up @@ -99,47 +90,48 @@ class HomeRvAdapter : RecyclerView.Adapter<HomeRvAdapter.ActivityViewHolder>() {
if (layout != null) {
val lines = layout.lineCount
if (lines > 3) {
// ๋งˆ์ง€๋ง‰ ์ค„์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
val lastLineStart = layout.getLineStart(3)
val lastLineEnd = layout.getLineEnd(3)

val text = tvDiary.text.toString()
// ๋งˆ์ง€๋ง‰ ์ค„์˜ ํ…์ŠคํŠธ๊ฐ€ 14์ž๊ฐ€ ๋„˜์œผ๋ฉด ์•ž์— 8์ž + ...๋”๋ณด๊ธฐ ์ถœ๋ ฅ
val lastLineText = text.substring(lastLineStart, lastLineEnd)
val lastEightChars = if (lastLineText.length > 14) {
lastLineText.take(8) + " ...๋”๋ณด๊ธฐ"
val truncatedText = text.substring(0, lastLineEnd).trimEnd()

val moreText = "...๋”๋ณด๊ธฐ"
val remainingLength = lastLineEnd - lastLineStart

val displayedText = if (remainingLength >= moreText.length) {
truncatedText.substring(0, lastLineEnd - moreText.length) + moreText
} else {
lastLineText
truncatedText.substring(0, lastLineEnd - (moreText.length - remainingLength)) + moreText
}

val builder = SpannableStringBuilder()
for (i in 0 until 3) {
builder.append(text.substring(layout.getLineStart(i), layout.getLineEnd(i)))
val builder = SpannableStringBuilder(displayedText)
val moreTextStart = builder.indexOf(moreText)
if (moreTextStart >= 0) {
val moreTextEnd = moreTextStart + moreText.length

builder.setSpan(object : ClickableSpan() {
override fun onClick(widget: View) {
rvItemClickListener.onClick(diaryId)
}

override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.isUnderlineText = false
ds.color = tvDiary.context.getColor(R.color.gray2)
}
}, moreTextStart, moreTextEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
}

builder.append(lastEightChars)
val moreTextStart = builder.indexOf("...๋”๋ณด๊ธฐ")
val moreTextEnd = moreTextStart + "...๋”๋ณด๊ธฐ".length

builder.setSpan(object : ClickableSpan() {
override fun onClick(widget: View) {
rvItemClickListener.onClick(diaryId)
}

override fun updateDrawState(ds: TextPaint) {
super.updateDrawState(ds)
ds.isUnderlineText = false
ds.color = tvDiary.context.getColor(R.color.gray2)
}
}, moreTextStart, moreTextEnd, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)

tvDiary.text = builder
tvDiary.movementMethod = LinkMovementMethod.getInstance()
}
}
}
}



fun formatDateString(inputDate: String): String {
val originalFormat = SimpleDateFormat("yyyy-MM-dd", Locale.KOREAN)
val targetFormat = SimpleDateFormat("yyyy. MM. dd", Locale.KOREAN)
Expand Down
Loading

0 comments on commit 60946c7

Please sign in to comment.