diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 7b6e97d..8f63119 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -4,6 +4,18 @@ + + + + + + + + + + + + diff --git a/app/build.gradle b/app/build.gradle index 8c45dde..ff362d5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -128,6 +128,9 @@ dependencies { // optional - Kotlin Extensions and Coroutines support for Room implementation(libs.room.ktx) + // admob + implementation(libs.play.services.ads) + implementation libs.firebase.analytics implementation libs.firebase.perf diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a34d286..229824b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -165,6 +165,16 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/woka/WokaApp.kt b/app/src/main/java/com/woka/WokaApp.kt index 59f0658..7f0ab8d 100644 --- a/app/src/main/java/com/woka/WokaApp.kt +++ b/app/src/main/java/com/woka/WokaApp.kt @@ -2,6 +2,9 @@ package com.woka import android.annotation.SuppressLint import android.app.Application +import android.util.Log +import com.google.android.gms.ads.MobileAds +import com.google.android.gms.ads.RequestConfiguration import com.jwplayer.pub.api.license.LicenseUtil import com.onesignal.OneSignal import com.woka.advertisements.AdsRepository @@ -13,6 +16,7 @@ import com.woka.utils.ONESIGNAL_APP_ID import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import java.util.Arrays class WokaApp: Application() { @@ -36,6 +40,8 @@ class WokaApp: Application() { } initOneSignal() + + initAdmob() } private fun initOneSignal(){ @@ -48,4 +54,11 @@ class WokaApp: Application() { OneSignal.Notifications.requestPermission(false) } } + + private fun initAdmob(){ + CoroutineScope(Dispatchers.IO).launch { + MobileAds.initialize(this@WokaApp) +// MobileAds.setRequestConfiguration(RequestConfiguration.Builder().setTestDeviceIds(listOf("F895DC452659EA607EB688E47B041B20")).build()) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt b/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt index 254478f..08b5b19 100644 --- a/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt +++ b/app/src/main/java/com/woka/home/fragments/Home2Fragment.kt @@ -3,12 +3,23 @@ package com.woka.home.fragments import android.content.Context import android.content.Intent import android.os.Bundle +import android.util.DisplayMetrics +import android.util.Log +import android.view.Display import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.LinearLayout import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import com.bumptech.glide.Glide +import com.google.android.gms.ads.AdListener +import com.google.android.gms.ads.AdRequest +import com.google.android.gms.ads.AdSize +import com.google.android.gms.ads.AdView +import com.google.android.gms.ads.LoadAdError +import com.google.android.gms.ads.interstitial.InterstitialAd +import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback import com.jwplayer.pub.api.media.playlists.PlaylistItem import com.woka.R import com.woka.WokaApp @@ -47,7 +58,7 @@ class Home2Fragment : Fragment() { override fun onAttach(context: Context) { super.onAttach(context) - context.changeLocale(WokaApp.userPrefs?.appLanguage?:"en") + context.changeLocale(WokaApp.userPrefs?.appLanguage ?: "en") } override fun onCreateView( @@ -67,20 +78,48 @@ class Home2Fragment : Fragment() { clickEvents() + loadGoogleAds() + return binding.root } + private fun loadGoogleAds() { + binding.adView.adListener = object : AdListener() { + override fun onAdFailedToLoad(p0: LoadAdError) { + super.onAdFailedToLoad(p0) + Log.d("aditya_ad_testing", "onAdFailedToLoad: $p0") + } + } + + binding.adView.loadAd( + AdRequest.Builder() + .build() + ) + + InterstitialAd.load(requireContext(),"ca-app-pub-5699008063638916/6300144761", + AdRequest.Builder().build(), object : InterstitialAdLoadCallback() { + override fun onAdFailedToLoad(adError: LoadAdError) { + Log.d("aditya_ad_testing", "Interrstitial onAdFailedToLoad: $adError") + } + + override fun onAdLoaded(interstitialAd: InterstitialAd) { + Log.d("aditya_ad_testing", "AdLoaded:") + interstitialAd.show(requireActivity()) + } + }) + } + private fun iniViews() { - if (viewModel.isHomeBackgroundBlurred){ + if (viewModel.isHomeBackgroundBlurred) { binding.playerView.hide() - }else{ + } else { binding.playerView.show() } } override fun onResume() { super.onResume() - if (viewModel.player?.isPlaying == false){ + if (viewModel.player?.isPlaying == false) { viewModel.player?.play() } @@ -91,7 +130,7 @@ class Home2Fragment : Fragment() { super.onPause() if (viewModel.player?.isPlaying == true) viewModel.player?.pause() - if (viewModel.isHomeBackgroundBlurred){ + if (viewModel.isHomeBackgroundBlurred) { binding.playerView.hide() } } @@ -101,7 +140,7 @@ class Home2Fragment : Fragment() { binding.playerView.useController = false } - private fun clickEvents(){ + private fun clickEvents() { binding.apply { playerCard.setOnClickListener { liveTv.performClick() @@ -162,10 +201,12 @@ class Home2Fragment : Fragment() { .build() ) }, - mutableListOf(VideoViewData( - 0, - ContentType.TEASER - )) + mutableListOf( + VideoViewData( + 0, + ContentType.TEASER + ) + ) ) ) putExtra(PlayerActivity.EXTRA_PLAY_INDEX, 0) @@ -209,37 +250,49 @@ class Home2Fragment : Fragment() { initPlayerView() } - StreamingUrlRepository.liveStreamLiveData.observe(viewLifecycleOwner){ - when (it){ + StreamingUrlRepository.liveStreamLiveData.observe(viewLifecycleOwner) { + when (it) { is ApiResult.Error -> { progressView.hide() binding.liveTv.setOnClickListener { StreamingUrlRepository.loadLiveStreamingUrls() } } + is ApiResult.Loading -> { progressView.show() } + is ApiResult.Success -> { - it.data?.live_data?.let {urls -> - if (urls.isNotEmpty()){ - urls.first()?.let {liveData -> + it.data?.live_data?.let { urls -> + if (urls.isNotEmpty()) { + urls.first()?.let { liveData -> progressView.hide() binding.liveTv.setOnClickListener { - activity?.let {activity -> - startActivity(Intent(activity, LiveStreamPlayerActivity::class.java).apply { - putExtra(LiveStreamPlayerActivity.EXTRA_LIVE_STREAM_ID, liveData.id) - putExtra(LiveStreamPlayerActivity.EXTRA_LIVE_STREAM_URL, liveData.live_url?.hd_url_en) - }) + activity?.let { activity -> + startActivity( + Intent( + activity, + LiveStreamPlayerActivity::class.java + ).apply { + putExtra( + LiveStreamPlayerActivity.EXTRA_LIVE_STREAM_ID, + liveData.id + ) + putExtra( + LiveStreamPlayerActivity.EXTRA_LIVE_STREAM_URL, + liveData.live_url?.hd_url_en + ) + }) } } } } } - it.data?.live_fm_data?.let {fmData -> + it.data?.live_fm_data?.let { fmData -> binding.wokaFm.setOnClickListener { - activity?.let {activity -> + activity?.let { activity -> startActivity(Intent(activity, FMActivity::class.java).apply { putExtra(FMActivity.EXTRA_FM_URL, fmData.live_fm_url) putExtra(FMActivity.EXTRA_FM_ID, fmData.id) @@ -262,8 +315,9 @@ class Home2Fragment : Fragment() { .into(profileImage) } - val name = if (WokaApp.userPrefs?.userType == UserType.GUEST) WokaApp.userPrefs?.guestUserName - else data?.result?.fullname + val name = + if (WokaApp.userPrefs?.userType == UserType.GUEST) WokaApp.userPrefs?.guestUserName + else data?.result?.fullname if (!name.isNullOrEmpty()) { val text = ", ${name.split(" ")[0]}" @@ -275,13 +329,14 @@ class Home2Fragment : Fragment() { companion object { private var instance: Home2Fragment? = null private val any = Any() - fun getInstance(): Home2Fragment{ - return synchronized(any){ - if (instance == null){ + fun getInstance(): Home2Fragment { + return synchronized(any) { + if (instance == null) { instance = Home2Fragment() } - return@synchronized instance!! } + return@synchronized instance!! + } } } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/views/HomeActivity.kt b/app/src/main/java/com/woka/home/views/HomeActivity.kt index 3a1ad44..4f0f0ef 100644 --- a/app/src/main/java/com/woka/home/views/HomeActivity.kt +++ b/app/src/main/java/com/woka/home/views/HomeActivity.kt @@ -15,7 +15,6 @@ import android.net.Network import android.net.NetworkRequest import android.os.Build import android.os.Bundle -import android.util.Log import android.view.HapticFeedbackConstants import android.view.View.GONE import android.view.View.VISIBLE 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 a032093..06dca2f 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt @@ -1,6 +1,5 @@ package com.woka.onboard.fragments -import android.animation.Animator import android.content.Intent import android.media.MediaPlayer import android.os.Bundle @@ -67,8 +66,16 @@ class SplashFragment : Fragment(), Observer?> { if (userPrefs?.userType == UserType.CHILD || userPrefs?.userType == UserType.GUARDIAN) { // some type of user is logged in - // thus, loading data + // thus, loading user data + userPrefs?.userLiveData?.observe(viewLifecycleOwner, this) userPrefs?.loadUserData() + }else{ + // no user is logged in + // listening to version history + lifecycleScope.launch { + delay(4000) + listenVersionHistory() + } } clickEvents() @@ -103,24 +110,6 @@ class SplashFragment : Fragment(), Observer?> { private fun animateLogo() { binding.logo.animate().scaleXBy(1f).scaleYBy(1f) .setDuration(2000) - .setListener(object : Animator.AnimatorListener { - override fun onAnimationStart(animation: Animator) {} - override fun onAnimationEnd(animation: Animator) { - lifecycleScope.launch { - delay(2000) - if (userPrefs?.userType == UserType.CHILD || userPrefs?.userType == UserType.GUARDIAN) { - // listening to user data - userPrefs?.userLiveData?.observe(viewLifecycleOwner, this@SplashFragment) - }else{ - listenVersionHistory() - } - } - } - - override fun onAnimationCancel(animation: Animator) {} - override fun onAnimationRepeat(animation: Animator) {} - - }) .start() } @@ -212,9 +201,12 @@ class SplashFragment : Fragment(), Observer?> { binding.progressBar.show() } is ApiResult.Success -> { - binding.retryBtn.hide() - binding.progressBar.hide() - listenVersionHistory() + lifecycleScope.launch { + delay(4000) + binding.retryBtn.hide() + binding.progressBar.hide() + listenVersionHistory() + } } null -> {} diff --git a/app/src/main/res/layout/fragment_home2.xml b/app/src/main/res/layout/fragment_home2.xml index 4de2442..7bfe3d1 100644 --- a/app/src/main/res/layout/fragment_home2.xml +++ b/app/src/main/res/layout/fragment_home2.xml @@ -531,6 +531,16 @@ + +