Shop module api integration. Created views: ShopActivity, ShopFragment1, ShopFragment2, ShopFragment3.

Showing all three list and caching them in viwemodel
This commit is contained in:
ADITYA
2024-07-23 00:32:09 +05:30
parent be30e88638
commit 0def2ae3a5
18 changed files with 1191 additions and 3 deletions

1
.idea/.name generated Normal file
View File

@@ -0,0 +1 @@
Woka

18
.idea/deploymentTargetSelector.xml generated Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
<DropdownSelection timestamp="2024-07-22T14:33:25.951780500Z">
<Target type="DEFAULT_BOOT">
<handle>
<DeviceId pluginId="PhysicalDevice" identifier="serial=RZCW41EJRPN" />
</handle>
</Target>
</DropdownSelection>
<DialogSelection />
</SelectionState>
</selectionStates>
</component>
</project>

263
.idea/other.xml generated Normal file
View File

@@ -0,0 +1,263 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="direct_access_persist.xml">
<option name="deviceSelectionList">
<list>
<PersistentDeviceSelectionData>
<option name="api" value="27" />
<option name="brand" value="DOCOMO" />
<option name="codename" value="F01L" />
<option name="id" value="F01L" />
<option name="manufacturer" value="FUJITSU" />
<option name="name" value="F-01L" />
<option name="screenDensity" value="360" />
<option name="screenX" value="720" />
<option name="screenY" value="1280" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="28" />
<option name="brand" value="DOCOMO" />
<option name="codename" value="SH-01L" />
<option name="id" value="SH-01L" />
<option name="manufacturer" value="SHARP" />
<option name="name" value="AQUOS sense2 SH-01L" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2160" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="31" />
<option name="brand" value="samsung" />
<option name="codename" value="a51" />
<option name="id" value="a51" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy A51" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="akita" />
<option name="id" value="akita" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="b0q" />
<option name="id" value="b0q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S22 Ultra" />
<option name="screenDensity" value="600" />
<option name="screenX" value="1440" />
<option name="screenY" value="3088" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="32" />
<option name="brand" value="google" />
<option name="codename" value="bluejay" />
<option name="id" value="bluejay" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="29" />
<option name="brand" value="samsung" />
<option name="codename" value="crownqlteue" />
<option name="id" value="crownqlteue" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Note9" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2220" />
<option name="screenY" value="1080" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="dm3q" />
<option name="id" value="dm3q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S23 Ultra" />
<option name="screenDensity" value="600" />
<option name="screenX" value="1440" />
<option name="screenY" value="3088" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="felix" />
<option name="id" value="felix" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="felix_camera" />
<option name="id" value="felix_camera" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold (Camera-enabled)" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="gts8uwifi" />
<option name="id" value="gts8uwifi" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Tab S8 Ultra" />
<option name="screenDensity" value="320" />
<option name="screenX" value="1848" />
<option name="screenY" value="2960" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="husky" />
<option name="id" value="husky" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8 Pro" />
<option name="screenDensity" value="390" />
<option name="screenX" value="1008" />
<option name="screenY" value="2244" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="motorola" />
<option name="codename" value="java" />
<option name="id" value="java" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="G20" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="lynx" />
<option name="id" value="lynx" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="31" />
<option name="brand" value="google" />
<option name="codename" value="oriole" />
<option name="id" value="oriole" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="panther" />
<option name="id" value="panther" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="31" />
<option name="brand" value="samsung" />
<option name="codename" value="q2q" />
<option name="id" value="q2q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold3" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1768" />
<option name="screenY" value="2208" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="q5q" />
<option name="id" value="q5q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold5" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1812" />
<option name="screenY" value="2176" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="google" />
<option name="codename" value="r11" />
<option name="id" value="r11" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Watch" />
<option name="screenDensity" value="320" />
<option name="screenX" value="384" />
<option name="screenY" value="384" />
<option name="type" value="WEAR_OS" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="google" />
<option name="codename" value="redfin" />
<option name="id" value="redfin" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 5" />
<option name="screenDensity" value="440" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="shiba" />
<option name="id" value="shiba" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="tangorpro" />
<option name="id" value="tangorpro" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Tablet" />
<option name="screenDensity" value="320" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="29" />
<option name="brand" value="samsung" />
<option name="codename" value="x1q" />
<option name="id" value="x1q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S20" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1440" />
<option name="screenY" value="3200" />
</PersistentDeviceSelectionData>
</list>
</option>
</component>
</project>

