diff --git a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h index 916cfd5718..ef1b56a9c3 100644 --- a/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h +++ b/extras/Introjucer/Source/Project Saving/jucer_ProjectExport_Android.h @@ -108,9 +108,6 @@ public: createDirectoryOrThrow (target.getChildFile ("src/com")); createDirectoryOrThrow (jniFolder); - createDirectoryOrThrow (target.getChildFile ("res/drawable-hdpi")); - createDirectoryOrThrow (target.getChildFile ("res/drawable-mdpi")); - createDirectoryOrThrow (target.getChildFile ("res/drawable-ldpi")); createDirectoryOrThrow (target.getChildFile ("res/values")); createDirectoryOrThrow (target.getChildFile ("libs")); createDirectoryOrThrow (target.getChildFile ("bin")); @@ -130,12 +127,23 @@ public: writeProjectPropertiesFile (target.getChildFile ("project.properties")); writeLocalPropertiesFile (target.getChildFile ("local.properties")); + writeStringsFile (target.getChildFile ("res/values/strings.xml")); - writeIcon (target.getChildFile ("res/drawable-hdpi/icon.png"), 72); - writeIcon (target.getChildFile ("res/drawable-mdpi/icon.png"), 48); - writeIcon (target.getChildFile ("res/drawable-ldpi/icon.png"), 36); + const Image bigIcon (getBigIcon()); + const Image smallIcon (getSmallIcon()); - writeStringsFile (target.getChildFile ("res/values/strings.xml")); + if (bigIcon.isValid() && smallIcon.isValid()) + { + const int step = jmax (bigIcon.getWidth(), bigIcon.getHeight()) / 8; + writeIcon (target.getChildFile ("res/drawable-xhdpi/icon.png"), getBestIconForSize (step * 8, false)); + writeIcon (target.getChildFile ("res/drawable-hdpi/icon.png"), getBestIconForSize (step * 6, false)); + writeIcon (target.getChildFile ("res/drawable-mdpi/icon.png"), getBestIconForSize (step * 4, false)); + writeIcon (target.getChildFile ("res/drawable-ldpi/icon.png"), getBestIconForSize (step * 3, false)); + } + else + { + writeIcon (target.getChildFile ("res/drawable-mdpi/icon.png"), bigIcon.isValid() ? bigIcon : smallIcon); + } } protected: @@ -424,12 +432,12 @@ private: overwriteFileIfDifferentOrThrow (file, mo); } - void writeIcon (const File& file, int size) + void writeIcon (const File& file, const Image& im) { - Image im (getBestIconForSize (size, false)); - if (im.isValid()) { + createDirectoryOrThrow (file.getParentDirectory()); + PNGImageFormat png; MemoryOutputStream mo; diff --git a/extras/JuceDemo/Builds/Android/res/drawable-hdpi/icon.png b/extras/JuceDemo/Builds/Android/res/drawable-hdpi/icon.png deleted file mode 100644 index 2fc5caeabb..0000000000 Binary files a/extras/JuceDemo/Builds/Android/res/drawable-hdpi/icon.png and /dev/null differ diff --git a/extras/JuceDemo/Builds/Android/res/drawable-ldpi/icon.png b/extras/JuceDemo/Builds/Android/res/drawable-ldpi/icon.png deleted file mode 100644 index 0fd4edc8da..0000000000 Binary files a/extras/JuceDemo/Builds/Android/res/drawable-ldpi/icon.png and /dev/null differ diff --git a/extras/JuceDemo/Builds/Android/res/drawable-mdpi/icon.png b/extras/JuceDemo/Builds/Android/res/drawable-mdpi/icon.png index 75401b3792..6001a4931f 100644 Binary files a/extras/JuceDemo/Builds/Android/res/drawable-mdpi/icon.png and b/extras/JuceDemo/Builds/Android/res/drawable-mdpi/icon.png differ diff --git a/extras/JuceDemo/Juce Demo.jucer b/extras/JuceDemo/Juce Demo.jucer index 47ae7a2306..6b5335b99d 100644 --- a/extras/JuceDemo/Juce Demo.jucer +++ b/extras/JuceDemo/Juce Demo.jucer @@ -36,9 +36,9 @@ bigIcon="f4hwldS"> + defines="JUCE_UNIT_TESTS=1" winWarningLevel="4" generateManifest="1"/> + defines="JUCE_UNIT_TESTS=1" winWarningLevel="4" generateManifest="1"/> + defines="JUCE_UNIT_TESTS=1" winWarningLevel="4" generateManifest="1"/> + defines="JUCE_UNIT_TESTS=1" winWarningLevel="4" generateManifest="1"/> + defines="JUCE_UNIT_TESTS=1" libraryPath="/usr/X11R6/lib/"/> + defines="JUCE_UNIT_TESTS=1" libraryPath="/usr/X11R6/lib/"/> + defines="JUCE_UNIT_TESTS=1" winArchitecture="32-bit" winWarningLevel="4" + generateManifest="1"/> + defines="JUCE_UNIT_TESTS=1" winArchitecture="32-bit" winWarningLevel="4" + generateManifest="1"/> CallStaticIntMethod (AudioTrack, AudioTrack.getNativeOutputSampleRate, MODE_STREAM); - const jint outMinBuffer = env->CallStaticIntMethod (AudioTrack, AudioTrack.getMinBufferSize, sampleRate, CHANNEL_OUT_STEREO, ENCODING_PCM_16BIT); + minBufferSizeOut = (int) env->CallStaticIntMethod (AudioTrack, AudioTrack.getMinBufferSize, sampleRate, CHANNEL_OUT_STEREO, ENCODING_PCM_16BIT); + minBufferSizeIn = (int) env->CallStaticIntMethod (AudioRecord, AudioRecord.getMinBufferSize, sampleRate, CHANNEL_IN_STEREO, ENCODING_PCM_16BIT); - jint inMinBuffer = env->CallStaticIntMethod (AudioRecord, AudioRecord.getMinBufferSize, sampleRate, CHANNEL_IN_STEREO, ENCODING_PCM_16BIT); - if (inMinBuffer <= 0) + if (minBufferSizeIn <= 0) { - inMinBuffer = env->CallStaticIntMethod (AudioRecord, AudioRecord.getMinBufferSize, sampleRate, CHANNEL_IN_MONO, ENCODING_PCM_16BIT); + minBufferSizeIn = env->CallStaticIntMethod (AudioRecord, AudioRecord.getMinBufferSize, sampleRate, CHANNEL_IN_MONO, ENCODING_PCM_16BIT); - if (inMinBuffer > 0) + if (minBufferSizeIn > 0) numDeviceInputChannelsAvailable = 1; else numDeviceInputChannelsAvailable = 0; } - minbufferSize = jmax (outMinBuffer, inMinBuffer) / 4; - - DBG ("Audio device - min buffers: " << outMinBuffer << ", " << inMinBuffer << "; " + DBG ("Audio device - min buffers: " << minBufferSizeOut << ", " << minBufferSizeIn << "; " << sampleRate << " Hz; input chans: " << numDeviceInputChannelsAvailable); } @@ -135,9 +133,21 @@ public: int getNumSampleRates() { return 1;} double getSampleRate (int index) { return sampleRate; } - int getDefaultBufferSize() { return minbufferSize; } - int getNumBufferSizesAvailable() { return 10; } - int getBufferSizeSamples (int index) { return getDefaultBufferSize() + index * 128; } + int getDefaultBufferSize() { return 2048; } + int getNumBufferSizesAvailable() { return 50; } + + int getBufferSizeSamples (int index) + { + int n = 16; + for (int i = 0; i < index; ++i) + n += n < 64 ? 16 + : (n < 512 ? 32 + : (n < 1024 ? 64 + : (n < 2048 ? 128 : 256))); + + return n; + } + String open (const BigInteger& inputChannels, const BigInteger& outputChannels, @@ -150,7 +160,7 @@ public: return "Sample rate not allowed"; lastError = String::empty; - int preferredBufferSize = (bufferSize <= 0) ? getDefaultBufferSize() : jmax (minbufferSize, bufferSize); + int preferredBufferSize = (bufferSize <= 0) ? getDefaultBufferSize() : bufferSize; numDeviceInputChannels = 0; numDeviceOutputChannels = 0; @@ -176,7 +186,7 @@ public: numDeviceOutputChannels = 2; outputDevice = GlobalRef (env->NewObject (AudioTrack, AudioTrack.constructor, STREAM_MUSIC, sampleRate, CHANNEL_OUT_STEREO, ENCODING_PCM_16BIT, - (jint) (actualBufferSize * numDeviceOutputChannels * sizeof (int16)), MODE_STREAM)); + (jint) (minBufferSizeOut * numDeviceOutputChannels * sizeof (int16)), MODE_STREAM)); if (env->CallIntMethod (outputDevice, AudioTrack.getState) != STATE_UNINITIALIZED) isRunning = true; @@ -191,7 +201,7 @@ public: 0 /* (default audio source) */, sampleRate, numDeviceInputChannelsAvailable > 1 ? CHANNEL_IN_STEREO : CHANNEL_IN_MONO, ENCODING_PCM_16BIT, - (jint) (actualBufferSize * numDeviceInputChannels * sizeof (int16)))); + (jint) (minBufferSizeIn * numDeviceInputChannels * sizeof (int16)))); if (env->CallIntMethod (inputDevice, AudioRecord.getState) != STATE_UNINITIALIZED) isRunning = true; @@ -227,8 +237,8 @@ public: } } - int getOutputLatencyInSamples() { return 0; } // TODO - int getInputLatencyInSamples() { return 0; } // TODO + int getOutputLatencyInSamples() { return minBufferSizeOut; } + int getInputLatencyInSamples() { return minBufferSizeIn; } bool isOpen() { return isRunning; } int getCurrentBufferSizeSamples() { return actualBufferSize; } int getCurrentBitDepth() { return 16; } @@ -355,7 +365,7 @@ private: jint sampleRate; int numClientInputChannels, numDeviceInputChannels, numDeviceInputChannelsAvailable; int numClientOutputChannels, numDeviceOutputChannels; - int minbufferSize, actualBufferSize; + int minBufferSizeOut, minBufferSizeIn, actualBufferSize; bool isRunning; String lastError; BigInteger activeOutputChans, activeInputChans;