diff --git a/app/build.gradle b/app/build.gradle
index 3120008..d2f7b82 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -125,6 +125,8 @@ dependencies {
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+ implementation 'com.google.android.gms:play-services-ads:19.3.0'
+
implementation "androidx.navigation:navigation-fragment-ktx:$navigation_version"
implementation "androidx.navigation:navigation-ui-ktx:$navigation_version"
implementation "androidx.core:core-ktx:1.3.2"
@@ -146,6 +148,7 @@ dependencies {
implementation "androidx.dynamicanimation:dynamicanimation-ktx:1.0.0-alpha03"
+
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cb5af9a..ff65e47 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -43,6 +43,9 @@
android:supportsRtl="true"
android:hardwareAccelerated="true"
android:theme="@style/AppTheme">
+
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/Constants.kt b/app/src/main/java/com/magnitudestudios/GameFace/Constants.kt
index af995fc..f8bc381 100644
--- a/app/src/main/java/com/magnitudestudios/GameFace/Constants.kt
+++ b/app/src/main/java/com/magnitudestudios/GameFace/Constants.kt
@@ -46,6 +46,7 @@ object Constants {
const val CONNECT_PATH = "connection"
const val PROFILE_PATH = "profiles"
const val MEMBERS_PATH = "members"
+ const val GAMES_PATH = "games"
const val CHARADES_PATH = "charades"
const val WOULD_YOU_RATHER_PATH = "would_you_rather"
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/pojo/VideoCall/StartGameRequest.kt b/app/src/main/java/com/magnitudestudios/GameFace/pojo/VideoCall/StartGameRequest.kt
new file mode 100644
index 0000000..ba99df1
--- /dev/null
+++ b/app/src/main/java/com/magnitudestudios/GameFace/pojo/VideoCall/StartGameRequest.kt
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2020 - Magnitude Studios - All Rights Reserved
+ * Unauthorized copying of this file, via any medium is prohibited
+ * All software is proprietary and confidential
+ *
+ */
+
+package com.magnitudestudios.GameFace.pojo.VideoCall
+
+data class StartGameRequest(
+ val gameID : String = "",
+ val version : Int = 0,
+ val name : String = "",
+ val senderUID : String = ""
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/repository/SessionRepository.kt b/app/src/main/java/com/magnitudestudios/GameFace/repository/SessionRepository.kt
index 54406d4..6a5568d 100644
--- a/app/src/main/java/com/magnitudestudios/GameFace/repository/SessionRepository.kt
+++ b/app/src/main/java/com/magnitudestudios/GameFace/repository/SessionRepository.kt
@@ -21,6 +21,8 @@ package com.magnitudestudios.GameFace.repository
import android.content.Context
import android.util.Log
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
import androidx.work.CoroutineWorker
import androidx.work.ListenableWorker
import androidx.work.Worker
@@ -40,10 +42,7 @@ import com.magnitudestudios.GameFace.callbacks.RoomCallback
import com.magnitudestudios.GameFace.doOnChildAdded
import com.magnitudestudios.GameFace.pojo.EnumClasses.MemberStatus
import com.magnitudestudios.GameFace.pojo.Helper.Resource
-import com.magnitudestudios.GameFace.pojo.VideoCall.EmitMessage
-import com.magnitudestudios.GameFace.pojo.VideoCall.IceCandidatePOJO
-import com.magnitudestudios.GameFace.pojo.VideoCall.Member
-import com.magnitudestudios.GameFace.pojo.VideoCall.SessionInfoPOJO
+import com.magnitudestudios.GameFace.pojo.VideoCall.*
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
@@ -351,4 +350,36 @@ object SessionRepository {
}
}
+ /**
+ * Game Server Operations
+ */
+ fun introduceGame(req: StartGameRequest) {
+ Firebase.database.reference
+ .child(Constants.ROOMS_PATH)
+ .child(currentRoom!!)
+ .child(Constants.GAMES_PATH)
+ .push()
+ .setValue(req)
+ }
+
+ fun joinGame(gameID : String) {
+ Firebase.database.reference
+ .child(Constants.ROOMS_PATH)
+ .child(currentRoom!!)
+ .child(gameID)
+ .push()
+ .setValue({Constants.JOINED_KEY to Firebase.auth.currentUser!!.uid})
+ }
+
+ fun listenForNewGames() : LiveData {
+ val live = MutableLiveData()
+ Firebase.database.reference.child(Constants.ROOMS_PATH).child(currentRoom!!).child(Constants.GAMES_PATH).doOnChildAdded {
+ val data = it.getValue(StartGameRequest::class.java)
+ if (data != null && data.senderUID != Firebase.auth.currentUser!!.uid) {
+ live.postValue(data!!)
+ }
+ }
+ return live
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CallFinished.kt b/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CallFinished.kt
new file mode 100644
index 0000000..3696501
--- /dev/null
+++ b/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CallFinished.kt
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2020 - Magnitude Studios - All Rights Reserved
+ * Unauthorized copying of this file, via any medium is prohibited
+ * All software is proprietary and confidential
+ *
+ */
+
+package com.magnitudestudios.GameFace.ui.camera
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.activity.OnBackPressedCallback
+import androidx.lifecycle.Observer
+import androidx.lifecycle.ViewModelProvider
+import androidx.navigation.fragment.findNavController
+import androidx.navigation.navGraphViewModels
+import com.bumptech.glide.Glide
+import com.google.android.gms.ads.AdRequest
+import com.google.android.gms.ads.InterstitialAd
+import com.magnitudestudios.GameFace.R
+import com.magnitudestudios.GameFace.bases.BaseFragment
+import com.magnitudestudios.GameFace.databinding.FragmentCallFinishedBinding
+import com.magnitudestudios.GameFace.loadProfile
+import com.magnitudestudios.GameFace.ui.main.MainViewModel
+
+class CallFinished : BaseFragment() {
+ lateinit var bind: FragmentCallFinishedBinding
+ private val viewModel: CameraViewModel by navGraphViewModels(R.id.videoCallGraph)
+ private lateinit var mainViewModel : MainViewModel
+ private lateinit var mInterstitialAd: InterstitialAd
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ bind = FragmentCallFinishedBinding.inflate(inflater, container, false)
+ mainViewModel = requireActivity().run { ViewModelProvider(this).get(MainViewModel::class.java) }!!
+ mInterstitialAd = InterstitialAd(requireContext())
+ mInterstitialAd.adUnitId = getString(R.string.interstitial_after_calling)
+ mInterstitialAd.loadAd(AdRequest.Builder().build())
+
+ val callback: OnBackPressedCallback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ goToHome()
+ }
+ }
+ requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)
+ return bind.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val adRequest = AdRequest.Builder().build()
+ bind.bannerAfterCall.loadAd(adRequest)
+ mInterstitialAd.show()
+
+ viewModel.members.observe(viewLifecycleOwner, Observer { mutableList ->
+ if (mutableList.isNullOrEmpty()) {
+ bind.membersNames.text = mainViewModel.profile.value?.data?.username
+ Glide.with(this).loadProfile(mainViewModel.profile.value?.data?.profilePic, bind.profilePic)
+ }
+ else {
+ bind.membersNames.text = mutableList.mapNotNull { it.profile?.username }.joinToString(", ")
+ Glide.with(this).loadProfile(mutableList[0].profile?.profilePic, bind.profilePic)
+ }
+ })
+
+ bind.goHome.setOnClickListener {
+ goToHome()
+ }
+ }
+ private fun goToHome() {
+ findNavController().popBackStack(R.id.bottomContainerFragment, false)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CameraFragment.kt b/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CameraFragment.kt
index 944ce0e..74c9f47 100644
--- a/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CameraFragment.kt
+++ b/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CameraFragment.kt
@@ -29,6 +29,7 @@ import android.view.ViewGroup
import android.view.WindowManager
import android.widget.FrameLayout
import android.widget.Toast
+import androidx.activity.OnBackPressedCallback
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
@@ -50,6 +51,7 @@ import kotlinx.coroutines.launch
import org.webrtc.*
import java.util.concurrent.ConcurrentHashMap
+
/**
* Camera fragment
*
@@ -92,6 +94,11 @@ class CameraFragment : BaseFragment(), View.OnClickListener {
ViewModelProvider(this).get(MainViewModel::class.java)
}!!
rootEglBase = EglBase.create()
+
+ val callback: OnBackPressedCallback = object : OnBackPressedCallback(true /* enabled by default */) {
+ override fun handleOnBackPressed() {}
+ }
+ requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)
return bind.root
}
@@ -99,7 +106,7 @@ class CameraFragment : BaseFragment(), View.OnClickListener {
super.onViewCreated(view, savedInstanceState)
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
- bind.localVideo.initialize(eglBase = rootEglBase, overlay = true, onTop = true)
+ bind.localVideo.initialize(eglBase = rootEglBase, overlay = true, onTop = false)
audioManager = context?.getSystemService(Context.AUDIO_SERVICE) as AudioManager
audioManager.isSpeakerphoneOn = true
@@ -119,7 +126,7 @@ class CameraFragment : BaseFragment(), View.OnClickListener {
bind.callingControls.animate().setDuration(5000).alpha(0f)
}
}
- bind.callingControls.setOnClickListener {Log.e("CLICKED","CLICKED")}
+ bind.callingControls.setOnClickListener {Log.e("CLICKED", "CLICKED")}
bind.addMember.setOnClickListener {
findNavController().navigate(R.id.action_cameraFragment_to_addMembersDialog)
@@ -150,7 +157,7 @@ class CameraFragment : BaseFragment(), View.OnClickListener {
private fun observeConnection() {
viewModel.connectionStatus.observe(viewLifecycleOwner, Observer {
- when(it.status) {
+ when (it.status) {
Status.ERROR -> connectionFailed(it.message)
Status.LOADING -> setLoading(true)
else -> setLoading(false)
@@ -188,8 +195,7 @@ class CameraFragment : BaseFragment(), View.OnClickListener {
if (it != null) {
if (args.roomID.isNotEmpty()) {
viewModel.joinRoom(args.roomID)
- }
- else if (args.callUserUID.isNotEmpty()) {
+ } else if (args.callUserUID.isNotEmpty()) {
viewModel.createRoom(args.callUserUID)
}
}
@@ -332,7 +338,7 @@ class CameraFragment : BaseFragment(), View.OnClickListener {
}
- private fun gotPeerStream(peerUID: String, stream: MediaStream ) {
+ private fun gotPeerStream(peerUID: String, stream: MediaStream) {
Log.e(TAG, "gotRemoteStream: " + "GOT REMOTE STREAM")
//we have remote video stream. add to the renderer.
activity?.runOnUiThread {
@@ -394,7 +400,7 @@ class CameraFragment : BaseFragment(), View.OnClickListener {
e.printStackTrace()
}
if (userDefined) {
- findNavController().popBackStack()
+ findNavController().navigate(R.id.action_cameraFragment_to_callFinished)
}
}
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CameraViewModel.kt b/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CameraViewModel.kt
index 2dab90e..62ecbbb 100644
--- a/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CameraViewModel.kt
+++ b/app/src/main/java/com/magnitudestudios/GameFace/ui/camera/CameraViewModel.kt
@@ -26,6 +26,8 @@ import androidx.lifecycle.*
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.workDataOf
+import com.google.firebase.auth.FirebaseAuth
+import com.google.firebase.auth.ktx.FirebaseAuthKtxRegistrar
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import com.google.gson.Gson
@@ -39,6 +41,7 @@ import com.magnitudestudios.GameFace.notifyObserver
import com.magnitudestudios.GameFace.pojo.EnumClasses.MemberStatus
import com.magnitudestudios.GameFace.pojo.EnumClasses.Status
import com.magnitudestudios.GameFace.pojo.Helper.Resource
+import com.magnitudestudios.GameFace.pojo.UserInfo.LocalPackInfo
import com.magnitudestudios.GameFace.pojo.VideoCall.*
import com.magnitudestudios.GameFace.repository.SessionRepository
import com.magnitudestudios.GameFace.repository.UserRepository
@@ -100,6 +103,8 @@ class CameraViewModel(application: Application) : AndroidViewModel(application),
emit(tempIceServers)
}
+ val newGame = MutableLiveData()
+
/**
* Add peer
*
@@ -288,4 +293,20 @@ class CameraViewModel(application: Application) : AndroidViewModel(application),
}
+ /**
+ * Game Functions
+ */
+
+ fun sendGameRequest(req : LocalPackInfo) {
+ SessionRepository.introduceGame(StartGameRequest(req.id, req.version, req.name, Firebase.auth.currentUser!!.uid))
+ }
+
+ fun onNewGame(startGameRequest: StartGameRequest) {
+ newGame.value = startGameRequest
+ }
+
+ fun joinGame(gameID : String) {
+
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/ui/main/MainActivity.kt b/app/src/main/java/com/magnitudestudios/GameFace/ui/main/MainActivity.kt
index 5ff40c1..a219775 100644
--- a/app/src/main/java/com/magnitudestudios/GameFace/ui/main/MainActivity.kt
+++ b/app/src/main/java/com/magnitudestudios/GameFace/ui/main/MainActivity.kt
@@ -29,6 +29,7 @@ import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.NavDestination
import androidx.navigation.findNavController
+import com.google.android.gms.ads.MobileAds
import com.magnitudestudios.GameFace.Constants
import com.magnitudestudios.GameFace.R
import com.magnitudestudios.GameFace.bases.BasePermissionsActivity
@@ -49,6 +50,7 @@ class MainActivity : BasePermissionsActivity() {
private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ MobileAds.initialize(this) {}
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
viewModel = ViewModelProvider(this)[MainViewModel::class.java]
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/ui/shop/ShopFragment.kt b/app/src/main/java/com/magnitudestudios/GameFace/ui/shop/ShopFragment.kt
index da04868..947073b 100644
--- a/app/src/main/java/com/magnitudestudios/GameFace/ui/shop/ShopFragment.kt
+++ b/app/src/main/java/com/magnitudestudios/GameFace/ui/shop/ShopFragment.kt
@@ -39,6 +39,7 @@ import com.magnitudestudios.GameFace.callbacks.RVButtonClick
import com.magnitudestudios.GameFace.databinding.FragmentShopBinding
import com.magnitudestudios.GameFace.databinding.ItemShowcaseBinding
import com.magnitudestudios.GameFace.ui.BottomContainerFragmentDirections
+import com.magnitudestudios.GameFace.ui.shop.tabs.EarnFragment
import com.magnitudestudios.GameFace.ui.shop.tabs.InstalledFragment
import com.magnitudestudios.GameFace.ui.shop.tabs.MarketFragment
import com.magnitudestudios.GameFace.views.ShowCaseItemViewHolder
@@ -120,9 +121,8 @@ class ShopFragment : BaseFragment() {
val fragment = when (position) {
0 -> MarketFragment()
1 -> InstalledFragment()
-// 1 -> FriendsFragment()
-// 2 -> FriendRequestsFragment()
- else -> MarketFragment()
+ 2 -> EarnFragment()
+ else -> throw IllegalStateException("Unknown Fragment Position: $position")
}
childFragmentManager.beginTransaction().replace(R.id.shopContainer, fragment).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit()
}
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/ui/shop/tabs/EarnFragment.kt b/app/src/main/java/com/magnitudestudios/GameFace/ui/shop/tabs/EarnFragment.kt
new file mode 100644
index 0000000..64dc1a7
--- /dev/null
+++ b/app/src/main/java/com/magnitudestudios/GameFace/ui/shop/tabs/EarnFragment.kt
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2020 - Magnitude Studios - All Rights Reserved
+ * Unauthorized copying of this file, via any medium is prohibited
+ * All software is proprietary and confidential
+ *
+ */
+
+package com.magnitudestudios.GameFace.ui.shop.tabs
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Toast
+import com.google.android.gms.ads.AdError
+import com.google.android.gms.ads.AdRequest
+import com.google.android.gms.ads.LoadAdError
+import com.google.android.gms.ads.reward.RewardItem
+import com.google.android.gms.ads.reward.RewardedVideoAdListener
+import com.google.android.gms.ads.rewarded.RewardedAd
+import com.google.android.gms.ads.rewarded.RewardedAdCallback
+import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback
+import com.magnitudestudios.GameFace.R
+import com.magnitudestudios.GameFace.bases.BaseFragment
+import com.magnitudestudios.GameFace.databinding.FragmentEarnBinding
+
+class EarnFragment : BaseFragment(), RewardedVideoAdListener {
+ lateinit var bind : FragmentEarnBinding
+ private lateinit var rewardedAd: RewardedAd
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ bind = FragmentEarnBinding.inflate(inflater, container, false)
+ rewardedAd = RewardedAd(requireActivity(), getString(R.string.rewarded_earn))
+ bind.watchAd.isEnabled = false
+ loadRewardedVideoAd()
+ return bind.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ bind.watchAd.setOnClickListener {
+ if (rewardedAd.isLoaded) {
+ val activityContext = requireActivity()
+ val adCallback = object: RewardedAdCallback() {
+ override fun onRewardedAdOpened() {}
+ override fun onRewardedAdClosed() {}
+
+ override fun onUserEarnedReward(p0: com.google.android.gms.ads.rewarded.RewardItem) {
+ Toast.makeText(requireContext(), "You have earned ${p0.amount} GamePoints!", Toast.LENGTH_LONG).show()
+ }
+
+ override fun onRewardedAdFailedToShow(adError: AdError) {
+ Toast.makeText(requireContext(), "Ad has failed to load! Please try again later!", Toast.LENGTH_LONG).show()
+ }
+ }
+ rewardedAd.show(activityContext, adCallback)
+ }
+ else {
+ Toast.makeText(requireContext(), "Please wait a second!", Toast.LENGTH_LONG).show()
+ Log.d("TAG", "The rewarded ad wasn't loaded yet.")
+ }
+ }
+
+ }
+
+ private fun loadRewardedVideoAd() {
+ val adLoadCallback = object: RewardedAdLoadCallback() {
+ override fun onRewardedAdLoaded() {
+ bind.watchAd.isEnabled = true
+ }
+ override fun onRewardedAdFailedToLoad(adError: LoadAdError) {
+ bind.watchAd.isEnabled = false
+ Log.e("EarnFragment", "Ad Failed to Load ${adError.message}")
+ Toast.makeText(requireContext(), adError.message, Toast.LENGTH_LONG).show()
+ }
+ }
+ rewardedAd.loadAd(AdRequest.Builder().build(), adLoadCallback)
+ }
+
+ override fun onRewardedVideoAdLoaded() {}
+
+ override fun onRewardedVideoAdOpened() {}
+
+ override fun onRewardedVideoStarted() {}
+
+ override fun onRewardedVideoAdClosed() {
+ loadRewardedVideoAd()
+ }
+
+ override fun onRewarded(p0: RewardItem?) {
+
+ }
+
+ override fun onRewardedVideoAdLeftApplication() {}
+
+ override fun onRewardedVideoAdFailedToLoad(p0: Int) {
+ Toast.makeText(requireContext(), "Ad Failed to load. Please try again later!", Toast.LENGTH_LONG).show()
+ }
+
+ override fun onRewardedVideoCompleted() {
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/magnitudestudios/GameFace/views/VideoLayout.kt b/app/src/main/java/com/magnitudestudios/GameFace/views/VideoLayout.kt
index d75ec31..d32e42d 100644
--- a/app/src/main/java/com/magnitudestudios/GameFace/views/VideoLayout.kt
+++ b/app/src/main/java/com/magnitudestudios/GameFace/views/VideoLayout.kt
@@ -136,7 +136,6 @@ class VideoLayout @JvmOverloads constructor(
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
-
return super.onTouchEvent(event)
}
diff --git a/app/src/main/res/layout/fragment_call_finished.xml b/app/src/main/res/layout/fragment_call_finished.xml
new file mode 100644
index 0000000..9c8e6e6
--- /dev/null
+++ b/app/src/main/res/layout/fragment_call_finished.xml
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_earn.xml b/app/src/main/res/layout/fragment_earn.xml
new file mode 100644
index 0000000..bd44d92
--- /dev/null
+++ b/app/src/main/res/layout/fragment_earn.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/main_nav_graph.xml b/app/src/main/res/navigation/main_nav_graph.xml
index 52fd598..22a45bb 100644
--- a/app/src/main/res/navigation/main_nav_graph.xml
+++ b/app/src/main/res/navigation/main_nav_graph.xml
@@ -154,12 +154,22 @@
+
+
https://www.gamefacechat.com/
https://www.gamefacechat.com/about-us
+
+ ca-app-pub-3940256099942544/1033173712
+ ca-app-pub-3940256099942544/6300978111
+ ca-app-pub-3940256099942544/6300978111
+ ca-app-pub-3940256099942544/5224354917
GameFace
GameFace
@@ -153,6 +158,9 @@
Packs
Games Won
0
+ Call Ended
+ Watch Ad (+25)
+ Go to Home