From 56db8b40b2c9844879a1c923ac7f1536da2a457e Mon Sep 17 00:00:00 2001 From: orignal Date: Wed, 7 Feb 2018 14:48:51 -0500 Subject: [PATCH] Revert "Revert "quit features replaced by stop; gradle upgraded; i2pd version name updated at build.gradle"" --- android/AndroidManifest.xml | 8 +-- android/build.gradle | 4 +- android/res/menu/options_main.xml | 10 ++-- android/res/values/strings.xml | 9 +-- .../org/purplei2p/i2pd/DaemonSingleton.java | 6 +- .../org/purplei2p/i2pd/ForegroundService.java | 2 +- .../i2pd/{I2PD.java => I2PDActivity.java} | 56 ++++++++----------- 7 files changed, 45 insertions(+), 50 deletions(-) rename android/src/org/purplei2p/i2pd/{I2PD.java => I2PDActivity.java} (85%) diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 3ae952b3..95fff3ff 100755 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,20 +1,20 @@ + android:versionName="2.18.0"> - + - diff --git a/android/build.gradle b/android/build.gradle index a88403fd..821dbc16 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.2' + classpath 'com.android.tools.build:gradle:2.3.3' } } @@ -18,7 +18,7 @@ android { targetSdkVersion 25 minSdkVersion 14 versionCode 1 - versionName "2.17.1" + versionName "2.18.0" } sourceSets { main { diff --git a/android/res/menu/options_main.xml b/android/res/menu/options_main.xml index f66caa2a..aef67c51 100644 --- a/android/res/menu/options_main.xml +++ b/android/res/menu/options_main.xml @@ -2,15 +2,15 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" - tools:context=".I2PD"> + tools:context=".I2PDActivity"> diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index 0b8bef38..c147a808 100755 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -4,8 +4,9 @@ i2pd started i2pd service started i2pd service stopped - Quit - Graceful Quit - Graceful quit is already in progress - Graceful quit is in progress + Stop + Graceful Stop + Graceful stop is already in progress + Graceful stop is in progress + Already stopped diff --git a/android/src/org/purplei2p/i2pd/DaemonSingleton.java b/android/src/org/purplei2p/i2pd/DaemonSingleton.java index 65afd0f5..64568f83 100644 --- a/android/src/org/purplei2p/i2pd/DaemonSingleton.java +++ b/android/src/org/purplei2p/i2pd/DaemonSingleton.java @@ -32,7 +32,7 @@ public class DaemonSingleton { private boolean startedOkay; - public static enum State {uninitialized,starting,jniLibraryLoaded,startedOkay,startFailed,gracefulShutdownInProgress}; + public static enum State {uninitialized,starting,jniLibraryLoaded,startedOkay,startFailed,gracefulShutdownInProgress,stopped}; private State state = State.uninitialized; @@ -121,6 +121,10 @@ public class DaemonSingleton { if(isStartedOkay()){ try {I2PD_JNI.stopDaemon();}catch(Throwable tr){Log.e(TAG, "", tr);} setStartedOkay(false); + synchronized (DaemonSingleton.this) { + state = State.stopped; + fireStateUpdate(); + } } } } diff --git a/android/src/org/purplei2p/i2pd/ForegroundService.java b/android/src/org/purplei2p/i2pd/ForegroundService.java index bfd650c8..74761b07 100644 --- a/android/src/org/purplei2p/i2pd/ForegroundService.java +++ b/android/src/org/purplei2p/i2pd/ForegroundService.java @@ -75,7 +75,7 @@ public class ForegroundService extends Service { // The PendingIntent to launch our activity if the user selects this notification PendingIntent contentIntent = PendingIntent.getActivity(this, 0, - new Intent(this, I2PD.class), 0); + new Intent(this, I2PDActivity.class), 0); // Set the info for the views that show in the notification panel. Notification notification = new Notification.Builder(this) diff --git a/android/src/org/purplei2p/i2pd/I2PD.java b/android/src/org/purplei2p/i2pd/I2PDActivity.java similarity index 85% rename from android/src/org/purplei2p/i2pd/I2PD.java rename to android/src/org/purplei2p/i2pd/I2PDActivity.java index a2494b2b..36e992b3 100755 --- a/android/src/org/purplei2p/i2pd/I2PD.java +++ b/android/src/org/purplei2p/i2pd/I2PDActivity.java @@ -5,13 +5,11 @@ import java.io.StringWriter; import java.util.Timer; import java.util.TimerTask; -import android.annotation.SuppressLint; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; -import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.util.Log; @@ -20,7 +18,7 @@ import android.view.MenuItem; import android.widget.TextView; import android.widget.Toast; -public class I2PD extends Activity { +public class I2PDActivity extends Activity { private static final String TAG = "i2pd"; private TextView textView; @@ -81,11 +79,11 @@ public class I2PD extends Activity { gracefulQuitTimer.cancel(); setGracefulQuitTimer(null); } - try{ - doUnbindService(); - }catch(Throwable tr){ - Log.e(TAG, "", tr); - } +// try{ +// doUnbindService(); +// }catch(Throwable tr){ +// Log.e(TAG, "", tr); +// } } private CharSequence throwableToString(Throwable tr) { @@ -126,7 +124,8 @@ public class I2PD extends Activity { private boolean mIsBound; - private void doBindService() { + private synchronized void doBindService() { + if(mIsBound)return; // Establish a connection with the service. We use an explicit // class name because we want a specific service implementation that // we know will be running in our own process (and thus won't be @@ -159,48 +158,39 @@ public class I2PD extends Activity { int id = item.getItemId(); switch(id){ - case R.id.action_quit: - quit(); + case R.id.action_stop: + i2pdStop(); return true; - case R.id.action_graceful_quit: - gracefulQuit(); + case R.id.action_graceful_stop: + i2pdGracefulStop(); return true; } return super.onOptionsItemSelected(item); } - @SuppressLint("NewApi") - private void quit() { - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - finishAndRemoveTask(); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - finishAffinity(); - } else { - //moveTaskToBack(true); - finish(); - } - }catch (Throwable tr) { - Log.e(TAG, "", tr); - } + private void i2pdStop() { try{ daemon.stopDaemon(); }catch (Throwable tr) { Log.e(TAG, "", tr); } - System.exit(0); } private Timer gracefulQuitTimer; private final Object gracefulQuitTimerLock = new Object(); - private void gracefulQuit() { + private synchronized void i2pdGracefulStop() { + if(daemon.getState()==DaemonSingleton.State.stopped){ + Toast.makeText(this, R.string.already_stopped, + Toast.LENGTH_SHORT).show(); + return; + } if(getGracefulQuitTimer()!=null){ - Toast.makeText(this, R.string.graceful_quit_is_already_in_progress, + Toast.makeText(this, R.string.graceful_stop_is_already_in_progress, Toast.LENGTH_SHORT).show(); return; } - Toast.makeText(this, R.string.graceful_quit_is_in_progress, + Toast.makeText(this, R.string.graceful_stop_is_in_progress, Toast.LENGTH_SHORT).show(); new Thread(new Runnable(){ @@ -216,12 +206,12 @@ public class I2PD extends Activity { @Override public void run() { - quit(); + i2pdStop(); } }, 10*60*1000/*milliseconds*/); }else{ - quit(); + i2pdStop(); } } catch(Throwable tr) { Log.e(TAG,"",tr);