Skip to content

Commit 878e145

Browse files
committed
Avoid starting service twice
1 parent 69faf34 commit 878e145

2 files changed

Lines changed: 22 additions & 16 deletions

File tree

app/src/main/java/com/gianlu/aria2android/Aria2/BinService.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import android.os.Messenger;
2121

2222
import com.gianlu.aria2android.BinUtils;
23-
import com.gianlu.aria2android.BuildConfig;
2423
import com.gianlu.aria2android.MainActivity;
2524
import com.gianlu.aria2android.PK;
2625
import com.gianlu.aria2android.R;
@@ -54,6 +53,11 @@ public class BinService extends Service implements StreamListener.Listener {
5453
private ShortcutManager shortcutManager;
5554

5655
private void startBin(@NonNull StartConfig config) {
56+
if (process != null) {
57+
dispatchBroadcast(Action.SERVER_START, null, null);
58+
return;
59+
}
60+
5761
String cmd = BinUtils.createCommandLine(this, config);
5862
try {
5963
process = Runtime.getRuntime().exec(cmd);
@@ -96,11 +100,13 @@ private void startBin(@NonNull StartConfig config) {
96100

97101
@Override
98102
public int onStartCommand(Intent intent, int flags, int startId) {
99-
if (Objects.equals(intent.getAction(), ACTION_START_SERVICE)) {
100-
startBin((StartConfig) intent.getSerializableExtra("config"));
101-
return super.onStartCommand(intent, flags, startId);
102-
} else if (Objects.equals(intent.getAction(), ACTION_STOP_SERVICE)) {
103-
stopBin();
103+
if (intent != null) {
104+
if (Objects.equals(intent.getAction(), ACTION_START_SERVICE)) {
105+
startBin((StartConfig) intent.getSerializableExtra("config"));
106+
return super.onStartCommand(intent, flags, startId);
107+
} else if (Objects.equals(intent.getAction(), ACTION_STOP_SERVICE)) {
108+
stopBin();
109+
}
104110
}
105111

106112
stopSelf();
@@ -209,8 +215,6 @@ public void onTerminated() {
209215

210216
@Override
211217
public void unknownLogLine(@NonNull String line) {
212-
if (BuildConfig.DEBUG) System.out.println("UNKNOWN LINE: " + line);
213-
214218
Bundle bundle = new Bundle();
215219
bundle.putString(Utils.LABEL_LOG_LINE, line);
216220
AnalyticsApplication.sendAnalytics(Utils.EVENT_UNKNOWN_LOG_LINE, bundle);

app/src/main/java/com/gianlu/aria2android/MainActivity.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public void onServiceDisconnected(ComponentName componentName) {
8282
private MaterialPreferenceCategory notificationsCategory;
8383
private LinearLayout logsContainer;
8484
private MessageView logsMessage;
85+
private LocalBroadcastManager broadcastManager;
8586

8687
private static boolean isARM() {
8788
for (String abi : Build.SUPPORTED_ABIS)
@@ -114,8 +115,8 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
114115
Uri uri = data.getData();
115116
if (uri != null) {
116117
outputPath.setValue(FileUtil.getFullPathFromTreeUri(uri, this));
117-
int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
118-
getContentResolver().takePersistableUriPermission(uri, takeFlags);
118+
getContentResolver().takePersistableUriPermission(uri,
119+
data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION));
119120
}
120121
}
121122
} else {
@@ -166,6 +167,7 @@ protected void onCreate(Bundle savedInstanceState) {
166167
}
167168

168169
setContentView(R.layout.activity_main);
170+
broadcastManager = LocalBroadcastManager.getInstance(this);
169171

170172
MaterialPreferences.instance().setUserInputModule(new LovelyInput.Builder()
171173
.addIcon(PK.OUTPUT_DIRECTORY.key(), R.drawable.baseline_folder_24)
@@ -416,7 +418,7 @@ public void askRationale(@NonNull AlertDialog.Builder builder) {
416418
filter.addAction(action.toString());
417419

418420
receiver = new ServiceBroadcastReceiver();
419-
LocalBroadcastManager.getInstance(this).registerReceiver(receiver, filter);
421+
broadcastManager.registerReceiver(receiver, filter);
420422
try {
421423
bindService(new Intent(this, BinService.class), serviceConnection, BIND_AUTO_CREATE);
422424
startService(new Intent(this, BinService.class)
@@ -425,7 +427,7 @@ public void askRationale(@NonNull AlertDialog.Builder builder) {
425427
return true;
426428
} catch (JSONException ex) {
427429
Toaster.with(this).message(R.string.failedLoadingOptions).ex(ex).show();
428-
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
430+
broadcastManager.unregisterReceiver(receiver);
429431
return false;
430432
} /*catch (RemoteException ex) {
431433
Toaster.with(this).message(R.string.failedStarting).ex(ex).show();
@@ -463,6 +465,8 @@ private boolean stopService() {
463465
startService(new Intent(this, BinService.class)
464466
.setAction(BinService.ACTION_STOP_SERVICE));
465467

468+
broadcastManager.unregisterReceiver(receiver);
469+
466470
Bundle bundle = null;
467471
if (Prefs.getLong(PK.CURRENT_SESSION_START, -1) != -1) {
468472
bundle = new Bundle();
@@ -471,7 +475,6 @@ private boolean stopService() {
471475
}
472476

473477
AnalyticsApplication.sendAnalytics(Utils.ACTION_TURN_OFF, bundle);
474-
475478
return true;
476479
}
477480

@@ -576,15 +579,14 @@ public void onReceive(Context context, final Intent intent) {
576579
runOnUiThread(() -> {
577580
switch (action) {
578581
case SERVER_STATUS:
579-
System.out.println("UPDATE!!");
580-
updateUiStatus(intent.getBooleanExtra("on", false));
582+
updateUiStatus(intent.getBooleanExtra("on", false)); // FIXME: UI changes are not applied
581583
break;
582584
case SERVER_START:
583585
addLog(new Logging.LogLine(Logging.LogLine.Type.INFO, getString(R.string.serverStarted)));
584586
break;
585587
case SERVER_STOP:
586588
addLog(new Logging.LogLine(Logging.LogLine.Type.INFO, getString(R.string.serverStopped)));
587-
LocalBroadcastManager.getInstance(MainActivity.this).unregisterReceiver(receiver);
589+
broadcastManager.unregisterReceiver(receiver);
588590
updateUiStatus(false);
589591
break;
590592
case SERVER_EX:

0 commit comments

Comments
 (0)