diff --git a/app/build.gradle b/app/build.gradle
index 67f8662..83a6699 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,6 +66,7 @@ dependencies {
implementation 'me.relex:circleindicator:2.1.6'
implementation 'org.imaginativeworld.whynotimagecarousel:whynotimagecarousel:2.1.0'
implementation 'nl.joery.animatedbottombar:library:1.1.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
implementation 'com.google.android.exoplayer:exoplayer:2.14.2'
implementation 'com.google.android.exoplayer:exoplayer-core:2.14.2'
implementation 'com.google.android.exoplayer:exoplayer-dash:2.14.2'
diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json
new file mode 100644
index 0000000..b93a8b9
--- /dev/null
+++ b/app/release/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "id.blossom",
+ "variantName": "release",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-release.apk"
+ }
+ ],
+ "elementType": "File"
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6dd3116..6479095 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,22 +3,24 @@
xmlns:tools="http://schemas.android.com/tools">
-
-
-
-
+
+
diff --git a/app/src/main/java/id/blossom/data/api/NetworkService.kt b/app/src/main/java/id/blossom/data/api/NetworkService.kt
index fc13696..e833192 100644
--- a/app/src/main/java/id/blossom/data/api/NetworkService.kt
+++ b/app/src/main/java/id/blossom/data/api/NetworkService.kt
@@ -61,6 +61,7 @@ interface NetworkService {
@GET("luckyanime/properties/genre/{genreId}")
suspend fun getPropertiesGenreAnime(
@Path("genreId") genreId: String,
+ @Query("page") page: Int,
) : PropertyGenresAnimeResponse
// streaming
diff --git a/app/src/main/java/id/blossom/data/repository/anime/AnimeRepository.kt b/app/src/main/java/id/blossom/data/repository/anime/AnimeRepository.kt
index 91a3bb9..bb0392e 100644
--- a/app/src/main/java/id/blossom/data/repository/anime/AnimeRepository.kt
+++ b/app/src/main/java/id/blossom/data/repository/anime/AnimeRepository.kt
@@ -67,9 +67,9 @@ class AnimeRepository @Inject constructor(private val networkService: NetworkSer
}
}
- fun getResultGenresAnime(genres: String): Flow> {
+ fun getResultGenresAnime(genres: String, page: Int): Flow> {
return flow {
- emit(networkService.getPropertiesGenreAnime(genres))
+ emit(networkService.getPropertiesGenreAnime(genres, page))
}.map {
it.data!!
}
diff --git a/app/src/main/java/id/blossom/ui/activity/about/AboutActivity.kt b/app/src/main/java/id/blossom/ui/activity/about/AboutActivity.kt
new file mode 100644
index 0000000..5f12a50
--- /dev/null
+++ b/app/src/main/java/id/blossom/ui/activity/about/AboutActivity.kt
@@ -0,0 +1,70 @@
+package id.blossom.ui.activity.about
+
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import androidx.browser.customtabs.CustomTabsIntent
+import id.blossom.BuildConfig
+import id.blossom.databinding.ActivityAboutBinding
+import id.blossom.utils.Utils
+
+class AboutActivity : AppCompatActivity() {
+
+ lateinit var binding: ActivityAboutBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityAboutBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ Utils().setFullScreenFlag(window)
+ val customBrowser = CustomTabsIntent.Builder().build()
+
+ binding.tvVersion.text = "Version ${BuildConfig.VERSION_NAME}"
+ binding.llGithub.setOnClickListener {
+ customBrowser.launchUrl(this, Uri.parse("https://github.com/evnx32"))
+ }
+
+ binding.llApi.setOnClickListener {
+ customBrowser.launchUrl(
+ this,
+ Uri.parse("https://github.com/LuckyIndraEfendi/AnimeIndo-Rest-API")
+ )
+ }
+
+ binding.llLicense.setOnClickListener {
+ customBrowser.launchUrl(
+ this,
+ Uri.parse("https://www.apache.org/licenses/LICENSE-2.0"))
+ }
+
+ binding.llInstagram.setOnClickListener {
+ customBrowser.launchUrl(
+ this,
+ Uri.parse("https://www.instagram.com/dword_ptr/")
+ )
+ }
+
+ binding.llFacebook.setOnClickListener {
+ customBrowser.launchUrl(
+ this,
+ Uri.parse("https://www.facebook.com/KanMaruKun")
+ )
+ }
+
+ binding.llEmail.setOnClickListener {
+ val intent = Intent(Intent.ACTION_SENDTO)
+ intent.data = Uri.parse("mailto:evnx32@gmail.com")
+ startActivity(intent)
+ }
+
+ }
+
+ companion object {
+ fun start(context: Context) {
+ val intent = Intent(context, AboutActivity::class.java)
+ context.startActivity(intent)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/id/blossom/ui/activity/faq/FaqActivity.kt b/app/src/main/java/id/blossom/ui/activity/faq/FaqActivity.kt
new file mode 100644
index 0000000..c93b7a5
--- /dev/null
+++ b/app/src/main/java/id/blossom/ui/activity/faq/FaqActivity.kt
@@ -0,0 +1,29 @@
+package id.blossom.ui.activity.faq
+
+import android.content.Context
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import id.blossom.databinding.ActivityFaqBinding
+import id.blossom.utils.Utils
+
+class FaqActivity : AppCompatActivity() {
+
+ lateinit var binding: ActivityFaqBinding
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityFaqBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ Utils().setFullScreenFlag(window)
+
+ }
+
+
+ companion object {
+ fun start(context: Context) {
+ val intent = Intent(context, FaqActivity::class.java)
+ context.startActivity(intent)
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/id/blossom/ui/activity/genres/GenresResultActivity.kt b/app/src/main/java/id/blossom/ui/activity/genres/GenresResultActivity.kt
index 88713b3..a9908ab 100644
--- a/app/src/main/java/id/blossom/ui/activity/genres/GenresResultActivity.kt
+++ b/app/src/main/java/id/blossom/ui/activity/genres/GenresResultActivity.kt
@@ -54,7 +54,7 @@ class GenresResultActivity : AppCompatActivity() {
binding.tvSelectedGenre.text = "Hasil Pencarian Genre $genreName"
if (genreId != null) {
- genresResultViewModel.fetchGenresResultAnime(genreId)
+ genresResultViewModel.fetchGenresResultAnime(genreId, page)
} else {
Toast.makeText(this, "Genre Id is null", Toast.LENGTH_LONG).show()
}
@@ -65,42 +65,38 @@ class GenresResultActivity : AppCompatActivity() {
binding.animeResultGenreRv.setLoadingListener(object : XRecyclerView.LoadingListener {
override fun onRefresh() {
page = 1
- //genresResultViewModel.fetchGenresResultAnime(genreId.toString())
+ genresResultViewModel.fetchGenresResultAnime(genreId.toString(), page)
}
override fun onLoadMore() {
page++
- //scheduleViewModel.fetchScheduleAnime(page, queryDays.toString())
+ genresResultViewModel.fetchGenresResultAnime(genreId.toString(), page)
}
})
}
private fun setupObserver() {
- lifecycleScope.launch {
- repeatOnLifecycle(Lifecycle.State.STARTED) {
- genresResultViewModel.uiStateGenresResultAnime.collect {
- when (it) {
- is UiState.Success -> {
- binding.progressPropertiesGenre.visibility = View.GONE
- renderPropertiesGenre(it.data)
- }
- is UiState.Loading -> {
- binding.progressPropertiesGenre.visibility = View.VISIBLE
- }
- is UiState.Error -> {
- //Handle Error
- Toast.makeText(this@GenresResultActivity, it.message, Toast.LENGTH_LONG)
- .show()
- }
- }
+
+ genresResultViewModel.uiStateGenresResultAnime.observe(this) {
+ when (it) {
+ is UiState.Success -> {
+ binding.progressPropertiesGenre.visibility = View.GONE
+ renderPropertiesGenre(it.data)
+ }
+ is UiState.Loading -> {
+ binding.progressPropertiesGenre.visibility = View.VISIBLE
+ }
+ is UiState.Error -> {
+ //Handle Error
+ Toast.makeText(this@GenresResultActivity, it.message, Toast.LENGTH_LONG)
+ .show()
}
}
}
}
private fun renderPropertiesGenre(data: List) {
- genresResultAdapter.clearData()
genresResultAdapter.addData(data)
genresResultAdapter.notifyDataSetChanged()
}
@@ -116,7 +112,7 @@ class GenresResultActivity : AppCompatActivity() {
companion object {
- fun start(context : Context, genreId : String, genreName : String ){
+ fun start(context: Context, genreId: String, genreName: String) {
val intent = Intent(context, GenresResultActivity::class.java)
intent.putExtra("genreId", genreId)
intent.putExtra("genreName", genreName)
diff --git a/app/src/main/java/id/blossom/ui/activity/genres/GenresResultViewModel.kt b/app/src/main/java/id/blossom/ui/activity/genres/GenresResultViewModel.kt
index d6bef5c..b6fa0e7 100644
--- a/app/src/main/java/id/blossom/ui/activity/genres/GenresResultViewModel.kt
+++ b/app/src/main/java/id/blossom/ui/activity/genres/GenresResultViewModel.kt
@@ -1,5 +1,7 @@
package id.blossom.ui.activity.genres
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import id.blossom.data.model.anime.genres.result.PropertyGenresAnimeDataItem
@@ -13,17 +15,17 @@ import kotlinx.coroutines.launch
class GenresResultViewModel (private val animeRepository: AnimeRepository) : ViewModel() {
private val _uiStateGenresResultAnime =
- MutableStateFlow>>(UiState.Loading)
- val uiStateGenresResultAnime: StateFlow>> = _uiStateGenresResultAnime
+ MutableLiveData>>(UiState.Loading)
+ val uiStateGenresResultAnime: LiveData>> = _uiStateGenresResultAnime
init {
}
- fun fetchGenresResultAnime(genres : String) {
+ fun fetchGenresResultAnime(genres : String, page : Int) {
viewModelScope.launch {
- animeRepository.getResultGenresAnime(genres)
+ animeRepository.getResultGenresAnime(genres,page)
.catch { e ->
_uiStateGenresResultAnime.value = UiState.Error(e.toString())
}
diff --git a/app/src/main/java/id/blossom/ui/activity/showall/adapter/ShowAllOngoingAnimeAdapter.kt b/app/src/main/java/id/blossom/ui/activity/showall/adapter/ShowAllOngoingAnimeAdapter.kt
index 495046b..1e0eaa5 100644
--- a/app/src/main/java/id/blossom/ui/activity/showall/adapter/ShowAllOngoingAnimeAdapter.kt
+++ b/app/src/main/java/id/blossom/ui/activity/showall/adapter/ShowAllOngoingAnimeAdapter.kt
@@ -21,7 +21,8 @@ class ShowAllOngoingAnimeAdapter (
RecyclerView.ViewHolder(binding.root) {
fun bind(value: OngoingAnimeDataItem) {
binding.animeTitle.text = value.title.toString()
- binding.llAnimeRate.visibility = View.GONE
+ binding.animeRateDetail.text = value.episode.toString()
+ binding.animeRateIcon.visibility = View.GONE
Glide.with(binding.animeImageView.context).load(value.image)
.diskCacheStrategy(DiskCacheStrategy.ALL).into(binding.animeImageView)
itemView.setOnClickListener {
diff --git a/app/src/main/java/id/blossom/ui/activity/stream/StreamAnimeActivity.kt b/app/src/main/java/id/blossom/ui/activity/stream/StreamAnimeActivity.kt
index 519d8d7..ac2cb0d 100644
--- a/app/src/main/java/id/blossom/ui/activity/stream/StreamAnimeActivity.kt
+++ b/app/src/main/java/id/blossom/ui/activity/stream/StreamAnimeActivity.kt
@@ -54,13 +54,13 @@ class StreamAnimeActivity : AppCompatActivity() {
lateinit var binding: ActivityStreamBinding
private var exoPlayer: SimpleExoPlayer? = null
- lateinit var videoSettingBinding : VideoSettingBinding
- lateinit var videoSettingDialogBinding : PopupVideoSettingCfgBinding
- lateinit var itemVideoSettingBinding : ItemVideoSettingCfgBinding
- private var userSettings : UserSettingsEntity? = null
- private var settingsBottomSheet : BottomSheetDialog? = null
-
- private var listVidQuality : List = listOf()
+ lateinit var videoSettingBinding: VideoSettingBinding
+ lateinit var videoSettingDialogBinding: PopupVideoSettingCfgBinding
+ lateinit var itemVideoSettingBinding: ItemVideoSettingCfgBinding
+ private var userSettings: UserSettingsEntity? = null
+ private var settingsBottomSheet: BottomSheetDialog? = null
+ private var savedDurationState = 0L
+ private var listVidQuality: List = listOf()
// ExoPlayer Components
private lateinit var fwdBtn: ImageView
@@ -80,6 +80,7 @@ class StreamAnimeActivity : AppCompatActivity() {
private var _selectedVidQuality = ""
private var _selectedVidSpeed = ""
+
@Inject
lateinit var streamAnimeViewModel: StreamAnimeViewModel
@@ -137,12 +138,12 @@ class StreamAnimeActivity : AppCompatActivity() {
streamAnimeViewModel.savedStateDuration = exoPlayer!!.currentPosition
val orientation: Int = this@StreamAnimeActivity.resources.configuration.orientation
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
- fillScreen.visibility = View.VISIBLE
+ //fillScreen.visibility = View.VISIBLE
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
binding.playerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT
binding.playerView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
} else {
- fillScreen.visibility = View.GONE
+ //fillScreen.visibility = View.GONE
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
binding.playerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT
binding.playerView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
@@ -171,7 +172,7 @@ class StreamAnimeActivity : AppCompatActivity() {
}
}
- streamAnimeViewModel.uiStateUserSetting.observe(this@StreamAnimeActivity){
+ streamAnimeViewModel.uiStateUserSetting.observe(this@StreamAnimeActivity) {
if (it != null) {
userSettings = it
} else {
@@ -188,8 +189,8 @@ class StreamAnimeActivity : AppCompatActivity() {
}
- private fun renderEpisodeUrlList(list: List, quality : String) {
- val selectedResolution = if (quality != ""){
+ private fun renderEpisodeUrlList(list: List, quality: String) {
+ val selectedResolution = if (quality != "") {
quality
} else {
userSettings!!.vidQuality
@@ -203,7 +204,9 @@ class StreamAnimeActivity : AppCompatActivity() {
list.map {
if (it.size == selectedResolution) {
setupPlayer(it.episode!!)
+ return@map
}
+ setupPlayer(list[0].episode!!)
}
}
}
@@ -231,6 +234,8 @@ class StreamAnimeActivity : AppCompatActivity() {
exoPlayer?.playWhenReady = true
exoTitle.text = animeTitle
+
+
streamAnimeViewModel.uiStateCurrentWatch.observe(this) { data ->
if (data == null) {
streamAnimeViewModel.setSavedStateDuration(
@@ -248,18 +253,35 @@ class StreamAnimeActivity : AppCompatActivity() {
}
}
+ if (savedDurationState != 0L) {
+ exoPlayer!!.seekTo(savedDurationState)
+ }
exoPlayer?.addListener(object : Player.EventListener {
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
if (playbackState == Player.STATE_ENDED) {
Toast.makeText(
this@StreamAnimeActivity,
- "Video has ended",
+ "Video berakhir",
Toast.LENGTH_LONG
).show()
+
+ if (exoPlayer != null) {
+ val duration = exoPlayer!!.duration
+ val currentPosition = exoPlayer!!.currentPosition
+ lifecycleScope.launch {
+ if (currentPosition > 0) {
+ streamAnimeViewModel.updateSavedStateDuration(
+ true,
+ duration,
+ currentPosition,
+ episodeId
+ )
+ }
+ }
+ }
}
}
})
-
handler.post(updateRunnable)
}
}
@@ -298,14 +320,35 @@ class StreamAnimeActivity : AppCompatActivity() {
override fun onBackPressed() {
- super.onBackPressed()
if (exoPlayer != null) {
-
if (exoPlayer!!.isPlaying) {
streamAnimeViewModel.savedStateDuration = exoPlayer!!.currentPosition
exoPlayer?.playWhenReady = false
}
}
+
+ val orientation = resources.configuration.orientation
+
+ if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+ val duration = exoPlayer!!.duration
+ val currentPosition = exoPlayer!!.currentPosition
+ lifecycleScope.launch {
+ if (currentPosition > 0) {
+ streamAnimeViewModel.updateSavedStateDuration(
+ true,
+ duration,
+ currentPosition,
+ episodeId
+ )
+ }
+ }
+ super.onBackPressed()
+
+ } else {
+ requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
+ binding.playerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIT
+ binding.playerView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN
+ }
}
override fun onPause() {
@@ -377,20 +420,19 @@ class StreamAnimeActivity : AppCompatActivity() {
}
-
- private fun showSettingVideo(){
+ private fun showSettingVideo() {
settingsBottomSheet = BottomSheetDialog(this)
videoSettingBinding = VideoSettingBinding.inflate(layoutInflater)
settingsBottomSheet!!.setContentView(videoSettingBinding.root)
- if (_selectedVidQuality != ""){
+ if (_selectedVidQuality != "") {
videoSettingBinding.tvVideoQuality.text = _selectedVidQuality
} else {
videoSettingBinding.tvVideoQuality.text = userSettings!!.vidQuality
}
- if (_selectedVidSpeed != ""){
+ if (_selectedVidSpeed != "") {
videoSettingBinding.tvVideoSpeed.text = _selectedVidSpeed
} else {
videoSettingBinding.tvVideoSpeed.text = "1.0x"
@@ -411,6 +453,7 @@ class StreamAnimeActivity : AppCompatActivity() {
settingsBottomSheet!!.show()
}
+
private fun showConfig(cfg: Int) {
val popupDialog = Dialog(this)
@@ -432,10 +475,15 @@ class StreamAnimeActivity : AppCompatActivity() {
_selectedVidQuality = quality.size.toString()
videoSettingBinding.tvVideoQuality.text = quality.size
settingsBottomSheet!!.dismiss()
+ saveStateDuration = exoPlayer!!.currentPosition
exoPlayer?.release()
renderEpisodeUrlList(listVidQuality, quality.size.toString())
- Toast.makeText(this@StreamAnimeActivity, "Video Quality ${quality.size}", Toast.LENGTH_SHORT).show()
+ Toast.makeText(
+ this@StreamAnimeActivity,
+ "Video Quality ${quality.size}",
+ Toast.LENGTH_SHORT
+ ).show()
}
videoSettingDialogBinding.llItemVideoSettingCfg.addView(itemBinding.root)
@@ -452,8 +500,13 @@ class StreamAnimeActivity : AppCompatActivity() {
popupDialog.dismiss()
_selectedVidSpeed = speed.toString()
settingsBottomSheet!!.dismiss()
- changeVideoSpeed(speed)
- Toast.makeText(this@StreamAnimeActivity, "Video Speed $speed", Toast.LENGTH_SHORT).show()
+ exoPlayer?.playbackParameters = PlaybackParameters(speed)
+
+ Toast.makeText(
+ this@StreamAnimeActivity,
+ "Video Speed $speed",
+ Toast.LENGTH_SHORT
+ ).show()
}
videoSettingDialogBinding.llItemVideoSettingCfg.addView(itemBinding.root)
@@ -462,11 +515,4 @@ class StreamAnimeActivity : AppCompatActivity() {
}
popupDialog.show()
}
-
-
- fun changeVideoSpeed(speed: Float) {
- exoPlayer?.playbackParameters = PlaybackParameters(speed)
- }
-
-
}
\ No newline at end of file
diff --git a/app/src/main/java/id/blossom/ui/fragment/home/HomeFragment.kt b/app/src/main/java/id/blossom/ui/fragment/home/HomeFragment.kt
index 46f58d3..a9a71bc 100644
--- a/app/src/main/java/id/blossom/ui/fragment/home/HomeFragment.kt
+++ b/app/src/main/java/id/blossom/ui/fragment/home/HomeFragment.kt
@@ -18,6 +18,8 @@ import id.blossom.databinding.FragmentHomeBinding
import id.blossom.di.component.DaggerActivityComponent
import id.blossom.di.module.ActivityModule
import id.blossom.ui.MainActivity
+import id.blossom.ui.activity.about.AboutActivity
+import id.blossom.ui.activity.faq.FaqActivity
import id.blossom.ui.activity.showall.ShowAllAnimeActivity
import id.blossom.ui.base.UiState
import id.blossom.ui.fragment.home.adapter.GenresAnimeAdapter
@@ -88,6 +90,14 @@ class HomeFragment : Fragment() {
ShowAllAnimeActivity.start(requireContext(), "recent")
}
+ binding.clBannerPengumuman.setOnClickListener {
+ AboutActivity.start(requireContext())
+ }
+
+ binding.clBannerFaq.setOnClickListener {
+ FaqActivity.start(requireContext())
+ }
+
binding.tvLihatSemuaOngoingAnime.setOnClickListener {
ShowAllAnimeActivity.start(requireContext(), "ongoing")
}
diff --git a/app/src/main/res/drawable/banner_2.png b/app/src/main/res/drawable/banner_2.png
new file mode 100644
index 0000000..27514e4
Binary files /dev/null and b/app/src/main/res/drawable/banner_2.png differ
diff --git a/app/src/main/res/drawable/fluent_pause_28_regular.xml b/app/src/main/res/drawable/fluent_pause_28_regular.xml
index 9dbd5b3..f680507 100644
--- a/app/src/main/res/drawable/fluent_pause_28_regular.xml
+++ b/app/src/main/res/drawable/fluent_pause_28_regular.xml
@@ -1,6 +1,6 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_faq.xml b/app/src/main/res/layout/activity_faq.xml
new file mode 100644
index 0000000..4a7213b
--- /dev/null
+++ b/app/src/main/res/layout/activity_faq.xml
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_genres_result.xml b/app/src/main/res/layout/activity_genres_result.xml
index 4960597..cc9b1ee 100644
--- a/app/src/main/res/layout/activity_genres_result.xml
+++ b/app/src/main/res/layout/activity_genres_result.xml
@@ -1,82 +1,87 @@
-
-
-
+
+
-
+ android:layout_height="70dp"
+ app:mwhCloseColor="@color/colorPrimary"
+ app:mwhStartColor="@color/white" />
-
+
-
+
+
-
-
+
-
+
+
+
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_show_all_anime.xml b/app/src/main/res/layout/activity_show_all_anime.xml
index b917ab1..a65a19d 100644
--- a/app/src/main/res/layout/activity_show_all_anime.xml
+++ b/app/src/main/res/layout/activity_show_all_anime.xml
@@ -57,7 +57,16 @@
-
+
+ app:layout_constraintTop_toBottomOf="@+id/divider" />
+ app:layout_constraintTop_toBottomOf="@+id/all_anime_rv" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 076d401..499f202 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -4,246 +4,399 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
-
+
+
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+
-
-
-
-
- />
-
-
-
-
-
-
-
+ />
+
-
-
+
+
+
+
+
+
+
+
+ android:orientation="horizontal">
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/search_anime" />
+
+
+
+
+
+
-
-
-
+ android:layout_gravity="center"
+ android:layout_marginEnd="10dp"
+ android:layout_marginBottom="10dp"
+ android:text="Lihat Semua"
+ android:textColor="@color/colorPrimary"
+ android:textSize="15sp"
+ android:textStyle="bold" />
-
+ android:layout_gravity="center" />
-
-
-
-
-
-
-
-
+
-
+
-
+
+ android:orientation="horizontal">
-
-
-
-
-
-
-
+
+
+ android:layout_gravity="center"
+ android:layout_marginEnd="10dp"
+ android:layout_marginBottom="10dp"
+ android:text="Lihat Semua"
+ android:textColor="@color/colorPrimary"
+ android:textSize="15sp"
+ android:textStyle="bold" />
+
+
+
-
+
-
-
+
+
diff --git a/app/src/main/res/layout/item_anime_holder_full.xml b/app/src/main/res/layout/item_anime_holder_full.xml
index 4370e8d..69948f3 100644
--- a/app/src/main/res/layout/item_anime_holder_full.xml
+++ b/app/src/main/res/layout/item_anime_holder_full.xml
@@ -57,6 +57,7 @@
android:textColor="@color/white" />
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index ca82bfb..f35c3a0 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -13,6 +13,7 @@
- ?attr/colorPrimaryVariant
- @style/CustomBottomSheetDialog
+ - @style/CustomBottomSheet
- @font/uni_neue_bold_full