Skip to content

Commit 5cd2c8d

Browse files
Taewan-PEunhoKangootr47Muungisickbirdd
committed
v0.3.1
πŸš€ Feature Updates - System Navigation Bar 색상도 ν…Œλ§ˆμ— λ°”λ€Œκ²Œλ” μˆ˜μ • - μƒν’ˆ 상세 ν™”λ©΄μ—μ„œ Graph μ˜μ—­μ΄ μ„Έλ‘œλ‘œ μŠ¬λΌμ΄λ“œν•  경우 슀크둀 μ˜μ—­μ— μ μš©λ˜λ„λ‘ λ³€κ²½ (μ΄μ œλΆ€ν„°λŠ” 길게 λˆ„λ₯Ό μ‹œ κ·Έλž˜ν”„ 라벨이 ν™œμ„±ν™”λ©λ‹ˆλ‹€) - 일뢀 νŽ˜μ΄μ§€μ—μ„œ μ ‘κ·Όμ„± κ°œμ„  πŸ”§ Bug Fixes - μƒν’ˆ λͺ©λ‘ ν™”λ©΄μ—μ„œ μ•Œλ¦Ό 토글을 껐닀가 μΌ°μ„λ•Œ ν™œμ„±ν™” μƒνƒœμ—μ„œ 꺼짐 μƒνƒœμ— μ•„μ΄μ½˜μ΄ λœ¨λŠ” 였λ₯˜ μˆ˜μ • - μƒν’ˆ λͺ©λ‘ ν™”λ©΄μ—μ„œ ν™”λ©΄μ˜ 토글값을 λ³€κ²½ν•œ ν›„, μƒˆλ‘œκ³ μΉ¨μ„ ν–ˆμ„λ•Œ μ›λž˜λŒ€λ‘œ λŒμ•„μ˜€λŠ” 문제 μˆ˜μ • - λ‘œλ”©μ€‘μΌλ•Œ μƒν’ˆ 상세 ν™”λ©΄μ—μ„œ λ²„νŠΌλ“€ λΉ„ν™œμ„±ν™” - Dynamic Theme을 μ§€μ›ν•˜μ§€ μ•ŠλŠ” OS의 경우 ν•΄λ‹Ή ν…Œλ§ˆ μ„€μ • View λΉ„ν™œμ„±ν™” - μƒν’ˆ, μƒν’ˆ μΆ”μ²œ λͺ©λ‘ μ „ν™˜μ‹œ 슀크둀 / λ‹Ήκ²¨μ„œ μƒˆλ‘œκ³ μΉ¨ 였λ₯˜ μˆ˜μ • - ν™”λ©΄ νšŒμ „ μ‹œ λ‹€μ΄μ–Όλ‘œκ·Έκ°€ μ‚¬λΌμ§€λŠ” ν˜„μƒ μˆ˜μ • - μƒν’ˆ 상세 νŽ˜μ΄μ§€μ—μ„œ ν™”λ©΄ νšŒμ „ μ‹œ Scroll Stateκ°€ μ΄ˆκΈ°ν™”λ˜λŠ” ν˜„μƒ μˆ˜μ • - λͺ¨λ“  νŽ˜μ΄μ§€μ—μ„œ λ²„νŠΌ 연속 μž…λ ₯ λ°©μ§€ 처리 - λͺ¨λ“  νŽ˜μ΄μ§€μ—μ„œ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ μΌμ–΄λ‚˜λŠ” 일뢀 ν•­λͺ©λ“€ μˆ˜μ • - μ‹œμŠ€ν…œ 글꼴을 ν‚€μ› μ„λ•Œ UIκ°€ κΉ¨μ§€λŠ” 문제 μˆ˜μ • - ν…Œλ§ˆ λ³€κ²½ ν›„ μ•± μž¬μ‹œμž‘ μ‹œ ν…Œλ§ˆ 변경이 μ•ˆλ˜λŠ” 였λ₯˜ μˆ˜μ • - λͺ©ν‘œ 가격 μˆ˜μ • μ‹œ 가격 μˆ˜μ • ν™”λ©΄ 초기 κ°’ κΈ°μ‘΄ λͺ©ν‘œ κ°€κ²©μœΌλ‘œ μˆ˜μ • - λ‚΄ 정보 νŽ˜μ΄μ§€μ—μ„œ 이름에 문자만 λ‚˜μ˜¬ 수 μžˆλ„λ‘ μˆ˜μ • Material Chart Changelog: https://github.com/Taewan-P/material-android-chart/releases/tag/v0.2.0 Co-Authored-By: EunhoKang <[email protected]> Co-Authored-By: ootr47 <[email protected]> Co-Authored-By: 손문기 <[email protected]> Co-Authored-By: ByeongIk Choi <[email protected]>
1 parent fd7b149 commit 5cd2c8d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1056
-535
lines changed

