Skip to content

Commit 9bb4652

Browse files
committed
스플래시 화면 교체및 타이머 동작
1 parent 82ccbdc commit 9bb4652

File tree

10 files changed

+87
-15
lines changed

10 files changed

+87
-15
lines changed

app/src/main/java/com/ddd/attendance/check/db/dao/UserDao.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.ddd.attendance.check.db.dao
22

33
import androidx.room.Dao
44
import androidx.room.Insert
5+
import androidx.room.OnConflictStrategy
56
import androidx.room.Query
67
import com.ddd.attendance.check.db.entity.User
78

@@ -10,6 +11,6 @@ interface UserDao {
1011
@Query("SELECT * FROM USER")
1112
fun getUsers(): List<User>
1213

13-
@Insert
14+
@Insert(onConflict = OnConflictStrategy.REPLACE)
1415
suspend fun addUser(user: User)
1516
}

app/src/main/java/com/ddd/attendance/check/di/module/AppModule.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.ddd.attendance.check.di.module
22

33
import android.content.Context
4-
import android.util.Log
54
import androidx.room.Room
65
import com.ddd.attendance.check.DDDApplication
76
import com.ddd.attendance.check.db.DDDDataBase

app/src/main/java/com/ddd/attendance/check/model/AttendResponse.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ data class Attendance(
44
val expire: String? = "",
55
val number: Int? = 0,
66
val status: String? = "",
7-
val message: String? = ""
7+
val message: String? = "이미 출석 체크가 시작되었습니다."
88
)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.ddd.attendance.check.utill
2+
3+
import android.content.Context
4+
import android.content.Context.MODE_PRIVATE
5+
6+
7+
object SharedPreferences {
8+
9+
fun saveStatus(context: Context, isStatus: Boolean) {
10+
val pref = context.getSharedPreferences(NAME_SHARED, MODE_PRIVATE)
11+
val editor = pref.edit()
12+
editor.putBoolean(KEY_STATUS, isStatus)
13+
editor.apply()
14+
}
15+
16+
fun getStatus(context: Context): Boolean {
17+
val pref = context.getSharedPreferences(NAME_SHARED, MODE_PRIVATE)
18+
return pref.getBoolean(KEY_STATUS, false)
19+
}
20+
21+
private const val KEY_STATUS = "status"
22+
private const val NAME_SHARED = "ddd_admin_status"
23+
}

app/src/main/java/com/ddd/attendance/check/vm/MainViewModel.kt

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,34 @@ import androidx.databinding.ObservableField
44
import androidx.lifecycle.LiveData
55
import androidx.lifecycle.MutableLiveData
66
import androidx.lifecycle.ViewModel
7+
import com.ddd.attendance.check.DDDApplication
78
import com.ddd.attendance.check.common.NetworkHelper
89
import com.ddd.attendance.check.common.NetworkHelper.ERROR_MSG
910
import com.ddd.attendance.check.common.UserType
1011
import com.ddd.attendance.check.data.repository.AttendanceRepository
1112
import com.ddd.attendance.check.data.repository.UserRepository
1213
import com.ddd.attendance.check.model.Attendance
14+
import com.ddd.attendance.check.utill.SharedPreferences
1315
import com.ddd.attendance.check.utill.SingleLiveEvent
14-
import kotlinx.coroutines.GlobalScope
15-
import kotlinx.coroutines.launch
16+
import kotlinx.coroutines.*
1617
import java.io.IOException
1718
import javax.inject.Inject
1819