View File

@@ -17,10 +17,13 @@
android:supportsRtl="true"
android:theme="@style/Theme.Woka"
tools:targetApi="31">
<activity
android:name=".shop.views.ShopActivity"
android:exported="false" />
<activity
android:name=".webseries.views.WebSeriesActivity"
android:exported="false"
android:screenOrientation="portrait" />
android:screenOrientation="portrait" />
<activity
android:name=".karaoke.player.KaraokePlayerActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode|fontScale"

View File

@@ -29,6 +29,7 @@ import com.woka.karaoke.views.KaraokeActivity
import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.networking.ApiResult
import com.woka.players.views.LiveStreamPlayerActivity
import com.woka.shop.views.ShopActivity
import com.woka.userPreference.UserType
import com.woka.utils.hide
import com.woka.utils.scaleAnimate
@@ -200,6 +201,12 @@ class Home1Fragment : Fragment(), Listener {
startActivity(Intent(it, KaraokeActivity::class.java))
}
}
shop.setOnClickListener {
activity?.let {
startActivity(Intent(it, ShopActivity::class.java))
}
}
}
}

View File

@@ -0,0 +1,59 @@
package com.woka.shop.adapters
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.AsyncDifferConfig
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListAdapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.woka.databinding.CategoryViweHolderBinding
import com.woka.shop.models.BaseCategory
import java.util.concurrent.Executors
class CategoryAdapter:
ListAdapter<BaseCategory, CategoryAdapter.CategoryViewHolder>(
DIFF_CONFIG
) {
companion object {
private val DIFF_UTIL = object : DiffUtil.ItemCallback<BaseCategory>() {
override fun areItemsTheSame(oldItem: BaseCategory, newItem: BaseCategory): Boolean =
oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: BaseCategory, newItem: BaseCategory): Boolean =
oldItem == newItem
}
private val DIFF_CONFIG = AsyncDifferConfig.Builder(DIFF_UTIL)
.setBackgroundThreadExecutor(Executors.newSingleThreadExecutor())
.build()
}
inner class CategoryViewHolder(val binding: CategoryViweHolderBinding) :
ViewHolder(binding.root)
var onCategoryClickListener: ((BaseCategory) -> Unit)? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CategoryViewHolder {
return CategoryViewHolder(
CategoryViweHolderBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: CategoryViewHolder, position: Int) {
val category = getItem(holder.absoluteAdapterPosition)
holder.binding.apply {
image.loadImage(category.imageUrl)
title.text = category.title
holder.binding.root.setOnClickListener {
onCategoryClickListener?.invoke(category)
}
}
}
}

View File

@@ -0,0 +1,7 @@
package com.woka.shop.models
data class BaseCategory(
val id: Int?,
val imageUrl: String?,
val title: String?
)

View File

@@ -1,6 +1,6 @@
package com.woka.shop.models.subcategorylisting
data class SubCategoryResponse(
val subCategory: List<SubCategoryData?>?,
val result: List<SubCategoryData?>?,
val total_records: Int?
)

View File

@@ -63,6 +63,10 @@ class ShopViewModel: ViewModel() {
}
}
fun clearCategoryLiveData(){
_categoryLiveData.postValue(ApiResult.Loading())
}
// sub category listing
private val _subcategoryLiveData = MutableLiveData<ApiResult<MutableList<SubCategoryData>>>()
val subcategoryLiveData: LiveData<ApiResult<MutableList<SubCategoryData>>>
@@ -82,7 +86,7 @@ class ShopViewModel: ViewModel() {
is ApiResult.Error -> _subcategoryLiveData.postValue(ApiResult.Error(response.errorMessage, response.error))
is ApiResult.Loading -> {}
is ApiResult.Success -> {
response.data?.subCategory?.filterNotNull()?.toMutableList()?.let {
response.data?.result?.filterNotNull()?.toMutableList()?.let {
subcategoryDataMap[categoryId] = it
_subcategoryLiveData.postValue(ApiResult.Success(it))
}
@@ -90,4 +94,8 @@ class ShopViewModel: ViewModel() {
}
}
}
fun clearSubCategoryLiveData(){
_subcategoryLiveData.postValue(ApiResult.Loading())
}
}