β€Žandroid/app/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ android {
1919
applicationId = "app.priceguard"
2020
minSdk = 29
2121
targetSdk = 34
22-
versionCode = 4
23-
versionName = "0.3.0"
22+
versionCode = 5
23+
versionName = "0.3.1"
2424

2525
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2626
}
@@ -111,7 +111,7 @@ dependencies {
111111
kapt("androidx.hilt:hilt-compiler:1.1.0")
112112

113113
// Material chart
114-
implementation("app.priceguard:materialchart:0.1.2")
114+
implementation("app.priceguard:materialchart:0.2.0")
115115
}
116116

117117
kapt {

β€Žandroid/app/src/main/java/app/priceguard/data/repository/product/ProductRepositoryImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class ProductRepositoryImpl @Inject constructor(
175175
dto.imageUrl ?: "",
176176
dto.price ?: 0,
177177
dto.rank ?: 0,
178-
GraphDataConverter().toDataset(dto.priceData)
178+
graphDataConverter.toDataset(dto.priceData)
179179
)
180180
} ?: listOf()
181181
)
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package app.priceguard.ui
2+
3+
import android.app.Dialog
4+
import android.content.Intent
5+
import android.os.Bundle
6+
import androidx.fragment.app.DialogFragment
7+
import app.priceguard.R
8+
import app.priceguard.data.repository.token.TokenRepository
9+
import app.priceguard.ui.login.LoginActivity
10+
import com.google.android.material.dialog.MaterialAlertDialogBuilder
11+
import javax.inject.Inject
12+
import kotlinx.coroutines.CoroutineScope
13+
import kotlinx.coroutines.Dispatchers
14+
import kotlinx.coroutines.launch
15+
16+
class ErrorDialogFragment : DialogFragment() {
17+
18+
@Inject
19+
lateinit var tokenRepository: TokenRepository
20+
21+
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
22+
return MaterialAlertDialogBuilder(
23+
requireActivity(),
24+
R.style.ThemeOverlay_App_MaterialAlertDialog
25+
).apply {
26+
setTitle(getString(R.string.permission_denied_title))
27+
setMessage(getString(R.string.permission_denied_message))
28+
setPositiveButton(getString(R.string.confirm)) { _, _ -> goBackToLoginActivity(tokenRepository) }
29+
}.create()
30+
}
31+
32+
override fun onStart() {
33+
super.onStart()
34+
dialog?.setCancelable(false)
35+
}
36+
37+
private fun goBackToLoginActivity(tokenRepository: TokenRepository) {
38+
CoroutineScope(Dispatchers.IO).launch { tokenRepository.clearTokens() }
39+
val intent = Intent(requireActivity(), LoginActivity::class.java)
40+
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
41+
startActivity(intent)
42+
requireActivity().finish()
43+
}
44+
}

β€Žandroid/app/src/main/java/app/priceguard/ui/PriceGuardApp.kt

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package app.priceguard.ui
22

33
import android.app.Application
4-
import android.app.UiModeManager
5-
import android.content.Context
64
import androidx.appcompat.app.AppCompatDelegate
75
import androidx.hilt.work.HiltWorkerFactory
86
import androidx.work.Configuration
@@ -47,23 +45,15 @@ class PriceGuardApp : Application(), Configuration.Provider {
4745

4846
when (darkMode) {
4947
MODE_LIGHT -> {
50-
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
51-
val uiModeManager =
52-
getSystemService(Context.UI_MODE_SERVICE) as UiModeManager
53-
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_NO)
54-
} else {
55-
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
56-
}
48+
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
5749
}
5850

5951
MODE_DARK -> {
60-
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
61-
val uiModeManager =
62-
getSystemService(Context.UI_MODE_SERVICE) as UiModeManager
63-
uiModeManager.setApplicationNightMode(UiModeManager.MODE_NIGHT_YES)
64-
} else {
65-
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
66-
}
52+
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
53+
}
54+
55+
else -> {
56+
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
6757
}
6858
}
6959
}

β€Žandroid/app/src/main/java/app/priceguard/ui/additem/AddItemActivity.kt

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ package app.priceguard.ui.additem
33
import android.content.Intent
44
import android.os.Bundle
55
import androidx.appcompat.app.AppCompatActivity
6-
import androidx.navigation.NavController
7-
import androidx.navigation.NavDirections
86
import androidx.navigation.fragment.NavHostFragment
97
import app.priceguard.R
108
import app.priceguard.databinding.ActivityAddItemBinding
119
import app.priceguard.ui.additem.link.RegisterItemLinkFragmentDirections
10+
import app.priceguard.ui.util.SystemNavigationColorState
11+
import app.priceguard.ui.util.applySystemNavigationBarColor
12+
import app.priceguard.ui.util.safeNavigate
1213
import dagger.hilt.android.AndroidEntryPoint
1314

