Skip to content

Commit

Permalink
add asmaul husna feature & adjust some code
Browse files Browse the repository at this point in the history
  • Loading branch information
dapoi committed Nov 7, 2023
1 parent 3c15d06 commit edf2cd9
Show file tree
Hide file tree
Showing 24 changed files with 1,091 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,8 @@ class MainActivity : AppCompatActivity() {
R.id.bookmarkFragment,
R.id.aboutAppFragment,
R.id.qiblaFragment,
R.id.dzikirFragment
R.id.dzikirFragment,
R.id.asmaulHusnaFragment
)
navController.addOnDestinationChangedListener { _, destination, _ ->
// give animation when hide/show bottom nav
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package com.prodev.muslimq.presentation.adapter

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView
import com.prodev.muslimq.core.data.source.local.model.AsmaulHusnaEntity
import com.prodev.muslimq.databinding.ItemListAsmaulHusnaBinding
import com.prodev.muslimq.presentation.adapter.AsmaulHusnaAdapter.AsmaulHusnaViewHolder

class AsmaulHusnaAdapter :
ListAdapter<AsmaulHusnaEntity, AsmaulHusnaViewHolder>(AsmaulHusnaAdapter) {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AsmaulHusnaViewHolder {
return AsmaulHusnaViewHolder(
ItemListAsmaulHusnaBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}

override fun onBindViewHolder(holder: AsmaulHusnaViewHolder, position: Int) {
holder.bind(getItem(position))
}

inner class AsmaulHusnaViewHolder(
private val binding: ItemListAsmaulHusnaBinding
) : RecyclerView.ViewHolder(binding.root) {
fun bind(data: AsmaulHusnaEntity) {
binding.apply {
tvAsmaNumber.text = data.urutan.toString()
tvAsmaNameArabic.text = data.arab
tvAsmaNameLatin.text = data.latin
tvAsmaNameMeaning.text = data.arti
}
}
}

companion object : DiffUtil.ItemCallback<AsmaulHusnaEntity>() {
override fun areItemsTheSame(
oldItem: AsmaulHusnaEntity, newItem: AsmaulHusnaEntity
): Boolean = oldItem.urutan == newItem.urutan

override fun areContentsTheSame(
oldItem: AsmaulHusnaEntity, newItem: AsmaulHusnaEntity
): Boolean = oldItem == newItem
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.prodev.muslimq.presentation.view.asmaul

import android.os.Bundle
import android.view.View
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.GridLayoutManager
import com.prodev.muslimq.databinding.FragmentAsmaulHusnaBinding
import com.prodev.muslimq.presentation.adapter.AsmaulHusnaAdapter
import com.prodev.muslimq.presentation.view.BaseFragment
import com.prodev.muslimq.presentation.viewmodel.AsmaulHusnaViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class AsmaulHusnaFragment : BaseFragment<FragmentAsmaulHusnaBinding>(
FragmentAsmaulHusnaBinding::inflate
) {

private val asmaulHusnaViewModel: AsmaulHusnaViewModel by viewModels()
private val asmaulHusnaAdapter: AsmaulHusnaAdapter by lazy { AsmaulHusnaAdapter() }

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

binding.ivBack.setOnClickListener { findNavController().popBackStack() }

initAdapter()
initViewModel()
}

private fun initAdapter() {
binding.rvAsmaulHusna.apply {
layoutManager = GridLayoutManager(requireContext(), 3)
adapter = asmaulHusnaAdapter
}
}

private fun initViewModel() {
asmaulHusnaViewModel.getAsmaulHusna().observe(viewLifecycleOwner) { result ->
asmaulHusnaAdapter.submitList(result)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@ import androidx.appcompat.widget.SearchView
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
import com.prodev.muslimq.core.utils.Resource
import com.prodev.muslimq.helper.hideKeyboard
import com.prodev.muslimq.databinding.FragmentDoaBinding
import com.prodev.muslimq.helper.hideKeyboard
import com.prodev.muslimq.presentation.adapter.DoaAdapter
import com.prodev.muslimq.presentation.view.BaseFragment
import com.prodev.muslimq.presentation.viewmodel.DoaViewModel
Expand Down Expand Up @@ -51,22 +50,6 @@ class DoaFragment : BaseFragment<FragmentDoaBinding>(FragmentDoaBinding::inflate
}

private fun setViewModel() {
doaViewModel.getDoa().observe(viewLifecycleOwner) {
when (it) {
is Resource.Loading -> {
binding.progressBar.visibility = View.VISIBLE
}

is Resource.Success -> {
binding.progressBar.visibility = View.GONE
doaAdapter.setDoa(it.data!!)
}

is Resource.Error -> {
binding.progressBar.visibility = View.GONE
binding.rvDoa.visibility = View.GONE
}
}
}
doaViewModel.getDoa().observe(viewLifecycleOwner) { doaAdapter.setDoa(it) }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,13 @@ class OthersFragment : BaseFragment<FragmentOthersBinding>(FragmentOthersBinding
when {
title.contains("Baca") -> {
findNavController().navigate(
R.id.action_othersFragment_to_quranBookmarkFragment
OthersFragmentDirections.actionOthersFragmentToQuranBookmarkFragment()
)
}

title.contains("Husna") -> {
findNavController().navigate(
OthersFragmentDirections.actionOthersFragmentToAsmaulHusnaFragment()
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ object OthersObject {
private val menuImage = intArrayOf(
R.drawable.ic_collection,
R.drawable.ic_dark_mode,
R.drawable.ic_asmaul_husna,
R.drawable.ic_notif_setting,
R.drawable.ic_hearing,
R.drawable.ic_about
Expand All @@ -15,6 +16,7 @@ object OthersObject {
private val menuTitle = listOf(
"Baca Nanti",
"Mode Gelap",
"Asmaul Husna",
"Pengaturan Notifikasi",
"Pilih Muadzin",
"Info Aplikasi"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.prodev.muslimq.presentation.viewmodel

import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import com.prodev.muslimq.core.data.repository.AsmaulHusnaRepository
import com.prodev.muslimq.core.data.source.local.model.AsmaulHusnaEntity
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

@HiltViewModel
class AsmaulHusnaViewModel @Inject constructor(
private val asmaulHusnaRepository: AsmaulHusnaRepository
) : ViewModel() {

fun getAsmaulHusna(): LiveData<List<AsmaulHusnaEntity>> =
asmaulHusnaRepository.getAsmaulHusna().asLiveData()
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,11 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
import com.prodev.muslimq.core.data.repository.DoaRepository
import com.prodev.muslimq.core.data.source.local.model.DoaEntity
import com.prodev.muslimq.core.utils.Resource
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

@HiltViewModel
class DoaViewModel @Inject constructor(private val doaRepository: DoaRepository) : ViewModel() {

fun getDoa(): LiveData<Resource<List<DoaEntity>>> {
return doaRepository.getDoa().asLiveData()
}
fun getDoa(): LiveData<List<DoaEntity>> = doaRepository.getDoa().asLiveData()
}
5 changes: 5 additions & 0 deletions app/src/main/res/drawable/bg_asma_number.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/green_base" />
<corners android:bottomRightRadius="10dp" />
</shape>
11 changes: 11 additions & 0 deletions app/src/main/res/drawable/ic_asmaul_husna.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:tint="@color/black"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="@android:color/white"
android:pathData="M11,7h6v2h-6zM11,11h6v2h-6zM11,15h6v2h-6zM7,7h2v2L7,9zM7,11h2v2L7,13zM7,15h2v2L7,17zM20.1,3L3.9,3c-0.5,0 -0.9,0.4 -0.9,0.9v16.2c0,0.4 0.4,0.9 0.9,0.9h16.2c0.4,0 0.9,-0.5 0.9,-0.9L21,3.9c0,-0.5 -0.5,-0.9 -0.9,-0.9zM19,19L5,19L5,5h14v14z" />
</vector>
54 changes: 54 additions & 0 deletions app/src/main/res/layout-sw600dp/fragment_asmaul_husna.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".presentation.view.asmaul.AsmaulHusnaFragment">

<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent">

<ImageView
android:id="@+id/iv_back"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="start"
android:layout_marginHorizontal="16dp"
android:src="@drawable/ic_back"
app:tint="@color/black"
tools:ignore="ContentDescription" />

<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:fontFamily="@font/poppins_bold"
android:includeFontPadding="false"
android:paddingTop="1dp"
android:text="@string/asmaul_husna"
android:textColor="@color/green_base"
android:textSize="24sp" />

</androidx.appcompat.widget.Toolbar>

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_asmaul_husna"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginHorizontal="10dp"
android:clipToPadding="false"
android:nestedScrollingEnabled="true"
android:overScrollMode="never"
android:paddingBottom="70dp"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar"
tools:layout_editor_absoluteX="10dp"
tools:listitem="@layout/item_list_asmaul_husna" />

</androidx.constraintlayout.widget.ConstraintLayout>
10 changes: 0 additions & 10 deletions app/src/main/res/layout-sw600dp/fragment_doa.xml
Original file line number Diff line number Diff line change
Expand Up @@ -71,16 +71,6 @@
app:layout_constraintTop_toBottomOf="@id/cl_header"
tools:listitem="@layout/item_list_doa" />

<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="80dp"
android:layout_height="80dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_header" />

<include
android:id="@+id/empty_state"
layout="@layout/empty_layout"
Expand Down
82 changes: 82 additions & 0 deletions app/src/main/res/layout-sw600dp/item_list_asmaul_husna.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
app:cardCornerRadius="10dp">

<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:paddingBottom="16dp"
android:layout_height="wrap_content">

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_asma_number"
android:layout_width="100dp"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<TextView
android:id="@+id/tv_asma_number"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_asma_number"
android:gravity="center"
android:paddingHorizontal="6dp"
android:textColor="@color/white_always"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="1" />

</androidx.constraintlayout.widget.ConstraintLayout>

<TextView
android:id="@+id/tv_asma_name_arabic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:fontFamily="@font/amiri_bold"
android:includeFontPadding="false"
android:textColor="@color/black"
android:textSize="42sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/cl_asma_number"
tools:text="الرَّحْمَنُ" />

<TextView
android:id="@+id/tv_asma_name_latin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:fontFamily="@font/poppins_medium"
android:textColor="@color/black"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_asma_name_arabic"
tools:text="Ar-Rahman" />

<TextView
android:id="@+id/tv_asma_name_meaning"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:fontFamily="@font/poppins_medium"
android:textAlignment="center"
android:textColor="@color/black"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_asma_name_latin"
tools:text="Yang Maha Pengasih" />

</androidx.constraintlayout.widget.ConstraintLayout>

</androidx.cardview.widget.CardView>
Loading

0 comments on commit edf2cd9

Please sign in to comment.