View File

@@ -0,0 +1,51 @@
package com.woka.shop.views
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.woka.R
import com.woka.databinding.ActivityShopBinding
import com.woka.shop.views.fragments.ShopFragment1
import com.woka.utils.WokaBaseActivity
class ShopActivity : WokaBaseActivity() {
private lateinit var binding: ActivityShopBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
binding = ActivityShopBinding.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
}
window.navigationBarColor = getColor(R.color.orders_bg)
supportFragmentManager.beginTransaction()
.add(R.id.fcv_shop, ShopFragment1.newInstance())
.commit()
initViews()
clickEvents()
}
private fun initViews(){
binding.apply {
title.text = getString(R.string.shop)
}
}
private fun clickEvents(){
binding.apply {
backBtn.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
}
}
}

View File

@@ -0,0 +1,113 @@
package com.woka.shop.views.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.databinding.FragmentShop1Binding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.CategoryAdapter
import com.woka.shop.models.BaseCategory
import com.woka.shop.viewmodels.ShopViewModel
import com.woka.utils.hide
import com.woka.utils.show
class ShopFragment1 private constructor(): Fragment() {
private lateinit var binding: FragmentShop1Binding
private lateinit var viewModel: ShopViewModel
private lateinit var adapter: CategoryAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentShop1Binding.inflate(inflater, container, false)
viewModel = ViewModelProvider(requireActivity())[ShopViewModel::class.java]
adapter = CategoryAdapter()
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
clickEvents()
setObservers()
if (!viewModel.superCategoryLiveData.isInitialized ||
viewModel.superCategoryLiveData.value !is ApiResult.Success) {
viewModel.loadSuperCategories()
}
}
private fun initViews() {
binding.apply {
rvSuperCategory.adapter = adapter
}
}
private fun clickEvents() {
binding.apply {
retryButton.setOnClickListener {
viewModel.loadSuperCategories()
}
adapter.onCategoryClickListener = {
parentFragmentManager.beginTransaction()
.replace(R.id.fcv_shop, ShopFragment2.newInstance("${it.id}"))
.addToBackStack(null)
.commitAllowingStateLoss()
}
}
}
private fun setObservers() {
with(binding) {
viewModel.superCategoryLiveData.observe(viewLifecycleOwner) {
when (it) {
is ApiResult.Error -> {
rvSuperCategory.hide()
shimmer.hide()
errorView.show()
}
is ApiResult.Loading -> {
rvSuperCategory.hide()
shimmer.show()
errorView.hide()
}
is ApiResult.Success -> {
it.data?.let { categoryList ->
adapter.submitList(categoryList.map { category ->
BaseCategory(
category.id,
category.super_category_thumbnail,
category.super_category_name
)
}
) {
rvSuperCategory.show()
shimmer.hide()
errorView.hide()
}
}
}
}
}
}
}
companion object {
@JvmStatic
fun newInstance() = ShopFragment1()
}
}

View File

@@ -0,0 +1,114 @@
package com.woka.shop.views.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.woka.R
import com.woka.databinding.FragmentShop2Binding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.CategoryAdapter
import com.woka.shop.models.BaseCategory
import com.woka.shop.viewmodels.ShopViewModel
import com.woka.utils.hide
import com.woka.utils.show
class ShopFragment2 private constructor(private val superCategoryId: String): Fragment() {
private lateinit var binding: FragmentShop2Binding
private lateinit var viewModel: ShopViewModel
private lateinit var adapter: CategoryAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentShop2Binding.inflate(inflater, container, false)
viewModel = ViewModelProvider(requireActivity())[ShopViewModel::class.java]
adapter = CategoryAdapter()
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
clickEvents()
setObservers()
viewModel.loadCategories(superCategoryId)
}
override fun onDestroyView() {
super.onDestroyView()
viewModel.clearCategoryLiveData()
}
private fun initViews() {
binding.apply {
rvCategory.adapter = adapter
}
}
private fun clickEvents() {
binding.apply {
retryButton.setOnClickListener {
viewModel.loadCategories(superCategoryId)
}
adapter.onCategoryClickListener = {
parentFragmentManager.beginTransaction()
.replace(R.id.fcv_shop, ShopFragment3.newInstance("${it.id}"))
.addToBackStack(null)
.commitAllowingStateLoss()
}
}
}
private fun setObservers() {
with(binding) {
viewModel.categoryLiveData.observe(viewLifecycleOwner) {
when (it) {
is ApiResult.Error -> {
rvCategory.hide()
shimmer.hide()
errorView.show()
}
is ApiResult.Loading -> {
rvCategory.hide()
shimmer.show()
errorView.hide()
}
is ApiResult.Success -> {
it.data?.let { categoryList ->
adapter.submitList(categoryList.map { category ->
BaseCategory(
category.id,
category.category_thumbnail,
category.category_name
)
}
) {
rvCategory.show()
shimmer.hide()
errorView.hide()
}
}
}
}
}
}
}
companion object {
@JvmStatic
fun newInstance(superCategoryId: String) = ShopFragment2(superCategoryId)
}
}

