Commit 48d823cb authored by SteveQiu's avatar SteveQiu

修改-配合其他的api, 使 baseUrl 能夠動態替換

parent 383461a4
AllApi
\ No newline at end of file
......@@ -13,7 +13,6 @@
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
......
......@@ -3,6 +3,14 @@
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="..\:/Users/GameToGo/Documents/androidWork/AllApi/app/src/main/res/layout/activity_jl_pay.xml" value="0.47552083333333334" />
<entry key="..\:/Users/GameToGo/Documents/androidWork/AllApi/app/src/main/res/layout/activity_jl_pay_get_image_code.xml" value="0.47552083333333334" />
<entry key="..\:/Users/GameToGo/Documents/androidWork/AllApi/app/src/main/res/layout/activity_main.xml" value="0.47552083333333334" />
<entry key="..\:/Users/GameToGo/Documents/androidWork/AllApi/app/src/main/res/layout/activity_sim_box_api.xml" value="0.47552083333333334" />
<entry key="..\:/Users/GameToGo/Documents/androidWork/AllApi/app/src/main/res/layout/activity_sim_box_login.xml" value="0.47552083333333334" />
<entry key="..\:/Users/GameToGo/Documents/androidWork/AllApi/app/src/main/res/layout/activity_sim_box_query_country_info.xml" value="0.47552083333333334" />
<entry key="..\:/Users/GameToGo/Documents/androidWork/simBoxApi/app/src/main/res/layout/activity_main.xml" value="0.396875" />
<entry key="..\:/Users/GameToGo/Documents/androidWork/simBoxApi/app/src/main/res/layout/activity_sim_box_api.xml" value="0.396875" />
<entry key="..\:/Users/natur/Documents/androidWork/simBoxApi/app/src/main/res/layout/activity_change_sim.xml" value="0.3802083333333333" />
<entry key="..\:/Users/natur/Documents/androidWork/simBoxApi/app/src/main/res/layout/activity_login.xml" value="0.3802083333333333" />
<entry key="..\:/Users/natur/Documents/androidWork/simBoxApi/app/src/main/res/layout/activity_main.xml" value="0.25905797101449274" />
......
......@@ -7,7 +7,7 @@ android {
compileSdk 32
defaultConfig {
applicationId "com.example.simboxapi"
applicationId "com.example.Allapi"
minSdk 21
targetSdk 32
versionCode 1
......
package com.example.simboxapi
package com.example.allApi
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4
......
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tool="http://schemas.android.com/tools"
package="com.example.simboxapi">
package="com.example.allApi">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".SimBoxApiApp"
android:name="com.example.allApi.MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
......@@ -14,35 +14,53 @@
android:supportsRtl="true"
android:theme="@style/Theme.SimBoxApi"
tool:ignore="LockedOrientationActivity">
<activity
android:name="com.example.allApi.ui.MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".ui.queryDeviceList.QueryDeviceListActivity"
android:name="com.example.allApi.ui.simBoxApi.SimBoxApiActivity"
android:exported="false" />
<activity
android:name="com.example.allApi.ui.simBoxApi.queryDeviceList.SimBoxQueryDeviceListActivity"
android:exported="false" />
<activity
android:name=".ui.changeSim.ChangeSimActivity"
android:name="com.example.allApi.ui.simBoxApi.changeSim.SimBoxChangeActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name=".ui.login.LoginActivity"
android:name="com.example.allApi.ui.simBoxApi.login.SimBoxLoginActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name=".ui.queryCountryInfo.QueryCountryInfoActivity"
android:name="com.example.allApi.ui.simBoxApi.queryCountryInfo.SimBoxQueryCountryInfoActivity"
android:exported="false"
android:launchMode="singleTop"
android:screenOrientation="portrait" />
<activity
android:name=".ui.MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
android:name=".ui.jlPay.JlPayActivity"
android:exported="false" />
<activity
android:name=".ui.jlPay.getImageCode.JlPayGetImageCodeActivity"
android:exported="false" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
\ No newline at end of file
package com.example.allApi
object Constants {
var URL_SIM_BOX:String = "https://voip-tsm.ucloudlink.com/"
var URL_LOGIN_JL_PAY:String = "https://login-api.jlpay.com/"
val CONTENT_TYPE = "application/json"
}
\ No newline at end of file
package com.example.simboxapi
package com.example.allApi
import android.app.Application
import android.util.Log
class SimBoxApiApp:Application() {
class MyApp:Application() {
companion object{
val TAG = SimBoxApiApp::class.java.simpleName.toString()
val TAG = MyApp::class.java.simpleName.toString()
private lateinit var instance:SimBoxApiApp
private lateinit var instance:MyApp
fun getInstance() = instance
}
......
package com.example.simboxapi.base
package com.example.allApi.base
import android.content.Context
import android.os.Bundle
......
package com.example.simboxapi.base
package com.example.allApi.base
import com.google.gson.annotations.SerializedName
......
package com.example.simboxapi.data
package com.example.allApi.data
enum class Status {
SUCCESS,
......
package com.example.simboxapi.data
package com.example.allApi.data
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import com.example.simboxapi.ui.changeSim.ChangeSimViewModel
import com.example.simboxapi.ui.queryCountryInfo.QueryCountryInfoViewModel
import com.example.simboxapi.ui.queryDeviceList.QueryDeviceListViewModel
import com.example.allApi.ui.simBoxApi.changeSim.SimBoxChangeViewModel
import com.example.allApi.ui.simBoxApi.queryCountryInfo.SimBoxQueryCountryInfoViewModel
import com.example.allApi.ui.simBoxApi.queryDeviceList.SimBoxQueryDeviceListViewModel
import java.lang.IllegalArgumentException
class ViewModelFactory(private val viewModelRepository: ViewModelRepository) : ViewModelProvider.Factory {
......@@ -17,9 +17,9 @@ class ViewModelFactory(private val viewModelRepository: ViewModelRepository) : V
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return when {
modelClass.isAssignableFrom(QueryCountryInfoViewModel::class.java) -> QueryCountryInfoViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(ChangeSimViewModel::class.java) -> ChangeSimViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(QueryDeviceListViewModel::class.java) -> QueryDeviceListViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(SimBoxQueryCountryInfoViewModel::class.java) -> SimBoxQueryCountryInfoViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(SimBoxChangeViewModel::class.java) -> SimBoxChangeViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(SimBoxQueryDeviceListViewModel::class.java) -> SimBoxQueryDeviceListViewModel(viewModelRepository) as T
else -> throw IllegalArgumentException("unKnow class name")
}
......
package com.example.simboxapi.data
package com.example.allApi.data
import androidx.lifecycle.LiveData
import androidx.lifecycle.liveData
import cn.hutool.http.body.RequestBody
import com.example.simboxapi.Constants
import com.example.simboxapi.base.BaseResponse
import com.example.simboxapi.data.api.ApiService
import com.example.simboxapi.data.entirys.CountryDataBean
import com.example.simboxapi.data.entirys.DeviceDataBean
import com.example.simboxapi.data.entirys.OnOffImisDataBean
import com.example.allApi.Constants
import com.example.allApi.base.BaseResponse
import com.example.allApi.data.api.ApiService
import com.example.allApi.data.entirys.CountryDataBean
import com.example.allApi.data.entirys.DeviceDataBean
import com.example.allApi.data.entirys.OnOffImisDataBean
import kotlinx.coroutines.Dispatchers
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONArray
import org.json.JSONObject
import retrofit2.http.Body
import retrofit2.http.Header
import java.lang.Exception
class ViewModelRepository(private val apiService: ApiService) {
......
package com.example.simboxapi.data.api
package com.example.allApi.data.api
import android.content.Context
import com.example.simboxapi.Constants
import com.example.allApi.Constants
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
......@@ -32,7 +32,7 @@ class ApiClient(val context: Context) {
private fun provideRetrofit(client: OkHttpClient): Retrofit {
return Retrofit.Builder().run {
baseUrl(Constants.BASE_URL)
baseUrl(Constants.URL_SIM_BOX)
client(client)
addConverterFactory(GsonConverterFactory.create())
build()
......
package com.example.simboxapi.data.api
package com.example.allApi.data.api
object ApiPath {
......
package com.example.simboxapi.data.api
package com.example.allApi.data.api
import com.example.simboxapi.base.BaseResponse
import com.example.simboxapi.data.entirys.CountryDataBean
import com.example.simboxapi.data.entirys.DeviceDataBean
import com.example.simboxapi.data.entirys.OnOffImisDataBean
import com.example.allApi.base.BaseResponse
import com.example.allApi.data.entirys.CountryDataBean
import com.example.allApi.data.entirys.DeviceDataBean
import com.example.allApi.data.entirys.OnOffImisDataBean
import okhttp3.RequestBody
import retrofit2.http.Body
import retrofit2.http.Header
......@@ -13,6 +13,7 @@ import retrofit2.http.POST
interface ApiService {
@Headers(
"type_url:simBox",
"Content-Type:application/json",
"Partner-code:simbox",
"Accept-Language:zh-CN",
......@@ -24,6 +25,7 @@ interface ApiService {
@Headers(
"type_url:simBox",
"Content-Type:application/json",
"Partner-code:simbox",
"Accept-Language:zh-CN",
......@@ -34,6 +36,7 @@ interface ApiService {
suspend fun apiOnOffImsi(@Body body: RequestBody, @Header("Cookie") cookie: String, @Header("voipId") voipId: String, @Header("userLabel") userLabel: String): BaseResponse<ArrayList<OnOffImisDataBean>>
@Headers(
"type_url:simBox",
"Content-Type:application/json",
"Partner-code:simbox",
"Accept-Language:zh-CN",
......@@ -43,4 +46,6 @@ interface ApiService {
@POST(ApiPath.QUERY_DEVICE_LIST)
suspend fun apiQueryDeviceList(@Body body: RequestBody, @Header("Cookie") cookie: String, @Header("voipId") voipId: String, @Header("userLabel") userLabel: String): BaseResponse<ArrayList<DeviceDataBean>>
}
\ No newline at end of file
package com.example.allApi.data.api
import android.util.Log
import com.example.allApi.Constants
import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.Interceptor
import okhttp3.Response
class BaseUrlInterceptor : Interceptor {
companion object {
private val TAG = BaseUrlInterceptor::class.java.simpleName.toString()
fun getInstance(): BaseUrlInterceptor = BaseUrlInterceptor()
}
// override fun intercept(chain: Interceptor.Chain): Response {
//
// val request = chain.request() //获取 request
// val oldHttpUrl = request.url //从 request 中获取原有的 HttpUrl 实例 oldHttpUrl
// val builder = request.newBuilder() //获取 request 的创建 builder
//
// //刪除原本的 url, 獲取新的 BaseUrl
// builder.removeHeader("urlname")
// val newBaseUrl: HttpUrl? = Constants.URL_SIM_BOX.toHttpUrlOrNull()
//
// //重建新的 HttpUrl, 修改需要修改url的部份
// val newFullUrl = newBaseUrl?.let {
// oldHttpUrl.newBuilder()
// .host(it.host)
// .port(it.port)
// .build()
// }
//
// //重建这个 request 通过builder.url(newFullUrl).build() 然后返回一个 response 至此结束
// Log.d(TAG, "intercept: $newFullUrl")
//
// return chain.proceed(builder.url(newFullUrl!!).build())
// }
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request() //获取 request
val oldHttpUrl = request.url //从 request 中获取原有的 HttpUrl 实例 oldHttpUrl
val builder = request.newBuilder() //获取 request 的创建 builder
val headerValues = request.headers("type_url")
if (headerValues.isNotEmpty()) {
builder.removeHeader("type_url") //用來判斷使用哪種baseUrl的Header先刪除
val newBaseUrl: HttpUrl = when (headerValues[0]) {
"simBox" -> {
Constants.URL_SIM_BOX.toHttpUrl()
}
"jlPay" -> {
Constants.URL_LOGIN_JL_PAY.toHttpUrl()
}
else -> {
Constants.URL_SIM_BOX.toHttpUrl()
}
}
//從 request 中獲取原有的 HttpUrl 實例 oldHttpUrl
val oldHttpUrl: HttpUrl = request.url
//重新建立新的HttpUrl, 修改需要修改Url的部分
val newHttpUrl = oldHttpUrl
.newBuilder()
.scheme(newBaseUrl.scheme)
.host(newBaseUrl.host)
.port(newBaseUrl.port)
.build()
return chain.proceed(builder.url(newHttpUrl).build())
} else {
return chain.proceed(request)
}
}
}
\ No newline at end of file
package com.example.simboxapi.data.entirys
package com.example.allApi.data.entirys
import com.google.gson.annotations.SerializedName
......
package com.example.simboxapi.data.entirys
package com.example.allApi.data.entirys
import com.google.gson.annotations.SerializedName
......
package com.example.simboxapi.data.entirys
package com.example.allApi.data.entirys
import com.google.gson.annotations.SerializedName
......
package com.example.simboxapi.data.entirys
package com.example.allApi.data.entirys
import com.google.gson.annotations.SerializedName
import javax.net.ssl.SSLEngineResult
data class SimCardDataBean(
......
package com.example.simboxapi.ui
package com.example.allApi.ui
import android.os.Bundle
import android.view.View
import com.example.simboxapi.base.BaseActivity
import com.example.simboxapi.databinding.ActivityMainBinding
import com.example.simboxapi.ui.changeSim.ChangeSimActivity
import com.example.simboxapi.ui.login.LoginActivity
import com.example.simboxapi.ui.queryCountryInfo.QueryCountryInfoActivity
import com.example.simboxapi.ui.queryDeviceList.QueryDeviceListActivity
import com.example.allApi.base.BaseActivity
import com.example.allApi.databinding.ActivityMainBinding
import com.example.allApi.ui.jlPay.JlPayActivity
import com.example.allApi.ui.simBoxApi.SimBoxApiActivity
class MainActivity : BaseActivity(), View.OnClickListener {
......@@ -21,25 +19,17 @@ class MainActivity : BaseActivity(), View.OnClickListener {
override fun onClick(view: View?) {
when (view) {
mVB.btnMainQueryCountry -> {
QueryCountryInfoActivity.intentToQueryCountryInfo(this)
mVB.btnMainSimBox -> {
SimBoxApiActivity.intentToSimBoxApiActivity(this)
}
mVB.btnMainLogin -> {
LoginActivity.intentToLogin(this)
}
mVB.btnMainChangeSim -> {
ChangeSimActivity.intentToChangeSimActivity(this)
}
mVB.btnMainQueryDevicesList -> {
QueryDeviceListActivity.intentToQueryDeviceListActivity(this)
mVB.btnMainJlPay -> {
JlPayActivity.intentToJlPayActivity(this)
}
}
}
private fun initView() {
mVB.btnMainQueryCountry.setOnClickListener(this)
mVB.btnMainLogin.setOnClickListener(this)
mVB.btnMainChangeSim.setOnClickListener(this)
mVB.btnMainQueryDevicesList.setOnClickListener(this)
mVB.btnMainSimBox.setOnClickListener(this)
mVB.btnMainJlPay.setOnClickListener(this)
}
}
\ No newline at end of file
package com.example.allApi.ui.jlPay
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import com.example.allApi.databinding.ActivityJlPayBinding
import com.example.allApi.ui.jlPay.getImageCode.JlPayGetImageCodeActivity
class JlPayActivity : AppCompatActivity(), View.OnClickListener {
private val mVB by lazy { ActivityJlPayBinding.inflate(layoutInflater) }
companion object {
fun intentToJlPayActivity(context: Context) {
val intent = Intent(context, JlPayActivity::class.java)
context.startActivity(intent)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mVB.root)
initView()
}
override fun onClick(v: View?) {
when (v) {
mVB.btnJlPayGetImageCode -> {
JlPayGetImageCodeActivity.intentToJlPayGetImageCodeActivity(this)
}
}
}
private fun initView() {
mVB.btnJlPayGetImageCode.setOnClickListener(this)
}
}
\ No newline at end of file
package com.example.allApi.ui.jlPay.getImageCode
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.view.View
import com.example.allApi.databinding.ActivityJlPayBinding
class JlPayGetImageCodeActivity : AppCompatActivity(), View.OnClickListener {
private val mVB by lazy { ActivityJlPayBinding.inflate(layoutInflater) }
companion object {
private val TAG = JlPayGetImageCodeActivity::class.java.simpleName
fun intentToJlPayGetImageCodeActivity(context: Context) {
val intent = Intent(context, JlPayGetImageCodeActivity::class.java)
context.startActivity(intent)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mVB.root)
initView()
}
override fun onClick(v: View?) {
when (v) {
mVB.btnJlPayGetImageCode -> {
Log.d(TAG,"test")
}
}
}
private fun initView() {
mVB.btnJlPayGetImageCode.setOnClickListener(this)
}
}
\ No newline at end of file
package com.example.allApi.ui.jlPay.getImageCode
class JlPayGetImageCodeViewModel {
}
\ No newline at end of file
package com.example.allApi.ui.simBoxApi
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import com.example.allApi.databinding.ActivitySimBoxApiBinding
import com.example.allApi.ui.simBoxApi.changeSim.SimBoxChangeActivity
import com.example.allApi.ui.simBoxApi.login.SimBoxLoginActivity
import com.example.allApi.ui.simBoxApi.queryCountryInfo.SimBoxQueryCountryInfoActivity
import com.example.allApi.ui.simBoxApi.queryDeviceList.SimBoxQueryDeviceListActivity
class SimBoxApiActivity : AppCompatActivity(), View.OnClickListener {
private val mVB by lazy { ActivitySimBoxApiBinding.inflate(layoutInflater) }
companion object {
fun intentToSimBoxApiActivity(content: Context) {
val intent = Intent(content, SimBoxApiActivity::class.java);
content.startActivity(intent)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(mVB.root)
initView()
}
override fun onClick(v: View?) {
when (v) {
mVB.btnSimBoxQueryCountry -> {
SimBoxQueryCountryInfoActivity.intentToQueryCountryInfo(this)
}
mVB.btnSimBoxLogin -> {
SimBoxLoginActivity.intentToLogin(this)
}
mVB.btnSimBoxChangeSim -> {
SimBoxChangeActivity.intentToChangeSimActivity(this)
}
mVB.btnSimBoxQueryDevicesList -> {
SimBoxQueryDeviceListActivity.intentToQueryDeviceListActivity(this)
}
}
}
private fun initView() {
mVB.btnSimBoxQueryCountry.setOnClickListener(this)
mVB.btnSimBoxLogin.setOnClickListener(this)
mVB.btnSimBoxChangeSim.setOnClickListener(this)
mVB.btnSimBoxQueryDevicesList.setOnClickListener(this)
}
}
\ No newline at end of file
package com.example.simboxapi.ui.changeSim
package com.example.allApi.ui.simBoxApi.changeSim
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import android.view.View
import androidx.appcompat.app.AppCompatActivity
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.ApiClient
import com.example.simboxapi.databinding.ActivityChangeSimBinding
import com.example.simboxapi.utils.StreamNoUtil
import com.example.allApi.data.Status
import com.example.allApi.data.ViewModelFactory
import com.example.allApi.data.ViewModelRepository
import com.example.allApi.data.api.ApiClient
import com.example.allApi.databinding.ActivitySimBoxChangeBinding
import com.example.allApi.utils.StreamNoUtil
import com.google.gson.GsonBuilder
import kotlin.collections.ArrayList
class ChangeSimActivity : AppCompatActivity(), View.OnClickListener {
class SimBoxChangeActivity : AppCompatActivity(), View.OnClickListener {
companion object {
fun intentToChangeSimActivity(context: Context) {
val intent = Intent(context, ChangeSimActivity::class.java)
val intent = Intent(context, SimBoxChangeActivity::class.java)
context.startActivity(intent)
}
}
private val mVB: ActivityChangeSimBinding by lazy { ActivityChangeSimBinding.inflate(layoutInflater) }
private lateinit var mChangeSimViewModel: ChangeSimViewModel
private val mVB: ActivitySimBoxChangeBinding by lazy { ActivitySimBoxChangeBinding.inflate(layoutInflater) }
private lateinit var mChangeSimViewModel: SimBoxChangeViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -58,7 +57,7 @@ class ChangeSimActivity : AppCompatActivity(), View.OnClickListener {
private fun initViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiClient.getInstance(this).apiService)
mChangeSimViewModel = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[ChangeSimViewModel::class.java]
mChangeSimViewModel = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[SimBoxChangeViewModel::class.java]
}
private fun initView() {
......
package com.example.simboxapi.ui.changeSim
package com.example.allApi.ui.simBoxApi.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
import com.example.allApi.base.BaseResponse
import com.example.allApi.data.ResourceViewModel
import com.example.allApi.data.ViewModelRepository
import com.example.allApi.data.entirys.OnOffImisDataBean
class ChangeSimViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
class SimBoxChangeViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
fun apiPostOnOffImsi(imei: String, loginCustomerId: String, offImisList: ArrayList<String>, onImsiList: ArrayList<String>, partnerCode: String, streamNo: String, cookie: String, voipId: String, userLabel: String): LiveData<ResourceViewModel<BaseResponse<ArrayList<OnOffImisDataBean>>>> {
return viewModelRepository.apiPostOnOffImsi(imei, loginCustomerId, offImisList, onImsiList, partnerCode, streamNo, cookie, voipId, userLabel)
......
package com.example.simboxapi.ui.login
package com.example.allApi.ui.simBoxApi.login
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.simboxapi.databinding.ActivityLoginBinding
import androidx.appcompat.app.AppCompatActivity
import com.example.allApi.databinding.ActivitySimBoxLoginBinding
class LoginActivity : AppCompatActivity() {
class SimBoxLoginActivity : AppCompatActivity() {
companion object {
fun intentToLogin(context: Context) {
val intent = Intent(context, LoginActivity::class.java)
val intent = Intent(context, SimBoxLoginActivity::class.java)
context.startActivity(intent)
}
}
private val mVB by lazy { ActivityLoginBinding.inflate(layoutInflater) }
private val mVB by lazy { ActivitySimBoxLoginBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
......
package com.example.simboxapi.ui.queryCountryInfo
package com.example.allApi.ui.simBoxApi.queryCountryInfo
import android.content.Context
import android.content.Intent
......@@ -6,26 +6,26 @@ import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.example.simboxapi.base.BaseActivity
import com.example.simboxapi.data.Status
import com.example.simboxapi.data.ViewModelFactory
import com.example.simboxapi.data.ViewModelRepository
import com.example.simboxapi.data.api.ApiClient
import com.example.simboxapi.databinding.ActivityQueryCountryInfoBinding
import com.example.simboxapi.utils.StreamNoUtil
import com.example.allApi.base.BaseActivity
import com.example.allApi.data.Status
import com.example.allApi.data.ViewModelFactory
import com.example.allApi.data.ViewModelRepository
import com.example.allApi.data.api.ApiClient
import com.example.allApi.databinding.ActivitySimBoxQueryCountryInfoBinding
import com.example.allApi.utils.StreamNoUtil
import com.google.gson.GsonBuilder
class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
class SimBoxQueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
companion object {
fun intentToQueryCountryInfo(context: Context) {
val intent = Intent(context, QueryCountryInfoActivity::class.java)
val intent = Intent(context, SimBoxQueryCountryInfoActivity::class.java)
context.startActivity(intent)
}
}
private val mVB by lazy { ActivityQueryCountryInfoBinding.inflate(layoutInflater) }
private lateinit var mQueryCountryInfo: QueryCountryInfoViewModel
private val mVB by lazy { ActivitySimBoxQueryCountryInfoBinding.inflate(layoutInflater) }
private lateinit var mQueryCountryInfo: SimBoxQueryCountryInfoViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -54,7 +54,7 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
private fun initViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiClient.getInstance(this).apiService)
mQueryCountryInfo = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[QueryCountryInfoViewModel::class.java]
mQueryCountryInfo = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[SimBoxQueryCountryInfoViewModel::class.java]
}
private fun initView() {
......
package com.example.simboxapi.ui.queryCountryInfo
package com.example.allApi.ui.simBoxApi.queryCountryInfo
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.CountryDataBean
import com.example.allApi.base.BaseResponse
import com.example.allApi.data.ResourceViewModel
import com.example.allApi.data.ViewModelRepository
import com.example.allApi.data.entirys.CountryDataBean
class QueryCountryInfoViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
class SimBoxQueryCountryInfoViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
fun apiPostQueryCountryInfo(
langType: String, loginCustomerId: String, partnerCode: String, streamNo: String,
......
package com.example.simboxapi.ui.queryDeviceList
package com.example.allApi.ui.simBoxApi.queryDeviceList
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.text.method.ScrollingMovementMethod
import android.view.View
import androidx.appcompat.app.AppCompatActivity
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.ApiClient
import com.example.simboxapi.databinding.ActivityQueryDeviceListBinding
import com.example.simboxapi.utils.StreamNoUtil
import com.example.allApi.data.Status
import com.example.allApi.data.ViewModelFactory
import com.example.allApi.data.ViewModelRepository
import com.example.allApi.data.api.ApiClient
import com.example.allApi.databinding.ActivitySimBoxQueryDeviceListBinding
import com.example.allApi.utils.StreamNoUtil
import com.google.gson.GsonBuilder
class QueryDeviceListActivity : AppCompatActivity(), View.OnClickListener {
class SimBoxQueryDeviceListActivity : AppCompatActivity(), View.OnClickListener {
companion object {
fun intentToQueryDeviceListActivity(context: Context) {
val intent = Intent(context, QueryDeviceListActivity::class.java)
val intent = Intent(context, SimBoxQueryDeviceListActivity::class.java)
context.startActivity(intent)
}
}
private val mVB by lazy { ActivityQueryDeviceListBinding.inflate(layoutInflater) }
private lateinit var mQueryDeviceListViewModel: QueryDeviceListViewModel
private val mVB by lazy { ActivitySimBoxQueryDeviceListBinding.inflate(layoutInflater) }
private lateinit var mQueryDeviceListViewModel: SimBoxQueryDeviceListViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
......@@ -54,7 +54,7 @@ class QueryDeviceListActivity : AppCompatActivity(), View.OnClickListener {
private fun initViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiClient.getInstance(this).apiService)
mQueryDeviceListViewModel = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[QueryDeviceListViewModel::class.java]
mQueryDeviceListViewModel = ViewModelProvider(this, ViewModelFactory.getInstance(viewModelRepository))[SimBoxQueryDeviceListViewModel::class.java]
}
private fun initView() {
......
package com.example.simboxapi.ui.queryDeviceList
package com.example.allApi.ui.simBoxApi.queryDeviceList
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.DeviceDataBean
import com.example.allApi.base.BaseResponse
import com.example.allApi.data.ResourceViewModel
import com.example.allApi.data.ViewModelRepository
import com.example.allApi.data.entirys.DeviceDataBean
class QueryDeviceListViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
class SimBoxQueryDeviceListViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
fun apiPostQueryDeviceList(
deviceType: String, loginCustomerId: String, partnerCode: String, streamNo: String,
......
package com.example.simboxapi.utils;
package com.example.allApi.utils;
import java.util.Locale;
import java.util.TimeZone;
......
package com.example.simboxapi.utils
package com.example.allApi.utils
import java.text.SimpleDateFormat
import java.util.*
......
package com.example.simboxapi
object Constants {
var BASE_URL:String = "https://voip-tsm.ucloudlink.com/"
val CONTENT_TYPE = "application/json"
}
\ No newline at end of file
package com.example.simboxapi.data.api
import android.util.Log
import com.example.simboxapi.Constants
import okhttp3.HttpUrl
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.Interceptor
import okhttp3.Response
class BaseUrlInterceptor : Interceptor {
companion object {
private val TAG = BaseUrlInterceptor::class.java.simpleName.toString()
fun getInstance(): BaseUrlInterceptor = BaseUrlInterceptor()
}
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request() //获取 request
val oldHttpUrl = request.url //从 request 中获取原有的 HttpUrl 实例 oldHttpUrl
val builder = request.newBuilder() //获取 request 的创建 builder
//刪除原本的 url, 獲取新的 BaseUrl
builder.removeHeader("urlname")
val newBaseUrl: HttpUrl? = Constants.BASE_URL.toHttpUrlOrNull()
//重建新的 HttpUrl, 修改需要修改url的部份
val newFullUrl = newBaseUrl?.let {
oldHttpUrl.newBuilder()
.host(it.host)
.port(it.port)
.build()
}
//重建这个 request 通过builder.url(newFullUrl).build() 然后返回一个 response 至此结束
Log.d(TAG, "intercept: $newFullUrl")
return chain.proceed(builder.url(newFullUrl!!).build())
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/dp_16"
tools:context=".ui.jlPay.JlPayActivity">
<Button
android:id="@+id/btnJlPayGetImageCode"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:text="@string/activity_jl_pay_get_image_code"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/dp_16"
tools:context=".ui.jlPay.getImageCode.JlPayGetImageCodeActivity">
<Button
android:id="@+id/btnGetImageCode"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:text="@string/activity_jl_pay_get_image_code_api"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvGetImageCodeResponse"
android:layout_width="0dp"
android:layout_height="0dp"
android:scrollbars="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnGetImageCode" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -4,46 +4,26 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/dp_16"
tools:context=".ui.MainActivity">
<Button
android:id="@+id/btnMainQueryCountry"
android:layout_width="wrap_content"
android:id="@+id/btnMainSimBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="@string/activity_main_query_country"
android:text="@string/activity_main_intent_sim_box"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnMainLogin"
android:layout_width="wrap_content"
android:id="@+id/btnMainJlPay"
android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="@string/activity_main_login"
android:layout_marginTop="@dimen/dp_10"
android:text="@string/activity_main_intent_to_jl_pay"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnMainQueryCountry" />
<Button
android:id="@+id/btnMainQueryDevicesList"
android:layout_marginTop="@dimen/dp_20"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="@string/activity_main_query_device_list"
app:layout_constraintTop_toBottomOf="@+id/btnMainLogin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btnMainChangeSim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="@string/activity_main_change_sim"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnMainQueryDevicesList" />
app:layout_constraintTop_toBottomOf="@+id/btnMainSimBox" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/dp_16"
tools:context=".ui.simBoxApi.SimBoxApiActivity">
<Button
android:id="@+id/btnSimBoxQueryCountry"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/activity_sim_box_query_country"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btnSimBoxLogin"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="@string/activity_sim_box_main_login"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnSimBoxQueryCountry" />
<Button
android:id="@+id/btnSimBoxQueryDevicesList"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="@string/activity_sim_box_query_device_list"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnSimBoxLogin" />
<Button
android:id="@+id/btnSimBoxChangeSim"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20"
android:text="@string/activity_sim_box_change_sim"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnSimBoxQueryDevicesList" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.changeSim.ChangeSimActivity">
tools:context=".ui.simBoxApi.changeSim.SimBoxChangeActivity">
<Button
android:id="@+id/btnChangeSimPostApi"
......
......@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.login.LoginActivity">
tools:context=".ui.simBoxApi.login.SimBoxLoginActivity">
<TextView
android:text="暂时中止"
......
......@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.queryCountryInfo.QueryCountryInfoActivity">
tools:context=".ui.simBoxApi.queryCountryInfo.SimBoxQueryCountryInfoActivity">
<Button
android:id="@+id/btnQueryCountryPostApi"
......
......@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.queryDeviceList.QueryDeviceListActivity">
tools:context=".ui.simBoxApi.queryDeviceList.SimBoxQueryDeviceListActivity">
<Button
android:id="@+id/btnQueryDevicePostApi"
......
<resources>
<string name="app_name">simBoxApi</string>
<string name="app_name">AllApi</string>
<!--shareApi-->
<!--activity_main-->
<string name="activity_main_query_country">取得国家资讯</string>
<string name="activity_main_login">登入</string>
<string name="activity_main_query_device_list">取得装置资料</string>
<string name="activity_main_change_sim">更换sim</string>
<!--MainActivity-->
<string name="activity_main_intent_sim_box">多卡寶 Api</string>
<string name="activity_main_intent_to_jl_pay">嘉聯 Api</string>
<!--SimBoxApiActivity-->
<string name="activity_sim_box_query_country">取得国家资讯</string>
<string name="activity_sim_box_main_login">登入</string>
<string name="activity_sim_box_query_device_list">取得装置资料</string>
<string name="activity_sim_box_change_sim">更换sim</string>
<!--activity_query_country-->
<string name="activity_query_country_post_api">Post Api Query Country</string>
......@@ -20,4 +25,11 @@
<!--activity_change_sim-->
<string name="activity_change_sim_post_api">Post Api Change Sim</string>
<!--activity_jl_pay-->
<string name="activity_jl_pay_get_image_code">取得驗證碼的圖(測試用)</string>
<!--activity_jl_pay_get_image_code-->
<string name="activity_jl_pay_get_image_code_api">Post Api Get Image Code</string>
</resources>
\ No newline at end of file
......@@ -2,7 +2,7 @@
plugins {
id 'com.android.application' version '7.1.1' apply false
id 'com.android.library' version '7.1.1' apply false
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
}
task clean(type: Delete) {
......
......@@ -12,5 +12,5 @@ dependencyResolutionManagement {
mavenCentral()
}
}
rootProject.name = "simBoxApi"
rootProject.name = "AllApi"
include ':app'
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