From 27be75d83153d77f37521f3ec07239d8845b0c78 Mon Sep 17 00:00:00 2001 From: AdityaGaikwad Date: Thu, 13 Jun 2024 21:08:35 +0530 Subject: [PATCH] NotificationsActivity.kt creation and notification api integration FM radio webview implementation MyList Fragment creation and api integration. Worked on navigation and status bar color handling between screens. WebSeriesAdapter and showed first list. back button handling --- app/src/main/AndroidManifest.xml | 7 +- app/src/main/java/com/woka/home/FMActivity.kt | 73 ++++++ .../main/java/com/woka/home/HomeActivity.kt | 15 +- .../com/woka/home/fragments/Home1Fragment.kt | 28 +- .../com/woka/home/fragments/MyListFragment.kt | 62 ++++- .../com/woka/home/mylist/MyListRepository.kt | 24 ++ .../mylist/adapters/FavoriteViewHolder.kt | 6 + .../home/mylist/adapters/WebSeriesAdapter.kt | 53 ++++ .../com/woka/home/mylist/models/AudioData.kt | 24 ++ .../home/mylist/models/ContentMoreDetail.kt | 12 + .../home/mylist/models/ContentMoreDetailXX.kt | 11 + .../com/woka/home/mylist/models/GameData.kt | 22 ++ .../woka/home/mylist/models/MyListResponse.kt | 5 + .../com/woka/home/mylist/models/Result.kt | 9 + .../com/woka/home/mylist/models/ShowData.kt | 21 ++ .../home/mylist/models/SingKaraokeData.kt | 22 ++ .../home/notifications/NotificationAdapter.kt | 16 +- .../notifications/NotificationRepository.kt | 25 ++ .../notifications/NotificationsActivity.kt | 88 ++++--- .../java/com/woka/shop/MyOrdersActivity.kt | 1 - .../java/com/woka/userdata/UserApiService.kt | 8 + .../java/com/woka/userdata/UserRepository.kt | 14 + .../main/res/drawable/ic_heart_not_filled.xml | 5 + app/src/main/res/drawable/ic_heart_select.xml | 11 + .../main/res/layout/activity_fmactivity.xml | 44 ++++ .../res/layout/activity_notifications.xml | 86 +++++- app/src/main/res/layout/blog_view_holder.xml | 2 - app/src/main/res/layout/fav_view_holder.xml | 74 ++++++ app/src/main/res/layout/fragment_my_list.xml | 245 +++++++++++++++++- app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 5 + 31 files changed, 959 insertions(+), 60 deletions(-) create mode 100644 app/src/main/java/com/woka/home/FMActivity.kt create mode 100644 app/src/main/java/com/woka/home/mylist/MyListRepository.kt create mode 100644 app/src/main/java/com/woka/home/mylist/adapters/FavoriteViewHolder.kt create mode 100644 app/src/main/java/com/woka/home/mylist/adapters/WebSeriesAdapter.kt create mode 100644 app/src/main/java/com/woka/home/mylist/models/AudioData.kt create mode 100644 app/src/main/java/com/woka/home/mylist/models/ContentMoreDetail.kt create mode 100644 app/src/main/java/com/woka/home/mylist/models/ContentMoreDetailXX.kt create mode 100644 app/src/main/java/com/woka/home/mylist/models/GameData.kt create mode 100644 app/src/main/java/com/woka/home/mylist/models/MyListResponse.kt create mode 100644 app/src/main/java/com/woka/home/mylist/models/Result.kt create mode 100644 app/src/main/java/com/woka/home/mylist/models/ShowData.kt create mode 100644 app/src/main/java/com/woka/home/mylist/models/SingKaraokeData.kt create mode 100644 app/src/main/java/com/woka/home/notifications/NotificationRepository.kt create mode 100644 app/src/main/res/drawable/ic_heart_not_filled.xml create mode 100644 app/src/main/res/drawable/ic_heart_select.xml create mode 100644 app/src/main/res/layout/activity_fmactivity.xml create mode 100644 app/src/main/res/layout/fav_view_holder.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c142a81..03d66d1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,10 +15,15 @@ android:supportsRtl="true" android:theme="@style/Theme.Woka" tools:targetApi="31"> + + android:screenOrientation="portrait" /> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + window.navigationBarColor = Color.BLACK + + val webSettings: WebSettings = binding.webView.getSettings() + webSettings.javaScriptEnabled = true + + webSettings.allowFileAccess = false; + webSettings.allowContentAccess = false; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + webSettings.safeBrowsingEnabled = true + }; + + binding.webView.setWebViewClient(WebViewClient()) + + binding.webView.loadUrl(FM_URL) + + binding.root.setOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + } + + override fun onPause() { + super.onPause() + binding.webView.onPause() + } + + override fun onResume() { + super.onResume() + binding.webView.onResume() + } + + override fun onDestroy() { + super.onDestroy() + binding.webView.destroy() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/HomeActivity.kt b/app/src/main/java/com/woka/home/HomeActivity.kt index 1ae3a29..cced787 100644 --- a/app/src/main/java/com/woka/home/HomeActivity.kt +++ b/app/src/main/java/com/woka/home/HomeActivity.kt @@ -199,8 +199,6 @@ class HomeActivity : WokaBaseActivity(), } } } - - registerReceiver(minuteReceiver, IntentFilter(Intent.ACTION_TIME_TICK)) } private fun initViews() { @@ -452,16 +450,23 @@ class HomeActivity : WokaBaseActivity(), override fun onBottomTabSelected(tab: Int) { when (tab){ HOME -> { + binding.notifications.show() + if (userPrefs?.appTheme == Theme.THEME_TWO){ + binding.root.backgroundTintList = ColorStateList.valueOf(getColor(R.color.color_primary)) + supportFragmentManager.beginTransaction() .replace(R.id.fc_home, Home2Fragment.newInstance()) .commit() }else{ + binding.root.backgroundTintList = null + supportFragmentManager.beginTransaction() .replace(R.id.fc_home, Home1Fragment.newInstance()) .commit() } + registerReceiver(minuteReceiver, IntentFilter(Intent.ACTION_TIME_TICK)) updateBackground() viewModel.selectedBottomTab = tab } @@ -473,6 +478,9 @@ class HomeActivity : WokaBaseActivity(), , ActivityOptions.makeSceneTransitionAnimation(this).toBundle()) } MY_LIST -> { + binding.notifications.hide() + binding.root.backgroundTintList = ColorStateList.valueOf(getColor(R.color.orders_bg)) + supportFragmentManager.beginTransaction() .replace(R.id.fc_home, MyListFragment.newInstance()) .commit() @@ -496,7 +504,6 @@ class HomeActivity : WokaBaseActivity(), when(binding.bottomNav.getSelectedTab()){ HOME -> { if (userPrefs?.appTheme == Theme.THEME_ONE){ - binding.root.backgroundTintList = null val timePeriod = TimePeriod.getCurrentTimePeriod() if (currentBackground != timePeriod){ @@ -518,8 +525,6 @@ class HomeActivity : WokaBaseActivity(), currentBackground = timePeriod } - }else{ - binding.root.backgroundTintList = ColorStateList.valueOf(getColor(R.color.color_primary)) } } } diff --git a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt index 55c1bad..791e96d 100644 --- a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt +++ b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt @@ -19,6 +19,7 @@ import androidx.lifecycle.ViewModelProvider import com.woka.R import com.woka.WokaApp.Companion.userPrefs import com.woka.databinding.FragmentHome1Binding +import com.woka.home.FMActivity import com.woka.home.HomeViewModel import com.woka.home.MoreHomeActivity import com.woka.home.TimePeriod @@ -70,9 +71,9 @@ class Home1Fragment : Fragment() { } private fun initViews() { - if (viewModel.isHomeBackgroundBlurred){ + if (viewModel.isHomeBackgroundBlurred) { binding.playerView.hide() - }else{ + } else { binding.playerView.show() } } @@ -80,7 +81,7 @@ class Home1Fragment : Fragment() { override fun onResume() { super.onResume() handleAnimations() - if (viewModel.player?.isPlaying == false){ + if (viewModel.player?.isPlaying == false) { viewModel.player?.play() } @@ -97,7 +98,7 @@ class Home1Fragment : Fragment() { if (viewModel.player?.isPlaying == true) viewModel.player?.pause() - if (viewModel.isHomeBackgroundBlurred){ + if (viewModel.isHomeBackgroundBlurred) { binding.playerView.hide() } } @@ -151,9 +152,18 @@ class Home1Fragment : Fragment() { more.setOnClickListener { activity?.let { - startActivity(Intent(it, MoreHomeActivity::class.java), - ActivityOptions.makeSceneTransitionAnimation(it).toBundle()) - } } + startActivity( + Intent(it, MoreHomeActivity::class.java), + ActivityOptions.makeSceneTransitionAnimation(it).toBundle() + ) + } + } + + fmButton.setOnClickListener { + activity?.let { + startActivity(Intent(it, FMActivity::class.java)) + } + } } } @@ -203,7 +213,7 @@ class Home1Fragment : Fragment() { } private fun handleAnimations() { - synchronized(this){ + synchronized(this) { if (tvAnimator == null) { binding.tvView.post { val endMargin: Float = @@ -379,7 +389,7 @@ class Home1Fragment : Fragment() { binding.moon.show() currentBackground = timePeriod - synchronized(this){ + synchronized(this) { handleNightAnimations() } diff --git a/app/src/main/java/com/woka/home/fragments/MyListFragment.kt b/app/src/main/java/com/woka/home/fragments/MyListFragment.kt index b6599e7..b57437d 100644 --- a/app/src/main/java/com/woka/home/fragments/MyListFragment.kt +++ b/app/src/main/java/com/woka/home/fragments/MyListFragment.kt @@ -6,19 +6,79 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.woka.databinding.FragmentMyListBinding +import com.woka.home.mylist.MyListRepository +import com.woka.home.mylist.adapters.WebSeriesAdapter +import com.woka.networking.ApiResult +import com.woka.utils.hide +import com.woka.utils.show class MyListFragment : Fragment() { private lateinit var binding: FragmentMyListBinding + private lateinit var webSeriesEAdapter: WebSeriesAdapter + private lateinit var webSeriesHAdapter: WebSeriesAdapter + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? - ): View? { + ): View { binding = FragmentMyListBinding.inflate(inflater, container, false) + + // adapters + webSeriesEAdapter = WebSeriesAdapter() + webSeriesHAdapter = WebSeriesAdapter() + + initViews() + + clickEvents() + + setObservers() + + MyListRepository.loadMyFavList() + return binding.root } + private fun initViews() { + binding.apply { + rvWebSeriesEnglish.adapter = webSeriesEAdapter + rvWebSeriesHindi.adapter = webSeriesHAdapter + } + } + + private fun clickEvents(){ + binding.apply { + backBtn.setOnClickListener { + activity?.onBackPressed() + } + } + } + + private fun setObservers(){ + binding.apply { + MyListRepository.myFavListLiveData.observe(viewLifecycleOwner){ + when (it){ + is ApiResult.Error -> { + webSeriesEnglishView.hide() + webSeriesHindiView.hide() + } + is ApiResult.Loading -> {} + is ApiResult.Success -> { + it.data?.result?.let { result -> + result.show_data?.let {showData -> + if (showData.isNotEmpty()){ + webSeriesEnglishView.show() + webSeriesEAdapter.submitList(ArrayList(showData)) + } + } + } + } + } + } + } + } + companion object { fun newInstance() = MyListFragment() } diff --git a/app/src/main/java/com/woka/home/mylist/MyListRepository.kt b/app/src/main/java/com/woka/home/mylist/MyListRepository.kt new file mode 100644 index 0000000..18e45a0 --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/MyListRepository.kt @@ -0,0 +1,24 @@ +package com.woka.home.mylist + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.woka.home.mylist.models.MyListResponse +import com.woka.networking.ApiResult +import com.woka.userdata.UserRepository +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +object MyListRepository { + + private val _myFavListLiveData = MutableLiveData>() + val myFavListLiveData: LiveData> + get() = _myFavListLiveData + + fun loadMyFavList(){ + CoroutineScope(Dispatchers.IO).launch { + _myFavListLiveData.postValue(ApiResult.Loading()) + _myFavListLiveData.postValue(UserRepository.loadMyFavList()) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/adapters/FavoriteViewHolder.kt b/app/src/main/java/com/woka/home/mylist/adapters/FavoriteViewHolder.kt new file mode 100644 index 0000000..b7b4a5e --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/adapters/FavoriteViewHolder.kt @@ -0,0 +1,6 @@ +package com.woka.home.mylist.adapters + +import androidx.recyclerview.widget.RecyclerView.ViewHolder +import com.woka.databinding.FavViewHolderBinding + +class FavoriteViewHolder(val binding: FavViewHolderBinding): ViewHolder(binding.root) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/adapters/WebSeriesAdapter.kt b/app/src/main/java/com/woka/home/mylist/adapters/WebSeriesAdapter.kt new file mode 100644 index 0000000..9f33e85 --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/adapters/WebSeriesAdapter.kt @@ -0,0 +1,53 @@ +package com.woka.home.mylist.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 com.bumptech.glide.Glide +import com.woka.databinding.FavViewHolderBinding +import com.woka.home.mylist.models.ShowData +import java.util.concurrent.Executors + +class WebSeriesAdapter(config: AsyncDifferConfig): ListAdapter(config) { + + companion object{ + private val DIFF_UTIL = object : DiffUtil.ItemCallback(){ + override fun areItemsTheSame(oldItem: ShowData, newItem: ShowData): Boolean = oldItem.id == newItem.id + override fun areContentsTheSame(oldItem: ShowData, newItem: ShowData): Boolean = oldItem == newItem + } + + private val DIFF_CONFIG = AsyncDifferConfig.Builder(DIFF_UTIL) + .setBackgroundThreadExecutor(Executors.newSingleThreadExecutor()) + .build() + } + + constructor(): this(DIFF_CONFIG) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteViewHolder { + return FavoriteViewHolder( + FavViewHolderBinding.inflate( + LayoutInflater.from(parent.context), + parent, + false + ) + ) + } + + override fun onBindViewHolder(holder: FavoriteViewHolder, position: Int) { + val showData = getItem(position) + + holder.binding.apply { + showData.thumbnail_path?.let { + Glide.with(root.context) + .load(it) + .into(image) + } + + title.text = showData.title + + fav.isSelected = true + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/models/AudioData.kt b/app/src/main/java/com/woka/home/mylist/models/AudioData.kt new file mode 100644 index 0000000..7e3ef5e --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/models/AudioData.kt @@ -0,0 +1,24 @@ +package com.woka.home.mylist.models + +data class AudioData( + val age_range_master_id: String?, + val audio_duration: String?, + val audio_url: String?, + val bookmark_category_ids: String?, + val bookmark_count: Int?, + val category_master_id: String?, + val content_more_details: List?, + val description: String?, + val gender_master_id: String?, + val id: Int?, + val is_liked: Boolean?, + val language_master_id: Int?, + val likes_count: Int?, + val mark_as_favourite: Boolean?, + val media_id: String?, + val release_date: String?, + val tags_keyword: String?, + val thumbnail_path: String?, + val title: String?, + val views_count: Int? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/models/ContentMoreDetail.kt b/app/src/main/java/com/woka/home/mylist/models/ContentMoreDetail.kt new file mode 100644 index 0000000..c34c59a --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/models/ContentMoreDetail.kt @@ -0,0 +1,12 @@ +package com.woka.home.mylist.models + +data class ContentMoreDetail( + val content_id: Int?, + val description: String?, + val id: Int?, + val language_master_id: Int?, + val post_type: Int?, + val tags_keywords: String?, + val title: String?, + val url: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/models/ContentMoreDetailXX.kt b/app/src/main/java/com/woka/home/mylist/models/ContentMoreDetailXX.kt new file mode 100644 index 0000000..f7d10a9 --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/models/ContentMoreDetailXX.kt @@ -0,0 +1,11 @@ +package com.woka.home.mylist.models + +data class ContentMoreDetailXX( + val content_id: Int?, + val description: String?, + val id: Int?, + val language_master_id: Int?, + val post_type: Int?, + val tags_keywords: String?, + val title: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/models/GameData.kt b/app/src/main/java/com/woka/home/mylist/models/GameData.kt new file mode 100644 index 0000000..3eeff3f --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/models/GameData.kt @@ -0,0 +1,22 @@ +package com.woka.home.mylist.models + +data class GameData( + val age_range_master_id: String?, + val bookmark_category_ids: String?, + val bookmark_count: Int?, + val category_master_id: String?, + val content_more_details: List?, + val description: String?, + val game_url: String?, + val gender_master_id: String?, + val id: Int?, + val is_liked: Boolean?, + val language_master_id: Int?, + val likes_count: Int?, + val mark_as_favourite: Boolean?, + val release_date: String?, + val screen_orientation: String?, + val thumbnail_path: String?, + val title: String?, + val views_count: Int? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/models/MyListResponse.kt b/app/src/main/java/com/woka/home/mylist/models/MyListResponse.kt new file mode 100644 index 0000000..433662d --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/models/MyListResponse.kt @@ -0,0 +1,5 @@ +package com.woka.home.mylist.models + +data class MyListResponse( + val result: Result? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/models/Result.kt b/app/src/main/java/com/woka/home/mylist/models/Result.kt new file mode 100644 index 0000000..cff2e4e --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/models/Result.kt @@ -0,0 +1,9 @@ +package com.woka.home.mylist.models + +data class Result( + val audio_data: List?, + val game_data: List?, + val show_data: List?, + val sing_karaoke_data: List?, + val video_data: List? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/models/ShowData.kt b/app/src/main/java/com/woka/home/mylist/models/ShowData.kt new file mode 100644 index 0000000..7b3bf72 --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/models/ShowData.kt @@ -0,0 +1,21 @@ +package com.woka.home.mylist.models + +data class ShowData( + val age_range_master_id: String?, + val bookmark_category_ids: String?, + val bookmark_count: Int?, + val category_master_id: String?, + val content_more_details: List?, + val description: String?, + val gender_master_id: String?, + val id: Int?, + val is_liked: Boolean?, + val likes_count: Int?, + val mark_as_favourite: Boolean?, + val show_type: String?, + val thumbnail_path: String?, + val title: String?, + val total_episodes: Int?, + val total_seasons: Int?, + val views_count: Int? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/mylist/models/SingKaraokeData.kt b/app/src/main/java/com/woka/home/mylist/models/SingKaraokeData.kt new file mode 100644 index 0000000..93d6822 --- /dev/null +++ b/app/src/main/java/com/woka/home/mylist/models/SingKaraokeData.kt @@ -0,0 +1,22 @@ +package com.woka.home.mylist.models + +data class SingKaraokeData( + val age_range_master_id: String?, + val bookmark_category_ids: String?, + val bookmark_count: Int?, + val category_master_id: String?, + val content_more_details: List?, + val description: String?, + val duration: String?, + val gender_master_id: String?, + val id: Int?, + val is_liked: Boolean?, + val language_master_id: Int?, + val likes_count: Int?, + val mark_as_favourite: Boolean?, + val release_date: String?, + val thumbnail_path: String?, + val title: String?, + val video_url: String?, + val views_count: Int? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/notifications/NotificationAdapter.kt b/app/src/main/java/com/woka/home/notifications/NotificationAdapter.kt index cbd5cf5..4109a0c 100644 --- a/app/src/main/java/com/woka/home/notifications/NotificationAdapter.kt +++ b/app/src/main/java/com/woka/home/notifications/NotificationAdapter.kt @@ -1,5 +1,6 @@ package com.woka.home.notifications +import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.AsyncDifferConfig @@ -8,6 +9,7 @@ import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView.ViewHolder import com.woka.databinding.NotificationViewHolderBinding import com.woka.home.notifications.models.NotificationData +import com.woka.utils.TAG import java.text.SimpleDateFormat import java.time.LocalDate import java.time.temporal.ChronoUnit @@ -50,17 +52,21 @@ class NotificationAdapter(config: AsyncDifferConfig): ListAdap override fun onBindViewHolder(holder: NotificationViewHolder, position: Int) { val notification = getItem(position) - notification.updated_at?.let { + notification.created_at?.let { SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'", Locale.getDefault()) .parse(it)?.let { notificationDate -> - val today = Calendar.getInstance() + val today = Calendar.getInstance().apply { + set(Calendar.HOUR_OF_DAY, notificationDate.hours) + set(Calendar.MINUTE, notificationDate.minutes) + set(Calendar.SECOND, notificationDate.seconds) + } val dayDiffs = (today.time.time - notificationDate.time)/(24 * 60 * 60 * 1000) - val daysTxt = "$dayDiffs days ago" + val daysTxt = if (dayDiffs == 0L) "Today" else if (dayDiffs == 1L) "Yesterday" else "$dayDiffs days ago" holder.binding.daysTxt.text = daysTxt } - - holder.binding.bodyTxt.text = notification.title } + + holder.binding.bodyTxt.text = notification.title } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/notifications/NotificationRepository.kt b/app/src/main/java/com/woka/home/notifications/NotificationRepository.kt new file mode 100644 index 0000000..ff56d4a --- /dev/null +++ b/app/src/main/java/com/woka/home/notifications/NotificationRepository.kt @@ -0,0 +1,25 @@ +package com.woka.home.notifications + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.woka.home.notifications.models.NotificationData +import com.woka.networking.ApiResult +import com.woka.userdata.UserRepository +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +object NotificationRepository { + + private val _notificationsLiveData = MutableLiveData>>() + val notificationLiveData: LiveData>> + get() = _notificationsLiveData + + fun loadNotifications(){ + CoroutineScope(Dispatchers.IO).launch { + _notificationsLiveData.postValue(ApiResult.Loading()) + _notificationsLiveData.postValue(UserRepository.loadNotifications()) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt b/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt index d59d5f8..43d44a8 100644 --- a/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt +++ b/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt @@ -1,13 +1,18 @@ package com.woka.home.notifications import android.os.Bundle +import android.util.Log import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.woka.R import com.woka.databinding.ActivityNotificationsBinding -import com.woka.home.notifications.models.NotificationData +import com.woka.networking.ApiResult +import com.woka.utils.TAG import com.woka.utils.WokaBaseActivity +import com.woka.utils.hide +import com.woka.utils.show +import com.woka.utils.toast class NotificationsActivity : WokaBaseActivity() { @@ -30,34 +35,11 @@ class NotificationsActivity : WokaBaseActivity() { initViews() - adapter.submitList(listOf( - NotificationData( - created_at = "2024-05-31T10:44:09.000000Z", - description = "2024-05-31T10:44:09.000000Z", - id = 1, - image = null, - is_read = 1, - link = null, - post_type = 2, - title = "New Episode has been added toBang Bang Bang", - type = "type", - updated_at = "2024-05-31T10:44:09.000000Z", - user_id = 1 - ), - NotificationData( - created_at = "2024-05-31T10:44:09.000000Z", - description = "2024-05-31T10:44:09.000000Z", - id = 2, - image = null, - is_read = 1, - link = null, - post_type = 2, - title = "New Episode has been added toBang Bang Bang", - type = "type", - updated_at = "2024-06-01T10:44:09.000000Z", - user_id = 1 - ) - )) + clickEvents() + + setObservers() + + NotificationRepository.loadNotifications() } @@ -66,4 +48,52 @@ class NotificationsActivity : WokaBaseActivity() { rvNotifications.adapter = adapter } } + + private fun clickEvents() { + binding.apply { + retry.setOnClickListener { + NotificationRepository.loadNotifications() + } + + backBtn.setOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + } + } + + private fun setObservers() { + NotificationRepository.notificationLiveData.observe(this){ + binding.apply { + when (it){ + is ApiResult.Error -> { + rvNotifications.hide() + progressBar.hide() + noData.hide() + + errorView.show() + } + is ApiResult.Loading -> { + progressBar.show() + errorView.hide() + } + is ApiResult.Success -> { + it.data?.let { notifications -> + progressBar.hide() + errorView.hide() + + if (notifications.isEmpty()){ + noData.show() + rvNotifications.hide() + return@observe + } + + rvNotifications.show() + + adapter.submitList(notifications) + }?:noData.show() + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/shop/MyOrdersActivity.kt b/app/src/main/java/com/woka/shop/MyOrdersActivity.kt index c78a99b..9184ab1 100644 --- a/app/src/main/java/com/woka/shop/MyOrdersActivity.kt +++ b/app/src/main/java/com/woka/shop/MyOrdersActivity.kt @@ -1,6 +1,5 @@ package com.woka.shop -import android.graphics.Color import android.os.Bundle import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat diff --git a/app/src/main/java/com/woka/userdata/UserApiService.kt b/app/src/main/java/com/woka/userdata/UserApiService.kt index 608fae6..66c24f4 100644 --- a/app/src/main/java/com/woka/userdata/UserApiService.kt +++ b/app/src/main/java/com/woka/userdata/UserApiService.kt @@ -1,5 +1,7 @@ package com.woka.userdata +import com.woka.home.mylist.models.MyListResponse +import com.woka.home.notifications.models.NotificationData import com.woka.userdata.userDataModels.UserDataResponse import com.woka.networking.ApiResponse import okhttp3.FormBody @@ -21,4 +23,10 @@ interface UserApiService { @GET("user_deactivate_account") suspend fun deActivateAccount(): Response> + + @GET("get_user_notifications") + suspend fun getNotifications(): Response>> + + @POST("favourite_listing") + suspend fun getMyFavList(): Response> } \ No newline at end of file diff --git a/app/src/main/java/com/woka/userdata/UserRepository.kt b/app/src/main/java/com/woka/userdata/UserRepository.kt index 380d33f..2097b25 100644 --- a/app/src/main/java/com/woka/userdata/UserRepository.kt +++ b/app/src/main/java/com/woka/userdata/UserRepository.kt @@ -1,5 +1,7 @@ package com.woka.userdata +import com.woka.home.mylist.models.MyListResponse +import com.woka.home.notifications.models.NotificationData import com.woka.userdata.userDataModels.UserDataResponse import com.woka.networking.ApiResult import com.woka.networking.RetrofitHelper @@ -39,4 +41,16 @@ object UserRepository { userApiService.deActivateAccount() } } + + suspend fun loadNotifications(): ApiResult>{ + return handleApiCall { + userApiService.getNotifications() + } + } + + suspend fun loadMyFavList(): ApiResult{ + return handleApiCall { + userApiService.getMyFavList() + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_heart_not_filled.xml b/app/src/main/res/drawable/ic_heart_not_filled.xml new file mode 100644 index 0000000..aed203b --- /dev/null +++ b/app/src/main/res/drawable/ic_heart_not_filled.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_heart_select.xml b/app/src/main/res/drawable/ic_heart_select.xml new file mode 100644 index 0000000..458f983 --- /dev/null +++ b/app/src/main/res/drawable/ic_heart_select.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_fmactivity.xml b/app/src/main/res/layout/activity_fmactivity.xml new file mode 100644 index 0000000..628d442 --- /dev/null +++ b/app/src/main/res/layout/activity_fmactivity.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_notifications.xml b/app/src/main/res/layout/activity_notifications.xml index ca4f56c..7b9a3d6 100644 --- a/app/src/main/res/layout/activity_notifications.xml +++ b/app/src/main/res/layout/activity_notifications.xml @@ -11,7 +11,7 @@ + + + + + + + +