From e6439fb5d299b7ebd1fcf9207bfadd71a7be3c3a Mon Sep 17 00:00:00 2001 From: Jokwanhee Date: Fri, 17 Nov 2023 10:50:50 +0900 Subject: [PATCH 1/3] [mod/#12] package name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 패키지이름 org.sopt.dosoptkwanheejo 로변경 --- app/build.gradle | 2 +- .../ExampleInstrumentedTest.kt | 2 +- .../DoSoptApp.kt | 8 ++-- .../adapter/user/UserAdapter.kt | 6 +-- .../adapter/user/UserViewHolder.kt | 9 ++-- .../api/AuthAPI.kt | 8 ++-- .../api/UserAPI.kt | 4 +- .../base/BaseActivity.kt | 3 +- .../base/BaseDialogFragment.kt | 6 +-- .../base/BaseFragment.kt | 2 +- .../db/local/PreferenceManager.kt | 5 +-- .../db/remote/AuthApiHelper.kt | 20 ++++----- .../db/remote/RetrofitManager.kt | 12 +++--- .../db/remote/UserApiHelper.kt | 8 ++-- .../model/HomeBottomItem.kt | 2 +- .../model/Music.kt | 2 +- .../model/User.kt | 4 +- .../model/dto/RespResult.kt | 2 +- .../model/dto/req/LoginReq.kt | 2 +- .../model/dto/req/SignUpReq.kt | 2 +- .../model/dto/resp/auth/LoginResp.kt | 4 +- .../model/dto/resp/auth/SignUpResp.kt | 2 +- .../model/dto/resp/user/UserDataResp.kt | 2 +- .../model/dto/resp/user/UserResp.kt | 2 +- .../model/dto/resp/user/UserSupportResp.kt | 2 +- .../presentation/detail/HomeDetailActivity.kt | 6 +-- .../presentation/home/AndroidFragment.kt | 8 ++-- .../presentation/home/HomeActivity.kt | 20 ++++----- .../presentation/home/HomeFragment.kt | 18 ++++---- .../presentation/home/MyPageFragment.kt | 17 ++++---- .../home/dialog/HomeAddDialogFragment.kt | 12 +++--- .../home/dialog/HomeRemoveDialogFragment.kt | 8 ++-- .../home/viewmodel/HomeViewModel.kt | 8 ++-- .../presentation/login/LoginActivity.kt | 42 +++++++++---------- .../login/viewmodel/LoginViewModel.kt | 6 +-- .../presentation/signup/SignUpActivity.kt | 30 ++++++------- .../signup/viewmodel/SignUpViewModel.kt | 6 +-- .../repository/AuthRepository.kt | 8 ++-- .../repository/UserRepository.kt | 8 ++++ .../util/Extensions.kt | 6 +-- .../util/MBTI.kt | 2 +- .../util/Mapper.kt | 2 +- .../util/SampleList.kt | 5 +-- .../util/ViewModelProvider.kt | 6 +-- .../view/SoptEditView.kt | 6 +-- .../view/SoptNumberPicker.kt | 7 ++-- .../repository/UserRepository.kt | 11 ----- app/src/main/res/layout/activity_login.xml | 4 +- app/src/main/res/layout/activity_sign_up.xml | 8 ++-- .../res/layout/dialog_fragment_home_add.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- .../ExampleUnitTest.kt | 2 +- 52 files changed, 182 insertions(+), 199 deletions(-) rename app/src/androidTest/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/ExampleInstrumentedTest.kt (95%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/DoSoptApp.kt (86%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/adapter/user/UserAdapter.kt (85%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/adapter/user/UserViewHolder.kt (57%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/api/AuthAPI.kt (59%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/api/UserAPI.kt (66%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/base/BaseActivity.kt (86%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/base/BaseDialogFragment.kt (83%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/base/BaseFragment.kt (95%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/db/local/PreferenceManager.kt (84%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/db/remote/AuthApiHelper.kt (80%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/db/remote/RetrofitManager.kt (83%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/db/remote/UserApiHelper.kt (78%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/HomeBottomItem.kt (58%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/Music.kt (76%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/User.kt (70%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/dto/RespResult.kt (80%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/dto/req/LoginReq.kt (82%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/dto/req/SignUpReq.kt (85%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/dto/resp/auth/LoginResp.kt (72%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/dto/resp/auth/SignUpResp.kt (72%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/dto/resp/user/UserDataResp.kt (88%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/dto/resp/user/UserResp.kt (90%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/model/dto/resp/user/UserSupportResp.kt (81%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/detail/HomeDetailActivity.kt (64%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/home/AndroidFragment.kt (68%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/home/HomeActivity.kt (86%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/home/HomeFragment.kt (75%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/home/MyPageFragment.kt (62%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/home/dialog/HomeAddDialogFragment.kt (81%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/home/dialog/HomeRemoveDialogFragment.kt (78%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/home/viewmodel/HomeViewModel.kt (77%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/login/LoginActivity.kt (74%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/login/viewmodel/LoginViewModel.kt (77%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/signup/SignUpActivity.kt (70%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/presentation/signup/viewmodel/SignUpViewModel.kt (77%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/repository/AuthRepository.kt (65%) create mode 100644 app/src/main/java/org/sopt/dosoptkwanheejo/repository/UserRepository.kt rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/util/Extensions.kt (92%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/util/MBTI.kt (77%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/util/Mapper.kt (93%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/util/SampleList.kt (97%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/util/ViewModelProvider.kt (80%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/view/SoptEditView.kt (92%) rename app/src/main/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/view/SoptNumberPicker.kt (92%) delete mode 100644 app/src/main/java/org/sopt/dosopttemplate/repository/UserRepository.kt rename app/src/test/java/org/sopt/{dosopttemplate => dosoptkwanheejo}/ExampleUnitTest.kt (90%) diff --git a/app/build.gradle b/app/build.gradle index af2b285..6fd5f68 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) android { - namespace 'org.sopt.dosopttemplate' + namespace 'org.sopt.dosoptkwanheejo' compileSdk 33 defaultConfig { diff --git a/app/src/androidTest/java/org/sopt/dosopttemplate/ExampleInstrumentedTest.kt b/app/src/androidTest/java/org/sopt/dosoptkwanheejo/ExampleInstrumentedTest.kt similarity index 95% rename from app/src/androidTest/java/org/sopt/dosopttemplate/ExampleInstrumentedTest.kt rename to app/src/androidTest/java/org/sopt/dosoptkwanheejo/ExampleInstrumentedTest.kt index fd07425..0d5cb57 100644 --- a/app/src/androidTest/java/org/sopt/dosopttemplate/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/org/sopt/dosoptkwanheejo/ExampleInstrumentedTest.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate +package org.sopt.dosoptkwanheejo import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 diff --git a/app/src/main/java/org/sopt/dosopttemplate/DoSoptApp.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/DoSoptApp.kt similarity index 86% rename from app/src/main/java/org/sopt/dosopttemplate/DoSoptApp.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/DoSoptApp.kt index 3bfe5fa..67323da 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/DoSoptApp.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/DoSoptApp.kt @@ -1,11 +1,11 @@ -package org.sopt.dosopttemplate +package org.sopt.dosoptkwanheejo import android.app.Application import android.content.Context import android.content.SharedPreferences -import org.sopt.dosopttemplate.db.remote.AuthApiHelper -import org.sopt.dosopttemplate.db.remote.RetrofitServicePool -import org.sopt.dosopttemplate.db.remote.UserApiHelper +import org.sopt.dosoptkwanheejo.db.remote.AuthApiHelper +import org.sopt.dosoptkwanheejo.db.remote.RetrofitServicePool +import org.sopt.dosoptkwanheejo.db.remote.UserApiHelper class DoSoptApp : Application() { override fun onCreate() { diff --git a/app/src/main/java/org/sopt/dosopttemplate/adapter/user/UserAdapter.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/adapter/user/UserAdapter.kt similarity index 85% rename from app/src/main/java/org/sopt/dosopttemplate/adapter/user/UserAdapter.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/adapter/user/UserAdapter.kt index 756d8dd..6df4e11 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/adapter/user/UserAdapter.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/adapter/user/UserAdapter.kt @@ -1,11 +1,11 @@ -package org.sopt.dosopttemplate.adapter.user +package org.sopt.dosoptkwanheejo.adapter.user import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter -import org.sopt.dosopttemplate.databinding.ItemUserBinding -import org.sopt.dosopttemplate.model.dto.resp.user.UserDataResp +import org.sopt.dosoptkwanheejo.databinding.ItemUserBinding +import org.sopt.dosoptkwanheejo.model.dto.resp.user.UserDataResp class UserAdapter : ListAdapter(diffUtil) { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder { diff --git a/app/src/main/java/org/sopt/dosopttemplate/adapter/user/UserViewHolder.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/adapter/user/UserViewHolder.kt similarity index 57% rename from app/src/main/java/org/sopt/dosopttemplate/adapter/user/UserViewHolder.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/adapter/user/UserViewHolder.kt index 4e39375..8e5c84e 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/adapter/user/UserViewHolder.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/adapter/user/UserViewHolder.kt @@ -1,10 +1,9 @@ -package org.sopt.dosopttemplate.adapter.user +package org.sopt.dosoptkwanheejo.adapter.user import androidx.recyclerview.widget.RecyclerView -import org.sopt.dosopttemplate.databinding.ItemUserBinding -import org.sopt.dosopttemplate.model.dto.resp.user.UserDataResp -import org.sopt.dosopttemplate.util.loadUrl -import org.sopt.dosopttemplate.util.roundedCornerGlide +import org.sopt.dosoptkwanheejo.databinding.ItemUserBinding +import org.sopt.dosoptkwanheejo.model.dto.resp.user.UserDataResp +import org.sopt.dosoptkwanheejo.util.loadUrl class UserViewHolder( private val binding: ItemUserBinding diff --git a/app/src/main/java/org/sopt/dosopttemplate/api/AuthAPI.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/api/AuthAPI.kt similarity index 59% rename from app/src/main/java/org/sopt/dosopttemplate/api/AuthAPI.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/api/AuthAPI.kt index 866c500..19a1628 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/api/AuthAPI.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/api/AuthAPI.kt @@ -1,8 +1,8 @@ -package org.sopt.dosopttemplate.api +package org.sopt.dosoptkwanheejo.api -import org.sopt.dosopttemplate.model.dto.req.LoginReq -import org.sopt.dosopttemplate.model.dto.req.SignUpReq -import org.sopt.dosopttemplate.model.dto.resp.auth.LoginResp +import org.sopt.dosoptkwanheejo.model.dto.req.LoginReq +import org.sopt.dosoptkwanheejo.model.dto.req.SignUpReq +import org.sopt.dosoptkwanheejo.model.dto.resp.auth.LoginResp import retrofit2.Call import retrofit2.http.Body import retrofit2.http.POST diff --git a/app/src/main/java/org/sopt/dosopttemplate/api/UserAPI.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/api/UserAPI.kt similarity index 66% rename from app/src/main/java/org/sopt/dosopttemplate/api/UserAPI.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/api/UserAPI.kt index 3646eee..31a5aa8 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/api/UserAPI.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/api/UserAPI.kt @@ -1,6 +1,6 @@ -package org.sopt.dosopttemplate.api +package org.sopt.dosoptkwanheejo.api -import org.sopt.dosopttemplate.model.dto.resp.user.UserResp +import org.sopt.dosoptkwanheejo.model.dto.resp.user.UserResp import retrofit2.Call import retrofit2.http.GET import retrofit2.http.Query diff --git a/app/src/main/java/org/sopt/dosopttemplate/base/BaseActivity.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/base/BaseActivity.kt similarity index 86% rename from app/src/main/java/org/sopt/dosopttemplate/base/BaseActivity.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/base/BaseActivity.kt index f6867b4..cd49374 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/base/BaseActivity.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/base/BaseActivity.kt @@ -1,10 +1,9 @@ -package org.sopt.dosopttemplate.base +package org.sopt.dosoptkwanheejo.base import android.os.Bundle import android.view.LayoutInflater import androidx.appcompat.app.AppCompatActivity import androidx.viewbinding.ViewBinding -import com.google.android.material.snackbar.Snackbar abstract class BaseActivity(val bindingFactory: (LayoutInflater) -> T) : AppCompatActivity() { diff --git a/app/src/main/java/org/sopt/dosopttemplate/base/BaseDialogFragment.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/base/BaseDialogFragment.kt similarity index 83% rename from app/src/main/java/org/sopt/dosopttemplate/base/BaseDialogFragment.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/base/BaseDialogFragment.kt index db1dd87..aadc56d 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/base/BaseDialogFragment.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/base/BaseDialogFragment.kt @@ -1,17 +1,13 @@ -package org.sopt.dosopttemplate.base +package org.sopt.dosoptkwanheejo.base -import android.content.DialogInterface import android.os.Bundle -import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.Window import androidx.annotation.LayoutRes import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import androidx.fragment.app.DialogFragment -import org.sopt.dosopttemplate.util.showShortSnackBar abstract class BaseDialogFragment : DialogFragment() { @get:LayoutRes diff --git a/app/src/main/java/org/sopt/dosopttemplate/base/BaseFragment.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/base/BaseFragment.kt similarity index 95% rename from app/src/main/java/org/sopt/dosopttemplate/base/BaseFragment.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/base/BaseFragment.kt index b05a4e2..9f6d7b3 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/base/BaseFragment.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/base/BaseFragment.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.base +package org.sopt.dosoptkwanheejo.base import android.os.Bundle import android.view.LayoutInflater diff --git a/app/src/main/java/org/sopt/dosopttemplate/db/local/PreferenceManager.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/db/local/PreferenceManager.kt similarity index 84% rename from app/src/main/java/org/sopt/dosopttemplate/db/local/PreferenceManager.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/db/local/PreferenceManager.kt index 50a1314..b4a1fdf 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/db/local/PreferenceManager.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/db/local/PreferenceManager.kt @@ -1,8 +1,7 @@ -package org.sopt.dosopttemplate.db.local +package org.sopt.dosoptkwanheejo.db.local import androidx.core.content.edit -import org.sopt.dosopttemplate.DoSoptApp.Companion.sharedPreferencesInstance -import org.sopt.dosopttemplate.model.User +import org.sopt.dosoptkwanheejo.DoSoptApp.Companion.sharedPreferencesInstance class PreferenceManager { fun setAutoLogin(auto: Boolean) { diff --git a/app/src/main/java/org/sopt/dosopttemplate/db/remote/AuthApiHelper.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/AuthApiHelper.kt similarity index 80% rename from app/src/main/java/org/sopt/dosopttemplate/db/remote/AuthApiHelper.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/AuthApiHelper.kt index 4e4683c..4273fe0 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/db/remote/AuthApiHelper.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/AuthApiHelper.kt @@ -1,14 +1,14 @@ -package org.sopt.dosopttemplate.db.remote +package org.sopt.dosoptkwanheejo.db.remote -import org.sopt.dosopttemplate.api.AuthAPI -import org.sopt.dosopttemplate.db.local.PreferenceManager -import org.sopt.dosopttemplate.db.remote.RetrofitManager.BASE_URL -import org.sopt.dosopttemplate.model.dto.RespResult -import org.sopt.dosopttemplate.model.dto.req.LoginReq -import org.sopt.dosopttemplate.model.dto.req.SignUpReq -import org.sopt.dosopttemplate.model.dto.resp.auth.LoginResp -import org.sopt.dosopttemplate.model.dto.resp.auth.SignUpResp -import org.sopt.dosopttemplate.util.toErrorResult +import org.sopt.dosoptkwanheejo.api.AuthAPI +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager +import org.sopt.dosoptkwanheejo.db.remote.RetrofitManager.BASE_URL +import org.sopt.dosoptkwanheejo.model.dto.RespResult +import org.sopt.dosoptkwanheejo.model.dto.req.LoginReq +import org.sopt.dosoptkwanheejo.model.dto.req.SignUpReq +import org.sopt.dosoptkwanheejo.model.dto.resp.auth.LoginResp +import org.sopt.dosoptkwanheejo.model.dto.resp.auth.SignUpResp +import org.sopt.dosoptkwanheejo.util.toErrorResult import retrofit2.Call import retrofit2.Response diff --git a/app/src/main/java/org/sopt/dosopttemplate/db/remote/RetrofitManager.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/RetrofitManager.kt similarity index 83% rename from app/src/main/java/org/sopt/dosopttemplate/db/remote/RetrofitManager.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/RetrofitManager.kt index a995876..152b816 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/db/remote/RetrofitManager.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/RetrofitManager.kt @@ -1,15 +1,15 @@ -package org.sopt.dosopttemplate.db.remote +package org.sopt.dosoptkwanheejo.db.remote import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor -import org.sopt.dosopttemplate.BuildConfig -import org.sopt.dosopttemplate.BuildConfig.BASE_URL -import org.sopt.dosopttemplate.api.AuthAPI -import org.sopt.dosopttemplate.api.UserAPI -import org.sopt.dosopttemplate.db.remote.RetrofitManager.USER_BASE_URL +import org.sopt.dosoptkwanheejo.BuildConfig +import org.sopt.dosoptkwanheejo.BuildConfig.BASE_URL +import org.sopt.dosoptkwanheejo.api.AuthAPI +import org.sopt.dosoptkwanheejo.api.UserAPI +import org.sopt.dosoptkwanheejo.db.remote.RetrofitManager.USER_BASE_URL import retrofit2.Retrofit object RetrofitManager { diff --git a/app/src/main/java/org/sopt/dosopttemplate/db/remote/UserApiHelper.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/UserApiHelper.kt similarity index 78% rename from app/src/main/java/org/sopt/dosopttemplate/db/remote/UserApiHelper.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/UserApiHelper.kt index 44891c0..3279860 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/db/remote/UserApiHelper.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/UserApiHelper.kt @@ -1,9 +1,7 @@ -package org.sopt.dosopttemplate.db.remote +package org.sopt.dosoptkwanheejo.db.remote -import android.util.Log -import org.sopt.dosopttemplate.api.AuthAPI -import org.sopt.dosopttemplate.api.UserAPI -import org.sopt.dosopttemplate.model.dto.resp.user.UserResp +import org.sopt.dosoptkwanheejo.api.UserAPI +import org.sopt.dosoptkwanheejo.model.dto.resp.user.UserResp import retrofit2.Call import retrofit2.Response diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/HomeBottomItem.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/HomeBottomItem.kt similarity index 58% rename from app/src/main/java/org/sopt/dosopttemplate/model/HomeBottomItem.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/HomeBottomItem.kt index 6c6cc40..6af6169 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/HomeBottomItem.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/HomeBottomItem.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.model +package org.sopt.dosoptkwanheejo.model enum class HomeBottomItem { ANDROID, HOME, MYPAGE diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/Music.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/Music.kt similarity index 76% rename from app/src/main/java/org/sopt/dosopttemplate/model/Music.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/Music.kt index 263e98f..c2b8f45 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/Music.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/Music.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.model +package org.sopt.dosoptkwanheejo.model data class Music( diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/User.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/User.kt similarity index 70% rename from app/src/main/java/org/sopt/dosopttemplate/model/User.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/User.kt index 17eefe3..714438d 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/User.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/User.kt @@ -1,8 +1,8 @@ -package org.sopt.dosopttemplate.model +package org.sopt.dosoptkwanheejo.model import android.os.Parcelable import kotlinx.parcelize.Parcelize -import org.sopt.dosopttemplate.util.MBTI +import org.sopt.dosoptkwanheejo.util.MBTI @Parcelize data class User( diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/dto/RespResult.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/RespResult.kt similarity index 80% rename from app/src/main/java/org/sopt/dosopttemplate/model/dto/RespResult.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/RespResult.kt index 3769141..c4efeaf 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/dto/RespResult.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/RespResult.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.model.dto +package org.sopt.dosoptkwanheejo.model.dto import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/dto/req/LoginReq.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/req/LoginReq.kt similarity index 82% rename from app/src/main/java/org/sopt/dosopttemplate/model/dto/req/LoginReq.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/req/LoginReq.kt index 6faac1c..fda14bc 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/dto/req/LoginReq.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/req/LoginReq.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.model.dto.req +package org.sopt.dosoptkwanheejo.model.dto.req import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/dto/req/SignUpReq.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/req/SignUpReq.kt similarity index 85% rename from app/src/main/java/org/sopt/dosopttemplate/model/dto/req/SignUpReq.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/req/SignUpReq.kt index 2b2c4f1..fb9b832 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/dto/req/SignUpReq.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/req/SignUpReq.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.model.dto.req +package org.sopt.dosoptkwanheejo.model.dto.req import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/auth/LoginResp.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/auth/LoginResp.kt similarity index 72% rename from app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/auth/LoginResp.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/auth/LoginResp.kt index f265dff..a5cfc05 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/auth/LoginResp.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/auth/LoginResp.kt @@ -1,8 +1,8 @@ -package org.sopt.dosopttemplate.model.dto.resp.auth +package org.sopt.dosoptkwanheejo.model.dto.resp.auth import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import org.sopt.dosopttemplate.model.dto.RespResult +import org.sopt.dosoptkwanheejo.model.dto.RespResult @Serializable data class LoginResp( diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/auth/SignUpResp.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/auth/SignUpResp.kt similarity index 72% rename from app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/auth/SignUpResp.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/auth/SignUpResp.kt index 2b55068..afd306f 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/auth/SignUpResp.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/auth/SignUpResp.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.model.dto.resp.auth +package org.sopt.dosoptkwanheejo.model.dto.resp.auth sealed class SignUpResp { data class Success(val location: String): SignUpResp() diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/user/UserDataResp.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/user/UserDataResp.kt similarity index 88% rename from app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/user/UserDataResp.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/user/UserDataResp.kt index 1dd1170..2ed67e0 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/user/UserDataResp.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/user/UserDataResp.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.model.dto.resp.user +package org.sopt.dosoptkwanheejo.model.dto.resp.user import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/user/UserResp.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/user/UserResp.kt similarity index 90% rename from app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/user/UserResp.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/user/UserResp.kt index 5bb57e3..0416c9f 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/user/UserResp.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/user/UserResp.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.model.dto.resp.user +package org.sopt.dosoptkwanheejo.model.dto.resp.user import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/user/UserSupportResp.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/user/UserSupportResp.kt similarity index 81% rename from app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/user/UserSupportResp.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/user/UserSupportResp.kt index fe94175..c2c4c37 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/model/dto/resp/user/UserSupportResp.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/user/UserSupportResp.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.model.dto.resp.user +package org.sopt.dosoptkwanheejo.model.dto.resp.user import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/detail/HomeDetailActivity.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/detail/HomeDetailActivity.kt similarity index 64% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/detail/HomeDetailActivity.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/detail/HomeDetailActivity.kt index 8fe434b..9570f69 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/detail/HomeDetailActivity.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/detail/HomeDetailActivity.kt @@ -1,7 +1,7 @@ -package org.sopt.dosopttemplate.presentation.detail +package org.sopt.dosoptkwanheejo.presentation.detail -import org.sopt.dosopttemplate.base.BaseActivity -import org.sopt.dosopttemplate.databinding.ActivityHomeDetailBinding +import org.sopt.dosoptkwanheejo.base.BaseActivity +import org.sopt.dosoptkwanheejo.databinding.ActivityHomeDetailBinding class HomeDetailActivity : BaseActivity(ActivityHomeDetailBinding::inflate) { diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/AndroidFragment.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/AndroidFragment.kt similarity index 68% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/home/AndroidFragment.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/AndroidFragment.kt index 43d8f9c..d6a8254 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/AndroidFragment.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/AndroidFragment.kt @@ -1,10 +1,10 @@ -package org.sopt.dosopttemplate.presentation.home +package org.sopt.dosoptkwanheejo.presentation.home import android.os.Bundle import android.view.View -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.base.BaseFragment -import org.sopt.dosopttemplate.databinding.FragmentAndroidBinding +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.base.BaseFragment +import org.sopt.dosoptkwanheejo.databinding.FragmentAndroidBinding class AndroidFragment : BaseFragment() { override val layoutId: Int diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/HomeActivity.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeActivity.kt similarity index 86% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/home/HomeActivity.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeActivity.kt index 2f36a5a..00425b1 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/HomeActivity.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeActivity.kt @@ -1,18 +1,18 @@ -package org.sopt.dosopttemplate.presentation.home +package org.sopt.dosoptkwanheejo.presentation.home import android.content.res.Configuration import androidx.activity.OnBackPressedCallback import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider -import org.sopt.dosopttemplate.DoSoptApp -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.base.BaseActivity -import org.sopt.dosopttemplate.databinding.ActivityHomeBinding -import org.sopt.dosopttemplate.model.HomeBottomItem -import org.sopt.dosopttemplate.presentation.home.viewmodel.HomeViewModel -import org.sopt.dosopttemplate.repository.UserRepository -import org.sopt.dosopttemplate.util.UserViewModelFactory -import org.sopt.dosopttemplate.util.showShortToastMessage +import org.sopt.dosoptkwanheejo.DoSoptApp +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.base.BaseActivity +import org.sopt.dosoptkwanheejo.databinding.ActivityHomeBinding +import org.sopt.dosoptkwanheejo.model.HomeBottomItem +import org.sopt.dosoptkwanheejo.presentation.home.viewmodel.HomeViewModel +import org.sopt.dosoptkwanheejo.repository.UserRepository +import org.sopt.dosoptkwanheejo.util.UserViewModelFactory +import org.sopt.dosoptkwanheejo.util.showShortToastMessage class HomeActivity : BaseActivity(ActivityHomeBinding::inflate) { private var backPressedTime = 0L diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/HomeFragment.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeFragment.kt similarity index 75% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/home/HomeFragment.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeFragment.kt index 96794bc..e8e7903 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/HomeFragment.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeFragment.kt @@ -1,17 +1,17 @@ -package org.sopt.dosopttemplate.presentation.home +package org.sopt.dosoptkwanheejo.presentation.home import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels import androidx.recyclerview.widget.GridLayoutManager -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.adapter.user.UserAdapter -import org.sopt.dosopttemplate.base.BaseFragment -import org.sopt.dosopttemplate.databinding.FragmentHomeBinding -import org.sopt.dosopttemplate.model.HomeBottomItem -import org.sopt.dosopttemplate.model.dto.resp.user.UserResp -import org.sopt.dosopttemplate.presentation.home.dialog.HomeAddDialogFragment -import org.sopt.dosopttemplate.presentation.home.viewmodel.HomeViewModel +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.adapter.user.UserAdapter +import org.sopt.dosoptkwanheejo.base.BaseFragment +import org.sopt.dosoptkwanheejo.databinding.FragmentHomeBinding +import org.sopt.dosoptkwanheejo.model.HomeBottomItem +import org.sopt.dosoptkwanheejo.model.dto.resp.user.UserResp +import org.sopt.dosoptkwanheejo.presentation.home.dialog.HomeAddDialogFragment +import org.sopt.dosoptkwanheejo.presentation.home.viewmodel.HomeViewModel class HomeFragment : BaseFragment() { override val layoutId: Int diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/MyPageFragment.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/MyPageFragment.kt similarity index 62% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/home/MyPageFragment.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/MyPageFragment.kt index 836a415..08ced95 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/MyPageFragment.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/MyPageFragment.kt @@ -1,15 +1,14 @@ -package org.sopt.dosopttemplate.presentation.home +package org.sopt.dosoptkwanheejo.presentation.home import android.os.Bundle import android.view.View -import org.sopt.dosopttemplate.DoSoptApp.Companion.sharedPreferencesInstance -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.base.BaseFragment -import org.sopt.dosopttemplate.databinding.FragmentMypageBinding -import org.sopt.dosopttemplate.db.local.PreferenceManager -import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.ID -import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.MBTI -import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.NICKNAME +import org.sopt.dosoptkwanheejo.DoSoptApp.Companion.sharedPreferencesInstance +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.base.BaseFragment +import org.sopt.dosoptkwanheejo.databinding.FragmentMypageBinding +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager.Companion.ID +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager.Companion.MBTI +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager.Companion.NICKNAME class MyPageFragment : BaseFragment() { override val layoutId: Int diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/dialog/HomeAddDialogFragment.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/dialog/HomeAddDialogFragment.kt similarity index 81% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/home/dialog/HomeAddDialogFragment.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/dialog/HomeAddDialogFragment.kt index 448368a..aa8896d 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/dialog/HomeAddDialogFragment.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/dialog/HomeAddDialogFragment.kt @@ -1,13 +1,13 @@ -package org.sopt.dosopttemplate.presentation.home.dialog +package org.sopt.dosoptkwanheejo.presentation.home.dialog import android.os.Bundle import android.view.View import androidx.core.view.isVisible -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.base.BaseDialogFragment -import org.sopt.dosopttemplate.databinding.DialogFragmentHomeAddBinding -import org.sopt.dosopttemplate.util.hideKeyboard -import org.sopt.dosopttemplate.util.showShortSnackBar +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.base.BaseDialogFragment +import org.sopt.dosoptkwanheejo.databinding.DialogFragmentHomeAddBinding +import org.sopt.dosoptkwanheejo.util.hideKeyboard +import org.sopt.dosoptkwanheejo.util.showShortSnackBar class HomeAddDialogFragment : BaseDialogFragment() { override val layoutResId: Int diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/dialog/HomeRemoveDialogFragment.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/dialog/HomeRemoveDialogFragment.kt similarity index 78% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/home/dialog/HomeRemoveDialogFragment.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/dialog/HomeRemoveDialogFragment.kt index 95ca67c..6fb6e41 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/dialog/HomeRemoveDialogFragment.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/dialog/HomeRemoveDialogFragment.kt @@ -1,10 +1,10 @@ -package org.sopt.dosopttemplate.presentation.home.dialog +package org.sopt.dosoptkwanheejo.presentation.home.dialog import android.os.Bundle import android.view.View -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.base.BaseDialogFragment -import org.sopt.dosopttemplate.databinding.DialogFragmentHomeRemoveBinding +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.base.BaseDialogFragment +import org.sopt.dosoptkwanheejo.databinding.DialogFragmentHomeRemoveBinding class HomeRemoveDialogFragment : BaseDialogFragment() { override val layoutResId: Int diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/viewmodel/HomeViewModel.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/viewmodel/HomeViewModel.kt similarity index 77% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/home/viewmodel/HomeViewModel.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/viewmodel/HomeViewModel.kt index fc830dd..73f070e 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/home/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/viewmodel/HomeViewModel.kt @@ -1,13 +1,13 @@ -package org.sopt.dosopttemplate.presentation.home.viewmodel +package org.sopt.dosoptkwanheejo.presentation.home.viewmodel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch -import org.sopt.dosopttemplate.model.HomeBottomItem -import org.sopt.dosopttemplate.model.dto.resp.user.UserResp -import org.sopt.dosopttemplate.repository.UserRepository +import org.sopt.dosoptkwanheejo.model.HomeBottomItem +import org.sopt.dosoptkwanheejo.model.dto.resp.user.UserResp +import org.sopt.dosoptkwanheejo.repository.UserRepository class HomeViewModel( private val userRepository: UserRepository diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/login/LoginActivity.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/login/LoginActivity.kt similarity index 74% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/login/LoginActivity.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/login/LoginActivity.kt index 4fb3786..b03574f 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/login/LoginActivity.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/login/LoginActivity.kt @@ -1,30 +1,30 @@ -package org.sopt.dosopttemplate.presentation.login +package org.sopt.dosoptkwanheejo.presentation.login import android.content.Intent import android.os.Bundle import android.text.InputType import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider -import org.sopt.dosopttemplate.DoSoptApp -import org.sopt.dosopttemplate.DoSoptApp.Companion.sharedPreferencesInstance -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.base.BaseActivity -import org.sopt.dosopttemplate.databinding.ActivityLoginBinding -import org.sopt.dosopttemplate.db.local.PreferenceManager -import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.AUTO_LOGIN -import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.ID -import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.MBTI -import org.sopt.dosopttemplate.db.local.PreferenceManager.Companion.PWD -import org.sopt.dosopttemplate.model.dto.RespResult -import org.sopt.dosopttemplate.model.dto.resp.auth.LoginResp -import org.sopt.dosopttemplate.presentation.home.HomeActivity -import org.sopt.dosopttemplate.presentation.login.viewmodel.LoginViewModel -import org.sopt.dosopttemplate.presentation.signup.SignUpActivity -import org.sopt.dosopttemplate.repository.AuthRepository -import org.sopt.dosopttemplate.util.AuthViewModelFactory -import org.sopt.dosopttemplate.util.hideKeyboard -import org.sopt.dosopttemplate.util.showShortSnackBar -import org.sopt.dosopttemplate.util.showShortToastMessage +import org.sopt.dosoptkwanheejo.DoSoptApp +import org.sopt.dosoptkwanheejo.DoSoptApp.Companion.sharedPreferencesInstance +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.base.BaseActivity +import org.sopt.dosoptkwanheejo.databinding.ActivityLoginBinding +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager.Companion.AUTO_LOGIN +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager.Companion.ID +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager.Companion.MBTI +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager.Companion.PWD +import org.sopt.dosoptkwanheejo.model.dto.RespResult +import org.sopt.dosoptkwanheejo.model.dto.resp.auth.LoginResp +import org.sopt.dosoptkwanheejo.presentation.home.HomeActivity +import org.sopt.dosoptkwanheejo.presentation.login.viewmodel.LoginViewModel +import org.sopt.dosoptkwanheejo.presentation.signup.SignUpActivity +import org.sopt.dosoptkwanheejo.repository.AuthRepository +import org.sopt.dosoptkwanheejo.util.AuthViewModelFactory +import org.sopt.dosoptkwanheejo.util.hideKeyboard +import org.sopt.dosoptkwanheejo.util.showShortSnackBar +import org.sopt.dosoptkwanheejo.util.showShortToastMessage class LoginActivity : BaseActivity(ActivityLoginBinding::inflate) { private lateinit var loginViewModel: LoginViewModel diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/login/viewmodel/LoginViewModel.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/login/viewmodel/LoginViewModel.kt similarity index 77% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/login/viewmodel/LoginViewModel.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/login/viewmodel/LoginViewModel.kt index 3ca8c3a..f35908f 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/login/viewmodel/LoginViewModel.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/login/viewmodel/LoginViewModel.kt @@ -1,12 +1,12 @@ -package org.sopt.dosopttemplate.presentation.login.viewmodel +package org.sopt.dosoptkwanheejo.presentation.login.viewmodel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch -import org.sopt.dosopttemplate.model.dto.RespResult -import org.sopt.dosopttemplate.repository.AuthRepository +import org.sopt.dosoptkwanheejo.model.dto.RespResult +import org.sopt.dosoptkwanheejo.repository.AuthRepository class LoginViewModel( private val authRepository: AuthRepository diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signup/SignUpActivity.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/signup/SignUpActivity.kt similarity index 70% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/signup/SignUpActivity.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/signup/SignUpActivity.kt index 0148eaf..7e9ad2c 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signup/SignUpActivity.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/signup/SignUpActivity.kt @@ -1,20 +1,20 @@ -package org.sopt.dosopttemplate.presentation.signup +package org.sopt.dosoptkwanheejo.presentation.signup import androidx.lifecycle.ViewModelProvider -import org.sopt.dosopttemplate.DoSoptApp.Companion.getApiHelperInstance -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.base.BaseActivity -import org.sopt.dosopttemplate.databinding.ActivitySignUpBinding -import org.sopt.dosopttemplate.db.local.PreferenceManager -import org.sopt.dosopttemplate.model.dto.resp.auth.SignUpResp -import org.sopt.dosopttemplate.presentation.signup.viewmodel.SignUpViewModel -import org.sopt.dosopttemplate.repository.AuthRepository -import org.sopt.dosopttemplate.util.AuthViewModelFactory -import org.sopt.dosopttemplate.util.MBTI -import org.sopt.dosopttemplate.util.hideKeyboard -import org.sopt.dosopttemplate.util.showShortSnackBar -import org.sopt.dosopttemplate.util.showShortToastMessage -import org.sopt.dosopttemplate.util.toMBTI +import org.sopt.dosoptkwanheejo.DoSoptApp.Companion.getApiHelperInstance +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.base.BaseActivity +import org.sopt.dosoptkwanheejo.databinding.ActivitySignUpBinding +import org.sopt.dosoptkwanheejo.db.local.PreferenceManager +import org.sopt.dosoptkwanheejo.model.dto.resp.auth.SignUpResp +import org.sopt.dosoptkwanheejo.presentation.signup.viewmodel.SignUpViewModel +import org.sopt.dosoptkwanheejo.repository.AuthRepository +import org.sopt.dosoptkwanheejo.util.AuthViewModelFactory +import org.sopt.dosoptkwanheejo.util.MBTI +import org.sopt.dosoptkwanheejo.util.hideKeyboard +import org.sopt.dosoptkwanheejo.util.showShortSnackBar +import org.sopt.dosoptkwanheejo.util.showShortToastMessage +import org.sopt.dosoptkwanheejo.util.toMBTI class SignUpActivity : BaseActivity(ActivitySignUpBinding::inflate) { private lateinit var signUpViewModel: SignUpViewModel diff --git a/app/src/main/java/org/sopt/dosopttemplate/presentation/signup/viewmodel/SignUpViewModel.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/signup/viewmodel/SignUpViewModel.kt similarity index 77% rename from app/src/main/java/org/sopt/dosopttemplate/presentation/signup/viewmodel/SignUpViewModel.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/presentation/signup/viewmodel/SignUpViewModel.kt index c54403e..9a7a7ce 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/presentation/signup/viewmodel/SignUpViewModel.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/signup/viewmodel/SignUpViewModel.kt @@ -1,12 +1,12 @@ -package org.sopt.dosopttemplate.presentation.signup.viewmodel +package org.sopt.dosoptkwanheejo.presentation.signup.viewmodel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch -import org.sopt.dosopttemplate.model.dto.resp.auth.SignUpResp -import org.sopt.dosopttemplate.repository.AuthRepository +import org.sopt.dosoptkwanheejo.model.dto.resp.auth.SignUpResp +import org.sopt.dosoptkwanheejo.repository.AuthRepository class SignUpViewModel( private val authRepository: AuthRepository diff --git a/app/src/main/java/org/sopt/dosopttemplate/repository/AuthRepository.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/repository/AuthRepository.kt similarity index 65% rename from app/src/main/java/org/sopt/dosopttemplate/repository/AuthRepository.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/repository/AuthRepository.kt index e791669..a2ef349 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/repository/AuthRepository.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/repository/AuthRepository.kt @@ -1,8 +1,8 @@ -package org.sopt.dosopttemplate.repository +package org.sopt.dosoptkwanheejo.repository -import org.sopt.dosopttemplate.db.remote.AuthApiHelper -import org.sopt.dosopttemplate.model.dto.RespResult -import org.sopt.dosopttemplate.model.dto.resp.auth.SignUpResp +import org.sopt.dosoptkwanheejo.db.remote.AuthApiHelper +import org.sopt.dosoptkwanheejo.model.dto.RespResult +import org.sopt.dosoptkwanheejo.model.dto.resp.auth.SignUpResp class AuthRepository(private val authApiHelper: AuthApiHelper) { suspend fun signUp(id: String, nickname: String, password: String, onResponse: (SignUpResp) -> Unit) = diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/repository/UserRepository.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/repository/UserRepository.kt new file mode 100644 index 0000000..6e9c8f9 --- /dev/null +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/repository/UserRepository.kt @@ -0,0 +1,8 @@ +package org.sopt.dosoptkwanheejo.repository + +import org.sopt.dosoptkwanheejo.db.remote.UserApiHelper +import org.sopt.dosoptkwanheejo.model.dto.resp.user.UserResp + +class UserRepository(private val userApiHelper: UserApiHelper) { + suspend fun getUserList(page: Int, onResponse: (Boolean, UserResp) -> Unit) = userApiHelper.getUserList(page, onResponse) +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosopttemplate/util/Extensions.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/util/Extensions.kt similarity index 92% rename from app/src/main/java/org/sopt/dosopttemplate/util/Extensions.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/util/Extensions.kt index e8cfeb6..f8175e0 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/util/Extensions.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/util/Extensions.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.util +package org.sopt.dosoptkwanheejo.util import android.app.Activity import android.content.Context @@ -14,8 +14,8 @@ import com.bumptech.glide.load.resource.bitmap.CenterCrop import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.google.android.material.snackbar.Snackbar import okhttp3.ResponseBody -import org.sopt.dosopttemplate.db.remote.RetrofitManager -import org.sopt.dosopttemplate.model.dto.RespResult +import org.sopt.dosoptkwanheejo.db.remote.RetrofitManager +import org.sopt.dosoptkwanheejo.model.dto.RespResult fun View.showShortSnackBar(msg: String) { Snackbar.make(this, msg, Snackbar.LENGTH_SHORT).show() diff --git a/app/src/main/java/org/sopt/dosopttemplate/util/MBTI.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/util/MBTI.kt similarity index 77% rename from app/src/main/java/org/sopt/dosopttemplate/util/MBTI.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/util/MBTI.kt index f9f13f1..fe95a6e 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/util/MBTI.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/util/MBTI.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.util +package org.sopt.dosoptkwanheejo.util enum class MBTI { ISTJ, ISFJ, INFJ, INTJ, ISTP, ISFP, INFP, INTP, diff --git a/app/src/main/java/org/sopt/dosopttemplate/util/Mapper.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/util/Mapper.kt similarity index 93% rename from app/src/main/java/org/sopt/dosopttemplate/util/Mapper.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/util/Mapper.kt index 32a53a2..ec9f4c6 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/util/Mapper.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/util/Mapper.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate.util +package org.sopt.dosoptkwanheejo.util fun String.toMBTI(): MBTI { return try { diff --git a/app/src/main/java/org/sopt/dosopttemplate/util/SampleList.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/util/SampleList.kt similarity index 97% rename from app/src/main/java/org/sopt/dosopttemplate/util/SampleList.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/util/SampleList.kt index 3ce16a1..d41c4b3 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/util/SampleList.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/util/SampleList.kt @@ -1,7 +1,4 @@ -package org.sopt.dosopttemplate.util - -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.model.Music +package org.sopt.dosoptkwanheejo.util //val sampleDeque = mutableListOf().apply { // add(HomeProfileModel.ProfileHeader(0, "조관희", "졸리다", R.drawable.jokwanhee)) diff --git a/app/src/main/java/org/sopt/dosopttemplate/util/ViewModelProvider.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/util/ViewModelProvider.kt similarity index 80% rename from app/src/main/java/org/sopt/dosopttemplate/util/ViewModelProvider.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/util/ViewModelProvider.kt index 442cae1..8ba3342 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/util/ViewModelProvider.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/util/ViewModelProvider.kt @@ -1,9 +1,9 @@ -package org.sopt.dosopttemplate.util +package org.sopt.dosoptkwanheejo.util import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import org.sopt.dosopttemplate.repository.AuthRepository -import org.sopt.dosopttemplate.repository.UserRepository +import org.sopt.dosoptkwanheejo.repository.AuthRepository +import org.sopt.dosoptkwanheejo.repository.UserRepository class AuthViewModelFactory(private val authRepository: AuthRepository): ViewModelProvider.Factory { override fun create(modelClass: Class): T { diff --git a/app/src/main/java/org/sopt/dosopttemplate/view/SoptEditView.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/view/SoptEditView.kt similarity index 92% rename from app/src/main/java/org/sopt/dosopttemplate/view/SoptEditView.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/view/SoptEditView.kt index 256da23..83cc8cd 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/view/SoptEditView.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/view/SoptEditView.kt @@ -1,11 +1,11 @@ -package org.sopt.dosopttemplate.view +package org.sopt.dosoptkwanheejo.view import android.content.Context import android.util.AttributeSet import android.util.TypedValue import androidx.constraintlayout.widget.ConstraintLayout -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.databinding.CustomEditViewBinding +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.databinding.CustomEditViewBinding class SoptEditView @JvmOverloads constructor( context: Context, diff --git a/app/src/main/java/org/sopt/dosopttemplate/view/SoptNumberPicker.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/view/SoptNumberPicker.kt similarity index 92% rename from app/src/main/java/org/sopt/dosopttemplate/view/SoptNumberPicker.kt rename to app/src/main/java/org/sopt/dosoptkwanheejo/view/SoptNumberPicker.kt index dff7063..4b62547 100644 --- a/app/src/main/java/org/sopt/dosopttemplate/view/SoptNumberPicker.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/view/SoptNumberPicker.kt @@ -1,11 +1,10 @@ -package org.sopt.dosopttemplate.view +package org.sopt.dosoptkwanheejo.view import android.content.Context import android.util.AttributeSet -import android.widget.NumberPicker import androidx.constraintlayout.widget.ConstraintLayout -import org.sopt.dosopttemplate.R -import org.sopt.dosopttemplate.databinding.CustomNumberPickerBinding +import org.sopt.dosoptkwanheejo.R +import org.sopt.dosoptkwanheejo.databinding.CustomNumberPickerBinding import java.text.SimpleDateFormat class SoptNumberPicker @JvmOverloads constructor( diff --git a/app/src/main/java/org/sopt/dosopttemplate/repository/UserRepository.kt b/app/src/main/java/org/sopt/dosopttemplate/repository/UserRepository.kt deleted file mode 100644 index 6c22f1b..0000000 --- a/app/src/main/java/org/sopt/dosopttemplate/repository/UserRepository.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.sopt.dosopttemplate.repository - -import org.sopt.dosopttemplate.db.remote.AuthApiHelper -import org.sopt.dosopttemplate.db.remote.UserApiHelper -import org.sopt.dosopttemplate.model.dto.RespResult -import org.sopt.dosopttemplate.model.dto.resp.auth.SignUpResp -import org.sopt.dosopttemplate.model.dto.resp.user.UserResp - -class UserRepository(private val userApiHelper: UserApiHelper) { - suspend fun getUserList(page: Int, onResponse: (Boolean, UserResp) -> Unit) = userApiHelper.getUserList(page, onResponse) -} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index d67e49f..286200a 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -19,7 +19,7 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - - - - - - - DoSoptTemplate + DoSoptKwanheejo Welcome to SOPT ID 비밀번호 diff --git a/app/src/test/java/org/sopt/dosopttemplate/ExampleUnitTest.kt b/app/src/test/java/org/sopt/dosoptkwanheejo/ExampleUnitTest.kt similarity index 90% rename from app/src/test/java/org/sopt/dosopttemplate/ExampleUnitTest.kt rename to app/src/test/java/org/sopt/dosoptkwanheejo/ExampleUnitTest.kt index 2b3b233..caf83e6 100644 --- a/app/src/test/java/org/sopt/dosopttemplate/ExampleUnitTest.kt +++ b/app/src/test/java/org/sopt/dosoptkwanheejo/ExampleUnitTest.kt @@ -1,4 +1,4 @@ -package org.sopt.dosopttemplate +package org.sopt.dosoptkwanheejo import org.junit.Test From 801f6d49a8ebd2598ef2c2a607ebed78bf0100fd Mon Sep 17 00:00:00 2001 From: Jokwanhee Date: Fri, 17 Nov 2023 22:24:16 +0900 Subject: [PATCH 2/3] [add/#12] papago naver api MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 네이버 오픈 api 파파고 연동 - 영어 -> 한글 번역만 진행 --- app/build.gradle | 3 + .../org/sopt/dosoptkwanheejo/DoSoptApp.kt | 15 +++- .../org/sopt/dosoptkwanheejo/api/NaverAPI.kt | 17 +++++ .../db/remote/NaverApiHelper.kt | 25 +++++++ .../db/remote/RetrofitManager.kt | 17 ++++- .../model/dto/resp/NaverPapagoResp.kt | 35 ++++++++++ .../presentation/home/AndroidFragment.kt | 24 +++++++ .../presentation/home/HomeActivity.kt | 8 ++- .../home/viewmodel/HomeViewModel.kt | 13 +++- .../repository/NaverRepository.kt | 10 +++ .../dosoptkwanheejo/util/ViewModelProvider.kt | 15 +++- app/src/main/res/drawable/papago.png | Bin 0 -> 29793 bytes app/src/main/res/layout/fragment_android.xml | 66 ++++++++++++++++-- app/src/main/res/values/strings.xml | 1 + 14 files changed, 236 insertions(+), 13 deletions(-) create mode 100644 app/src/main/java/org/sopt/dosoptkwanheejo/api/NaverAPI.kt create mode 100644 app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/NaverApiHelper.kt create mode 100644 app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/NaverPapagoResp.kt create mode 100644 app/src/main/java/org/sopt/dosoptkwanheejo/repository/NaverRepository.kt create mode 100644 app/src/main/res/drawable/papago.png diff --git a/app/build.gradle b/app/build.gradle index 6fd5f68..ae4b087 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -22,6 +22,9 @@ android { buildConfigField "String", "BASE_URL", properties["base.url"] buildConfigField "String", "USER_BASE_URL", properties["user.base.url"] + buildConfigField "String", "NAVER_PAPAGO_BASE_URL", properties["naver.papago.base.url"] + buildConfigField "String", "NAVER_CLIENT_ID", properties["naver.client.id"] + buildConfigField "String", "NAVER_CLIENT_SECRET", properties["naver.client.secret"] testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/DoSoptApp.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/DoSoptApp.kt index 67323da..d5fd509 100644 --- a/app/src/main/java/org/sopt/dosoptkwanheejo/DoSoptApp.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/DoSoptApp.kt @@ -4,6 +4,7 @@ import android.app.Application import android.content.Context import android.content.SharedPreferences import org.sopt.dosoptkwanheejo.db.remote.AuthApiHelper +import org.sopt.dosoptkwanheejo.db.remote.NaverApiHelper import org.sopt.dosoptkwanheejo.db.remote.RetrofitServicePool import org.sopt.dosoptkwanheejo.db.remote.UserApiHelper @@ -17,6 +18,7 @@ class DoSoptApp : Application() { lateinit var sharedPreferencesInstance: SharedPreferences private lateinit var authApiHelper: AuthApiHelper private lateinit var userApiHelper: UserApiHelper + private lateinit var naverApiHelper: NaverApiHelper @Synchronized private fun getSharedPreferencesInstance(context: Context): SharedPreferences { @@ -31,7 +33,11 @@ class DoSoptApp : Application() { fun getApiHelperInstance(): AuthApiHelper { if (!::authApiHelper.isInitialized) { - authApiHelper = AuthApiHelper(RetrofitServicePool.authService) + try { + authApiHelper = AuthApiHelper(RetrofitServicePool.authService) + } catch (e: ExceptionInInitializerError) { + e.printStackTrace() + } } return authApiHelper } @@ -42,5 +48,12 @@ class DoSoptApp : Application() { } return userApiHelper } + + fun getNaverApiHelperInstance(): NaverApiHelper { + if (!::naverApiHelper.isInitialized) { + naverApiHelper = NaverApiHelper(RetrofitServicePool.naverPapagoService) + } + return naverApiHelper + } } } \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/api/NaverAPI.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/api/NaverAPI.kt new file mode 100644 index 0000000..7467c67 --- /dev/null +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/api/NaverAPI.kt @@ -0,0 +1,17 @@ +package org.sopt.dosoptkwanheejo.api + +import org.sopt.dosoptkwanheejo.model.dto.resp.NaverPapagoResp +import retrofit2.Call +import retrofit2.http.Field +import retrofit2.http.FormUrlEncoded +import retrofit2.http.POST + +interface NaverAPI { + @FormUrlEncoded + @POST("v1/papago/n2mt") + fun getTranslatedTextToPapago( + @Field("source") source: String, + @Field("target") target: String, + @Field("text") text: String + ): Call +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/NaverApiHelper.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/NaverApiHelper.kt new file mode 100644 index 0000000..b818dd7 --- /dev/null +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/NaverApiHelper.kt @@ -0,0 +1,25 @@ +package org.sopt.dosoptkwanheejo.db.remote + +import org.sopt.dosoptkwanheejo.api.NaverAPI +import org.sopt.dosoptkwanheejo.model.dto.resp.NaverPapagoResp +import org.sopt.dosoptkwanheejo.model.dto.resp.NaverPapagoResult +import retrofit2.Call +import retrofit2.Response + +class NaverApiHelper(private val naverAPI: NaverAPI) { + fun getTranslatedTextToPapago(source: String, target: String, text: String, onResponse: (NaverPapagoResult) -> Unit) { + naverAPI.getTranslatedTextToPapago(source, target, text).enqueue(object: retrofit2.Callback{ + override fun onResponse( + call: Call, + response: Response + ) { + if (response.isSuccessful) { + response.body()?.message?.result?.let { onResponse(it) } + } + } + + override fun onFailure(call: Call, t: Throwable) { + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/RetrofitManager.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/RetrofitManager.kt index 152b816..63505b6 100644 --- a/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/RetrofitManager.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/db/remote/RetrofitManager.kt @@ -2,26 +2,38 @@ package org.sopt.dosoptkwanheejo.db.remote import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import kotlinx.serialization.json.Json +import okhttp3.Interceptor import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import org.sopt.dosoptkwanheejo.BuildConfig import org.sopt.dosoptkwanheejo.BuildConfig.BASE_URL import org.sopt.dosoptkwanheejo.api.AuthAPI +import org.sopt.dosoptkwanheejo.api.NaverAPI import org.sopt.dosoptkwanheejo.api.UserAPI +import org.sopt.dosoptkwanheejo.db.remote.RetrofitManager.NAVER_PAPAGO_BASE_URL import org.sopt.dosoptkwanheejo.db.remote.RetrofitManager.USER_BASE_URL import retrofit2.Retrofit object RetrofitManager { const val BASE_URL = BuildConfig.BASE_URL const val USER_BASE_URL = BuildConfig.USER_BASE_URL + const val NAVER_PAPAGO_BASE_URL = BuildConfig.NAVER_PAPAGO_BASE_URL private val httpLoggingInterceptor = HttpLoggingInterceptor() .setLevel(HttpLoggingInterceptor.Level.BODY) - private val okHttpClient = OkHttpClient - .Builder() + private val okHttpClient = OkHttpClient.Builder() .addInterceptor(httpLoggingInterceptor) + .addInterceptor { it: Interceptor.Chain -> + val request = it.request() + .newBuilder() + .addHeader("X-Naver-Client-Id", BuildConfig.NAVER_CLIENT_ID) + .addHeader("X-Naver-Client-Secret", BuildConfig.NAVER_CLIENT_SECRET) + .build() + + it.proceed(request) + } .build() fun getRetrofit(url: String): Retrofit = @@ -47,4 +59,5 @@ object RetrofitManager { object RetrofitServicePool { val authService = RetrofitManager.create(BASE_URL) val userService = RetrofitManager.create(USER_BASE_URL) + val naverPapagoService = RetrofitManager.create(NAVER_PAPAGO_BASE_URL) } \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/NaverPapagoResp.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/NaverPapagoResp.kt new file mode 100644 index 0000000..a695734 --- /dev/null +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/model/dto/resp/NaverPapagoResp.kt @@ -0,0 +1,35 @@ +package org.sopt.dosoptkwanheejo.model.dto.resp + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + + +@Serializable +data class NaverPapagoResp( + @SerialName("message") + val message: NaverPapagoType +) + +@Serializable +data class NaverPapagoType( + @SerialName("@type") + val type: String, + @SerialName("@service") + val service: String, + @SerialName("@version") + val version: String, + @SerialName("result") + val result: NaverPapagoResult +) + +@Serializable +data class NaverPapagoResult( + @SerialName("srcLangType") + val srcLangType: String, + @SerialName("tarLangType") + val tarLangType: String, + @SerialName("translatedText") + val translatedText: String, + @SerialName("engineType") + val engineType: String +) \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/AndroidFragment.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/AndroidFragment.kt index d6a8254..2e9fb53 100644 --- a/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/AndroidFragment.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/AndroidFragment.kt @@ -2,16 +2,40 @@ package org.sopt.dosoptkwanheejo.presentation.home import android.os.Bundle import android.view.View +import androidx.fragment.app.activityViewModels import org.sopt.dosoptkwanheejo.R import org.sopt.dosoptkwanheejo.base.BaseFragment import org.sopt.dosoptkwanheejo.databinding.FragmentAndroidBinding +import org.sopt.dosoptkwanheejo.presentation.home.viewmodel.HomeViewModel class AndroidFragment : BaseFragment() { + private val homeViewModel: HomeViewModel by activityViewModels() + override val layoutId: Int get() = R.layout.fragment_android override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + onTranslate() + observeData() + } + + private fun onTranslate() { + binding.btnTranslate.setOnClickListener { + if (binding.etTranslateText.text.isNotEmpty()) { + homeViewModel.getTranslatedTextToPapago( + "en", + "ko", + binding.etTranslateText.text.toString() + ) + } + } + } + + private fun observeData() { + homeViewModel.translatedText.observe(viewLifecycleOwner) { + binding.tvBeTranslatedText.text = it + } } companion object { diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeActivity.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeActivity.kt index 00425b1..5094c78 100644 --- a/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeActivity.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/HomeActivity.kt @@ -10,8 +10,9 @@ import org.sopt.dosoptkwanheejo.base.BaseActivity import org.sopt.dosoptkwanheejo.databinding.ActivityHomeBinding import org.sopt.dosoptkwanheejo.model.HomeBottomItem import org.sopt.dosoptkwanheejo.presentation.home.viewmodel.HomeViewModel +import org.sopt.dosoptkwanheejo.repository.NaverRepository import org.sopt.dosoptkwanheejo.repository.UserRepository -import org.sopt.dosoptkwanheejo.util.UserViewModelFactory +import org.sopt.dosoptkwanheejo.util.HomeViewModelFactory import org.sopt.dosoptkwanheejo.util.showShortToastMessage class HomeActivity : BaseActivity(ActivityHomeBinding::inflate) { @@ -27,7 +28,10 @@ class HomeActivity : BaseActivity(ActivityHomeBinding::infl private fun initViewModel() { homeViewModel = ViewModelProvider( this, - UserViewModelFactory(UserRepository(DoSoptApp.getUserApiHelperInstance())) + HomeViewModelFactory( + UserRepository(DoSoptApp.getUserApiHelperInstance()), + NaverRepository(DoSoptApp.getNaverApiHelperInstance()) + ) ).get(HomeViewModel::class.java) } diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/viewmodel/HomeViewModel.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/viewmodel/HomeViewModel.kt index 73f070e..b383b5d 100644 --- a/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/presentation/home/viewmodel/HomeViewModel.kt @@ -7,10 +7,12 @@ import androidx.lifecycle.viewModelScope import kotlinx.coroutines.launch import org.sopt.dosoptkwanheejo.model.HomeBottomItem import org.sopt.dosoptkwanheejo.model.dto.resp.user.UserResp +import org.sopt.dosoptkwanheejo.repository.NaverRepository import org.sopt.dosoptkwanheejo.repository.UserRepository class HomeViewModel( - private val userRepository: UserRepository + private val userRepository: UserRepository, + private val naverRepository: NaverRepository ) : ViewModel() { private val _bottomItemId = MutableLiveData() val bottomItemId: LiveData = _bottomItemId @@ -18,6 +20,9 @@ class HomeViewModel( private val _userList = MutableLiveData() val userList: LiveData = _userList + private val _translatedText = MutableLiveData() + val translatedText: LiveData = _translatedText + fun setBottomItemId(id: HomeBottomItem) { _bottomItemId.value = id } @@ -29,4 +34,10 @@ class HomeViewModel( } } } + + fun getTranslatedTextToPapago(source: String, target: String, text: String) { + naverRepository.getTranslatedTextToPapago(source, target, text) { + _translatedText.value = it.translatedText + } + } } \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/repository/NaverRepository.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/repository/NaverRepository.kt new file mode 100644 index 0000000..9184d1c --- /dev/null +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/repository/NaverRepository.kt @@ -0,0 +1,10 @@ +package org.sopt.dosoptkwanheejo.repository + +import org.sopt.dosoptkwanheejo.db.remote.NaverApiHelper +import org.sopt.dosoptkwanheejo.model.dto.resp.NaverPapagoResult + +class NaverRepository(private val naverApiHelper: NaverApiHelper) { + fun getTranslatedTextToPapago(source: String, target: String, text: String, onResponse: (NaverPapagoResult) -> Unit) { + naverApiHelper.getTranslatedTextToPapago(source, target, text, onResponse) + } +} \ No newline at end of file diff --git a/app/src/main/java/org/sopt/dosoptkwanheejo/util/ViewModelProvider.kt b/app/src/main/java/org/sopt/dosoptkwanheejo/util/ViewModelProvider.kt index 8ba3342..327f8eb 100644 --- a/app/src/main/java/org/sopt/dosoptkwanheejo/util/ViewModelProvider.kt +++ b/app/src/main/java/org/sopt/dosoptkwanheejo/util/ViewModelProvider.kt @@ -3,15 +3,26 @@ package org.sopt.dosoptkwanheejo.util import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import org.sopt.dosoptkwanheejo.repository.AuthRepository +import org.sopt.dosoptkwanheejo.repository.NaverRepository import org.sopt.dosoptkwanheejo.repository.UserRepository -class AuthViewModelFactory(private val authRepository: AuthRepository): ViewModelProvider.Factory { +class AuthViewModelFactory(private val authRepository: AuthRepository) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { return modelClass.getConstructor(AuthRepository::class.java).newInstance(authRepository) } } -class UserViewModelFactory(private val userRepository: UserRepository): ViewModelProvider.Factory { +class HomeViewModelFactory( + private val userRepository: UserRepository, + private val naverRepository: NaverRepository +) : ViewModelProvider.Factory { + override fun create(modelClass: Class): T { + return modelClass.getConstructor(UserRepository::class.java, NaverRepository::class.java) + .newInstance(userRepository, naverRepository) + } +} + +class UserViewModelFactory(private val userRepository: UserRepository) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { return modelClass.getConstructor(UserRepository::class.java).newInstance(userRepository) } diff --git a/app/src/main/res/drawable/papago.png b/app/src/main/res/drawable/papago.png new file mode 100644 index 0000000000000000000000000000000000000000..4a16c188671bf999862fa39ce8f0c155f26fb9ab GIT binary patch literal 29793 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

u_QlmiqcX@7rAx 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 - + + + + + + + +