tj
2025-04-07 3433f3e9a0254b24cec2836b112267b1af3f9101
1.jks打包相关修改
2.vip续费页面相关修改
已修改12个文件
已添加3个文件
85 ■■■■■ 文件已修改
README.md 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/AndroidManifest.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/App.kt 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/database/service/ApiService.kt 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardViewModel.kt 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/avatar.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/drawable/gift_one.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_member_info_card.xml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/mipmap/vip_free_member.png 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/xml/network_security_config.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keytool 补丁 | 查看 | 原始文档 | blame | 历史
public_cert.cer 补丁 | 查看 | 原始文档 | blame | 历史
sms-manager.jks 补丁 | 查看 | 原始文档 | blame | 历史
README.md
@@ -2,3 +2,13 @@
短信平台
# md5
ADC67C7C8E0BE3829D34E976D8EFCC9B
# 公钥:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoKuRiiydxMr1CFaenGIr
MVqwOFtRgzW+ihjza8wldQOcLvqB58joTi9jwGLVqOnfoAA8hIzOZ33jWe5ZsLgq
UjwugDj+VOMW7YTAZlVoY/1lUX2gyexaRiZf2D2Bxikp3SLrlG7fp4sYMIXAdMPx
i/Y9Tgr9d7KGu2Yaz1ER+Kcq3WI+PDjYJjlQfgpkSruKb65hVhtQA1ZJp3rzPLRw
/0sK7H2dwYxFvsVN+m6dhBnTmOcrvZ7jpIgI47kHMxT0Qj53J10/6D9Ww9+h6TM6
ISnvE8tXF0iP0nDD+kSpuky/6592+48Pof08IN+oaQKe7Ycf8iyAfGQSO3vUe8I5
EQIDAQAB
app/src/main/AndroidManifest.xml
@@ -86,6 +86,14 @@
        tools:targetApi="31"
        android:usesCleartextTraffic="true"
        >
        <provider
            android:name="androidx.startup.InitializationProvider"
            android:authorities="${applicationId}.androidx-startup"
            android:exported="false"
            tools:node="remove" />
        <activity
            android:name=".activity.VipActivity"
            android:exported="false"
app/src/main/java/com/example/firstapp/App.kt
@@ -3,24 +3,16 @@
import android.annotation.SuppressLint
import android.app.Application
import android.app.PendingIntent
import android.bluetooth.BluetoothAdapter
import android.bluetooth.BluetoothDevice
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.location.Geocoder
import android.net.ConnectivityManager
import android.net.wifi.WifiManager
import android.os.Build
import androidx.annotation.NonNull
import androidx.lifecycle.MutableLiveData
import androidx.multidex.MultiDex
import androidx.work.Configuration
import androidx.work.WorkManager
import com.gyf.cactus.Cactus
import com.gyf.cactus.callback.CactusCallback
import com.gyf.cactus.ext.cactus
import com.hjq.language.MultiLanguages
import com.hjq.language.OnLanguageListener
import com.example.firstapp.core.Core
import com.example.firstapp.database.repository.CodeRepository
import com.example.firstapp.database.repository.KeywordRepository
@@ -28,28 +20,23 @@
import com.example.firstapp.database.repository.ReminderRepository
import com.example.firstapp.database.service.RetrofitClient
import com.example.firstapp.receiver.CactusReceiver
import com.example.firstapp.service.BluetoothScanService
import com.example.firstapp.service.HttpServerService
import com.example.firstapp.utils.ACTION_START
import com.example.firstapp.utils.AppInfo
import com.example.firstapp.utils.CactusSave
import com.example.firstapp.utils.FRONT_CHANNEL_ID
import com.example.firstapp.utils.FRONT_CHANNEL_NAME
import com.example.firstapp.utils.FRONT_NOTIFY_ID
import com.example.firstapp.utils.FRPC_LIB_VERSION
import com.example.firstapp.utils.HistoryUtils
import com.example.firstapp.utils.Log
import com.example.firstapp.utils.PreferencesManager
import com.example.firstapp.utils.SettingUtils
import com.example.firstapp.utils.SharedPreference
import com.example.firstapp.utils.tinker.TinkerLoadLibrary
import com.gyf.cactus.Cactus
import com.gyf.cactus.callback.CactusCallback
import com.gyf.cactus.ext.cactus
import com.hjq.language.MultiLanguages
import com.king.location.LocationClient
import com.xuexiang.xutil.file.FileUtils
import frpclib.Frpclib
import io.reactivex.Observable
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
import java.io.BufferedWriter
@@ -59,8 +46,6 @@
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import java.util.TimeZone
import java.util.concurrent.TimeUnit
@Suppress("DEPRECATION")
class App : Application(), CactusCallback, Configuration.Provider by Core {
@@ -160,7 +145,8 @@
            if (SettingUtils.enablePureClientMode) return
            //初始化WorkManager
            WorkManager.initialize(this, Configuration.Builder().build())
//            WorkManager.initialize(this, Configuration.Builder().build())
            WorkManager.initialize(this, getWorkManagerConfiguration())
            //动态加载FrpcLib
            val libPath = filesDir.absolutePath + "/libs"
@@ -296,6 +282,13 @@
        }
    }
    @NonNull
    override fun getWorkManagerConfiguration(): Configuration {
        return Configuration.Builder()
            .setMinimumLoggingLevel(android.util.Log.DEBUG) // 设置日志级别
            .build()
    }
    /**
     * 初始化基础库
     */