View File

@@ -0,0 +1,110 @@
package com.woka.shop.views.fragments
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.woka.databinding.FragmentShop3Binding
import com.woka.networking.ApiResult
import com.woka.shop.adapters.CategoryAdapter
import com.woka.shop.models.BaseCategory
import com.woka.shop.viewmodels.ShopViewModel
import com.woka.utils.hide
import com.woka.utils.show
class ShopFragment3 private constructor(private val categoryId: String): Fragment() {
private lateinit var binding: FragmentShop3Binding
private lateinit var viewModel: ShopViewModel
private lateinit var adapter: CategoryAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentShop3Binding.inflate(inflater, container, false)
viewModel = ViewModelProvider(requireActivity())[ShopViewModel::class.java]
adapter = CategoryAdapter()
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
initViews()
clickEvents()
setObservers()
viewModel.loadSubCategories(categoryId)
}
override fun onDestroyView() {
super.onDestroyView()
viewModel.clearSubCategoryLiveData()
}
private fun initViews() {
binding.apply {
rvCategory.adapter = adapter
}
}
private fun clickEvents() {
binding.apply {
retryButton.setOnClickListener {
viewModel.loadSubCategories(categoryId)
}
adapter.onCategoryClickListener = {
}
}
}
private fun setObservers() {
with(binding) {
viewModel.subcategoryLiveData.observe(viewLifecycleOwner) {
when (it) {
is ApiResult.Error -> {
rvCategory.hide()
shimmer.hide()
errorView.show()
}
is ApiResult.Loading -> {
rvCategory.hide()
shimmer.show()
errorView.hide()
}
is ApiResult.Success -> {
it.data?.let { categoryList ->
adapter.submitList(categoryList.map { category ->
BaseCategory(
category.id,
category.sub_category_thumbnail,
category.sub_category_name
)
}
) {
rvCategory.show()
shimmer.hide()
errorView.hide()
}
}
}
}
}
}
}
companion object {
@JvmStatic
fun newInstance(categoryId: String) = ShopFragment3(categoryId)
}
}

View File

