Commit 48d823cb authored by SteveQiu's avatar SteveQiu

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

parent 383461a4
AllApi
\ No newline at end of file
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
<option value="$PROJECT_DIR$/app" /> <option value="$PROJECT_DIR$/app" />
</set> </set>
</option> </option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings> </GradleProjectSettings>
</option> </option>
</component> </component>
......
...@@ -3,6 +3,14 @@ ...@@ -3,6 +3,14 @@
<component name="DesignSurface"> <component name="DesignSurface">
<option name="filePathToZoomLevelMap"> <option name="filePathToZoomLevelMap">
<map> <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_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_login.xml" value="0.3802083333333333" />
<entry key="..\:/Users/natur/Documents/androidWork/simBoxApi/app/src/main/res/layout/activity_main.xml" value="0.25905797101449274" /> <entry key="..\:/Users/natur/Documents/androidWork/simBoxApi/app/src/main/res/layout/activity_main.xml" value="0.25905797101449274" />
......
...@@ -7,7 +7,7 @@ android { ...@@ -7,7 +7,7 @@ android {
compileSdk 32 compileSdk 32
defaultConfig { defaultConfig {
applicationId "com.example.simboxapi" applicationId "com.example.Allapi"
minSdk 21 minSdk 21
targetSdk 32 targetSdk 32
versionCode 1 versionCode 1
......
package com.example.simboxapi package com.example.allApi
import androidx.test.platform.app.InstrumentationRegistry import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tool="http://schemas.android.com/tools" xmlns:tool="http://schemas.android.com/tools"
package="com.example.simboxapi"> package="com.example.allApi">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<application <application
android:name=".SimBoxApiApp" android:name="com.example.allApi.MyApp"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
...@@ -14,35 +14,53 @@ ...@@ -14,35 +14,53 @@
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/Theme.SimBoxApi" android:theme="@style/Theme.SimBoxApi"
tool:ignore="LockedOrientationActivity"> 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 <activity
android:name=".ui.queryDeviceList.QueryDeviceListActivity" android:name="com.example.allApi.ui.simBoxApi.SimBoxApiActivity"
android:exported="false" /> android:exported="false" />
<activity
android:name="com.example.allApi.ui.simBoxApi.queryDeviceList.SimBoxQueryDeviceListActivity"
android:exported="false" />
<activity <activity
android:name=".ui.changeSim.ChangeSimActivity" android:name="com.example.allApi.ui.simBoxApi.changeSim.SimBoxChangeActivity"
android:exported="false" android:exported="false"
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.login.LoginActivity" android:name="com.example.allApi.ui.simBoxApi.login.SimBoxLoginActivity"
android:exported="false" android:exported="false"
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.queryCountryInfo.QueryCountryInfoActivity" android:name="com.example.allApi.ui.simBoxApi.queryCountryInfo.SimBoxQueryCountryInfoActivity"
android:exported="false" android:exported="false"
android:launchMode="singleTop" android:launchMode="singleTop"
android:screenOrientation="portrait" /> android:screenOrientation="portrait" />
<activity <activity
android:name=".ui.MainActivity" android:name=".ui.jlPay.JlPayActivity"
android:exported="true" android:exported="false" />
android:launchMode="singleTask"
android:screenOrientation="portrait"> <activity
<intent-filter> android:name=".ui.jlPay.getImageCode.JlPayGetImageCodeActivity"
<action android:name="android.intent.action.MAIN" /> android:exported="false" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </application>
</manifest> </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.app.Application
import android.util.Log import android.util.Log
class SimBoxApiApp:Application() { class MyApp:Application() {
companion object{ 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 fun getInstance() = instance
} }
......
package com.example.simboxapi.base package com.example.allApi.base
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
......
package com.example.simboxapi.base package com.example.allApi.base
import com.google.gson.annotations.SerializedName import com.google.gson.annotations.SerializedName
......
package com.example.simboxapi.data package com.example.allApi.data
import java.lang.Exception import java.lang.Exception
......
package com.example.simboxapi.data package com.example.allApi.data
enum class Status { enum class Status {
SUCCESS, SUCCESS,
......
package com.example.simboxapi.data package com.example.allApi.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.allApi.ui.simBoxApi.changeSim.SimBoxChangeViewModel
import com.example.simboxapi.ui.queryCountryInfo.QueryCountryInfoViewModel import com.example.allApi.ui.simBoxApi.queryCountryInfo.SimBoxQueryCountryInfoViewModel
import com.example.simboxapi.ui.queryDeviceList.QueryDeviceListViewModel import com.example.allApi.ui.simBoxApi.queryDeviceList.SimBoxQueryDeviceListViewModel
import java.lang.IllegalArgumentException import java.lang.IllegalArgumentException
class ViewModelFactory(private val viewModelRepository: ViewModelRepository) : ViewModelProvider.Factory { class ViewModelFactory(private val viewModelRepository: ViewModelRepository) : ViewModelProvider.Factory {
...@@ -17,9 +17,9 @@ class ViewModelFactory(private val viewModelRepository: ViewModelRepository) : V ...@@ -17,9 +17,9 @@ class ViewModelFactory(private val viewModelRepository: ViewModelRepository) : V
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(SimBoxQueryCountryInfoViewModel::class.java) -> SimBoxQueryCountryInfoViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(ChangeSimViewModel::class.java) -> ChangeSimViewModel(viewModelRepository) as T modelClass.isAssignableFrom(SimBoxChangeViewModel::class.java) -> SimBoxChangeViewModel(viewModelRepository) as T
modelClass.isAssignableFrom(QueryDeviceListViewModel::class.java) -> QueryDeviceListViewModel(viewModelRepository) as T modelClass.isAssignableFrom(SimBoxQueryDeviceListViewModel::class.java) -> SimBoxQueryDeviceListViewModel(viewModelRepository) as T
else -> throw IllegalArgumentException("unKnow class name") 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 androidx.lifecycle.liveData import androidx.lifecycle.liveData
import cn.hutool.http.body.RequestBody import com.example.allApi.Constants
import com.example.simboxapi.Constants import com.example.allApi.base.BaseResponse
import com.example.simboxapi.base.BaseResponse import com.example.allApi.data.api.ApiService
import com.example.simboxapi.data.api.ApiService import com.example.allApi.data.entirys.CountryDataBean
import com.example.simboxapi.data.entirys.CountryDataBean import com.example.allApi.data.entirys.DeviceDataBean
import com.example.simboxapi.data.entirys.DeviceDataBean import com.example.allApi.data.entirys.OnOffImisDataBean
import com.example.simboxapi.data.entirys.OnOffImisDataBean
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
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.JSONArray
import org.json.JSONObject import org.json.JSONObject
import retrofit2.http.Body
import retrofit2.http.Header
import java.lang.Exception import java.lang.Exception
class ViewModelRepository(private val apiService: ApiService) { class ViewModelRepository(private val apiService: ApiService) {
......
package com.example.simboxapi.data.api package com.example.allApi.data.api
import android.content.Context import android.content.Context
import com.example.simboxapi.Constants import com.example.allApi.Constants
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import retrofit2.Retrofit import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory import retrofit2.converter.gson.GsonConverterFactory
...@@ -32,7 +32,7 @@ class ApiClient(val context: Context) { ...@@ -32,7 +32,7 @@ class ApiClient(val context: Context) {
private fun provideRetrofit(client: OkHttpClient): Retrofit { private fun provideRetrofit(client: OkHttpClient): Retrofit {
return Retrofit.Builder().run { return Retrofit.Builder().run {
baseUrl(Constants.BASE_URL) baseUrl(Constants.URL_SIM_BOX)
client(client) client(client)
addConverterFactory(GsonConverterFactory.create()) addConverterFactory(GsonConverterFactory.create())
build() build()
......
package com.example.simboxapi.data.api package com.example.allApi.data.api
object ApiPath { object ApiPath {
......
package com.example.simboxapi.data.api package com.example.allApi.data.api
import com.example.simboxapi.base.BaseResponse import com.example.allApi.base.BaseResponse
import com.example.simboxapi.data.entirys.CountryDataBean import com.example.allApi.data.entirys.CountryDataBean
import com.example.simboxapi.data.entirys.DeviceDataBean import com.example.allApi.data.entirys.DeviceDataBean
import com.example.simboxapi.data.entirys.OnOffImisDataBean import com.example.allApi.data.entirys.OnOffImisDataBean
import okhttp3.RequestBody import okhttp3.RequestBody
import retrofit2.http.Body import retrofit2.http.Body
import retrofit2.http.Header import retrofit2.http.Header
...@@ -13,6 +13,7 @@ import retrofit2.http.POST ...@@ -13,6 +13,7 @@ import retrofit2.http.POST
interface ApiService { interface ApiService {
@Headers( @Headers(
"type_url:simBox",
"Content-Type:application/json", "Content-Type:application/json",
"Partner-code:simbox", "Partner-code:simbox",
"Accept-Language:zh-CN", "Accept-Language:zh-CN",
...@@ -24,6 +25,7 @@ interface ApiService { ...@@ -24,6 +25,7 @@ interface ApiService {
@Headers( @Headers(
"type_url:simBox",
"Content-Type:application/json", "Content-Type:application/json",
"Partner-code:simbox", "Partner-code:simbox",
"Accept-Language:zh-CN", "Accept-Language:zh-CN",
...@@ -34,6 +36,7 @@ interface ApiService { ...@@ -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>> suspend fun apiOnOffImsi(@Body body: RequestBody, @Header("Cookie") cookie: String, @Header("voipId") voipId: String, @Header("userLabel") userLabel: String): BaseResponse<ArrayList<OnOffImisDataBean>>
@Headers( @Headers(
"type_url:simBox",
"Content-Type:application/json", "Content-Type:application/json",
"Partner-code:simbox", "Partner-code:simbox",
"Accept-Language:zh-CN", "Accept-Language:zh-CN",
...@@ -43,4 +46,6 @@ interface ApiService { ...@@ -43,4 +46,6 @@ interface ApiService {
@POST(ApiPath.QUERY_DEVICE_LIST) @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>> 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 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 com.google.gson.annotations.SerializedName
......
package com.example.simboxapi.data.entirys package com.example.allApi.data.entirys
import com.google.gson.annotations.SerializedName 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 com.google.gson.annotations.SerializedName
import javax.net.ssl.SSLEngineResult
data class SimCardDataBean( data class SimCardDataBean(
......
package com.example.simboxapi.ui package com.example.allApi.ui
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import com.example.simboxapi.base.BaseActivity import com.example.allApi.base.BaseActivity
import com.example.simboxapi.databinding.ActivityMainBinding import com.example.allApi.databinding.ActivityMainBinding
import com.example.simboxapi.ui.changeSim.ChangeSimActivity import com.example.allApi.ui.jlPay.JlPayActivity
import com.example.simboxapi.ui.login.LoginActivity import com.example.allApi.ui.simBoxApi.SimBoxApiActivity
import com.example.simboxapi.ui.queryCountryInfo.QueryCountryInfoActivity
import com.example.simboxapi.ui.queryDeviceList.QueryDeviceListActivity
class MainActivity : BaseActivity(), View.OnClickListener { class MainActivity : BaseActivity(), View.OnClickListener {
...@@ -21,25 +19,17 @@ class MainActivity : BaseActivity(), View.OnClickListener { ...@@ -21,25 +19,17 @@ class MainActivity : BaseActivity(), View.OnClickListener {
override fun onClick(view: View?) { override fun onClick(view: View?) {
when (view) { when (view) {
mVB.btnMainQueryCountry -> { mVB.btnMainSimBox -> {
QueryCountryInfoActivity.intentToQueryCountryInfo(this) SimBoxApiActivity.intentToSimBoxApiActivity(this)
} }
mVB.btnMainLogin -> { mVB.btnMainJlPay -> {
LoginActivity.intentToLogin(this) JlPayActivity.intentToJlPayActivity(this)
}
mVB.btnMainChangeSim -> {
ChangeSimActivity.intentToChangeSimActivity(this)
}
mVB.btnMainQueryDevicesList -> {
QueryDeviceListActivity.intentToQueryDeviceListActivity(this)
} }
} }
} }
private fun initView() { private fun initView() {
mVB.btnMainQueryCountry.setOnClickListener(this) mVB.btnMainSimBox.setOnClickListener(this)
mVB.btnMainLogin.setOnClickListener(this) mVB.btnMainJlPay.setOnClickListener(this)
mVB.btnMainChangeSim.setOnClickListener(this)
mVB.btnMainQueryDevicesList.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.Context
import android.content.Intent import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.text.method.ScrollingMovementMethod import android.text.method.ScrollingMovementMethod
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.example.simboxapi.data.Status import com.example.allApi.data.Status
import com.example.simboxapi.data.ViewModelFactory import com.example.allApi.data.ViewModelFactory
import com.example.simboxapi.data.ViewModelRepository import com.example.allApi.data.ViewModelRepository
import com.example.simboxapi.data.api.ApiClient import com.example.allApi.data.api.ApiClient
import com.example.simboxapi.databinding.ActivityChangeSimBinding import com.example.allApi.databinding.ActivitySimBoxChangeBinding
import com.example.simboxapi.utils.StreamNoUtil import com.example.allApi.utils.StreamNoUtil
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
import kotlin.collections.ArrayList
class ChangeSimActivity : AppCompatActivity(), View.OnClickListener { class SimBoxChangeActivity : AppCompatActivity(), View.OnClickListener {
companion object { companion object {
fun intentToChangeSimActivity(context: Context) { fun intentToChangeSimActivity(context: Context) {
val intent = Intent(context, ChangeSimActivity::class.java) val intent = Intent(context, SimBoxChangeActivity::class.java)
context.startActivity(intent) context.startActivity(intent)
} }
} }
private val mVB: ActivityChangeSimBinding by lazy { ActivityChangeSimBinding.inflate(layoutInflater) } private val mVB: ActivitySimBoxChangeBinding by lazy { ActivitySimBoxChangeBinding.inflate(layoutInflater) }
private lateinit var mChangeSimViewModel: ChangeSimViewModel private lateinit var mChangeSimViewModel: SimBoxChangeViewModel
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -58,7 +57,7 @@ class ChangeSimActivity : AppCompatActivity(), View.OnClickListener { ...@@ -58,7 +57,7 @@ class ChangeSimActivity : AppCompatActivity(), View.OnClickListener {
private fun initViewModel() { private fun initViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiClient.getInstance(this).apiService) 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() { private fun initView() {
......
package com.example.simboxapi.ui.changeSim package com.example.allApi.ui.simBoxApi.changeSim
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.example.simboxapi.base.BaseResponse import com.example.allApi.base.BaseResponse
import com.example.simboxapi.data.ResourceViewModel import com.example.allApi.data.ResourceViewModel
import com.example.simboxapi.data.ViewModelRepository import com.example.allApi.data.ViewModelRepository
import com.example.simboxapi.data.entirys.OnOffImisDataBean 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>>>> { 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) 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.Context
import android.content.Intent import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle 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 { companion object {
fun intentToLogin(context: Context) { fun intentToLogin(context: Context) {
val intent = Intent(context, LoginActivity::class.java) val intent = Intent(context, SimBoxLoginActivity::class.java)
context.startActivity(intent) context.startActivity(intent)
} }
} }
private val mVB by lazy { ActivityLoginBinding.inflate(layoutInflater) } private val mVB by lazy { ActivitySimBoxLoginBinding.inflate(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) { 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.Context
import android.content.Intent import android.content.Intent
...@@ -6,26 +6,26 @@ import android.os.Bundle ...@@ -6,26 +6,26 @@ import android.os.Bundle
import android.text.method.ScrollingMovementMethod import android.text.method.ScrollingMovementMethod
import android.view.View import android.view.View
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.example.simboxapi.base.BaseActivity import com.example.allApi.base.BaseActivity
import com.example.simboxapi.data.Status import com.example.allApi.data.Status
import com.example.simboxapi.data.ViewModelFactory import com.example.allApi.data.ViewModelFactory
import com.example.simboxapi.data.ViewModelRepository import com.example.allApi.data.ViewModelRepository
import com.example.simboxapi.data.api.ApiClient import com.example.allApi.data.api.ApiClient
import com.example.simboxapi.databinding.ActivityQueryCountryInfoBinding import com.example.allApi.databinding.ActivitySimBoxQueryCountryInfoBinding
import com.example.simboxapi.utils.StreamNoUtil import com.example.allApi.utils.StreamNoUtil
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener { class SimBoxQueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
companion object { companion object {
fun intentToQueryCountryInfo(context: Context) { fun intentToQueryCountryInfo(context: Context) {
val intent = Intent(context, QueryCountryInfoActivity::class.java) val intent = Intent(context, SimBoxQueryCountryInfoActivity::class.java)
context.startActivity(intent) context.startActivity(intent)
} }
} }
private val mVB by lazy { ActivityQueryCountryInfoBinding.inflate(layoutInflater) } private val mVB by lazy { ActivitySimBoxQueryCountryInfoBinding.inflate(layoutInflater) }
private lateinit var mQueryCountryInfo: QueryCountryInfoViewModel private lateinit var mQueryCountryInfo: SimBoxQueryCountryInfoViewModel
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -54,7 +54,7 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener { ...@@ -54,7 +54,7 @@ class QueryCountryInfoActivity : BaseActivity(), View.OnClickListener {
private fun initViewModel() { private fun initViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiClient.getInstance(this).apiService) 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() { private fun initView() {
......
package com.example.simboxapi.ui.queryCountryInfo package com.example.allApi.ui.simBoxApi.queryCountryInfo
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.example.simboxapi.base.BaseResponse import com.example.allApi.base.BaseResponse
import com.example.simboxapi.data.ResourceViewModel import com.example.allApi.data.ResourceViewModel
import com.example.simboxapi.data.ViewModelRepository import com.example.allApi.data.ViewModelRepository
import com.example.simboxapi.data.entirys.CountryDataBean import com.example.allApi.data.entirys.CountryDataBean
class QueryCountryInfoViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() { class SimBoxQueryCountryInfoViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
fun apiPostQueryCountryInfo( fun apiPostQueryCountryInfo(
langType: String, loginCustomerId: String, partnerCode: String, streamNo: String, 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.Context
import android.content.Intent import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.text.method.ScrollingMovementMethod import android.text.method.ScrollingMovementMethod
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.example.simboxapi.data.Status import com.example.allApi.data.Status
import com.example.simboxapi.data.ViewModelFactory import com.example.allApi.data.ViewModelFactory
import com.example.simboxapi.data.ViewModelRepository import com.example.allApi.data.ViewModelRepository
import com.example.simboxapi.data.api.ApiClient import com.example.allApi.data.api.ApiClient
import com.example.simboxapi.databinding.ActivityQueryDeviceListBinding import com.example.allApi.databinding.ActivitySimBoxQueryDeviceListBinding
import com.example.simboxapi.utils.StreamNoUtil import com.example.allApi.utils.StreamNoUtil
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
class QueryDeviceListActivity : AppCompatActivity(), View.OnClickListener { class SimBoxQueryDeviceListActivity : AppCompatActivity(), View.OnClickListener {
companion object { companion object {
fun intentToQueryDeviceListActivity(context: Context) { fun intentToQueryDeviceListActivity(context: Context) {
val intent = Intent(context, QueryDeviceListActivity::class.java) val intent = Intent(context, SimBoxQueryDeviceListActivity::class.java)
context.startActivity(intent) context.startActivity(intent)
} }
} }
private val mVB by lazy { ActivityQueryDeviceListBinding.inflate(layoutInflater) } private val mVB by lazy { ActivitySimBoxQueryDeviceListBinding.inflate(layoutInflater) }
private lateinit var mQueryDeviceListViewModel: QueryDeviceListViewModel private lateinit var mQueryDeviceListViewModel: SimBoxQueryDeviceListViewModel
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
...@@ -54,7 +54,7 @@ class QueryDeviceListActivity : AppCompatActivity(), View.OnClickListener { ...@@ -54,7 +54,7 @@ class QueryDeviceListActivity : AppCompatActivity(), View.OnClickListener {
private fun initViewModel() { private fun initViewModel() {
val viewModelRepository: ViewModelRepository = ViewModelRepository.getInstance(ApiClient.getInstance(this).apiService) 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() { private fun initView() {
......
package com.example.simboxapi.ui.queryDeviceList package com.example.allApi.ui.simBoxApi.queryDeviceList
import androidx.lifecycle.LiveData import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import com.example.simboxapi.base.BaseResponse import com.example.allApi.base.BaseResponse
import com.example.simboxapi.data.ResourceViewModel import com.example.allApi.data.ResourceViewModel
import com.example.simboxapi.data.ViewModelRepository import com.example.allApi.data.ViewModelRepository
import com.example.simboxapi.data.entirys.DeviceDataBean import com.example.allApi.data.entirys.DeviceDataBean
class QueryDeviceListViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() { class SimBoxQueryDeviceListViewModel(private val viewModelRepository: ViewModelRepository) : ViewModel() {
fun apiPostQueryDeviceList( fun apiPostQueryDeviceList(
deviceType: String, loginCustomerId: String, partnerCode: String, streamNo: String, 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.Locale;
import java.util.TimeZone; import java.util.TimeZone;
......
package com.example.simboxapi.utils package com.example.allApi.utils
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* 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 @@ ...@@ -4,46 +4,26 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:padding="@dimen/dp_16"
tools:context=".ui.MainActivity"> tools:context=".ui.MainActivity">
<Button <Button
android:id="@+id/btnMainQueryCountry" android:id="@+id/btnMainSimBox"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20" android:text="@string/activity_main_intent_sim_box"
android:text="@string/activity_main_query_country"
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" />
<Button <Button
android:id="@+id/btnMainLogin" android:id="@+id/btnMainJlPay"
android:layout_width="wrap_content" android:layout_width="@dimen/dp_0"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_20" android:layout_marginTop="@dimen/dp_10"
android:text="@string/activity_main_login" android:text="@string/activity_main_intent_to_jl_pay"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnMainQueryCountry" /> app:layout_constraintTop_toBottomOf="@+id/btnMainSimBox" />
<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" />
</androidx.constraintlayout.widget.ConstraintLayout> </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 @@ ...@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.changeSim.ChangeSimActivity"> tools:context=".ui.simBoxApi.changeSim.SimBoxChangeActivity">
<Button <Button
android:id="@+id/btnChangeSimPostApi" android:id="@+id/btnChangeSimPostApi"
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.login.LoginActivity"> tools:context=".ui.simBoxApi.login.SimBoxLoginActivity">
<TextView <TextView
android:text="暂时中止" android:text="暂时中止"
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.queryCountryInfo.QueryCountryInfoActivity"> tools:context=".ui.simBoxApi.queryCountryInfo.SimBoxQueryCountryInfoActivity">
<Button <Button
android:id="@+id/btnQueryCountryPostApi" android:id="@+id/btnQueryCountryPostApi"
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.queryDeviceList.QueryDeviceListActivity"> tools:context=".ui.simBoxApi.queryDeviceList.SimBoxQueryDeviceListActivity">
<Button <Button
android:id="@+id/btnQueryDevicePostApi" android:id="@+id/btnQueryDevicePostApi"
......
<resources> <resources>
<string name="app_name">simBoxApi</string> <string name="app_name">AllApi</string>
<!--shareApi--> <!--shareApi-->
<!--activity_main-->
<string name="activity_main_query_country">取得国家资讯</string> <!--MainActivity-->
<string name="activity_main_login">登入</string> <string name="activity_main_intent_sim_box">多卡寶 Api</string>
<string name="activity_main_query_device_list">取得装置资料</string> <string name="activity_main_intent_to_jl_pay">嘉聯 Api</string>
<string name="activity_main_change_sim">更换sim</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--> <!--activity_query_country-->
<string name="activity_query_country_post_api">Post Api Query Country</string> <string name="activity_query_country_post_api">Post Api Query Country</string>
...@@ -20,4 +25,11 @@ ...@@ -20,4 +25,11 @@
<!--activity_change_sim--> <!--activity_change_sim-->
<string name="activity_change_sim_post_api">Post Api Change Sim</string> <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> </resources>
\ No newline at end of file
package com.example.simboxapi package com.example.allApi
import org.junit.Test import org.junit.Test
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
plugins { plugins {
id 'com.android.application' version '7.1.1' apply false id 'com.android.application' version '7.1.1' apply false
id 'com.android.library' 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) { task clean(type: Delete) {
......
...@@ -12,5 +12,5 @@ dependencyResolutionManagement { ...@@ -12,5 +12,5 @@ dependencyResolutionManagement {
mavenCentral() mavenCentral()
} }
} }
rootProject.name = "simBoxApi" rootProject.name = "AllApi"
include ':app' 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