@@ -7,19 +7,16 @@ import android.os.Bundle
77import android.os.Handler
88import android.os.Looper
99import android.util.Log
10- import android.view.LayoutInflater
11- import android.view.View
12- import android.view.ViewGroup
10+ import android.view.*
1311import android.widget.ScrollView
1412import androidx.core.content.res.ResourcesCompat
1513import androidx.fragment.app.Fragment
1614import androidx.navigation.findNavController
1715import com.dashboard.kotlin.clashhelper.ClashConfig
1816import com.dashboard.kotlin.clashhelper.ClashStatus
1917import com.dashboard.kotlin.clashhelper.commandhelper
20- import com.dashboard.kotlin.suihelper.suihelper
18+ import com.dashboard.kotlin.suihelper.SuiHelper
2119import kotlinx.android.synthetic.main.fragment_main_page.*
22- import kotlinx.android.synthetic.main.toolbar.*
2320import kotlinx.coroutines.*
2421import org.json.JSONObject
2522import java.io.File
@@ -42,14 +39,40 @@ class MainPage : Fragment() {
4239
4340 private val clashStatusClass = ClashStatus ()
4441
42+ override fun onCreate (savedInstanceState : Bundle ? ) {
43+ super .onCreate(savedInstanceState)
44+ setHasOptionsMenu(true )
45+ }
46+
47+ override fun onCreateOptionsMenu (menu : Menu , inflater : MenuInflater ) {
48+ Log .e(" www1" , " onCreateOptionsMenu: " , )
49+ inflater.inflate(R .menu.menu_restart, menu)
50+ }
51+
4552 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
4653 super .onViewCreated(view, savedInstanceState)
4754 Log .d(" ViewCreated" , " MainPageViewCreated" )
4855
49- toolbar.title = getString(R .string.app_name)
56+ mToolbar.setOnMenuItemClickListener {
57+ when (it.itemId){
58+ R .id.menu_restart -> {
59+ if ((clash_status_text.text == getText(R .string.clash_charging))
60+ || (clash_status_text.text == getText(R .string.sui_disable)))
61+ return @setOnMenuItemClickListener true
62+
63+ setStatusCmdRunning()
64+ GlobalScope .async {
65+ doAssestsShellFile(" CFM_Restart.sh" )
66+ }
67+ }
68+ else -> return @setOnMenuItemClickListener false
69+ }
70+ true
71+ }
72+
5073 // TODO 添加 app 图标
5174
52- if (! suihelper .checkPermission()) {
75+ if (! SuiHelper .checkPermission()) {
5376 clash_status.setCardBackgroundColor(
5477 ResourcesCompat .getColor(resources, R .color.error, context?.theme)
5578 )
@@ -65,7 +88,7 @@ class MainPage : Fragment() {
6588
6689 GlobalScope .async {
6790 while (true ) {
68- if (suihelper .checkPermission(request = false )) {
91+ if (SuiHelper .checkPermission(request = false )) {
6992 restartApp()
7093 break
7194 }
@@ -74,11 +97,40 @@ class MainPage : Fragment() {
7497 }
7598
7699 } else {
77- if (ClashStatus ().runStatus()) {
78- setStatusRunning()
79- } else {
80- setStatusStopped()
81- }
100+
101+ // 这是一段屎一样的代码
102+ clashV = SuiHelper .suCmd(" ${ClashConfig .corePath} -v" )
103+ cmd_result.text = " $clashV${SuiHelper .suCmd(" cat ${ClashConfig .clashPath} /run/run.logs 2> /dev/null" )} "
104+ timer = Timer ()
105+ timer.schedule(object : TimerTask () {
106+ override fun run () {
107+ val log = SuiHelper .suCmd(" cat ${ClashConfig .clashPath} /run/run.logs 2> /dev/null" )
108+ val cmdRunning = SuiHelper .suCmd(
109+ " if [ -f ${ClashConfig .clashPath} /run/cmdRunning ];then\n echo 'true'\n else\n echo 'false'\n fi" )
110+ // "cat ${ClashConfig.clashPath}/run/cmdRunning 2>&1")
111+ handler.post{
112+
113+ cmd_result.let {
114+ if (clash_status_text?.text == getString(R .string.clash_charging))
115+ it.text = " $clashV$log "
116+
117+ kotlin.runCatching {
118+ when {
119+ cmdRunning == " true\n " -> {
120+ setStatusCmdRunning()
121+ }
122+ ClashStatus ().runStatus() -> {
123+ setStatusRunning()
124+ }
125+ else ->
126+ setStatusStopped()
127+ }
128+ }
129+ }
130+
131+ }
132+ }
133+ },0 , 300 )
82134 }
83135
84136 clash_status.setOnClickListener {
@@ -125,38 +177,6 @@ class MainPage : Fragment() {
125177 it.findNavController().navigate(R .id.action_manPage_to_settingPage)
126178 }
127179
128- // 这是一段屎一样的代码
129- clashV = suihelper.suCmd(" ${ClashConfig .corePath} -v" )
130- cmd_result.text = " $clashV${suihelper.suCmd(" cat ${ClashConfig .clashPath} /run/run.logs 2> /dev/null" )} "
131- timer = Timer ()
132- timer.schedule(object : TimerTask () {
133- override fun run () {
134- val log = suihelper.suCmd(" cat ${ClashConfig .clashPath} /run/run.logs 2> /dev/null" )
135- val cmdRunning = suihelper.suCmd(" cat ${ClashConfig .clashPath} /run/cmdRunning 2>&1" )
136- handler.post{
137-
138- cmd_result.let {
139- if (clash_status_text?.text == getString(R .string.clash_charging))
140- it.text = " $clashV$log "
141-
142- kotlin.runCatching {
143- when {
144- cmdRunning == " " -> {
145- setStatusCmdRunning()
146- scrollView.fullScroll(ScrollView .FOCUS_DOWN )
147- }
148- ClashStatus ().runStatus() ->
149- setStatusRunning()
150- else ->
151- setStatusStopped()
152- }
153- }
154- }
155-
156- }
157- }
158- },0 , 300 )
159-
160180 }
161181
162182 override fun onDestroyView () {
@@ -181,12 +201,11 @@ class MainPage : Fragment() {
181201 fo.outputStream().let { ip ->
182202 op.copyTo(ip)
183203 }
184-
185204 if ((Build .VERSION .SDK_INT == Build .VERSION_CODES .R ) and (ClashConfig .scriptsPath == " /data/adb/modules/Clash_For_Magisk/scripts" )) {
186- suihelper .suCmd(" sh '${context?.externalCacheDir} /${fileName} ' ${ClashConfig .scriptsPath} " )
205+ SuiHelper .suCmd(" sh '${context?.externalCacheDir} /${fileName} ' true ${ClashConfig .scriptsPath} " )
187206 }
188207 else {
189- suihelper .suCmd(" sh '${context?.externalCacheDir} /${fileName} '" )
208+ SuiHelper .suCmd(" sh '${context?.externalCacheDir} /${fileName} ' false ${ ClashConfig .scriptsPath} " )
190209 }
191210
192211 fo.delete()
@@ -210,6 +229,8 @@ class MainPage : Fragment() {
210229
211230 clashStatusClass.getTraffic()
212231
232+ scrollView.fullScroll(ScrollView .FOCUS_DOWN )
233+
213234 GlobalScope .launch(Dispatchers .IO ) {
214235 while (clashStatusClass.trafficThreadFlag) {
215236 try {
@@ -234,6 +255,7 @@ class MainPage : Fragment() {
234255 }
235256
236257 private fun setStatusCmdRunning (){
258+ scrollView.fullScroll(ScrollView .FOCUS_DOWN )
237259 if (clash_status_text.text == getString(R .string.clash_charging))
238260 return
239261 clash_status.isClickable = false
0 commit comments