yayan 1 gadu atpakaļ
vecāks
revīzija
1a5bb221b2

+ 6 - 1
app/src/main/java/io/nexilis/alpha/ui/main/Root.kt

@@ -17,7 +17,12 @@ import io.nexilis.service.data.viewmodels.BuddyViewModel
 fun Root(navController: NavHostController = rememberNavController()) {
     val viewModel: BuddyViewModel = hiltViewModel()
     val me by viewModel.me.observeAsState()
-    val start = if (me == null) Graph.authentication else Graph.home
+    var start = Graph.authentication
+    me?.let {
+        if (!it.first_name.startsWith("USR")) {
+            start = Graph.home
+        }
+    }
     NavHost(navController = navController, route = Graph.root, startDestination = start) {
         navigation(route = Graph.authentication, startDestination = Screen.SignIn.route) {
             composable(route = Screen.SignIn.route) {

+ 13 - 19
app/src/main/java/io/nexilis/alpha/ui/main/Sign.kt

@@ -8,7 +8,6 @@ import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.*
 import androidx.compose.material3.*
 import androidx.compose.runtime.*
-import androidx.compose.runtime.livedata.observeAsState
 import androidx.compose.runtime.saveable.rememberSaveable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
@@ -23,6 +22,7 @@ import androidx.hilt.navigation.compose.hiltViewModel
 import androidx.navigation.NavHostController
 import io.nexilis.alpha.ui.viewmodel.MainViewModel
 import io.nexilis.service.core.getSharedPreferences
+import io.nexilis.service.core.optString
 import io.nexilis.service.core.put
 import io.nexilis.service.data.viewmodels.BuddyViewModel
 
@@ -51,7 +51,6 @@ fun SignUp(
         mutableStateOf(false)
     }
     val viewModel: BuddyViewModel = hiltViewModel()
-    val me by viewModel.me.observeAsState()
     val context = LocalContext.current
     Column(
         modifier = Modifier
@@ -121,16 +120,13 @@ fun SignUp(
         )
         Spacer(modifier = Modifier.size(8.dp))
         Button(onClick = {
-            me?.let {
-                viewModel.signUp(
-                    it.f_pin,
-                    textUsername.text,
-                    textConfirmPassword.text
-                ) { r ->
-                    completion(r)
-                    if (r) {
-                        context.getSharedPreferences().put(key = "pin", value = it.f_pin)
-                    }
+            viewModel.signUp(
+                textUsername.text,
+                textConfirmPassword.text
+            ) { r, pin ->
+                completion(r)
+                if (r && pin.isNotEmpty()) {
+                    context.getSharedPreferences().put(key = "pin", value = pin)
                 }
             }
         }) {
@@ -143,7 +139,6 @@ fun SignUp(
 @Composable
 fun SignIn(navController: NavHostController, completion: (Boolean) -> Unit) {
     val viewModel: BuddyViewModel = hiltViewModel()
-    val me by viewModel.me.observeAsState()
     var textUsername by rememberSaveable(stateSaver = TextFieldValue.Saver) {
         mutableStateOf(TextFieldValue("", TextRange(0, 7)))
     }
@@ -197,12 +192,11 @@ fun SignIn(navController: NavHostController, completion: (Boolean) -> Unit) {
         )
         Spacer(modifier = Modifier.size(8.dp))
         Button(onClick = {
-            me?.let {
-                viewModel.signIn(it.f_pin, textUsername.text, textPassword.text) { r ->
-                    completion(r)
-                    if (r) {
-                        context.getSharedPreferences().put(key = "pin", value = it.f_pin)
-                    }
+            val api = context.getSharedPreferences().optString("api", "")
+            viewModel.signIn(api, textUsername.text, textPassword.text) { r, pin ->
+                completion(r)
+                if (r && pin.isNotEmpty()) {
+                    context.getSharedPreferences().put(key = "pin", value = pin)
                 }
             }
         }) {

+ 9 - 11
cpaas-lite/src/main/java/io/nexilis/service/Api.kt

@@ -35,11 +35,12 @@ class Api {
                         namePreference,
                         Context.MODE_PRIVATE
                     )
-                    val random = SecureRandom().nextInt(9 + 1 - 1) + 1
-                    val userTmp = preferences.optString(
-                        key = "pin", default = random.toString()
+                    preferences.put(key = "api", value = account)
+                    val random = String.format("%010d", SecureRandom().nextInt(999999))
+                    val session = preferences.optString(
+                        key = "session", default = random
                     )
-                    Log.d(tag, "initConnection:$pass,$account,$activity,$userTmp")
+                    Log.d(tag, "initConnection:$pass,$account,$activity,$session")
                     nuSDKService.getInstance(pass).initConnection(
                         pass,
                         account,
@@ -48,7 +49,7 @@ class Api {
                         SdkCallback(),
                         "108.136.37.34",
                         42823,
-                        userTmp,
+                        session,
                         "09:00",
                         false,
                         "108.136.37.34:42823"
@@ -60,13 +61,13 @@ class Api {
                             Log.d(tag, "wait connection")
                             condition?.let {
                                 val await = it.await(15, TimeUnit.SECONDS)
+                                preferences.put(key = "session", value = session)
                                 Log.d(tag, "signup:start:$await")
                                 val response = Service.sendSync(
                                     Data(
                                         code = "SUA01",
                                         status = System.nanoTime().toString(),
-                                        f_pin = userTmp,
-                                        bodies = mutableMapOf("Api" to account, "A92" to "yayandw")
+                                        bodies = mutableMapOf("Api" to account)
                                     )
                                 )
                                 Log.d(tag, "signup:response:$response")
@@ -75,15 +76,12 @@ class Api {
                                     if (r.isOk()) {
                                         val p = r.bodies["A00"] ?: ""
                                         Log.d(tag, "signup:put:pin:$p")
-                                        preferences.put("pin", p)
-                                        Log.d(tag, "signup:changeUser:$p")
-                                        nuSDKService.getInstance(pass).changeUser(pass, p)
+                                        preferences.put(key = "pin", value = p)
                                         Log.d(tag, "signup:retrieve")
                                         Service.sendAsync(
                                             Data(
                                                 code = "A050",
                                                 status = System.nanoTime().toString(),
-                                                f_pin = userTmp
                                             )
                                         )
                                     }

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

@@ -5,7 +5,7 @@ import java.util.concurrent.ConcurrentHashMap
 
 data class Data(
     var type: String = "",
-    var version: String = "1.0.6",
+    var version: String = "1.0.111",
     var code: String = "",
     var status: String = "",
     var f_pin: String = "",

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

@@ -316,7 +316,7 @@ class Incoming private constructor() {
                         jsonObject.optString("BZ1") ?: ""
                     )
                 )
-                val members = jsonObject.getJSONArray("member")
+                val members = JSONArray(jsonObject.getString("member"))
                 for (j in 0 until members.length()) {
                     val jsonMember = members.getJSONObject(j)
                     ApiRoomDatabase.getDatabase(context).groupMemberDao().insert(

+ 7 - 1
cpaas-lite/src/main/java/io/nexilis/service/data/daos/MessageDao.kt

@@ -30,7 +30,13 @@ abstract class MessageDao {
 
     suspend fun insert(entity: Message) {
         _insert(entity)
-        _insertSummary(MessageSummary(entity.opposite_pin, entity.message_id))
+        _insertSummary(
+            MessageSummary(
+                l_pin = entity.opposite_pin,
+                message_id = entity.message_id,
+                last_update = System.currentTimeMillis()
+            )
+        )
     }
 
 }

+ 1 - 1
cpaas-lite/src/main/java/io/nexilis/service/data/daos/MessageSummaryDao.kt

@@ -10,7 +10,7 @@ import io.nexilis.service.data.entities.*
 @Dao
 interface MessageSummaryDao {
 
-    @Query("select * from MessageSummary")
+    @Query("select * from MessageSummary order by last_update desc")
     fun getAll(): LiveData<List<MessageSummary>>
 
     @Query("select * from MessageSummary where l_pin = :pin")

+ 1 - 0
cpaas-lite/src/main/java/io/nexilis/service/data/entities/Buddy.kt

@@ -6,6 +6,7 @@ import androidx.room.Index
 @Entity(
     primaryKeys = ["f_pin"],
     indices = [
+        Index(value = ["type"], unique = true),
         Index(value = ["user_id", "ex_status", "first_name", "email", "msisdn"])
     ]
 )

+ 2 - 1
cpaas-lite/src/main/java/io/nexilis/service/data/entities/MessageSummary.kt

@@ -6,5 +6,6 @@ import androidx.room.Entity
 data class MessageSummary(
     val l_pin: String,
     val message_id: String,
-    val counter: Int = 0
+    val counter: Int = 0,
+    val last_update: Long = System.currentTimeMillis(),
 ) : MainEntity

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

@@ -28,16 +28,14 @@ class BuddyRepository @Inject constructor(private val dao: BuddyDao) : Repositor
     }
 
     suspend fun signUp(
-        me: String,
         username: String,
         password: String,
-        completion: (Boolean) -> Unit
+        completion: (Boolean, String) -> Unit
     ) {
         Service.sendAsync(
             Data(
                 code = "A003",
                 status = System.nanoTime().toString(),
-                f_pin = me,
                 bodies = mutableMapOf(
                     "A02" to username,
                     "A03" to "",
@@ -47,38 +45,46 @@ class BuddyRepository @Inject constructor(private val dao: BuddyDao) : Repositor
             )
         ) { data ->
             Log.d(tag, "insert >>>> $data")
-            if (data.isOk()) {
-                dao.insert(Buddy(f_pin = me, first_name = username, image_id = "", type = "1"))
+            val pin = data.bodies["A00real"] ?: ""
+            if (data.isOk() && pin.isNotEmpty()) {
+                dao.insert(Buddy(f_pin = pin, first_name = username, image_id = "", type = "1"))
             }
             withContext(Dispatchers.Main) {
-                completion(data.isOk())
+                completion(data.isOk(), pin)
             }
         }
     }
 
     suspend fun signIn(
-        me: String,
+        api: String,
         username: String,
         password: String,
-        completion: (Boolean) -> Unit
+        completion: (Boolean, String) -> Unit
     ) {
         Service.sendSync(
             Data(
                 code = "SSI01",
                 status = System.nanoTime().toString(),
-                f_pin = me,
                 bodies = mutableMapOf(
                     "A92" to username,
-                    "Bm" to password.toMD5()
+                    "Bm" to password,
+                    "Api" to api
                 )
             )
         )?.let { data ->
             Log.d(tag, "insert >>>> $data")
-            if (data.isOk()) {
-                dao.insert(Buddy(f_pin = me, first_name = username, image_id = "", type = "1"))
+            val pin = data.bodies["A00real"] ?: ""
+            if (data.isOk() && pin.isNotEmpty()) {
+                Service.sendAsync(
+                    Data(
+                        code = "A050",
+                        status = System.nanoTime().toString(),
+                        f_pin = pin
+                    )
+                )
             }
             withContext(Dispatchers.Main) {
-                completion(data.isOk())
+                completion(data.isOk(), pin)
             }
         }
     }

+ 2 - 1
cpaas-lite/src/main/java/io/nexilis/service/data/rooms/ApiRoomDatabase.kt

@@ -31,7 +31,7 @@ import io.nexilis.service.data.entities.*
         Pull::class,
         ServiceBank::class,
         WorkingArea::class
-    ], version = 2, exportSchema = false
+    ], version = 1, exportSchema = false
 )
 abstract class ApiRoomDatabase : RoomDatabase() {
 
@@ -88,5 +88,6 @@ abstract class ApiRoomDatabase : RoomDatabase() {
                 db.execSQL("ALTER TABLE `Group` ADD COLUMN `be` TEXT NOT NULL")
             }
         }
+
     }
 }

+ 4 - 4
cpaas-lite/src/main/java/io/nexilis/service/data/viewmodels/BuddyViewModel.kt

@@ -24,14 +24,14 @@ class BuddyViewModel @Inject constructor(private val repository: BuddyRepository
         repository.insert(buddy)
     }
 
-    fun signUp(me: String, username: String, password: String, completion: (Boolean) -> Unit) =
+    fun signUp(username: String, password: String, completion: (Boolean, String) -> Unit) =
         viewModelScope.launch {
-            repository.signUp(me, username, password, completion)
+            repository.signUp(username, password, completion)
         }
 
-    fun signIn(me: String, username: String, password: String, completion: (Boolean) -> Unit) =
+    fun signIn(api: String, username: String, password: String, completion: (Boolean, String) -> Unit) =
         viewModelScope.launch {
-            repository.signIn(me, username, password, completion)
+            repository.signIn(api, username, password, completion)
         }
 
     fun addFriend(me: String, pin: String) = viewModelScope.launch {