1415
@AndroidEntryPoint
@@ -18,7 +19,7 @@ class AddItemActivity : AppCompatActivity() {
1819

1920
override fun onCreate(savedInstanceState: Bundle?) {
2021
super.onCreate(savedInstanceState)
21-
22+
this.applySystemNavigationBarColor(SystemNavigationColorState.SURFACE)
2223
binding = ActivityAddItemBinding.inflate(layoutInflater)
2324
setStartDestination()
2425
setContentView(binding.root)
@@ -43,13 +44,10 @@ class AddItemActivity : AppCompatActivity() {
4344
intent.getStringExtra("productCode") ?: "",
4445
intent.getStringExtra("productTitle") ?: "",
4546
intent.getIntExtra("productPrice", 0),
46-
intent.getBooleanExtra("isAdding", true)
47+
intent.getBooleanExtra("isAdding", true),
48+
intent.getIntExtra("productTargetPrice", (intent.getIntExtra("productPrice", 0) * 0.8).toInt())
4749
)
4850
navController.safeNavigate(action)
4951
}
5052
}
51-
52-
private fun NavController.safeNavigate(direction: NavDirections) {
53-
currentDestination?.getAction(direction.actionId)?.run { navigate(direction) }
54-
}
5553
}

β€Žandroid/app/src/main/java/app/priceguard/ui/additem/confirm/ConfirmItemLinkFragment.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ class ConfirmItemLinkFragment : Fragment() {
5757
arguments.getString("productCode") ?: "",
5858
arguments.getString("productName") ?: "",
5959
arguments.getInt("productPrice"),
60-
true
60+
true,
61+
(arguments.getInt("productPrice") * 0.8).toInt()
6162
)
6263
findNavController().navigate(action)
6364
}
Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,32 @@
11
package app.priceguard.ui.additem.link
22

33
import android.os.Bundle
4+
import android.webkit.WebView
45
import androidx.appcompat.app.AppCompatActivity
56
import app.priceguard.databinding.ActivityLinkHelperWebViewBinding
67

78
class LinkHelperWebViewActivity : AppCompatActivity() {
8-
99
private lateinit var binding: ActivityLinkHelperWebViewBinding
10+
private lateinit var webView: WebView
1011

1112
override fun onCreate(savedInstanceState: Bundle?) {
1213
super.onCreate(savedInstanceState)
1314

1415
binding = ActivityLinkHelperWebViewBinding.inflate(layoutInflater)
1516
setContentView(binding.root)
1617

17-
binding.wbLinkHelper.loadUrl("https://info-kr.priceguard.app/")
18+
webView = WebView(this)
19+
webView.loadUrl("https://info-kr.priceguard.app/")
20+
binding.wbLinkHelper.addView(webView)
21+
}
22+
23+
override fun onDestroy() {
24+
super.onDestroy()
25+
binding.wbLinkHelper.removeAllViews()
26+
webView.clearHistory()
27+
webView.clearCache(true)
28+
webView.loadUrl("about:blank")
29+
webView.pauseTimers()
30+
webView.destroy()
1831
}
1932
}

β€Žandroid/app/src/main/java/app/priceguard/ui/additem/link/RegisterItemLinkFragment.kt

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,15 @@ import android.view.ViewGroup
88
import androidx.activity.addCallback
99
import androidx.fragment.app.Fragment
1010
import androidx.fragment.app.viewModels
11-
import androidx.navigation.NavController
12-
import androidx.navigation.NavDirections
1311
import androidx.navigation.fragment.findNavController
1412
import app.priceguard.R
1513
import app.priceguard.data.repository.product.ProductErrorState
1614
import app.priceguard.data.repository.token.TokenRepository
1715
import app.priceguard.databinding.FragmentRegisterItemLinkBinding
1816
import app.priceguard.ui.home.HomeActivity
1917
import app.priceguard.ui.util.lifecycle.repeatOnStarted
20-
import app.priceguard.ui.util.ui.showPermissionDeniedDialog
18+
import app.priceguard.ui.util.safeNavigate
19+
import app.priceguard.ui.util.showDialogWithLogout
2120
import dagger.hilt.android.AndroidEntryPoint
2221
import javax.inject.Inject
2322

@@ -111,7 +110,7 @@ class RegisterItemLinkFragment : Fragment() {
111110
is RegisterItemLinkViewModel.RegisterLinkEvent.FailureVerification -> {
112111
when (event.errorType) {
113112
ProductErrorState.PERMISSION_DENIED -> {
114-
requireActivity().showPermissionDeniedDialog(tokenRepository)
113+
showDialogWithLogout()
115114
}
116115

117116
ProductErrorState.INVALID_REQUEST -> {
@@ -132,10 +131,6 @@ class RegisterItemLinkFragment : Fragment() {
132131
binding.tvRegisterItemError.text = message
133132
}
134133

135-
private fun NavController.safeNavigate(direction: NavDirections) {
136-
currentDestination?.getAction(direction.actionId)?.run { navigate(direction) }
137-
}
138-
139134
override fun onDestroyView() {
140135
super.onDestroyView()
141136
_binding = null

0 commit comments

Comments
Β (0)