Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[UI/#35] splash screen 구현 #38

Merged
merged 9 commits into from
Jan 8, 2024
18 changes: 12 additions & 6 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
android:name=".MyApp"
Expand All @@ -11,7 +12,7 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_doorip_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Doorip"
android:theme="@style/splash_delete"
android:usesCleartextTraffic="true"
tools:targetApi="31">

Expand All @@ -32,6 +33,11 @@

<activity
android:name="com.going.presentation.mock.MockActivity"
android:exported="false"
android:screenOrientation="portrait" />

<activity
android:name="com.going.presentation.splash.SplashActivity"
android:exported="true"
android:screenOrientation="portrait">
<intent-filter>
Expand All @@ -42,7 +48,7 @@
</activity>

<activity
android:name="com.going.presentation.auth.LoginActivity"
android:name="com.going.presentation.auth.SignInActivity"
android:exported="false"
android:screenOrientation="portrait" />

Expand All @@ -54,17 +60,17 @@
<activity
android:name="com.going.presentation.onboarding.OnboardingProfileSettingActivity"
android:exported="false"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />

<activity
android:name="com.going.presentation.tendencytest.TendencyTestSplashActivity"
android:exported="false"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />

<activity
android:name="com.going.presentation.tendencytest.TendencyTestActivity"
android:exported="false"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />

<activity
android:name="com.going.presentation.preferencetag.PreferenceTagActivity"
Expand All @@ -74,7 +80,7 @@
<activity
android:name="com.going.presentation.tendencytest.result.TendencyTestResultActivity"
android:exported="true"
android:screenOrientation="portrait"/>
android:screenOrientation="portrait" />

</application>

Expand Down
5 changes: 5 additions & 0 deletions buildSrc/src/main/kotlin/Dependencies.kt
Original file line number Diff line number Diff line change
Expand Up @@ -97,3 +97,8 @@ object FirebaseDependencies {
object KakaoDependencies {
const val user = "com.kakao.sdk:v2-user:${Versions.kakaoVersion}"
}

object GooglePlayDependencies {
const val update = "com.google.android.play:app-update:${Versions.googlePlayUpdate}"
const val updateKtx = "com.google.android.play:app-update-ktx:${Versions.googlePlayUpdate}"
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요 친구들도 지금 자동 업데이트 기능 지금 안쓸거면 지금은 필요없을 듯 합니닷

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

허헣 삭제했습니다~

1 change: 1 addition & 0 deletions buildSrc/src/main/kotlin/Versions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ object Versions {
const val junitVersion = "4.13.2"
const val espressoVersion = "3.3.0"
const val androidTestVersion = "1.1.2"
const val googlePlayUpdate = "2.1.0"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

얘도 ~

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

얘도~


val javaVersion = JavaVersion.VERSION_17
const val jvmVersion = "17"
Expand Down
5 changes: 5 additions & 0 deletions presentation/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,9 @@ dependencies {
KakaoDependencies.run {
implementation(user)
}

GooglePlayDependencies.run {
implementation(update)
implementation(updateKtx)
}
}
3 changes: 2 additions & 1 deletion presentation/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

</manifest>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach

@AndroidEntryPoint
class LoginActivity : BaseActivity<ActivityLoginBinding>(R.layout.activity_login) {
private val viewModel by viewModels<LoginViewModel>()
class SignInActivity : BaseActivity<ActivityLoginBinding>(R.layout.activity_login) {
private val viewModel by viewModels<SignInViewModel>()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import timber.log.Timber
import javax.inject.Inject

@HiltViewModel
class LoginViewModel @Inject constructor(
class SignInViewModel @Inject constructor(
private val loginRepository: LoginRepository,
) : ViewModel() {
private val _postChangeTokenState = MutableStateFlow<UiState<AuthTokenModel>>(UiState.Empty)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.going.presentation.splash

import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities

object NetworkManager {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

음~ 최고

fun checkNetworkState(context: Context): Boolean {
val connectivityManager: ConnectivityManager =
context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

val network = connectivityManager.activeNetwork ?: return false
val actNetwork = connectivityManager.getNetworkCapabilities(network) ?: return false
return when {
actNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true
actNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true
else -> false
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
package com.going.presentation.splash

import android.app.AlertDialog
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import androidx.activity.result.contract.ActivityResultContracts
import com.going.presentation.BuildConfig
import com.going.presentation.R
import com.going.presentation.auth.SignInActivity
import com.going.presentation.databinding.ActivitySplashBinding
import com.going.ui.base.BaseActivity
import com.going.ui.extension.toast
import com.google.android.play.core.appupdate.AppUpdateInfo
import com.google.android.play.core.appupdate.AppUpdateManagerFactory
import com.google.android.play.core.appupdate.AppUpdateOptions
import com.google.android.play.core.install.model.AppUpdateType.IMMEDIATE
import com.google.android.play.core.install.model.UpdateAvailability
import timber.log.Timber

class SplashActivity : BaseActivity<ActivitySplashBinding>(R.layout.activity_splash) {
private val appUpdateManager by lazy { AppUpdateManagerFactory.create(this) }
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요 친구도 일단 지워주셔도 될듯합니당

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지웠읍니다...


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

isConnectedNetwork()
}

private fun isConnectedNetwork() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

변수 이름으로는 is가 적합하지만, 함수명으로는 check가 더 어울릴 것 같습니당

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

변경 완~

if (NetworkManager.checkNetworkState(this)) {
initSplash()
} else {
showNetworkErrorAlertDialog()
}
}

private fun showNetworkErrorAlertDialog() =
AlertDialog.Builder(this)
.setTitle(R.string.notice)
.setMessage(R.string.internet_connect_error)
.setCancelable(false)
.setPositiveButton(
R.string.okay,
) { _, _ ->
finishAffinity()
Comment on lines +44 to +47
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

불필요한 아이들은 이렇게 처리할 수도 있군요!

}
.create()
.show()

private fun initSplash() {
Handler(Looper.getMainLooper()).postDelayed({
navigateToSignInScreen()
if (false) { // 자동 로그인 판정으로 변경 예정
navigateToMainScreen()
} else {
navigateToSignInScreen()
}
}, 3000)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

핸들러 사용 좋네용

}

private fun navigateToMainScreen() {
// Main이 나오면 구현 예정
finish()
}

private fun navigateToSignInScreen() {
Intent(this, SignInActivity::class.java).apply {
startActivity(this)
}
finish()
Comment on lines +57 to +61
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

스코프 함수 좋습니다!

}

private fun requestUpdate(appUpdateInfo: AppUpdateInfo) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요 친구들도 뺴주셔야 할듯~

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

넹~

runCatching {
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
activityResultLauncher,
AppUpdateOptions.newBuilder(IMMEDIATE)
.setAllowAssetPackDeletion(true)
.build(),
)
}.onFailure {
Timber.e(it)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

팀버!!!

}
}

private val activityResultLauncher =
registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) {
if (it.resultCode != RESULT_OK) {
toast(getString(R.string.splash_update_error))
finishAffinity()
}
}

override fun onResume() {
super.onResume()

if (!BuildConfig.DEBUG) {
appUpdateManager.appUpdateInfo.addOnSuccessListener { appUpdateInfo ->
if (appUpdateInfo.updateAvailability() == UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
runCatching {
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
activityResultLauncher,
AppUpdateOptions.newBuilder(IMMEDIATE)
.build(),
)
}.onFailure { errorMessage ->
Timber.e(errorMessage)
}
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class TendencyTestResultActivity :
with(binding) {
tvTendencyTestResultTitle.text = getString(R.string.tendency_test_result_title, "찐두릅")

viewModel.mockTendencyResult.apply {
viewModel?.mockTendencyResult?.apply {
tvTendencyTestResultType.text = tendencyTitle
tvTendencyTestResultSubType.text = tendencySubTitle

Expand Down
24 changes: 24 additions & 0 deletions presentation/src/main/res/drawable/text_logo_doorip.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="194dp"
android:height="66dp"
android:viewportWidth="194"
android:viewportHeight="66">
<path
android:pathData="M159.66,17.95V12.4H152.52L152.52,33.65C152.52,33.66 152.52,33.66 152.52,33.66C152.52,33.67 152.52,33.67 152.52,33.68L152.52,66H159.66L159.66,49.38C163.3,52.56 168.06,54.48 173.26,54.48C184.71,54.48 194,45.16 194,33.66C194,22.17 184.71,12.85 173.26,12.85C168.06,12.85 163.3,14.77 159.66,17.95ZM186.81,33.66C186.81,41.18 180.75,47.27 173.26,47.27C165.78,47.27 159.71,41.18 159.71,33.66C159.71,26.15 165.78,20.06 173.26,20.06C180.75,20.06 186.81,26.15 186.81,33.66Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M34.34,48.55V53.6H41.48V33.01C41.48,33.01 41.48,33 41.48,33C41.48,33 41.48,32.99 41.48,32.99V0.44L34.34,0.44V17.45C30.7,14.31 25.94,12.4 20.74,12.4C9.28,12.4 0,21.62 0,33C0,44.38 9.28,53.6 20.74,53.6C25.94,53.6 30.7,51.69 34.34,48.55ZM7.19,33C7.19,25.57 13.25,19.54 20.74,19.54C28.22,19.54 34.29,25.57 34.29,33C34.29,40.43 28.22,46.46 20.74,46.46C13.25,46.46 7.19,40.43 7.19,33Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
<path
android:pathData="M145.1,13.27V53.15H138.09V13.27H145.1ZM141.56,9.39C138.98,9.39 136.91,7.31 136.91,4.7C136.91,2.01 138.98,0 141.56,0C144.14,0 146.28,2.01 146.28,4.7C146.28,7.31 144.14,9.39 141.56,9.39Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M131.56,12.85V20.14H129.61C124.72,20.73 122.59,24.45 122.64,27.89V53.15H115.51V27.89C115.51,27.89 115.5,23.68 116.48,21.24C117.45,18.84 119.15,16.92 119.15,16.92C121.83,14.05 126.69,12.77 131.56,12.85Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M78.53,49.47C75.12,52.06 70.85,53.6 66.23,53.6C55.02,53.6 45.93,44.57 45.93,33.44C45.93,22.31 55.02,13.29 66.23,13.29C70.85,13.29 75.12,14.83 78.53,17.42C81.98,14.83 86.3,13.29 90.98,13.29C102.31,13.29 111.49,22.31 111.49,33.44C111.49,44.57 102.31,53.6 90.98,53.6C86.3,53.6 81.98,52.06 78.53,49.47ZM61.72,24.48C62.43,24.8 62.64,25.85 62.19,26.82C61.74,27.79 60.8,28.32 60.09,27.99C59.38,27.67 59.17,26.62 59.62,25.65C60.07,24.68 61.01,24.15 61.72,24.48ZM56.31,26.47C56.76,25.5 56.55,24.45 55.84,24.13C55.13,23.8 54.19,24.33 53.74,25.3C53.29,26.27 53.5,27.32 54.21,27.64C54.92,27.97 55.86,27.44 56.31,26.47ZM55.89,32.15C55.88,31.99 56,31.85 56.16,31.84L63.99,31.22C64.15,31.21 64.29,31.32 64.3,31.48L64.31,31.56C64.49,33.86 62.76,35.88 60.44,36.07C58.12,36.25 56.09,34.53 55.9,32.22L55.89,32.15Z"
android:fillColor="#ffffff"
android:fillType="evenOdd"/>
</vector>
24 changes: 24 additions & 0 deletions presentation/src/main/res/layout/activity_splash.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<data>

</data>

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/red_500">

<ImageView
android:src="@drawable/text_logo_doorip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
5 changes: 5 additions & 0 deletions presentation/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@

<string name="counter">%1$d/%2$d</string>

<string name="notice">안내</string>
<string name="okay">확인</string>
<string name="internet_connect_error">인터넷 연결을 확인해주세요</string>
<string name="splash_update_error">업데이트에 문제가 생겼어요\n다시 시도해주세요</string>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요친구도 ~

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

나머지는 network 연결 에러시 dialog에도 사용되기 때문에 마지막만 지우도록 하겠습니다~


<!--onboarding-->
<string name="onboarding_tb_title">프로필 생성</string>
<string name="onboarding_name_tv_title">이름</string>
Expand Down
4 changes: 4 additions & 0 deletions presentation/src/main/res/values/themes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,8 @@
<item name="android:textAppearance">@style/TextAppearance.Doorip.Body3.Medi</item>
</style>


<style name="splash_delete" parent="Base.Theme.Doorip">
<item name="android:windowIsTranslucent">true</item>
</style>
Comment on lines +62 to +64
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

요 친구는 아이템 하나인 것 같은데, 무슨 기능을 위해 사용되나요?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

기존에 존재하는 splashScreen을 제거하는 기능을 합니다!!
이게 없으면 splash가 두개가 떠용

</resources>