Skip to content

Commit

Permalink
add qrcode and locate sign completely
Browse files Browse the repository at this point in the history
  • Loading branch information
cofbro committed Nov 28, 2023
1 parent f1d9865 commit 2201943
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 24 deletions.
3 changes: 3 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.debug
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
Expand Down
Binary file added app/key/debugkey.jks
Binary file not shown.
Binary file modified app/release/app-release.apk
Binary file not shown.
2 changes: 1 addition & 1 deletion app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
tools:targetApi="31">
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="787057d8a10578894fc4719a3bd274dc" />
android:value="797648bd1ff4e06dd433af6e4f3b87fc" />

<service android:name="cn.leancloud.push.PushService" />
<receiver
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/cofbro/qian/utils/AmapUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,9 @@ object AmapUtils {
AMapLocationClientOption.AMapLocationMode.Hight_Accuracy

// 设置为单次定位 : 默认为false
mLocationOption.isOnceLocation = false
mLocationOption.isOnceLocation = true
mLocationOption.isLocationCacheEnable = true
mLocationOption.httpTimeOut = 20000
mLocationOption.isLocationCacheEnable = false
mLocationClient.setLocationOption(mLocationOption)
//启动定位
mLocationClient.startLocation()
Expand Down
58 changes: 37 additions & 21 deletions app/src/main/java/com/cofbro/qian/wrapper/task/TaskFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.alibaba.fastjson.JSONArray
import com.alibaba.fastjson.JSONObject
import com.amap.api.maps2d.model.LatLng
import com.cofbro.hymvvmutils.base.BaseFragment
import com.cofbro.hymvvmutils.base.getBySp
import com.cofbro.qian.data.URL
Expand All @@ -18,6 +19,7 @@ import com.cofbro.qian.mapsetting.MapActivity
import com.cofbro.qian.photo.PhotoSignActivity
import com.cofbro.qian.scan.ScanActivity
import com.cofbro.qian.utils.AccountManager
import com.cofbro.qian.utils.AmapUtils
import com.cofbro.qian.utils.CacheUtils
import com.cofbro.qian.utils.Constants
import com.cofbro.qian.utils.HtmlParser
Expand All @@ -35,13 +37,18 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.net.URLDecoder
import java.net.URLEncoder

/**
* @author cofbro
* 2023.10.6
*/
class TaskFragment : BaseFragment<TaskViewModel, FragmentTaskBinding>() {
private var latitude = 0.0
private var longitude = 0.0
private var locationText = ""
private var location = ""
private var remark = ""
private var alreadySignCount = 0
private var otherSignUsers: JSONArray? = null
Expand Down Expand Up @@ -82,6 +89,7 @@ class TaskFragment : BaseFragment<TaskViewModel, FragmentTaskBinding>() {
// SIGNIN:aid=402742574&source=15&Code=402742574&enc=548DF0246153AF088E756B59F33BF3F4
// https://mobilelearn.chaoxing.com/widget/sign/e?id=2000072435046&c=2000072435046&enc=BC9662672047A2F2E4A607CC59762973&DB_STRATEGY=PRIMARY_KEY&STRATEGY_PARA=id
// 这里的id包含url中的所有参数
showLoadingView()
val id = result?.substringAfter("id=")
qrCodeId = id ?: ""
lifecycleScope.launch(Dispatchers.IO) {
Expand Down Expand Up @@ -371,23 +379,40 @@ class TaskFragment : BaseFragment<TaskViewModel, FragmentTaskBinding>() {

private fun signWithCamera(id: String?) {
if (id.isNullOrEmpty()) return
//val uid = CacheUtils.cache["uid"] ?: ""
// 暂时不用在url中拼接uid
lifecycleScope.launch(Dispatchers.IO) {
viewModel.preSign(preSignUrl)
delay(200)
val address = "{\"result\":1,\"latitude\":,\"longitude\":,\"address\":\"\"}"
val locationText = URLEncoder.encode(address, "UTF-8")
viewModel.sign(URL.getSignWithCameraPath(id, locationText))
locate {
lifecycleScope.launch(Dispatchers.IO) {
val address = "{\"result\":1,\"latitude\":$latitude,\"longitude\":$longitude,\"address\":\"$locationText\"}"
location = URLEncoder.encode(address, "UTF-8")
viewModel.sign(URL.getSignWithCameraPath(id, location))
}
}
}
}

private fun locate(onLocated : () -> Unit) {
AmapUtils.getCurrentLocationLatLng(requireContext(),
onSuccess = { latLng, location ->
latitude = latLng.latitude
longitude = latLng.longitude
locationText = URLDecoder.decode(location, "UTF-8")
onLocated()
}, onError = {
ToastUtils.show(it)
}
)
}

private suspend fun signNormally(aid: String, signCode: String = "") {
activity?.let {
viewModel.sign(URL.getNormalSignPath(it.courseId, it.classId, aid, signCode))
}
}

/**
* 除二维码签到的代签流程入口
*/
private suspend fun signTogether(aid: String, signCode: String = "", cookies: String) {
activity?.let {
viewModel.signTogether(
Expand All @@ -397,21 +422,12 @@ class TaskFragment : BaseFragment<TaskViewModel, FragmentTaskBinding>() {
}
}

/**
* 二维码代签流程入口
*/
private suspend fun signTogether(qrCodeId: String, cookies: String) {
val uid = findUID(cookies)
viewModel.signTogether(URL.getSignWithCameraPath(qrCodeId) + "&uid=$uid", cookies)
}

private suspend fun signTogether(
address: String?,
aid: String,
uid: String,
lat: String?,
long: String?,
) {
activity?.let {
viewModel.signTogether(URL.getLocationSignPath(address, aid, uid, lat, long), cookies)
}
viewModel.signTogether(URL.getSignWithCameraPath(qrCodeId, location) + "&uid=$uid", cookies)
}

/**
Expand All @@ -437,9 +453,9 @@ class TaskFragment : BaseFragment<TaskViewModel, FragmentTaskBinding>() {
private fun showLoadingView() {
if (loadingDialog == null) {
loadingDialog = FullScreenDialog(requireContext())
loadingDialog?.setCancelable(false)
loadingDialog?.show()
}
loadingDialog?.setCancelable(false)
loadingDialog?.show()
}

private fun hideLoadingView() {
Expand Down

0 comments on commit 2201943

Please sign in to comment.