diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 17c77a3a..ce0b86fb 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -19,7 +19,7 @@ android { minSdk = 28 targetSdk = 34 versionCode = 1 - versionName = "1.0" + versionName = "1.0.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" buildConfigField("String", "BASE_URL", getApiKey("BASE_URL")) buildConfigField("String", "KAKAO_NATIVE_APP_KEY", getApiKey("KAKAO_NATIVE_APP_KEY")) diff --git a/app/src/main/java/com/sopetit/softie/data/entity/response/VersionResponse.kt b/app/src/main/java/com/sopetit/softie/data/entity/response/VersionResponse.kt new file mode 100644 index 00000000..7488807e --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/data/entity/response/VersionResponse.kt @@ -0,0 +1,32 @@ +package com.sopetit.softie.data.entity.response + +import com.sopetit.softie.domain.entity.UpdateVersion +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class VersionResponse( + @SerialName("iosVersion") + val iosVersion: UpdateVersionEntity, + @SerialName("androidVersion") + val androidVersion: UpdateVersionEntity, + @SerialName("notificationTitle") + val notificationTitle: String, + @SerialName("notificationContent") + val notificationContent: String +) { + @Serializable + data class UpdateVersionEntity( + @SerialName("appVersion") + val appVersion: String, + @SerialName("forceUpdateVersion") + val forceUpdateVersion: String + ) + + fun toUpdateVersion(): UpdateVersion = UpdateVersion( + storeAppVersion = this.androidVersion.appVersion, + forceAppVersion = this.androidVersion.forceUpdateVersion, + notificationTitle = this.notificationTitle, + notificationContent = this.notificationContent + ) +} diff --git a/app/src/main/java/com/sopetit/softie/data/repositoryImpl/VersionRepositoryImpl.kt b/app/src/main/java/com/sopetit/softie/data/repositoryImpl/VersionRepositoryImpl.kt new file mode 100644 index 00000000..d6098828 --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/data/repositoryImpl/VersionRepositoryImpl.kt @@ -0,0 +1,15 @@ +package com.sopetit.softie.data.repositoryImpl + +import com.sopetit.softie.data.source.VersionDataSource +import com.sopetit.softie.domain.entity.UpdateVersion +import com.sopetit.softie.domain.repository.VersionRepository +import javax.inject.Inject + +class VersionRepositoryImpl @Inject constructor( + private val versionDataSource: VersionDataSource +) : VersionRepository { + override suspend fun getUpdateVersion(): Result = + runCatching { versionDataSource.getUpdateVersion() }.map { response -> + requireNotNull(response.data).toUpdateVersion() + } +} diff --git a/app/src/main/java/com/sopetit/softie/data/service/VersionService.kt b/app/src/main/java/com/sopetit/softie/data/service/VersionService.kt new file mode 100644 index 00000000..092e3370 --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/data/service/VersionService.kt @@ -0,0 +1,10 @@ +package com.sopetit.softie.data.service + +import com.sopetit.softie.data.entity.BaseResponse +import com.sopetit.softie.data.entity.response.VersionResponse +import retrofit2.http.GET + +interface VersionService { + @GET("api/v1/versions/client/app") + suspend fun getUpdateVersion(): BaseResponse +} diff --git a/app/src/main/java/com/sopetit/softie/data/source/VersionDataSource.kt b/app/src/main/java/com/sopetit/softie/data/source/VersionDataSource.kt new file mode 100644 index 00000000..73d0c523 --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/data/source/VersionDataSource.kt @@ -0,0 +1,14 @@ +package com.sopetit.softie.data.source + +import com.sopetit.softie.data.entity.BaseResponse +import com.sopetit.softie.data.entity.response.VersionResponse +import com.sopetit.softie.data.service.VersionService +import javax.inject.Inject + +class VersionDataSource @Inject constructor( + private val versionService: VersionService +) { + + suspend fun getUpdateVersion(): BaseResponse = + versionService.getUpdateVersion() +} diff --git a/app/src/main/java/com/sopetit/softie/di/RepositoryModule.kt b/app/src/main/java/com/sopetit/softie/di/RepositoryModule.kt index b5cc6c88..749cabb7 100644 --- a/app/src/main/java/com/sopetit/softie/di/RepositoryModule.kt +++ b/app/src/main/java/com/sopetit/softie/di/RepositoryModule.kt @@ -6,12 +6,14 @@ import com.sopetit.softie.data.repositoryImpl.DollRepositoryImpl import com.sopetit.softie.data.repositoryImpl.HappinessRoutineRepositoryImpl import com.sopetit.softie.data.repositoryImpl.MemberHappinessRoutineRepositoryImpl import com.sopetit.softie.data.repositoryImpl.MemberRepositoryImpl +import com.sopetit.softie.data.repositoryImpl.VersionRepositoryImpl import com.sopetit.softie.domain.repository.AuthRepository import com.sopetit.softie.domain.repository.DailyRoutineRepository import com.sopetit.softie.domain.repository.DollRepository import com.sopetit.softie.domain.repository.HappinessRoutineRepository import com.sopetit.softie.domain.repository.MemberHappinessRoutineRepository import com.sopetit.softie.domain.repository.MemberRepository +import com.sopetit.softie.domain.repository.VersionRepository import dagger.Binds import dagger.Module import dagger.hilt.InstallIn @@ -56,4 +58,10 @@ abstract class RepositoryModule { abstract fun bindToAuthRepository( authRepositoryImpl: AuthRepositoryImpl ): AuthRepository + + @Binds + @Singleton + abstract fun bindToVersionRepository( + versionRepositoryImpl: VersionRepositoryImpl + ): VersionRepository } diff --git a/app/src/main/java/com/sopetit/softie/di/RetrofitServiceModule.kt b/app/src/main/java/com/sopetit/softie/di/RetrofitServiceModule.kt index 2cecc229..8e7204ec 100644 --- a/app/src/main/java/com/sopetit/softie/di/RetrofitServiceModule.kt +++ b/app/src/main/java/com/sopetit/softie/di/RetrofitServiceModule.kt @@ -6,6 +6,7 @@ import com.sopetit.softie.data.service.DollService import com.sopetit.softie.data.service.HappinessRoutineService import com.sopetit.softie.data.service.MemberHappinessRoutineService import com.sopetit.softie.data.service.MemberService +import com.sopetit.softie.data.service.VersionService import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -38,4 +39,8 @@ object RetrofitServiceModule { @Provides fun providesMemberHappinessRoutineService(@RetrofitModule.SoftieType retrofit: Retrofit): MemberHappinessRoutineService = retrofit.create(MemberHappinessRoutineService::class.java) + + @Provides + fun providesVersionService(@VersionModule.VersionType retrofit: Retrofit): VersionService = + retrofit.create(VersionService::class.java) } diff --git a/app/src/main/java/com/sopetit/softie/di/VersionModule.kt b/app/src/main/java/com/sopetit/softie/di/VersionModule.kt new file mode 100644 index 00000000..0854a7f4 --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/di/VersionModule.kt @@ -0,0 +1,69 @@ +package com.sopetit.softie.di + +import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory +import com.sopetit.softie.BuildConfig +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import kotlinx.serialization.json.Json +import okhttp3.Interceptor +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import java.util.concurrent.TimeUnit +import javax.inject.Qualifier +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object VersionModule { + private val json = Json { ignoreUnknownKeys = true } + private const val CONTENT_TYPE = "Content-Type" + private const val APPLICATION_JSON = "application/json" + + @Qualifier + @Retention(AnnotationRetention.BINARY) + annotation class VersionType + + @Provides + @Singleton + @VersionType + fun providesVersionInterceptor(): Interceptor = Interceptor { chain -> + val request = chain.request() + var response = chain.proceed( + request + .newBuilder() + .addHeader(CONTENT_TYPE, APPLICATION_JSON) + .build() + ) + response + } + + @Provides + @Singleton + @VersionType + fun providesVersionOkHttpClient(@VersionType interceptor: Interceptor): OkHttpClient = + OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.SECONDS) + .writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(10, TimeUnit.SECONDS) + .addInterceptor(interceptor) + .addInterceptor( + HttpLoggingInterceptor().apply { + level = + if (BuildConfig.DEBUG) HttpLoggingInterceptor.Level.BODY else HttpLoggingInterceptor.Level.NONE + } + ).build() + + @Provides + @Singleton + @VersionType + fun providesVersionRetrofit(@VersionType okHttpClient: OkHttpClient): Retrofit = + Retrofit.Builder() + .baseUrl(BuildConfig.BASE_URL) + .client(okHttpClient) + .addConverterFactory(json.asConverterFactory(APPLICATION_JSON.toMediaType())) + .build() +} diff --git a/app/src/main/java/com/sopetit/softie/domain/entity/UpdateType.kt b/app/src/main/java/com/sopetit/softie/domain/entity/UpdateType.kt new file mode 100644 index 00000000..debf260b --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/domain/entity/UpdateType.kt @@ -0,0 +1,5 @@ +package com.sopetit.softie.domain.entity + +enum class UpdateType { + FORCE, RECOMMEND, NONE +} diff --git a/app/src/main/java/com/sopetit/softie/domain/entity/UpdateVersion.kt b/app/src/main/java/com/sopetit/softie/domain/entity/UpdateVersion.kt new file mode 100644 index 00000000..237162b7 --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/domain/entity/UpdateVersion.kt @@ -0,0 +1,8 @@ +package com.sopetit.softie.domain.entity + +data class UpdateVersion( + val storeAppVersion: String, + val forceAppVersion: String, + val notificationTitle: String, + val notificationContent: String +) diff --git a/app/src/main/java/com/sopetit/softie/domain/repository/VersionRepository.kt b/app/src/main/java/com/sopetit/softie/domain/repository/VersionRepository.kt new file mode 100644 index 00000000..428314bf --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/domain/repository/VersionRepository.kt @@ -0,0 +1,8 @@ +package com.sopetit.softie.domain.repository + +import com.sopetit.softie.domain.entity.UpdateVersion + +interface VersionRepository { + + suspend fun getUpdateVersion(): Result +} diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/PostLoginUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/auth/PostLoginUseCase.kt similarity index 85% rename from app/src/main/java/com/sopetit/softie/domain/usecase/PostLoginUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/auth/PostLoginUseCase.kt index 5935e647..50eae0dc 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/PostLoginUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/auth/PostLoginUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.auth import com.sopetit.softie.domain.repository.AuthRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/GetRoutineDailyThemeListUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/dailyroutine/GetRoutineDailyThemeListUseCase.kt similarity index 85% rename from app/src/main/java/com/sopetit/softie/domain/usecase/GetRoutineDailyThemeListUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/dailyroutine/GetRoutineDailyThemeListUseCase.kt index 0522c529..7857b44a 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/GetRoutineDailyThemeListUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/dailyroutine/GetRoutineDailyThemeListUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.dailyroutine import com.sopetit.softie.domain.repository.DailyRoutineRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/GetBearTypeUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/local/GetBearTypeUseCase.kt similarity index 84% rename from app/src/main/java/com/sopetit/softie/domain/usecase/GetBearTypeUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/local/GetBearTypeUseCase.kt index d2a2ee00..59354c57 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/GetBearTypeUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/local/GetBearTypeUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.local import com.sopetit.softie.domain.repository.AuthRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/GetSignedUpUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/local/GetSignedUpUseCase.kt similarity index 83% rename from app/src/main/java/com/sopetit/softie/domain/usecase/GetSignedUpUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/local/GetSignedUpUseCase.kt index 1f9a09a2..68469c2e 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/GetSignedUpUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/local/GetSignedUpUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.local import com.sopetit.softie.domain.repository.AuthRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/InitSIgnUpStateUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/local/InitSIgnUpStateUseCase.kt similarity index 86% rename from app/src/main/java/com/sopetit/softie/domain/usecase/InitSIgnUpStateUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/local/InitSIgnUpStateUseCase.kt index 05000969..92f9a204 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/InitSIgnUpStateUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/local/InitSIgnUpStateUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.local import com.sopetit.softie.domain.repository.AuthRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/InitTokenUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/local/InitTokenUseCase.kt similarity index 88% rename from app/src/main/java/com/sopetit/softie/domain/usecase/InitTokenUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/local/InitTokenUseCase.kt index b0232e52..90cc5281 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/InitTokenUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/local/InitTokenUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.local import com.sopetit.softie.domain.repository.AuthRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/member/SetBearTypeUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/local/SetBearTypeUseCase.kt similarity index 84% rename from app/src/main/java/com/sopetit/softie/domain/usecase/member/SetBearTypeUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/local/SetBearTypeUseCase.kt index a754bbb1..67ffb62d 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/member/SetBearTypeUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/local/SetBearTypeUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase.member +package com.sopetit.softie.domain.usecase.local import com.sopetit.softie.domain.repository.AuthRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/GetHomeUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/member/GetHomeUseCase.kt similarity index 83% rename from app/src/main/java/com/sopetit/softie/domain/usecase/GetHomeUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/member/GetHomeUseCase.kt index 55039dff..7f2b1161 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/GetHomeUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/member/GetHomeUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.member import com.sopetit.softie.domain.repository.MemberRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/PatchCottonUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/member/PatchCottonUseCase.kt similarity index 85% rename from app/src/main/java/com/sopetit/softie/domain/usecase/PatchCottonUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/member/PatchCottonUseCase.kt index b4b37130..a55d9f17 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/PatchCottonUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/member/PatchCottonUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.member import com.sopetit.softie.domain.repository.MemberRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/DeleteDailyRoutineUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/DeleteDailyRoutineUseCase.kt similarity index 53% rename from app/src/main/java/com/sopetit/softie/domain/usecase/DeleteDailyRoutineUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/DeleteDailyRoutineUseCase.kt index 86f88fce..f89bb16a 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/DeleteDailyRoutineUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/DeleteDailyRoutineUseCase.kt @@ -1,11 +1,11 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.memberdailyroutine import com.sopetit.softie.domain.repository.DailyRoutineRepository import javax.inject.Inject class DeleteDailyRoutineUseCase @Inject constructor( - private val deleteDailyRoutine: DailyRoutineRepository + private val dailyRoutineRepository: DailyRoutineRepository ) { suspend operator fun invoke(routineIdList: List) = - deleteDailyRoutine.deleteDailyRoutine(routineIdList) + dailyRoutineRepository.deleteDailyRoutine(routineIdList) } diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/GetDailyRoutineUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/GetDailyRoutineUseCase.kt similarity index 82% rename from app/src/main/java/com/sopetit/softie/domain/usecase/GetDailyRoutineUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/GetDailyRoutineUseCase.kt index 31cba036..1d8b8c2b 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/GetDailyRoutineUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/GetDailyRoutineUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.memberdailyroutine import com.sopetit.softie.domain.repository.DailyRoutineRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/PatchAchieveDailyUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/PatchAchieveDailyUseCase.kt similarity index 84% rename from app/src/main/java/com/sopetit/softie/domain/usecase/PatchAchieveDailyUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/PatchAchieveDailyUseCase.kt index 0bd337f9..0f1cb9c8 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/PatchAchieveDailyUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/PatchAchieveDailyUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.memberdailyroutine import com.sopetit.softie.domain.repository.DailyRoutineRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/PostAddDailyRoutineUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/PostAddDailyRoutineUseCase.kt similarity index 87% rename from app/src/main/java/com/sopetit/softie/domain/usecase/PostAddDailyRoutineUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/PostAddDailyRoutineUseCase.kt index e9d2d15c..3c1327f4 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/PostAddDailyRoutineUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/memberdailyroutine/PostAddDailyRoutineUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.memberdailyroutine import com.sopetit.softie.data.entity.request.AddDailyRoutineRequest import com.sopetit.softie.domain.repository.DailyRoutineRepository diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/DeleteMemberHappyRoutineUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/DeleteMemberHappyRoutineUseCase.kt similarity index 85% rename from app/src/main/java/com/sopetit/softie/domain/usecase/DeleteMemberHappyRoutineUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/DeleteMemberHappyRoutineUseCase.kt index 086bbbed..468c1877 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/DeleteMemberHappyRoutineUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/DeleteMemberHappyRoutineUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase +package com.sopetit.softie.domain.usecase.memberhappinessroutine import com.sopetit.softie.domain.repository.MemberHappinessRoutineRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/GetHappyProgressUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/GetHappyProgressUseCase.kt similarity index 84% rename from app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/GetHappyProgressUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/GetHappyProgressUseCase.kt index 8a67e40b..cfdc0a2f 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/GetHappyProgressUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/GetHappyProgressUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase.happyroutine +package com.sopetit.softie.domain.usecase.memberhappinessroutine import com.sopetit.softie.domain.repository.MemberHappinessRoutineRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/PatchMemberHappinessAchieveUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/PatchMemberHappinessAchieveUseCase.kt similarity index 84% rename from app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/PatchMemberHappinessAchieveUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/PatchMemberHappinessAchieveUseCase.kt index 4af2a0be..e59b19cd 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/PatchMemberHappinessAchieveUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/PatchMemberHappinessAchieveUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase.happyroutine +package com.sopetit.softie.domain.usecase.memberhappinessroutine import com.sopetit.softie.domain.repository.MemberHappinessRoutineRepository import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/PostMemberHappyRoutineUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/PostMemberHappyRoutineUseCase.kt similarity index 88% rename from app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/PostMemberHappyRoutineUseCase.kt rename to app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/PostMemberHappyRoutineUseCase.kt index 242e088a..ef2ceea3 100644 --- a/app/src/main/java/com/sopetit/softie/domain/usecase/happyroutine/PostMemberHappyRoutineUseCase.kt +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/memberhappinessroutine/PostMemberHappyRoutineUseCase.kt @@ -1,4 +1,4 @@ -package com.sopetit.softie.domain.usecase.happyroutine +package com.sopetit.softie.domain.usecase.memberhappinessroutine import com.sopetit.softie.data.entity.request.PostMemberHappyRoutineRequest import com.sopetit.softie.domain.repository.MemberHappinessRoutineRepository diff --git a/app/src/main/java/com/sopetit/softie/domain/usecase/version/GetUpdateVersionUseCase.kt b/app/src/main/java/com/sopetit/softie/domain/usecase/version/GetUpdateVersionUseCase.kt new file mode 100644 index 00000000..93fc72a5 --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/domain/usecase/version/GetUpdateVersionUseCase.kt @@ -0,0 +1,11 @@ +package com.sopetit.softie.domain.usecase.version + +import com.sopetit.softie.domain.repository.VersionRepository +import javax.inject.Inject + +class GetUpdateVersionUseCase @Inject constructor( + private val versionRepository: VersionRepository +) { + suspend operator fun invoke() = + versionRepository.getUpdateVersion() +} diff --git a/app/src/main/java/com/sopetit/softie/ui/dailyroutine/DailyRoutineViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/dailyroutine/DailyRoutineViewModel.kt index 1d0a49f3..a6cc3ef1 100644 --- a/app/src/main/java/com/sopetit/softie/ui/dailyroutine/DailyRoutineViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/dailyroutine/DailyRoutineViewModel.kt @@ -6,9 +6,9 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.sopetit.softie.domain.entity.DailyRoutine import com.sopetit.softie.domain.entity.UserDailyRoutine -import com.sopetit.softie.domain.usecase.DeleteDailyRoutineUseCase -import com.sopetit.softie.domain.usecase.GetDailyRoutineUseCase -import com.sopetit.softie.domain.usecase.PatchAchieveDailyUseCase +import com.sopetit.softie.domain.usecase.memberdailyroutine.DeleteDailyRoutineUseCase +import com.sopetit.softie.domain.usecase.memberdailyroutine.GetDailyRoutineUseCase +import com.sopetit.softie.domain.usecase.memberdailyroutine.PatchAchieveDailyUseCase import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import timber.log.Timber diff --git a/app/src/main/java/com/sopetit/softie/ui/dailyroutine/complete/DailyRoutineCompleteViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/dailyroutine/complete/DailyRoutineCompleteViewModel.kt index 9d1243a7..098babac 100644 --- a/app/src/main/java/com/sopetit/softie/ui/dailyroutine/complete/DailyRoutineCompleteViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/dailyroutine/complete/DailyRoutineCompleteViewModel.kt @@ -1,7 +1,7 @@ package com.sopetit.softie.ui.dailyroutine.complete import androidx.lifecycle.ViewModel -import com.sopetit.softie.domain.usecase.GetBearTypeUseCase +import com.sopetit.softie.domain.usecase.local.GetBearTypeUseCase import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/ui/dailyroutine/dailyroutineadd/DailyRoutineAddViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/dailyroutine/dailyroutineadd/DailyRoutineAddViewModel.kt index 221df7bd..6ceac90e 100644 --- a/app/src/main/java/com/sopetit/softie/ui/dailyroutine/dailyroutineadd/DailyRoutineAddViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/dailyroutine/dailyroutineadd/DailyRoutineAddViewModel.kt @@ -7,9 +7,9 @@ import androidx.lifecycle.viewModelScope import com.sopetit.softie.data.entity.request.AddDailyRoutineRequest import com.sopetit.softie.domain.entity.DailyCard import com.sopetit.softie.domain.entity.Theme -import com.sopetit.softie.domain.usecase.GetRoutineDailyThemeListUseCase -import com.sopetit.softie.domain.usecase.PostAddDailyRoutineUseCase +import com.sopetit.softie.domain.usecase.dailyroutine.GetRoutineDailyThemeListUseCase import com.sopetit.softie.domain.usecase.dailyroutine.GetThemeListUseCase +import com.sopetit.softie.domain.usecase.memberdailyroutine.PostAddDailyRoutineUseCase import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import timber.log.Timber diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineViewModel.kt index a4558497..2abf6817 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/HappyMyRoutineViewModel.kt @@ -5,11 +5,11 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.sopetit.softie.domain.entity.HappyProgress -import com.sopetit.softie.domain.usecase.DeleteMemberHappyRoutineUseCase -import com.sopetit.softie.domain.usecase.GetBearTypeUseCase import com.sopetit.softie.domain.usecase.doll.GetDollUseCase -import com.sopetit.softie.domain.usecase.happyroutine.GetHappyProgressUseCase -import com.sopetit.softie.domain.usecase.happyroutine.PatchMemberHappinessAchieveUseCase +import com.sopetit.softie.domain.usecase.local.GetBearTypeUseCase +import com.sopetit.softie.domain.usecase.memberhappinessroutine.DeleteMemberHappyRoutineUseCase +import com.sopetit.softie.domain.usecase.memberhappinessroutine.GetHappyProgressUseCase +import com.sopetit.softie.domain.usecase.memberhappinessroutine.PatchMemberHappinessAchieveUseCase import com.sopetit.softie.ui.onboarding.OnboardingViewModel import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/complete/HappyRoutineCompleteViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/complete/HappyRoutineCompleteViewModel.kt index dcba56f1..8e6a42b5 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/complete/HappyRoutineCompleteViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/complete/HappyRoutineCompleteViewModel.kt @@ -1,7 +1,7 @@ package com.sopetit.softie.ui.happyroutine.complete import androidx.lifecycle.ViewModel -import com.sopetit.softie.domain.usecase.GetBearTypeUseCase +import com.sopetit.softie.domain.usecase.local.GetBearTypeUseCase import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/ui/happyroutine/detail/HappyDetailCardViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/happyroutine/detail/HappyDetailCardViewModel.kt index 1a2891a4..db314a90 100644 --- a/app/src/main/java/com/sopetit/softie/ui/happyroutine/detail/HappyDetailCardViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/happyroutine/detail/HappyDetailCardViewModel.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.viewModelScope import com.sopetit.softie.data.entity.request.PostMemberHappyRoutineRequest import com.sopetit.softie.domain.entity.HappyCard import com.sopetit.softie.domain.usecase.happyroutine.GetHappyCardUseCase -import com.sopetit.softie.domain.usecase.happyroutine.PostMemberHappyRoutineUseCase +import com.sopetit.softie.domain.usecase.memberhappinessroutine.PostMemberHappyRoutineUseCase import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import timber.log.Timber diff --git a/app/src/main/java/com/sopetit/softie/ui/login/LoginViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/login/LoginViewModel.kt index ed6d4c32..5ef578eb 100644 --- a/app/src/main/java/com/sopetit/softie/ui/login/LoginViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/login/LoginViewModel.kt @@ -5,8 +5,8 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.kakao.sdk.auth.model.OAuthToken -import com.sopetit.softie.domain.usecase.InitTokenUseCase -import com.sopetit.softie.domain.usecase.PostLoginUseCase +import com.sopetit.softie.domain.usecase.auth.PostLoginUseCase +import com.sopetit.softie.domain.usecase.local.InitTokenUseCase import com.sopetit.softie.util.KakaoLoginCallback import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/sopetit/softie/ui/main/home/HomeViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/main/home/HomeViewModel.kt index 0f3ce3b1..4576de19 100644 --- a/app/src/main/java/com/sopetit/softie/ui/main/home/HomeViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/main/home/HomeViewModel.kt @@ -6,10 +6,10 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.sopetit.softie.domain.entity.Cotton import com.sopetit.softie.domain.entity.Home -import com.sopetit.softie.domain.usecase.GetBearTypeUseCase -import com.sopetit.softie.domain.usecase.GetHomeUseCase -import com.sopetit.softie.domain.usecase.PatchCottonUseCase -import com.sopetit.softie.domain.usecase.member.SetBearTypeUseCase +import com.sopetit.softie.domain.usecase.local.GetBearTypeUseCase +import com.sopetit.softie.domain.usecase.local.SetBearTypeUseCase +import com.sopetit.softie.domain.usecase.member.GetHomeUseCase +import com.sopetit.softie.domain.usecase.member.PatchCottonUseCase import com.sopetit.softie.ui.main.home.HomeFragment.Companion.RUN_OUT import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch diff --git a/app/src/main/java/com/sopetit/softie/ui/onboarding/bearselection/BearSelectionViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/onboarding/bearselection/BearSelectionViewModel.kt index 66633432..76a366cf 100644 --- a/app/src/main/java/com/sopetit/softie/ui/onboarding/bearselection/BearSelectionViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/onboarding/bearselection/BearSelectionViewModel.kt @@ -3,7 +3,7 @@ package com.sopetit.softie.ui.onboarding.bearselection import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.sopetit.softie.domain.usecase.member.SetBearTypeUseCase +import com.sopetit.softie.domain.usecase.local.SetBearTypeUseCase import com.sopetit.softie.ui.onboarding.OnboardingViewModel.Companion.NONE import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject diff --git a/app/src/main/java/com/sopetit/softie/ui/onboarding/routinechoice/RoutineChoiceViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/onboarding/routinechoice/RoutineChoiceViewModel.kt index 8b50f0c7..2e8ed18a 100644 --- a/app/src/main/java/com/sopetit/softie/ui/onboarding/routinechoice/RoutineChoiceViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/onboarding/routinechoice/RoutineChoiceViewModel.kt @@ -6,8 +6,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.sopetit.softie.data.entity.request.PostMemberRequest import com.sopetit.softie.domain.entity.Routine -import com.sopetit.softie.domain.usecase.InitSIgnUpStateUseCase import com.sopetit.softie.domain.usecase.dailyroutine.GetRoutineListUseCase +import com.sopetit.softie.domain.usecase.local.InitSIgnUpStateUseCase import com.sopetit.softie.domain.usecase.member.PostMemberUseCase import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch @@ -61,7 +61,9 @@ class RoutineChoiceViewModel @Inject constructor( viewModelScope.launch { postMemberUseCase.invoke( PostMemberRequest( - dollType, name, routines + dollType, + name, + routines ) ).onSuccess { _isPostNewMember.value = true diff --git a/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/SplashActivity.kt b/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/SplashActivity.kt index 2d2acfb8..e651c273 100644 --- a/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/SplashActivity.kt +++ b/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/SplashActivity.kt @@ -9,6 +9,7 @@ import androidx.activity.viewModels import androidx.core.content.ContextCompat import com.sopetit.softie.R import com.sopetit.softie.databinding.ActivitySplashBinding +import com.sopetit.softie.domain.entity.UpdateType import com.sopetit.softie.ui.login.LoginActivity import com.sopetit.softie.ui.main.MainActivity import com.sopetit.softie.util.binding.BindingActivity @@ -17,14 +18,17 @@ import dagger.hilt.android.AndroidEntryPoint import kotlin.random.Random @AndroidEntryPoint -class SplashActivity : BindingActivity(R.layout.activity_splash) { - +class SplashActivity : + BindingActivity(R.layout.activity_splash), + UpdateRecommendDialogInterface, + UpdateForceDialogInterface { private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) initCreateRandomVersion() + initUpdateTypeObserver() } private fun initCreateRandomVersion() { @@ -62,22 +66,61 @@ class SplashActivity : BindingActivity(R.layout.activity_ private fun makeSplashImg(image: Int) { binding.ivSplashBackground.setBackgroundResource(image) - initMakeSplash() } - private fun initMakeSplash() { - lateinit var intent: Intent + private fun initUpdateTypeObserver() { + viewModel.updateVersion.observe(this) { + handleUpdateType() + } + } + + private fun handleUpdateType() { Handler(Looper.getMainLooper()).postDelayed({ - intent = if (viewModel.isSignedUp()) { - Intent(this, MainActivity::class.java) - } else { - Intent(this, LoginActivity::class.java) + when (viewModel.isUpdate.value) { + UpdateType.NONE -> startApp() + UpdateType.FORCE -> showForceUpdateDialog() + UpdateType.RECOMMEND -> showRecommendUpdateDialog() + else -> {} } - startActivity(intent) - finish() }, SPLASH_DELAY) } + private fun showForceUpdateDialog() { + val forceUpdateDialog = UpdateForceDialogFragment( + this, + viewModel.updateVersion.value?.notificationTitle + ?: getString(R.string.dialog_update_title), + viewModel.updateVersion.value?.notificationContent + ?: getString(R.string.dialog_update_content) + ) + forceUpdateDialog.show(this.supportFragmentManager, forceUpdateDialog.tag) + } + + private fun showRecommendUpdateDialog() { + val recommendUpdateDialog = UpdateRecommendDialogFragment( + this, + viewModel.updateVersion.value?.notificationTitle + ?: getString(R.string.dialog_update_title), + viewModel.updateVersion.value?.notificationContent + ?: getString(R.string.dialog_update_content) + ) + recommendUpdateDialog.show(this.supportFragmentManager, recommendUpdateDialog.tag) + } + + override fun startApp() { + val intent: Intent = if (viewModel.isSignedUp()) { + Intent(this, MainActivity::class.java) + } else { + Intent(this, LoginActivity::class.java) + } + startActivity(intent) + finish() + } + + override fun finishApp() { + finish() + } + companion object { const val SPLASH_DELAY = 2000L } diff --git a/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/SplashViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/SplashViewModel.kt index 21f6a068..05b15e30 100644 --- a/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/SplashViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/SplashViewModel.kt @@ -1,13 +1,80 @@ package com.sopetit.softie.ui.onboarding.splash +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.sopetit.softie.domain.usecase.GetSignedUpUseCase +import androidx.lifecycle.viewModelScope +import com.sopetit.softie.BuildConfig +import com.sopetit.softie.domain.entity.UpdateType +import com.sopetit.softie.domain.entity.UpdateVersion +import com.sopetit.softie.domain.usecase.local.GetSignedUpUseCase +import com.sopetit.softie.domain.usecase.version.GetUpdateVersionUseCase import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.launch +import timber.log.Timber import javax.inject.Inject +import kotlin.math.pow @HiltViewModel class SplashViewModel @Inject constructor( - private val getSignedUpUseCase: GetSignedUpUseCase + private val getSignedUpUseCase: GetSignedUpUseCase, + private val getUpdateVersionUseCase: GetUpdateVersionUseCase ) : ViewModel() { + private val versionName: String = BuildConfig.VERSION_NAME + private val _isUpdate: MutableLiveData = MutableLiveData() + val isUpdate: LiveData get() = _isUpdate + private val _updateVersion: MutableLiveData = MutableLiveData() + val updateVersion: LiveData get() = _updateVersion fun isSignedUp(): Boolean = getSignedUpUseCase() + + init { + getUpdateVersion() + } + + private fun getUpdateVersion() { + viewModelScope.launch { + getUpdateVersionUseCase() + .onSuccess { response -> + _updateVersion.value = response + isForceUpdate() + } + .onFailure { throwable -> + Timber.e("$throwable") + } + } + } + + private fun isForceUpdate() { + val storeAppVersionNum = + versionStringToNumber(_updateVersion.value?.storeAppVersion ?: MAXIMUM_STORE_VERSION) + val forceAppVersionNum = + versionStringToNumber(_updateVersion.value?.forceAppVersion ?: MAXIMUM_FORCE_VERSION) + val versionNameNum = versionStringToNumber(versionName) + + if (storeAppVersionNum > forceAppVersionNum) { + if (versionNameNum < forceAppVersionNum) _isUpdate.value = UpdateType.FORCE + else if (versionNameNum == storeAppVersionNum) _isUpdate.value = UpdateType.NONE + else _isUpdate.value = UpdateType.RECOMMEND + } else { + _isUpdate.value = UpdateType.NONE + } + } + + private fun versionStringToNumber(version: String): Int { + val versionNumbers = version.split(".").map { it.toInt() } + var result = 0 + + for (i in versionNumbers.indices) { + result += versionNumbers[i] * BASE_POWER.pow((versionNumbers.size - i - 1)) + .toInt() + } + + return result + } + + companion object { + private const val BASE_POWER = 10.0 + private const val MAXIMUM_STORE_VERSION = "999.9.9" + private const val MAXIMUM_FORCE_VERSION = "999.0.0" + } } diff --git a/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/UpdateForceDialogFragment.kt b/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/UpdateForceDialogFragment.kt new file mode 100644 index 00000000..9c98508a --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/UpdateForceDialogFragment.kt @@ -0,0 +1,69 @@ +package com.sopetit.softie.ui.onboarding.splash + +import android.content.Intent +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.net.Uri +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.DialogFragment +import com.sopetit.softie.R +import com.sopetit.softie.databinding.DialogUpdateForceBinding + +class UpdateForceDialogFragment( + updateForceDialogInterface: UpdateForceDialogInterface, + val title: String, + val content: String +) : DialogFragment() { + private var _binding: DialogUpdateForceBinding? = null + private val binding get() = _binding ?: error(getString(R.string.binding_error)) + private var updateForceDialogInterface: UpdateForceDialogInterface? = null + + init { + this.updateForceDialogInterface = updateForceDialogInterface + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = DialogUpdateForceBinding.inflate(inflater, container, false) + val view = binding.root + dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + + setTextView() + setBtnClickEvent() + + return view + } + + private fun setTextView() { + binding.tvUpdateForceDialogTitle.text = title + binding.tvUpdateForceDialogContent.text = content + } + + private fun setBtnClickEvent() { + binding.btnUpdateForceDialogConfirm.setOnClickListener { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse(getString(R.string.dialog_update_store_link)) + ) + ) + dismiss() + this.updateForceDialogInterface?.finishApp() + } + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} + +interface UpdateForceDialogInterface { + fun finishApp() +} diff --git a/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/UpdateRecommendDialogFragment.kt b/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/UpdateRecommendDialogFragment.kt new file mode 100644 index 00000000..e67ef9db --- /dev/null +++ b/app/src/main/java/com/sopetit/softie/ui/onboarding/splash/UpdateRecommendDialogFragment.kt @@ -0,0 +1,82 @@ +package com.sopetit.softie.ui.onboarding.splash + +import android.content.Intent +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.net.Uri +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.DialogFragment +import com.sopetit.softie.R +import com.sopetit.softie.databinding.DialogUpdateRecommendBinding + +class UpdateRecommendDialogFragment( + updateRecommendDialogInterface: UpdateRecommendDialogInterface, + val title: String, + val content: String +) : DialogFragment() { + private var _binding: DialogUpdateRecommendBinding? = null + private val binding get() = _binding ?: error(getString(R.string.binding_error)) + private var updateRecommendDialogInterface: UpdateRecommendDialogInterface? = null + + init { + this.updateRecommendDialogInterface = updateRecommendDialogInterface + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = DialogUpdateRecommendBinding.inflate(inflater, container, false) + val view = binding.root + dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) + + setTextView() + setBtnClickEvent() + + return view + } + + private fun setTextView() { + binding.tvUpdateRecommendDialogTitle.text = title + binding.tvUpdateRecommendDialogContent.text = content + } + + private fun setBtnClickEvent() { + setClickDenyBtn() + setClickConfirmBtn() + } + + private fun setClickDenyBtn() { + binding.btnUpdateRecommendDialogCancel.setOnClickListener { + this.updateRecommendDialogInterface?.startApp() + dismiss() + } + } + + private fun setClickConfirmBtn() { + binding.btnUpdateRecommendDialogConfirm.setOnClickListener { + startActivity( + Intent( + Intent.ACTION_VIEW, + Uri.parse(getString(R.string.dialog_update_store_link)) + ) + ) + dismiss() + this.updateRecommendDialogInterface?.finishApp() + } + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} + +interface UpdateRecommendDialogInterface { + fun startApp() + fun finishApp() +} diff --git a/app/src/main/java/com/sopetit/softie/ui/setting/SettingViewModel.kt b/app/src/main/java/com/sopetit/softie/ui/setting/SettingViewModel.kt index dd50e2cc..2c8d6878 100644 --- a/app/src/main/java/com/sopetit/softie/ui/setting/SettingViewModel.kt +++ b/app/src/main/java/com/sopetit/softie/ui/setting/SettingViewModel.kt @@ -4,11 +4,11 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.sopetit.softie.domain.usecase.GetBearTypeUseCase -import com.sopetit.softie.domain.usecase.InitSIgnUpStateUseCase -import com.sopetit.softie.domain.usecase.InitTokenUseCase import com.sopetit.softie.domain.usecase.auth.DeleteAuthUseCase import com.sopetit.softie.domain.usecase.auth.LogOutUseCase +import com.sopetit.softie.domain.usecase.local.GetBearTypeUseCase +import com.sopetit.softie.domain.usecase.local.InitSIgnUpStateUseCase +import com.sopetit.softie.domain.usecase.local.InitTokenUseCase import com.sopetit.softie.ui.onboarding.OnboardingViewModel.Companion.BROWN import com.sopetit.softie.ui.onboarding.OnboardingViewModel.Companion.GRAY import com.sopetit.softie.ui.onboarding.OnboardingViewModel.Companion.RED diff --git a/app/src/main/res/drawable/shape_happyroutineblue_fill_8_rect.xml b/app/src/main/res/drawable/shape_happyroutineblue_fill_8_rect.xml new file mode 100644 index 00000000..484fd975 --- /dev/null +++ b/app/src/main/res/drawable/shape_happyroutineblue_fill_8_rect.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/app/src/main/res/layout/dialog_update_force.xml b/app/src/main/res/layout/dialog_update_force.xml new file mode 100644 index 00000000..8c1680e2 --- /dev/null +++ b/app/src/main/res/layout/dialog_update_force.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/dialog_update_recommend.xml b/app/src/main/res/layout/dialog_update_recommend.xml new file mode 100644 index 00000000..5abcbbe4 --- /dev/null +++ b/app/src/main/res/layout/dialog_update_recommend.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1fc2f0fd..c8f65d51 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -161,4 +161,13 @@ 데일리 루틴을 1개 추가했어요 언제든지 변경할 수 있어요! + + 다음에 할래요 + 업데이트 + 업데이트 하러가기 + 새로운 버전이 업데이트 되었어요! + 안정적인 서비스 사용을 위해\n최신버전으로 업데이트해주세요. + Binding not initialized to reference the view. + https://softie-link.notion.site/675961135bbf436d82a33065c91a61b6 +