Commit 09f4ee4c authored by steveQiu's avatar steveQiu

完成 sim卡启动与关闭 api

parent 0a4677a0
...@@ -2,6 +2,8 @@ package com.example.simboxapi ...@@ -2,6 +2,8 @@ package com.example.simboxapi
object Constants { object Constants {
val APP_VERSION:String = "GlocalMe Call"
var BASE_URL:String = "https://voip-tsm.ucloudlink.com/" var BASE_URL:String = "https://voip-tsm.ucloudlink.com/"
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.example.simboxapi.data ...@@ -2,6 +2,7 @@ package com.example.simboxapi.data
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.example.simboxapi.ui.changeSim.ChangeSimViewModel
import com.example.simboxapi.ui.queryCountryInfo.QueryCountryInfoViewModel import com.example.simboxapi.ui.queryCountryInfo.QueryCountryInfoViewModel
import java.lang.IllegalArgumentException import java.lang.IllegalArgumentException
...@@ -16,6 +17,7 @@ class ViewModelFactory(private val viewModelRepository: ViewModelRepository):Vie ...@@ -16,6 +17,7 @@ class ViewModelFactory(private val viewModelRepository: ViewModelRepository):Vie
override fun <T : ViewModel> create(modelClass: Class<T>): T { override fun <T : ViewModel> create(modelClass: Class<T>): T {
return when{ return when{
modelClass.isAssignableFrom(QueryCountryInfoViewModel::class.java) -> QueryCountryInfoViewModel(viewModelRepository) as T modelClass.isAssignableFrom(QueryCountryInfoViewModel::class.java) -> QueryCountryInfoViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(ChangeSimViewModel::class.java) -> ChangeSimViewModel(viewModelRepository) as T
else -> throw IllegalArgumentException("unKnow class name") else -> throw IllegalArgumentException("unKnow class name")
} }
......
...@@ -6,9 +6,12 @@ import androidx.lifecycle.liveData ...@@ -6,9 +6,12 @@ import androidx.lifecycle.liveData
import com.example.simboxapi.base.BaseResponse import com.example.simboxapi.base.BaseResponse
import com.example.simboxapi.data.api.ApiSystemService import com.example.simboxapi.data.api.ApiSystemService
import com.example.simboxapi.data.entirys.CountryDataBean import com.example.simboxapi.data.entirys.CountryDataBean
import com.example.simboxapi.data.entirys.OnOffImisDataBean
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.joinAll
import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import java.lang.Exception import java.lang.Exception
...@@ -27,7 +30,6 @@ class ViewModelRepository(private val apiSystemService: ApiSystemService) { ...@@ -27,7 +30,6 @@ class ViewModelRepository(private val apiSystemService: ApiSystemService) {
emit(ResourceViewModel.success(function()!!)) emit(ResourceViewModel.success(function()!!))
} catch (e: Exception) { } catch (e: Exception) {
emit(ResourceViewModel.error(data = null, e = e)) emit(ResourceViewModel.error(data = null, e = e))
Log.d("TAG","Test")
} }
} }
} }
...@@ -42,4 +44,16 @@ class ViewModelRepository(private val apiSystemService: ApiSystemService) { ...@@ -42,4 +44,16 @@ class ViewModelRepository(private val apiSystemService: ApiSystemService) {
return execute { apiSystemService.apiQueryCountryInfo(body) } return execute { apiSystemService.apiQueryCountryInfo(body) }
} }
fun apiPostOnOffImsi(imei:String,loginCustomerId:String,offImsiList:ArrayList<String>,onImsiList:ArrayList<String>,partnerCode:String,streamNo:String):LiveData<ResourceViewModel<BaseResponse<ArrayList<OnOffImisDataBean>>>>{
val jsonObject = JSONObject()
jsonObject.put("imei",imei)
jsonObject.put("loginCustomerId",loginCustomerId)
jsonObject.put("offImsiList",JSONArray(offImsiList))
jsonObject.put("onImsiList",JSONArray(onImsiList))
jsonObject.put("partnerCode",partnerCode)
jsonObject.put("streamNo",streamNo)
val body = jsonObject.toString().toRequestBody("application/json".toMediaTypeOrNull())
return execute { apiSystemService.apiOnOffImsi(body) }
}
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ package com.example.simboxapi.data.api ...@@ -2,6 +2,7 @@ package com.example.simboxapi.data.api
import com.example.simboxapi.base.BaseResponse import com.example.simboxapi.base.BaseResponse
import com.example.simboxapi.data.entirys.CountryDataBean import com.example.simboxapi.data.entirys.CountryDataBean
import com.example.simboxapi.data.entirys.OnOffImisDataBean
import okhttp3.RequestBody import okhttp3.RequestBody
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.POST import retrofit2.http.POST
...@@ -37,6 +38,7 @@ interface ApiSystemService { ...@@ -37,6 +38,7 @@ interface ApiSystemService {
@POST("bss/app/noauth/QueryCoverCountyInfo") @POST("bss/app/noauth/QueryCoverCountyInfo")
suspend fun apiQueryCountryInfo(@Body body: RequestBody):BaseResponse<ArrayList<CountryDataBean>> suspend fun apiQueryCountryInfo(@Body body: RequestBody):BaseResponse<ArrayList<CountryDataBean>>
@POST("bss/dsds/card/OnOffImsi")
suspend fun apiOnOffImsi(@Body body: RequestBody):BaseResponse<ArrayList<OnOffImisDataBean>>
} }
\ No newline at end of file
package com.example.simboxapi.data.entirys
import com.google.gson.annotations.SerializedName
data class OnOffImisDataBean(
@SerializedName("imsi")
val imsi:String,
@SerializedName("csImei")
val csImei:String
)
\ No newline at end of file
...@@ -4,9 +4,20 @@ import android.content.Context ...@@ -4,9 +4,20 @@ import android.content.Context
import android.content.Intent import android.content.Intent
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.example.simboxapi.data.Status
import com.example.simboxapi.data.ViewModelFactory
import com.example.simboxapi.data.ViewModelRepository
import com.example.simboxapi.data.api.ApiSystemClient
import com.example.simboxapi.databinding.ActivityChangeSimBinding import com.example.simboxapi.databinding.ActivityChangeSimBinding
import com.example.simboxapi.utils.DatePattern
import kotlinx.coroutines.flow.combine
import java.text.SimpleDateFormat
import java.util.*
import kotlin.collections.ArrayList
class ChangeSimActivity : AppCompatActivity() { class ChangeSimActivity : AppCompatActivity(), View.OnClickListener {
companion object { companion object {
fun intentToChangeSimActivity(context: Context) { fun intentToChangeSimActivity(context: Context) {
...@@ -16,9 +27,61 @@ class ChangeSimActivity : AppCompatActivity() { ...@@ -16,9 +27,61 @@ class ChangeSimActivity : AppCompatActivity() {
} }
private val mVB: ActivityChangeSimBinding by lazy { ActivityChangeSimBinding.inflate(layoutInflater) } private val mVB: ActivityChangeSimBinding by lazy { ActivityChangeSimBinding.inflate(layoutInflater) }
private lateinit var mChangeSimViewModel: ChangeSimViewModel
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(mVB.root) setContentView(mVB.root)
setViewModel()
initView()
} }
override fun onClick(view: View?) {
when(view){
mVB.btnChangeSimPostApi->{
mVB.tvChangSimContent.text = ""
val imei = "864055040488792"
val loginCustomId = "6209e2ea1b7f0d319febe2b2"
val offImsiList = arrayListOf("460015466225468")
val onImsiList = arrayListOf<String>()
val partnerCode = "GCGROUP"
val streamNo = "SIMBOX${getData()}${((Math.random() * 9.toDouble() + 1.toDouble()) * 100000.toDouble()).toInt()}"
apiPostOnOffImsi(imei,loginCustomId,offImsiList,onImsiList,partnerCode,streamNo)
}
}
}
private fun setViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiSystemClient.getInstance(this).apiSystemService)
mChangeSimViewModel = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[ChangeSimViewModel::class.java]
}
private fun initView() {
mVB.btnChangeSimPostApi.setOnClickListener(this)
}
private fun getData(): String {
val instance = Calendar.getInstance()
val simpleDateFormat = SimpleDateFormat(DatePattern.PURE_DATETIME_MS_PATTERN, Locale.ENGLISH)
simpleDateFormat.timeZone = TimeZone.getTimeZone("UTC")
return simpleDateFormat.format(instance.time)
}
private fun apiPostOnOffImsi(imei: String, loginCustomId: String, offImsiList: ArrayList<String>, onImsiList: ArrayList<String>, partnerCode: String, streamNo: String) {
mChangeSimViewModel.apiPostOnOffImsi(imei, loginCustomId, offImsiList, onImsiList, partnerCode, streamNo).observe(this) {
when (it.status) {
Status.SUCCESS -> {
mVB.tvChangSimContent.text = it.data.toString()
}
Status.ERROR -> {
mVB.tvChangSimContent.text = it.e?.message.toString()
}
Status.LOADING -> {
}
}
}
}
} }
package com.example.simboxapi.ui.changeSim
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import com.example.simboxapi.base.BaseResponse
import com.example.simboxapi.data.ResourceViewModel
import com.example.simboxapi.data.ViewModelRepository
import com.example.simboxapi.data.entirys.OnOffImisDataBean
class ChangeSimViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
fun apiPostOnOffImsi(imei: String, loginCustomerId: String, offImisList: ArrayList<String>, onImsiList: ArrayList<String>, partnerCode: String, streamNo: String): LiveData<ResourceViewModel<BaseResponse<ArrayList<OnOffImisDataBean>>>> {
return viewModelRepository.apiPostOnOffImsi(imei, loginCustomerId, offImisList, onImsiList, partnerCode, streamNo)
}
}
\ No newline at end of file
...@@ -21,5 +21,6 @@ class LoginActivity : AppCompatActivity() { ...@@ -21,5 +21,6 @@ class LoginActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(mVB.root) setContentView(mVB.root)
} }
} }
\ No newline at end of file
...@@ -11,6 +11,7 @@ import com.example.simboxapi.data.ViewModelFactory ...@@ -11,6 +11,7 @@ import com.example.simboxapi.data.ViewModelFactory
import com.example.simboxapi.data.ViewModelRepository import com.example.simboxapi.data.ViewModelRepository
import com.example.simboxapi.data.api.ApiSystemClient import com.example.simboxapi.data.api.ApiSystemClient
import com.example.simboxapi.databinding.ActivityQueryCountryInfoBinding import com.example.simboxapi.databinding.ActivityQueryCountryInfoBinding
import com.example.simboxapi.utils.DatePattern
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
...@@ -36,23 +37,12 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener { ...@@ -36,23 +37,12 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
override fun onClick(view: View?) { override fun onClick(view: View?) {
when (view) { when (view) {
mVB.btnQueryCountryPostApi -> { mVB.btnQueryCountryPostApi -> {
mVB.tvQueryCountryResponse.text = ""
val langType = "zh-TW" val langType = "zh-TW"
val loginCustomerId = "" val loginCustomerId = ""
val partnerCode = "GCGROUP" val partnerCode = "GCGROUP"
val streamNo = "SIMBOX${getData()}${((Math.random() * 9.toDouble() + 1.toDouble()) * 100000.toDouble()).toInt()}" val streamNo = "SIMBOX${getData()}${((Math.random() * 9.toDouble() + 1.toDouble()) * 100000.toDouble()).toInt()}"
mQueryCountryInfo.apiPostQueryCountryInfo(langType, loginCustomerId, partnerCode, streamNo).observe(this) { apiPostQueryCountry(langType,loginCustomerId,partnerCode, streamNo)
when (it.status) {
Status.SUCCESS -> {
mVB.tvQueryCountryResponse.text = it.data.toString()
}
Status.ERROR -> {
mVB.tvQueryCountryResponse.text = it.e?.message.toString()
}
Status.LOADING -> {
}
}
}
} }
} }
} }
...@@ -64,7 +54,6 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener { ...@@ -64,7 +54,6 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
private fun initView() { private fun initView() {
mVB.btnQueryCountryPostApi.setOnClickListener(this) mVB.btnQueryCountryPostApi.setOnClickListener(this)
} }
private fun getData(): String { private fun getData(): String {
...@@ -73,4 +62,21 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener { ...@@ -73,4 +62,21 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
simpleDateFormat.timeZone = TimeZone.getTimeZone("UTC") simpleDateFormat.timeZone = TimeZone.getTimeZone("UTC")
return simpleDateFormat.format(instance.time) return simpleDateFormat.format(instance.time)
} }
private fun apiPostQueryCountry(langType:String,loginCustomerId:String,partnerCode:String,streamNo:String){
mQueryCountryInfo.apiPostQueryCountryInfo(langType, loginCustomerId, partnerCode, streamNo).observe(this) {
when (it.status) {
Status.SUCCESS -> {
mVB.tvQueryCountryResponse.text = it.data.toString()
}
Status.ERROR -> {
mVB.tvQueryCountryResponse.text = it.e?.message.toString()
}
Status.LOADING -> {
}
}
}
}
} }
\ No newline at end of file
package com.example.simboxapi.ui.queryCountryInfo; package com.example.simboxapi.utils;
import java.util.Locale; import java.util.Locale;
import java.util.TimeZone; import java.util.TimeZone;
......
...@@ -6,13 +6,24 @@ ...@@ -6,13 +6,24 @@
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.changeSim.ChangeSimActivity"> tools:context=".ui.changeSim.ChangeSimActivity">
<TextView <Button
android:text="change sim" android:id="@+id/btnChangeSimPostApi"
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginTop="@dimen/dp_20"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
android:text="@string/activity_change_sim_post_api"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content"/> android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tvChangSimContent"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginTop="@dimen/dp_20"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnChangeSimPostApi"
app:layout_constraintStart_toStartOf="parent"
android:layout_width="0dp"
android:layout_height="0dp"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30" android:layout_marginTop="@dimen/dp_30"
android:text="@string/share_post_api" android:text="@string/activity_query_country_post_api"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
......
...@@ -2,18 +2,18 @@ ...@@ -2,18 +2,18 @@
<string name="app_name">simBoxApi</string> <string name="app_name">simBoxApi</string>
<!--shareApi--> <!--shareApi-->
<string name="share_post_api">Post Api</string>
<string name="share_get_api">Get Api</string>
<!--activity_main--> <!--activity_main-->
<string name="activity_main_query_country">取得国家资讯</string> <string name="activity_main_query_country">取得国家资讯</string>
<string name="activity_main_login">登入</string> <string name="activity_main_login">登入</string>
<string name="activity_main_change_sim">更换sim</string> <string name="activity_main_change_sim">更换sim</string>
<!--activity_login--> <!--activity_query_country-->
<string name="activity_query_country_post_api">Post Api Query Country</string>
<!--activity_login-->
<!--activity_change_sim--> <!--activity_change_sim-->
<string name="activity_change_sim_post_api">Post Api Change Sim</string>
</resources> </resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment