mirror of
https://github.com/pppscn/SmsForwarder
synced 2025-08-03 01:17:41 +08:00
parent
ccd98ab2da
commit
d8909ad676
@ -36,6 +36,8 @@ import com.idormy.sms.forwarder.utils.sdkinit.XBasicLibInit
|
||||
import com.idormy.sms.forwarder.utils.sdkinit.XUpdateInit
|
||||
import com.idormy.sms.forwarder.utils.tinker.TinkerLoadLibrary
|
||||
import com.king.location.LocationClient
|
||||
import com.xuexiang.xutil.file.FileUtils
|
||||
import frpclib.Frpclib
|
||||
import io.reactivex.Observable
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.disposables.Disposable
|
||||
@ -91,6 +93,9 @@ class App : Application(), CactusCallback, Configuration.Provider by Core {
|
||||
val LocationClient by lazy { LocationClient(context) }
|
||||
val Geocoder by lazy { Geocoder(context) }
|
||||
val DateFormat by lazy { SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()) }
|
||||
|
||||
//Frpclib是否已经初始化
|
||||
var FrpclibInited = false
|
||||
}
|
||||
|
||||
override fun attachBaseContext(base: Context) {
|
||||
@ -138,6 +143,7 @@ class App : Application(), CactusCallback, Configuration.Provider by Core {
|
||||
if (soFile.exists()) {
|
||||
try {
|
||||
TinkerLoadLibrary.installNativeLibraryPath(classLoader, soFile)
|
||||
FrpclibInited = FileUtils.isFileExists(filesDir.absolutePath + "/libs/libgojni.so") && FRPC_LIB_VERSION == Frpclib.getVersion()
|
||||
} catch (throwable: Throwable) {
|
||||
Log.e("APP", throwable.message.toString())
|
||||
}
|
||||
|
@ -63,7 +63,6 @@ import com.yarolegovich.slidingrootnav.SlideGravity
|
||||
import com.yarolegovich.slidingrootnav.SlidingRootNav
|
||||
import com.yarolegovich.slidingrootnav.SlidingRootNavBuilder
|
||||
import com.yarolegovich.slidingrootnav.callback.DragStateListener
|
||||
import frpclib.Frpclib
|
||||
import java.io.File
|
||||
|
||||
@Suppress("PrivatePropertyName", "unused", "DEPRECATION")
|
||||
@ -279,7 +278,7 @@ class MainActivity : BaseActivity<ActivityMainBinding?>(), DrawerAdapter.OnItemS
|
||||
POS_SERVER -> openNewPage(ServerFragment::class.java)
|
||||
POS_CLIENT -> openNewPage(ClientFragment::class.java)
|
||||
POS_FRPC -> {
|
||||
if (FileUtils.isFileExists(filesDir.absolutePath + "/libs/libgojni.so") && FRPC_LIB_VERSION == Frpclib.getVersion()) {
|
||||
if (App.FrpclibInited) {
|
||||
openNewPage(FrpcFragment::class.java)
|
||||
return
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ import android.view.ViewGroup
|
||||
import androidx.paging.PagingDataAdapter
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.idormy.sms.forwarder.App
|
||||
import com.idormy.sms.forwarder.R
|
||||
import com.idormy.sms.forwarder.adapter.FrpcPagingAdapter.MyViewHolder
|
||||
import com.idormy.sms.forwarder.database.entity.Frpc
|
||||
@ -31,7 +32,7 @@ class FrpcPagingAdapter(private val itemClickListener: OnItemClickListener) : Pa
|
||||
holder.binding.tvUid.text = "UID:${item.uid}"
|
||||
holder.binding.tvName.text = item.name
|
||||
|
||||
if (item.connecting || Frpclib.isRunning(item.uid)) {
|
||||
if (item.connecting || (App.FrpclibInited && Frpclib.isRunning(item.uid))) {
|
||||
holder.binding.ivPlay.setImageResource(R.drawable.ic_stop)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||
holder.binding.ivPlay.imageTintList = getColors(R.color.colorStop)
|
||||
|
@ -5,6 +5,7 @@ import androidx.room.ColumnInfo
|
||||
import androidx.room.Entity
|
||||
import androidx.room.Ignore
|
||||
import androidx.room.PrimaryKey
|
||||
import com.idormy.sms.forwarder.App
|
||||
import com.idormy.sms.forwarder.R
|
||||
import com.idormy.sms.forwarder.utils.STATUS_OFF
|
||||
import com.idormy.sms.forwarder.utils.STATUS_ON
|
||||
@ -34,6 +35,6 @@ data class Frpc(
|
||||
}
|
||||
|
||||
val status: Int
|
||||
get() = if (connecting || Frpclib.isRunning(uid)) STATUS_ON else STATUS_OFF
|
||||
get() = if (connecting || (App.FrpclibInited && Frpclib.isRunning(uid))) STATUS_ON else STATUS_OFF
|
||||
|
||||
}
|
@ -3,6 +3,7 @@ package com.idormy.sms.forwarder.fragment
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import com.idormy.sms.forwarder.App
|
||||
import com.idormy.sms.forwarder.R
|
||||
import com.idormy.sms.forwarder.core.BaseFragment
|
||||
import com.idormy.sms.forwarder.core.webview.AgentWebActivity
|
||||
@ -25,7 +26,6 @@ import com.xuexiang.xui.widget.actionbar.TitleBar
|
||||
import com.xuexiang.xui.widget.dialog.materialdialog.DialogAction
|
||||
import com.xuexiang.xui.widget.dialog.materialdialog.MaterialDialog
|
||||
import com.xuexiang.xui.widget.textview.supertextview.SuperTextView
|
||||
import com.xuexiang.xutil.file.FileUtils
|
||||
import frpclib.Frpclib
|
||||
import java.io.File
|
||||
import java.text.SimpleDateFormat
|
||||
@ -55,7 +55,7 @@ class AboutFragment : BaseFragment<FragmentAboutBinding?>(), SuperTextView.OnSup
|
||||
binding!!.menuVersion.setLeftString(String.format(resources.getString(R.string.about_app_version), AppUtils.getAppVersionName()))
|
||||
binding!!.menuCache.setLeftString(String.format(resources.getString(R.string.about_cache_size), CacheUtils.getTotalCacheSize(requireContext())))
|
||||
|
||||
if (FileUtils.isFileExists(context?.filesDir?.absolutePath + "/libs/libgojni.so")) {
|
||||
if (App.FrpclibInited) {
|
||||
binding!!.menuFrpc.setLeftString(String.format(resources.getString(R.string.about_frpc_version), Frpclib.getVersion()))
|
||||
binding!!.menuFrpc.visibility = View.VISIBLE
|
||||
}
|
||||
|
@ -9,6 +9,7 @@ import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.recyclerview.widget.RecyclerView.RecycledViewPool
|
||||
import com.alibaba.android.vlayout.VirtualLayoutManager
|
||||
import com.idormy.sms.forwarder.App
|
||||
import com.idormy.sms.forwarder.R
|
||||
import com.idormy.sms.forwarder.adapter.FrpcPagingAdapter
|
||||
import com.idormy.sms.forwarder.core.BaseFragment
|
||||
@ -21,6 +22,7 @@ import com.idormy.sms.forwarder.utils.EVENT_FRPC_DELETE_CONFIG
|
||||
import com.idormy.sms.forwarder.utils.EVENT_FRPC_RUNNING_ERROR
|
||||
import com.idormy.sms.forwarder.utils.EVENT_FRPC_RUNNING_SUCCESS
|
||||
import com.idormy.sms.forwarder.utils.EVENT_FRPC_UPDATE_CONFIG
|
||||
import com.idormy.sms.forwarder.utils.FRPC_LIB_VERSION
|
||||
import com.idormy.sms.forwarder.utils.FrpcUtils
|
||||
import com.idormy.sms.forwarder.utils.INTENT_FRPC_APPLY_FILE
|
||||
import com.idormy.sms.forwarder.utils.INTENT_FRPC_EDIT_FILE
|
||||
@ -144,6 +146,11 @@ class FrpcFragment : BaseFragment<FragmentFrpcsBinding?>(), FrpcPagingAdapter.On
|
||||
}
|
||||
|
||||
R.id.iv_play -> {
|
||||
if (!App.FrpclibInited) {
|
||||
XToastUtils.error(String.format(getString(R.string.frpclib_download_title), FRPC_LIB_VERSION))
|
||||
return
|
||||
}
|
||||
|
||||
if (!ForegroundService.isRunning) {
|
||||
val serviceIntent = Intent(requireContext(), ForegroundService::class.java)
|
||||
serviceIntent.action = "START"
|
||||
@ -189,6 +196,11 @@ class FrpcFragment : BaseFragment<FragmentFrpcsBinding?>(), FrpcPagingAdapter.On
|
||||
}
|
||||
|
||||
else -> {
|
||||
if (!App.FrpclibInited) {
|
||||
XToastUtils.error(String.format(getString(R.string.frpclib_download_title), FRPC_LIB_VERSION))
|
||||
return
|
||||
}
|
||||
|
||||
//编辑或删除需要先停止客户端
|
||||
if (Frpclib.isRunning(item.uid)) {
|
||||
XToastUtils.warning(R.string.tipServiceRunning)
|
||||
|
@ -12,6 +12,7 @@ import androidx.core.app.NotificationCompat
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.work.OneTimeWorkRequestBuilder
|
||||
import androidx.work.WorkManager
|
||||
import com.idormy.sms.forwarder.App
|
||||
import com.idormy.sms.forwarder.R
|
||||
import com.idormy.sms.forwarder.activity.MainActivity
|
||||
import com.idormy.sms.forwarder.core.Core
|
||||
@ -20,7 +21,6 @@ import com.idormy.sms.forwarder.utils.task.CronJobScheduler
|
||||
import com.idormy.sms.forwarder.workers.LoadAppListWorker
|
||||
import com.jeremyliao.liveeventbus.LiveEventBus
|
||||
import com.xuexiang.xutil.XUtil
|
||||
import com.xuexiang.xutil.file.FileUtils
|
||||
import frpclib.Frpclib
|
||||
import io.reactivex.Single
|
||||
import io.reactivex.SingleObserver
|
||||
@ -41,9 +41,8 @@ class ForegroundService : Service() {
|
||||
|
||||
private val compositeDisposable = CompositeDisposable()
|
||||
private val frpcObserver = Observer { uid: String ->
|
||||
if (Frpclib.isRunning(uid)) {
|
||||
return@Observer
|
||||
}
|
||||
if (!App.FrpclibInited || Frpclib.isRunning(uid)) return@Observer
|
||||
|
||||
Core.frpc.get(uid).flatMap { (uid1, _, config) ->
|
||||
val error = Frpclib.runContent(uid1, config)
|
||||
Single.just(error)
|
||||
@ -147,7 +146,7 @@ class ForegroundService : Service() {
|
||||
}
|
||||
|
||||
//启动 Frpc
|
||||
if (FileUtils.isFileExists(filesDir.absolutePath + "/libs/libgojni.so")) {
|
||||
if (App.FrpclibInited) {
|
||||
//监听Frpc启动指令
|
||||
LiveEventBus.get(INTENT_FRPC_APPLY_FILE, String::class.java).observeStickyForever(frpcObserver)
|
||||
//自启动的Frpc
|
||||
|
@ -13,7 +13,6 @@ import com.idormy.sms.forwarder.server.model.SmsSendData
|
||||
import com.idormy.sms.forwarder.service.HttpServerService
|
||||
import com.xuexiang.xrouter.utils.TextUtils
|
||||
import com.xuexiang.xutil.XUtil
|
||||
import com.xuexiang.xutil.file.FileUtils
|
||||
import com.xuexiang.xutil.system.DeviceUtils
|
||||
import frpclib.Frpclib
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@ -43,7 +42,7 @@ class SmsCommandUtils {
|
||||
val param = if (cmdList.count() > 2) cmdList[2] else ""
|
||||
when (function) {
|
||||
"frpc" -> {
|
||||
if (!FileUtils.isFileExists(context.filesDir?.absolutePath + "/libs/libgojni.so")) {
|
||||
if (!App.FrpclibInited) {
|
||||
Log.d(TAG, "还未下载Frpc库")
|
||||
return false
|
||||
}
|
||||
|
@ -48,7 +48,6 @@ import com.idormy.sms.forwarder.utils.TaskWorker
|
||||
import com.jeremyliao.liveeventbus.LiveEventBus
|
||||
import com.xuexiang.xrouter.utils.TextUtils
|
||||
import com.xuexiang.xutil.XUtil
|
||||
import com.xuexiang.xutil.file.FileUtils
|
||||
import com.xuexiang.xutil.resource.ResUtils.getString
|
||||
import frpclib.Frpclib
|
||||
import java.util.Calendar
|
||||
@ -193,7 +192,7 @@ class ActionWorker(context: Context, params: WorkerParameters) : CoroutineWorker
|
||||
}
|
||||
|
||||
TASK_ACTION_FRPC -> {
|
||||
if (!FileUtils.isFileExists(App.context.filesDir?.absolutePath + "/libs/libgojni.so")) {
|
||||
if (!App.FrpclibInited) {
|
||||
writeLog("还未下载Frpc库")
|
||||
continue
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user