Skip to content

Commit c53623f

Browse files
authored
Merge pull request #114 from XMRig-for-Android/issue-113-0_0_38_Release_Bugfix
Issue 113 0 0 38 release bugfix
2 parents f9b2b68 + 0c39d0c commit c53623f

File tree

4 files changed

+82
-23
lines changed

4 files changed

+82
-23
lines changed

android/app/src/main/java/com/xmrigforandroid/MiningService.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@
1616
import com.xmrigforandroid.events.MinerStartEvent;
1717
import com.xmrigforandroid.events.MinerStopEvent;
1818
import com.xmrigforandroid.events.StdoutEvent;
19+
import com.xmrigforandroid.utils.ProcessExitDetector;
1920

2021
import org.greenrobot.eventbus.EventBus;
2122
import java.io.BufferedReader;
2223
import java.io.IOException;
2324
import java.io.InputStream;
2425
import java.io.InputStreamReader;
26+
import java.util.regex.Matcher;
27+
import java.util.regex.Pattern;
2528

2629
public class MiningService extends Service {
2730

@@ -33,6 +36,9 @@ public class MiningService extends Service {
3336
private Process process;
3437
private OutputReaderThread outputHandler;
3538

39+
private final String ansiRegex = "\\e\\[[\\d;]*[^\\d;]";
40+
private final Pattern ansiRegexPattern = Pattern.compile(ansiRegex);
41+
3642
@Override
3743
public void onCreate() {
3844
super.onCreate();
@@ -131,6 +137,11 @@ public void startMining(String configPath, String xmrigFork) {
131137
pb.redirectErrorStream(true);
132138

133139
process = pb.start();
140+
141+
ProcessExitDetector processExitDetector = new ProcessExitDetector(process);
142+
processExitDetector.addProcessListener(process -> EventBus.getDefault().post(new MinerStopEvent()));
143+
processExitDetector.start();
144+
134145
outputHandler = new MiningService.OutputReaderThread(process.getInputStream());
135146
outputHandler.start();
136147

@@ -145,7 +156,9 @@ public void startMining(String configPath, String xmrigFork) {
145156
}
146157

147158
public void updateNotification(String str) {
148-
notificationbuilder.setContentText(str);
159+
Matcher matcher = ansiRegexPattern.matcher(str);
160+
161+
notificationbuilder.setContentText(matcher.replaceAll(""));
149162

150163
NotificationManager notificationManager = (NotificationManager) getApplication().getSystemService(Context.NOTIFICATION_SERVICE);
151164
notificationManager.notify(NOTIFICATION_ID, notificationbuilder.build());

android/app/src/main/java/com/xmrigforandroid/services/ThermalService.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class ThermalService : Service() {
1212

1313
val thermalWorkRequest: OneTimeWorkRequest.Builder = OneTimeWorkRequestBuilder<ThermalWorker>()
1414

15-
val updateTimer = object: CountDownTimer(5000, 5000) {
15+
val updateTimer = object: CountDownTimer(15000, 15000) {
1616
override fun onTick(millisUntilFinished: Long) {
1717
}
1818

@@ -32,7 +32,7 @@ class ThermalService : Service() {
3232
}
3333

3434
companion object {
35-
private val LOG_TAG = "XMRigAPIService"
35+
private val LOG_TAG = "ThermalService"
3636
var IS_SERVICE_RUNNING = false
3737
}
3838
}

android/app/src/main/java/com/xmrigforandroid/services/XMRigAPIService.kt

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,11 @@ import android.os.CountDownTimer
66
import android.os.IBinder
77
import android.util.Log
88
import androidx.work.*
9-
import com.xmrigforandroid.events.MinerSummaryEvent
10-
import com.xmrigforandroid.workers.ThermalWorker
119
import com.xmrigforandroid.workers.XMRigJsonRpcWorker
1210
import com.xmrigforandroid.workers.XMRigSummaryUpdateWorker
13-
import kotlinx.coroutines.Dispatchers
14-
import kotlinx.coroutines.coroutineScope
1511
import okhttp3.OkHttpClient
16-
import okhttp3.Request
17-
import okio.IOException
18-
import kotlinx.coroutines.launch
19-
import kotlinx.coroutines.runBlocking
20-
import okhttp3.RequestBody.Companion.toRequestBody
21-
import okhttp3.internal.threadName
22-
import org.greenrobot.eventbus.EventBus
2312

2413
class XMRigAPIService : Service() {
25-
26-
val constraints = Constraints.Builder()
27-
.setRequiredNetworkType(NetworkType.UNMETERED)
28-
.setRequiresCharging(true)
29-
.build()
3014
val summaryUpdateWorkerRequest: OneTimeWorkRequest.Builder = OneTimeWorkRequestBuilder<XMRigSummaryUpdateWorker>()
3115

3216
var isSummaryUpdate = false
@@ -39,9 +23,7 @@ class XMRigAPIService : Service() {
3923
override fun onFinish() {
4024
Log.d(LOG_TAG, "summaryUpdateTimer::Finish")
4125
WorkManager.getInstance(applicationContext).enqueue(
42-
summaryUpdateWorkerRequest
43-
.setConstraints(constraints)
44-
.build()
26+
summaryUpdateWorkerRequest.build()
4527
)
4628
if (isSummaryUpdate) {
4729
this.start()
@@ -52,7 +34,6 @@ class XMRigAPIService : Service() {
5234
fun sendJSONRpcCommand(method: String) {
5335
Log.d(LOG_TAG, "sendJSONRpcCommand: " + method)
5436
val jsonRpcWorkerRequest = OneTimeWorkRequestBuilder<XMRigJsonRpcWorker>()
55-
.setConstraints(constraints)
5637
.setInputData(workDataOf(
5738
"METHOD" to method
5839
))
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.xmrigforandroid.utils;
2+
3+
import java.util.ArrayList;
4+
import java.util.EventListener;
5+
import java.util.List;
6+
7+
/**
8+
* Detects when a process is finished and invokes the associated listeners.
9+
*/
10+
public class ProcessExitDetector extends Thread {
11+
12+
public interface ProcessListener extends EventListener {
13+
void processFinished(Process process);
14+
}
15+
16+
/** The process for which we have to detect the end. */
17+
private Process process;
18+
/** The associated listeners to be invoked at the end of the process. */
19+
private List<ProcessListener> listeners = new ArrayList<ProcessListener>();
20+
21+
/**
22+
* Starts the detection for the given process
23+
* @param process the process for which we have to detect when it is finished
24+
*/
25+
public ProcessExitDetector(Process process) {
26+
try {
27+
// test if the process is finished
28+
process.exitValue();
29+
throw new IllegalArgumentException("The process is already ended");
30+
} catch (IllegalThreadStateException exc) {
31+
this.process = process;
32+
}
33+
}
34+
35+
/** @return the process that it is watched by this detector. */
36+
public Process getProcess() {
37+
return process;
38+
}
39+
40+
public void run() {
41+
try {
42+
// wait for the process to finish
43+
process.waitFor();
44+
// invokes the listeners
45+
for (ProcessListener listener : listeners) {
46+
listener.processFinished(process);
47+
}
48+
} catch (InterruptedException e) {
49+
}
50+
}
51+
52+
/** Adds a process listener.
53+
* @param listener the listener to be added
54+
*/
55+
public void addProcessListener(ProcessListener listener) {
56+
listeners.add(listener);
57+
}
58+
59+
/** Removes a process listener.
60+
* @param listener the listener to be removed
61+
*/
62+
public void removeProcessListener(ProcessListener listener) {
63+
listeners.remove(listener);
64+
}
65+
}

0 commit comments

Comments
 (0)