From 7c1961d4efe6f08a1598fbc8f42e7beda7c9132c Mon Sep 17 00:00:00 2001 From: orignal Date: Tue, 20 Nov 2018 12:36:10 -0500 Subject: [PATCH] Cancel Graceful Stop --- android/jni/i2pd_android.cpp | 5 +++ android/jni/org_purplei2p_i2pd_I2PD_JNI.h | 3 ++ android/res/values/strings.xml | 1 + .../org/purplei2p/i2pd/DaemonSingleton.java | 7 ++++ .../src/org/purplei2p/i2pd/I2PDActivity.java | 41 ++++++++++++++++--- android/src/org/purplei2p/i2pd/I2PD_JNI.java | 2 + 6 files changed, 54 insertions(+), 5 deletions(-) diff --git a/android/jni/i2pd_android.cpp b/android/jni/i2pd_android.cpp index 8791c90b..ac968fd3 100755 --- a/android/jni/i2pd_android.cpp +++ b/android/jni/i2pd_android.cpp @@ -58,6 +58,11 @@ JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels i2p::context.SetAcceptsTunnels (false); } +JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startAcceptingTunnels + (JNIEnv * env, jclass clazz) { + i2p::context.SetAcceptsTunnels (true); +} + JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged (JNIEnv * env, jclass clazz, jboolean isConnected) { diff --git a/android/jni/org_purplei2p_i2pd_I2PD_JNI.h b/android/jni/org_purplei2p_i2pd_I2PD_JNI.h index 04923d22..7beb1284 100644 --- a/android/jni/org_purplei2p_i2pd_I2PD_JNI.h +++ b/android/jni/org_purplei2p_i2pd_I2PD_JNI.h @@ -24,6 +24,9 @@ JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopDaemon JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_stopAcceptingTunnels (JNIEnv *, jclass); +JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_startAcceptingTunnels + (JNIEnv *, jclass); + JNIEXPORT void JNICALL Java_org_purplei2p_i2pd_I2PD_1JNI_onNetworkStateChanged (JNIEnv * env, jclass clazz, jboolean isConnected); diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index a0cc264c..18aef3b1 100755 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -3,6 +3,7 @@ i2pd Stop Graceful Stop + Cancel 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 4f3e62f7..4c3d5f44 100644 --- a/android/src/org/purplei2p/i2pd/DaemonSingleton.java +++ b/android/src/org/purplei2p/i2pd/DaemonSingleton.java @@ -33,6 +33,13 @@ public class DaemonSingleton { } } + public synchronized void startAcceptingTunnels() { + if(isStartedOkay()){ + setState(State.startedOkay); + I2PD_JNI.startAcceptingTunnels(); + } + } + private volatile boolean startedOkay; public enum State { diff --git a/android/src/org/purplei2p/i2pd/I2PDActivity.java b/android/src/org/purplei2p/i2pd/I2PDActivity.java index 31058765..3c95a832 100755 --- a/android/src/org/purplei2p/i2pd/I2PDActivity.java +++ b/android/src/org/purplei2p/i2pd/I2PDActivity.java @@ -144,14 +144,10 @@ public class I2PDActivity extends Activity { case MY_PERMISSION_REQUEST_WRITE_EXTERNAL_STORAGE: { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) - { Log.e(TAG, "Memory permission granted"); - } else - { Log.e(TAG, "Memory permission declined"); // TODO: terminate - } return; } default: ; @@ -244,7 +240,16 @@ public class I2PDActivity extends Activity { i2pdStop(); return true; case R.id.action_graceful_stop: - i2pdGracefulStop(); + if (getGracefulQuitTimer()!= null) + { + item.setTitle(R.string.action_graceful_stop); + i2pdCancelGracefulStop (); + } + else + { + item.setTitle(R.string.action_cancel_graceful_stop); + i2pdGracefulStop(); + } return true; } @@ -307,6 +312,32 @@ public class I2PDActivity extends Activity { },"gracInit").start(); } + + private void i2pdCancelGracefulStop() + { + cancelGracefulStop(); + Toast.makeText(this, R.string.startedOkay, Toast.LENGTH_SHORT).show(); + new Thread(new Runnable() + { + @Override + public void run() + { + try + { + Log.d(TAG, "grac stopping cancel"); + if(daemon.isStartedOkay()) + daemon.startAcceptingTunnels(); + else + i2pdStop(); + } + catch(Throwable tr) + { + Log.e(TAG,"",tr); + } + } + + },"gracCancel").start(); + } private void rescheduleGraceStop(Timer gracefulQuitTimerOld, long gracefulStopAtMillis) { if(gracefulQuitTimerOld!=null)gracefulQuitTimerOld.cancel(); diff --git a/android/src/org/purplei2p/i2pd/I2PD_JNI.java b/android/src/org/purplei2p/i2pd/I2PD_JNI.java index f965d471..63867273 100644 --- a/android/src/org/purplei2p/i2pd/I2PD_JNI.java +++ b/android/src/org/purplei2p/i2pd/I2PD_JNI.java @@ -12,6 +12,8 @@ public class I2PD_JNI { public static native void stopAcceptingTunnels(); + public static native void startAcceptingTunnels(); + public static native void onNetworkStateChanged(boolean isConnected); public static void loadLibraries() {