yayan před 1 rokem
rodič
revize
7b13c0aee6

+ 1 - 2
app/src/main/java/io/nexilis/alpha/ui/main/Chats.kt

@@ -13,7 +13,6 @@ import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.ColorFilter
 import androidx.compose.ui.graphics.vector.rememberVectorPainter
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.platform.LocalContext
@@ -61,7 +60,7 @@ fun Chats(
                 }),
                 headlineText = {
                     Text(
-                        buddy?.first_name ?: "First text",
+                        "${buddy?.first_name ?: "First text"} ${buddy?.last_name ?: "Last text"}",
                         style = MaterialTheme.typography.titleSmall
                     )
                 },

+ 4 - 6
app/src/main/java/io/nexilis/alpha/ui/main/Contact.kt

@@ -1,7 +1,6 @@
 package io.nexilis.alpha.ui.main
 
 import androidx.compose.foundation.background
-import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.selection.selectable
@@ -14,7 +13,6 @@ import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.ColorFilter
 import androidx.compose.ui.graphics.vector.rememberVectorPainter
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.platform.LocalContext
@@ -43,18 +41,18 @@ fun Contact(navController: NavHostController, mainViewModel: MainViewModel) {
                 all?.get(it)?.f_pin ?: 0
             }
         ) { item ->
-            val buddies = all?.get(item)
+            val buddy = all?.get(item)
             ListItem(
                 modifier = Modifier.selectable(selected = selectedItem == item, onClick = {
                     selectedItem = item
-                    navController.navigate(Screen.Chat.route + "/${buddies?.f_pin}") {
+                    navController.navigate(Screen.Chat.route + "/${buddy?.f_pin}") {
                         launchSingleTop = true
                         restoreState = true
                     }
                 }),
                 headlineText = {
                     Text(
-                        buddies?.first_name ?: "",
+                        buddy?.first_name ?: "",
                         style = MaterialTheme.typography.titleSmall
                     )
                 },
@@ -67,7 +65,7 @@ fun Contact(navController: NavHostController, mainViewModel: MainViewModel) {
                 leadingContent = {
                     AsyncImage(
                         model = ImageRequest.Builder(LocalContext.current)
-                            .data("https://digixplatform.com/filepalio/image/${buddies?.image_id}")
+                            .data("https://digixplatform.com/filepalio/image/${buddy?.image_id}")
                             .addHeader("Cookie" , "PHPSESSID=123;MOBILE=123")
                             .crossfade(true)
                             .build(),

+ 6 - 5
app/src/main/java/io/nexilis/alpha/ui/main/Home.kt

@@ -30,7 +30,7 @@ fun Home(
         mainViewModel.setTitle("Home")
     }
     val viewModel: BuddyViewModel = hiltViewModel()
-    val allProduct by viewModel.all.observeAsState()
+    val all by viewModel.all.observeAsState()
     LazyVerticalGrid(
         columns = GridCells.Fixed(3),
         contentPadding = contentPadding,
@@ -41,19 +41,20 @@ fun Home(
             .fillMaxHeight()
     ) {
         items(
-            count = allProduct?.size ?: 0,
+            count = all?.size ?: 0,
             key = {
-                allProduct?.get(it)?.f_pin ?: 0
+                all?.get(it)?.f_pin ?: 0
             }
         ) { item ->
-            val product = allProduct?.get(item)
+            val buddy = all?.get(item)
             val mod = Modifier
                 .animateItemPlacement()
                 .aspectRatio(1f)
                 .fillMaxWidth()
             AsyncImage(
                 model = ImageRequest.Builder(LocalContext.current)
-                    .data("http://192.168.0.31/image/0298dc5a9f-18498F3634E.webp")
+                    .data("https://digixplatform.com/filepalio/image/${buddy?.image_id}")
+                    .addHeader("Cookie" , "PHPSESSID=123;MOBILE=123")
                     .crossfade(true)
                     .build(),
                 placeholder = painterResource(R.drawable.ic_placeholder),

+ 1 - 1
cpaas-lite/src/main/java/io/nexilis/service/SdkCallback.kt

@@ -68,7 +68,7 @@ class SdkCallback : nuSDKCallBack {
                 p0?.let { s ->
                     data.packetId = s
                 }
-                Incoming.getInstance().process(data)
+                Incoming().process(data)
             }
         } catch (e: Exception) {
             Log.e(tag, e.message, e)

+ 10 - 20
cpaas-lite/src/main/java/io/nexilis/service/Service.kt

@@ -1,15 +1,11 @@
 package io.nexilis.service
 
-import android.content.Context
 import android.util.Log
 import io.newuniverse.SDK.nuSDKService
 import io.nexilis.service.core.Data
 import io.nexilis.service.core.decrypt
-import io.nexilis.service.core.optString
 import kotlinx.coroutines.*
 import java.util.concurrent.ConcurrentHashMap
-import kotlin.coroutines.resume
-import kotlin.coroutines.suspendCoroutine
 
 private val passArray = charArrayOf(
     '6',
@@ -58,8 +54,6 @@ internal const val namePreference = "cpaas"
 
 internal const val tag = "SAPI"
 
-internal val context: Context by lazy { nuSDKService.getInstance(pass).applicationContext }
-
 internal val apiScope = CoroutineScope(SupervisorJob())
 
 class Service {
@@ -114,23 +108,19 @@ class Service {
             return null
         }
 
-        fun sendAck(id: String) {
+        fun sendAck(pin: String?, id: String) {
             try {
                 Log.d(tag, "Service:sendAck:$id")
-                val preferences = context.getSharedPreferences(
-                    namePreference,
-                    Context.MODE_PRIVATE
-                )
-                val pin = preferences.optString(key = "pin", default = "")
-                if (pin.isEmpty()) return
-                sendAsync(
-                    Data(
-                        code = "A02",
-                        status = id,
-                        f_pin = pin,
-                        bodies = mutableMapOf("A18" to id)
+                pin?.let {
+                    sendAsync(
+                        Data(
+                            code = "A02",
+                            status = id,
+                            f_pin = it,
+                            bodies = mutableMapOf("A18" to id)
+                        )
                     )
-                )
+                }
             } catch (e: Exception) {
                 Log.e(tag, e.message, e)
             }

+ 5 - 2
cpaas-lite/src/main/java/io/nexilis/service/core/ApiModule.kt

@@ -1,10 +1,10 @@
 package io.nexilis.service.core
 
+import android.app.Application
 import android.content.Context
 import dagger.Module
 import dagger.Provides
 import dagger.hilt.InstallIn
-import dagger.hilt.android.qualifiers.ApplicationContext
 import dagger.hilt.components.SingletonComponent
 import io.nexilis.service.data.daos.*
 import io.nexilis.service.data.rooms.ApiRoomDatabase
@@ -14,9 +14,12 @@ import javax.inject.Singleton
 @Module
 object ApiModule {
 
+    @Provides
+    fun provideContext(application: Application): Context = application.applicationContext
+
     @Provides
     @Singleton
-    fun provideDatabase(@ApplicationContext context: Context): ApiRoomDatabase =
+    fun provideDatabase(context: Context): ApiRoomDatabase =
         ApiRoomDatabase.getDatabase(context)
 
     @Provides

+ 18 - 19
cpaas-lite/src/main/java/io/nexilis/service/core/Incoming.kt

@@ -1,32 +1,20 @@
 package io.nexilis.service.core
 
+import android.content.Context
 import android.util.Log
+import io.newuniverse.SDK.nuSDKService
 import io.nexilis.service.Service
 import io.nexilis.service.apiScope
-import io.nexilis.service.context
 import io.nexilis.service.data.entities.Buddy
 import io.nexilis.service.data.entities.Message
 import io.nexilis.service.data.rooms.ApiRoomDatabase
+import io.nexilis.service.pass
 import io.nexilis.service.tag
 import kotlinx.coroutines.launch
 import org.json.JSONArray
 import java.util.zip.ZipInputStream
 
-class Incoming private constructor() {
-
-    companion object {
-
-        @Volatile
-        private var INSTANCE: Incoming? = null
-
-        fun getInstance(): Incoming {
-            return INSTANCE ?: synchronized(this) {
-                val instance = Incoming()
-                INSTANCE = instance
-                instance
-            }
-        }
-    }
+class Incoming(private val context: Context = nuSDKService.getInstance(pass) as Context) {
 
     fun process(data: Data) {
         Log.d(tag, "process(${data.code}):$data")
@@ -40,18 +28,29 @@ class Incoming private constructor() {
                 "LF" -> {
                     loginFile(data)
                 }
+
                 "A037", "A037A" -> {
                     pushMySelf(data)
                 }
+
                 "A0052", "IBB", "A004" -> {
                     pushBuddies(data)
                 }
+
                 "S0" -> {
                     pushMessage(data)
                 }
+
                 "INQ" -> {
                     inquiryMessage(data)
                 }
+
+                "A002" -> {
+                    context.getSharedPreferences().getString("pin", "").let {
+                        Service.sendAck(it, data.status)
+                    }
+                }
+
                 else -> {
                     Log.d(tag, "unprocessed:$data")
                 }
@@ -260,15 +259,15 @@ class Incoming private constructor() {
         try {
             val messageId = data.bodies["A18"] ?: ""
             if (messageId.isEmpty()) return
+            val me = context.getSharedPreferences().getString("pin", "")
             ApiRoomDatabase.getDatabase(context).messageDao().get(messageId).value?.let {
                 if (it.isNotEmpty()) {
-                    Service.sendAck(messageId)
+                    Service.sendAck(me, data.status)
                     return
                 }
             }
             val fPin = data.bodies["A00"] ?: ""
             val lPin = data.bodies["A01"] ?: ""
-            val me = context.getSharedPreferences().getString("pin", "")
             val opposite = if (me == fPin) lPin else fPin
             ApiRoomDatabase.getDatabase(context).messageDao().insert(
                 Message(
@@ -327,7 +326,7 @@ class Incoming private constructor() {
                     data.bodies["ccid"] ?: ""
                 )
             )
-            Service.sendAck(messageId)
+            Service.sendAck(me, data.status)
         } catch (e: Exception) {
             Log.e(tag, e.message, e)
         }

+ 2 - 3
cpaas-lite/src/main/java/io/nexilis/service/data/repositories/BuddyRepository.kt

@@ -4,7 +4,6 @@ import android.content.Context
 import android.util.Log
 import androidx.lifecycle.LiveData
 import io.nexilis.service.Service
-import io.nexilis.service.context
 import io.nexilis.service.core.Data
 import io.nexilis.service.core.optString
 import io.nexilis.service.core.put
@@ -18,7 +17,7 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
 import javax.inject.Inject
 
-class BuddyRepository @Inject constructor(private val dao: BuddyDao) : Repository {
+class BuddyRepository @Inject constructor(private val context: Context, private val dao: BuddyDao) : Repository {
 
     val all: LiveData<List<Buddy>> = dao.getAll()
 
@@ -92,7 +91,7 @@ class BuddyRepository @Inject constructor(private val dao: BuddyDao) : Repositor
         }
     }
 
-    suspend fun addFriend(pin: String) {
+    fun addFriend(pin: String) {
         val preferences = context.getSharedPreferences(
             namePreference,
             Context.MODE_PRIVATE