diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6d8139c..d1a5da8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,6 +12,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.NoBet"
tools:targetApi="31">
+
diff --git a/app/src/main/java/kr/hs/anu/nobet/domain/model/BlockSiteData.kt b/app/src/main/java/kr/hs/anu/nobet/domain/model/BlockSiteData.kt
new file mode 100644
index 0000000..89fcaf9
--- /dev/null
+++ b/app/src/main/java/kr/hs/anu/nobet/domain/model/BlockSiteData.kt
@@ -0,0 +1,5 @@
+package kr.hs.anu.nobet.domain.model
+
+data class BlockSiteData(
+ val siteUrl: String
+)
diff --git a/app/src/main/java/kr/hs/anu/nobet/presentation/screen/blockList/BlockListActivity.kt b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/blockList/BlockListActivity.kt
new file mode 100644
index 0000000..f0b0078
--- /dev/null
+++ b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/blockList/BlockListActivity.kt
@@ -0,0 +1,53 @@
+package kr.hs.anu.nobet.presentation.screen.blockList
+
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+import androidx.activity.viewModels
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.recyclerview.widget.LinearLayoutManager
+import kr.hs.anu.nobet.R
+import kr.hs.anu.nobet.databinding.ActivityBlockListBinding
+import kr.hs.anu.nobet.utils.openPage
+
+class BlockListActivity : AppCompatActivity() {
+
+ private val viewModel: BlockListViewModel by viewModels()
+ private lateinit var binding: ActivityBlockListBinding
+ private lateinit var blockAdapter: BlockRecyclerAdapter
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ binding = ActivityBlockListBinding.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
+ }
+
+ // 로고 클릭시 메인 화면으로
+ binding.ivTopbarLogo.setOnClickListener {
+ finish()
+ }
+
+ binding.tvMobile.setOnClickListener {
+ this.openPage()
+ }
+
+ // TODO 페이징 사용 예정
+
+ // Adapter
+ blockAdapter = BlockRecyclerAdapter()
+ binding.recyclerBlock.apply {
+ layoutManager = LinearLayoutManager(this@BlockListActivity)
+ adapter = blockAdapter
+ }
+
+ viewModel.siteList.observe(this) { list ->
+ blockAdapter.submitList(list)
+ }
+ }
+}
diff --git a/app/src/main/java/kr/hs/anu/nobet/presentation/screen/blockList/BlockListViewModel.kt b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/blockList/BlockListViewModel.kt
new file mode 100644
index 0000000..a1c441f
--- /dev/null
+++ b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/blockList/BlockListViewModel.kt
@@ -0,0 +1,24 @@
+package kr.hs.anu.nobet.presentation.screen.blockList
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import kr.hs.anu.nobet.domain.model.BlockSiteData
+
+class BlockListViewModel : ViewModel() {
+ private val _siteList = MutableLiveData>()
+ val siteList: LiveData> get() = _siteList
+
+ init {
+ loadBlockSites()
+ }
+
+ private fun loadBlockSites() {
+ // 임시 데이터
+ _siteList.value = listOf(
+ BlockSiteData("example.com"),
+ BlockSiteData("example.com"),
+ BlockSiteData("example.com")
+ )
+ }
+}
diff --git a/app/src/main/java/kr/hs/anu/nobet/presentation/screen/blockList/BlockRecyclerAdapter.kt b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/blockList/BlockRecyclerAdapter.kt
new file mode 100644
index 0000000..97ae696
--- /dev/null
+++ b/app/src/main/java/kr/hs/anu/nobet/presentation/screen/blockList/BlockRecyclerAdapter.kt
@@ -0,0 +1,43 @@
+package kr.hs.anu.nobet.presentation.screen.blockList
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import kr.hs.anu.nobet.databinding.BlockItemBinding
+import kr.hs.anu.nobet.domain.model.BlockSiteData
+
+class BlockRecyclerAdapter : RecyclerView.Adapter() {
+
+ private val itemList = mutableListOf()
+
+ fun submitList(newList: List) {
+ itemList.clear()
+ itemList.addAll(newList)
+ notifyDataSetChanged()
+ }
+
+ inner class BlockViewHolder(private val binding: BlockItemBinding) :
+ RecyclerView.ViewHolder(binding.root) {
+ fun bind(item: BlockSiteData) {
+ binding.tvBlockSite.text = item.siteUrl
+ }
+ }
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int
+ ): BlockRecyclerAdapter.BlockViewHolder {
+ val binding = BlockItemBinding.inflate(
+ LayoutInflater.from(parent.context),
+ parent,
+ false
+ )
+ return BlockViewHolder(binding)
+ }
+
+ override fun onBindViewHolder(holder: BlockViewHolder, position: Int) {
+ holder.bind(itemList[position])
+ }
+
+ override fun getItemCount(): Int = itemList.size
+}
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 6cb91e6..3505b9c 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
@@ -20,6 +20,7 @@ import androidx.core.view.WindowInsetsCompat
import kr.hs.anu.nobet.R
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.utils.openPage
@@ -117,7 +118,8 @@ class MainActivity : AppCompatActivity() {
}
popupMenu.findViewById(R.id.menu_log).setOnClickListener {
- Toast.makeText(anchor.context, "필터링 로그", Toast.LENGTH_SHORT).show()
+ val intent = Intent(this, BlockListActivity::class.java)
+ startActivity(intent)
popupWindow.dismiss()
}
diff --git a/app/src/main/res/drawable/ic_left_arrow.xml b/app/src/main/res/drawable/ic_left_arrow.xml
new file mode 100644
index 0000000..20ffc9e
--- /dev/null
+++ b/app/src/main/res/drawable/ic_left_arrow.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_arrow.xml b/app/src/main/res/drawable/ic_right_arrow.xml
new file mode 100644
index 0000000..62fda01
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_arrow.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_allow.xml b/app/src/main/res/layout/activity_allow.xml
index 2a57d22..7a003ef 100644
--- a/app/src/main/res/layout/activity_allow.xml
+++ b/app/src/main/res/layout/activity_allow.xml
@@ -99,6 +99,20 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/et_allow_site">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/block_item.xml b/app/src/main/res/layout/block_item.xml
new file mode 100644
index 0000000..052f9fa
--- /dev/null
+++ b/app/src/main/res/layout/block_item.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file