app/src/main/java/com/example/firstapp/database/service/ApiService.kt
@@ -78,7 +78,9 @@
// 创建Retrofit实例(单例)
object RetrofitClient{
    private const val BASE_URL ="http://192.168.1.213:8080/flower/"
//    private const val BASE_URL ="http://192.168.1.198:8080/flower/"
    private const val BASE_URL ="http://14.103.144.28:8080/flower/"
    // 创建OkHttpClient,配置拦截器和超时时间
    private val okHttpClient = OkHttpClient.Builder()
app/src/main/java/com/example/firstapp/ui/dashboard/DashboardViewModel.kt
@@ -4,6 +4,7 @@
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import androidx.room.RewriteQueriesToDropUnusedColumns
import com.example.firstapp.AppDatabase
import com.example.firstapp.database.entity.Code
import com.example.firstapp.database.repository.CodeRepository
@@ -26,6 +27,7 @@
    fun getYearlyHeatmap(date: Long) = repository.getYearlyHeatmap(date).asLiveData()
    fun getWeeklyStats(date: Long, weekCount: Int = 6) = 
        repository.getWeeklyStats(date, weekCount).asLiveData()
    
app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt
@@ -144,8 +144,13 @@
        }
        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.color.collect { color ->
            viewModel.phoneTextColor.collect { color ->
                binding.phoneNumberText.setTextColor(Color.parseColor(color))
            }
        }
        viewLifecycleOwner.lifecycleScope.launch {
            viewModel.memberStatusColor.collect { color ->
                binding.memberStatus.setTextColor(Color.parseColor(color))
            }
        }
app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardViewModel.kt
@@ -30,9 +30,13 @@
    private val _background = MutableStateFlow(R.drawable.dialog_background)
    val background: StateFlow<Int> = _background
    // 背景色
    private val _color = MutableStateFlow("#E8EAEE")
    val color: StateFlow<String> = _color
    // 手机号字体颜色
    private val _phoneTextColor = MutableStateFlow("#37393B")
    val phoneTextColor: StateFlow<String> = _phoneTextColor
    // 到期时间字体颜色
    private val _memberStatusColor = MutableStateFlow("#37393B")
    val memberStatusColor: StateFlow<String> = _memberStatusColor
    // 更新数据的方法
@@ -64,13 +68,15 @@
                // vip头像
                _vipCover.value ="http://192.168.1.201:9000/sms/member/vip.png"
                _background.value = R.drawable.vip_black_background
                _color.value ="#A9A9AB"
                _phoneTextColor.value ="#F2F2F2"
                _memberStatusColor.value ="#AAAAAA"
            }else{
                _memberStatus.value = "未开通"
                _vipCover.value ="http://192.168.1.201:9000/sms/member/vip_no.png"
                _background.value =R.drawable.vip_white_background
                _color.value ="#A4A4A4"
                _phoneTextColor.value ="#37393B"
                _memberStatusColor.value ="#37393B"
            }
            // 头像
app/src/main/res/drawable/avatar.png

app/src/main/res/drawable/gift_one.png

app/src/main/res/layout/fragment_member_info_card.xml
@@ -52,6 +52,7 @@
                    android:layout_height="40dp"
                    android:gravity="center"
                    android:text="@{viewModel.phoneNumber}"
                    android:textColor="#F2F2F2"
                    app:layout_constraintStart_toEndOf="@id/memberAvatarView"
                    app:layout_constraintTop_toTopOf="parent" />
@@ -72,6 +73,7 @@
                    android:text="@{viewModel.memberStatus}"
                    android:layout_marginLeft="8dp"
                    android:padding="2dp"
                    android:textColor="#AAAAAA"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@id/memberAvatarView" />
app/src/main/res/mipmap/vip_free_member.png

app/src/main/res/xml/network_security_config.xml
@@ -6,6 +6,7 @@
        <domain includeSubdomains="true">192.168.1.198</domain>
        <domain includeSubdomains="true">192.168.1.199</domain>
        <domain includeSubdomains="true">192.168.1.201</domain>
        <domain includeSubdomains="true">14.103.144.28</domain>
        <!-- 可添加其他域名或IP(如192.168.0.101) -->
<!--        如果本地服务使用自签名证书,需在 network_security_config.xml 中信任该证书:-->
<!--        <trust-anchors>-->
keytool
public_cert.cer
Binary files differ
sms-manager.jks
Binary files differ