18034727885
2026-04-28 714fe07ce3111f522881398d0784a1f316a5b603
修复问题
4个文件已修改
219 ■■■■■ 已修改文件
app/src/main/java/com/igo/user/ui/HomeActivity.kt 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/trip/MapTripFragment.kt 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values-fr/strings.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xldutils-kotlin/src/main/java/cn/sinata/xldutils/utils/LanguageUtil.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/igo/user/ui/HomeActivity.kt
@@ -190,8 +190,9 @@
    override fun onResume() {
        super.onResume()
        if (checkLogin())
        if (checkLogin(isLogin = false))
            queryUserInfo()
        refreshAD()
        funcHome.clear()
        funcHome.add(Function(1, getString(R.string.专车)))
        funcHome.add(Function(4, getString(R.string.快件)))
@@ -256,7 +257,6 @@
        }
    }
    override fun initView() {
        bind.apply {
            drawerMain.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
@@ -264,7 +264,21 @@
        if (checkLogin())
            queryUserInfo()
        if (checkLogin())
        HttpManager.queryHomeEntrance(
        ).request(this) { _, data ->
            SPUtils.instance().put("imgUrlDelivery", data?.imgUrlDelivery).apply ()
            SPUtils.instance().put("imgUrlTaxi", data?.imgUrlTaxi).apply ()
            SPUtils.instance().put("imgUrlLogistics", data?.imgUrlLogistics).apply ()
            Glide.with(this).load(data?.imgUrlDelivery).into(bind.img2)
            Glide.with(this).load(data?.imgUrlTaxi).into(bind.img1)
            Glide.with(this).load(data?.imgUrlLogistics).into(bind.img3)
        }
    }
    //刷新广告
    private fun refreshAD(){
        if (checkLogin(isLogin = false))
            HttpManager.getAds(
                2,
                IGoApplication.lat.toString(),
@@ -272,6 +286,7 @@
            ).request(this) { _, data ->
                data?.let {
                    it.forEach {
                        bind.llAds.removeAllViews()
                        val view = layoutInflater.inflate(R.layout.item_img_ads, null)
                        val iv_img = view.find<SimpleDraweeView>(R.id.iv_img)
                        iv_img.setImageURI(it.imgUrl)
@@ -294,20 +309,5 @@
                    }
                }
            }
        HttpManager.queryHomeEntrance(
        ).request(this) { _, data ->
            SPUtils.instance().put("imgUrlDelivery", data?.imgUrlDelivery).apply ()
            SPUtils.instance().put("imgUrlTaxi", data?.imgUrlTaxi).apply ()
            SPUtils.instance().put("imgUrlLogistics", data?.imgUrlLogistics).apply ()
            Glide.with(this).load(data?.imgUrlDelivery).into(bind.img2)
            Glide.with(this).load(data?.imgUrlTaxi).into(bind.img1)
            Glide.with(this).load(data?.imgUrlLogistics).into(bind.img3)
        }
    }
}
app/src/main/java/com/igo/user/ui/trip/MapTripFragment.kt
@@ -20,6 +20,7 @@
import androidx.core.content.ContextCompat
import androidx.core.os.bundleOf
import androidx.core.widget.NestedScrollView
import androidx.lifecycle.lifecycleScope
import cn.sinata.rxnetty.LogHelper.logRecord
import cn.sinata.xldutils.callPhone
import cn.sinata.xldutils.defaultScheduler
@@ -49,6 +50,7 @@
import com.google.android.gms.maps.model.Polyline
import com.google.android.gms.maps.model.PolylineOptions
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.gson.JsonObject
import com.google.maps.android.PolyUtil
import com.igo.user.IGoApplication
import com.igo.user.IGoApplication.Companion.currentLatLng
@@ -73,6 +75,8 @@
import com.igo.user.views.textbanner.TextBannerView
import com.tbruyelle.rxpermissions2.RxPermissions
import io.reactivex.subscribers.DisposableSubscriber
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.jetbrains.anko.backgroundResource
import org.jetbrains.anko.find
import org.jetbrains.anko.imageResource
@@ -166,6 +170,8 @@
    private val cl_special by lazy { find<View>(R.id.cl_special) }
    private val cl_taxi by lazy { find<View>(R.id.cl_taxi) }
    //是否循环刷新
    private var hadLoopRefresh = false
    override fun onFirstVisibleToUser() {
        val language = SPUtils.instance().getString("language")
        tv_110.setCompoundDrawablesRelativeWithIntrinsicBounds(
@@ -226,6 +232,7 @@
        else
            behavior.setPeekHeight(dip(240), true)
        initMap()
        loopRefreshDriverNum()
    }
    private fun getNavigationBarHeight(): Int {
@@ -242,7 +249,7 @@
            try {
                lat = currentLatLng.latitude
                lon = currentLatLng.longitude
                logRecord("MapTripFragment","归位 lat = $lat , lon = $lon")
                logRecord("MapTripFragment", "归位 lat = $lat , lon = $lon")
                startByLocal = true
                aMap.animateCamera(
                    CameraUpdateFactory.newLatLngZoom(
@@ -253,7 +260,7 @@
                    )
                )
            } catch (e: Exception) {
                logRecord("MapTripFragment","归位异常 ${e.message}")
                logRecord("MapTripFragment", "归位异常 ${e.message}")
            }
        }
        iv_location2.setOnClickListener {
@@ -647,36 +654,79 @@
    private var noCarShowing = false
    fun getDriverNum() {
        getDriverNum { _, data ->
            val i = data?.optInt("number") ?: 0
            val t = getString(R.string.当前附近有n辆车可用, i)
            val stringBuilder = SpanBuilder(t).bold(
                t.indexOf(i.toString()),
                t.indexOf(i.toString()) + i.toString().length
            )
                .color(
                    requireContext(),
                    t.indexOf(i.toString()),
                    t.indexOf(i.toString()) + i.toString().length,
                    cn.sinata.xldutils.R.color.black
                ).build()
            activity?.takeIf {
                !it.isFinishing && !it.isDestroyed
            }?.also {
                mainActivity.updateTipText(stringBuilder)
            }
            if (i == 0 && !noCarShowing) {
                noCarShowing = true
                val tipDialog = TipDialog()
                tipDialog.arguments =
                    bundleOf("msg" to getString(R.string.no_car), "isAlert" to true)
                tipDialog.showAllowingStateLoss(childFragmentManager, "noCar")
                tipDialog.setDismissCallback(object : TipDialog.OnDismiss {
                    override fun onDismiss() {
                        noCarShowing = false
                    }
                })
            }
        }
    }
    //循环刷新司机数量
    private fun loopRefreshDriverNum() {
        if (hadLoopRefresh) {
            return
        }
        hadLoopRefresh = true
        lifecycleScope.launch {
            while (true) {
                delay(5000)
                getDriverNum { _, data ->
                    val i = data?.optInt("number") ?: 0
                    val t = getString(R.string.当前附近有n辆车可用, i)
                    val stringBuilder = SpanBuilder(t).bold(
                        t.indexOf(i.toString()),
                        t.indexOf(i.toString()) + i.toString().length
                    )
                        .color(
                            requireContext(),
                            t.indexOf(i.toString()),
                            t.indexOf(i.toString()) + i.toString().length,
                            cn.sinata.xldutils.R.color.black
                        ).build()
                    activity?.takeIf {
                        !it.isFinishing && !it.isDestroyed
                    }?.also {
                        mainActivity.updateTipText(stringBuilder)
                    }
                }
            }
        }
    }
    private fun getDriverNum(success: (msg: String?, t: JsonObject?) -> Unit) {
        if (activity == null)
            return
        if (!mainActivity.isTripping && startLat != 0.0)
            HttpManager.getDriverNum(startLat, startLon, type).requestByF(this) { _, data ->
                val i = data?.optInt("number") ?: 0
                val t = getString(R.string.当前附近有n辆车可用, i)
                val stringBuilder = SpanBuilder(t).bold(
                    t.indexOf(i.toString()),
                    t.indexOf(i.toString()) + i.toString().length
                )
                    .color(
                        requireContext(),
                        t.indexOf(i.toString()),
                        t.indexOf(i.toString()) + i.toString().length,
                        cn.sinata.xldutils.R.color.black
                    ).build()
                mainActivity.updateTipText(stringBuilder)
                if (i == 0 && !noCarShowing) {
                    noCarShowing = true
                    val tipDialog = TipDialog()
                    tipDialog.arguments =
                        bundleOf("msg" to getString(R.string.no_car), "isAlert" to true)
                    tipDialog.showAllowingStateLoss(childFragmentManager, "noCar")
                    tipDialog.setDismissCallback(object : TipDialog.OnDismiss {
                        override fun onDismiss() {
                            noCarShowing = false
                        }
                    })
                }
            }
            HttpManager.getDriverNum(startLat, startLon, type).requestByF(
                fragment = this,
                success = success
            )
    }
    private fun getEmergencyEnable() {
@@ -815,7 +865,7 @@
    private var poiSearchDisposable: DisposableSubscriber<GeoBean>? = null
    //
    fun getPoi(lat: Double?, lng: Double?,call:(String.()->Unit)?=null) {
    fun getPoi(lat: Double?, lng: Double?, call: (String.() -> Unit)? = null) {
        if (lat == null || lng == null) {
            return
        }
@@ -940,9 +990,9 @@
                Const.OrderType.TYPE_SPECIAL -> {
//                    mainActivity.updateTipAlpha(0f)
                    cl_special.visible()
                    if(chooseindex==2){
                    if (chooseindex == 2) {
                        tv_passenger_special.visible()
                    }else{
                    } else {
                        tv_passenger_special.invisible()
                    }
                    callback?.invoke(false)
@@ -1048,9 +1098,9 @@
                    name = data.getStringExtra("name") ?: ""
                    phone = data.getStringExtra("phone") ?: ""
                    tv_option.text = name
                    Log.e( "选择的: ", name)
                    Log.e("选择的: ", name)
                    tv_passenger.text = name
                    if(chooseindex==2)tv_passenger_special.visible() else tv_passenger_special.gone()
                    if (chooseindex == 2) tv_passenger_special.visible() else tv_passenger_special.gone()
                    tv_passenger_special.text = name
                }
app/src/main/res/values-fr/strings.xml
@@ -960,7 +960,7 @@
    <string name="邀请记录">Historique des invitations</string>
    <string name="专车">Course premium</string>
    <string name="专车">VTC</string>
    <string name="城际出行">Déplacements interurbains</string>
xldutils-kotlin/src/main/java/cn/sinata/xldutils/utils/LanguageUtil.java
@@ -1,8 +1,5 @@
package cn.sinata.xldutils.utils;
import static android.content.ContentValues.TAG;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -10,60 +7,64 @@
import android.os.LocaleList;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Log;
import java.util.Locale;
public class LanguageUtil {
    public static Context attachBaseContext(Context context, String language, String country) {
        Log.d(TAG, "attachBaseContext: "+ Build.VERSION.SDK_INT);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            return updateResources(context, language,country);
        } else {
            return context;
        }
    }
    @TargetApi(Build.VERSION_CODES.N)
    private static Context updateResources(Context context, String language, String country) {
        Resources resources = context.getResources();
        Locale locale = new Locale(language);
        Locale.setDefault(locale);
        Resources resources = context.getResources();
        Configuration configuration = new Configuration(resources.getConfiguration());
        Configuration configuration = resources.getConfiguration();
        configuration.setLocale(locale);
        configuration.setLocales(new LocaleList(locale));
        return context.createConfigurationContext(configuration);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            configuration.setLocale(locale);
            LocaleList localeList = new LocaleList(locale);
            LocaleList.setDefault(localeList);
            configuration.setLocales(localeList);
            return context.createConfigurationContext(configuration);
        } else {
            configuration.locale = locale;
            resources.updateConfiguration(configuration, resources.getDisplayMetrics());
        }
        return context;
    }
    /**
     * @param context
     * @param newLanguage 想要切换的语言类型 比如 Const.Language.ENGLISH ,"zh"
     */
    @SuppressWarnings("deprecation")
    public static void changeAppLanguage(Context context, String newLanguage, String country) {
        if (TextUtils.isEmpty(newLanguage)) {
            return;
        }
        Locale locale = new Locale(newLanguage);
        Locale.setDefault(locale);
        Resources resources = context.getResources();
        Configuration configuration = resources.getConfiguration();
        //获取想要切换的语言类型
        Locale locale = new Locale(newLanguage,country);
        configuration.setLocale(locale);
        // updateConfiguration
        DisplayMetrics dm = resources.getDisplayMetrics();
        resources.updateConfiguration(configuration, dm);
        Configuration configuration = new Configuration(resources.getConfiguration());
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            configuration.setLocale(locale);
            LocaleList localeList = new LocaleList(locale);
            LocaleList.setDefault(localeList);
            configuration.setLocales(localeList);
        } else {
            configuration.locale = locale;
            resources.updateConfiguration(configuration, resources.getDisplayMetrics());
        }
    }
    /**
     * 如果是7.0以下,我们需要调用changeAppLanguage方法,
     * 如果是7.0及以上系统,直接把我们想要切换的语言类型保存在SharedPreferences中,然后重新启动MainActivity即可
     */
    public static void setLanguage(String language,String country,Context appContext){
    public static void setLanguage(String language, String country, Context appContext) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
            changeAppLanguage(appContext, language,country);
            changeAppLanguage(appContext, language, country);
        }
        SPUtils.Companion.instance().put("language",language);
        SPUtils.Companion.instance().put("country",country);
        SPUtils.Companion.instance().put("language", language);
        SPUtils.Companion.instance().put("country", country);
    }