From a2b779939de2068d7007b12f32ccebf222803df1 Mon Sep 17 00:00:00 2001 From: aringot <alexis.ringot@fhstp.ac.at> Date: Wed, 7 Feb 2018 15:44:15 +0100 Subject: [PATCH] Fix bug on launch app and directly exit. Now release audio IO on exit. --- SoniControl/app/build.gradle | 4 ++-- .../java/at/ac/fhstp/sonicontrol/MainActivity.java | 10 ++++++---- .../src/main/java/at/ac/fhstp/sonicontrol/Scan.java | 8 ++++++++ SoniControl/app/src/main/jni/FrequencyDomain.cpp | 6 +++++- 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/SoniControl/app/build.gradle b/SoniControl/app/build.gradle index d163ac9a..04eb8718 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 c9acfffa..84e2077d 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 2188cbf0..c706f537 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 da86e3c3..86e803d2 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; -- GitLab