diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index a5c1501..66cb09a 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -10,12 +10,12 @@
-
+
-
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 10d8619..816ffc5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,6 +15,10 @@
android:supportsRtl="true"
android:theme="@style/Theme.Woka"
tools:targetApi="31">
+
{
binding.blogsTxt.hide()
binding.rvBlogs.hide()
}
+
is ApiResult.Loading -> {
binding.blogsTxt.hide()
binding.rvBlogs.hide()
}
+
is ApiResult.Success -> {
- it.data?.blogs?.let {blogList ->
+ it.data?.blogs?.let { blogList ->
binding.blogsTxt.show()
binding.rvBlogs.show()
blogsAdapter.submitList(blogList)
}
}
+
null -> {}
}
}
- WokaSongsRepository.wokaSongsLiveData.observe(this){
- when(it){
+ WokaSongsRepository.wokaSongsLiveData.observe(this) {
+ when (it) {
is ApiResult.Error -> {
binding.wokaSongsTxt.hide()
binding.rvWokaSongs.hide()
}
+
is ApiResult.Loading -> {
binding.wokaSongsTxt.hide()
binding.rvWokaSongs.hide()
}
+
is ApiResult.Success -> {
- it.data?.paint_data?.let {songList ->
+ it.data?.paint_data?.let { songList ->
binding.wokaSongsTxt.show()
binding.rvWokaSongs.show()
- songsAdapter.submitList(songList)
+ val mediaItems = mutableListOf()
+
+ for (song in songList) {
+ song?.content_more_details?.get(0)?.url?.let { url ->
+ mediaItems.add(MediaItem.fromUri(url))
+ }
+ }
+
+ songsAdapter.submitSongList(songList, mediaItems)
+
}
}
}
diff --git a/app/src/main/java/com/woka/home/sidebar/profile/ProfileViewModel.kt b/app/src/main/java/com/woka/home/sidebar/profile/ProfileViewModel.kt
index cb64efe..ed7226d 100644
--- a/app/src/main/java/com/woka/home/sidebar/profile/ProfileViewModel.kt
+++ b/app/src/main/java/com/woka/home/sidebar/profile/ProfileViewModel.kt
@@ -10,6 +10,8 @@ import kotlinx.coroutines.launch
class ProfileViewModel: ViewModel() {
+ var currentFullName: String? = null
+
private val _updateProfileLiveData = MutableLiveData>()
val updateProfileLiveData: LiveData>
get() = _updateProfileLiveData
diff --git a/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt b/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt
index f1554e6..bcd443b 100644
--- a/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt
+++ b/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt
@@ -5,8 +5,10 @@ import android.os.Bundle
import android.transition.Slide
import android.view.Gravity.END
import androidx.activity.enableEdgeToEdge
+import androidx.core.content.res.ResourcesCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
+import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.ViewModelProvider
import com.bumptech.glide.Glide
import com.woka.R
@@ -88,6 +90,10 @@ class UserProfileActivity : WokaBaseActivity() {
}
private fun setObservers() {
+ binding.fullName.addTextChangedListener {
+ enableUpdateBtn(viewModel.currentFullName != it.toString())
+ }
+
userPrefs?.userLiveData?.observe(this){
when(it){
is ApiResult.Error -> {
@@ -97,6 +103,7 @@ class UserProfileActivity : WokaBaseActivity() {
is ApiResult.Loading -> {}
is ApiResult.Success -> {
it.data?.result?.let { userData ->
+ viewModel.currentFullName = userData.fullname
updateUserData(userData)
}
}
@@ -162,6 +169,8 @@ class UserProfileActivity : WokaBaseActivity() {
birthdate.text = userData.birthdate
+ enableUpdateBtn(viewModel.currentFullName != fullName.text.toString())
+
}
}
@@ -196,4 +205,9 @@ class UserProfileActivity : WokaBaseActivity() {
selectedGender = gender
}
+
+ private fun enableUpdateBtn(enable: Boolean){
+ binding.update.isEnabled = enable
+ binding.update.alpha = if (enable) 1f else 0.5f
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/woka/modules/wokasongs/WokaSongsAdapter.kt b/app/src/main/java/com/woka/modules/wokasongs/WokaSongsAdapter.kt
index 22849b1..6590af1 100644
--- a/app/src/main/java/com/woka/modules/wokasongs/WokaSongsAdapter.kt
+++ b/app/src/main/java/com/woka/modules/wokasongs/WokaSongsAdapter.kt
@@ -1,34 +1,50 @@
package com.woka.modules.wokasongs
+import android.content.Context
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
import androidx.recyclerview.widget.RecyclerView.ViewHolder
+import com.google.android.exoplayer2.ExoPlayer
+import com.google.android.exoplayer2.MediaItem
+import com.google.android.exoplayer2.PlaybackException
+import com.google.android.exoplayer2.Player
+import com.woka.R
import com.woka.databinding.WokaSongViewHolderBinding
import com.woka.modules.wokasongs.models.SongData
-import java.util.concurrent.Executors
+import com.woka.utils.hide
+import com.woka.utils.show
-class WokaSongsAdapter(config: AsyncDifferConfig): ListAdapter(config) {
+class WokaSongsAdapter(context: Context): RecyclerView.Adapter() {
inner class SongViewHolder(val binding: WokaSongViewHolderBinding): ViewHolder(binding.root)
- companion object{
- private val DIFF_UTILS = object : DiffUtil.ItemCallback(){
- override fun areItemsTheSame(oldItem: SongData, newItem: SongData): Boolean =
- oldItem.id == newItem.id
+ private var player: ExoPlayer
+ private var currentPlayingPos = -1
- override fun areContentsTheSame(oldItem: SongData, newItem: SongData): Boolean =
- oldItem == newItem
- }
+ private var songList = mutableListOf()
- private val ASYNC_DIFF_CONFIG = AsyncDifferConfig.Builder(DIFF_UTILS)
- .setBackgroundThreadExecutor(Executors.newSingleThreadExecutor())
- .build()
+ init {
+ player = ExoPlayer.Builder(context).build()
+ player.addListener(object : Player.Listener{
+ override fun onEvents(player: Player, events: Player.Events) {
+ super.onEvents(player, events)
+ if (currentPlayingPos >= 0)
+ notifyItemChanged(currentPlayingPos)
+ }
+
+ override fun onPlayerError(error: PlaybackException) {
+ super.onPlayerError(error)
+ if (currentPlayingPos >= 0)
+ notifyItemChanged(currentPlayingPos)
+ }
+ })
}
- constructor(): this(ASYNC_DIFF_CONFIG)
+ fun releasePlayer(){
+ player.stop()
+ player.release()
+ }
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SongViewHolder {
return SongViewHolder(
@@ -37,10 +53,76 @@ class WokaSongsAdapter(config: AsyncDifferConfig): ListAdapter= songList.size) return
+
+ val songData = songList[position]
holder.binding.apply {
title.text = songData.title
+ totalTime.text = try {
+ if (songData.song_duration?.split(":")?.get(0)?.toInt() == 0)
+ songData.song_duration.substring(3)
+ else
+ songData.song_duration
+ }catch (e: Exception){
+ songData.song_duration
+ }
+
+ root.setOnClickListener {
+ if (currentPlayingPos == holder.absoluteAdapterPosition){
+ if (player.isLoading){
+ return@setOnClickListener
+ }
+ if (player.isPlaying){
+ player.pause()
+ }else{
+ player.play()
+ }
+ }else{
+ player.pause()
+ if (currentPlayingPos >= 0) notifyItemChanged(currentPlayingPos)
+
+ currentPlayingPos = holder.absoluteAdapterPosition
+
+ player.seekTo(holder.absoluteAdapterPosition, 0)
+ player.play()
+ }
+ }
+
+ if (currentPlayingPos == holder.absoluteAdapterPosition){
+ if (player.isLoading){
+ progressBar.show()
+ playBtn.hide()
+ }else if (player.isPlaying){
+ progressBar.hide()
+ playBtn.show()
+ playBtn.setImageResource(R.drawable.ic_pause)
+ }else{
+ progressBar.hide()
+ playBtn.show()
+ playBtn.setImageResource(R.drawable.ic_play)
+ }
+ }else{
+ progressBar.hide()
+ playBtn.show()
+ playBtn.setImageResource(R.drawable.ic_play)
+ }
}
}
+
+ fun submitSongList(list: List, mediaItems: MutableList) {
+ songList.clear()
+ for (song in list){
+ song?.let {
+ songList.add(it)
+ }
+ }
+
+ player.addMediaItems(mediaItems)
+ player.prepare()
+
+ notifyDataSetChanged()
+ }
}
\ 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
new file mode 100644
index 0000000..c78a99b
--- /dev/null
+++ b/app/src/main/java/com/woka/shop/MyOrdersActivity.kt
@@ -0,0 +1,41 @@
+package com.woka.shop
+
+import android.graphics.Color
+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.ActivityMyOrdersBinding
+import com.woka.utils.WokaBaseActivity
+import com.woka.utils.lightStatusBar
+
+class MyOrdersActivity : WokaBaseActivity() {
+
+ private lateinit var binding: ActivityMyOrdersBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ binding = ActivityMyOrdersBinding.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.my_orders_img_color)
+ window.lightStatusBar(true)
+
+ clickEvents()
+ }
+
+ private fun clickEvents() {
+ binding.apply {
+ backBtn.setOnClickListener {
+ onBackPressedDispatcher.onBackPressed()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/img_my_orders_ng.png b/app/src/main/res/drawable-hdpi/img_my_orders_ng.png
new file mode 100644
index 0000000..04b6726
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/img_my_orders_ng.png differ
diff --git a/app/src/main/res/drawable-ldpi/img_my_orders_ng.png b/app/src/main/res/drawable-ldpi/img_my_orders_ng.png
new file mode 100644
index 0000000..fabf480
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/img_my_orders_ng.png differ
diff --git a/app/src/main/res/drawable-mdpi/img_my_orders_ng.png b/app/src/main/res/drawable-mdpi/img_my_orders_ng.png
new file mode 100644
index 0000000..f3b92f5
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/img_my_orders_ng.png differ
diff --git a/app/src/main/res/drawable-xhdpi/img_my_orders_ng.png b/app/src/main/res/drawable-xhdpi/img_my_orders_ng.png
new file mode 100644
index 0000000..781921e
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/img_my_orders_ng.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/img_my_orders_ng.png b/app/src/main/res/drawable-xxhdpi/img_my_orders_ng.png
new file mode 100644
index 0000000..1a1a6fa
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/img_my_orders_ng.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/img_my_orders_ng.png b/app/src/main/res/drawable-xxxhdpi/img_my_orders_ng.png
new file mode 100644
index 0000000..b65eefb
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/img_my_orders_ng.png differ
diff --git a/app/src/main/res/layout/activity_my_orders.xml b/app/src/main/res/layout/activity_my_orders.xml
new file mode 100644
index 0000000..ba22bd0
--- /dev/null
+++ b/app/src/main/res/layout/activity_my_orders.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_user_profile.xml b/app/src/main/res/layout/activity_user_profile.xml
index 05bcb8c..68c3e91 100644
--- a/app/src/main/res/layout/activity_user_profile.xml
+++ b/app/src/main/res/layout/activity_user_profile.xml
@@ -340,6 +340,8 @@
android:textSize="@dimen/_14ssp"
android:background="@drawable/gradient_btn_bg"
+ android:alpha="0.5"
+ android:enabled="false"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="25dp"
diff --git a/app/src/main/res/layout/woka_song_view_holder.xml b/app/src/main/res/layout/woka_song_view_holder.xml
index da28924..3324a75 100644
--- a/app/src/main/res/layout/woka_song_view_holder.xml
+++ b/app/src/main/res/layout/woka_song_view_holder.xml
@@ -27,34 +27,56 @@
android:layout_marginVertical="12dp"
android:orientation="horizontal">
-
+ >
+
+
+
+
+
+
+ android:layout_toStartOf="@+id/ll"
+ android:layout_toEndOf="@id/view"
+
+ android:fontFamily="@font/exo_2_medium"
+
+ android:ellipsize="end"
+ android:maxLines="1"
+ android:textColor="@color/white"
+ tools:text="AA ZARA" />
बच्चे का खाता जोड़ें
बच्चे का नाम
अपने बच्चे का नाम दर्ज करें
+ वोका गाने
+ क्या आप WOKA ऐप से बाहर निकलना चाहते हैं?
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 2afb74d..6c8ebcf 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -8,6 +8,8 @@
#050038
#6ed5fe
+ #8081D6F7
+
#9909005D
#99FFFFFF
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 919f6dd..52e6485 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -161,4 +161,6 @@
THE USER AGREES AND UNDERSTANDS THAT THE PLATFORM IS PROVIDED BY US ON AN “AS IS” AND “AS AVAILABLE” BASIS AND WE MAKE NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE OPERATION OF THE PLATFORM OR THE INFORMATION AND CONTENT INCLUDED ON THE PLATFORM. YOU EXPRESSLY AGREE THAT YOUR USE OF THE PLATFORM IS AT YOUR SOLE RISK.\n\nTO THE FULLEST EXTENT PERMISSIBLE BY APPLICABLE LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED. WE DO NOT WARRANT THAT THE PLATFORM, ITS SERVERS, OR EMAIL/OTHER COMMUNICATION SENT FROM THE PLATFORM ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. WE WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING FROM THE USE OF THE PLATFORM, INCLUDING, BUT NOT LIMITED TO DIRECT, INDIRECT, INCIDENTAL, PUNITIVE, AND CONSEQUENTIAL DAMAGES.\n\nALL INTERACTION, COMMUNICATION, DEALING, OR TRANSACTION BETWEEN THE USERS AND THE THIRD-PARTY PROVIDER IN RESPECT OF ANY PRODUCTS/SERVICES OFFERED BY THE THIRD-PARTY PROVIDER IS A SEPARATE AND INDEPENDENT TRANSACTION BETWEEN THE USER AND SUCH THIRD-PARTY PROVIDER WITHOUT ANY LIABILITY ACCRUING TO OR ON US FOR ANY MATTERS ARISING OUT OF OR IN RELATION TO THE SAME. THE USER EXPRESSLY AGREES AND ACKNOWLEDGES TO HOLD HARMLESS US IN RESPECT OF ANY COST, CLAIMS, DAMAGE, LOSS, OR EXPENSES ACCRUED, SUFFERED, INCURRED BY US OR ANY THIRD PARTY ARISING OUT OF OR IN CONNECTION WITH ANY SUCH COMMUNICATION, INTERACTION, DEALINGS, AND TRANSACTIONS BETWEEN THE USER AND THIRD-PARTY PROVIDERS. THE USER ACKNOWLEDGES THAT WE DO NOT HAVE ANY CONTROL OVER SUCH DEALINGS AND TRANSACTIONS AND PLAYS NO DETERMINATIVE ROLE IN THE PERFORMANCE IN RESPECT OF THE SAME AND WE SHALL NOT BE LIABLE FOR THE OUTCOMES OF SUCH COMMUNICATION, INTERACTION, DEALINGS, AND TRANSACTIONS BETWEEN THE USERS AND THE THIRD-PARTY PROVIDERS.\n\nWE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD-PARTY PROVIDER IN ANY MANNER AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR ANY TRANSACTION BETWEEN YOU AND SUCH PARTY PROVIDER. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM THROUGH SUCH THIRD-PARTY PROVIDER, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE.
WOKA Songs
+ WOKA
+ Do you want to exit from the WOKA app?
\ No newline at end of file