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;