Integrated forgot_username api and completed ui flow and created new
Integrated app version history api and created new ui for new updates. Implemented logic for new and force version checks. Loaded continue watching data for karaoke and audio after coming back from player activity. Resolved client bugs : 1. Improvements in live tv floating view on homefragment1 and bottom nav icons. 2. FmActivity volume icons changes. 3. Shared other remarks. 4. directly load product details upon only 1 product in category.
@@ -9,6 +9,8 @@ import android.os.Bundle
|
|||||||
import android.text.Html
|
import android.text.Html
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
@@ -58,6 +60,8 @@ class AudioBooksActivity : WokaBaseActivity() {
|
|||||||
|
|
||||||
private lateinit var noSignInDialog: NoSignInDialog
|
private lateinit var noSignInDialog: NoSignInDialog
|
||||||
|
|
||||||
|
private lateinit var playerLauncher: ActivityResultLauncher<Intent>
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
@@ -87,6 +91,8 @@ class AudioBooksActivity : WokaBaseActivity() {
|
|||||||
|
|
||||||
noSignInDialog = NoSignInDialog(this)
|
noSignInDialog = NoSignInDialog(this)
|
||||||
|
|
||||||
|
initLaunchers()
|
||||||
|
|
||||||
initViews()
|
initViews()
|
||||||
|
|
||||||
initAudioDialog()
|
initAudioDialog()
|
||||||
@@ -107,6 +113,15 @@ class AudioBooksActivity : WokaBaseActivity() {
|
|||||||
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initLaunchers() {
|
||||||
|
playerLauncher =
|
||||||
|
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
if (userPrefs?.userType != UserType.GUEST){
|
||||||
|
viewModel.loadContinueData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun initViews() {
|
private fun initViews() {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
adjustTrailerImage()
|
adjustTrailerImage()
|
||||||
@@ -364,27 +379,29 @@ class AudioBooksActivity : WokaBaseActivity() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
url?.let {
|
url?.let {
|
||||||
startActivity(Intent(this, PlayerActivity::class.java).apply {
|
playerLauncher.launch(
|
||||||
putExtra(
|
Intent(this, PlayerActivity::class.java).apply {
|
||||||
PlayerActivity.EXTRA_PLAY_LIST,
|
putExtra(
|
||||||
VideoPlayList(
|
PlayerActivity.EXTRA_PLAY_LIST,
|
||||||
ArrayList<PlaylistItem>().apply {
|
VideoPlayList(
|
||||||
add(
|
ArrayList<PlaylistItem>().apply {
|
||||||
PlaylistItem.Builder()
|
add(
|
||||||
.file(it)
|
PlaylistItem.Builder()
|
||||||
.image(it)
|
.file(it)
|
||||||
.title(title)
|
.image(it)
|
||||||
.build()
|
.title(title)
|
||||||
)
|
.build()
|
||||||
},
|
)
|
||||||
mutableListOf(VideoViewData(
|
},
|
||||||
audioBookData.id,
|
mutableListOf(VideoViewData(
|
||||||
ContentType.AUDIO
|
audioBookData.id,
|
||||||
))
|
ContentType.AUDIO
|
||||||
|
))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
putExtra(PlayerActivity.EXTRA_PLAY_INDEX, 0)
|
||||||
putExtra(PlayerActivity.EXTRA_PLAY_INDEX, 0)
|
}
|
||||||
})
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.woka.karaoke
|
package com.woka.karaoke
|
||||||
|
|
||||||
import com.woka.home.mylist.MyListRepository
|
import com.woka.home.mylist.MyListRepository
|
||||||
import com.woka.home.mylist.models.FavKaraokeData
|
|
||||||
import com.woka.home.mylist.models.PostType
|
import com.woka.home.mylist.models.PostType
|
||||||
import com.woka.karaoke.models.continuesing.ContinueKaraokeResponse
|
import com.woka.karaoke.models.continuesing.ContinueKaraokeResponse
|
||||||
import com.woka.karaoke.models.listing.KaraokeData
|
import com.woka.karaoke.models.listing.KaraokeData
|
||||||
@@ -14,7 +13,6 @@ import kotlinx.coroutines.CoroutineScope
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import okhttp3.FormBody
|
import okhttp3.FormBody
|
||||||
import kotlin.math.max
|
|
||||||
|
|
||||||
object KaraokeRepository {
|
object KaraokeRepository {
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ import android.os.Bundle
|
|||||||
import android.text.Html
|
import android.text.Html
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
@@ -58,6 +60,8 @@ class KaraokeActivity : WokaBaseActivity() {
|
|||||||
private lateinit var karaokeDialog: Dialog
|
private lateinit var karaokeDialog: Dialog
|
||||||
private lateinit var noSignInDialog: NoSignInDialog
|
private lateinit var noSignInDialog: NoSignInDialog
|
||||||
|
|
||||||
|
private lateinit var playerLauncher: ActivityResultLauncher<Intent>
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
binding = ActivityKaraokeBinding.inflate(layoutInflater)
|
binding = ActivityKaraokeBinding.inflate(layoutInflater)
|
||||||
@@ -89,6 +93,8 @@ class KaraokeActivity : WokaBaseActivity() {
|
|||||||
|
|
||||||
noSignInDialog = NoSignInDialog(this)
|
noSignInDialog = NoSignInDialog(this)
|
||||||
|
|
||||||
|
initLaunchers()
|
||||||
|
|
||||||
initViews()
|
initViews()
|
||||||
|
|
||||||
initKaraokeDialog()
|
initKaraokeDialog()
|
||||||
@@ -109,6 +115,15 @@ class KaraokeActivity : WokaBaseActivity() {
|
|||||||
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initLaunchers() {
|
||||||
|
playerLauncher =
|
||||||
|
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
if (userPrefs?.userType != UserType.GUEST){
|
||||||
|
viewModel.loadContinueData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun initViews() {
|
private fun initViews() {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
adjustTrailerImage()
|
adjustTrailerImage()
|
||||||
@@ -207,21 +222,36 @@ class KaraokeActivity : WokaBaseActivity() {
|
|||||||
|
|
||||||
private fun onSingClicked(karaokeData: KaraokeData) {
|
private fun onSingClicked(karaokeData: KaraokeData) {
|
||||||
karaokeData.content_more_details?.let { moreDetailsList ->
|
karaokeData.content_more_details?.let { moreDetailsList ->
|
||||||
if (moreDetailsList.isNotEmpty()){
|
if (moreDetailsList.isNotEmpty()) {
|
||||||
if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1){
|
if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1) {
|
||||||
moreDetailsList[1]?.let {data ->
|
moreDetailsList[1]?.let { data ->
|
||||||
data.video_url_hd?.let {
|
data.video_url_hd?.let {
|
||||||
startActivity(Intent(this@KaraokeActivity, KaraokePlayerActivity::class.java).apply {
|
playerLauncher.launch(
|
||||||
putExtra(EXTRA_KARAOKE_DATA, KaraokePlayerData(it, karaokeData.title, karaokeData.id))
|
Intent(
|
||||||
})
|
this@KaraokeActivity,
|
||||||
|
KaraokePlayerActivity::class.java
|
||||||
|
).apply {
|
||||||
|
putExtra(
|
||||||
|
EXTRA_KARAOKE_DATA,
|
||||||
|
KaraokePlayerData(it, karaokeData.title, karaokeData.id)
|
||||||
|
)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
moreDetailsList[0]?.let {data ->
|
moreDetailsList[0]?.let { data ->
|
||||||
data.video_url_hd?.let {
|
data.video_url_hd?.let {
|
||||||
startActivity(Intent(this@KaraokeActivity, KaraokePlayerActivity::class.java).apply {
|
playerLauncher.launch(
|
||||||
putExtra(EXTRA_KARAOKE_DATA, KaraokePlayerData(it, karaokeData.title, karaokeData.id))
|
Intent(
|
||||||
})
|
this@KaraokeActivity,
|
||||||
|
KaraokePlayerActivity::class.java
|
||||||
|
).apply {
|
||||||
|
putExtra(
|
||||||
|
EXTRA_KARAOKE_DATA,
|
||||||
|
KaraokePlayerData(it, karaokeData.title, karaokeData.id)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,10 +23,12 @@ class ChildAdapter(private val childList: List<Child>) : RecyclerView.Adapter<Ch
|
|||||||
|
|
||||||
override fun onBindViewHolder(holder: ChildViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: ChildViewHolder, position: Int) {
|
||||||
holder.binding.apply {
|
holder.binding.apply {
|
||||||
Glide.with(image)
|
if (childList[position].avtar != null){
|
||||||
.load(childList[position].avtar)
|
Glide.with(image)
|
||||||
.fitCenter()
|
.load(childList[position].avtar)
|
||||||
.into(image)
|
.fitCenter()
|
||||||
|
.into(image)
|
||||||
|
}
|
||||||
|
|
||||||
name.text = childList[position].username
|
name.text = childList[position].username
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
package com.woka.onboard.fragments
|
package com.woka.onboard.fragments
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import com.woka.R
|
import com.woka.R
|
||||||
@@ -13,6 +14,7 @@ import com.woka.database.models.ContentType
|
|||||||
import com.woka.databinding.FragmentChildListBinding
|
import com.woka.databinding.FragmentChildListBinding
|
||||||
import com.woka.onboard.adapters.ChildAdapter
|
import com.woka.onboard.adapters.ChildAdapter
|
||||||
import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG
|
import com.woka.onboard.fragments.GetCodeFragment.Companion.EMAIL_ARG
|
||||||
|
import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_FORGOT_USER_NAME
|
||||||
import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16
|
import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_UNDER_16
|
||||||
import com.woka.onboard.mvvm.OnboardViewModel
|
import com.woka.onboard.mvvm.OnboardViewModel
|
||||||
|
|
||||||
@@ -24,11 +26,14 @@ class ChildListFragment : Fragment() {
|
|||||||
private var isUnder16: Boolean = false
|
private var isUnder16: Boolean = false
|
||||||
private var email: String = ""
|
private var email: String = ""
|
||||||
|
|
||||||
|
private var isForgotUsername = false
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
arguments?.let {
|
arguments?.let {
|
||||||
isUnder16 = it.getBoolean(IS_UNDER_16)
|
isUnder16 = it.getBoolean(IS_UNDER_16)
|
||||||
email = it.getString(EMAIL_ARG, "")
|
email = it.getString(EMAIL_ARG, "")
|
||||||
|
isForgotUsername = it.getBoolean(IS_FORGOT_USER_NAME, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -41,17 +46,47 @@ class ChildListFragment : Fragment() {
|
|||||||
viewModel = ViewModelProvider(it)[OnboardViewModel::class.java]
|
viewModel = ViewModelProvider(it)[OnboardViewModel::class.java]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
activity?.onBackPressedDispatcher?.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true){
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
|
viewModel.clearForgotUsernameData()
|
||||||
|
findNavController().popBackStack()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
initViews()
|
||||||
|
|
||||||
clickEvents()
|
clickEvents()
|
||||||
|
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initViews() {
|
||||||
|
binding.apply {
|
||||||
|
if (isForgotUsername){
|
||||||
|
next.text = getString(R.string.go_to_login)
|
||||||
|
|
||||||
|
title.text = getString(R.string.username_found)
|
||||||
|
subTitle.text = getString(R.string.user_name_linked_to_your_account)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun clickEvents() {
|
private fun clickEvents() {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
next.setOnClickListener {
|
next.setOnClickListener {
|
||||||
gotoSignUpFragment()
|
if (isForgotUsername){
|
||||||
|
viewModel.clearForgotUsernameData()
|
||||||
|
findNavController().popBackStack(R.id.signInFragment, false)
|
||||||
|
}else{
|
||||||
|
gotoSignUpFragment()
|
||||||
|
}
|
||||||
|
|
||||||
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
backBtn.setOnClickListener {
|
||||||
|
activity?.onBackPressedDispatcher?.onBackPressed()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +99,9 @@ class ChildListFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.apply {
|
binding.apply {
|
||||||
rvChild.adapter = ChildAdapter(viewModel.childList!!)
|
viewModel.childList?.let {
|
||||||
|
rvChild.adapter = ChildAdapter(it)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.View.VISIBLE
|
import android.view.View.VISIBLE
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.ArrayAdapter
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
@@ -20,6 +21,7 @@ import com.woka.onboard.mvvm.OnboardViewModel
|
|||||||
import com.woka.utils.CHILD_TYPE
|
import com.woka.utils.CHILD_TYPE
|
||||||
import com.woka.utils.PARENT_TYPE
|
import com.woka.utils.PARENT_TYPE
|
||||||
import com.woka.utils.ProgressView
|
import com.woka.utils.ProgressView
|
||||||
|
import com.woka.utils.show
|
||||||
import com.woka.utils.toast
|
import com.woka.utils.toast
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -34,6 +36,7 @@ class GetEmailFragment : Fragment() {
|
|||||||
companion object {
|
companion object {
|
||||||
const val IS_UNDER_16 = "is_under_16"
|
const val IS_UNDER_16 = "is_under_16"
|
||||||
const val IS_RESET_PASSWORD_INTENT = "reset_password_intent"
|
const val IS_RESET_PASSWORD_INTENT = "reset_password_intent"
|
||||||
|
const val IS_FORGOT_USER_NAME = "forgot_user_name"
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var binding: FragmentGetEmailBinding
|
private lateinit var binding: FragmentGetEmailBinding
|
||||||
@@ -43,12 +46,14 @@ class GetEmailFragment : Fragment() {
|
|||||||
|
|
||||||
private var isUnder16: Boolean = false
|
private var isUnder16: Boolean = false
|
||||||
private var isResetPasswordIntent: Boolean = false
|
private var isResetPasswordIntent: Boolean = false
|
||||||
|
private var isForgotUserName: Boolean = false
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
arguments?.let {
|
arguments?.let {
|
||||||
isUnder16 = it.getBoolean(IS_UNDER_16, false)
|
isUnder16 = it.getBoolean(IS_UNDER_16, false)
|
||||||
isResetPasswordIntent = it.getBoolean(IS_RESET_PASSWORD_INTENT, false)
|
isResetPasswordIntent = it.getBoolean(IS_RESET_PASSWORD_INTENT, false)
|
||||||
|
isForgotUserName = it.getBoolean(IS_FORGOT_USER_NAME, false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -153,6 +158,33 @@ class GetEmailFragment : Fragment() {
|
|||||||
null -> {}
|
null -> {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
viewModel.forgotUsernameLiveData.observe(viewLifecycleOwner){
|
||||||
|
when (it) {
|
||||||
|
is ApiResult.Error -> {
|
||||||
|
progressView.hide()
|
||||||
|
toast(it.errorMessage)
|
||||||
|
}
|
||||||
|
|
||||||
|
is ApiResult.Loading -> {
|
||||||
|
progressView.show(getString(R.string.please_wait))
|
||||||
|
}
|
||||||
|
|
||||||
|
is ApiResult.Success -> {
|
||||||
|
progressView.hide()
|
||||||
|
|
||||||
|
viewModel.childList = it.data
|
||||||
|
findNavController().navigate(
|
||||||
|
R.id.action_getEmailFragment_to_childListFragment,
|
||||||
|
Bundle().apply {
|
||||||
|
putBoolean(IS_FORGOT_USER_NAME, true)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
null -> {}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
@@ -165,7 +197,20 @@ class GetEmailFragment : Fragment() {
|
|||||||
|
|
||||||
private fun initViews() {
|
private fun initViews() {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
if (isResetPasswordIntent) {
|
if (isForgotUserName){
|
||||||
|
ArrayAdapter.createFromResource(
|
||||||
|
requireContext(),
|
||||||
|
R.array.user_type_selection,
|
||||||
|
android.R.layout.simple_spinner_item
|
||||||
|
).also { adapter ->
|
||||||
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||||
|
userTypeSpinner.adapter = adapter
|
||||||
|
}
|
||||||
|
|
||||||
|
title.text = getString(R.string.forgot_user_name)
|
||||||
|
userTypeSelectionView.show()
|
||||||
|
}
|
||||||
|
else if (isResetPasswordIntent) {
|
||||||
// scenario 3
|
// scenario 3
|
||||||
|
|
||||||
title.text = getString(R.string.forgot_your_password)
|
title.text = getString(R.string.forgot_your_password)
|
||||||
@@ -203,7 +248,17 @@ class GetEmailFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isResetPasswordIntent){
|
if (isForgotUserName){
|
||||||
|
if (binding.userTypeSpinner.selectedItemPosition < 1){
|
||||||
|
toast(getString(R.string.please_select_a_user_type))
|
||||||
|
return@setOnClickListener
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isForgotUserName){
|
||||||
|
viewModel.forgotUsername(if (binding.userTypeSpinner.selectedItemPosition == 1) "2" else "1", binding.email.text.toString())
|
||||||
|
}
|
||||||
|
else if (isResetPasswordIntent){
|
||||||
// we are taking username from the same input box of email
|
// we are taking username from the same input box of email
|
||||||
viewModel.forgotPwdSendOTP(binding.email.text.toString())
|
viewModel.forgotPwdSendOTP(binding.email.text.toString())
|
||||||
} else if (!isUnder16) {
|
} else if (!isUnder16) {
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package com.woka.onboard.fragments
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.navigation.fragment.navArgs
|
||||||
|
import com.woka.BuildConfig
|
||||||
|
import com.woka.databinding.FragmentNewUpdateBinding
|
||||||
|
import com.woka.utils.setVisibility
|
||||||
|
|
||||||
|
class NewUpdateFragment : Fragment() {
|
||||||
|
|
||||||
|
private lateinit var binding: FragmentNewUpdateBinding
|
||||||
|
|
||||||
|
private val args: NewUpdateFragmentArgs by navArgs()
|
||||||
|
|
||||||
|
private val forceNewVersion by lazy { args.forceNewVersion }
|
||||||
|
private val currentVersion by lazy { BuildConfig.VERSION_CODE }
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View {
|
||||||
|
binding = FragmentNewUpdateBinding.inflate(inflater, container, false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
initViews()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun initViews(){
|
||||||
|
binding.apply {
|
||||||
|
skip.setVisibility(currentVersion >= forceNewVersion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -19,6 +19,7 @@ import com.woka.database.models.ContentType
|
|||||||
import com.woka.databinding.FragmentSignInBinding
|
import com.woka.databinding.FragmentSignInBinding
|
||||||
import com.woka.home.views.HomeActivity
|
import com.woka.home.views.HomeActivity
|
||||||
import com.woka.networking.ApiResult
|
import com.woka.networking.ApiResult
|
||||||
|
import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_FORGOT_USER_NAME
|
||||||
import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_RESET_PASSWORD_INTENT
|
import com.woka.onboard.fragments.GetEmailFragment.Companion.IS_RESET_PASSWORD_INTENT
|
||||||
import com.woka.onboard.mvvm.OnboardViewModel
|
import com.woka.onboard.mvvm.OnboardViewModel
|
||||||
import com.woka.userPreference.UserType
|
import com.woka.userPreference.UserType
|
||||||
@@ -200,6 +201,15 @@ class SignInFragment : Fragment() {
|
|||||||
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
forgotUserName.setOnClickListener {
|
||||||
|
findNavController().navigate(R.id.action_signInFragment_to_getEmailFragment,
|
||||||
|
Bundle().apply {
|
||||||
|
putBoolean(IS_FORGOT_USER_NAME, true)
|
||||||
|
})
|
||||||
|
|
||||||
|
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||||
|
}
|
||||||
|
|
||||||
backBtn.setOnClickListener {
|
backBtn.setOnClickListener {
|
||||||
activity?.onBackPressedDispatcher?.onBackPressed()
|
activity?.onBackPressedDispatcher?.onBackPressed()
|
||||||
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||||
|
|||||||
@@ -8,17 +8,25 @@ import android.view.LayoutInflater
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.lifecycle.LiveData
|
||||||
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.fragment.FragmentNavigatorExtras
|
import androidx.navigation.fragment.FragmentNavigatorExtras
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
|
import com.woka.BuildConfig
|
||||||
import com.woka.R
|
import com.woka.R
|
||||||
import com.woka.WokaApp.Companion.userPrefs
|
import com.woka.WokaApp.Companion.userPrefs
|
||||||
import com.woka.databinding.FragmentSplashBinding
|
import com.woka.databinding.FragmentSplashBinding
|
||||||
import com.woka.home.views.HomeActivity
|
import com.woka.home.views.HomeActivity
|
||||||
import com.woka.userdata.userDataModels.UserDataResponse
|
|
||||||
import com.woka.networking.ApiResult
|
import com.woka.networking.ApiResult
|
||||||
|
import com.woka.networking.RetrofitHelper
|
||||||
|
import com.woka.onboard.models.appupdate.VersionHistoryResponseData
|
||||||
|
import com.woka.onboard.mvvm.OnboardApiService
|
||||||
|
import com.woka.onboard.mvvm.OnboardRepository
|
||||||
|
import com.woka.streamingurls.StreamingUrlRepository
|
||||||
import com.woka.userPreference.UserType
|
import com.woka.userPreference.UserType
|
||||||
|
import com.woka.userdata.userDataModels.UserDataResponse
|
||||||
import com.woka.utils.hide
|
import com.woka.utils.hide
|
||||||
import com.woka.utils.show
|
import com.woka.utils.show
|
||||||
import com.woka.utils.toast
|
import com.woka.utils.toast
|
||||||
@@ -30,10 +38,16 @@ import kotlinx.coroutines.launch
|
|||||||
*/
|
*/
|
||||||
class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
||||||
|
|
||||||
private lateinit var binding: FragmentSplashBinding
|
private val onboardRepository =
|
||||||
|
OnboardRepository(RetrofitHelper.getRetrofit().create(OnboardApiService::class.java))
|
||||||
|
|
||||||
|
private lateinit var binding: FragmentSplashBinding
|
||||||
private var player: MediaPlayer? = null
|
private var player: MediaPlayer? = null
|
||||||
|
|
||||||
|
private val _versionHistoryLiveData = MutableLiveData<ApiResult<VersionHistoryResponseData>>()
|
||||||
|
private val versionHistoryLiveData: LiveData<ApiResult<VersionHistoryResponseData>>
|
||||||
|
get() = _versionHistoryLiveData
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
@@ -49,7 +63,9 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
|||||||
|
|
||||||
animateLogo()
|
animateLogo()
|
||||||
|
|
||||||
if (userPrefs?.userType == UserType.CHILD || userPrefs?.userType == UserType.GUARDIAN){
|
loadVersionHistory()
|
||||||
|
|
||||||
|
if (userPrefs?.userType == UserType.CHILD || userPrefs?.userType == UserType.GUARDIAN) {
|
||||||
// some type of user is logged in
|
// some type of user is logged in
|
||||||
// thus, loading data
|
// thus, loading data
|
||||||
userPrefs?.loadUserData()
|
userPrefs?.loadUserData()
|
||||||
@@ -63,7 +79,18 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
|||||||
retryBtn.setOnClickListener {
|
retryBtn.setOnClickListener {
|
||||||
retryBtn.hide()
|
retryBtn.hide()
|
||||||
progressBar.show()
|
progressBar.show()
|
||||||
userPrefs?.loadUserData()
|
|
||||||
|
if (_versionHistoryLiveData.value !is ApiResult.Success) {
|
||||||
|
loadVersionHistory()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userPrefs?.userType == UserType.CHILD || userPrefs?.userType == UserType.GUARDIAN) {
|
||||||
|
if (userPrefs?.userData == null) {
|
||||||
|
userPrefs?.loadUserData()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StreamingUrlRepository.loadLiveStreamingUrls()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -76,21 +103,15 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
|||||||
private fun animateLogo() {
|
private fun animateLogo() {
|
||||||
binding.logo.animate().scaleXBy(1f).scaleYBy(1f)
|
binding.logo.animate().scaleXBy(1f).scaleYBy(1f)
|
||||||
.setDuration(2000)
|
.setDuration(2000)
|
||||||
.setListener(object : Animator.AnimatorListener{
|
.setListener(object : Animator.AnimatorListener {
|
||||||
override fun onAnimationStart(animation: Animator) {}
|
override fun onAnimationStart(animation: Animator) {}
|
||||||
override fun onAnimationEnd(animation: Animator) {
|
override fun onAnimationEnd(animation: Animator) {
|
||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
delay(2000)
|
delay(2000)
|
||||||
if (userPrefs?.userType == UserType.NONE || userPrefs?.userType == UserType.GUEST){
|
listenVersionHistory()
|
||||||
// no user or guest is logged in
|
|
||||||
goForward()
|
|
||||||
}else{
|
|
||||||
// some user is logged in listening to user data
|
|
||||||
userPrefs?.userLiveData?.removeObserver(this@SplashFragment)
|
|
||||||
userPrefs?.userLiveData?.observe(viewLifecycleOwner, this@SplashFragment)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onAnimationCancel(animation: Animator) {}
|
override fun onAnimationCancel(animation: Animator) {}
|
||||||
override fun onAnimationRepeat(animation: Animator) {}
|
override fun onAnimationRepeat(animation: Animator) {}
|
||||||
|
|
||||||
@@ -105,18 +126,70 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
|||||||
player = null
|
player = null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun goForward(){
|
private fun loadVersionHistory() {
|
||||||
if (userPrefs?.userType == UserType.NONE){
|
lifecycleScope.launch {
|
||||||
|
_versionHistoryLiveData.postValue(ApiResult.Loading())
|
||||||
|
_versionHistoryLiveData.postValue(onboardRepository.versionHistory())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun listenVersionHistory() {
|
||||||
|
versionHistoryLiveData.observe(viewLifecycleOwner) {
|
||||||
|
when (it) {
|
||||||
|
is ApiResult.Error -> {
|
||||||
|
toast(it.errorMessage)
|
||||||
|
binding.progressBar.hide()
|
||||||
|
binding.retryBtn.show()
|
||||||
|
}
|
||||||
|
|
||||||
|
is ApiResult.Loading -> {
|
||||||
|
binding.progressBar.show()
|
||||||
|
binding.retryBtn.hide()
|
||||||
|
}
|
||||||
|
|
||||||
|
is ApiResult.Success -> {
|
||||||
|
it.data?.`0`?.new_version?.let { newVersion ->
|
||||||
|
if (BuildConfig.VERSION_CODE < newVersion) {
|
||||||
|
// a new update is available
|
||||||
|
// to be implemented
|
||||||
|
it.data.`0`.force_update_version?.let { forceVersion ->
|
||||||
|
findNavController().navigate(SplashFragmentDirections.actionSplashFragmentToNewUpdateFragment(1))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// no new update available
|
||||||
|
|
||||||
|
if (userPrefs?.userType == UserType.NONE || userPrefs?.userType == UserType.GUEST) {
|
||||||
|
// no user or guest is logged in
|
||||||
|
goForward()
|
||||||
|
} else {
|
||||||
|
// some user is logged in listening to user data
|
||||||
|
userPrefs?.userLiveData?.removeObserver(this@SplashFragment)
|
||||||
|
userPrefs?.userLiveData?.observe(
|
||||||
|
viewLifecycleOwner,
|
||||||
|
this@SplashFragment
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun goForward() {
|
||||||
|
if (userPrefs?.userType == UserType.NONE) {
|
||||||
// none of the user is logged in
|
// none of the user is logged in
|
||||||
// going through normal onboard process
|
// going through normal onboard process
|
||||||
try {
|
try {
|
||||||
val extras = FragmentNavigatorExtras(binding.logo to "logo")
|
val extras = FragmentNavigatorExtras(binding.logo to "logo")
|
||||||
findNavController().navigate(R.id.action_splashFragment_to_languageFragment,
|
findNavController().navigate(
|
||||||
null, null, extras)
|
R.id.action_splashFragment_to_languageFragment,
|
||||||
|
null, null, extras
|
||||||
|
)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
}else{
|
} else {
|
||||||
// going to home activity as any of the user is logged in
|
// going to home activity as any of the user is logged in
|
||||||
activity?.let {
|
activity?.let {
|
||||||
startActivity(Intent(it, HomeActivity::class.java).apply {
|
startActivity(Intent(it, HomeActivity::class.java).apply {
|
||||||
@@ -129,12 +202,13 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
|||||||
|
|
||||||
override fun onChanged(value: ApiResult<UserDataResponse>?) {
|
override fun onChanged(value: ApiResult<UserDataResponse>?) {
|
||||||
// on user data loaded
|
// on user data loaded
|
||||||
when (value){
|
when (value) {
|
||||||
is ApiResult.Error -> {
|
is ApiResult.Error -> {
|
||||||
toast(value.errorMessage)
|
toast(value.errorMessage)
|
||||||
binding.retryBtn.show()
|
binding.retryBtn.show()
|
||||||
binding.progressBar.hide()
|
binding.progressBar.hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
is ApiResult.Loading -> {}
|
is ApiResult.Loading -> {}
|
||||||
is ApiResult.Success -> {
|
is ApiResult.Success -> {
|
||||||
binding.retryBtn.hide()
|
binding.retryBtn.hide()
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.woka.onboard.models
|
package com.woka.onboard.models
|
||||||
|
|
||||||
data class Child(
|
data class Child(
|
||||||
val avtar: String,
|
val avtar: String?,
|
||||||
val fullname: String,
|
val fullname: String?,
|
||||||
val id: Int,
|
val id: Int?,
|
||||||
val username: String
|
val username: String?
|
||||||
)
|
)
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.woka.onboard.models.appupdate
|
||||||
|
|
||||||
|
data class VersionData(
|
||||||
|
val force_update: Int?,
|
||||||
|
val force_update_version: Int?,
|
||||||
|
val id: Int?,
|
||||||
|
val new_version: Int?,
|
||||||
|
val old_version: Int?,
|
||||||
|
val release_date: String?,
|
||||||
|
val release_notes: String?,
|
||||||
|
val version_id: String?
|
||||||
|
)
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package com.woka.onboard.models.appupdate
|
||||||
|
|
||||||
|
data class VersionHistoryResponseData(
|
||||||
|
val `0`: VersionData?,
|
||||||
|
val msg: String?,
|
||||||
|
val url: String?
|
||||||
|
)
|
||||||
@@ -2,6 +2,7 @@ package com.woka.onboard.mvvm
|
|||||||
|
|
||||||
import com.woka.networking.ApiResponse
|
import com.woka.networking.ApiResponse
|
||||||
import com.woka.onboard.models.AvatarList
|
import com.woka.onboard.models.AvatarList
|
||||||
|
import com.woka.onboard.models.Child
|
||||||
import com.woka.onboard.models.ChildListResponse
|
import com.woka.onboard.models.ChildListResponse
|
||||||
import com.woka.onboard.models.ForgotPasswrodOTPResponse
|
import com.woka.onboard.models.ForgotPasswrodOTPResponse
|
||||||
import com.woka.onboard.models.Guest
|
import com.woka.onboard.models.Guest
|
||||||
@@ -10,11 +11,13 @@ import com.woka.onboard.models.LoginResponse
|
|||||||
import com.woka.onboard.models.RegisterRequestData
|
import com.woka.onboard.models.RegisterRequestData
|
||||||
import com.woka.onboard.models.RegisterResponse
|
import com.woka.onboard.models.RegisterResponse
|
||||||
import com.woka.onboard.models.VerifyEmail
|
import com.woka.onboard.models.VerifyEmail
|
||||||
|
import com.woka.onboard.models.appupdate.VersionHistoryResponseData
|
||||||
import okhttp3.FormBody
|
import okhttp3.FormBody
|
||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import retrofit2.http.Body
|
import retrofit2.http.Body
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
import retrofit2.http.POST
|
import retrofit2.http.POST
|
||||||
|
import retrofit2.http.Query
|
||||||
|
|
||||||
interface OnboardApiService {
|
interface OnboardApiService {
|
||||||
|
|
||||||
@@ -60,4 +63,11 @@ interface OnboardApiService {
|
|||||||
@POST("guest_login")
|
@POST("guest_login")
|
||||||
suspend fun guestLogin(@Body body: FormBody): Response<ApiResponse<Guest>>
|
suspend fun guestLogin(@Body body: FormBody): Response<ApiResponse<Guest>>
|
||||||
|
|
||||||
|
@POST("forgot_username")
|
||||||
|
suspend fun forgotUsername(@Body body: FormBody): Response<ApiResponse<List<Child>>>
|
||||||
|
|
||||||
|
@GET("version_history")
|
||||||
|
suspend fun versionHistory(@Query("device") deviceId: Int): Response<ApiResponse<VersionHistoryResponseData>>
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,7 @@ import com.woka.WokaApp
|
|||||||
import com.woka.networking.ApiResult
|
import com.woka.networking.ApiResult
|
||||||
import com.woka.networking.RetrofitHelper.handleApiCall
|
import com.woka.networking.RetrofitHelper.handleApiCall
|
||||||
import com.woka.onboard.models.AvatarList
|
import com.woka.onboard.models.AvatarList
|
||||||
|
import com.woka.onboard.models.Child
|
||||||
import com.woka.onboard.models.ChildListResponse
|
import com.woka.onboard.models.ChildListResponse
|
||||||
import com.woka.onboard.models.ForgotPasswrodOTPResponse
|
import com.woka.onboard.models.ForgotPasswrodOTPResponse
|
||||||
import com.woka.onboard.models.Guest
|
import com.woka.onboard.models.Guest
|
||||||
@@ -13,6 +14,7 @@ import com.woka.onboard.models.LoginResponse
|
|||||||
import com.woka.onboard.models.RegisterRequestData
|
import com.woka.onboard.models.RegisterRequestData
|
||||||
import com.woka.onboard.models.RegisterResponse
|
import com.woka.onboard.models.RegisterResponse
|
||||||
import com.woka.onboard.models.VerifyEmail
|
import com.woka.onboard.models.VerifyEmail
|
||||||
|
import com.woka.onboard.models.appupdate.VersionHistoryResponseData
|
||||||
import okhttp3.FormBody
|
import okhttp3.FormBody
|
||||||
|
|
||||||
class OnboardRepository(private val apiService: OnboardApiService) {
|
class OnboardRepository(private val apiService: OnboardApiService) {
|
||||||
@@ -161,4 +163,21 @@ class OnboardRepository(private val apiService: OnboardApiService) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun forgotUsername(userType: String, email: String): ApiResult<List<Child>>{
|
||||||
|
return handleApiCall {
|
||||||
|
apiService.forgotUsername(
|
||||||
|
FormBody.Builder()
|
||||||
|
.add("user_type", userType)
|
||||||
|
.add("email", email)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun versionHistory(): ApiResult<VersionHistoryResponseData> {
|
||||||
|
return handleApiCall {
|
||||||
|
apiService.versionHistory(2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -78,6 +78,11 @@ class OnboardViewModel: ViewModel(){
|
|||||||
val forgotPwdOTPLiveData: LiveData<ApiResult<ForgotPasswrodOTPResponse>?>
|
val forgotPwdOTPLiveData: LiveData<ApiResult<ForgotPasswrodOTPResponse>?>
|
||||||
get() = _forgotPwdOTPLiveData
|
get() = _forgotPwdOTPLiveData
|
||||||
|
|
||||||
|
private val _forgotUsernameLiveData = MutableLiveData<ApiResult<List<Child>>?>()
|
||||||
|
fun clearForgotUsernameData() = _forgotUsernameLiveData.postValue(null)
|
||||||
|
val forgotUsernameLiveData: LiveData<ApiResult<List<Child>>?>
|
||||||
|
get() = _forgotUsernameLiveData
|
||||||
|
|
||||||
/*
|
/*
|
||||||
VerifyOTP Fragment
|
VerifyOTP Fragment
|
||||||
*/
|
*/
|
||||||
@@ -236,6 +241,14 @@ class OnboardViewModel: ViewModel(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun forgotUsername(userType: String, email: String){
|
||||||
|
viewModelScope.launch {
|
||||||
|
_forgotUsernameLiveData.postValue(ApiResult.Loading())
|
||||||
|
val response = repository.forgotUsername(userType, email)
|
||||||
|
_forgotUsernameLiveData.postValue(response)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// otp count down timer
|
// otp count down timer
|
||||||
private val otpCountDownTime = 10 * 60 * 1000L // 10 min
|
private val otpCountDownTime = 10 * 60 * 1000L // 10 min
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ class ShopViewModel: ViewModel() {
|
|||||||
|
|
||||||
var onTitleChange: ((String) -> Unit)? = null
|
var onTitleChange: ((String) -> Unit)? = null
|
||||||
|
|
||||||
|
var singleItemBehaviorDone = false
|
||||||
|
|
||||||
private val repository = ShopRepository
|
private val repository = ShopRepository
|
||||||
|
|
||||||
// super category listing
|
// super category listing
|
||||||
|
|||||||
@@ -5,9 +5,11 @@ import android.text.Html
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import androidx.activity.OnBackPressedCallback
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.navigation.fragment.navArgs
|
import androidx.navigation.fragment.navArgs
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import com.woka.R
|
import com.woka.R
|
||||||
@@ -53,6 +55,13 @@ class ProductFragment : Fragment() {
|
|||||||
|
|
||||||
imageAdapter = ProductImagesAdapter()
|
imageAdapter = ProductImagesAdapter()
|
||||||
|
|
||||||
|
activity?.onBackPressedDispatcher?.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true){
|
||||||
|
override fun handleOnBackPressed() {
|
||||||
|
findNavController().popBackStack(R.id.shopFragment3, viewModel.singleItemBehaviorDone)
|
||||||
|
viewModel.singleItemBehaviorDone = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -132,6 +132,8 @@ class ShopFragment3 : Fragment(), TabLayout.OnTabSelectedListener {
|
|||||||
categoryTabs.show()
|
categoryTabs.show()
|
||||||
categoryShimmer.hide()
|
categoryShimmer.hide()
|
||||||
errorView.hide()
|
errorView.hide()
|
||||||
|
|
||||||
|
binding.categoryTabs.removeAllTabs()
|
||||||
for (category in categoryList) {
|
for (category in categoryList) {
|
||||||
binding.categoryTabs.addTab(
|
binding.categoryTabs.addTab(
|
||||||
binding.categoryTabs.newTab()
|
binding.categoryTabs.newTab()
|
||||||
@@ -184,6 +186,14 @@ class ShopFragment3 : Fragment(), TabLayout.OnTabSelectedListener {
|
|||||||
} else {
|
} else {
|
||||||
// new category data load
|
// new category data load
|
||||||
productAdapter.submitList(productList)
|
productAdapter.submitList(productList)
|
||||||
|
if (productList.size == 1){
|
||||||
|
productList[0].id?.let {productId ->
|
||||||
|
if (!viewModel.singleItemBehaviorDone){
|
||||||
|
findNavController().navigate(ShopFragment3Directions.actionShopFragment3ToProductFragment(productId))
|
||||||
|
viewModel.singleItemBehaviorDone = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.woka.utils
|
package com.woka.utils
|
||||||
|
|
||||||
data class PagingData(
|
data class PagingData(
|
||||||
var nextPageToLoad: Int = 0, var quantityPerPage: Int = 6,
|
var nextPageToLoad: Int = 0, var quantityPerPage: Int = 10,
|
||||||
var lastPage: Boolean = false
|
var lastPage: Boolean = false
|
||||||
)
|
)
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.woka.webseries
|
package com.woka.webseries
|
||||||
|
|
||||||
import com.woka.home.mylist.MyListRepository
|
import com.woka.home.mylist.MyListRepository
|
||||||
import com.woka.home.mylist.models.BookmarkedShowData
|
|
||||||
import com.woka.home.mylist.models.PostType
|
import com.woka.home.mylist.models.PostType
|
||||||
import com.woka.modules.categorymodels.CategoriesResponse
|
import com.woka.modules.categorymodels.CategoriesResponse
|
||||||
import com.woka.networking.ApiResult
|
import com.woka.networking.ApiResult
|
||||||
@@ -18,7 +17,6 @@ import kotlinx.coroutines.CoroutineScope
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import okhttp3.FormBody
|
import okhttp3.FormBody
|
||||||
import kotlin.math.max
|
|
||||||
|
|
||||||
object WebSeriesRepository {
|
object WebSeriesRepository {
|
||||||
// api services
|
// api services
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.widget.AdapterView
|
import android.widget.AdapterView
|
||||||
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
import androidx.appcompat.content.res.AppCompatResources
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
@@ -60,6 +62,8 @@ class WebSeriesFragment : Fragment() {
|
|||||||
|
|
||||||
private lateinit var noSignInDialog: NoSignInDialog
|
private lateinit var noSignInDialog: NoSignInDialog
|
||||||
|
|
||||||
|
private lateinit var playerLauncher: ActivityResultLauncher<Intent>
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
@@ -89,6 +93,8 @@ class WebSeriesFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
continueWatchAdapter = ContinueEpisodeAdapter(requireContext())
|
continueWatchAdapter = ContinueEpisodeAdapter(requireContext())
|
||||||
|
|
||||||
|
initLaunchers()
|
||||||
|
|
||||||
initViews()
|
initViews()
|
||||||
|
|
||||||
initEpisodeDialog()
|
initEpisodeDialog()
|
||||||
@@ -102,6 +108,15 @@ class WebSeriesFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initLaunchers() {
|
||||||
|
playerLauncher =
|
||||||
|
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
|
if (userPrefs?.userType != UserType.GUEST){
|
||||||
|
viewModel.loadContinueWatching()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun clickEvents() {
|
private fun clickEvents() {
|
||||||
binding.apply {
|
binding.apply {
|
||||||
toolbar.backBtn.setOnClickListener {
|
toolbar.backBtn.setOnClickListener {
|
||||||
@@ -479,11 +494,13 @@ class WebSeriesFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
startActivity(Intent(activity, PlayerActivity::class.java)
|
playerLauncher.launch(
|
||||||
.apply {
|
Intent(activity, PlayerActivity::class.java)
|
||||||
putExtra(EXTRA_PLAY_LIST, videoPlayList)
|
.apply {
|
||||||
putExtra(EXTRA_PLAY_INDEX, 0)
|
putExtra(EXTRA_PLAY_LIST, videoPlayList)
|
||||||
})
|
putExtra(EXTRA_PLAY_INDEX, 0)
|
||||||
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package com.woka.wokagames
|
package com.woka.wokagames
|
||||||
|
|
||||||
import com.woka.home.mylist.MyListRepository
|
import com.woka.home.mylist.MyListRepository
|
||||||
import com.woka.home.mylist.models.FavGameData
|
|
||||||
import com.woka.home.mylist.models.PostType
|
import com.woka.home.mylist.models.PostType
|
||||||
import com.woka.networking.ApiResult
|
import com.woka.networking.ApiResult
|
||||||
import com.woka.networking.RetrofitHelper
|
import com.woka.networking.RetrofitHelper
|
||||||
@@ -13,7 +12,6 @@ import kotlinx.coroutines.CoroutineScope
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import okhttp3.FormBody
|
import okhttp3.FormBody
|
||||||
import kotlin.math.max
|
|
||||||
|
|
||||||
object GamesRepository {
|
object GamesRepository {
|
||||||
// api services
|
// api services
|
||||||
|
|||||||
BIN
app/src/main/res/drawable-hdpi/img_update.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
BIN
app/src/main/res/drawable-hdpi/img_volume_down.png
Normal file
|
After Width: | Height: | Size: 262 B |
BIN
app/src/main/res/drawable-hdpi/img_volume_up.png
Normal file
|
After Width: | Height: | Size: 269 B |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.9 KiB |
BIN
app/src/main/res/drawable-ldpi/img_update.png
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
app/src/main/res/drawable-ldpi/img_volume_down.png
Normal file
|
After Width: | Height: | Size: 162 B |
BIN
app/src/main/res/drawable-ldpi/img_volume_up.png
Normal file
|
After Width: | Height: | Size: 163 B |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.0 KiB |
BIN
app/src/main/res/drawable-mdpi/img_update.png
Normal file
|
After Width: | Height: | Size: 29 KiB |
BIN
app/src/main/res/drawable-mdpi/img_volume_down.png
Normal file
|
After Width: | Height: | Size: 212 B |
BIN
app/src/main/res/drawable-mdpi/img_volume_up.png
Normal file
|
After Width: | Height: | Size: 219 B |
|
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 4.6 KiB |
BIN
app/src/main/res/drawable-xhdpi/img_update.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
app/src/main/res/drawable-xhdpi/img_volume_down.png
Normal file
|
After Width: | Height: | Size: 295 B |
BIN
app/src/main/res/drawable-xhdpi/img_volume_up.png
Normal file
|
After Width: | Height: | Size: 342 B |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 12 KiB |
BIN
app/src/main/res/drawable-xxhdpi/img_update.png
Normal file
|
After Width: | Height: | Size: 157 KiB |
BIN
app/src/main/res/drawable-xxhdpi/img_volume_down.png
Normal file
|
After Width: | Height: | Size: 389 B |
BIN
app/src/main/res/drawable-xxhdpi/img_volume_up.png
Normal file
|
After Width: | Height: | Size: 454 B |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 30 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/img_update.png
Normal file
|
After Width: | Height: | Size: 247 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/img_volume_down.png
Normal file
|
After Width: | Height: | Size: 541 B |
BIN
app/src/main/res/drawable-xxxhdpi/img_volume_up.png
Normal file
|
After Width: | Height: | Size: 627 B |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 48 KiB |
8
app/src/main/res/drawable/round_bg_25_white.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<corners android:radius="25dp"/>
|
||||||
|
|
||||||
|
<solid android:color="@color/white"/>
|
||||||
|
|
||||||
|
</shape>
|
||||||
@@ -77,7 +77,7 @@
|
|||||||
android:layout_width="@dimen/_20sdp"
|
android:layout_width="@dimen/_20sdp"
|
||||||
android:layout_height="@dimen/_20sdp"
|
android:layout_height="@dimen/_20sdp"
|
||||||
android:contentDescription="@string/image"
|
android:contentDescription="@string/image"
|
||||||
android:src="@drawable/ic_like_filled"
|
android:src="@drawable/img_volume_down"
|
||||||
app:tint="@color/white"
|
app:tint="@color/white"
|
||||||
|
|
||||||
app:layout_constraintTop_toTopOf="@id/volume_view"
|
app:layout_constraintTop_toTopOf="@id/volume_view"
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
android:layout_width="@dimen/_20sdp"
|
android:layout_width="@dimen/_20sdp"
|
||||||
android:layout_height="@dimen/_20sdp"
|
android:layout_height="@dimen/_20sdp"
|
||||||
android:contentDescription="@string/image"
|
android:contentDescription="@string/image"
|
||||||
android:src="@drawable/ic_like_filled"
|
android:src="@drawable/img_volume_up"
|
||||||
app:tint="@color/white"
|
app:tint="@color/white"
|
||||||
|
|
||||||
app:layout_constraintTop_toTopOf="@id/volume_view"
|
app:layout_constraintTop_toTopOf="@id/volume_view"
|
||||||
|
|||||||
@@ -190,7 +190,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
android:text="@string/play"
|
android:text="@string/games"
|
||||||
android:fontFamily="@font/exo_2_bold"
|
android:fontFamily="@font/exo_2_bold"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/_12ssp"
|
android:textSize="@dimen/_12ssp"
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
|
|
||||||
android:layout_margin="10dp"
|
android:layout_margin="10dp"
|
||||||
|
android:src="@drawable/profile_placeholder"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -107,6 +107,60 @@
|
|||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/user_type_selection_view"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/email"
|
||||||
|
|
||||||
|
android:layout_marginTop="25dp"
|
||||||
|
>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
|
android:text="@string/select_user_type"
|
||||||
|
android:fontFamily="@font/exo_2_bold"
|
||||||
|
android:textSize="@dimen/_12ssp"
|
||||||
|
android:textColor="@color/color_primary"
|
||||||
|
android:textAlignment="center"
|
||||||
|
|
||||||
|
android:layout_marginHorizontal="15dp"
|
||||||
|
|
||||||
|
/>
|
||||||
|
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:id="@+id/spinner_card"
|
||||||
|
android:visibility="visible"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/_40sdp"
|
||||||
|
|
||||||
|
android:layout_marginHorizontal="15dp"
|
||||||
|
android:layout_marginTop="10dp"
|
||||||
|
android:layout_marginBottom="10dp"
|
||||||
|
|
||||||
|
app:cardCornerRadius="25dp"
|
||||||
|
>
|
||||||
|
|
||||||
|
<Spinner
|
||||||
|
android:id="@+id/user_type_spinner"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/_40sdp"
|
||||||
|
|
||||||
|
android:popupBackground="@drawable/round_bg_25_white"
|
||||||
|
android:textAlignment="textStart"
|
||||||
|
|
||||||
|
android:layout_marginHorizontal="10dp"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/verification_txt"
|
android:id="@+id/verification_txt"
|
||||||
android:visibility="gone"
|
android:visibility="gone"
|
||||||
|
|||||||
@@ -9,8 +9,8 @@
|
|||||||
|
|
||||||
<com.woka.utils.PressableImageView
|
<com.woka.utils.PressableImageView
|
||||||
android:id="@+id/fm_button"
|
android:id="@+id/fm_button"
|
||||||
android:layout_width="@dimen/_60sdp"
|
android:layout_width="@dimen/_65sdp"
|
||||||
android:layout_height="@dimen/_60sdp"
|
android:layout_height="@dimen/_65sdp"
|
||||||
android:layout_margin="10dp"
|
android:layout_margin="10dp"
|
||||||
android:contentDescription="@string/image"
|
android:contentDescription="@string/image"
|
||||||
|
|
||||||
@@ -148,71 +148,93 @@
|
|||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<RelativeLayout
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/tv_view"
|
android:id="@+id/tv_view"
|
||||||
android:layout_width="@dimen/_200sdp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="@dimen/_140sdp"
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
android:translationZ="3dp"
|
android:translationZ="3dp"
|
||||||
|
|
||||||
android:layout_marginStart="25dp"
|
android:layout_marginStart="25dp"
|
||||||
android:orientation="vertical"
|
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
|
||||||
app:layout_constraintTop_toTopOf="parent"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
|
||||||
app:layout_constraintVertical_bias="0.25">
|
app:layout_constraintVertical_bias="0.25">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/balloon"
|
android:id="@+id/balloon"
|
||||||
android:layout_width="@dimen/_50sdp"
|
android:layout_width="@dimen/_70sdp"
|
||||||
android:layout_height="@dimen/_36sdp"
|
android:layout_height="@dimen/_45sdp"
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:contentDescription="@string/live_tv"
|
android:contentDescription="@string/live_tv"
|
||||||
android:scaleType="fitXY"
|
android:scaleType="fitXY"
|
||||||
android:src="@drawable/img_live_tv_balloon" />
|
android:src="@drawable/img_live_tv_balloon"
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:contentDescription="@string/live_tv"
|
|
||||||
android:layout_marginTop="@dimen/_15sdp"
|
|
||||||
android:src="@drawable/img_tv_border"
|
|
||||||
android:translationZ="1dp" />
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:id="@+id/black_image"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
|
|
||||||
android:contentDescription="@string/image"
|
|
||||||
|
|
||||||
android:layout_marginHorizontal="@dimen/_37sdp"
|
|
||||||
android:layout_marginTop="@dimen/_47sdp"
|
|
||||||
android:layout_marginBottom="@dimen/_12sdp"
|
|
||||||
|
|
||||||
android:src="@android:color/black"
|
|
||||||
android:visibility="visible"
|
|
||||||
|
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintHorizontal_bias="0.52"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<androidx.media3.ui.PlayerView
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
android:id="@+id/player_view"
|
android:layout_width="@dimen/_190sdp"
|
||||||
android:layout_width="match_parent"
|
android:layout_height="@dimen/_130sdp"
|
||||||
android:layout_height="match_parent"
|
|
||||||
|
|
||||||
android:layout_marginHorizontal="@dimen/_39sdp"
|
android:layout_marginTop="@dimen/_22sdp"
|
||||||
android:layout_marginTop="@dimen/_48sdp"
|
|
||||||
android:layout_marginBottom="@dimen/_11sdp"
|
|
||||||
|
|
||||||
app:resize_mode="fill"
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
>
|
||||||
|
|
||||||
android:background="@color/black"
|
<ImageView
|
||||||
android:visibility="visible" />
|
android:id="@+id/tv_outline"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:contentDescription="@string/live_tv"
|
||||||
|
android:src="@drawable/img_tv_border"
|
||||||
|
android:translationZ="1dp" />
|
||||||
|
|
||||||
</RelativeLayout>
|
<ImageView
|
||||||
|
android:id="@+id/black_image"
|
||||||
|
android:layout_width="@dimen/_125sdp"
|
||||||
|
android:layout_height="@dimen/_84sdp"
|
||||||
|
|
||||||
|
android:contentDescription="@string/image"
|
||||||
|
|
||||||
|
android:src="@android:color/black"
|
||||||
|
android:visibility="visible"
|
||||||
|
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.75"
|
||||||
|
|
||||||
|
/>
|
||||||
|
|
||||||
|
<androidx.media3.ui.PlayerView
|
||||||
|
android:id="@+id/player_view"
|
||||||
|
android:layout_width="@dimen/_125sdp"
|
||||||
|
android:layout_height="@dimen/_84sdp"
|
||||||
|
|
||||||
|
app:resize_mode="fill"
|
||||||
|
|
||||||
|
android:background="@color/black"
|
||||||
|
android:visibility="visible"
|
||||||
|
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintVertical_bias="0.75"/>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
<androidx.constraintlayout.widget.Guideline
|
<androidx.constraintlayout.widget.Guideline
|
||||||
android:id="@+id/g1"
|
android:id="@+id/g1"
|
||||||
@@ -512,7 +534,7 @@
|
|||||||
android:layout_width="@dimen/_75sdp"
|
android:layout_width="@dimen/_75sdp"
|
||||||
android:layout_height="@dimen/_62sdp"
|
android:layout_height="@dimen/_62sdp"
|
||||||
android:translationZ="3dp"
|
android:translationZ="3dp"
|
||||||
android:contentDescription="@string/play"
|
android:contentDescription="@string/games"
|
||||||
android:scaleType="fitXY"
|
android:scaleType="fitXY"
|
||||||
android:src="@drawable/img_play_t1" />
|
android:src="@drawable/img_play_t1" />
|
||||||
|
|
||||||
@@ -522,7 +544,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
android:fontFamily="@font/exo_2_bold"
|
android:fontFamily="@font/exo_2_bold"
|
||||||
android:text="@string/play"
|
android:text="@string/games"
|
||||||
android:textAlignment="center"
|
android:textAlignment="center"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
android:textSize="@dimen/_10ssp" />
|
android:textSize="@dimen/_10ssp" />
|
||||||
|
|||||||
137
app/src/main/res/layout/fragment_new_update.xml
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout 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="@drawable/splash_bg"
|
||||||
|
tools:context=".onboard.fragments.NewUpdateFragment">
|
||||||
|
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/logo"
|
||||||
|
android:layout_width="140dp"
|
||||||
|
android:layout_height="60dp"
|
||||||
|
android:layout_marginHorizontal="15dp"
|
||||||
|
|
||||||
|
android:contentDescription="@string/app_name"
|
||||||
|
android:src="@drawable/woka_logo_full"
|
||||||
|
|
||||||
|
android:transitionName="logo"
|
||||||
|
|
||||||
|
android:layout_marginTop="15dp"
|
||||||
|
|
||||||
|
android:visibility="visible"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_marginVertical="25dp"
|
||||||
|
android:contentDescription="@string/image"
|
||||||
|
|
||||||
|
android:src="@drawable/img_update"
|
||||||
|
|
||||||
|
app:layout_constraintBottom_toTopOf="@+id/title"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/logo" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
|
android:textAlignment="center"
|
||||||
|
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:layout_marginHorizontal="15dp"
|
||||||
|
|
||||||
|
android:layout_marginBottom="15dp"
|
||||||
|
|
||||||
|
android:ellipsize="end"
|
||||||
|
|
||||||
|
android:fontFamily="@font/exo_2_bold"
|
||||||
|
android:maxLines="2"
|
||||||
|
android:textSize="@dimen/_16ssp"
|
||||||
|
android:textColor="@color/color_primary"
|
||||||
|
android:text="@string/new_update_available"
|
||||||
|
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/message"
|
||||||
|
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/message"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
|
android:layout_marginHorizontal="15dp"
|
||||||
|
android:layout_marginBottom="35dp"
|
||||||
|
|
||||||
|
android:fontFamily="@font/exo_2_medium"
|
||||||
|
android:textSize="@dimen/_14ssp"
|
||||||
|
android:textAlignment="center"
|
||||||
|
|
||||||
|
android:textColor="@color/color_primary"
|
||||||
|
android:text="@string/unlock_enhanced_features_and_improved_performance_with_our_latest_app_update"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/btn_view"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
android:id="@+id/btn_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
|
android:layout_marginHorizontal="10dp"
|
||||||
|
android:layout_marginBottom="25dp"
|
||||||
|
android:layout_marginTop="25dp"
|
||||||
|
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/skip"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
|
android:visibility="visible"
|
||||||
|
|
||||||
|
android:text="@string/skip"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:fontFamily="@font/exo_2_bold"
|
||||||
|
|
||||||
|
android:background="@drawable/grad_btn_bg_4"
|
||||||
|
|
||||||
|
android:layout_marginHorizontal="5dp"
|
||||||
|
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintEnd_toStartOf="@+id/update"
|
||||||
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
|
app:layout_constraintTop_toTopOf="parent" />
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/update"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
|
android:visibility="visible"
|
||||||
|
|
||||||
|
android:text="@string/update_app"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:fontFamily="@font/exo_2_bold"
|
||||||
|
|
||||||
|
android:background="@drawable/grad_btn_bg_4"
|
||||||
|
|
||||||
|
android:layout_marginHorizontal="5dp"
|
||||||
|
|
||||||
|
app:layout_constraintTop_toTopOf="parent"
|
||||||
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
|
app:layout_constraintStart_toEndOf="@+id/skip"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
@@ -165,20 +165,48 @@
|
|||||||
|
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<TextView
|
<LinearLayout
|
||||||
android:id="@+id/forgot_password"
|
android:layout_width="match_parent"
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:weightSum="2"
|
||||||
|
|
||||||
android:fontFamily="@font/exo_2"
|
android:layout_marginTop="5dp"
|
||||||
android:padding="5dp"
|
android:layout_marginHorizontal="15dp">
|
||||||
android:text="@string/forgot_password"
|
|
||||||
android:textAlignment="center"
|
|
||||||
android:textColor="@color/color_primary"
|
|
||||||
|
|
||||||
android:textSize="@dimen/_14sdp"
|
<TextView
|
||||||
|
android:id="@+id/forgot_user_name"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
/>
|
android:fontFamily="@font/exo_2"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:text="@string/forgot_user_name"
|
||||||
|
android:textAlignment="viewStart"
|
||||||
|
android:textColor="@color/color_primary"
|
||||||
|
|
||||||
|
android:textSize="@dimen/_12ssp"
|
||||||
|
|
||||||
|
/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/forgot_password"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
|
android:fontFamily="@font/exo_2"
|
||||||
|
android:padding="5dp"
|
||||||
|
android:text="@string/forgot_password"
|
||||||
|
android:textAlignment="viewEnd"
|
||||||
|
android:textColor="@color/color_primary"
|
||||||
|
|
||||||
|
android:textSize="@dimen/_12ssp"
|
||||||
|
|
||||||
|
/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/login"
|
android:id="@+id/login"
|
||||||
@@ -186,7 +214,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|
||||||
android:layout_marginHorizontal="15dp"
|
android:layout_marginHorizontal="15dp"
|
||||||
android:layout_marginTop="30dp"
|
android:layout_marginTop="25dp"
|
||||||
android:layout_marginBottom="15dp"
|
android:layout_marginBottom="15dp"
|
||||||
|
|
||||||
android:background="@drawable/gradient_btn_bg_2"
|
android:background="@drawable/gradient_btn_bg_2"
|
||||||
|
|||||||
@@ -37,6 +37,9 @@
|
|||||||
<action
|
<action
|
||||||
android:id="@+id/action_getEmailFragment_to_getCodeFragment"
|
android:id="@+id/action_getEmailFragment_to_getCodeFragment"
|
||||||
app:destination="@id/getCodeFragment" />
|
app:destination="@id/getCodeFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_getEmailFragment_to_childListFragment"
|
||||||
|
app:destination="@id/childListFragment" />
|
||||||
</fragment>
|
</fragment>
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/getCodeFragment"
|
android:id="@+id/getCodeFragment"
|
||||||
|
|||||||
@@ -15,10 +15,25 @@
|
|||||||
app:popUpTo="@id/splashFragment"
|
app:popUpTo="@id/splashFragment"
|
||||||
app:popUpToInclusive="true"
|
app:popUpToInclusive="true"
|
||||||
app:destination="@id/languageFragment" />
|
app:destination="@id/languageFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_splashFragment_to_newUpdateFragment"
|
||||||
|
app:destination="@id/newUpdateFragment"
|
||||||
|
app:popUpTo="@id/splashFragment"
|
||||||
|
app:popUpToInclusive="true"
|
||||||
|
/>
|
||||||
</fragment>
|
</fragment>
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/languageFragment"
|
android:id="@+id/languageFragment"
|
||||||
android:name="com.woka.onboard.fragments.LanguageFragment"
|
android:name="com.woka.onboard.fragments.LanguageFragment"
|
||||||
android:label="fragment_language"
|
android:label="fragment_language"
|
||||||
tools:layout="@layout/fragment_language" />
|
tools:layout="@layout/fragment_language" />
|
||||||
|
<fragment
|
||||||
|
android:id="@+id/newUpdateFragment"
|
||||||
|
android:name="com.woka.onboard.fragments.NewUpdateFragment"
|
||||||
|
android:label="fragment_new_update"
|
||||||
|
tools:layout="@layout/fragment_new_update" >
|
||||||
|
<argument
|
||||||
|
android:name="forceNewVersion"
|
||||||
|
app:argType="integer" />
|
||||||
|
</fragment>
|
||||||
</navigation>
|
</navigation>
|
||||||
@@ -56,6 +56,7 @@
|
|||||||
<string name="enter_your_username">अपना उपयोगकर्ता नाम दर्ज करें</string>
|
<string name="enter_your_username">अपना उपयोगकर्ता नाम दर्ज करें</string>
|
||||||
<string name="password">पासवर्ड</string>
|
<string name="password">पासवर्ड</string>
|
||||||
<string name="forgot_password">पासवर्ड भूल गए?</string>
|
<string name="forgot_password">पासवर्ड भूल गए?</string>
|
||||||
|
<string name="forgot_user_name">उपयोगकर्ता नाम भूल गए?</string>
|
||||||
<string name="forgot_your_password">अपना पासवर्ड भूल गए?</string>
|
<string name="forgot_your_password">अपना पासवर्ड भूल गए?</string>
|
||||||
<string name="please_give_us_your_username">कृपया हमें अपना उपयोगकर्ता नाम दें</string>
|
<string name="please_give_us_your_username">कृपया हमें अपना उपयोगकर्ता नाम दें</string>
|
||||||
<string name="we_will_send_a_reset_code_to_your_parent_s_email">हम आपके ईमेल पर एक रीसेट कोड भेजेंगे</string>
|
<string name="we_will_send_a_reset_code_to_your_parent_s_email">हम आपके ईमेल पर एक रीसेट कोड भेजेंगे</string>
|
||||||
@@ -147,4 +148,9 @@
|
|||||||
<string name="listen_and_enjoy">सुनें और आनंद लें</string>
|
<string name="listen_and_enjoy">सुनें और आनंद लें</string>
|
||||||
<string name="continue_audio_book">सुनना जारी रखें</string>
|
<string name="continue_audio_book">सुनना जारी रखें</string>
|
||||||
<string name="listen_now">सुनो अब</string>
|
<string name="listen_now">सुनो अब</string>
|
||||||
|
<string name="select_user_type">उपयोगकर्ता प्रकार चुनें</string>
|
||||||
|
<string name="please_select_a_user_type">कृपया एक उपयोगकर्ता प्रकार चुनें</string>
|
||||||
|
<string name="go_to_login">लॉगइन पर जाएं</string>
|
||||||
|
<string name="username_found">उपयोक्तानाम मिले</string>
|
||||||
|
<string name="user_name_linked_to_your_account">आपके खाते से जुड़े उपयोगकर्ता नाम</string>
|
||||||
</resources>
|
</resources>
|
||||||
8
app/src/main/res/values/arrays.xml
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string-array name="user_type_selection" >
|
||||||
|
<item>Select a user type</item>
|
||||||
|
<item>I am above 16 years</item>
|
||||||
|
<item>I am below 16 years</item>
|
||||||
|
</string-array>
|
||||||
|
</resources>
|
||||||
@@ -58,6 +58,7 @@
|
|||||||
<string name="enter_your_username">Enter your username</string>
|
<string name="enter_your_username">Enter your username</string>
|
||||||
<string name="password">PASSWORD</string>
|
<string name="password">PASSWORD</string>
|
||||||
<string name="forgot_password">Forgot Password?</string>
|
<string name="forgot_password">Forgot Password?</string>
|
||||||
|
<string name="forgot_user_name">Forgot Username?</string>
|
||||||
<string name="forgot_your_password">Forgot your Password?</string>
|
<string name="forgot_your_password">Forgot your Password?</string>
|
||||||
<string name="please_give_us_your_username">PLEASE GIVE US YOUR USERNAME</string>
|
<string name="please_give_us_your_username">PLEASE GIVE US YOUR USERNAME</string>
|
||||||
<string name="we_will_send_a_reset_code_to_your_parent_s_email">We will send a reset code to your email</string>
|
<string name="we_will_send_a_reset_code_to_your_parent_s_email">We will send a reset code to your email</string>
|
||||||
@@ -299,4 +300,13 @@
|
|||||||
<string name="view_all">VIEW ALL</string>
|
<string name="view_all">VIEW ALL</string>
|
||||||
<string name="alert">Alert!</string>
|
<string name="alert">Alert!</string>
|
||||||
<string name="are_you_sure_you_want_to_remove_item_from_cart">Are you sure you want to remove item from cart?</string>
|
<string name="are_you_sure_you_want_to_remove_item_from_cart">Are you sure you want to remove item from cart?</string>
|
||||||
|
<string name="select_user_type">SELECT USER TYPE</string>
|
||||||
|
<string name="please_select_a_user_type">Please select a user type</string>
|
||||||
|
<string name="go_to_login">Go to login</string>
|
||||||
|
<string name="username_found">Username Found</string>
|
||||||
|
<string name="user_name_linked_to_your_account">Username linked to your account</string>
|
||||||
|
<string name="skip">SKIP</string>
|
||||||
|
<string name="update_app">UPDATE APP</string>
|
||||||
|
<string name="new_update_available">New update available</string>
|
||||||
|
<string name="unlock_enhanced_features_and_improved_performance_with_our_latest_app_update">Unlock enhanced features and improved performance with our latest app update.</string>
|
||||||
</resources>
|
</resources>
|
||||||