From 237bd0e7494cb73bc351b2e6002831fa593eec4c Mon Sep 17 00:00:00 2001
From: 18034727885 <973609879@qq.com>
Date: 星期五, 07 八月 2026 14:17:58 +0800
Subject: [PATCH] 修复问题
---
app/src/main/res/values-fr/strings.xml | 5
app/src/main/java/com/igo/user/IGoApplication.kt | 5
app/src/main/java/com/igo/user/ui/trip/ComplainActivity.kt | 19
app/src/main/java/com/igo/user/ui/login/LoginActivity.kt | 290 ++++++------
app/src/main/java/com/igo/user/ui/mine/ChangePwdActivity.kt | 11
app/src/main/java/com/igo/user/utils/crash/CrashHandler.kt | 160 +++++++
app/src/main/res/layout/fragment_logistics.xml | 2
app/src/main/java/com/igo/user/network/ApiService.kt | 6
app/src/main/java/com/igo/user/ui/trip/MapTripFragment.kt | 16
app/src/main/java/com/igo/user/network/LoggingInterceptor.java | 15
app/src/main/java/com/igo/user/ui/trip/TripActivity.kt | 181 +++++--
app/src/main/java/com/igo/user/ui/trip/OrderDetailActivity.kt | 41 +
app/src/main/java/com/igo/user/utils/Const.kt | 2
app/build.gradle | 4
app/src/main/java/com/igo/user/utils/crash/CrashInfo.kt | 39 +
app/src/main/java/com/igo/user/ui/mine/FeedbackActivity.kt | 4
app/src/main/java/com/igo/user/ui/mine/VerifyPhoneForUpdatePwdActivity.kt | 69 +-
app/src/main/java/com/igo/user/ui/mine/TripOrderFragment.kt | 8
app/src/main/java/com/igo/user/network/RRetrofit.kt | 87 ++-
app/src/main/java/com/igo/user/ui/trip/OrderDetailWithMapActivity.kt | 15
app/src/main/res/values/strings.xml | 1
rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java | 13
app/src/main/java/com/igo/user/utils/crash/LogUploader.kt | 124 +++++
app/src/main/java/com/igo/user/ui/trip/CancelOrderActivity.kt | 63 +-
app/src/main/java/com/igo/user/ui/MainActivity.kt | 1
app/src/main/java/com/igo/user/ui/HomeActivity.kt | 37 +
app/src/main/java/com/igo/user/network/HttpManager.kt | 6
app/src/main/res/layout/activity_login.xml | 8
app/src/main/java/com/igo/user/ui/logistics/LogisticsGuideActivity.kt | 22
app/src/main/res/values-en/strings.xml | 13
app/src/main/java/com/igo/user/extension/StringExtension.kt | 5
app/src/main/java/com/igo/user/network/Apis.kt | 1
app/src/main/res/layout/activity_receiver.xml | 5
33 files changed, 885 insertions(+), 393 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index f718a1f..2fb6339 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -21,8 +21,8 @@
applicationId "com.gopost.user"
minSdkVersion 23
targetSdkVersion 35
- versionCode 21
- versionName "1.21"
+ versionCode 22
+ versionName "1.22"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
diff --git a/app/src/main/java/com/igo/user/IGoApplication.kt b/app/src/main/java/com/igo/user/IGoApplication.kt
index c964dbe..24a4389 100644
--- a/app/src/main/java/com/igo/user/IGoApplication.kt
+++ b/app/src/main/java/com/igo/user/IGoApplication.kt
@@ -14,7 +14,6 @@
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.lifecycleScope
import cn.sinata.rxnetty.LogHelper
-import cn.sinata.rxnetty.LogHelper.initLogs
import cn.sinata.rxnetty.NettyClient
import cn.sinata.xldutils.activity.BaseActivity
import cn.sinata.xldutils.application.BaseApplication
@@ -40,6 +39,7 @@
import com.igo.user.ui.login.LoginActivity
import com.igo.user.ui.trip.TripActivity
import com.igo.user.utils.Const
+import com.igo.user.utils.crash.CrashHandler
import com.sinata.download.DownloadLibrary
import io.reactivex.Flowable
import io.reactivex.disposables.Disposable
@@ -66,7 +66,7 @@
null,
packageName
)
- initLogs()
+ LogHelper.initLogs(this)
initNetty()
Places.initialize(this, Const.google_key)
MapsInitializer.initialize(
@@ -74,6 +74,7 @@
) { renderer ->
Log.e(Const.GoogleTag, "LATEST renderer:${renderer.name}")
}
+ CrashHandler.init(this)
}
private fun initNetty() {
diff --git a/app/src/main/java/com/igo/user/extension/StringExtension.kt b/app/src/main/java/com/igo/user/extension/StringExtension.kt
index 2bf968c..b737935 100644
--- a/app/src/main/java/com/igo/user/extension/StringExtension.kt
+++ b/app/src/main/java/com/igo/user/extension/StringExtension.kt
@@ -1,5 +1,10 @@
package com.igo.user.extension
+//扩展函数 如果字符是null或者空字符串则返回block函数值
+fun String?.extIsEmptyOrNull(block: () -> String): String {
+ return if (isNullOrEmpty()) block.invoke() else this
+}
+
//扩展函数 清除无效0
fun String.extClearInvalidZero(): String {
if (endsWith(".000")) {
diff --git a/app/src/main/java/com/igo/user/network/ApiService.kt b/app/src/main/java/com/igo/user/network/ApiService.kt
index 44ec9e2..92df1b9 100644
--- a/app/src/main/java/com/igo/user/network/ApiService.kt
+++ b/app/src/main/java/com/igo/user/network/ApiService.kt
@@ -408,8 +408,12 @@
@POST(Apis.getOrderDrivingData)
- fun getOrderDrivingData(@Query("orderId")orderId :Int,@Query("orderType")orderType :Int): Flowable<ResultData<Any>>
+ fun getOrderDrivingData(@Query("orderId")orderId :Int,@Query("orderType")orderType :Int): Flowable<ResultData<TrippingInfo>>
@POST(Apis.queryHomeEntrance)
fun queryHomeEntrance(): Flowable<ResultData<HomeDatas>>
+
+ @FormUrlEncoded
+ @POST(Apis.saveLog)
+ fun saveLog(@Field("url") url: String): Flowable<ResultData<HomeDatas>>
}
\ No newline at end of file
diff --git a/app/src/main/java/com/igo/user/network/Apis.kt b/app/src/main/java/com/igo/user/network/Apis.kt
index 5f5dc09..69d5981 100644
--- a/app/src/main/java/com/igo/user/network/Apis.kt
+++ b/app/src/main/java/com/igo/user/network/Apis.kt
@@ -161,5 +161,6 @@
const val queryHomeEntrance = "base/driver/queryHomeEntrance" //新增-获取首页入口设置
+ const val saveLog = "api/appLog/save" //手机端日志记录
}
\ No newline at end of file
diff --git a/app/src/main/java/com/igo/user/network/HttpManager.kt b/app/src/main/java/com/igo/user/network/HttpManager.kt
index 25b7643..e2d1ec4 100644
--- a/app/src/main/java/com/igo/user/network/HttpManager.kt
+++ b/app/src/main/java/com/igo/user/network/HttpManager.kt
@@ -1347,11 +1347,15 @@
}
- fun getOrderDrivingData(orderId:Int,orderType:Int): Flowable<ResultData<Any>> {
+ fun getOrderDrivingData(orderId:Int,orderType:Int): Flowable<ResultData<TrippingInfo>> {
return request().getOrderDrivingData(orderId,orderType)
}
fun queryHomeEntrance(): Flowable<ResultData<HomeDatas>> {
return request().queryHomeEntrance()
}
+
+ fun saveLog(url: String): Flowable<ResultData<HomeDatas>> {
+ return request().saveLog(url)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/igo/user/network/LoggingInterceptor.java b/app/src/main/java/com/igo/user/network/LoggingInterceptor.java
index 6a9255e..e721381 100644
--- a/app/src/main/java/com/igo/user/network/LoggingInterceptor.java
+++ b/app/src/main/java/com/igo/user/network/LoggingInterceptor.java
@@ -18,21 +18,6 @@
private static final String TAG = "zmc-Log";
- private volatile Level level = Level.NONE;
-
- public Level getLevel() {
- return level;
- }
-
- public void setLevel(Level l) {
- level = l;
- }
-
- public enum Level {
- NONE,
- BODY
- }
-
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
diff --git a/app/src/main/java/com/igo/user/network/RRetrofit.kt b/app/src/main/java/com/igo/user/network/RRetrofit.kt
index 82639c1..6101add 100644
--- a/app/src/main/java/com/igo/user/network/RRetrofit.kt
+++ b/app/src/main/java/com/igo/user/network/RRetrofit.kt
@@ -17,10 +17,7 @@
class RRetrofit private constructor() {
private val loggingInterceptor by lazy {
- LoggingInterceptor().apply {
- level =
- if (BuildConfig.DEBUG) LoggingInterceptor.Level.BODY else LoggingInterceptor.Level.NONE
- }
+ LoggingInterceptor()
}
private val retrofit: Retrofit = Retrofit.Builder()
@@ -29,49 +26,53 @@
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(
OkHttpClient.Builder()
- .addInterceptor(HttpLoggingInterceptor().apply {
- level = HttpLoggingInterceptor.Level.BODY
- })
- .addInterceptor { chain ->
- var request = chain.request()
- if (request.method() == "POST" && !request.url().toString()
- .contains("base/user/image")
- ) {
- val bodyBuilder = FormBody.Builder()
- var formBody: FormBody
- if (request.body() is FormBody) {
- formBody = request.body() as FormBody
- (0 until formBody.size()).forEach {
- bodyBuilder.addEncoded(
- formBody.encodedName(it), formBody.encodedValue(
- it
+ .addInterceptor(HttpLoggingInterceptor().apply {
+ level = HttpLoggingInterceptor.Level.BODY
+ })
+ .addInterceptor { chain ->
+ var request = chain.request()
+ if (request.method() == "POST" && !request.url().toString()
+ .contains("base/user/image")
+ ) {
+ val bodyBuilder = FormBody.Builder()
+ var formBody: FormBody
+ if (request.body() is FormBody) {
+ formBody = request.body() as FormBody
+ (0 until formBody.size()).forEach {
+ bodyBuilder.addEncoded(
+ formBody.encodedName(it), formBody.encodedValue(
+ it
+ )
)
- )
+ }
}
+ var language = request.header("language")
+ language = if (language.isNullOrEmpty()) {
+ LanguageUtil.getLanguage()!!
+ } else {
+ language
+ }
+ //1=简体中文,2=英语,3=法语
+ formBody = bodyBuilder.addEncoded("language", getLanguageType(language)).build()
+ request = request.newBuilder().post(formBody).build()
}
- var language = request.header("language")
- language = if (language.isNullOrEmpty()) {
- LanguageUtil.getLanguage()!!
- } else {
- language
- }
- //1=简体中文,2=英语,3=法语
- formBody = bodyBuilder.addEncoded("language", getLanguageType(language)).build()
- request = request.newBuilder().post(formBody).build()
+ chain.proceed(request)
}
- chain.proceed(request)
- }
- .addInterceptor { chain ->
- val token = SPUtils.instance().getString(Const.User.TOKEN)
- val request =
- if (token.isEmpty()) chain.request() else
- chain.request().newBuilder().addHeader("Authorization", "Bearer $token")
- .build()
- Log.e(Const.Tag, request.headers().toString())
- chain.proceed(request)
- }
- .addInterceptor(loggingInterceptor)
- .build())
+ .addInterceptor { chain ->
+ val token = SPUtils.instance().getString(Const.User.TOKEN)
+ val request =
+ if (token.isEmpty()) chain.request() else
+ chain.request().newBuilder().addHeader("Authorization", "Bearer $token")
+ .build()
+ Log.e(Const.Tag, request.headers().toString())
+ chain.proceed(request)
+ }
+ .apply {
+ if (BuildConfig.DEBUG) {
+ addInterceptor(loggingInterceptor)
+ }
+ }
+ .build())
.build()
companion object {
diff --git a/app/src/main/java/com/igo/user/ui/HomeActivity.kt b/app/src/main/java/com/igo/user/ui/HomeActivity.kt
index a64b27c..afdfcb7 100644
--- a/app/src/main/java/com/igo/user/ui/HomeActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/HomeActivity.kt
@@ -37,6 +37,7 @@
import com.igo.user.ui.mine.SettingActivity
import com.igo.user.ui.mine.ShareAppActivity
import com.igo.user.ui.mine.UserInfoActivity
+import com.igo.user.ui.mine.VerifyPhoneForUpdatePwdActivity
import com.igo.user.ui.mine.WalletActivity
import com.igo.user.utils.Const
import com.igo.user.utils.ImageUtils
@@ -265,6 +266,12 @@
ImageUtils.load(bind.img1, data?.imgUrlTaxi)
ImageUtils.load(bind.img3, data?.imgUrlLogistics)
}
+ showNoticeSetPasswordDialog()
+ }
+
+ override fun onNewIntent(intent: Intent?) {
+ super.onNewIntent(intent)
+ showNoticeSetPasswordDialog()
}
//刷新广告
@@ -327,4 +334,34 @@
}
block.invoke(IGoApplication.getCurrentLocation())
}
+
+ //显示提示设置密码弹窗
+ private fun showNoticeSetPasswordDialog() {
+ if (SPUtils.instance().getString(Const.User.NEED_SET_PASSWORD) == "1") {
+ HttpManager.queryUserInfo().request(this) { _, data ->
+ data?.also {
+ SPUtils.instance().put(Const.User.PHONE, it.phone).apply()
+ val tipDialog = TipDialog()
+ tipDialog.arguments = bundleOf(
+ "msg" to getString(R.string.请设置密码),
+ "ok" to getString(R.string.前往),
+ "cancel" to getString(R.string.取消),
+ "isNotifyRed" to true
+ )
+ tipDialog.setCallback(object : TipDialog.OnClickCallback {
+ override fun onOk() {
+ startActivity<VerifyPhoneForUpdatePwdActivity>(
+ "phone" to it.phone,
+ "title" to getString(R.string.set_password)
+ )
+ }
+
+ override fun onCancel() {
+ }
+ })
+ tipDialog.showAllowingStateLoss(supportFragmentManager, "setPassword")
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/igo/user/ui/MainActivity.kt b/app/src/main/java/com/igo/user/ui/MainActivity.kt
index 6038f76..270d617 100644
--- a/app/src/main/java/com/igo/user/ui/MainActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/MainActivity.kt
@@ -435,7 +435,6 @@
* 查询是否有进行中的订单
*/
fun queryTripping() {
- LogHelper.logRecord("查询是否有进行中的订单")
HttpManager.queryServingOrder().request(this, false) { _, data ->
data?.let {
if (isFinishing) return@let
diff --git a/app/src/main/java/com/igo/user/ui/login/LoginActivity.kt b/app/src/main/java/com/igo/user/ui/login/LoginActivity.kt
index a62547a..c656374 100644
--- a/app/src/main/java/com/igo/user/ui/login/LoginActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/login/LoginActivity.kt
@@ -1,5 +1,9 @@
package com.igo.user.ui.login
+//import com.umeng.socialize.UMAuthListener
+//import com.umeng.socialize.UMShareAPI
+//import com.umeng.socialize.UMShareConfig
+//import com.umeng.socialize.bean.SHARE_MEDIA
import MainActivityViewModel
import android.app.Activity
import android.content.Intent
@@ -11,7 +15,6 @@
import android.widget.EditText
import android.widget.ImageView
import android.widget.TextView
-import android.widget.Toast
import androidx.activity.viewModels
import androidx.core.os.bundleOf
import androidx.lifecycle.lifecycleScope
@@ -37,20 +40,16 @@
import com.flyco.tablayout.listener.OnTabSelectListener
import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailability
-import com.google.android.gms.recaptcha.Recaptcha
-import com.google.android.gms.recaptcha.RecaptchaAction
import com.google.android.gms.recaptcha.RecaptchaClient
-import com.google.recaptcha.sample.RecaptchaVisual
import com.google.recaptcha.sample.RecaptchaVisualException
import com.igo.user.R
-import com.igo.user.dialog.ImageCodeDialog
import com.igo.user.dialog.SingleWheelDialog
import com.igo.user.interfaces.StringCallback
import com.igo.user.network.HttpManager
import com.igo.user.network.request
import com.igo.user.ui.H5Activity
+import com.igo.user.ui.HomeActivity
import com.igo.user.ui.TransparentStatusBarActivity
-import com.igo.user.ui.mine.FinishMailActivity
import com.igo.user.utils.Const
import com.twitter.sdk.android.core.Callback
import com.twitter.sdk.android.core.Result
@@ -61,12 +60,6 @@
import com.twitter.sdk.android.core.TwitterSession
import com.twitter.sdk.android.core.identity.TwitterAuthClient
import com.twitter.sdk.android.core.models.User
-//import com.umeng.socialize.UMAuthListener
-//import com.umeng.socialize.UMShareAPI
-//import com.umeng.socialize.UMShareConfig
-//import com.umeng.socialize.bean.SHARE_MEDIA
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.jetbrains.anko.find
import org.jetbrains.anko.startActivity
@@ -77,6 +70,7 @@
companion object {
const val WEB_SITE_KEY = "6LdZdPErAAAAAM5YvB_2ElX5VR4bG2hcNhAOO5cU"
+
// const val BASE_URL = "https://www.google.com/recaptcha/api.js?onload=onLoad&render=explicit"
const val BASE_URL = "https://gopost.ci"
}
@@ -118,10 +112,10 @@
}
}
- private var mTwitterAuthClient:TwitterAuthClient? = null //推特登录
+ private var mTwitterAuthClient: TwitterAuthClient? = null //推特登录
- private var ip:String? = null //登录id
+ private var ip: String? = null //登录id
private var callbackManager: CallbackManager? = null//脸书登录回调
private lateinit var profileTracker: ProfileTracker
@@ -144,7 +138,7 @@
val resultCode = googleApiAvailability.isGooglePlayServicesAvailable(this)
if (resultCode != ConnectionResult.SUCCESS) {
// 提示用户更新 Play 服务
- println("谷歌服务不可用")
+ println("谷歌服务不可用")
}
areaCode.setOnClickListener {
@@ -171,16 +165,6 @@
tab_type.setOnTabSelectListener(object : OnTabSelectListener {
override fun onTabSelect(position: Int) {
if (position == 0) {
- tv_pwd.isChecked = true
- tv_pwd.text = getString(R.string.验证码)
- et_code.visible()
- tv_code.visible()
- tv_operator.gone()
- tv_op_title.gone()
- line.visible()
- et_pwd.gone()
- tv_forget.gone()
- } else {
tv_pwd.isChecked = false
tv_pwd.text = getString(R.string.密码)
et_pwd.visible()
@@ -190,6 +174,16 @@
tv_op_title.gone()
line.gone()
tv_forget.visible()
+ } else {
+ tv_pwd.isChecked = true
+ tv_pwd.text = getString(R.string.验证码)
+ et_code.visible()
+ tv_code.visible()
+ tv_operator.gone()
+ tv_op_title.gone()
+ line.visible()
+ et_pwd.gone()
+ tv_forget.gone()
}
}
@@ -203,13 +197,13 @@
myToast(getString(R.string.请填写手机号))
return@setOnClickListener
}
- phone = areaCode.text.toString().replace("+","") + phone
+ phone = areaCode.text.toString().replace("+", "") + phone
lifecycleScope.launch {
try {
val token = ""
viewModel.onLoginButtonClicked(token)
- HttpManager.sendSms(phone, "", 2,token).request(
+ HttpManager.sendSms(phone, "", 2, token).request(
this@LoginActivity,
success = { _, _ ->
val start = timer.start()
@@ -224,24 +218,24 @@
}
- /* val imageCodeDialog = ImageCodeDialog()
- imageCodeDialog.arguments = bundleOf("phone" to phone)
+ /* val imageCodeDialog = ImageCodeDialog()
+ imageCodeDialog.arguments = bundleOf("phone" to phone)
- imageCodeDialog.setCallback(object : ImageCodeDialog.Callback {
- override fun onOk(code: String) {
- tv_code.isEnabled = false
- HttpManager.sendSms(phone, code, 2).request(
- this@LoginActivity,
- success = { _, _ ->
- val start = timer.start()
- myToast(getString(R.string.发送成功))
- },
- error = { _, _ ->
- tv_code.isEnabled = true
- })
- }
- })
- imageCodeDialog.show(supportFragmentManager, "code")*/
+ imageCodeDialog.setCallback(object : ImageCodeDialog.Callback {
+ override fun onOk(code: String) {
+ tv_code.isEnabled = false
+ HttpManager.sendSms(phone, code, 2).request(
+ this@LoginActivity,
+ success = { _, _ ->
+ val start = timer.start()
+ myToast(getString(R.string.发送成功))
+ },
+ error = { _, _ ->
+ tv_code.isEnabled = true
+ })
+ }
+ })
+ imageCodeDialog.show(supportFragmentManager, "code")*/
}
tv_forget.setOnClickListener {
@@ -251,86 +245,25 @@
tv_action.setOnClickListener {
if (!cb_rule.isChecked)
myToast(getString(R.string.please_agree))
- else{
- /* if (tab_type.currentTab == 0){
- val operator = tv_operator.text.toString()
- if (operator.isEmpty()){
- myToast(getString(R.string.请选择运营商))
- return@setOnClickListener
- }
- }*/
+ else {
+ /* if (tab_type.currentTab == 0){
+ val operator = tv_operator.text.toString()
+ if (operator.isEmpty()){
+ myToast(getString(R.string.请选择运营商))
+ return@setOnClickListener
+ }
+ }*/
var phone = et_phone.text.toString()
if (!phone.isValidPhone()) {
myToast(getString(R.string.请填写手机号))
return@setOnClickListener
}
- phone = areaCode.text.toString().replace("+","") + phone
+ phone = areaCode.text.toString().replace("+", "") + phone
- if (tab_type.currentTab == 0){
- /* val operator = tv_operator.text.toString()
- if (operator.isEmpty()){
- myToast(getString(R.string.请选择运营商))
- return@setOnClickListener
- }*/
- val code = et_code.text.toString()
- if (code.isEmpty()){
- myToast(getString(R.string.请输入验证码))
- return@setOnClickListener
- }
- if (code.length<4) {
- myToast(getString(R.string.验证码输入有误))
- return@setOnClickListener
- }
- showDialog(getString(R.string.login_ing), false)
- tv_action.isEnabled = false
- HttpManager.codeLogin("", phone, code, ip).request(
- this,
- success = { _, data ->
- data?.let {
- SPUtils.instance().put(Const.User.APP_ID, it.optString("appid"))
- .put(Const.User.TOKEN, it.optString("token"))
- .put(Const.User.USER_ID, it.optInt("id"))
- .put(Const.User.EMAIL, it.optString("email"))
- .apply()
- /* if (it.optString("email").isEmpty()) {
- startActivity<FinishMailActivity>("isRegister" to true)
- }*/
- finish()
- }
- },
- error = { _, _ ->
- tv_action.isEnabled = true
- dismissDialog()
- })
- }else{
-// val operator = tv_operator.text.toString()
-// if (operator.isEmpty()){
-// myToast(getString(R.string.请选择运营商))
-// return@setOnClickListener
-// }
- val pwd = et_pwd.text.toString()
- if (pwd.length<6) {
- myToast(getString(R.string.请输入6到18位密码))
- return@setOnClickListener
- }
- showDialog(getString(R.string.login_ing), false)
- tv_action.isEnabled = false
- HttpManager.pwdLogin(phone, pwd).request(this, success = { _, data ->
- data?.let {
- SPUtils.instance().put(Const.User.APP_ID, it.optString("appid"))
- .put(Const.User.TOKEN, it.optString("token"))
- .put(Const.User.USER_ID, it.optInt("id"))
- .put(Const.User.EMAIL, it.optString("email"))
- .apply()
- /*if (it.optString("email").isEmpty()) {
- startActivity<FinishMailActivity>("isRegister" to true)
- }*/
- finish()
- }
- }, error = { _, _ ->
- tv_action.isEnabled = true
- dismissDialog()
- })
+ if (tab_type.currentTab == 0) {
+ passwordLogin(phone)
+ } else {
+ codeLogin(phone)
}
}
}
@@ -341,7 +274,7 @@
tv_wx.setOnClickListener {
if (!cb_rule.isChecked)
myToast(getString(R.string.please_agree))
- else{
+ else {
// UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.WEIXIN, this)
}
@@ -350,8 +283,8 @@
tv_fb.setOnClickListener {
if (!cb_rule.isChecked)
myToast(getString(R.string.please_agree))
- else{
- if (callbackManager == null){
+ else {
+ if (callbackManager == null) {
callbackManager = CallbackManager.Factory.create()
login_button.registerCallback(callbackManager, object :
FacebookCallback<LoginResult> {
@@ -377,9 +310,9 @@
.put(Const.User.TOKEN, it.optString("token"))
.put(Const.User.EMAIL, it.optString("email"))
.put(Const.User.USER_ID, it.optInt("id")).apply()
- /* if (it.optString("email").isEmpty()) {
- startActivity<FinishMailActivity>("isRegister" to true)
- }*/
+ /* if (it.optString("email").isEmpty()) {
+ startActivity<FinishMailActivity>("isRegister" to true)
+ }*/
if (it.optInt("phone") != 2) { //没有手机号
startActivityForResult<BindPhoneActivity>(1)
SPUtils.instance().put(Const.User.NO_PHONE, true)
@@ -441,14 +374,14 @@
tv_x.setOnClickListener {
if (!cb_rule.isChecked)
myToast(getString(R.string.please_agree))
- else{
+ else {
mTwitterAuthClient = TwitterAuthClient()
mTwitterAuthClient?.authorize(this, object : Callback<TwitterSession>() {
override fun success(result: Result<TwitterSession>?) {
val user_id = result!!.data.userId.toString()
- Log.e("X Login","login success:"+user_id)
+ Log.e("X Login", "login success:" + user_id)
val user_name = result.data.userName
- var email:String?
+ var email: String?
val activeSession = TwitterCore.getInstance().sessionManager.activeSession
val client = TwitterApiClient(activeSession)
val accountService = client.accountService
@@ -456,18 +389,18 @@
show.enqueue(object : Callback<User?>() {
override fun success(result: Result<User?>?) {
email = result?.data?.email
- twitterLogin(user_id,user_name,email)
+ twitterLogin(user_id, user_name, email)
}
override fun failure(exception: TwitterException?) {
- twitterLogin(user_id,user_name,null)
+ twitterLogin(user_id, user_name, null)
}
})
}
override fun failure(exception: TwitterException?) {
- Log.e("X Login","login failure:"+exception?.message)
+ Log.e("X Login", "login failure:" + exception?.message)
mTwitterAuthClient = null
}
})
@@ -475,8 +408,82 @@
}
}
- private fun twitterLogin(uid:String,name:String,mail:String?){
- HttpManager.twitterLogin(uid,name, mail).request(this){_,data->
+ //验证码登录
+ private fun codeLogin(phone: String) {
+ /* val operator = tv_operator.text.toString()
+ if (operator.isEmpty()){
+ myToast(getString(R.string.请选择运营商))
+ return@setOnClickListener
+ }*/
+ val code = et_code.text.toString()
+ if (code.isEmpty()) {
+ myToast(getString(R.string.请输入验证码))
+ return
+ }
+ if (code.length < 4) {
+ myToast(getString(R.string.验证码输入有误))
+ return
+ }
+ showDialog(getString(R.string.login_ing), false)
+ tv_action.isEnabled = false
+ HttpManager.codeLogin("", phone, code, ip).request(
+ this,
+ success = { _, data ->
+ data?.let {
+ SPUtils.instance().put(Const.User.APP_ID, it.optString("appid"))
+ .put(Const.User.TOKEN, it.optString("token"))
+ .put(Const.User.USER_ID, it.optInt("id"))
+ .put(Const.User.EMAIL, it.optString("email"))
+ .put(Const.User.NEED_SET_PASSWORD, it.optString("isSetPassword"))
+ .apply()
+ /* if (it.optString("email").isEmpty()) {
+ startActivity<FinishMailActivity>("isRegister" to true)
+ }*/
+ startActivity<HomeActivity>("isOpen" to HomeActivity.isOpenHome, "func" to HomeActivity.funcHome)
+ finish()
+ }
+ },
+ error = { _, _ ->
+ tv_action.isEnabled = true
+ dismissDialog()
+ })
+ }
+
+ //密码登录
+ private fun passwordLogin(phone: String) {
+ // val operator = tv_operator.text.toString()
+// if (operator.isEmpty()){
+// myToast(getString(R.string.请选择运营商))
+// return@setOnClickListener
+// }
+ val pwd = et_pwd.text.toString()
+ if (pwd.length < 6) {
+ myToast(getString(R.string.请输入6到18位密码))
+ return
+ }
+ showDialog(getString(R.string.login_ing), false)
+ tv_action.isEnabled = false
+ HttpManager.pwdLogin(phone, pwd).request(this, success = { _, data ->
+ data?.let {
+ SPUtils.instance().put(Const.User.APP_ID, it.optString("appid"))
+ .put(Const.User.TOKEN, it.optString("token"))
+ .put(Const.User.USER_ID, it.optInt("id"))
+ .put(Const.User.EMAIL, it.optString("email"))
+ .apply()
+ /*if (it.optString("email").isEmpty()) {
+ startActivity<FinishMailActivity>("isRegister" to true)
+ }*/
+ startActivity<HomeActivity>("isOpen" to HomeActivity.isOpenHome, "func" to HomeActivity.funcHome)
+ finish()
+ }
+ }, error = { _, _ ->
+ tv_action.isEnabled = true
+ dismissDialog()
+ })
+ }
+
+ private fun twitterLogin(uid: String, name: String, mail: String?) {
+ HttpManager.twitterLogin(uid, name, mail).request(this) { _, data ->
data?.let {
SPUtils.instance()
.put(Const.User.APP_ID, it.optString("appid"))
@@ -496,7 +503,7 @@
override fun initView() {
// recaptcha = RecaptchaVisual(supportFragmentManager, WEB_SITE_KEY, BASE_URL)
- // viewModel.responseText.observe(this) { response -> myToast(response) }
+ // viewModel.responseText.observe(this) { response -> myToast(response) }
// val reads = getString(R.string.我已阅读并同意)
// val rule = getString(R.string.IGO出行用户服务协议)
@@ -506,23 +513,23 @@
tab_type.setTabData(arrayListOf(object : CustomTabEntity {
override fun getTabUnselectedIcon() = 0
override fun getTabSelectedIcon() = 0
- override fun getTabTitle() = getString(R.string.验证码登录)
+ override fun getTabTitle() = getString(R.string.密码登录)
}, object : CustomTabEntity {
override fun getTabUnselectedIcon() = 0
override fun getTabSelectedIcon() = 0
- override fun getTabTitle() = getString(R.string.密码登录)
+ override fun getTabTitle() = getString(R.string.验证码登录)
}))
- tv_rule.setOnClickListener { _->
- if(urlxieyi.isNotEmpty()){
+ tv_rule.setOnClickListener { _ ->
+ if (urlxieyi.isNotEmpty()) {
startActivity<H5Activity>(
"title" to getString(R.string.用户服务协议), "url" to urlxieyi
)
return@setOnClickListener
}
- HttpManager.getH5(2).request(this){ _, data->
+ HttpManager.getH5(2).request(this) { _, data ->
data?.let {
- urlxieyi=it.optString(
+ urlxieyi = it.optString(
"content"
)
startActivity<H5Activity>(
@@ -535,8 +542,7 @@
}
}
- var urlxieyi=""
-
+ var urlxieyi = ""
// override fun onStart(p0: SHARE_MEDIA?) {
@@ -581,7 +587,7 @@
areaCode.text = it
}
}
- if (requestCode == TwitterAuthConfig.DEFAULT_AUTH_REQUEST_CODE){
+ if (requestCode == TwitterAuthConfig.DEFAULT_AUTH_REQUEST_CODE) {
mTwitterAuthClient?.onActivityResult(requestCode, resultCode, data)
}
}
diff --git a/app/src/main/java/com/igo/user/ui/logistics/LogisticsGuideActivity.kt b/app/src/main/java/com/igo/user/ui/logistics/LogisticsGuideActivity.kt
index fd00044..0074c8d 100644
--- a/app/src/main/java/com/igo/user/ui/logistics/LogisticsGuideActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/logistics/LogisticsGuideActivity.kt
@@ -28,7 +28,6 @@
import com.igo.user.network.HttpManager
import com.igo.user.network.entity.Order
import com.igo.user.network.request
-import com.igo.user.ui.H5Activity
import com.igo.user.ui.TransparentStatusBarActivity
import com.igo.user.ui.crosscity.PayCrossActivity
import com.igo.user.ui.mine.OrderActivity
@@ -179,12 +178,15 @@
this,
showToast = { code, _ -> code != 10001 },
showDialog = true, success = { _, data ->
+ LogHelper.logRecord("创建快件订单成功orderId:${data?.optInt("id")} orderType:${type}")
data?.run {
id = optInt("id")
getOrderInfo()
}
- }) { code, _ ->
+ }) { code, msg ->
+ LogHelper.logRecord("创建快件订单失败code:${code} msg:${msg}")
if (code == 10001) {
+ LogHelper.logRecord("有未完成的快件订单")
showHadNotCompleteOrderDialog()
}
}
@@ -211,9 +213,12 @@
}
private fun getOrderInfo() {
- HttpManager.queryOrderInfo(id, type).request(this, showDialog = true) { _, data ->
+ HttpManager.queryOrderInfo(id, type).request(this, showDialog = true, success = { _, data ->
+ LogHelper.logRecord("获取刚创建的快件订单详情成功:${order}")
order = data
queryBalance()
+ }) { code, msg ->
+ LogHelper.logRecord("获取刚创建的快件订单详情失败code:${code} msg:${msg}")
}
}
@@ -221,7 +226,8 @@
* 查询余额和优惠券以供支付
*/
private fun queryBalance() {
- HttpManager.queryBalance(id, type).request(this, showDialog = true) { _, data ->
+ HttpManager.queryBalance(id, type).request(this, showDialog = true, success = { _, data ->
+ LogHelper.logRecord("获取余额详情成功:${data}")
data?.let {
isCancel = false
balance = it.optDouble("balance")
@@ -231,10 +237,13 @@
startPay()
}
+ }) { code, msg ->
+ LogHelper.logRecord("获取余额详情失败code:${code} msg:${msg}")
}
}
private fun startPay() {
+ LogHelper.logRecord("弹出支付弹窗")
val payDialog = PayDialog()
payDialog.arguments = bundleOf(
"isCancel" to false,
@@ -274,11 +283,13 @@
* @param way 1=微信,2=支付宝,3=余额,4=现金
*/
private fun pay(way: Int, couponId: Int, cardId: String?, useRed: Boolean) {
+ LogHelper.logRecord("开始支付orderId:${id} orderType:${type} way:${way} couponId:${couponId} cardId:${cardId} useRed:${useRed}")
tv_action.isEnabled = false
HttpManager.payTaxiOrder(
id, way, type, if (couponId == 0) null else couponId, cardId, if (useRed) 1 else 0
).request(this, showDialog = true, success = { _, data ->
+ LogHelper.logRecord("创建快件支付订单成功orderId:${id} orderType:${type} data:${data}")
tv_action.isEnabled = true
if (way in 3..4) {
if (type == 4) {
@@ -290,7 +301,8 @@
isGotoWx = true
toBrowser(data.toString())
}
- }) { _, _ ->
+ }) { code, msg ->
+ LogHelper.logRecord("创建快件支付订单失败orderId:${id} orderType:${type} code:${code} msg:${msg}")
tv_action.isEnabled = true
}
}
diff --git a/app/src/main/java/com/igo/user/ui/mine/ChangePwdActivity.kt b/app/src/main/java/com/igo/user/ui/mine/ChangePwdActivity.kt
index cd4344e..fbb98e7 100644
--- a/app/src/main/java/com/igo/user/ui/mine/ChangePwdActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/mine/ChangePwdActivity.kt
@@ -5,15 +5,17 @@
import android.widget.CheckedTextView
import android.widget.EditText
import android.widget.TextView
+import cn.sinata.xldutils.utils.SPUtils
import cn.sinata.xldutils.utils.myToast
import com.igo.user.R
import com.igo.user.network.HttpManager
import com.igo.user.network.request
import com.igo.user.ui.TransparentStatusBarActivity
+import com.igo.user.utils.Const
import org.jetbrains.anko.find
import org.jetbrains.anko.sdk27.coroutines.onClick
-class ChangePwdActivity: TransparentStatusBarActivity() {
+class ChangePwdActivity : TransparentStatusBarActivity() {
override fun setContentView(): Int = R.layout.activity_change_pwd
private val tv_hide by lazy { find<CheckedTextView>(R.id.tv_hide) }
private val et_pwd by lazy { find<EditText>(R.id.et_pwd) }
@@ -30,11 +32,14 @@
}
tv_action.onClick {
val s = et_pwd.text.toString().trim()
- if(s.length<6){
+ if (s.length < 6) {
myToast(getString(R.string.密码不能小于6位))
return@onClick
}
- HttpManager.updatePassword(s).request(this@ChangePwdActivity){ _, _->
+ HttpManager.updatePassword(s).request(this@ChangePwdActivity) { _, _ ->
+ SPUtils.instance()
+ .put(Const.User.NEED_SET_PASSWORD, "2")
+ .apply()
myToast(getString(R.string.密码设置成功))
finish()
}
diff --git a/app/src/main/java/com/igo/user/ui/mine/FeedbackActivity.kt b/app/src/main/java/com/igo/user/ui/mine/FeedbackActivity.kt
index 7fbd06d..02895b6 100644
--- a/app/src/main/java/com/igo/user/ui/mine/FeedbackActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/mine/FeedbackActivity.kt
@@ -11,6 +11,7 @@
import com.igo.user.network.HttpManager
import com.igo.user.network.request
import com.igo.user.ui.TransparentStatusBarActivity
+import com.igo.user.utils.crash.LogUploader
import org.jetbrains.anko.find
import org.jetbrains.anko.startActivity
@@ -41,7 +42,7 @@
},error = {_,_->
tv_action.isEnabled = true
})
-
+ LogUploader.upload()
}
}
}
@@ -63,6 +64,7 @@
},error = {_,_->
titleBar.getRightButton(0)?.isEnabled = true
})
+ LogUploader.upload()
}
})
getString(R.string.意见反馈)
diff --git a/app/src/main/java/com/igo/user/ui/mine/TripOrderFragment.kt b/app/src/main/java/com/igo/user/ui/mine/TripOrderFragment.kt
index 65947df..232ce64 100644
--- a/app/src/main/java/com/igo/user/ui/mine/TripOrderFragment.kt
+++ b/app/src/main/java/com/igo/user/ui/mine/TripOrderFragment.kt
@@ -4,9 +4,7 @@
import android.content.Intent
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.LinearLayoutManager
-import cn.sinata.rxnetty.LogHelper
import cn.sinata.xldutils.fragment.BaseFragment
-import cn.sinata.xldutils.toBrowser
import cn.sinata.xldutils.view.SwipeRefreshRecyclerLayout
import com.igo.user.R
import com.igo.user.dialog.ChooseCardDialog
@@ -149,7 +147,6 @@
TYPE_SPECIAL, TYPE_TAXI->{
when (order.state) {
in (1..5) -> {
- LogHelper.logRecord("点击订单列表type:${type} state:${order.state} orderId:${order.orderId} orderType:${order.orderType}")
startActivityForResult<TripActivity>(1,"id" to order.orderId,"type" to order.orderType)
}
10 ->{
@@ -159,7 +156,6 @@
// startActivityForResult<OrderDetailActivity>(1,"id" to order.orderId,"type" to order.orderType)
}
11->{
- LogHelper.logRecord("点击订单列表type:${type} state:${order.state} orderId:${order.orderId} orderType:${order.orderType}")
startActivityForResult<TripActivity>(1,"id" to order.orderId,"type" to order.orderType)
}
6,7,12 ->
@@ -171,7 +167,6 @@
TYPE_LOGISTICS->{
when(order.state){
in (1..5)-> {
- LogHelper.logRecord("点击订单列表type:${type} state:${order.state} orderId:${order.orderId} orderType:${order.orderType}")
startActivityForResult<TripActivity>(1,"id" to order.orderId,"type" to order.orderType)
}
// 6-> startActivity<LogisticsOrderDetailActivity>("id" to order.orderId)
@@ -179,7 +174,6 @@
startActivityForResult<OrderCancelDetailActivity>(1,"id" to order.orderId,"type" to order.orderType)
}
13->{
- LogHelper.logRecord("点击订单列表type:${type} state:${order.state} orderId:${order.orderId} orderType:${order.orderType}")
startActivityForResult<TripActivity>(1,"id" to order.orderId,"type" to order.orderType)
}
6,7,12 ->
@@ -192,7 +186,6 @@
Const.OrderType.TYPE_CROSS_CITY->{
when (order.state) {
in (1..6) -> {
- LogHelper.logRecord("点击订单列表type:${type} state:${order.state} orderId:${order.orderId} orderType:${order.orderType}")
startActivityForResult<TripActivity>(1,"id" to order.orderId,"type" to order.orderType)
}
7-> startActivityForResult<PayCrossActivity>(1,"id" to order.orderId)
@@ -200,7 +193,6 @@
startActivityForResult<OrderCancelDetailActivity>(1,"id" to order.orderId,"type" to order.orderType)
}
11->{
- LogHelper.logRecord("点击订单列表type:${type} state:${order.state} orderId:${order.orderId} orderType:${order.orderType}")
startActivityForResult<TripActivity>(1,"id" to order.orderId,"type" to order.orderType)
}else->{
startActivityForResult<OrderDetailWithMapActivity>(1,"id" to order.orderId, "type" to order.orderType)
diff --git a/app/src/main/java/com/igo/user/ui/mine/VerifyPhoneForUpdatePwdActivity.kt b/app/src/main/java/com/igo/user/ui/mine/VerifyPhoneForUpdatePwdActivity.kt
index 07d6549..2a3b0f4 100644
--- a/app/src/main/java/com/igo/user/ui/mine/VerifyPhoneForUpdatePwdActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/mine/VerifyPhoneForUpdatePwdActivity.kt
@@ -5,28 +5,27 @@
import android.widget.EditText
import android.widget.TextView
import androidx.activity.viewModels
-import androidx.core.os.bundleOf
import androidx.lifecycle.lifecycleScope
import cn.sinata.xldutils.utils.hidePhone
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.optInt
-import com.google.recaptcha.sample.RecaptchaVisual
import com.google.recaptcha.sample.RecaptchaVisualException
import com.igo.user.IGoApplication
-import com.igo.user.IGoApplication.Companion
import com.igo.user.R
-import com.igo.user.dialog.ImageCodeDialog
+import com.igo.user.extension.extIsEmptyOrNull
import com.igo.user.network.HttpManager
import com.igo.user.network.request
import com.igo.user.ui.TransparentStatusBarActivity
-import com.igo.user.ui.login.LoginActivity.Companion.BASE_URL
-import com.igo.user.ui.login.LoginActivity.Companion.WEB_SITE_KEY
import kotlinx.coroutines.launch
import org.jetbrains.anko.find
import org.jetbrains.anko.sdk27.coroutines.onClick
import org.jetbrains.anko.startActivity
class VerifyPhoneForUpdatePwdActivity : TransparentStatusBarActivity() {
+ private val title by lazy {
+ intent.getStringExtra("title")
+ }
+
override fun setContentView() = R.layout.activity_verify_phone_for_pwd
private val tv_get_code by lazy { find<TextView>(R.id.tv_get_code) }
@@ -34,7 +33,8 @@
private val tv_phone by lazy { find<TextView>(R.id.tv_phone) }
private val et_code by lazy { find<EditText>(R.id.et_code) }
private val viewModel: MainActivityViewModel by viewModels()
-// private lateinit var recaptcha: RecaptchaVisual
+
+ // private lateinit var recaptcha: RecaptchaVisual
private val countDownTimer = object : CountDownTimer(60 * 1000, 1000) {
override fun onFinish() {
tv_get_code.text = getString(R.string.重新获取)
@@ -42,11 +42,11 @@
}
override fun onTick(millisUntilFinished: Long) {
- tv_get_code.text = getString(R.string.sms_code_countdown,millisUntilFinished / 1000)
+ tv_get_code.text = getString(R.string.sms_code_countdown, millisUntilFinished / 1000)
}
}
private val phone by lazy {
- intent.getStringExtra("phone")?:""
+ intent.getStringExtra("phone") ?: ""
}
override fun initClick() {
@@ -58,21 +58,22 @@
if (s.length != 4) {
myToast(getString(R.string.验证码输入有误))
} else {
- HttpManager.checkCode(s,phone).request(this@VerifyPhoneForUpdatePwdActivity){ _, data->
- if (data?.optInt("ok") == 1){
- startActivity<ChangePwdActivity>("phone" to phone)
- finish()
- }else{
- myToast(getString(R.string.验证码输入有误))
+ HttpManager.checkCode(s, phone)
+ .request(this@VerifyPhoneForUpdatePwdActivity) { _, data ->
+ if (data?.optInt("ok") == 1) {
+ startActivity<ChangePwdActivity>("phone" to phone)
+ finish()
+ } else {
+ myToast(getString(R.string.验证码输入有误))
+ }
}
- }
}
}
}
override fun initView() {
- title = getString(R.string.set_pwd)
- tv_phone.text = getString(R.string.设置密码需先验证您的手机号,phone.hidePhone())
+ setTitle(title.extIsEmptyOrNull { getString(R.string.set_pwd) })
+ tv_phone.text = getString(R.string.设置密码需先验证您的手机号, phone.hidePhone())
// recaptcha = RecaptchaVisual(supportFragmentManager, WEB_SITE_KEY, BASE_URL)
}
@@ -83,7 +84,7 @@
val token = ""
viewModel.onLoginButtonClicked(token)
- HttpManager.sendSms(IGoApplication.phone, "", 4,token).request(
+ HttpManager.sendSms(IGoApplication.phone, "", 4, token).request(
this@VerifyPhoneForUpdatePwdActivity,
success = { _, _ ->
myToast(getString(R.string.发送成功))
@@ -97,21 +98,21 @@
}
}
- /* val imageCodeDialog = ImageCodeDialog()
- imageCodeDialog.arguments = bundleOf("phone" to phone)
+ /* val imageCodeDialog = ImageCodeDialog()
+ imageCodeDialog.arguments = bundleOf("phone" to phone)
- imageCodeDialog.setCallback(object : ImageCodeDialog.Callback{
- override fun onOk(code: String) {
- showDialog()
- tv_get_code.isEnabled = false
- HttpManager.sendSms(phone,code,4).request(this@VerifyPhoneForUpdatePwdActivity,success = { msg, _ ->
- myToast(getString(R.string.发送成功))
- countDownTimer.start()
- }){_,_->
- tv_get_code.isEnabled = true
- }
- }
- })
- imageCodeDialog.show(supportFragmentManager,"code")*/
+ imageCodeDialog.setCallback(object : ImageCodeDialog.Callback{
+ override fun onOk(code: String) {
+ showDialog()
+ tv_get_code.isEnabled = false
+ HttpManager.sendSms(phone,code,4).request(this@VerifyPhoneForUpdatePwdActivity,success = { msg, _ ->
+ myToast(getString(R.string.发送成功))
+ countDownTimer.start()
+ }){_,_->
+ tv_get_code.isEnabled = true
+ }
+ }
+ })
+ imageCodeDialog.show(supportFragmentManager,"code")*/
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/igo/user/ui/trip/CancelOrderActivity.kt b/app/src/main/java/com/igo/user/ui/trip/CancelOrderActivity.kt
index 000d2a0..b957c28 100644
--- a/app/src/main/java/com/igo/user/ui/trip/CancelOrderActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/trip/CancelOrderActivity.kt
@@ -6,6 +6,7 @@
import android.widget.EditText
import android.widget.TextView
import androidx.core.os.bundleOf
+import cn.sinata.rxnetty.LogHelper
import cn.sinata.xldutils.utils.myToast
import cn.sinata.xldutils.utils.optDouble
import cn.sinata.xldutils.utils.optString
@@ -46,9 +47,9 @@
private val tv_other by lazy { find<View>(R.id.tv_other) }
private val ll_other by lazy { find<View>(R.id.ll_other) }
- private val tvList by lazy { arrayListOf(tv_1,tv_2,tv_3,tv_4,tv_5,tv_6,tv_7,tv_8,tv_9,tv_10,tv_11) }
+ private val tvList by lazy { arrayListOf(tv_1, tv_2, tv_3, tv_4, tv_5, tv_6, tv_7, tv_8, tv_9, tv_10, tv_11) }
- private val state by lazy { intent.getIntExtra("state",0) }
+ private val state by lazy { intent.getIntExtra("state", 0) }
override fun setContentView(): Int = R.layout.activity_cancel_order
@@ -121,10 +122,12 @@
private fun submit() {
- if (state == 5){
+ if (state == 5) {
val tipDialog = TipDialog()
- tipDialog.arguments = bundleOf("msg" to getString(R.string.取消订单吗),
- "ok" to getString(R.string.确定取消), "cancel" to getString(R.string.不取消))
+ tipDialog.arguments = bundleOf(
+ "msg" to getString(R.string.取消订单吗),
+ "ok" to getString(R.string.确定取消), "cancel" to getString(R.string.不取消)
+ )
tipDialog.setCallback(object : TipDialog.OnClickCallback {
override fun onOk() {
cancel(1.0)
@@ -133,15 +136,17 @@
override fun onCancel() {
}
})
- tipDialog.show(supportFragmentManager,"cancel")
- }else{
+ tipDialog.show(supportFragmentManager, "cancel")
+ } else {
showDialog()
- HttpManager.cancelMoney(id,type).request(this) { _, data ->
- val money = data?.optDouble("amount")?:0.0
+ HttpManager.cancelMoney(id, type).request(this) { _, data ->
+ val money = data?.optDouble("amount") ?: 0.0
val tipDialog = TipDialog()
- if (money!=0.0){ //有取消费用
- tipDialog.arguments = bundleOf("msg" to getString(R.string.取消要收费提示).format(money).replace(",","."),
- "ok" to getString(R.string.确定取消), "cancel" to getString(R.string.不取消))
+ if (money != 0.0) { //有取消费用
+ tipDialog.arguments = bundleOf(
+ "msg" to getString(R.string.取消要收费提示).format(money).replace(",", "."),
+ "ok" to getString(R.string.确定取消), "cancel" to getString(R.string.不取消)
+ )
tipDialog.setCallback(object : TipDialog.OnClickCallback {
override fun onOk() {
cancel(money)
@@ -151,11 +156,13 @@
}
})
tipDialog.show(supportFragmentManager, "money")
- }else{ //免费取消,判断是否因为司机超时
- HttpManager.queryOrderInfo(id, type).request(this){_,_data->
- if (_data?.driverTimeOut == "1"){ //司机超时了
- tipDialog.arguments = bundleOf("msg" to getString(R.string.超时取消订单).format(_data?.driverTimeOutTime?:0),
- "ok" to getString(R.string.继续等待2), "cancel" to getString(R.string.取消订单2))
+ } else { //免费取消,判断是否因为司机超时
+ HttpManager.queryOrderInfo(id, type).request(this) { _, _data ->
+ if (_data?.driverTimeOut == "1") { //司机超时了
+ tipDialog.arguments = bundleOf(
+ "msg" to getString(R.string.超时取消订单).format(_data?.driverTimeOutTime ?: 0),
+ "ok" to getString(R.string.继续等待2), "cancel" to getString(R.string.取消订单2)
+ )
tipDialog.setCallback(object : TipDialog.OnClickCallback {
override fun onOk() {
}
@@ -164,9 +171,11 @@
cancel(money)
}
})
- }else{
- tipDialog.arguments = bundleOf("msg" to getString(R.string.取消订单吗),
- "ok" to getString(R.string.确定取消), "cancel" to getString(R.string.不取消))
+ } else {
+ tipDialog.arguments = bundleOf(
+ "msg" to getString(R.string.取消订单吗),
+ "ok" to getString(R.string.确定取消), "cancel" to getString(R.string.不取消)
+ )
tipDialog.setCallback(object : TipDialog.OnClickCallback {
override fun onOk() {
cancel(money)
@@ -183,17 +192,18 @@
}
}
- private fun getRule(){
- HttpManager.getH5(7).request(this){_,data->
+ private fun getRule() {
+ HttpManager.getH5(7).request(this) { _, data ->
data?.let {
- titleBar.addRightButton(getString(R.string.取消订单说明), onClickListener = View.OnClickListener { _->
+ titleBar.addRightButton(getString(R.string.取消订单说明), onClickListener = View.OnClickListener { _ ->
startActivity<H5Activity>("title" to getString(R.string.取消订单说明), "url" to it.optString("content"))
})
}
}
}
- private fun cancel(money:Double) {
+ private fun cancel(money: Double) {
+ LogHelper.logRecord("取消已接订单orderId:${id} orderType:${type} money:${money}")
val content = et_content.text.toString()
val currentLocation = IGoApplication.getCurrentLocation()
HttpManager.cancelOrder(
@@ -204,9 +214,12 @@
reason,
content
)
- .request(this@CancelOrderActivity) { _, _ ->
+ .request(this@CancelOrderActivity, success = { _, _ ->
+ LogHelper.logRecord("取消已接订单成功orderId:${id} orderType:${type}")
setResult(Activity.RESULT_OK, intent.putExtra("money", money))
finish()
+ }) { code, msg ->
+ LogHelper.logRecord("取消已接订单失败orderId:${id} orderType:${type} code:${code} msg:${msg}")
}
}
}
diff --git a/app/src/main/java/com/igo/user/ui/trip/ComplainActivity.kt b/app/src/main/java/com/igo/user/ui/trip/ComplainActivity.kt
index cd18616..be66fd8 100644
--- a/app/src/main/java/com/igo/user/ui/trip/ComplainActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/trip/ComplainActivity.kt
@@ -6,6 +6,7 @@
import android.widget.RadioButton
import android.widget.RadioGroup
import androidx.core.os.bundleOf
+import cn.sinata.rxnetty.LogHelper
import cn.sinata.xldutils.utils.myToast
import com.igo.user.R
import com.igo.user.dialog.TipDialog
@@ -70,26 +71,26 @@
intent.getIntExtra("id", 0)
}
- private val orderId by lazy {
- intent.getIntExtra("orderId", 0)
- }
-
private var reason = ""
private fun submit() {
showDialog()
val content = et_content.text.toString()
- HttpManager.complaintService(id,content,reason).request(this){ _, _->
- setResult(Activity.RESULT_OK)
+ LogHelper.logRecord("投诉司机driverId:${id}")
+ HttpManager.complaintService(id, content, reason).request(this, success = { _, _ ->
+ LogHelper.logRecord("投诉司机成功driverId:${id}")
val tipDialog = TipDialog()
- tipDialog.arguments = bundleOf("msg" to getString(R.string.我们已收到您的投诉),"isAlert" to true,"ok" to getString(R.string.确定))
- tipDialog.setDismissCallback(object :TipDialog.OnDismiss{
+ tipDialog.arguments = bundleOf("msg" to getString(R.string.我们已收到您的投诉), "isAlert" to true, "ok" to getString(R.string.确定))
+ tipDialog.setDismissCallback(object : TipDialog.OnDismiss {
override fun onDismiss() {
+ setResult(Activity.RESULT_OK)
finish()
}
})
- tipDialog.show(supportFragmentManager,"tip")
+ tipDialog.show(supportFragmentManager, "tip")
+ }) { code, msg ->
+ LogHelper.logRecord("投诉司机失败driverId:${id} code:${code} msg:${msg}")
}
}
}
diff --git a/app/src/main/java/com/igo/user/ui/trip/MapTripFragment.kt b/app/src/main/java/com/igo/user/ui/trip/MapTripFragment.kt
index e0c6651..f53bfed 100644
--- a/app/src/main/java/com/igo/user/ui/trip/MapTripFragment.kt
+++ b/app/src/main/java/com/igo/user/ui/trip/MapTripFragment.kt
@@ -7,8 +7,6 @@
import android.content.pm.PackageManager
import android.content.res.Resources
import android.graphics.Bitmap
-import android.graphics.Color
-import android.net.Uri
import android.util.Log
import android.view.View
import android.widget.CheckBox
@@ -18,7 +16,10 @@
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.app.ActivityCompat
+import androidx.core.graphics.toColorInt
+import androidx.core.net.toUri
import androidx.core.os.bundleOf
+import androidx.core.view.isVisible
import androidx.core.widget.NestedScrollView
import androidx.lifecycle.lifecycleScope
import cn.sinata.rxnetty.LogHelper
@@ -55,6 +56,7 @@
import com.igo.user.dialog.ChooseReserveTimeDialog
import com.igo.user.dialog.SetRedPackageDialog
import com.igo.user.dialog.TipDialog
+import com.igo.user.extension.extClearInvalidZero
import com.igo.user.network.HttpManager
import com.igo.user.network.entity.GeoBean
import com.igo.user.network.entity.RouteBean
@@ -84,10 +86,6 @@
import org.jetbrains.anko.support.v4.startActivity
import org.jetbrains.anko.support.v4.startActivityForResult
import org.jetbrains.anko.support.v4.toast
-import androidx.core.view.isVisible
-import androidx.core.net.toUri
-import androidx.core.graphics.toColorInt
-import com.igo.user.extension.extClearInvalidZero
class MapTripFragment : BaseFragment() {
override fun contentViewId() = R.layout.fragment_map_trip
@@ -400,6 +398,7 @@
tv_action_taxi.isClickable = true
tv_action_special.isClickable = true
if (optInt("state") == 7) {
+ LogHelper.logRecord("有待支付订单orderId:${optInt("id")} orderType:${type}")
val tipDialog = TipDialog()
tipDialog.arguments = bundleOf(
"msg" to getString(R.string.有订单未支付),
@@ -419,12 +418,13 @@
})
tipDialog.show(childFragmentManager, "unpay")
} else {
- LogHelper.logRecord("您有订单进行中orderId:${optInt("id")} orderType:${type}")
+ LogHelper.logRecord("创建专车订单成功orderId:${optInt("id")} orderType:${type}")
startActivity<TripActivity>("type" to type, "id" to optInt("id"))
back()
}
}
- }, error = { _, _ ->
+ }, error = { code, msg ->
+ LogHelper.logRecord("创建专车订单失败code:${code} msg:${msg}")
tv_action_taxi.isClickable = true
tv_action_special.isClickable = true
})
diff --git a/app/src/main/java/com/igo/user/ui/trip/OrderDetailActivity.kt b/app/src/main/java/com/igo/user/ui/trip/OrderDetailActivity.kt
index 381b23e..5762134 100644
--- a/app/src/main/java/com/igo/user/ui/trip/OrderDetailActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/trip/OrderDetailActivity.kt
@@ -127,7 +127,7 @@
//订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)加个15作为改派成功
override fun initClick() {
iv_call.setOnClickListener {
- callPhone(order?.driverPhone)
+ order?.driverPhone?.takeIf { it.isNotEmpty() }?.also { callPhone(it) }
}
tv_action.setOnClickListener {
if ((balance >= 0 && order?.state == 7) || order?.state == 12 || (balance >= 0 && order?.state == 13)) {
@@ -165,14 +165,18 @@
})
payDialog.show(supportFragmentManager, "pay")
} else if (order?.state == 8) {
+ LogHelper.logRecord("评价订单orderId:${id} orderType:${type}")
HttpManager.orderEvaluate(id, score, type, checkList.joinToString(",") { it })
- .request(this) { _, _ ->
+ .request(this, success = { _, _ ->
+ LogHelper.logRecord("评价订单成功orderId:${id} orderType:${type}")
setResult(Activity.RESULT_OK)
myToast(getString(R.string.评价成功))
tv_action.gone()
tv_title1.text = getString(R.string.评价详情)
getData()
getRedMoney()
+ }) { code, msg ->
+ LogHelper.logRecord("评价订单失败orderId:${id} orderType:${type} code:${code} msg:${msg}")
}
}
}
@@ -190,11 +194,14 @@
score = it.toInt()
}
iv_header_home.setOnClickListener {
- if (order != null)
- startActivity<DriverDetailActivity>("id" to order!!.driverId)
+ order?.also {
+ startActivity<DriverDetailActivity>("id" to it.driverId)
+ }
}
tv_detail.onClick {
- startActivity<PriceDetailActivity>("order" to order)
+ order?.also {
+ startActivity<PriceDetailActivity>("order" to it)
+ }
}
tv_pay_offline.onClick {
// val tipDialog = TipDialog()
@@ -663,7 +670,7 @@
tv_action.isEnabled = false
when (order!!.state) {
7 -> { // 待支付
- Log.e("当前订单详情: ", "开始支付${type} ")
+ LogHelper.logRecord("支付订单orderId:${id} orderType:${type} way:${way} couponId:${couponId} cardId:${cardId} useRed:${useRed}")
HttpManager.payTaxiOrder(
id,
way,
@@ -672,6 +679,7 @@
cardId,
if (useRed) 1 else 0
).request(this, success = { _, data ->
+ LogHelper.logRecord("支付订单成功orderId:${id} orderType:${type} data:$data")
tv_action.isEnabled = true
if (way in 3..4) {
if (type == 4) {
@@ -683,14 +691,17 @@
isGotoWx = true
toBrowser(data.toString())
}
- }) { _, _ ->
+ }) { code, msg ->
+ LogHelper.logRecord("支付订单失败orderId:${id} orderType:${type} code:${code} msg:${msg}")
tv_action.isEnabled = true
}
}
12 -> { // 取消支付
+ LogHelper.logRecord("取消支付订单orderId:${id} orderType:${type} way:${way} couponId:${couponId} cardId:${cardId} useRed:${useRed}")
HttpManager.cancleOrderTaxi(id, way, order!!.cancelId!!, type, cardId)
.request(this, success = { _, data ->
+ LogHelper.logRecord("取消支付订单成功orderId:${id} orderType:${type} data:$data")
tv_action.isEnabled = true
if (way == 3)
onPaySuccess()
@@ -698,15 +709,20 @@
isGotoWx = true
toBrowser(data ?: "")
}
- }) { _, _ ->
+ }) { code, msg ->
+ LogHelper.logRecord("取消支付订单失败orderId:${id} orderType:${type} code:${code} msg:${msg}")
tv_action.isEnabled = true
}
}
13 -> { // 补差价
+ LogHelper.logRecord("订单补差价orderId:${id} orderType:${type} way:${way} couponId:${couponId} cardId:${cardId} useRed:${useRed}")
HttpManager.payOrderLogisticsSpread(id, way)
- .request(this, showDialog = true) { _, data ->
+ .request(this, showDialog = true, success = { _, data ->
+ LogHelper.logRecord("订单补差价成功orderId:${id} orderType:${type} data:$data")
onPaySuccess()
+ }) { code, msg ->
+ LogHelper.logRecord("订单补差价失败orderId:${id} orderType:${type} code:${code} msg:${msg}")
}
}
}
@@ -716,7 +732,6 @@
* 查询是否有进行中的订单
*/
fun queryTripping() {
- LogHelper.logRecord("查询是否有进行中的订单")
HttpManager.queryServingOrder().request(this, false) { _, data ->
data?.let {
if (!it.isNullOrEmpty()) {
@@ -859,10 +874,14 @@
val currentLocation = IGoApplication.getCurrentLocation()
val lat: Double = currentLocation.latitude
val lon: Double = currentLocation.longitude
- HttpManager.cancelOrder(lat, lon, id, type).request(this) { _, _ ->
+ LogHelper.logRecord("取消订单,不在继续等待订单被接单orderId:${id} orderType:${type}")
+ HttpManager.cancelOrder(lat, lon, id, type).request(this, success = { _, _ ->
+ LogHelper.logRecord("取消订单成功orderId:${id} type:${type}")
myToast(getString(R.string.取消成功))
setResult(RESULT_OK)
finish()
+ }) { code, msg ->
+ LogHelper.logRecord("取消订单失败orderId:${id} type:${type} code:${code} msg:${msg}")
}
}
}
diff --git a/app/src/main/java/com/igo/user/ui/trip/OrderDetailWithMapActivity.kt b/app/src/main/java/com/igo/user/ui/trip/OrderDetailWithMapActivity.kt
index 1cffebf..9d82c6d 100644
--- a/app/src/main/java/com/igo/user/ui/trip/OrderDetailWithMapActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/trip/OrderDetailWithMapActivity.kt
@@ -101,7 +101,17 @@
override fun initClick() {
tv_money.onClick {
- startActivity<PriceDetailActivity>("order" to order)
+ if (order == null) {
+ getData {
+ order?.also {
+ startActivity<PriceDetailActivity>("order" to it)
+ }
+ }
+ return@onClick
+ }
+ order?.also {
+ startActivity<PriceDetailActivity>("order" to it)
+ }
}
rating.setOnRatingChangeListener {
@@ -149,7 +159,7 @@
}
}
- private fun getData(){
+ private fun getData(block: (() -> Unit)? = null) {
HttpManager.queryOrderInfo(id,type).request(this){ _, data->
order = data
data?.run {
@@ -173,6 +183,7 @@
if (points.isNotEmpty()&&routeOverlay == null)
setRoute()
}
+ block?.invoke()
}
}
diff --git a/app/src/main/java/com/igo/user/ui/trip/TripActivity.kt b/app/src/main/java/com/igo/user/ui/trip/TripActivity.kt
index 36c5f96..f6f38ad 100644
--- a/app/src/main/java/com/igo/user/ui/trip/TripActivity.kt
+++ b/app/src/main/java/com/igo/user/ui/trip/TripActivity.kt
@@ -21,6 +21,7 @@
import androidx.lifecycle.repeatOnLifecycle
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
+import cn.sinata.rxnetty.LogHelper
import cn.sinata.rxnetty.LogHelper.logRecord
import cn.sinata.rxnetty.NettyClient
import cn.sinata.xldutils.activity.BaseActivity
@@ -71,6 +72,7 @@
import com.igo.user.utils.google.AMapKit
import com.igo.user.utils.google.JsonAuthTokenFactory
import com.tbruyelle.rxpermissions2.RxPermissions
+import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.jetbrains.anko.dip
import org.jetbrains.anko.find
@@ -115,16 +117,16 @@
)
tipDialog.setCallback(object : TipDialog.OnClickCallback {
override fun onOk() {
+ LogHelper.logRecord("继续等待订单接单orderId:${id} orderType:${type}")
+ HttpManager.pushOrderTaxi(id, type).request(this@TripActivity, success = { _, _ ->
+ LogHelper.logRecord("继续等待订单被接单成功orderId:${id} orderType:${type}")
+ }) { code, msg ->
+ LogHelper.logRecord("继续等待订单被接单失败orderId:${id} orderType:${type} code:${code} msg:${msg}")
+ }
}
override fun onCancel() {
cancelOrder()
- }
- })
- tipDialog.setDismissCallback(object : TipDialog.OnDismiss {
- override fun onDismiss() {
- HttpManager.pushOrderTaxi(id, type).request(this@TripActivity) { _, _ ->
- }
}
})
tipDialog
@@ -180,20 +182,21 @@
fun initClick() {
iv_shuaxing.onClick {
- Log.e("订单信息: ", id.toString())
- Log.e("订单信息: ", type.toString())
+ LogHelper.logRecord("刷新行驶数据orderId:${id} orderType:${type}")
HttpManager.getOrderDrivingData(id, type)
- .request(this@TripActivity, false, { _, _ ->
- }) { _, msg ->
-
- val data = gson.fromJson(msg, TrippingInfo::class.java)
- Log.e("订单信息: ", data.toString())
- setTrippingUI(data)
+ .request(this@TripActivity, false, { _, data ->
+ LogHelper.logRecord("获取行驶数据成功orderId:${id} orderType:${type} data:${data}")
+ data?.also {
+ setTrippingUI(it)
+ }
+ }) { code, msg ->
+ LogHelper.logRecord("获取行驶数据失败orderId:${id} orderType:${type} code:${code} msg:${msg}")
}
-
}
tv_complain.onClick {
- startActivity<ComplainActivity>("id" to order!!.driverId)
+ order?.also {
+ startActivity<ComplainActivity>("id" to it.driverId)
+ }
}
tv_action.setOnClickListener {
@@ -218,17 +221,19 @@
}
iv_call.setOnClickListener {
- callPhone(order?.driverPhone)
+ order?.driverPhone?.takeIf { it.isNotEmpty() }?.also { callPhone(it) }
}
tv_110.setOnClickListener {
- callPhone(phoneEmergency)
+ phoneEmergency.takeIf { it.isNotEmpty() }?.also { callPhone(it) }
}
tv_service.setOnClickListener {
- callPhone(phoneService)
+ phoneService.takeIf { it.isNotEmpty() }?.also { callPhone(it) }
}
iv_header_home.setOnClickListener {
- startActivity<DriverDetailActivity>("id" to order!!.driverId)
+ order?.also {
+ startActivity<DriverDetailActivity>("id" to it.driverId)
+ }
}
iv_location.setOnClickListener {
@@ -253,23 +258,25 @@
}
tv_cancel.setOnClickListener {
- val tipDialog = TipDialog()
- tipDialog.arguments = bundleOf(
- "msg" to getString(R.string.未达取消),
- "ok" to getString(R.string.确认), "cancel" to getString(R.string.拒绝)
- )
- tipDialog.setCallback(object : TipDialog.OnClickCallback {
- override fun onOk() {
- startActivityForResult<CancelOrderActivity>(
- 1, "id" to id, "type" to type, "timeOut" to order?.timeOutCancel,
- "driverTimeOut" to order?.driverTimeOut, "state" to order?.state
- )
- }
+ order?.also {
+ val tipDialog = TipDialog()
+ tipDialog.arguments = bundleOf(
+ "msg" to getString(R.string.未达取消),
+ "ok" to getString(R.string.确认), "cancel" to getString(R.string.拒绝)
+ )
+ tipDialog.setCallback(object : TipDialog.OnClickCallback {
+ override fun onOk() {
+ startActivityForResult<CancelOrderActivity>(
+ 1, "id" to id, "type" to type, "timeOut" to it.timeOutCancel,
+ "driverTimeOut" to it.driverTimeOut, "state" to it.state
+ )
+ }
- override fun onCancel() {
- }
- })
- tipDialog.show(supportFragmentManager, "cancel")
+ override fun onCancel() {
+ }
+ })
+ tipDialog.show(supportFragmentManager, "cancel")
+ }
}
tv_progress.setOnClickListener {
@@ -304,11 +311,14 @@
lat = vehicleLocation!!.latLng.latitude
lon = vehicleLocation!!.latLng.longitude
}
- HttpManager.cancelOrder(lat, lon, id, type).request(this) { _, _ ->
+ LogHelper.logRecord("取消订单,不在继续等待订单被接单orderId:${id} orderType:${type}")
+ HttpManager.cancelOrder(lat, lon, id, type).request(this, success = { _, _ ->
myToast(getString(R.string.取消成功))
logRecord("取消订单成功orderId:${id} type:${type}")
setResult(RESULT_OK)
finish()
+ }) { code, msg ->
+ logRecord("取消订单失败orderId:${id} type:${type} code:${code} msg:${msg}")
}
}
@@ -318,18 +328,27 @@
.create().immersionBar() //沉浸状态栏
id = intent.getIntExtra("id", 0)
type = intent.getIntExtra("type", Const.OrderType.TYPE_TAXI)
+ logRecord("订单进行中orderId:${id} type:${type}")
titleBar.addRightButton(
getString(R.string.取消订单),
onClickListener = View.OnClickListener {
- if (titleBar.getRightButton(0)?.text == getString(R.string.取消订单))
- startActivityForResult<CancelOrderActivity>(
- 1, "id" to id, "type" to type, "timeOut" to order?.timeOutCancel,
- "driverTimeOut" to order?.driverTimeOut, "state" to order?.state
- )
- else if (titleBar.getRightButton(0)?.text == getString(R.string.投诉司机))
- tv_complain.callOnClick()
- else
- startActivityForResult<ChoosePositionActivity>(2, "isModify" to true)
+ when (titleBar.getRightButton(0)?.text) {
+ getString(R.string.取消订单) -> {
+ order?.also {
+ startActivityForResult<CancelOrderActivity>(
+ 1, "id" to id, "type" to type, "timeOut" to it.timeOutCancel,
+ "driverTimeOut" to it.driverTimeOut, "state" to it.state
+ )
+ }
+ }
+
+ getString(R.string.投诉司机) -> {
+ tv_complain.callOnClick()
+ }
+
+ else
+ -> startActivityForResult<ChoosePositionActivity>(2, "isModify" to true)
+ }
})
titleBar.getRightButton(0)?.gone()
initConsumerSdk()
@@ -362,6 +381,7 @@
Manifest.permission.ACCESS_COARSE_LOCATION
) != PackageManager.PERMISSION_GRANTED
) {
+ logRecord("没有定位权限orderId:${id} type:${type}")
return
}
consumerController = consumerGoogleMap.consumerController!!
@@ -406,6 +426,7 @@
initMap()
else {
myToast(getString(R.string.没有权限))
+ logRecord("用户没有授予定位权限orderId:${id} type:${type}")
}
}
}
@@ -518,12 +539,12 @@
* 订单状态变化后的UI渲染,主要是起终点,标题等数据
*/
private fun setStateUI() {
- logRecord("订单状态变化后的UI渲染${order}")
iv_shuaxing.gone()
ll_receiver_goods_code.isVisible = false
order?.let {
when (it.state) {
1 -> {
+ logRecord("订单处于等待应答状态:${order}")
titleBar.getRightButton(0)?.visible()
titleBar.setTitle(getString(R.string.等待应答))
if (!handler.hasMessages(0))
@@ -538,6 +559,15 @@
}
2 -> {
+ logRecord(
+ "订单处于等待${
+ if (type == TripOrderFragment.TYPE_LOGISTICS) {
+ "取件"
+ } else {
+ "接驾"
+ }
+ }状态:${order}"
+ )
if (type == TripOrderFragment.TYPE_LOGISTICS)
titleBar.getRightButton(0)?.gone()
titleBar.setTitle(
@@ -557,6 +587,15 @@
}
3 -> {
+ logRecord(
+ "订单处于司机前往${
+ if (type == TripOrderFragment.TYPE_LOGISTICS) {
+ "取件点"
+ } else {
+ "接驾点"
+ }
+ }状态:${order}"
+ )
titleBar.getRightButton(0)?.gone()
titleBar.setTitle(
getString(
@@ -573,6 +612,15 @@
}
4 -> {
+ logRecord(
+ "订单处于司机已到达${
+ if (type == TripOrderFragment.TYPE_LOGISTICS) {
+ "取件点"
+ } else {
+ "接驾点"
+ }
+ }状态:${order}"
+ )
titleBar.getRightButton(0)?.gone()
println("隐藏取消订单")
titleBar.setTitle(getString(R.string.司机已到达))
@@ -583,6 +631,15 @@
}
5 -> {
+ logRecord(
+ "订单处于司机${
+ if (type == TripOrderFragment.TYPE_LOGISTICS) {
+ "送货中"
+ } else {
+ "服务中"
+ }
+ }状态:${order}"
+ )
if (type == TYPE_SPECIAL)
iv_shuaxing.visible() else iv_shuaxing.gone()
titleBar.setTitle(getString(R.string.serving))
@@ -611,16 +668,16 @@
}
10 -> {
+ logRecord("订单处于已取消状态:${order}")
if (it.cancelUserType != 1) {
startActivity<OrderCancelDetailActivity>("id" to id, "type" to type)
- logRecord("进入订单详情页state:${it.state} orderId:${id} type:${type}")
finish()
}
}
else -> {
+ logRecord("订单处于状态state=${it.state}:${order}")
startActivity<OrderDetailActivity>("id" to id, "type" to type)
- logRecord("进入订单详情页state:${it.state} orderId:${id} type:${type}")
finish()
}
}
@@ -652,11 +709,9 @@
* 获取行程中的数据:主要是司机位置,订单状态变化,距离、时间等预算信息
*/
private fun getTrippingData() {
- logRecord("获取行程中的数据")
IGoApplication.intervalCount = 0
HttpManager.trippingInfo(id, type).request(this) { _, data ->
data?.let {
- logRecord("获取行程中的数据: ${it}")
if (!it.lat.isNullOrEmpty())
setDriverMarker(LatLng(it.lat.toDouble(), it.lon?.toDoubleOrNull() ?: 0.0))
if (it.state != order?.state) //订单状态发生变化,重新拉取数据
@@ -686,11 +741,15 @@
* 超时无应答
*/
fun noResponse(id: Int) {
- lifecycleScope.launch {
+ if (isFinishing || isDestroyed) {
+ return
+ }
+ lifecycleScope.launch(Dispatchers.Main) {
// 等待生命周期至少达到 RESUMED(即 onResume 之后)
if (id == this@TripActivity.id && !noResponseDialog.isAdded) {
repeatOnLifecycle(Lifecycle.State.RESUMED) {
noResponseDialog.show(supportFragmentManager, "noResponse")
+ LogHelper.logRecord("显示超时无应答弹窗orderId:${id} orderType:${type}")
}
}
}
@@ -700,7 +759,6 @@
* 行程中的UI,展示不同状态下的动态数据
* */
private fun setTrippingUI(it: TrippingInfo) {
- logRecord("展示不同状态下的动态数据: ${it}")
tv_state.isVisible = false
//订单状态(1=待接单,2=待出发,3=待到达预约地点,4=待乘客上车,5=服务中,6=完成服务,
// 7=待支付,8=待评价,9=已完成,10=已取消,11=改派中,12=取消待支付)加个15作为改派成功
@@ -727,8 +785,6 @@
).build()
}
}
-
- logRecord("setTrippingUI tips ${tv_state.text}")
}
4 -> {
@@ -767,7 +823,6 @@
R.color.colorPrimary
)
.build()
- logRecord("setTrippingUI tips ${tv_state.text}")
}
if (!it.orderPositionList.isNullOrEmpty()) {
try {
@@ -884,7 +939,6 @@
queryEndPush()
getTrippingData()
}
- logRecord("事件0:" + IGoApplication.intervalCount)
handler.sendEmptyMessageDelayed(0, 1000)
}
}
@@ -902,7 +956,6 @@
if (IGoApplication.intervalCount > 7) {
getTrippingData()
}
- logRecord("事件1:" + IGoApplication.intervalCount)
handler.sendEmptyMessageDelayed(1, 1000)
}
}
@@ -912,7 +965,6 @@
if (IGoApplication.intervalCount > 7) {
getTrippingData()
}
- logRecord("事件2:" + IGoApplication.intervalCount)
if (order?.state == 2)
fl_reserve.visibility =
if (order!!.travelTime1.isNotEmpty() && order!!.travelTime1.parserTime() - System.currentTimeMillis() > (30L * 60 * 1000)) View.VISIBLE else View.GONE
@@ -946,11 +998,13 @@
override fun onAddressChanged(info: TrippingInfo) {
Log.e("地址变更: ", (info.status == 2).toString())
- if (info.orderId == order?.orderId) {
+ if (info.orderId == order?.orderId && info.orderType == order?.orderType) {
if (info.status == 2) { //司机同意修改目的地
+ LogHelper.logRecord("司机同意修改目的地:orderId:${id} orderType:${type}")
getData()
}
if (info.status == 3) {//司机拒绝修改目的地
+ LogHelper.logRecord("司机拒绝修改目的地:orderId:${id} orderType:${type}")
val tipDialog = TipDialog()
tipDialog.arguments = bundleOf(
"msg" to getString(R.string.拒绝变更),
@@ -981,12 +1035,12 @@
if (resultCode == RESULT_OK && data != null) {
if (requestCode == 1) {
setResult(RESULT_OK)
- logRecord("取消订单退出处理订单页orderId:${id} type:${type}")
finish()
val money = data.getDoubleExtra("money", 0.0)
if (money != 0.0)
startActivity<OrderDetailActivity>("id" to id, "type" to type)
} else if (requestCode == 2) { //修改终点
+ LogHelper.logRecord("乘客变更目的地:orderId:${id} orderType:${type}")
val lat = data.getDoubleExtra("lat", 0.0)
val lon = data.getDoubleExtra("lon", 0.0)
val address = data.getStringExtra("name") ?: ""
@@ -1000,7 +1054,10 @@
override fun onOk() {
showDialog()
HttpManager.updateEndAddress(address, lat, lon, id, type)
- .request(this@TripActivity) { _, _ ->
+ .request(this@TripActivity, success = { _, _ ->
+ LogHelper.logRecord("乘客变更目的地成功:orderId:${id} orderType:${type}")
+ }) { code, msg ->
+ LogHelper.logRecord("乘客变更目的地失败:orderId:${id} orderType:${type} code:${code} msg:${msg}")
}
}
diff --git a/app/src/main/java/com/igo/user/utils/Const.kt b/app/src/main/java/com/igo/user/utils/Const.kt
index 2ad187c..cd88270 100644
--- a/app/src/main/java/com/igo/user/utils/Const.kt
+++ b/app/src/main/java/com/igo/user/utils/Const.kt
@@ -80,6 +80,8 @@
const val APP_ID = "appid"
const val IS_AGREE = "isAgree"
const val NO_PHONE = "noPhone"
+ //是否设置了密码(1=否,2=是)
+ const val NEED_SET_PASSWORD = "needSetPassword"
}
object Share {
diff --git a/app/src/main/java/com/igo/user/utils/crash/CrashHandler.kt b/app/src/main/java/com/igo/user/utils/crash/CrashHandler.kt
new file mode 100644
index 0000000..31c2bee
--- /dev/null
+++ b/app/src/main/java/com/igo/user/utils/crash/CrashHandler.kt
@@ -0,0 +1,160 @@
+package com.igo.user.utils.crash
+
+import android.content.Context
+import android.os.Build
+import android.util.Log
+import com.google.gson.GsonBuilder
+import com.igo.user.BuildConfig
+import java.io.File
+
+/**
+ * 全局崩溃捕获器
+ * 通过替换系统默认的 UncaughtExceptionHandler 来拦截所有未处理异常
+ */
+object CrashHandler : Thread.UncaughtExceptionHandler {
+ private const val TAG = "CrashHandler"
+
+ // 最大保留日志数,防止文件无限增长
+ private const val maxLogFileCount = 3
+
+ // 系统原有的异常处理器,需要在处理完后委托给它,保证系统行为不被破坏
+ private var defaultHandler: Thread.UncaughtExceptionHandler? = null
+
+ // 日志保存文件夹
+ lateinit var crashDir: File
+
+ //是否已经初始化
+ private var hadInit = false;
+
+ /**
+ * 初始化方法
+ * @param context Context,用于获取应用和设备信息
+ *
+ * 必须在 Application.onCreate() 中最早调用
+ */
+ fun init(context: Context) {
+ if (hadInit) {
+ return
+ }
+ hadInit = true
+ // 保存系统默认的异常处理器
+ defaultHandler = Thread.getDefaultUncaughtExceptionHandler()
+
+ // 设置自定义的异常处理器为全局默认
+ Thread.setDefaultUncaughtExceptionHandler(this)
+
+ // 初始化本地存储和上报模块
+ crashDir = File(context.filesDir, "crash_logs").apply { if (!exists()) mkdirs() }
+
+ Log.d(TAG, "崩溃捕获器初始化完成")
+ }
+
+ /**
+ * 核心回调:当线程因未捕获异常而即将终止时,系统会调用此方法
+ *
+ * @param thread 发生异常的线程
+ * @param throwable 未捕获的异常
+ */
+ override fun uncaughtException(thread: Thread, throwable: Throwable) {
+ try {
+ // 1. 收集崩溃信息
+ val crashInfo = collectCrashInfo(thread, throwable)
+
+ // 2. 写入本地文件(立即持久化,避免丢失)
+ saveCrashLog(crashInfo)
+
+ // 3. 打印到 Logcat(方便开发调试)
+ Log.e(TAG, "捕获到崩溃: ${crashInfo.exceptionType}")
+
+ } catch (e: Exception) {
+ e.printStackTrace()
+ // 捕获处理器自身的异常,避免二次崩溃
+ Log.e(TAG, "处理崩溃时发生错误")
+ } finally {
+ // 4. 委托给系统原有的处理器
+ // 系统处理器会执行默认的崩溃对话框或进程退出逻辑
+ defaultHandler?.uncaughtException(thread, throwable)
+ }
+ }
+
+ /**
+ * 收集崩溃相关的全部信息
+ */
+ private fun collectCrashInfo(thread: Thread, throwable: Throwable): CrashInfo {
+ return CrashInfo(
+ threadName = thread.name,
+ exceptionType = throwable.javaClass.name,
+ exceptionMessage = throwable.message,
+ stackTrace = Log.getStackTraceString(throwable), // 将 Throwable 转为字符串堆栈
+ deviceInfo = CrashInfo.DeviceInfo(
+ manufacturer = Build.MANUFACTURER,
+ model = Build.MODEL,
+ sdkVersion = Build.VERSION.SDK_INT,
+ osVersion = Build.VERSION.RELEASE
+ ),
+ appInfo = CrashInfo.AppInfo(
+ packageName = BuildConfig.APPLICATION_ID,
+ versionName = BuildConfig.VERSION_NAME,
+ versionCode = BuildConfig.VERSION_CODE.toLong()
+ )
+ )
+ }
+
+ /**
+ * 保存一次崩溃日志
+ * @param crashInfo 崩溃信息对象
+ *
+ * 以 "crash_时间戳_id.json" 命名,便于排序和查找
+ */
+ fun saveCrashLog(crashInfo: CrashInfo) {
+ val gson = GsonBuilder().setPrettyPrinting().create()
+ val json = gson.toJson(crashInfo)
+
+ val fileName = "crash_${crashInfo.timestamp}_${crashInfo.id}.json"
+ val file = File(crashDir, fileName)
+
+ try {
+ file.writeText(json)
+ Log.d(TAG, "崩溃日志已保存: $fileName")
+
+ // 清理旧日志,避免占用过多空间
+ cleanupOldLogs()
+ } catch (e: Exception) {
+ e.printStackTrace()
+ Log.e(TAG, "保存崩溃日志失败")
+ }
+ }
+
+ /**
+ * 读取所有待上报的崩溃日志
+ * @return 崩溃日志文件列表
+ */
+ fun getAllCrashLogs(): List<File> {
+ return crashDir.listFiles { file ->
+ file.name.startsWith("crash_") && file.name.endsWith(".json")
+ }?.sortedByDescending { it.lastModified() } ?: emptyList()
+ }
+
+ /**
+ * 删除指定的崩溃日志文件
+ * @param file 要删除的文件
+ */
+ fun deleteCrashLog(file: File) {
+ if (file.exists()) {
+ file.delete()
+ Log.d(TAG, "已删除崩溃日志: ${file.name}")
+ }
+ }
+
+ /**
+ * 清理最旧的日志文件,保持总数不超过 maxLogFileCount
+ */
+ private fun cleanupOldLogs() {
+ val files = crashDir.listFiles() ?: return
+ if (files.size > maxLogFileCount) {
+ files.sortedBy { it.lastModified() }
+ .take(files.size - maxLogFileCount)
+ .forEach { it.delete() }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/igo/user/utils/crash/CrashInfo.kt b/app/src/main/java/com/igo/user/utils/crash/CrashInfo.kt
new file mode 100644
index 0000000..67057b3
--- /dev/null
+++ b/app/src/main/java/com/igo/user/utils/crash/CrashInfo.kt
@@ -0,0 +1,39 @@
+package com.igo.user.utils.crash
+
+import android.app.ActivityManager
+import java.util.UUID
+
+/**
+ * 崩溃信息数据类
+ * 封装一次崩溃所需的全部上下文
+ */
+data class CrashInfo(
+ val id: String = UUID.randomUUID().toString(), // 崩溃唯一ID,便于去重
+ val timestamp: Long = System.currentTimeMillis(), // 崩溃发生时间
+ val threadName: String, // 发生崩溃的线程名
+ val exceptionType: String, // 异常类型(如 NullPointerException)
+ val exceptionMessage: String?, // 异常消息
+ val stackTrace: String, // 完整堆栈信息
+ val deviceInfo: DeviceInfo, // 设备信息
+ val appInfo: AppInfo, // 应用信息
+ val memoryInfo: ActivityManager.MemoryInfo? = null // 内存快照(可选)
+) {
+ /**
+ * 设备信息子数据类
+ */
+ data class DeviceInfo(
+ val manufacturer: String, // 厂商,如 "Xiaomi"
+ val model: String, // 型号,如 "Redmi K60"
+ val sdkVersion: Int, // Android SDK 版本
+ val osVersion: String // Android 系统版本
+ )
+
+ /**
+ * 应用信息子数据类
+ */
+ data class AppInfo(
+ val packageName: String, // 应用包名
+ val versionName: String, // 版本名,如 "1.2.0"
+ val versionCode: Long // 版本号
+ )
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/igo/user/utils/crash/LogUploader.kt b/app/src/main/java/com/igo/user/utils/crash/LogUploader.kt
new file mode 100644
index 0000000..76f0bb9
--- /dev/null
+++ b/app/src/main/java/com/igo/user/utils/crash/LogUploader.kt
@@ -0,0 +1,124 @@
+package com.igo.user.utils.crash
+
+import android.content.Context
+import android.util.Log
+import androidx.core.content.edit
+import cn.sinata.rxnetty.LogHelper
+import cn.sinata.xldutils.data.ResultData
+import com.igo.user.IGoApplication
+import com.igo.user.network.HttpManager
+import io.reactivex.Observable
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.schedulers.Schedulers
+import java.io.File
+import java.io.IOException
+import java.io.RandomAccessFile
+
+/**
+ * 日志上传管理器
+ * 处理日志文件正在写入时的安全上传
+ */
+object LogUploader {
+ private const val TAG = "LogUploader"
+
+ //上传历史文件名
+ private const val HISTORY_NAME = "logUploadHistory"
+
+ //复制文件时的缓冲区大小:8KB
+ private const val BUFFER_SIZE = 8192
+
+ /**
+ * 将正在写入的日志文件复制到临时文件
+ * 使用文件通道,支持大文件且高效
+ *
+ * @param source 源日志文件
+ * @return 复制后的临时文件,失败返回null
+ */
+ private fun copyToTempFile(context: Context, source: File): File? {
+ if (!source.exists()) {
+ Log.e(TAG, "源文件不存在: ${source.absolutePath}")
+ return null
+ }
+
+ val tempFile = File(context.cacheDir, "temp_${source.name}")
+
+ return try {
+ // 使用 RandomAccessFile 而非直接 InputStream
+ // 这样可以处理文件在复制过程中变化的情况
+ RandomAccessFile(source, "r").use { src ->
+ RandomAccessFile(tempFile, "rw").use { dest ->
+ val buffer = ByteArray(BUFFER_SIZE)
+ var bytesRead: Int
+
+ while (src.read(buffer).also { bytesRead = it } != -1) {
+ dest.write(buffer, 0, bytesRead)
+ }
+ }
+ }
+
+ Log.d(TAG, "文件复制成功: ${source.name} -> ${tempFile.name}")
+ tempFile
+ } catch (e: IOException) {
+ Log.e(TAG, "文件复制失败", e)
+ tempFile.delete() // 清理可能的不完整文件
+ null
+ }
+ }
+
+ //上传
+ fun upload() {
+ val sp = IGoApplication.appContext!!.getSharedPreferences(HISTORY_NAME, Context.MODE_PRIVATE)
+ val data = mutableListOf<File>()
+ if (LogHelper.saveLogDir != null && LogHelper.saveLogDir.exists()) {
+ val files = LogHelper.saveLogDir.listFiles()
+ if (!files.isNullOrEmpty()) {
+ data.addAll(files)
+ }
+ }
+ if (CrashHandler.crashDir.exists()) {
+ val files = CrashHandler.crashDir.listFiles()
+ if (!files.isNullOrEmpty()) {
+ data.addAll(files)
+ }
+ }
+ if (data.isEmpty()) {
+ Log.e(TAG, "没有需要上传的日志文件")
+ return
+ }
+ val needUploadFiles = data.filter { sp.getString(it.absolutePath, null).isNullOrEmpty() }
+ Log.e(TAG, "needUploadFiles: ${needUploadFiles.joinToString { it.absolutePath }}")
+ val subscribe = Observable.fromIterable(needUploadFiles)
+ .flatMap { file ->
+ val tempFile = copyToTempFile(IGoApplication.appContext!!, file)
+ if (tempFile == null || !tempFile.exists() || !tempFile.canRead()) {
+ return@flatMap Observable.just(Pair<File, String?>(file, null))
+ }
+ HttpManager.uploadFile(tempFile)
+ .onErrorReturn { e ->
+ e.printStackTrace()
+ return@onErrorReturn ResultData<String>(0)
+ }
+ .map { data -> Pair<File, String?>(file, data.data) }
+ .toObservable()
+ }
+ .toList()
+ .toObservable()
+ .flatMap { list ->
+ Log.e(TAG, "uploadResult: ${list.joinToString { "${it.first.absolutePath}==>${it.second}" }}")
+ sp.edit {
+ list.filter { !it.second.isNullOrEmpty() }.forEach { pair ->
+ putString(pair.first.absolutePath, pair.second)
+ }
+ }
+ val filter = data.mapNotNull { sp.getString(it.absolutePath, null) }
+ return@flatMap HttpManager.saveLog(filter.joinToString(separator = ",") { it }).map { filter }.toObservable()
+ }
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe({
+ Log.e(TAG, "upload success")
+ }, { throwable ->
+ throwable.printStackTrace()
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 14da8da..621d14f 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -138,10 +138,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="23dp"
- android:checked="true"
+ android:checked="false"
android:drawableStart="@drawable/selector_ic_pwd_code"
android:drawablePadding="10dp"
- android:text="@string/验证码"
+ android:text="@string/密码"
app:layout_constraintTop_toBottomOf="@id/et_phone" />
<EditText
@@ -157,7 +157,6 @@
android:maxLength="18"
android:paddingTop="12dp"
android:paddingBottom="8dp"
- android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/tv_pwd" />
<EditText
@@ -173,6 +172,7 @@
android:maxLength="4"
android:paddingTop="12dp"
android:paddingBottom="8dp"
+ android:visibility="gone"
app:layout_constraintTop_toBottomOf="@id/tv_pwd" />
<TextView
@@ -184,7 +184,6 @@
android:text="@string/忘记密码"
android:textColor="@color/textColor66"
android:textSize="13sp"
- android:visibility="gone"
app:layout_constraintEnd_toEndOf="@id/tv_action"
app:layout_constraintTop_toBottomOf="@id/et_pwd"
tools:visibility="visible" />
@@ -198,6 +197,7 @@
android:text="@string/获取验证码"
android:textColor="@color/colorPrimary"
android:textSize="14sp"
+ android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@id/et_code"
app:layout_constraintEnd_toEndOf="@id/et_code" />
diff --git a/app/src/main/res/layout/activity_receiver.xml b/app/src/main/res/layout/activity_receiver.xml
index cb8e1ae..0376280 100644
--- a/app/src/main/res/layout/activity_receiver.xml
+++ b/app/src/main/res/layout/activity_receiver.xml
@@ -41,13 +41,14 @@
<TextView
style="@style/style_common_text"
- android:layout_width="wrap_content"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:drawablePadding="8dp"
android:text="@string/receipt_name"
app:layout_constraintBaseline_toBaselineOf="@id/et_name"
- app:layout_constraintStart_toStartOf="parent" />
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/et_name"/>
<LinearLayout
android:id="@+id/phoneLayout"
diff --git a/app/src/main/res/layout/fragment_logistics.xml b/app/src/main/res/layout/fragment_logistics.xml
index dd5047f..2c591a3 100644
--- a/app/src/main/res/layout/fragment_logistics.xml
+++ b/app/src/main/res/layout/fragment_logistics.xml
@@ -237,7 +237,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="预估金额"
+ android:text="@string/预估金额"
android:textColor="@color/black"
android:textSize="12sp" />
diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml
index 84b2b02..e36448b 100644
--- a/app/src/main/res/values-en/strings.xml
+++ b/app/src/main/res/values-en/strings.xml
@@ -991,7 +991,7 @@
<string name="邀请记录">Invitation record</string>
- <string name="专车">Premium ride / Private ride</string>
+ <string name="专车">Rides</string>
<string name="城际出行">Intercity travel</string>
@@ -1289,7 +1289,7 @@
<string name="物流费用是多少">Delivery Fee FCFA%1$.2f</string>
- <string name="查看快件指南">Check the express guide</string>
+ <string name="查看快件指南">Check the Flash guide</string>
<string name="邮寄快件指南">Package guidelines</string>
<string name="邮寄快件指南协议">《Package guidelines》</string>
<string name="完善收货人信息">Complete recipient information</string>
@@ -1726,7 +1726,7 @@
<string name="please_input_sms_code">Please enter the verification code</string>
- <string name="set_pwd">Set Password</string>
+ <string name="set_pwd">Change Password</string>
<string name="set_password">Set Password</string>
@@ -1892,7 +1892,7 @@
<string name="充值领券规则">Top-up & coupon rules</string>
<string name="计价规则">Pricing rules</string>
- <string name="可用于打车和快件">can be used for ride hailing and express parcels</string>
+ <string name="可用于打车和快件">can be used for ride hailing and Flash parcels</string>
<string name="请完善邮箱地址包裹提示">"In order to receive package pickup code and payment receipt, you must complete your email address, or you will not be able to place the order. "</string>
<string name="可用于打车和包裹">Available for Ride and Package Delivery</string>
@@ -2032,8 +2032,8 @@
<string name="订单号">Order No.:%1$s</string>
- <string name="快件">Express</string>
- <string name="物流">Logistics</string>
+ <string name="快件">Flash</string>
+ <string name="物流">Express</string>
<string name="呼叫司机">Call Driver</string>
<string name="运营公司客服电话">Operator Customer Service</string>
@@ -2049,5 +2049,6 @@
<string name="请选择乘车人">Please select your passenger</string>
<string name="有未完成订单是否前往查看">Do you have an unfinished order? Would you like to check it out?</string>
<string name="去开启相机权限">Please enable camera permissions on the app permissions page</string>
+ <string name="请设置密码">You haven\'t set a password yet, please set a password!</string>
</resources>
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 806108d..0dee2db 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -1702,7 +1702,7 @@
<string name="please_input_sms_code">Veuillez saisir le code de vérification</string>
- <string name="set_pwd">Définir le mot de passe</string>
+ <string name="set_pwd">Modifier le mot de passe</string>
<string name="set_password">Définir le mot de passe</string>
@@ -2003,7 +2003,7 @@
<string name="订单号">N° de commande : %1$s</string>
<string name="快件">Livraison</string>
- <string name="物流">Logistique</string>
+ <string name="物流">Express</string>
<string name="呼叫司机">Appeler le chauffeur</string>
<string name="运营公司客服电话">Service client de l’opérateur</string>
@@ -2020,5 +2020,6 @@
<string name="请选择乘车人">Veuillez sélectionner les passagers</string>
<string name="有未完成订单是否前往查看">Vous avez une commande inachevée, allez - vous la voir?</string>
<string name="去开启相机权限">Veuillez activer l\'autorisation de l\'appareil photo sur la page des permissions de l\'application</string>
+ <string name="请设置密码">Vous n\'avez pas encore défini de mot de passe, veuillez en définir un !</string>
</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index d8525d7..000075e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1073,5 +1073,6 @@
<string name="请选择乘车人">请选择乘车人</string>
<string name="有未完成订单是否前往查看">您有未完成订单,是否前往查看?</string>
<string name="去开启相机权限">请在应用权限页面开启相机权限</string>
+ <string name="请设置密码">您还没有设置密码,请设置密码!</string>
</resources>
diff --git a/rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java b/rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java
index 82a5aba..d59e01c 100644
--- a/rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java
+++ b/rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java
@@ -1,17 +1,24 @@
package cn.sinata.rxnetty;
+import android.content.Context;
+
import com.blankj.utilcode.util.LogUtils;
-public class LogHelper {
+import java.io.File;
- public static void initLogs() {
+public class LogHelper {
+ public static File saveLogDir;
+
+ public static void initLogs(Context context) {
LogUtils.Config config = LogUtils.getConfig();
config.setSaveDays(7);
- config.setFilePrefix("gopost");
+ config.setFilePrefix("user");
config.setConsoleSwitch(true);
config.setLog2FileSwitch(true);
config.setSingleTagSwitch(true);
config.setLogHeadSwitch(false);
+ saveLogDir = new File(context.getFilesDir(), "logs");
+ config.setDir(saveLogDir);
logRecord("initLogs");
}
--
Gitblit v1.7.1