diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3ca7183..562e154 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -49,4 +49,7 @@ dependencies { testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) + + // 스플래시 + implementation(libs.androidx.core.splashscreen) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d1a5da8..7ce6462 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,18 @@ android:supportsRtl="true" android:theme="@style/Theme.NoBet" tools:targetApi="31"> + + + + + + + + @@ -23,13 +35,7 @@ android:exported="false" /> - - - - - - + android:exported="false" /> \ No newline at end of file diff --git a/app/src/main/java/kr/hs/anu/nobet/presentation/screen/main/MainActivity.kt b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/main/MainActivity.kt index 3505b9c..7a5db66 100644 --- a/app/src/main/java/kr/hs/anu/nobet/presentation/screen/main/MainActivity.kt +++ b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/main/MainActivity.kt @@ -8,7 +8,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.PopupWindow -import android.widget.Toast import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity @@ -22,6 +21,7 @@ import kr.hs.anu.nobet.databinding.ActivityMainBinding import kr.hs.anu.nobet.presentation.screen.allow.AllowActivity import kr.hs.anu.nobet.presentation.screen.blockList.BlockListActivity import kr.hs.anu.nobet.presentation.screen.login.LoginActivity +import kr.hs.anu.nobet.presentation.screen.report.ReportActivity import kr.hs.anu.nobet.utils.openPage class MainActivity : AppCompatActivity() { @@ -124,7 +124,8 @@ class MainActivity : AppCompatActivity() { } popupMenu.findViewById(R.id.menu_report).setOnClickListener { - Toast.makeText(anchor.context, "문제 신고", Toast.LENGTH_SHORT).show() + val intent = Intent(this, ReportActivity::class.java) + startActivity(intent) popupWindow.dismiss() } } diff --git a/app/src/main/java/kr/hs/anu/nobet/presentation/screen/report/ReportActivity.kt b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/report/ReportActivity.kt new file mode 100644 index 0000000..1f7aa9b --- /dev/null +++ b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/report/ReportActivity.kt @@ -0,0 +1,54 @@ +package kr.hs.anu.nobet.presentation.screen.report + +import android.os.Bundle +import android.view.View +import androidx.activity.enableEdgeToEdge +import androidx.activity.viewModels +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import kr.hs.anu.nobet.R +import kr.hs.anu.nobet.databinding.ActivityReportBinding +import kr.hs.anu.nobet.utils.openPage + +class ReportActivity : AppCompatActivity() { + + private val viewModel: ReportViewModel by viewModels() + private lateinit var binding: ActivityReportBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + binding = ActivityReportBinding.inflate(layoutInflater) + setContentView(binding.root) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + viewModel.spinnerState.observe(this) { spinnerState -> + binding.layoutReportMenu.visibility = if (spinnerState) View.VISIBLE else View.INVISIBLE + } + + // 로고 클릭시 메인으로 + binding.ivTopbarLogo.setOnClickListener { + finish() + } + + // 온라인 상담 + binding.tvMobile.setOnClickListener { + this.openPage() + } + + binding.layoutSpinner.setOnClickListener { + viewModel.toggle() + } + + binding.ivDrop.setOnClickListener { + viewModel.toggle() + } + + // TODO menu 값 클릭했을때 선택값으로 텍스트 변경 및 데이터 처리 + } +} diff --git a/app/src/main/java/kr/hs/anu/nobet/presentation/screen/report/ReportViewModel.kt b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/report/ReportViewModel.kt new file mode 100644 index 0000000..bfe4d7e --- /dev/null +++ b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/report/ReportViewModel.kt @@ -0,0 +1,17 @@ +package kr.hs.anu.nobet.presentation.screen.report + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel + +class ReportViewModel : ViewModel() { + + // spinner 상태 + private val _spinnerState = MutableLiveData(false) + val spinnerState: LiveData = _spinnerState + + // spinner 상태 관리 + fun toggle() { + _spinnerState.value = !(_spinnerState.value ?: false) + } +} diff --git a/app/src/main/java/kr/hs/anu/nobet/presentation/screen/splash/SplashActivity.kt b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/splash/SplashActivity.kt new file mode 100644 index 0000000..1bb0b9c --- /dev/null +++ b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/splash/SplashActivity.kt @@ -0,0 +1,28 @@ +package kr.hs.anu.nobet.presentation.screen.splash + +import android.content.Intent +import android.os.Build +import android.os.Bundle +import android.os.Handler +import android.os.Looper +import androidx.appcompat.app.AppCompatActivity +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import kr.hs.anu.nobet.R +import kr.hs.anu.nobet.presentation.screen.main.MainActivity + +class SplashActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + installSplashScreen().setKeepOnScreenCondition { false } + } + + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_splash) + + // 딜레이 후 메인으로 이동 + Handler(Looper.getMainLooper()).postDelayed({ + startActivity(Intent(this, MainActivity::class.java)) + finish() + }, 1500) + } +} diff --git a/app/src/main/res/drawable/ic_down_arrow.xml b/app/src/main/res/drawable/ic_down_arrow.xml new file mode 100644 index 0000000..6958979 --- /dev/null +++ b/app/src/main/res/drawable/ic_down_arrow.xml @@ -0,0 +1,13 @@ + + + + + + diff --git a/app/src/main/res/drawable/logo.png b/app/src/main/res/drawable/logo.png new file mode 100644 index 0000000..8bc579b Binary files /dev/null and b/app/src/main/res/drawable/logo.png differ diff --git a/app/src/main/res/drawable/report_background.xml b/app/src/main/res/drawable/report_background.xml new file mode 100644 index 0000000..304f1eb --- /dev/null +++ b/app/src/main/res/drawable/report_background.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/report_btn_background.xml b/app/src/main/res/drawable/report_btn_background.xml new file mode 100644 index 0000000..9aecf37 --- /dev/null +++ b/app/src/main/res/drawable/report_btn_background.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_report.xml b/app/src/main/res/layout/activity_report.xml new file mode 100644 index 0000000..4f9363b --- /dev/null +++ b/app/src/main/res/layout/activity_report.xml @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_splash.xml b/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..e243887 --- /dev/null +++ b/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v31/themes.xml b/app/src/main/res/values-v31/themes.xml new file mode 100644 index 0000000..ba33dae --- /dev/null +++ b/app/src/main/res/values-v31/themes.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 8c06691..f1b64d4 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -3,7 +3,10 @@