From af898c7a3fedb56ea8026a8fc37128157294fda9 Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Wed, 8 Jun 2022 14:38:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E7=BA=AF=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=E6=A8=A1=E5=BC=8F=EF=BC=88=E5=90=AF=E5=8A=A8?= =?UTF-8?q?APP=E6=97=B6=E7=9B=B4=E6=8E=A5=E8=BF=9B=E5=85=A5=E4=B8=BB?= =?UTF-8?q?=E5=8A=A8=E6=8E=A7=E5=88=B6=C2=B7=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../main/java/com/idormy/sms/forwarder/App.kt | 9 +- .../sms/forwarder/activity/ClientActivity.kt | 14 ++ .../sms/forwarder/activity/LoginActivity.kt | 28 --- .../sms/forwarder/activity/SplashActivity.kt | 22 +- .../sms/forwarder/fragment/ClientFragment.kt | 16 +- .../sms/forwarder/fragment/LoginFragment.kt | 170 ---------------- .../forwarder/fragment/SettingsFragment.kt | 23 +++ .../sms/forwarder/receiver/BootReceiver.kt | 4 + .../forwarder/receiver/PhoneStateReceiver.kt | 3 + .../sms/forwarder/receiver/SmsReceiver.kt | 3 + .../sms/forwarder/service/BatteryService.kt | 11 +- .../forwarder/service/ForegroundService.kt | 10 + .../sms/forwarder/service/HttpService.kt | 9 + .../sms/forwarder/service/NotifyService.kt | 6 + .../idormy/sms/forwarder/utils/Constants.kt | 1 + .../sms/forwarder/utils/SettingUtils.kt | 8 + .../idormy/sms/forwarder/utils/TokenUtils.kt | 85 -------- .../forwarder/utils/sdkinit/XBasicLibInit.kt | 2 - .../utils/sender/WeworkAgentUtils.kt | 5 +- app/src/main/res/drawable/ic_logout.xml | 5 + app/src/main/res/layout/fragment_login.xml | 191 ------------------ app/src/main/res/layout/fragment_settings.xml | 34 ++++ app/src/main/res/values-en/strings.xml | 4 + app/src/main/res/values/strings.xml | 4 + 25 files changed, 166 insertions(+), 503 deletions(-) create mode 100644 app/src/main/java/com/idormy/sms/forwarder/activity/ClientActivity.kt delete mode 100644 app/src/main/java/com/idormy/sms/forwarder/activity/LoginActivity.kt delete mode 100644 app/src/main/java/com/idormy/sms/forwarder/fragment/LoginFragment.kt delete mode 100644 app/src/main/java/com/idormy/sms/forwarder/utils/TokenUtils.kt create mode 100644 app/src/main/res/drawable/ic_logout.xml delete mode 100644 app/src/main/res/layout/fragment_login.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b86a8d5d..53359301 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -100,7 +100,7 @@ android:screenOrientation="portrait" android:windowSoftInputMode="adjustPan|stateHidden" /> = Build.VERSION_CODES.O) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/activity/ClientActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/activity/ClientActivity.kt new file mode 100644 index 00000000..abb47645 --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/activity/ClientActivity.kt @@ -0,0 +1,14 @@ +package com.idormy.sms.forwarder.activity + +import android.os.Bundle +import androidx.viewbinding.ViewBinding +import com.idormy.sms.forwarder.core.BaseActivity +import com.idormy.sms.forwarder.fragment.ClientFragment + +class ClientActivity : BaseActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + openPage(ClientFragment::class.java) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/activity/LoginActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/activity/LoginActivity.kt deleted file mode 100644 index 153744a4..00000000 --- a/app/src/main/java/com/idormy/sms/forwarder/activity/LoginActivity.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.idormy.sms.forwarder.activity - -import android.os.Bundle -import android.view.KeyEvent -import androidx.viewbinding.ViewBinding -import com.idormy.sms.forwarder.core.BaseActivity -import com.idormy.sms.forwarder.fragment.LoginFragment -import com.xuexiang.xui.utils.KeyboardUtils -import com.xuexiang.xui.utils.StatusBarUtils -import com.xuexiang.xutil.display.Colors - -class LoginActivity : BaseActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - openPage(LoginFragment::class.java, intent.extras) - } - - override val isSupportSlideBack: Boolean - get() = false - - override fun initStatusBarStyle() { - StatusBarUtils.initStatusBarStyle(this, false, Colors.WHITE) - } - - override fun onKeyDown(keyCode: Int, event: KeyEvent): Boolean { - return KeyboardUtils.onDisableBackKeyDown(keyCode) && super.onKeyDown(keyCode, event) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/activity/SplashActivity.kt b/app/src/main/java/com/idormy/sms/forwarder/activity/SplashActivity.kt index 4c1cac6b..a769a4c6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/activity/SplashActivity.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/activity/SplashActivity.kt @@ -6,6 +6,7 @@ import android.view.KeyEvent import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.utils.CommonUtils.Companion.showPrivacyDialog import com.idormy.sms.forwarder.utils.MMKVUtils +import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils.Companion.isAgreePrivacy import com.idormy.sms.forwarder.utils.SettingUtils.Companion.isFirstOpen import com.xuexiang.xui.utils.KeyboardUtils @@ -44,29 +45,22 @@ class SplashActivity : BaseSplashActivity(), CancelAdapt { } if (isAgreePrivacy) { - loginOrGoMainPage() + whereToJump() } else { showPrivacyDialog(this) { dialog: MaterialDialog, _: DialogAction? -> dialog.dismiss() isAgreePrivacy = true - loginOrGoMainPage() + whereToJump() } } } - private fun loginOrGoMainPage() { - /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && SettingUtils.enableExcludeFromRecents) { - val intent = Intent(App.context, if (hasToken()) MainActivity::class.java else LoginActivity::class.java) - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) - App.context.startActivity(intent) + private fun whereToJump() { + if (SettingUtils.enablePureClientMode) { + ActivityUtils.startActivity(ClientActivity::class.java) } else { - if (hasToken()) { - ActivityUtils.startActivity(MainActivity::class.java) - } else { - ActivityUtils.startActivity(LoginActivity::class.java) - } - }*/ - ActivityUtils.startActivity(MainActivity::class.java) + ActivityUtils.startActivity(MainActivity::class.java) + } finish() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt index 450db704..9d690c03 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/ClientFragment.kt @@ -32,6 +32,7 @@ import com.xuexiang.xui.utils.DensityUtils import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.WidgetUtils import com.xuexiang.xui.widget.actionbar.TitleBar +import com.xuexiang.xutil.XUtil @Suppress("PrivatePropertyName", "PropertyName") @Page(name = "主动控制·客户端") @@ -69,7 +70,20 @@ class ClientFragment : BaseFragment(), override fun initTitle(): TitleBar? { val titleBar = super.initTitle()!!.setImmersive(false) - titleBar.setTitle(R.string.menu_client) + //纯客户端模式 + if (SettingUtils.enablePureClientMode) { + titleBar.setTitle(R.string.app_name).setSubTitle(getString(R.string.menu_client)).disableLeftView() + titleBar.addAction(object : TitleBar.ImageAction(R.drawable.ic_logout) { + @SingleClick + override fun performAction(view: View) { + XToastUtils.success(getString(R.string.exit_pure_client_mode)) + SettingUtils.enablePureClientMode = false + XUtil.exitApp() + } + }) + } else { + titleBar.setTitle(R.string.menu_client) + } return titleBar } diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/LoginFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/LoginFragment.kt deleted file mode 100644 index fe830cac..00000000 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/LoginFragment.kt +++ /dev/null @@ -1,170 +0,0 @@ -package com.idormy.sms.forwarder.fragment - -import android.graphics.Color -import android.util.Log -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.CompoundButton -import com.idormy.sms.forwarder.R -import com.idormy.sms.forwarder.activity.MainActivity -import com.idormy.sms.forwarder.core.BaseFragment -import com.idormy.sms.forwarder.databinding.FragmentLoginBinding -import com.idormy.sms.forwarder.utils.CommonUtils.Companion.gotoProtocol -import com.idormy.sms.forwarder.utils.CommonUtils.Companion.showPrivacyDialog -import com.idormy.sms.forwarder.utils.RandomUtils.Companion.getRandomNumbersAndLetters -import com.idormy.sms.forwarder.utils.SettingUtils -import com.idormy.sms.forwarder.utils.SettingUtils.Companion.isAgreePrivacy -import com.idormy.sms.forwarder.utils.TokenUtils.Companion.handleLoginSuccess -import com.idormy.sms.forwarder.utils.XToastUtils -import com.idormy.sms.forwarder.utils.sdkinit.UMengInit -import com.xuexiang.xaop.annotation.SingleClick -import com.xuexiang.xpage.annotation.Page -import com.xuexiang.xpage.enums.CoreAnim -import com.xuexiang.xui.utils.CountDownButtonHelper -import com.xuexiang.xui.utils.ResUtils -import com.xuexiang.xui.utils.ThemeUtils -import com.xuexiang.xui.utils.ViewUtils -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.xutil.app.ActivityUtils - -/** - * 登录页面 - * - * @author xuexiang - * @since 2019-11-17 22:15 - */ -@Page(anim = CoreAnim.none) -class LoginFragment : BaseFragment(), View.OnClickListener { - - private var mJumpView: View? = null - private var mCountDownHelper: CountDownButtonHelper? = null - override fun viewBindingInflate( - inflater: LayoutInflater, - container: ViewGroup, - ): FragmentLoginBinding { - return FragmentLoginBinding.inflate(inflater, container, false) - } - - override fun initTitle(): TitleBar? { - val titleBar = super.initTitle() - titleBar?.run { - setImmersive(true) - setBackgroundColor(Color.TRANSPARENT) - setTitle("") - setLeftImageDrawable(ResUtils.getVectorDrawable(context, R.drawable.ic_login_close)) - setActionTextColor(ThemeUtils.resolveColor(context, R.attr.colorAccent)) - mJumpView = addAction(object : TitleBar.TextAction(R.string.title_jump_login) { - override fun performAction(view: View) { - onLoginSuccess() - } - }) - } - return titleBar - } - - override fun initViews() { - mCountDownHelper = CountDownButtonHelper(binding!!.btnGetVerifyCode, 60) - //隐私政策弹窗 - if (!isAgreePrivacy) { - showPrivacyDialog(requireContext()) { dialog: MaterialDialog, _: DialogAction? -> - dialog.dismiss() - handleSubmitPrivacy() - } - } - val isAgreePrivacy = isAgreePrivacy - binding!!.cbProtocol.isChecked = isAgreePrivacy - refreshButton(isAgreePrivacy) - binding!!.cbProtocol.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> - SettingUtils.isAgreePrivacy = isChecked - refreshButton(isChecked) - } - } - - override fun initListeners() { - binding!!.btnGetVerifyCode.setOnClickListener(this) - binding!!.btnLogin.setOnClickListener(this) - binding!!.tvOtherLogin.setOnClickListener(this) - binding!!.tvForgetPassword.setOnClickListener(this) - binding!!.tvUserProtocol.setOnClickListener(this) - binding!!.tvPrivacyProtocol.setOnClickListener(this) - } - - private fun refreshButton(isChecked: Boolean) { - ViewUtils.setEnabled(binding!!.btnLogin, isChecked) - ViewUtils.setEnabled(mJumpView, isChecked) - } - - private fun handleSubmitPrivacy() { - isAgreePrivacy = true - UMengInit.init() - // 应用市场不让默认勾选 -// ViewUtils.setChecked(cbProtocol, true); - } - - @SingleClick - override fun onClick(v: View) { - val id = v.id - if (id == R.id.btn_get_verify_code) { - if (binding!!.etPhoneNumber.validate()) { - getVerifyCode(binding!!.etPhoneNumber.editValue) - } - } else if (id == R.id.btn_login) { - if (binding!!.etPhoneNumber.validate()) { - if (binding!!.etVerifyCode.validate()) { - loginByVerifyCode( - binding!!.etPhoneNumber.editValue, - binding!!.etVerifyCode.editValue - ) - } - } - } else if (id == R.id.tv_other_login) { - XToastUtils.info("其他登录方式") - } else if (id == R.id.tv_forget_password) { - XToastUtils.info("忘记密码") - } else if (id == R.id.tv_user_protocol) { - gotoProtocol(this, isPrivacy = false, isImmersive = true) - } else if (id == R.id.tv_privacy_protocol) { - gotoProtocol(this, isPrivacy = true, isImmersive = true) - } - } - - /** - * 获取验证码 - */ - private fun getVerifyCode(phoneNumber: String) { - // TODO: 2020/8/29 这里只是界面演示而已 - XToastUtils.warning("只是演示,验证码请随便输 phoneNumber=$phoneNumber") - mCountDownHelper!!.start() - } - - /** - * 根据验证码登录 - * - * @param phoneNumber 手机号 - * @param verifyCode 验证码 - */ - private fun loginByVerifyCode(phoneNumber: String, verifyCode: String) { - // TODO: 2020/8/29 这里只是界面演示而已 - Log.d("loginByVerifyCode", "phoneNumber=$phoneNumber, verifyCode=$verifyCode") - onLoginSuccess() - } - - /** - * 登录成功的处理 - */ - private fun onLoginSuccess() { - val token = getRandomNumbersAndLetters(16) - if (handleLoginSuccess(token)) { - popToBack() - ActivityUtils.startActivity(MainActivity::class.java) - } - } - - override fun onDestroyView() { - if (mCountDownHelper != null) mCountDownHelper!!.recycle() - super.onDestroyView() - } -} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt index 3aef2474..65317b06 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/fragment/SettingsFragment.kt @@ -42,11 +42,13 @@ import com.xuexiang.xui.widget.picker.XRangeSlider import com.xuexiang.xui.widget.picker.XRangeSlider.OnRangeSliderListener import com.xuexiang.xui.widget.picker.XSeekBar import com.xuexiang.xui.widget.picker.widget.builder.TimePickerBuilder +import com.xuexiang.xutil.XUtil import com.xuexiang.xutil.XUtil.getPackageManager import com.xuexiang.xutil.app.AppUtils.getAppPackageName import com.xuexiang.xutil.data.DateUtils import java.util.* + @Suppress("PropertyName", "SpellCheckingInspection") @Page(name = "通用设置") class SettingsFragment : BaseFragment(), View.OnClickListener { @@ -121,6 +123,9 @@ class SettingsFragment : BaseFragment(), View.OnClickL //帮助提示 switchHelpTip(binding!!.sbHelpTip) + + //纯客户端模式 + switchDirectlyToClient(binding!!.sbDirectlyToClient) } override fun initListeners() { @@ -693,6 +698,24 @@ class SettingsFragment : BaseFragment(), View.OnClickL } } + //纯客户端模式 + private fun switchDirectlyToClient(@SuppressLint("UseSwitchCompatOrMaterialCode") switchDirectlyToClient: SwitchButton) { + switchDirectlyToClient.isChecked = SettingUtils.enablePureClientMode + switchDirectlyToClient.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean -> + SettingUtils.enablePureClientMode = isChecked + if (isChecked) { + MaterialDialog.Builder(requireContext()) + .content(getString(R.string.enabling_pure_client_mode)) + .positiveText(R.string.lab_yes) + .onPositive { _: MaterialDialog?, _: DialogAction? -> + XUtil.exitApp() + } + .negativeText(R.string.lab_no) + .show() + } + } + } + //获取当前手机品牌 private fun getAutoStartTips(): String { return when (Build.BRAND.lowercase(Locale.ROOT)) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/BootReceiver.kt b/app/src/main/java/com/idormy/sms/forwarder/receiver/BootReceiver.kt index 6bf9a02d..da74601b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/BootReceiver.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/BootReceiver.kt @@ -7,6 +7,7 @@ import android.os.Build import android.util.Log import com.idormy.sms.forwarder.activity.SplashActivity import com.idormy.sms.forwarder.service.ForegroundService +import com.idormy.sms.forwarder.utils.SettingUtils @Suppress("PropertyName") class BootReceiver : BroadcastReceiver() { @@ -22,6 +23,9 @@ class BootReceiver : BroadcastReceiver() { i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) context.startActivity(i) + //纯客户端模式 + if (SettingUtils.enablePureClientMode) return + //前台服务 val frontServiceIntent = Intent(context, ForegroundService::class.java) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.kt b/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.kt index fdba8c13..cf42e762 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.kt @@ -30,6 +30,9 @@ class PhoneStateReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { try { + //纯客户端模式 + if (SettingUtils.enablePureClientMode) return + //总开关 if (!SettingUtils.enablePhone) return diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsReceiver.kt b/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsReceiver.kt index ef5023d4..bd207b3b 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsReceiver.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/SmsReceiver.kt @@ -28,6 +28,9 @@ class SmsReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { try { + //纯客户端模式 + if (SettingUtils.enablePureClientMode) return + //总开关 if (!SettingUtils.enableSms) return diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.kt b/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.kt index 180adee3..21be321c 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/service/BatteryService.kt @@ -31,8 +31,8 @@ class BatteryService : Service() { super.onCreate() Log.i(TAG, "onCreate--------------") - //是否同意隐私协议 - //if (!MyApplication.allowPrivacyPolicy) return + //纯客户端模式 + //if (SettingUtils.enablePureClientMode) return val batteryFilter = IntentFilter() batteryFilter.addAction(Intent.ACTION_BATTERY_CHANGED) @@ -41,15 +41,16 @@ class BatteryService : Service() { override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { Log.i(TAG, "onStartCommand--------------") - return START_STICKY // + return START_STICKY } override fun onDestroy() { Log.i(TAG, "onDestroy--------------") super.onDestroy() - //是否同意隐私协议 - //if (!MyApplication.allowPrivacyPolicy) return + //纯客户端模式 + //if (SettingUtils.enablePureClientMode) return + unregisterReceiver(batteryReceiver) } diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt b/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt index df871296..0affdce6 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/service/ForegroundService.kt @@ -72,6 +72,10 @@ class ForegroundService : Service() { override fun onCreate() { super.onCreate() + + //纯客户端模式 + if (SettingUtils.enablePureClientMode) return + notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager startForeground(FRONT_NOTIFY_ID, createForegroundNotification()) isRunning = true @@ -108,6 +112,12 @@ class ForegroundService : Service() { } override fun onDestroy() { + //纯客户端模式 + if (SettingUtils.enablePureClientMode) { + super.onDestroy() + return + } + stopForeground(true) compositeDisposable.dispose() isRunning = false diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/HttpService.kt b/app/src/main/java/com/idormy/sms/forwarder/service/HttpService.kt index d27a895c..942003b5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/HttpService.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/service/HttpService.kt @@ -6,6 +6,7 @@ import android.os.IBinder import android.util.Log import com.idormy.sms.forwarder.utils.HTTP_SERVER_PORT import com.idormy.sms.forwarder.utils.HTTP_SERVER_TIME_OUT +import com.idormy.sms.forwarder.utils.SettingUtils import com.yanzhenjie.andserver.AndServer import com.yanzhenjie.andserver.Server import java.util.concurrent.TimeUnit @@ -28,6 +29,10 @@ class HttpService : Service(), Server.ServerListener { override fun onCreate() { super.onCreate() + + //纯客户端模式 + if (SettingUtils.enablePureClientMode) return + Log.i(TAG, "onCreate: ") server.startup() } @@ -39,6 +44,10 @@ class HttpService : Service(), Server.ServerListener { override fun onDestroy() { super.onDestroy() + + //纯客户端模式 + if (SettingUtils.enablePureClientMode) return + Log.i(TAG, "onDestroy: ") server.shutdown() } diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.kt b/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.kt index 9ec6ffcf..4d50fec1 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/service/NotifyService.kt @@ -40,6 +40,9 @@ class NotifyService : NotificationListenerService()/*, LifecycleOwner*/ { } override fun onListenerDisconnected() { + //纯客户端模式 + if (SettingUtils.enablePureClientMode) return + //总开关 if (!SettingUtils.enableAppNotify) return @@ -51,6 +54,9 @@ class NotifyService : NotificationListenerService()/*, LifecycleOwner*/ { override fun onNotificationPosted(sbn: StatusBarNotification?) { try { + //纯客户端模式 + if (SettingUtils.enablePureClientMode) return + //总开关 if (!SettingUtils.enableAppNotify) return diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt index 663fa3af..35ddc3df 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Constants.kt @@ -63,6 +63,7 @@ const val SP_ENABLE_SMS_TEMPLATE = "enable_sms_template" const val SP_SMS_TEMPLATE = "sms_template" const val SP_ENABLE_HELP_TIP = "enable_help_tip" +const val SP_PURE_CLIENT_MODE = "enable_pure_client_mode" const val CACTUS_TIMER = "cactus_timer" const val CACTUS_LAST_TIMER = "cactus_last_timer" diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt index 59d9c3e5..73d581a9 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtils.kt @@ -268,6 +268,14 @@ class SettingUtils private constructor() { set(enableHelpTip) { MMKVUtils.put(SP_ENABLE_HELP_TIP, enableHelpTip) } + + //是否纯客户端模式 + @JvmStatic + var enablePureClientMode: Boolean + get() = MMKVUtils.getBoolean(SP_PURE_CLIENT_MODE, false) + set(enablePureClientMode) { + MMKVUtils.put(SP_PURE_CLIENT_MODE, enablePureClientMode) + } } init { diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/TokenUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/TokenUtils.kt deleted file mode 100644 index e5258db6..00000000 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/TokenUtils.kt +++ /dev/null @@ -1,85 +0,0 @@ -package com.idormy.sms.forwarder.utils - -import android.content.Context -import com.idormy.sms.forwarder.R -import com.umeng.analytics.MobclickAgent -import com.xuexiang.xui.utils.ResUtils -import com.xuexiang.xutil.app.ActivityUtils -import com.xuexiang.xutil.common.StringUtils - -/** - * Token管理工具 - * - * @author xuexiang - * @since 2019-11-17 22:37 - */ -@Suppress("unused") -class TokenUtils private constructor() { - companion object { - private var sToken: String? = null - private const val KEY_TOKEN = "KEY_TOKEN" - private const val KEY_PROFILE_CHANNEL = "github" - - /** - * 初始化Token信息 - */ - @JvmStatic - fun init(context: Context) { - MMKVUtils.init(context) - sToken = MMKVUtils.getString(KEY_TOKEN, "") - } - - private fun clearToken() { - sToken = null - MMKVUtils.remove(KEY_TOKEN) - } - - var token: String? - get() = sToken - set(token) { - sToken = token - MMKVUtils.put(KEY_TOKEN, token) - } - - @JvmStatic - fun hasToken(): Boolean { - return MMKVUtils.containsKey(KEY_TOKEN) - } - - /** - * 处理登录成功的事件 - * - * @param token 账户信息 - */ - @JvmStatic - fun handleLoginSuccess(token: String?): Boolean { - return if (!StringUtils.isEmpty(token)) { - XToastUtils.success(ResUtils.getString(R.string.login_succeeded)) - MobclickAgent.onProfileSignIn(KEY_PROFILE_CHANNEL, token) - Companion.token = token - true - } else { - XToastUtils.error(ResUtils.getString(R.string.login_failed)) - false - } - } - - /** - * 处理登出的事件 - */ - @JvmStatic - fun handleLogoutSuccess() { - MobclickAgent.onProfileSignOff() - //登出时,清除账号信息 - clearToken() - XToastUtils.success(ResUtils.getString(R.string.logout_succeeded)) - SettingUtils.isAgreePrivacy = false - //跳转到登录页 - ActivityUtils.startActivity(com.idormy.sms.forwarder.activity.LoginActivity::class.java) - } - } - - init { - throw UnsupportedOperationException("u can't instantiate me...") - } -} \ No newline at end of file diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sdkinit/XBasicLibInit.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sdkinit/XBasicLibInit.kt index e29796cc..2e640948 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sdkinit/XBasicLibInit.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sdkinit/XBasicLibInit.kt @@ -2,7 +2,6 @@ package com.idormy.sms.forwarder.utils.sdkinit import android.app.Application import com.idormy.sms.forwarder.core.BaseActivity -import com.idormy.sms.forwarder.utils.TokenUtils import com.idormy.sms.forwarder.utils.XToastUtils import com.xuexiang.xaop.XAOP import com.xuexiang.xhttp2.XHttpSDK @@ -49,7 +48,6 @@ class XBasicLibInit private constructor() { private fun initXUtil(application: Application) { XUtil.init(application) XUtil.debug(com.idormy.sms.forwarder.App.isDebug) - TokenUtils.init(application) } /** diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt index c8ddb332..3f75e9cb 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/sender/WeworkAgentUtils.kt @@ -17,7 +17,6 @@ import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.cache.model.CacheMode import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.exception.ApiException -import com.xuexiang.xui.utils.ResUtils import com.xuexiang.xui.utils.ResUtils.getString @Suppress("PrivatePropertyName", "UNUSED_PARAMETER") @@ -122,10 +121,10 @@ class WeworkAgentUtils private constructor() { val resp = Gson().fromJson(response, DingtalkResult::class.java) if (resp.errcode == 0L) { SendUtils.updateLogs(logId, 2, response) - XToastUtils.success(ResUtils.getString(R.string.request_succeeded)) + XToastUtils.success(getString(R.string.request_succeeded)) } else { SendUtils.updateLogs(logId, 0, response) - XToastUtils.error(ResUtils.getString(R.string.request_failed) + response) + XToastUtils.error(getString(R.string.request_failed) + response) } } diff --git a/app/src/main/res/drawable/ic_logout.xml b/app/src/main/res/drawable/ic_logout.xml new file mode 100644 index 00000000..5f818ab1 --- /dev/null +++ b/app/src/main/res/drawable/ic_logout.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml deleted file mode 100644 index e1a543b7..00000000 --- a/app/src/main/res/layout/fragment_login.xml +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 075ca356..b86de40b 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -1141,6 +1141,40 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 9c4d4f5e..3bb09610 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -852,4 +852,8 @@ Service Address E.g: http://127.0.0.1:5000 Features List + Directly To Client + When starting the APP, it will directly enter the active control client + Exit pure client mode + Do you want to quit the app immediately and start it manually to take effect in pure client mode? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6b44ea8f..4e284e4d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -853,4 +853,8 @@ 服务地址 例如:http://127.0.0.1:5000 功能列表 + 纯客户端模式 + 启动APP时直接进入主动控制·客户端 + 退出纯客户端模式 + 是否立即退出App后手动启动,以生效纯客户端模式?