@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/grad_my_list"
tools:context=".shop.views.ShopActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:background="@android:color/transparent"
android:paddingEnd="5dp"
android:paddingStart="15dp">
<ImageView
android:id="@+id/back_btn"
android:layout_width="@dimen/_25sdp"
android:layout_height="@dimen/_25sdp"
android:contentDescription="@string/image"
android:src="@drawable/ic_arrow_back_full"
android:layout_centerVertical="true"
/>
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_14ssp"
android:maxLines="1"
android:ellipsize="end"
android:layout_marginStart="15dp"
android:layout_centerVertical="true"
android:layout_toEndOf="@id/back_btn"
/>
<RelativeLayout
android:layout_width="@dimen/_37sdp"
android:layout_height="@dimen/_37sdp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:elevation="5dp">
<com.woka.utils.PressableImageView
android:id="@+id/cart"
android:visibility="visible"
android:layout_width="@dimen/_30sdp"
android:layout_height="@dimen/_30sdp"
android:contentDescription="@string/image"
android:src="@drawable/img_notification"
android:scaleType="fitXY"
android:layout_centerVertical="true"
/>
<androidx.cardview.widget.CardView
android:id="@+id/cart_count_view"
android:visibility="gone"
android:layout_width="17dp"
android:layout_height="17dp"
android:layout_alignParentEnd="true"
app:cardBackgroundColor="@android:color/holo_red_light"
app:cardCornerRadius="8dp"
>
<TextView
android:id="@+id/cart_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="9"
android:textColor="@color/white"
android:fontFamily="@font/exo_2"
android:textSize="11sp"
android:singleLine="true"
android:layout_gravity="center"
android:gravity="center"
android:textAlignment="center"
/>
</androidx.cardview.widget.CardView>
</RelativeLayout>
</RelativeLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fcv_shop"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar"
/>
</LinearLayout>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginHorizontal="10dp"
android:layout_marginVertical="5dp"
app:cardCornerRadius="5dp"
app:cardBackgroundColor="@color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="10dp"
android:orientation="vertical">
<com.woka.utils.AdiImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="160dp"
/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/color_primary"
android:textSize="14sp"
android:textAlignment="center"
android:maxLines="1"
android:ellipsize="end"
android:layout_margin="10dp"
/>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/orders_bg"
tools:context=".shop.views.fragments.ShopFragment2">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_super_category"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/category_viwe_holder"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
/>
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmer"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:shimmer_auto_start="true"
app:shimmer_duration="1500"
app:shimmer_highlight_alpha="0.5">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<include layout="@layout/category_viwe_holder"/>
<include layout="@layout/category_viwe_holder"/>
<include layout="@layout/category_viwe_holder"/>
<include layout="@layout/category_viwe_holder"/>
</LinearLayout>
</ScrollView>
</com.facebook.shimmer.ShimmerFrameLayout>
<LinearLayout
android:id="@+id/error_view"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/something_went_wrong"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/color_primary"
android:textSize="@dimen/_14ssp"
/>
<Button
android:id="@+id/retry_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/retry"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_14ssp"
android:background="@drawable/round_bg_25"
android:backgroundTint="@color/game_grad_one"
android:layout_marginTop="10dp"
android:paddingHorizontal="30dp"
/>
</LinearLayout>
</RelativeLayout>

View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/orders_bg"
tools:context=".shop.views.fragments.ShopFragment2">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_category"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/category_viwe_holder"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
/>
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmer"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:shimmer_auto_start="true"
app:shimmer_duration="1500"
app:shimmer_highlight_alpha="0.5">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<include layout="@layout/category_viwe_holder"/>
<include layout="@layout/category_viwe_holder"/>
<include layout="@layout/category_viwe_holder"/>
<include layout="@layout/category_viwe_holder"/>
</LinearLayout>
</ScrollView>
</com.facebook.shimmer.ShimmerFrameLayout>
<LinearLayout
android:id="@+id/error_view"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/something_went_wrong"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/color_primary"
android:textSize="@dimen/_14ssp"
/>
<Button
android:id="@+id/retry_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/retry"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_14ssp"
android:background="@drawable/round_bg_25"
android:backgroundTint="@color/game_grad_one"
android:layout_marginTop="10dp"
android:paddingHorizontal="30dp"
/>
</LinearLayout>
</RelativeLayout>

View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/orders_bg"
tools:context=".shop.views.fragments.ShopFragment2">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_category"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/category_viwe_holder"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
/>
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmer"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:shimmer_auto_start="true"
app:shimmer_duration="1500"
app:shimmer_highlight_alpha="0.5">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<include layout="@layout/category_viwe_holder"/>
<include layout="@layout/category_viwe_holder"/>
<include layout="@layout/category_viwe_holder"/>
<include layout="@layout/category_viwe_holder"/>
</LinearLayout>
</ScrollView>
</com.facebook.shimmer.ShimmerFrameLayout>
<LinearLayout
android:id="@+id/error_view"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/something_went_wrong"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/color_primary"
android:textSize="@dimen/_14ssp"
/>
<Button
android:id="@+id/retry_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/retry"
android:fontFamily="@font/exo_2_bold"
android:textColor="@color/white"
android:textSize="@dimen/_14ssp"
android:background="@drawable/round_bg_25"
android:backgroundTint="@color/game_grad_one"
android:layout_marginTop="10dp"
android:paddingHorizontal="30dp"
/>
</LinearLayout>
</RelativeLayout>