From 2385d9ebbf36c71353a5fdb6515562f49ef1d426 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 5 Oct 2015 20:14:40 +0100 Subject: Removing .idea folder from source control --- LoopbackApp/.gitignore | 7 +- LoopbackApp/.idea/.name | 1 - LoopbackApp/.idea/compiler.xml | 22 ------- LoopbackApp/.idea/copyright/profiles_settings.xml | 3 - LoopbackApp/.idea/dictionaries/rago.xml | 3 - LoopbackApp/.idea/gradle.xml | 18 ------ LoopbackApp/.idea/misc.xml | 78 ----------------------- LoopbackApp/.idea/modules.xml | 9 --- LoopbackApp/.idea/runConfigurations.xml | 12 ---- LoopbackApp/.idea/vcs.xml | 6 -- 10 files changed, 3 insertions(+), 156 deletions(-) delete mode 100644 LoopbackApp/.idea/.name delete mode 100644 LoopbackApp/.idea/compiler.xml delete mode 100644 LoopbackApp/.idea/copyright/profiles_settings.xml delete mode 100644 LoopbackApp/.idea/dictionaries/rago.xml delete mode 100644 LoopbackApp/.idea/gradle.xml delete mode 100644 LoopbackApp/.idea/misc.xml delete mode 100644 LoopbackApp/.idea/modules.xml delete mode 100644 LoopbackApp/.idea/runConfigurations.xml delete mode 100644 LoopbackApp/.idea/vcs.xml diff --git a/LoopbackApp/.gitignore b/LoopbackApp/.gitignore index afbdab3..ba4ecba 100644 --- a/LoopbackApp/.gitignore +++ b/LoopbackApp/.gitignore @@ -1,6 +1,5 @@ .gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries +local.properties +.idea .DS_Store -/build +build diff --git a/LoopbackApp/.idea/.name b/LoopbackApp/.idea/.name deleted file mode 100644 index e50190c..0000000 --- a/LoopbackApp/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -LoopbackApp \ No newline at end of file diff --git a/LoopbackApp/.idea/compiler.xml b/LoopbackApp/.idea/compiler.xml deleted file mode 100644 index 9a8b7e5..0000000 --- a/LoopbackApp/.idea/compiler.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - \ No newline at end of file diff --git a/LoopbackApp/.idea/copyright/profiles_settings.xml b/LoopbackApp/.idea/copyright/profiles_settings.xml deleted file mode 100644 index e7bedf3..0000000 --- a/LoopbackApp/.idea/copyright/profiles_settings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/LoopbackApp/.idea/dictionaries/rago.xml b/LoopbackApp/.idea/dictionaries/rago.xml deleted file mode 100644 index ddf5134..0000000 --- a/LoopbackApp/.idea/dictionaries/rago.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/LoopbackApp/.idea/gradle.xml b/LoopbackApp/.idea/gradle.xml deleted file mode 100644 index 1bbc21d..0000000 --- a/LoopbackApp/.idea/gradle.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/LoopbackApp/.idea/misc.xml b/LoopbackApp/.idea/misc.xml deleted file mode 100644 index 6dcbe11..0000000 --- a/LoopbackApp/.idea/misc.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - Android Lint - - - Finalization issuesJava - - - Groovy - - - ImportsJava - - - JUnit issuesJava - - - Java - - - Memory issuesJava - - - Probable bugsGroovy - - - - - Android - - - - - - - - - - - - - - - - - - - - - - - - - 1.7 - - - - - - - - \ No newline at end of file diff --git a/LoopbackApp/.idea/modules.xml b/LoopbackApp/.idea/modules.xml deleted file mode 100644 index 8f01d90..0000000 --- a/LoopbackApp/.idea/modules.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/LoopbackApp/.idea/runConfigurations.xml b/LoopbackApp/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/LoopbackApp/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/LoopbackApp/.idea/vcs.xml b/LoopbackApp/.idea/vcs.xml deleted file mode 100644 index 6564d52..0000000 --- a/LoopbackApp/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file -- cgit v1.2.3 From f2168be23479c8c86fccec368669381f1fdf56c3 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 5 Oct 2015 21:09:37 +0100 Subject: Updating project to use latest experimental gradle plugin for NDK support (0.3.0-alpha6) --- LoopbackApp/app/app.iml | 10 +++--- LoopbackApp/app/build.gradle | 42 +++++++++++++--------- LoopbackApp/app/src/main/AndroidManifest.xml | 4 --- LoopbackApp/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 32 insertions(+), 28 deletions(-) diff --git a/LoopbackApp/app/app.iml b/LoopbackApp/app/app.iml index bf41d69..136db05 100644 --- a/LoopbackApp/app/app.iml +++ b/LoopbackApp/app/app.iml @@ -36,34 +36,34 @@ - + - + - + - + - + diff --git a/LoopbackApp/app/build.gradle b/LoopbackApp/app/build.gradle index b1172f4..468d772 100644 --- a/LoopbackApp/app/build.gradle +++ b/LoopbackApp/app/build.gradle @@ -1,26 +1,34 @@ -apply plugin: 'com.android.application' +apply plugin: 'com.android.model.application' -android { - compileSdkVersion 21 - buildToolsVersion "21.1.2" +model { + android { + compileSdkVersion = 21 + buildToolsVersion = "21.1.1" - defaultConfig { - applicationId "org.drrickorang.loopback" - minSdkVersion 11 - targetSdkVersion 21 - - ndk { - moduleName "libloopback" - ldLibs "OpenSLES", "log" + defaultConfig.with { + applicationId = "org.drrickorang.loopback" + minSdkVersion.apiLevel = 11 + targetSdkVersion.apiLevel = 21 } } + android.ndk { + moduleName += "loopback" + cppFlags += "-I${project.rootDir}/app/src/main/jni".toString() + CFlags += "-I${project.rootDir}/app/src/main/jni".toString() + + ldLibs += "OpenSLES" + ldLibs += "log" + } - buildTypes { + android.buildTypes { release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + minifyEnabled = false + proguardFiles += file('proguard.cfg') + } + debug { + ndk.with { + debuggable = true + } } } - - } diff --git a/LoopbackApp/app/src/main/AndroidManifest.xml b/LoopbackApp/app/src/main/AndroidManifest.xml index 4dae4a7..1122313 100644 --- a/LoopbackApp/app/src/main/AndroidManifest.xml +++ b/LoopbackApp/app/src/main/AndroidManifest.xml @@ -26,10 +26,6 @@ android:versionCode="7" android:versionName="0.5"> - - diff --git a/LoopbackApp/build.gradle b/LoopbackApp/build.gradle index 833eee9..0984bdc 100644 --- a/LoopbackApp/build.gradle +++ b/LoopbackApp/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.0' + classpath 'com.android.tools.build:gradle-experimental:0.3.0-alpha6' } } diff --git a/LoopbackApp/gradle/wrapper/gradle-wrapper.properties b/LoopbackApp/gradle/wrapper/gradle-wrapper.properties index 0c71e76..693472e 100644 --- a/LoopbackApp/gradle/wrapper/gradle-wrapper.properties +++ b/LoopbackApp/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.6-all.zip -- cgit v1.2.3 From d307d0809b4dac2fbaf4968480bac092f2288345 Mon Sep 17 00:00:00 2001 From: Don Turner Date: Mon, 5 Oct 2015 22:13:56 +0100 Subject: Updating app for new permissions model in Android Marshmallow (API 23) --- LoopbackApp/app/app.iml | 7 ++- LoopbackApp/app/build.gradle | 10 +++- .../org/drrickorang/loopback/LoopbackActivity.java | 67 +++++++++++++++++++++- 3 files changed, 77 insertions(+), 7 deletions(-) diff --git a/LoopbackApp/app/app.iml b/LoopbackApp/app/app.iml index 136db05..d1e04cd 100644 --- a/LoopbackApp/app/app.iml +++ b/LoopbackApp/app/app.iml @@ -71,6 +71,8 @@ + + @@ -86,7 +88,10 @@ - + + + + \ No newline at end of file diff --git a/LoopbackApp/app/build.gradle b/LoopbackApp/app/build.gradle index 468d772..9f2df75 100644 --- a/LoopbackApp/app/build.gradle +++ b/LoopbackApp/app/build.gradle @@ -2,13 +2,13 @@ apply plugin: 'com.android.model.application' model { android { - compileSdkVersion = 21 - buildToolsVersion = "21.1.1" + compileSdkVersion = 23 + buildToolsVersion = "23.0.1" defaultConfig.with { applicationId = "org.drrickorang.loopback" minSdkVersion.apiLevel = 11 - targetSdkVersion.apiLevel = 21 + targetSdkVersion.apiLevel = 23 } } android.ndk { @@ -32,3 +32,7 @@ model { } } } + +dependencies { + compile 'com.android.support:appcompat-v7:23.0.1' +} diff --git a/LoopbackApp/app/src/main/java/org/drrickorang/loopback/LoopbackActivity.java b/LoopbackApp/app/src/main/java/org/drrickorang/loopback/LoopbackActivity.java index 437db6e..fc1e001 100644 --- a/LoopbackApp/app/src/main/java/org/drrickorang/loopback/LoopbackActivity.java +++ b/LoopbackApp/app/src/main/java/org/drrickorang/loopback/LoopbackActivity.java @@ -21,11 +21,13 @@ import java.io.FileDescriptor; import java.io.FileOutputStream; import java.util.Arrays; +import android.Manifest; import android.app.Activity; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.content.pm.PackageManager; import android.database.Cursor; import android.graphics.Bitmap; import android.media.AudioManager; @@ -37,6 +39,8 @@ import android.os.IBinder; import android.os.Message; import android.os.ParcelFileDescriptor; import android.provider.MediaStore; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.text.format.DateFormat; import android.util.Log; import android.view.Gravity; @@ -63,6 +67,7 @@ public class LoopbackActivity extends Activity { private static final int SAVE_PLAYER_BUFFER_PERIOD_TO_TXT_REQUEST = 46; private static final int SETTINGS_ACTIVITY_REQUEST_CODE = 54; private static final int THREAD_SLEEP_DURATION_MS = 200; + private static final int PERMISSIONS_REQUEST_RECORD_AUDIO = 201; LoopbackAudioThread mAudioThread = null; NativeAudioThread mNativeAudioThread = null; @@ -699,11 +704,18 @@ public class LoopbackActivity extends Activity { /** Start the latency test. */ public void onButtonLatencyTest(View view) { - startLatencyTest(); - } + // Ensure we have RECORD_AUDIO permissions + // On Android M (API 23) we must request dangerous permissions each time we use them + if (hasRecordAudioPermission()){ + startLatencyTest(); + } else { + requestRecordAudioPermission(); + } + } private void startLatencyTest() { + if (!isBusy()) { mBarMasterLevel.setEnabled(false); resetBufferPeriodRecord(mRecorderBufferPeriod, mPlayerBufferPeriod); @@ -735,11 +747,17 @@ public class LoopbackActivity extends Activity { /** Start the Buffer (Glitch Detection) Test. */ public void onButtonBufferTest(View view) { - startBufferTest(); + + if (hasRecordAudioPermission()){ + startBufferTest(); + } else { + requestRecordAudioPermission(); + } } private void startBufferTest() { + if (!isBusy()) { mBarMasterLevel.setEnabled(false); resetBufferPeriodRecord(mRecorderBufferPeriod, mPlayerBufferPeriod); @@ -1596,4 +1614,47 @@ public class LoopbackActivity extends Activity { } return count; } + + /** + * Check whether we have the RECORD_AUDIO permission + * @return true if we do + */ + private boolean hasRecordAudioPermission(){ + boolean hasPermission = (ContextCompat.checkSelfPermission(this, + Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED); + + log("Has RECORD_AUDIO permission? " + hasPermission); + return hasPermission; + } + + /** + * Requests the RECORD_AUDIO permission from the user + */ + private void requestRecordAudioPermission(){ + + String requiredPermission = Manifest.permission.RECORD_AUDIO; + + // If the user previously denied this permission then show a message explaining why + // this permission is needed + if (ActivityCompat.shouldShowRequestPermissionRationale(this, + requiredPermission)) { + + showToast("This app needs to record audio through the microphone to test the device's performance"); + } + + // request the permission. + ActivityCompat.requestPermissions(this, + new String[]{requiredPermission}, + PERMISSIONS_REQUEST_RECORD_AUDIO); + } + + @Override + public void onRequestPermissionsResult(int requestCode, + String permissions[], int[] grantResults) { + + // We can ignore this call since we'll check for RECORD_AUDIO each time the + // user does anything which requires that permission. We can't, however, delete + // this method as this will cause ActivityCompat.requestPermissions to fail. + } + } -- cgit v1.2.3