1920
class MainViewModel @Inject constructor(
20-
private val userRepository: UserRepository,
21-
private val attendanceRepository: AttendanceRepository
21+
private val userRepository: UserRepository,
22+
private val attendanceRepository: AttendanceRepository,
23+
private val dddApplication: DDDApplication
2224
) : ViewModel() {
2325

2426
private val _isAdmin = MutableLiveData<Boolean>()
27+
private val _isAttendanceNumberCount = MutableLiveData<Int>()
2528
private val _isAttendanceNumber = MutableLiveData<Int>()
2629
private val _isAttendanceStart = MutableLiveData<Boolean>()
2730
private val _btnEnableLogin = MutableLiveData<Boolean>()
2831
private val _showToastError = MutableLiveData<String>()
2932

3033
val isAdmin: LiveData<Boolean> = _isAdmin
34+
val isAttendanceNumberCount: LiveData<Int> = _isAttendanceNumberCount
3135
val isAttendanceNumber: LiveData<Int> = _isAttendanceNumber
3236
val isAttendanceStart: LiveData<Boolean> = _isAttendanceStart
3337
val editNumberAttendance = ObservableField<String>()
@@ -36,6 +40,11 @@ class MainViewModel @Inject constructor(
3640

3741
val showDDDDialog = SingleLiveEvent<Pair<UserType, String>>()
3842

43+
44+
init {
45+
_isAttendanceStart.value = SharedPreferences.getStatus(dddApplication)
46+
}
47+
3948
fun onInputNumberTextChanged(input: CharSequence) {
4049
editNumberAttendance.set(input.toString())
4150
_btnEnableLogin.value = !editNumberAttendance.get().isNullOrEmpty()
@@ -73,6 +82,7 @@ class MainViewModel @Inject constructor(
7382

7483
private fun attendanceEndUI() {
7584
_isAttendanceNumber.postValue(EMPTY_NUMBER)
85+
_isAttendanceNumberCount.postValue(EMPTY_NUMBER)
7686
_isAttendanceStart.postValue(false)
7787
showDDDDialog(MSG_ATTENDANCE_END)
7888
}
@@ -93,27 +103,55 @@ class MainViewModel @Inject constructor(
93103

94104
private suspend fun attendanceStart() {
95105
val response = attendanceRepository.attendanceStart()
96-
if (response.isSuccessful) attendanceStartUI(response.body())
97-
else _showToastError.postValue(response.body()?.message)
106+
if (response.isSuccessful) {
107+
SharedPreferences.saveStatus(dddApplication, true)
108+
attendanceStartUI(response.body())
109+
startTimer()
110+
} else {
111+
_showToastError.postValue(MSG_ALREADY_START)
112+
}
113+
}
114+
115+
private var job: Job? = null
116+
private suspend fun startTimer() {
117+
CoroutineScope(Dispatchers.Default).launch {
118+
job = launch(Dispatchers.Main) {
119+
60.countDown()
120+
}
121+
job?.join()
122+
}
98123
}
99124

100125
private suspend fun attendanceEnd() {
101126
val response = attendanceRepository.attendsEnd()
102-
if (response.isSuccessful) attendanceEndUI()
103-
else _showToastError.postValue(response.body()?.message)
127+
if (response.isSuccessful) {
128+
SharedPreferences.saveStatus(dddApplication, false)
129+
attendanceEndUI()
130+
if (job != null) job!!.cancel()
131+
} else _showToastError.postValue(MSG_ALREADY_START)
104132
}
105133

134+
//일반 팀원 출첵 함수
106135
private fun attendanceCheck() {
107136

108137
}
109138

139+
private suspend fun Int.countDown() {
140+
for (index in this downTo 1) {
141+
_isAttendanceNumberCount.postValue(index)
142+
delay(COUNT_DELAY)
143+
}
144+
}
145+
110146
private fun showDDDDialog(message: String) {
111147
showDDDDialog.postValue(Pair(if (_isAdmin.value == true) UserType.ADMIN else UserType.BASIC, message))
112148
}
113149

114150
companion object {
115151
const val MSG_ATTENDANCE_START = "출석체크가 시작되었습니다."
116152
const val MSG_ATTENDANCE_END = "출석체크가 종료되었습니다."
153+
const val MSG_ALREADY_START = "이미 출석 체크가 시작되었습니다.\n 잠시후 다시 시도 해주세요."
117154
const val EMPTY_NUMBER = 0
155+
const val COUNT_DELAY: Long = 1000
118156
}
119157
}

app/src/main/java/com/ddd/attendance/check/vm/SplashViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,6 @@ class SplashViewModel @Inject constructor(private val userRepository: UserReposi
3232
}
3333

3434
companion object {
35-
const val DELAY_TIME: Long = 900
35+
const val DELAY_TIME: Long = 1500
3636
}
3737
}
17.4 KB
Loading

app/src/main/res/layout/activity_main.xml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,18 @@
1515
android:background="@{safeUnbox(mainViewModel.isAdmin)?@color/attendance_admin_background_color:@color/attendance_basic_background_color}"
1616
android:focusableInTouchMode="true">
1717

18+
<TextView
19+
android:layout_width="wrap_content"
20+
android:layout_height="wrap_content"
21+
android:layout_marginBottom="20dp"
22+
android:text="@{String.valueOf(safeUnbox(mainViewModel.isAttendanceNumberCount))}"
23+
android:textColor="@color/white"
24+
android:textSize="20dp"
25+
android:visibility="@{safeUnbox(mainViewModel.isAttendanceNumberCount>0)?View.VISIBLE:View.GONE}"
26+
app:layout_constraintBottom_toTopOf="@+id/imgAttendanceInput"
27+
app:layout_constraintLeft_toLeftOf="parent"
28+
app:layout_constraintRight_toRightOf="parent"
29+
tools:ignore="SpUsage" />
1830
<androidx.appcompat.widget.AppCompatImageView
1931
android:id="@+id/imgAttendanceInput"
2032
android:layout_width="wrap_content"
@@ -100,7 +112,6 @@
100112
android:text="@{safeUnbox(mainViewModel.isAdmin)?@string/attendance_admin_guide_bottom:@string/attendance_guide_bottom}"
101113
android:textColor="@{safeUnbox(mainViewModel.isAdmin)?@color/white:@color/login_sub_title}"
102114
android:textSize="13dp"
103-
104115
app:layout_constraintBottom_toTopOf="@+id/btnAdminAttendance"
105116
app:layout_constraintLeft_toLeftOf="parent"
106117
app:layout_constraintRight_toRightOf="parent"

app/src/main/res/layout/activity_splash.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
type="com.ddd.attendance.check.vm.SplashViewModel"/>
66
</data>
77
<androidx.constraintlayout.widget.ConstraintLayout
8-
android:background="@android:color/black"
8+
android:background="@color/attendance_admin_background_color"
99
xmlns:android="http://schemas.android.com/apk/res/android"
1010
xmlns:tools="http://schemas.android.com/tools"
1111
android:layout_width="match_parent"

app/src/main/res/values/styles.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
2020
<item name="colorPrimary">@color/attendance_admin_background_color</item>
2121
<item name="colorAccent">@color/colorAccent</item>
22-
<item name="colorPrimaryDark">@color/black</item>
22+
<item name="colorPrimaryDark">@color/attendance_admin_background_color</item>
2323
</style>
2424

2525
<style name="LoginEditTheme" parent="Widget.AppCompat.EditText">

0 commit comments

Comments
 (0)