yayan hace 5 meses
padre
commit
8d04234087

+ 152 - 0
app/src/main/java/io/nexilis/alpha/ui/main/Call.kt

@@ -0,0 +1,152 @@
+package io.nexilis.alpha.ui.main
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.VolumeUp
+import androidx.compose.material.icons.filled.CallEnd
+import androidx.compose.material.icons.filled.Mic
+import androidx.compose.material.icons.filled.Person
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.rememberVectorPainter
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import io.nexilis.service.ui.RemoteView
+
+@Composable
+fun CallLayoutScreen() {
+    Box(modifier = Modifier.fillMaxSize()) {
+        RemoteView(modifier = Modifier.fillMaxSize())
+        Column(
+            modifier = Modifier
+                .fillMaxSize()
+                .background(Color.Transparent)
+                .padding(16.dp),
+            horizontalAlignment = Alignment.CenterHorizontally,
+            verticalArrangement = Arrangement.SpaceBetween
+        ) {
+            // Caller Info Section
+            CallerInfoSection()
+
+            // Call Status Section
+            CallStatusSection()
+
+            // Call Action Buttons Section
+            CallActionButtonsSection()
+        }
+    }
+}
+
+@Composable
+fun CallerInfoSection() {
+    Column(
+        horizontalAlignment = Alignment.CenterHorizontally,
+        modifier = Modifier.padding(top = 50.dp)
+    ) {
+        // Caller Avatar
+        Image(
+            painter = rememberVectorPainter(Icons.Default.Person), // Replace with your drawable
+            contentDescription = "Caller Avatar",
+            modifier = Modifier
+                .size(120.dp)
+                .clip(CircleShape),
+        )
+
+        // Caller Name
+        Text(
+            text = "John Doe",
+            color = Color.White,
+            fontSize = 24.sp,
+            fontWeight = FontWeight.Bold,
+            modifier = Modifier.padding(top = 16.dp)
+        )
+    }
+}
+
+@Composable
+fun CallStatusSection() {
+    Text(
+        text = "Calling...",
+        color = Color.Gray,
+        fontSize = 18.sp,
+        modifier = Modifier.padding(vertical = 8.dp)
+    )
+}
+
+@Composable
+fun CallActionButtonsSection() {
+    Row(
+        horizontalArrangement = Arrangement.SpaceEvenly,
+        modifier = Modifier
+            .fillMaxWidth()
+            .padding(bottom = 50.dp)
+    ) {
+        // Mute Button
+        CallActionButton(
+            icon = Icons.Default.Mic, // Replace with your drawable
+            onClick = { /* Handle mute action */ },
+            backgroundColor = Color.Gray
+        )
+
+        // Speaker Button
+        CallActionButton(
+            icon = Icons.AutoMirrored.Filled.VolumeUp, // Replace with your drawable
+            onClick = { /* Handle speaker action */ },
+            backgroundColor = Color.Gray
+        )
+
+        // End Call Button
+        CallActionButton(
+            icon = Icons.Default.CallEnd, // Replace with your drawable
+            onClick = { /* Handle end call action */ },
+            backgroundColor = Color.Red
+        )
+    }
+}
+
+@Composable
+fun CallActionButton(
+    icon: ImageVector,
+    onClick: () -> Unit,
+    backgroundColor: Color
+) {
+    IconButton(
+        onClick = onClick,
+        modifier = Modifier
+            .size(64.dp)
+            .clip(CircleShape)
+            .background(backgroundColor)
+    ) {
+        Icon(
+            painter = rememberVectorPainter(icon),
+            contentDescription = null,
+            tint = Color.White,
+            modifier = Modifier.size(32.dp)
+        )
+    }
+}
+
+@Preview(showBackground = true)
+@Composable
+fun PreviewCallLayoutScreen() {
+    CallLayoutScreen()
+}

BIN
cpaas-lite/libs/annotation.jar


+ 13 - 12
cpaas-lite/src/main/java/io/nexilis/service/Api.kt

@@ -1,8 +1,9 @@
 package io.nexilis.service
 
-import android.app.Activity
 import android.content.Context
 import android.os.Build
+import android.os.Handler
+import android.os.Looper
 import android.util.Base64
 import android.util.Log
 import android.widget.Toast
@@ -40,7 +41,7 @@ class Api {
 
         internal var condition: Condition? = null
 
-        fun connect(appName: String, account: String, activity: Activity) {
+        fun connect(context: Context, appName: String, account: String) {
             Log.d(tag, "connect:$appName:$account")
             Thread {
                 try {
@@ -55,8 +56,8 @@ class Api {
                     val address = arrayAddress.getJSONObject(0)
                     val ip = address.getString("ip")
                     val port = address.getString("portD").toInt()
-                    activity.pref().domain = domain
-                    Log.d(tag, "domain:${activity.pref().domain}")
+                    context.pref().domain = domain
+                    Log.d(tag, "domain:${context.pref().domain}")
                     val options = FirebaseOptions.Builder()
                         .setProjectId("push-kit-de2e3")
                         .setApplicationId("1:36827599888:android:29e65c0ec8a560c5916695")
@@ -64,15 +65,15 @@ class Api {
                         .build()
                     try {
                         Firebase.app(FirebaseApp.DEFAULT_APP_NAME)
-                        Firebase.initialize(activity.applicationContext, options, "nexilis")
+                        Firebase.initialize(context.applicationContext, options, "nexilis")
                     } catch (_: Exception) {
                         Firebase.initialize(
-                            activity.applicationContext,
+                            context.applicationContext,
                             options,
                             FirebaseApp.DEFAULT_APP_NAME
                         )
                     }
-                    val preferences = activity.pref()
+                    val preferences = context.pref()
                     preferences.appName = appName
                     preferences.api = account
                     val random =
@@ -86,8 +87,8 @@ class Api {
                     nuSDKService.initConnection(
                         pass,
                         account,
-                        activity,
-                        SdkCallback(activity),
+                        context,
+                        SdkCallback(context),
                         ip,
                         port,
                         session,
@@ -106,9 +107,9 @@ class Api {
                                 val await = it.await(15, TimeUnit.SECONDS)
                                 Log.d(tag, "wait:result:$await")
                                 if (!await) {
-                                    activity.runOnUiThread {
+                                    Handler(Looper.getMainLooper()).post {
                                         Toast.makeText(
-                                            activity,
+                                            context,
                                             "Please check your internet connection",
                                             Toast.LENGTH_LONG
                                         ).show()
@@ -132,7 +133,7 @@ class Api {
                                         Log.d(tag, "signup:put:pin:$p")
                                         preferences.pin = p
                                         apiScope.launch {
-                                            ApiRoomDatabase.getDatabase(activity).buddyDao().insert(
+                                            ApiRoomDatabase.getDatabase(context).buddyDao().insert(
                                                 Buddy(
                                                     f_pin = p,
                                                     first_name = "USR_12345",

+ 2 - 2
gradle/libs.versions.toml

@@ -1,5 +1,5 @@
 [versions]
-agp = "8.8.0"
+agp = "8.8.1"
 kotlin = "2.0.21"
 ksp = "2.0.21-1.0.26"
 coreKtx = "1.15.0"
@@ -8,7 +8,7 @@ junitVersion = "1.2.1"
 espressoCore = "3.6.1"
 lifecycleRuntimeKtx = "2.8.7"
 activityCompose = "1.10.0"
-composeBom = "2025.01.00"
+composeBom = "2025.02.00"
 hilt = "2.49"
 hiltNavigation = "1.2.0"
 navigation = "2.8.5"