From e4c050eec727d8494a3df1ebc1108200d77cd352 Mon Sep 17 00:00:00 2001 From: AdityaGaikwad Date: Fri, 7 Jun 2024 20:35:58 +0530 Subject: [PATCH] Addchild key when parent adding child Logging-out user when success is 4 for session expired WebView for Terms and conditions and privacy policy DisclaimerActivity and showing static content Notification count view and showing count from user data MoreActivity - Song api integration and showing songs --- app/src/main/AndroidManifest.xml | 12 +- .../main/java/com/woka/home/HomeActivity.kt | 37 +++++ .../java/com/woka/home/MoreHomeActivity.kt | 38 ++++- .../main/java/com/woka/home/MoreViewModel.kt | 7 + .../sidebar/profile/UserProfileActivity.kt | 13 ++ .../java/com/woka/modules/ModuleApiService.kt | 4 + .../modules/disclaimer/DisclaimerActivity.kt | 30 ++++ .../woka/modules/webview/WebViewActivity.kt | 77 ++++++++++ .../modules/wokasongs/WokaSongsAdapter.kt | 46 ++++++ .../modules/wokasongs/WokaSongsRepository.kt | 37 +++++ .../wokasongs/models/ContentMoreDetail.kt | 12 ++ .../woka/modules/wokasongs/models/SongData.kt | 23 +++ .../wokasongs/models/WokaSongsResponse.kt | 6 + .../com/woka/networking/RetrofitHelper.kt | 15 +- .../woka/networking/SessionExpiredError.kt | 3 + .../onboard/fragments/SelectAvatarFragment.kt | 2 +- .../woka/onboard/fragments/SignUpFragment.kt | 1 + .../woka/onboard/fragments/SplashFragment.kt | 10 +- .../com/woka/onboard/mvvm/OnboardViewModel.kt | 2 + .../com/woka/userPreference/UserPreference.kt | 12 +- app/src/main/java/com/woka/utils/Constants.kt | 7 +- app/src/main/res/drawable/ic_pause.xml | 7 + app/src/main/res/drawable/ic_play.xml | 7 + .../main/res/layout/activity_disclaimer.xml | 74 ++++++++++ app/src/main/res/layout/activity_home.xml | 135 ++++++++++++------ .../main/res/layout/activity_more_home.xml | 39 +++-- app/src/main/res/layout/activity_web_view.xml | 27 ++++ .../main/res/layout/woka_song_view_holder.xml | 105 ++++++++++++++ app/src/main/res/values-hi/strings.xml | 7 + app/src/main/res/values/strings.xml | 29 ++-- 30 files changed, 742 insertions(+), 82 deletions(-) create mode 100644 app/src/main/java/com/woka/home/MoreViewModel.kt create mode 100644 app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt create mode 100644 app/src/main/java/com/woka/modules/webview/WebViewActivity.kt create mode 100644 app/src/main/java/com/woka/modules/wokasongs/WokaSongsAdapter.kt create mode 100644 app/src/main/java/com/woka/modules/wokasongs/WokaSongsRepository.kt create mode 100644 app/src/main/java/com/woka/modules/wokasongs/models/ContentMoreDetail.kt create mode 100644 app/src/main/java/com/woka/modules/wokasongs/models/SongData.kt create mode 100644 app/src/main/java/com/woka/modules/wokasongs/models/WokaSongsResponse.kt create mode 100644 app/src/main/java/com/woka/networking/SessionExpiredError.kt create mode 100644 app/src/main/res/drawable/ic_pause.xml create mode 100644 app/src/main/res/drawable/ic_play.xml create mode 100644 app/src/main/res/layout/activity_disclaimer.xml create mode 100644 app/src/main/res/layout/activity_web_view.xml create mode 100644 app/src/main/res/layout/woka_song_view_holder.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 701e14b..10d8619 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -16,11 +16,17 @@ android:theme="@style/Theme.Woka" tools:targetApi="31"> + android:name=".modules.disclaimer.DisclaimerActivity" + android:exported="false" + android:screenOrientation="portrait" /> + + android:exported="false" + android:screenOrientation="portrait" /> ?>, @@ -331,6 +337,28 @@ class HomeActivity : WokaBaseActivity(), } } + sbTermsNConditionsCard.setOnClickListener { + startActivity( + Intent(this@HomeActivity, WebViewActivity::class.java).apply { + putExtra(WEB_VIEW_URL, TERMS_N_CONDITIONS_URL) + } + ) + } + + sbPrivacyNPolicyCard.setOnClickListener { + startActivity( + Intent(this@HomeActivity, WebViewActivity::class.java).apply { + putExtra(WEB_VIEW_URL, PRIVACY_N_POLICY_URL) + } + ) + } + + sbDisclaimerCard.setOnClickListener { + startActivity( + Intent(this@HomeActivity, DisclaimerActivity::class.java) + ) + } + } } @@ -504,6 +532,15 @@ class HomeActivity : WokaBaseActivity(), sbBtn.text = getString(R.string.logout) } } + + value.data?.userNotificationsCount?.let { + if (it == 0){ + binding.notiCountView.hide() + }else{ + binding.notiCountView.show() + binding.notiCount.text = "${min(it, 99)}" + } + }?:binding.notiCountView.hide() } null -> {} diff --git a/app/src/main/java/com/woka/home/MoreHomeActivity.kt b/app/src/main/java/com/woka/home/MoreHomeActivity.kt index 2af1cb1..711ceb6 100644 --- a/app/src/main/java/com/woka/home/MoreHomeActivity.kt +++ b/app/src/main/java/com/woka/home/MoreHomeActivity.kt @@ -7,16 +7,19 @@ import android.view.WindowManager import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.lifecycle.ViewModelProvider +import com.google.android.exoplayer2.ExoPlayer import com.woka.R import com.woka.databinding.ActivityMoreHomeBinding import com.woka.modules.blogs.BlogsAdapter import com.woka.modules.blogs.BlogsRepository +import com.woka.modules.wokasongs.WokaSongsAdapter +import com.woka.modules.wokasongs.WokaSongsRepository import com.woka.networking.ApiResult import com.woka.utils.WokaBaseActivity import com.woka.utils.hide import com.woka.utils.lightStatusBar import com.woka.utils.show -import com.woka.utils.toast class MoreHomeActivity : WokaBaseActivity() { @@ -24,6 +27,12 @@ class MoreHomeActivity : WokaBaseActivity() { private lateinit var blogsAdapter: BlogsAdapter + private lateinit var viewModel: MoreViewModel + + private lateinit var songsAdapter: WokaSongsAdapter + + private var player: ExoPlayer? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) with(window){ @@ -45,7 +54,10 @@ class MoreHomeActivity : WokaBaseActivity() { lightStatusBar() } + viewModel = ViewModelProvider(this)[MoreViewModel::class.java] + blogsAdapter = BlogsAdapter() + songsAdapter = WokaSongsAdapter() initViews() @@ -65,6 +77,7 @@ class MoreHomeActivity : WokaBaseActivity() { private fun initViews(){ binding.apply { rvBlogs.adapter = blogsAdapter + rvWokaSongs.adapter = songsAdapter } } @@ -72,7 +85,6 @@ class MoreHomeActivity : WokaBaseActivity() { BlogsRepository.blogsLiveData.observe(this){ when(it){ is ApiResult.Error -> { - toast(it.errorMessage) binding.blogsTxt.hide() binding.rvBlogs.hide() } @@ -91,5 +103,27 @@ class MoreHomeActivity : WokaBaseActivity() { null -> {} } } + + WokaSongsRepository.wokaSongsLiveData.observe(this){ + when(it){ + is ApiResult.Error -> { + binding.wokaSongsTxt.hide() + binding.rvWokaSongs.hide() + } + is ApiResult.Loading -> { + binding.wokaSongsTxt.hide() + binding.rvWokaSongs.hide() + } + is ApiResult.Success -> { + + it.data?.paint_data?.let {songList -> + binding.wokaSongsTxt.show() + binding.rvWokaSongs.show() + + songsAdapter.submitList(songList) + } + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/MoreViewModel.kt b/app/src/main/java/com/woka/home/MoreViewModel.kt new file mode 100644 index 0000000..f7e528d --- /dev/null +++ b/app/src/main/java/com/woka/home/MoreViewModel.kt @@ -0,0 +1,7 @@ +package com.woka.home + +import androidx.lifecycle.ViewModel + +class MoreViewModel: ViewModel() { + +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt b/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt index ae742c6..f1554e6 100644 --- a/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt +++ b/app/src/main/java/com/woka/home/sidebar/profile/UserProfileActivity.kt @@ -16,6 +16,7 @@ import com.woka.userdata.userDataModels.UserData import com.woka.networking.ApiResult import com.woka.utils.Gender import com.woka.utils.ProgressView +import com.woka.utils.UserType import com.woka.utils.WokaBaseActivity import com.woka.utils.hide import com.woka.utils.toast @@ -44,11 +45,23 @@ class UserProfileActivity : WokaBaseActivity() { viewModel = ViewModelProvider(this)[ProfileViewModel::class.java] progressView = ProgressView(this, getString(R.string.please_wait)) + initViews() + clickEvents() setObservers() } + private fun initViews() { + binding.apply { + genderMTxt.text = if (userPrefs?.userType == UserType.GUARDIAN) getString(R.string.male) + else getString(R.string.boy) + + genderFTxt.text = if (userPrefs?.userType == UserType.GUARDIAN) getString(R.string.female) + else getString(R.string.girl) + } + } + private fun clickEvents() { binding.apply { genderM.setOnClickListener { selectGender(Gender.MALE) } diff --git a/app/src/main/java/com/woka/modules/ModuleApiService.kt b/app/src/main/java/com/woka/modules/ModuleApiService.kt index 09f01eb..b8e6caa 100644 --- a/app/src/main/java/com/woka/modules/ModuleApiService.kt +++ b/app/src/main/java/com/woka/modules/ModuleApiService.kt @@ -2,6 +2,7 @@ package com.woka.modules import com.woka.modules.blogs.models.BlogsResponse import com.woka.modules.faqs.models.FaqResponse +import com.woka.modules.wokasongs.models.WokaSongsResponse import com.woka.networking.ApiResponse import okhttp3.FormBody import retrofit2.Response @@ -22,4 +23,7 @@ interface ModuleApiService { @POST("user_queries_store") suspend fun supportForUser(@Body body: FormBody): Response> + + @POST("song_listing") + suspend fun getWokaSongs(): Response> } \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt b/app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt new file mode 100644 index 0000000..0b393b8 --- /dev/null +++ b/app/src/main/java/com/woka/modules/disclaimer/DisclaimerActivity.kt @@ -0,0 +1,30 @@ +package com.woka.modules.disclaimer + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import com.woka.R +import com.woka.databinding.ActivityDisclaimerBinding +import com.woka.utils.WokaBaseActivity + +class DisclaimerActivity : WokaBaseActivity() { + + private lateinit var binding: ActivityDisclaimerBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + binding = ActivityDisclaimerBinding.inflate(layoutInflater) + setContentView(binding.root) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + binding.backBtn.setOnClickListener { + onBackPressedDispatcher.onBackPressed() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/webview/WebViewActivity.kt b/app/src/main/java/com/woka/modules/webview/WebViewActivity.kt new file mode 100644 index 0000000..34be90f --- /dev/null +++ b/app/src/main/java/com/woka/modules/webview/WebViewActivity.kt @@ -0,0 +1,77 @@ +package com.woka.modules.webview + +import android.annotation.SuppressLint +import android.graphics.Bitmap +import android.os.Build +import android.os.Bundle +import android.webkit.WebResourceRequest +import android.webkit.WebSettings +import android.webkit.WebView +import android.webkit.WebViewClient +import android.widget.ProgressBar +import androidx.activity.enableEdgeToEdge +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import com.woka.R +import com.woka.databinding.ActivityWebViewBinding +import com.woka.utils.WEBSITE_BASE_URL +import com.woka.utils.WokaBaseActivity +import com.woka.utils.hide +import com.woka.utils.show + +class WebViewActivity : WokaBaseActivity() { + + companion object{ + const val WEB_VIEW_URL = "web_view_url" + } + + private lateinit var binding: ActivityWebViewBinding + + @SuppressLint("SetJavaScriptEnabled") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + binding = ActivityWebViewBinding.inflate(layoutInflater) + setContentView(binding.root) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + intent.getStringExtra(WEB_VIEW_URL)?.let { + val webSettings: WebSettings = binding.webView.getSettings() + webSettings.javaScriptEnabled = true + + webSettings.allowFileAccess = false; + webSettings.allowContentAccess = false; + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + webSettings.safeBrowsingEnabled = true + }; + + binding.webView.setWebViewClient(SecureWebViewClient(binding.progressBar)) + + binding.webView.loadUrl(it) + } + } + + private class SecureWebViewClient(val progressBar: ProgressBar) : WebViewClient() { + + override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { + super.onPageStarted(view, url, favicon) + progressBar.show() + } + + override fun onPageFinished(view: WebView?, url: String?) { + super.onPageFinished(view, url) + progressBar.hide() + } + + override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean { + val url = request.url.toString() + return !url.startsWith(WEBSITE_BASE_URL) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/wokasongs/WokaSongsAdapter.kt b/app/src/main/java/com/woka/modules/wokasongs/WokaSongsAdapter.kt new file mode 100644 index 0000000..22849b1 --- /dev/null +++ b/app/src/main/java/com/woka/modules/wokasongs/WokaSongsAdapter.kt @@ -0,0 +1,46 @@ +package com.woka.modules.wokasongs + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.AsyncDifferConfig +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView.ViewHolder +import com.woka.databinding.WokaSongViewHolderBinding +import com.woka.modules.wokasongs.models.SongData +import java.util.concurrent.Executors + +class WokaSongsAdapter(config: AsyncDifferConfig): ListAdapter(config) { + + inner class SongViewHolder(val binding: WokaSongViewHolderBinding): ViewHolder(binding.root) + + companion object{ + private val DIFF_UTILS = object : DiffUtil.ItemCallback(){ + override fun areItemsTheSame(oldItem: SongData, newItem: SongData): Boolean = + oldItem.id == newItem.id + + override fun areContentsTheSame(oldItem: SongData, newItem: SongData): Boolean = + oldItem == newItem + } + + private val ASYNC_DIFF_CONFIG = AsyncDifferConfig.Builder(DIFF_UTILS) + .setBackgroundThreadExecutor(Executors.newSingleThreadExecutor()) + .build() + } + + constructor(): this(ASYNC_DIFF_CONFIG) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SongViewHolder { + return SongViewHolder( + WokaSongViewHolderBinding.inflate(LayoutInflater.from(parent.context), + parent, false) + ) + } + + override fun onBindViewHolder(holder: SongViewHolder, position: Int) { + val songData = getItem(position) + holder.binding.apply { + title.text = songData.title + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/wokasongs/WokaSongsRepository.kt b/app/src/main/java/com/woka/modules/wokasongs/WokaSongsRepository.kt new file mode 100644 index 0000000..b9a5fe1 --- /dev/null +++ b/app/src/main/java/com/woka/modules/wokasongs/WokaSongsRepository.kt @@ -0,0 +1,37 @@ +package com.woka.modules.wokasongs + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.woka.modules.ModuleApiService +import com.woka.modules.wokasongs.models.WokaSongsResponse +import com.woka.networking.ApiResult +import com.woka.networking.RetrofitHelper +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +object WokaSongsRepository { + + private val apiService = RetrofitHelper.getRetrofit().create(ModuleApiService::class.java) + + private val _wokaSongsLiveData = MutableLiveData>() + val wokaSongsLiveData: LiveData> + get() = _wokaSongsLiveData + + init { + loadWokaSongs() + } + + private suspend fun getWokaSongs(): ApiResult{ + return RetrofitHelper.handleApiCall { + apiService.getWokaSongs() + } + } + + private fun loadWokaSongs(){ + CoroutineScope(Dispatchers.IO).launch { + _wokaSongsLiveData.postValue(ApiResult.Loading()) + _wokaSongsLiveData.postValue(getWokaSongs()) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/wokasongs/models/ContentMoreDetail.kt b/app/src/main/java/com/woka/modules/wokasongs/models/ContentMoreDetail.kt new file mode 100644 index 0000000..31fb524 --- /dev/null +++ b/app/src/main/java/com/woka/modules/wokasongs/models/ContentMoreDetail.kt @@ -0,0 +1,12 @@ +package com.woka.modules.wokasongs.models + +data class ContentMoreDetail( + val content_id: Int?, + val description: String?, + val id: Int?, + val language_master_id: Int?, + val post_type: Int?, + val tags_keywords: String?, + val title: String?, + val url: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/wokasongs/models/SongData.kt b/app/src/main/java/com/woka/modules/wokasongs/models/SongData.kt new file mode 100644 index 0000000..2b2b1ee --- /dev/null +++ b/app/src/main/java/com/woka/modules/wokasongs/models/SongData.kt @@ -0,0 +1,23 @@ +package com.woka.modules.wokasongs.models + +data class SongData( + val age_range_data: List?, + val age_range_master_id: String?, + val bookmark_count: Int?, + val category_data: List?, + val category_master_id: String?, + val content_more_details: List?, + val description: String?, + val gender_data: List?, + val gender_master_id: String?, + val id: Int?, + val is_liked: Boolean?, + val language_master_id: Int?, + val likes_count: Int?, + val mark_as_favourite: Boolean?, + val release_date: String?, + val song_duration: String?, + val tags_keyword: String?, + val thumbnail_image: String?, + val title: String? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/modules/wokasongs/models/WokaSongsResponse.kt b/app/src/main/java/com/woka/modules/wokasongs/models/WokaSongsResponse.kt new file mode 100644 index 0000000..ff4c682 --- /dev/null +++ b/app/src/main/java/com/woka/modules/wokasongs/models/WokaSongsResponse.kt @@ -0,0 +1,6 @@ +package com.woka.modules.wokasongs.models + +data class WokaSongsResponse( + val paint_data: List?, + val total_records: Int? +) \ No newline at end of file diff --git a/app/src/main/java/com/woka/networking/RetrofitHelper.kt b/app/src/main/java/com/woka/networking/RetrofitHelper.kt index 3bdc6bb..78eb7c3 100644 --- a/app/src/main/java/com/woka/networking/RetrofitHelper.kt +++ b/app/src/main/java/com/woka/networking/RetrofitHelper.kt @@ -83,10 +83,17 @@ object RetrofitHelper { fun handleApiResponse(response: Response>): ApiResult { if (response.isSuccessful) { val body = response.body() ?: return ApiResult.Error(errorMessage = "Empty Response") - return if (body.success == 1) { - ApiResult.Success(body.data, body.message) - } else { - ApiResult.Error(errorMessage = body.message, error = NoSuccessError()) + return when (body.success) { + 1 -> { + ApiResult.Success(body.data, body.message) + } + 4 -> { + userPrefs?.logout(true) + ApiResult.Error(errorMessage = body.message, error = SessionExpiredError()) + } + else -> { + ApiResult.Error(errorMessage = body.message, error = NoSuccessError()) + } } } else { return ApiResult.Error(errorMessage = response.message()) diff --git a/app/src/main/java/com/woka/networking/SessionExpiredError.kt b/app/src/main/java/com/woka/networking/SessionExpiredError.kt new file mode 100644 index 0000000..ac9ea90 --- /dev/null +++ b/app/src/main/java/com/woka/networking/SessionExpiredError.kt @@ -0,0 +1,3 @@ +package com.woka.networking + +class SessionExpiredError: Throwable() \ No newline at end of file diff --git a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt index 242e3d7..1fc3b6b 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SelectAvatarFragment.kt @@ -78,7 +78,7 @@ class SelectAvatarFragment : Fragment() { val registerRequestData = with(viewModel){ RegisterRequestData( - add_child = "0", + add_child = if (viewModel.addChildIntent) "1" else "0", avtar = adapter?.avatarList?.get(selectedAvatarPos!!)?.avatar_name, birthdate = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(selectedDOB.time), email = email, diff --git a/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt index ebf6bf4..5c76ea4 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SignUpFragment.kt @@ -132,6 +132,7 @@ class SignUpFragment : Fragment() { passwordTitle.text = getString(R.string.password) viewModel.email = email + viewModel.addChildIntent = true } } } diff --git a/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt index 1c20e24..1781681 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt @@ -95,9 +95,13 @@ class SplashFragment : Fragment(), Observer?> { if (userPrefs?.userType == UserType.NONE){ // none of the user is logged in // going through normal onboard process - val extras = FragmentNavigatorExtras(binding.logo to "logo") - findNavController().navigate(R.id.action_splashFragment_to_languageFragment, - null, null, extras) + try { + val extras = FragmentNavigatorExtras(binding.logo to "logo") + findNavController().navigate(R.id.action_splashFragment_to_languageFragment, + null, null, extras) + } catch (e: Exception) { + // do nothing + } }else{ // going to home activity as any of the user is logged in activity?.let { diff --git a/app/src/main/java/com/woka/onboard/mvvm/OnboardViewModel.kt b/app/src/main/java/com/woka/onboard/mvvm/OnboardViewModel.kt index cdc792f..2fba21f 100644 --- a/app/src/main/java/com/woka/onboard/mvvm/OnboardViewModel.kt +++ b/app/src/main/java/com/woka/onboard/mvvm/OnboardViewModel.kt @@ -36,6 +36,8 @@ class OnboardViewModel: ViewModel(){ var name: String? = null var password: String? = null + var addChildIntent: Boolean = false + var childList: List? = null val interestTopics = mutableSetOf() diff --git a/app/src/main/java/com/woka/userPreference/UserPreference.kt b/app/src/main/java/com/woka/userPreference/UserPreference.kt index 7720199..a302e0f 100644 --- a/app/src/main/java/com/woka/userPreference/UserPreference.kt +++ b/app/src/main/java/com/woka/userPreference/UserPreference.kt @@ -3,12 +3,14 @@ package com.woka.userPreference import android.annotation.SuppressLint import android.content.Context import android.content.Context.MODE_PRIVATE +import android.content.Intent import android.content.SharedPreferences import android.provider.Settings.Secure import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.woka.home.Theme import com.woka.networking.ApiResult +import com.woka.onboard.OnboardActivity import com.woka.userdata.UserRepository import com.woka.userdata.userDataModels.UserData import com.woka.userdata.userDataModels.UserDataResponse @@ -17,7 +19,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -class UserPreference(context: Context) { +class UserPreference(val context: Context) { companion object { private const val USER_PREFERENCE = "woka_user_preferences" @@ -95,9 +97,15 @@ class UserPreference(context: Context) { } } - fun logout(){ + fun logout(openLoginScreen: Boolean = false){ accessToken = null userType = if (guestUserName == null) UserType.NONE else UserType.GUEST _userLiveData.postValue(null) + + if (openLoginScreen){ + context.startActivity(Intent(context, OnboardActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK) + }) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/utils/Constants.kt b/app/src/main/java/com/woka/utils/Constants.kt index 19759a7..3526bdd 100644 --- a/app/src/main/java/com/woka/utils/Constants.kt +++ b/app/src/main/java/com/woka/utils/Constants.kt @@ -11,4 +11,9 @@ const val UNKNOWN_ERROR_MESSAGE = "An unknown error occurred" // language code const val LOCALE_HINDI = "hi" -const val LOCALE_ENGLISH = "en" \ No newline at end of file +const val LOCALE_ENGLISH = "en" + +// website urls +const val WEBSITE_BASE_URL = "https://www.wokaland.com/" +const val TERMS_N_CONDITIONS_URL = "https://www.wokaland.com/terms/" +const val PRIVACY_N_POLICY_URL = "https://www.wokaland.com/privacy-policy/" \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_pause.xml b/app/src/main/res/drawable/ic_pause.xml new file mode 100644 index 0000000..dfc18af --- /dev/null +++ b/app/src/main/res/drawable/ic_pause.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_play.xml b/app/src/main/res/drawable/ic_play.xml new file mode 100644 index 0000000..d7fc626 --- /dev/null +++ b/app/src/main/res/drawable/ic_play.xml @@ -0,0 +1,7 @@ + + + + + + diff --git a/app/src/main/res/layout/activity_disclaimer.xml b/app/src/main/res/layout/activity_disclaimer.xml new file mode 100644 index 0000000..98a7515 --- /dev/null +++ b/app/src/main/res/layout/activity_disclaimer.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 71d4c4b..78a9f66 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -16,24 +16,61 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - android:contentDescription="@string/image" - android:src="@drawable/img_notification" - android:scaleType="fitXY" - /> + + + + + + + + + - - android:text="@string/terms_conditions" - android:fontFamily="@font/exo_2_medium" - android:textColor="@color/white" - android:textSize="@dimen/_10ssp" + - android:foreground="?android:attr/selectableItemBackground" - /> + - - android:text="@string/privacy_policy" - android:fontFamily="@font/exo_2_medium" - android:textColor="@color/white" - android:textSize="@dimen/_10ssp" + - android:foreground="?android:attr/selectableItemBackground" - /> + @@ -619,24 +662,26 @@ android:layout_marginVertical="8dp" /> - - android:text="@string/disclaimer" - android:fontFamily="@font/exo_2_medium" - android:textColor="@color/white" - android:textSize="@dimen/_10ssp" + + android:paddingVertical="5dp" + android:paddingHorizontal="5dp" + /> + + android:orientation="vertical"> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_web_view.xml b/app/src/main/res/layout/activity_web_view.xml new file mode 100644 index 0000000..22acb06 --- /dev/null +++ b/app/src/main/res/layout/activity_web_view.xml @@ -0,0 +1,27 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/woka_song_view_holder.xml b/app/src/main/res/layout/woka_song_view_holder.xml new file mode 100644 index 0000000..da28924 --- /dev/null +++ b/app/src/main/res/layout/woka_song_view_holder.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 95e51ff..78b7a96 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -120,4 +120,11 @@ ब्लॉग मासिला ट्रेलर चलाएं + प्रोफ़ाइल अपडेट करें + पूरा नाम + आपकी जन्म तिथि + अपडेट + बच्चे का खाता जोड़ें + बच्चे का नाम + अपने बच्चे का नाम दर्ज करें \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 84a07e8..919f6dd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -138,14 +138,14 @@ Blogs MASILA PLAY TRAILER - WOKA endeavours to make this world a happier and a safe place for Children. A world where families and communities unite joyfully in celebration of their unity and learn from each other\'s diversity. - Frequently asked questions - Subject - Message - Enter your message - Submit - Email - Name + WOKA endeavours to make this world a happier and a safe place for Children. A world where families and communities unite joyfully in celebration of their unity and learn from each other\'s diversity. + Frequently asked questions + Subject + Message + Enter your message + Submit + Email + Name Update profile Full name Your birthdate @@ -153,9 +153,12 @@ Add child account CHILD NAME Enter your child\'s name - Add child account - DeActivate WOKA account? - By clicking on the button below your account will get deactivated. Your data will be erased after a month. - Activate WOKA account - Would you like to re-activate your account? + Add child account + DeActivate WOKA account? + By clicking on the button below your account will get deactivated. Your data will be erased after a month. + Activate WOKA account + Would you like to re-activate your account? + + THE USER AGREES AND UNDERSTANDS THAT THE PLATFORM IS PROVIDED BY US ON AN “AS IS” AND “AS AVAILABLE” BASIS AND WE MAKE NO REPRESENTATIONS OR WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, AS TO THE OPERATION OF THE PLATFORM OR THE INFORMATION AND CONTENT INCLUDED ON THE PLATFORM. YOU EXPRESSLY AGREE THAT YOUR USE OF THE PLATFORM IS AT YOUR SOLE RISK.\n\nTO THE FULLEST EXTENT PERMISSIBLE BY APPLICABLE LAW, WE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED. WE DO NOT WARRANT THAT THE PLATFORM, ITS SERVERS, OR EMAIL/OTHER COMMUNICATION SENT FROM THE PLATFORM ARE FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS. WE WILL NOT BE LIABLE FOR ANY DAMAGES OF ANY KIND ARISING FROM THE USE OF THE PLATFORM, INCLUDING, BUT NOT LIMITED TO DIRECT, INDIRECT, INCIDENTAL, PUNITIVE, AND CONSEQUENTIAL DAMAGES.\n\nALL INTERACTION, COMMUNICATION, DEALING, OR TRANSACTION BETWEEN THE USERS AND THE THIRD-PARTY PROVIDER IN RESPECT OF ANY PRODUCTS/SERVICES OFFERED BY THE THIRD-PARTY PROVIDER IS A SEPARATE AND INDEPENDENT TRANSACTION BETWEEN THE USER AND SUCH THIRD-PARTY PROVIDER WITHOUT ANY LIABILITY ACCRUING TO OR ON US FOR ANY MATTERS ARISING OUT OF OR IN RELATION TO THE SAME. THE USER EXPRESSLY AGREES AND ACKNOWLEDGES TO HOLD HARMLESS US IN RESPECT OF ANY COST, CLAIMS, DAMAGE, LOSS, OR EXPENSES ACCRUED, SUFFERED, INCURRED BY US OR ANY THIRD PARTY ARISING OUT OF OR IN CONNECTION WITH ANY SUCH COMMUNICATION, INTERACTION, DEALINGS, AND TRANSACTIONS BETWEEN THE USER AND THIRD-PARTY PROVIDERS. THE USER ACKNOWLEDGES THAT WE DO NOT HAVE ANY CONTROL OVER SUCH DEALINGS AND TRANSACTIONS AND PLAYS NO DETERMINATIVE ROLE IN THE PERFORMANCE IN RESPECT OF THE SAME AND WE SHALL NOT BE LIABLE FOR THE OUTCOMES OF SUCH COMMUNICATION, INTERACTION, DEALINGS, AND TRANSACTIONS BETWEEN THE USERS AND THE THIRD-PARTY PROVIDERS.\n\nWE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD-PARTY PROVIDER IN ANY MANNER AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR ANY TRANSACTION BETWEEN YOU AND SUCH PARTY PROVIDER. AS WITH THE PURCHASE OF A PRODUCT OR SERVICE THROUGH ANY MEDIUM THROUGH SUCH THIRD-PARTY PROVIDER, YOU SHOULD USE YOUR BEST JUDGMENT AND EXERCISE CAUTION WHERE APPROPRIATE. + WOKA Songs \ No newline at end of file