package com.shukria.kiosklauncher.ui import android.app.Activity import android.content.Context import android.content.Intent import android.media.projection.MediaProjectionManager import android.os.Bundle import android.util.Log import com.shukria.kiosklauncher.service.ScreenShareService class ScreenCaptureActivity : Activity() { companion object { private const val TAG = "ScreenCaptureActivity" private const val REQUEST_CODE = 1001 const val EXTRA_SERIAL_NUMBER = "serial_number" fun start(context: Context, serialNumber: String) { val intent = Intent(context, ScreenCaptureActivity::class.java).apply { flags = Intent.FLAG_ACTIVITY_NEW_TASK putExtra(EXTRA_SERIAL_NUMBER, serialNumber) } context.startActivity(intent) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val mgr = getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager startActivityForResult(mgr.createScreenCaptureIntent(), REQUEST_CODE) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) if (requestCode == REQUEST_CODE && resultCode == RESULT_OK && data != null) { val sn = intent.getStringExtra(EXTRA_SERIAL_NUMBER) ?: "" Log.i(TAG, "Consent granted, sn=$sn — delivering to already-running FGS") // Service is already running (prepare() was called first), so getMediaProjection() // in the service will succeed as the FGS type requirement is now satisfied. ScreenShareService.deliverAndCapture(resultCode, data) } else { Log.w(TAG, "Consent denied or cancelled (resultCode=$resultCode)") ScreenShareService.stop(this) } finish() } }