Skip to content

Latest commit

 

History

History
82 lines (71 loc) · 2.82 KB

challenge.md

File metadata and controls

82 lines (71 loc) · 2.82 KB

Complete example for Challenge view

import android.Manifest
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.kinestex.kinestexsdkkotlin.GenericWebView
import com.kinestex.kinestexsdkkotlin.KinesteXSDK
import com.kinestex.kinestexsdkkotlin.PermissionHandler
import com.kinestex.kinestexsdkkotlin.WebViewMessage
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch

class ChallengeActivity : AppCompatActivity(), PermissionHandler {
    private lateinit var kinesteXWebView: GenericWebView
    private val isLoading = MutableStateFlow(false)

    // Replace with your KinesteX credentials
    private val apiKey = "YOUR API KEY"
    private val company = "YOUR COMPANY NAME"
    private val userId = "YOUR USER ID"

    // Challenge title and duration
    private val challengeExercise = "Squats"
    private val challengeDuration = 30 // in seconds

    @SuppressLint("SetJavaScriptEnabled", "MissingInflatedId")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_challenge)

        // OPTIONAL: Custom Parameters
        val data = mutableMapOf<String, Any>()
        data["style"] = "light" // light or dark theme (customizable in admin dashboard)

        // Present the view and initialize it
        kinesteXWebView = KinesteXSDK.createChallengeView(
            this,
            apiKey,
            company,
            userId,
            challengeExercise,
            challengeDuration,
            user = null, // UserDetails or null
            customParams = data, // example of using custom parameters. CAN BE NULL
            isLoading = isLoading,
            onMessageReceived = ::handleWebViewMessage,
            permissionHandler = this
        ) as GenericWebView

        // Now present kinesteXWebView fullscreen
        setContentView(kinesteXWebView)
    }

    private fun handleWebViewMessage(message: WebViewMessage) {
        when (message) {
            is WebViewMessage.ExitKinestex -> {
                // Dismiss challenge view
                finish()
            }
            else -> {
                println("Message received: $message")
            }
        }
    }

    private val requestPermissionLauncher = registerForActivityResult(
        ActivityResultContracts.RequestPermission()
    ) { isGranted: Boolean ->
        // Pass permission result to KinesteX webview
        kinesteXWebView.handlePermissionResult(isGranted)
    }

    // When request is sent, display system dialog for camera access
    override fun requestCameraPermission() {
        requestPermissionLauncher.launch(Manifest.permission.CAMERA)
    }
}