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