diff --git a/SoniControl/app/build.gradle b/SoniControl/app/build.gradle index d163ac9a312b118faaa563c85eaf299ed74e7ee6..04eb8718b3281372ffabe1775f9d0ce75557bab3 100644 --- a/SoniControl/app/build.gradle +++ b/SoniControl/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "at.ac.fhstp.sonicontrol" minSdkVersion 16 // more than 95% of all active Android devices (mid 2017) targetSdkVersion 25 - versionCode 3 - versionName "0.91-alpha" + versionCode 4 + versionName "0.9.2-alpha" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" ndk { diff --git a/SoniControl/app/src/main/java/at/ac/fhstp/sonicontrol/MainActivity.java b/SoniControl/app/src/main/java/at/ac/fhstp/sonicontrol/MainActivity.java index c9acfffade1afbf5892f057fd62c481a3d8622bb..84e2077d556a0ea4b8fc54cbf5bac72b3ae27fb1 100644 --- a/SoniControl/app/src/main/java/at/ac/fhstp/sonicontrol/MainActivity.java +++ b/SoniControl/app/src/main/java/at/ac/fhstp/sonicontrol/MainActivity.java @@ -240,12 +240,14 @@ public class MainActivity extends BaseActivity implements Scan.DetectionListener } private void onBtnExitClick(View v) { - Intent service = new Intent(MainActivity.this, SoniService.class); if (SoniService.IS_SERVICE_RUNNING) { + Intent service = new Intent(MainActivity.this, SoniService.class); service.setAction(ServiceConstants.ACTION.STOPFOREGROUND_ACTION); - SoniService.IS_SERVICE_RUNNING = false; + startService(service); + } + else { + NotificationHelper.cancelOnHoldStatusNotification(); } - startService(service); // Reset state SharedPreferences sp = getSettingsObject(); @@ -265,7 +267,7 @@ public class MainActivity extends BaseActivity implements Scan.DetectionListener */ NotificationHelper.cancelDetectionAlertStatusNotification(getApplicationContext()); - detector.pause(); // stop scanning + detector.stopIO(); // release audio resources from the scanner Spoofer spoof = Spoofer.getInstance(); //get a spoofing object spoof.stopSpoofingComplete(); //stop the whole spoofing process MicCapture micCap = MicCapture.getInstance(); //get a microphone capture object diff --git a/SoniControl/app/src/main/java/at/ac/fhstp/sonicontrol/Scan.java b/SoniControl/app/src/main/java/at/ac/fhstp/sonicontrol/Scan.java index 2188cbf06003876499de18f63c2323745c67a97b..c706f537a9b4a36c5c31339b155cd94101200e30 100644 --- a/SoniControl/app/src/main/java/at/ac/fhstp/sonicontrol/Scan.java +++ b/SoniControl/app/src/main/java/at/ac/fhstp/sonicontrol/Scan.java @@ -140,6 +140,13 @@ public class Scan { Resume(); } + /** + * Will delete the audioIO object, thus releasing audio resources + */ + public void stopIO() { + StopIO(); + } + // ------ // Native functions to find in jni/FrequencyDomain.cpp private native void FrequencyDomain(int samplerate, int buffersize); @@ -148,4 +155,5 @@ public class Scan { private native boolean GetBackgroundModelUpdating(); private native void Pause(); private native void Resume(); + private native void StopIO(); } \ No newline at end of file diff --git a/SoniControl/app/src/main/jni/FrequencyDomain.cpp b/SoniControl/app/src/main/jni/FrequencyDomain.cpp index da86e3c346cf519e7a123d86d9e155d032bb3569..86e803d285dddb5cd81cb8b1a334588babeefdcb 100644 --- a/SoniControl/app/src/main/jni/FrequencyDomain.cpp +++ b/SoniControl/app/src/main/jni/FrequencyDomain.cpp @@ -20,7 +20,7 @@ #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) //SUPERPOWERED FFT VARIABLES -static SuperpoweredAndroidAudioIO *audioIO; +static SuperpoweredAndroidAudioIO *audioIO = NULL; static SuperpoweredFrequencyDomain *frequencyDomain; static float *magnitudeLeft, *magnitudeRight, *phaseLeft, *phaseRight, *inputBufferFloat; @@ -489,6 +489,10 @@ extern "C" JNIEXPORT void Java_at_ac_fhstp_sonicontrol_Scan_Resume(JNIEnv * __un resumeIO(); } +extern "C" JNIEXPORT void Java_at_ac_fhstp_sonicontrol_Scan_StopIO(JNIEnv * __unused javaEnvironment, jobject __unused obj) { + stopIO(); +} + /* SettingsActivity does not exist in the full app extern "C" JNIEXPORT void Java_at_ac_fhstp_sonicontrol_SettingsActivity_SetNewCutFrequency(JNIEnv * __unused javaEnvironment, jobject __unused obj, jint cutF){ cutoffFrequency = cutF;