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.view.WindowManager
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
@@ -58,6 +60,8 @@ class AudioBooksActivity : WokaBaseActivity() {
|
||||
|
||||
private lateinit var noSignInDialog: NoSignInDialog
|
||||
|
||||
private lateinit var playerLauncher: ActivityResultLauncher<Intent>
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
@@ -87,6 +91,8 @@ class AudioBooksActivity : WokaBaseActivity() {
|
||||
|
||||
noSignInDialog = NoSignInDialog(this)
|
||||
|
||||
initLaunchers()
|
||||
|
||||
initViews()
|
||||
|
||||
initAudioDialog()
|
||||
@@ -107,6 +113,15 @@ class AudioBooksActivity : WokaBaseActivity() {
|
||||
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||
}
|
||||
|
||||
private fun initLaunchers() {
|
||||
playerLauncher =
|
||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||
if (userPrefs?.userType != UserType.GUEST){
|
||||
viewModel.loadContinueData()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initViews() {
|
||||
binding.apply {
|
||||
adjustTrailerImage()
|
||||
@@ -364,27 +379,29 @@ class AudioBooksActivity : WokaBaseActivity() {
|
||||
}
|
||||
|
||||
url?.let {
|
||||
startActivity(Intent(this, PlayerActivity::class.java).apply {
|
||||
putExtra(
|
||||
PlayerActivity.EXTRA_PLAY_LIST,
|
||||
VideoPlayList(
|
||||
ArrayList<PlaylistItem>().apply {
|
||||
add(
|
||||
PlaylistItem.Builder()
|
||||
.file(it)
|
||||
.image(it)
|
||||
.title(title)
|
||||
.build()
|
||||
)
|
||||
},
|
||||
mutableListOf(VideoViewData(
|
||||
audioBookData.id,
|
||||
ContentType.AUDIO
|
||||
))
|
||||
playerLauncher.launch(
|
||||
Intent(this, PlayerActivity::class.java).apply {
|
||||
putExtra(
|
||||
PlayerActivity.EXTRA_PLAY_LIST,
|
||||
VideoPlayList(
|
||||
ArrayList<PlaylistItem>().apply {
|
||||
add(
|
||||
PlaylistItem.Builder()
|
||||
.file(it)
|
||||
.image(it)
|
||||
.title(title)
|
||||
.build()
|
||||
)
|
||||
},
|
||||
mutableListOf(VideoViewData(
|
||||
audioBookData.id,
|
||||
ContentType.AUDIO
|
||||
))
|
||||
)
|
||||
)
|
||||
)
|
||||
putExtra(PlayerActivity.EXTRA_PLAY_INDEX, 0)
|
||||
})
|
||||
putExtra(PlayerActivity.EXTRA_PLAY_INDEX, 0)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.woka.karaoke
|
||||
|
||||
import com.woka.home.mylist.MyListRepository
|
||||
import com.woka.home.mylist.models.FavKaraokeData
|
||||
import com.woka.home.mylist.models.PostType
|
||||
import com.woka.karaoke.models.continuesing.ContinueKaraokeResponse
|
||||
import com.woka.karaoke.models.listing.KaraokeData
|
||||
@@ -14,7 +13,6 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import okhttp3.FormBody
|
||||
import kotlin.math.max
|
||||
|
||||
object KaraokeRepository {
|
||||
|
||||
|
||||
@@ -10,6 +10,8 @@ import android.os.Bundle
|
||||
import android.text.Html
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
@@ -58,6 +60,8 @@ class KaraokeActivity : WokaBaseActivity() {
|
||||
private lateinit var karaokeDialog: Dialog
|
||||
private lateinit var noSignInDialog: NoSignInDialog
|
||||
|
||||
private lateinit var playerLauncher: ActivityResultLauncher<Intent>
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = ActivityKaraokeBinding.inflate(layoutInflater)
|
||||
@@ -89,6 +93,8 @@ class KaraokeActivity : WokaBaseActivity() {
|
||||
|
||||
noSignInDialog = NoSignInDialog(this)
|
||||
|
||||
initLaunchers()
|
||||
|
||||
initViews()
|
||||
|
||||
initKaraokeDialog()
|
||||
@@ -109,6 +115,15 @@ class KaraokeActivity : WokaBaseActivity() {
|
||||
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||
}
|
||||
|
||||
private fun initLaunchers() {
|
||||
playerLauncher =
|
||||
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||
if (userPrefs?.userType != UserType.GUEST){
|
||||
viewModel.loadContinueData()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initViews() {
|
||||
binding.apply {
|
||||
adjustTrailerImage()
|
||||
@@ -207,21 +222,36 @@ class KaraokeActivity : WokaBaseActivity() {
|
||||
|
||||
private fun onSingClicked(karaokeData: KaraokeData) {
|
||||
karaokeData.content_more_details?.let { moreDetailsList ->
|
||||
if (moreDetailsList.isNotEmpty()){
|
||||
if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1){
|
||||
moreDetailsList[1]?.let {data ->
|
||||
if (moreDetailsList.isNotEmpty()) {
|
||||
if (userPrefs?.appLanguage == "hi" && moreDetailsList.size > 1) {
|
||||
moreDetailsList[1]?.let { data ->
|
||||
data.video_url_hd?.let {
|
||||
startActivity(Intent(this@KaraokeActivity, KaraokePlayerActivity::class.java).apply {
|
||||
putExtra(EXTRA_KARAOKE_DATA, KaraokePlayerData(it, karaokeData.title, karaokeData.id))
|
||||
})
|
||||
playerLauncher.launch(
|
||||
Intent(
|
||||
this@KaraokeActivity,
|
||||
KaraokePlayerActivity::class.java
|
||||
).apply {
|
||||
putExtra(
|
||||
EXTRA_KARAOKE_DATA,
|
||||
KaraokePlayerData(it, karaokeData.title, karaokeData.id)
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
}else{
|
||||
moreDetailsList[0]?.let {data ->
|
||||
} else {
|
||||
moreDetailsList[0]?.let { data ->
|
||||
data.video_url_hd?.let {
|
||||
startActivity(Intent(this@KaraokeActivity, KaraokePlayerActivity::class.java).apply {
|
||||
putExtra(EXTRA_KARAOKE_DATA, KaraokePlayerData(it, karaokeData.title, karaokeData.id))
|
||||
})
|
||||
playerLauncher.launch(
|
||||
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) {
|
||||
holder.binding.apply {
|
||||
Glide.with(image)
|
||||
.load(childList[position].avtar)
|
||||
.fitCenter()
|
||||
.into(image)
|
||||
if (childList[position].avtar != null){
|
||||
Glide.with(image)
|
||||
.load(childList[position].avtar)
|
||||
.fitCenter()
|
||||
.into(image)
|
||||
}
|
||||
|
||||
name.text = childList[position].username
|
||||
}
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package com.woka.onboard.fragments
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.fragment.app.Fragment
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.woka.R
|
||||
@@ -13,6 +14,7 @@ import com.woka.database.models.ContentType
|
||||
import com.woka.databinding.FragmentChildListBinding
|
||||
import com.woka.onboard.adapters.ChildAdapter
|
||||
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.mvvm.OnboardViewModel
|
||||
|
||||
@@ -24,11 +26,14 @@ class ChildListFragment : Fragment() {
|
||||
private var isUnder16: Boolean = false
|
||||
private var email: String = ""
|
||||
|
||||
private var isForgotUsername = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
arguments?.let {
|
||||
isUnder16 = it.getBoolean(IS_UNDER_16)
|
||||
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]
|
||||
}
|
||||
|
||||
activity?.onBackPressedDispatcher?.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true){
|
||||
override fun handleOnBackPressed() {
|
||||
viewModel.clearForgotUsernameData()
|
||||
findNavController().popBackStack()
|
||||
}
|
||||
})
|
||||
|
||||
initViews()
|
||||
|
||||
clickEvents()
|
||||
|
||||
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() {
|
||||
binding.apply {
|
||||
next.setOnClickListener {
|
||||
gotoSignUpFragment()
|
||||
if (isForgotUsername){
|
||||
viewModel.clearForgotUsernameData()
|
||||
findNavController().popBackStack(R.id.signInFragment, false)
|
||||
}else{
|
||||
gotoSignUpFragment()
|
||||
}
|
||||
|
||||
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||
}
|
||||
|
||||
backBtn.setOnClickListener {
|
||||
activity?.onBackPressedDispatcher?.onBackPressed()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +99,9 @@ class ChildListFragment : Fragment() {
|
||||
}
|
||||
|
||||
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.VISIBLE
|
||||
import android.view.ViewGroup
|
||||
import android.widget.ArrayAdapter
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
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.PARENT_TYPE
|
||||
import com.woka.utils.ProgressView
|
||||
import com.woka.utils.show
|
||||
import com.woka.utils.toast
|
||||
|
||||
/*
|
||||
@@ -34,6 +36,7 @@ class GetEmailFragment : Fragment() {
|
||||
companion object {
|
||||
const val IS_UNDER_16 = "is_under_16"
|
||||
const val IS_RESET_PASSWORD_INTENT = "reset_password_intent"
|
||||
const val IS_FORGOT_USER_NAME = "forgot_user_name"
|
||||
}
|
||||
|
||||
private lateinit var binding: FragmentGetEmailBinding
|
||||
@@ -43,12 +46,14 @@ class GetEmailFragment : Fragment() {
|
||||
|
||||
private var isUnder16: Boolean = false
|
||||
private var isResetPasswordIntent: Boolean = false
|
||||
private var isForgotUserName: Boolean = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
arguments?.let {
|
||||
isUnder16 = it.getBoolean(IS_UNDER_16, 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 -> {}
|
||||
}
|
||||
}
|
||||
|
||||
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() {
|
||||
@@ -165,7 +197,20 @@ class GetEmailFragment : Fragment() {
|
||||
|
||||
private fun initViews() {
|
||||
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
|
||||
|
||||
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
|
||||
viewModel.forgotPwdSendOTP(binding.email.text.toString())
|
||||
} 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.home.views.HomeActivity
|
||||
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.mvvm.OnboardViewModel
|
||||
import com.woka.userPreference.UserType
|
||||
@@ -200,6 +201,15 @@ class SignInFragment : Fragment() {
|
||||
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 {
|
||||
activity?.onBackPressedDispatcher?.onBackPressed()
|
||||
ClicksHelper.upsertClickEvent(ContentType.OTHERS)
|
||||
|
||||
@@ -8,17 +8,25 @@ import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.LiveData
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.FragmentNavigatorExtras
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import com.woka.BuildConfig
|
||||
import com.woka.R
|
||||
import com.woka.WokaApp.Companion.userPrefs
|
||||
import com.woka.databinding.FragmentSplashBinding
|
||||
import com.woka.home.views.HomeActivity
|
||||
import com.woka.userdata.userDataModels.UserDataResponse
|
||||
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.userdata.userDataModels.UserDataResponse
|
||||
import com.woka.utils.hide
|
||||
import com.woka.utils.show
|
||||
import com.woka.utils.toast
|
||||
@@ -30,10 +38,16 @@ import kotlinx.coroutines.launch
|
||||
*/
|
||||
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 val _versionHistoryLiveData = MutableLiveData<ApiResult<VersionHistoryResponseData>>()
|
||||
private val versionHistoryLiveData: LiveData<ApiResult<VersionHistoryResponseData>>
|
||||
get() = _versionHistoryLiveData
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
@@ -49,7 +63,9 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
||||
|
||||
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
|
||||
// thus, loading data
|
||||
userPrefs?.loadUserData()
|
||||
@@ -63,7 +79,18 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
||||
retryBtn.setOnClickListener {
|
||||
retryBtn.hide()
|
||||
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() {
|
||||
binding.logo.animate().scaleXBy(1f).scaleYBy(1f)
|
||||
.setDuration(2000)
|
||||
.setListener(object : Animator.AnimatorListener{
|
||||
.setListener(object : Animator.AnimatorListener {
|
||||
override fun onAnimationStart(animation: Animator) {}
|
||||
override fun onAnimationEnd(animation: Animator) {
|
||||
lifecycleScope.launch {
|
||||
delay(2000)
|
||||
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)
|
||||
}
|
||||
listenVersionHistory()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onAnimationCancel(animation: Animator) {}
|
||||
override fun onAnimationRepeat(animation: Animator) {}
|
||||
|
||||
@@ -105,18 +126,70 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
||||
player = null
|
||||
}
|
||||
|
||||
private fun goForward(){
|
||||
if (userPrefs?.userType == UserType.NONE){
|
||||
private fun loadVersionHistory() {
|
||||
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
|
||||
// going through normal onboard process
|
||||
try {
|
||||
val extras = FragmentNavigatorExtras(binding.logo to "logo")
|
||||
findNavController().navigate(R.id.action_splashFragment_to_languageFragment,
|
||||
null, null, extras)
|
||||
findNavController().navigate(
|
||||
R.id.action_splashFragment_to_languageFragment,
|
||||
null, null, extras
|
||||
)
|
||||
} catch (e: Exception) {
|
||||
// do nothing
|
||||
}
|
||||
}else{
|
||||
} else {
|
||||
// going to home activity as any of the user is logged in
|
||||
activity?.let {
|
||||
startActivity(Intent(it, HomeActivity::class.java).apply {
|
||||
@@ -129,12 +202,13 @@ class SplashFragment : Fragment(), Observer<ApiResult<UserDataResponse>?> {
|
||||
|
||||
override fun onChanged(value: ApiResult<UserDataResponse>?) {
|
||||
// on user data loaded
|
||||
when (value){
|
||||
when (value) {
|
||||
is ApiResult.Error -> {
|
||||
toast(value.errorMessage)
|
||||
binding.retryBtn.show()
|
||||
binding.progressBar.hide()
|
||||
}
|
||||
|
||||
is ApiResult.Loading -> {}
|
||||
is ApiResult.Success -> {
|
||||
binding.retryBtn.hide()
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.woka.onboard.models
|
||||
|
||||
data class Child(
|
||||
val avtar: String,
|
||||
val fullname: String,
|
||||
val id: Int,
|
||||
val username: String
|
||||
val avtar: String?,
|
||||
val fullname: String?,
|
||||
val id: Int?,
|
||||
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.onboard.models.AvatarList
|
||||
import com.woka.onboard.models.Child
|
||||
import com.woka.onboard.models.ChildListResponse
|
||||
import com.woka.onboard.models.ForgotPasswrodOTPResponse
|
||||
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.RegisterResponse
|
||||
import com.woka.onboard.models.VerifyEmail
|
||||
import com.woka.onboard.models.appupdate.VersionHistoryResponseData
|
||||
import okhttp3.FormBody
|
||||
import retrofit2.Response
|
||||
import retrofit2.http.Body
|
||||
import retrofit2.http.GET
|
||||
import retrofit2.http.POST
|
||||
import retrofit2.http.Query
|
||||
|
||||
interface OnboardApiService {
|
||||
|
||||
@@ -60,4 +63,11 @@ interface OnboardApiService {
|
||||
@POST("guest_login")
|
||||
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.RetrofitHelper.handleApiCall
|
||||
import com.woka.onboard.models.AvatarList
|
||||
import com.woka.onboard.models.Child
|
||||
import com.woka.onboard.models.ChildListResponse
|
||||
import com.woka.onboard.models.ForgotPasswrodOTPResponse
|
||||
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.RegisterResponse
|
||||
import com.woka.onboard.models.VerifyEmail
|
||||
import com.woka.onboard.models.appupdate.VersionHistoryResponseData
|
||||
import okhttp3.FormBody
|
||||
|
||||
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>?>
|
||||
get() = _forgotPwdOTPLiveData
|
||||
|
||||
private val _forgotUsernameLiveData = MutableLiveData<ApiResult<List<Child>>?>()
|
||||
fun clearForgotUsernameData() = _forgotUsernameLiveData.postValue(null)
|
||||
val forgotUsernameLiveData: LiveData<ApiResult<List<Child>>?>
|
||||
get() = _forgotUsernameLiveData
|
||||
|
||||
/*
|
||||
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
|
||||
private val otpCountDownTime = 10 * 60 * 1000L // 10 min
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ class ShopViewModel: ViewModel() {
|
||||
|
||||
var onTitleChange: ((String) -> Unit)? = null
|
||||
|
||||
var singleItemBehaviorDone = false
|
||||
|
||||
private val repository = ShopRepository
|
||||
|
||||
// super category listing
|
||||
|
||||
@@ -5,9 +5,11 @@ import android.text.Html
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.OnBackPressedCallback
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.fragment.navArgs
|
||||
import com.google.android.material.tabs.TabLayoutMediator
|
||||
import com.woka.R
|
||||
@@ -53,6 +55,13 @@ class ProductFragment : Fragment() {
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
|
||||
@@ -132,6 +132,8 @@ class ShopFragment3 : Fragment(), TabLayout.OnTabSelectedListener {
|
||||
categoryTabs.show()
|
||||
categoryShimmer.hide()
|
||||
errorView.hide()
|
||||
|
||||
binding.categoryTabs.removeAllTabs()
|
||||
for (category in categoryList) {
|
||||
binding.categoryTabs.addTab(
|
||||
binding.categoryTabs.newTab()
|
||||
@@ -184,6 +186,14 @@ class ShopFragment3 : Fragment(), TabLayout.OnTabSelectedListener {
|
||||
} else {
|
||||
// new category data load
|
||||
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
|
||||
|
||||
data class PagingData(
|
||||
var nextPageToLoad: Int = 0, var quantityPerPage: Int = 6,
|
||||
var nextPageToLoad: Int = 0, var quantityPerPage: Int = 10,
|
||||
var lastPage: Boolean = false
|
||||
)
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.woka.webseries
|
||||
|
||||
import com.woka.home.mylist.MyListRepository
|
||||
import com.woka.home.mylist.models.BookmarkedShowData
|
||||
import com.woka.home.mylist.models.PostType
|
||||
import com.woka.modules.categorymodels.CategoriesResponse
|
||||
import com.woka.networking.ApiResult
|
||||
@@ -18,7 +17,6 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import okhttp3.FormBody
|
||||
import kotlin.math.max
|
||||
|
||||
object WebSeriesRepository {
|
||||
// api services
|
||||
|
||||
@@ -12,6 +12,8 @@ import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import android.widget.AdapterView
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
@@ -60,6 +62,8 @@ class WebSeriesFragment : Fragment() {
|
||||
|
||||
private lateinit var noSignInDialog: NoSignInDialog
|
||||
|
||||
private lateinit var playerLauncher: ActivityResultLauncher<Intent>
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
@@ -89,6 +93,8 @@ class WebSeriesFragment : Fragment() {
|
||||
}
|
||||
continueWatchAdapter = ContinueEpisodeAdapter(requireContext())
|
||||
|
||||
initLaunchers()
|
||||
|
||||
initViews()
|
||||
|
||||
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() {
|
||||
binding.apply {
|
||||
toolbar.backBtn.setOnClickListener {
|
||||
@@ -479,11 +494,13 @@ class WebSeriesFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
|
||||
startActivity(Intent(activity, PlayerActivity::class.java)
|
||||
.apply {
|
||||
putExtra(EXTRA_PLAY_LIST, videoPlayList)
|
||||
putExtra(EXTRA_PLAY_INDEX, 0)
|
||||
})
|
||||
playerLauncher.launch(
|
||||
Intent(activity, PlayerActivity::class.java)
|
||||
.apply {
|
||||
putExtra(EXTRA_PLAY_LIST, videoPlayList)
|
||||
putExtra(EXTRA_PLAY_INDEX, 0)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.woka.wokagames
|
||||
|
||||
import com.woka.home.mylist.MyListRepository
|
||||
import com.woka.home.mylist.models.FavGameData
|
||||
import com.woka.home.mylist.models.PostType
|
||||
import com.woka.networking.ApiResult
|
||||
import com.woka.networking.RetrofitHelper
|
||||
@@ -13,7 +12,6 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import okhttp3.FormBody
|
||||
import kotlin.math.max
|
||||
|
||||
object GamesRepository {
|
||||
// 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_height="@dimen/_20sdp"
|
||||
android:contentDescription="@string/image"
|
||||
android:src="@drawable/ic_like_filled"
|
||||
android:src="@drawable/img_volume_down"
|
||||
app:tint="@color/white"
|
||||
|
||||
app:layout_constraintTop_toTopOf="@id/volume_view"
|
||||
@@ -91,7 +91,7 @@
|
||||
android:layout_width="@dimen/_20sdp"
|
||||
android:layout_height="@dimen/_20sdp"
|
||||
android:contentDescription="@string/image"
|
||||
android:src="@drawable/ic_like_filled"
|
||||
android:src="@drawable/img_volume_up"
|
||||
app:tint="@color/white"
|
||||
|
||||
app:layout_constraintTop_toTopOf="@id/volume_view"
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:text="@string/play"
|
||||
android:text="@string/games"
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:textColor="@color/white"
|
||||
android:textSize="@dimen/_12ssp"
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
android:layout_height="match_parent"
|
||||
|
||||
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
|
||||
android:id="@+id/verification_txt"
|
||||
android:visibility="gone"
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
|
||||
<com.woka.utils.PressableImageView
|
||||
android:id="@+id/fm_button"
|
||||
android:layout_width="@dimen/_60sdp"
|
||||
android:layout_height="@dimen/_60sdp"
|
||||
android:layout_width="@dimen/_65sdp"
|
||||
android:layout_height="@dimen/_65sdp"
|
||||
android:layout_margin="10dp"
|
||||
android:contentDescription="@string/image"
|
||||
|
||||
@@ -148,71 +148,93 @@
|
||||
|
||||
/>
|
||||
|
||||
<RelativeLayout
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/tv_view"
|
||||
android:layout_width="@dimen/_200sdp"
|
||||
android:layout_height="@dimen/_140sdp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:translationZ="3dp"
|
||||
|
||||
android:layout_marginStart="25dp"
|
||||
android:orientation="vertical"
|
||||
|
||||
android:gravity="center_horizontal"
|
||||
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
|
||||
app:layout_constraintVertical_bias="0.25">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/balloon"
|
||||
android:layout_width="@dimen/_50sdp"
|
||||
android:layout_height="@dimen/_36sdp"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_width="@dimen/_70sdp"
|
||||
android:layout_height="@dimen/_45sdp"
|
||||
android:contentDescription="@string/live_tv"
|
||||
android:scaleType="fitXY"
|
||||
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"
|
||||
android:src="@drawable/img_live_tv_balloon"
|
||||
|
||||
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
|
||||
android:id="@+id/player_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:layout_width="@dimen/_190sdp"
|
||||
android:layout_height="@dimen/_130sdp"
|
||||
|
||||
android:layout_marginHorizontal="@dimen/_39sdp"
|
||||
android:layout_marginTop="@dimen/_48sdp"
|
||||
android:layout_marginBottom="@dimen/_11sdp"
|
||||
android:layout_marginTop="@dimen/_22sdp"
|
||||
|
||||
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"
|
||||
android:visibility="visible" />
|
||||
<ImageView
|
||||
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
|
||||
android:id="@+id/g1"
|
||||
@@ -512,7 +534,7 @@
|
||||
android:layout_width="@dimen/_75sdp"
|
||||
android:layout_height="@dimen/_62sdp"
|
||||
android:translationZ="3dp"
|
||||
android:contentDescription="@string/play"
|
||||
android:contentDescription="@string/games"
|
||||
android:scaleType="fitXY"
|
||||
android:src="@drawable/img_play_t1" />
|
||||
|
||||
@@ -522,7 +544,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:fontFamily="@font/exo_2_bold"
|
||||
android:text="@string/play"
|
||||
android:text="@string/games"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@color/white"
|
||||
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>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/forgot_password"
|
||||
android:layout_width="wrap_content"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal"
|
||||
android:weightSum="2"
|
||||
|
||||
android:fontFamily="@font/exo_2"
|
||||
android:padding="5dp"
|
||||
android:text="@string/forgot_password"
|
||||
android:textAlignment="center"
|
||||
android:textColor="@color/color_primary"
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_marginHorizontal="15dp">
|
||||
|
||||
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
|
||||
android:id="@+id/login"
|
||||
@@ -186,7 +214,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
android:layout_marginHorizontal="15dp"
|
||||
android:layout_marginTop="30dp"
|
||||
android:layout_marginTop="25dp"
|
||||
android:layout_marginBottom="15dp"
|
||||
|
||||
android:background="@drawable/gradient_btn_bg_2"
|
||||
|
||||
@@ -37,6 +37,9 @@
|
||||
<action
|
||||
android:id="@+id/action_getEmailFragment_to_getCodeFragment"
|
||||
app:destination="@id/getCodeFragment" />
|
||||
<action
|
||||
android:id="@+id/action_getEmailFragment_to_childListFragment"
|
||||
app:destination="@id/childListFragment" />
|
||||
</fragment>
|
||||
<fragment
|
||||
android:id="@+id/getCodeFragment"
|
||||
|
||||
@@ -15,10 +15,25 @@
|
||||
app:popUpTo="@id/splashFragment"
|
||||
app:popUpToInclusive="true"
|
||||
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
|
||||
android:id="@+id/languageFragment"
|
||||
android:name="com.woka.onboard.fragments.LanguageFragment"
|
||||
android:label="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>
|
||||
@@ -56,6 +56,7 @@
|
||||
<string name="enter_your_username">अपना उपयोगकर्ता नाम दर्ज करें</string>
|
||||
<string name="password">पासवर्ड</string>
|
||||
<string name="forgot_password">पासवर्ड भूल गए?</string>
|
||||
<string name="forgot_user_name">उपयोगकर्ता नाम भूल गए?</string>
|
||||
<string name="forgot_your_password">अपना पासवर्ड भूल गए?</string>
|
||||
<string name="please_give_us_your_username">कृपया हमें अपना उपयोगकर्ता नाम दें</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="continue_audio_book">सुनना जारी रखें</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>
|
||||
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="password">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="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>
|
||||
@@ -299,4 +300,13 @@
|
||||
<string name="view_all">VIEW ALL</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="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>
|
||||