From e58c6b179ffebfb0de280445b03ea86c2473c907 Mon Sep 17 00:00:00 2001 From: "Chris J. Karr" Date: Sun, 13 Aug 2017 22:16:54 -0500 Subject: [PATCH] Fixing potential ANR within HttpTransmitter --- .../transmitters/HttpTransmitter.java | 66 +++++++++++-------- 1 file changed, 38 insertions(+), 28 deletions(-) diff --git a/src/com/audacious_software/passive_data_kit/transmitters/HttpTransmitter.java b/src/com/audacious_software/passive_data_kit/transmitters/HttpTransmitter.java index f9ced53..02029f5 100755 --- a/src/com/audacious_software/passive_data_kit/transmitters/HttpTransmitter.java +++ b/src/com/audacious_software/passive_data_kit/transmitters/HttpTransmitter.java @@ -501,41 +501,51 @@ public long transmittedSize() { @SuppressWarnings("ConstantConditions") @Override - public void onGeneratorUpdated(String identifier, long timestamp, Bundle data) { - if (data.keySet().size() > 1) { // Only transmit non-empty bundles... - timestamp = timestamp / 1000; // Convert to seconds... + public void onGeneratorUpdated(final String identifier, final long timestamp, final Bundle data) { + final HttpTransmitter me = this; - Generators generators = Generators.getInstance(this.mContext); + Runnable r = new Runnable() { + @Override + public void run() { + if (data.keySet().size() > 1) { // Only transmit non-empty bundles... + long generatorTimestamp = timestamp / 1000; // Convert to seconds... - Bundle metadata = new Bundle(); + Generators generators = Generators.getInstance(me.mContext); - if (data.containsKey(Generator.PDK_METADATA)) { - metadata = data.getBundle(Generator.PDK_METADATA); - } + Bundle metadata = new Bundle(); - metadata.putString(Generator.IDENTIFIER, identifier); - metadata.putDouble(Generator.TIMESTAMP, timestamp); - metadata.putString(Generator.GENERATOR, generators.getGeneratorFullName(identifier)); - metadata.putString(Generator.SOURCE, generators.getSource()); - metadata.putString(Generator.SOURCE, this.mUserId); - data.putBundle(Generator.PDK_METADATA, metadata); - - synchronized (this) { - if (this.mJsonGenerator == null) { - this.mCurrentFile = new File(this.getPendingFolder(), System.currentTimeMillis() + HttpTransmitter.TEMP_EXTENSION); - - try { - JsonFactory factory = new JsonFactory(); - this.mJsonGenerator = factory.createGenerator(this.mCurrentFile, JsonEncoding.UTF8); - this.mJsonGenerator.writeStartArray(); - } catch (IOException e) { - Logger.getInstance(this.mContext).logThrowable(e); + if (data.containsKey(Generator.PDK_METADATA)) { + metadata = data.getBundle(Generator.PDK_METADATA); } - } - HttpTransmitter.writeBundle(this.mContext, this.mJsonGenerator, data); + metadata.putString(Generator.IDENTIFIER, identifier); + metadata.putDouble(Generator.TIMESTAMP, generatorTimestamp); + metadata.putString(Generator.GENERATOR, generators.getGeneratorFullName(identifier)); + metadata.putString(Generator.SOURCE, generators.getSource()); + metadata.putString(Generator.SOURCE, me.mUserId); + data.putBundle(Generator.PDK_METADATA, metadata); + + synchronized (this) { + if (me.mJsonGenerator == null) { + me.mCurrentFile = new File(me.getPendingFolder(), System.currentTimeMillis() + HttpTransmitter.TEMP_EXTENSION); + + try { + JsonFactory factory = new JsonFactory(); + me.mJsonGenerator = factory.createGenerator(me.mCurrentFile, JsonEncoding.UTF8); + me.mJsonGenerator.writeStartArray(); + } catch (IOException e) { + Logger.getInstance(me.mContext).logThrowable(e); + } + } + + HttpTransmitter.writeBundle(me.mContext, me.mJsonGenerator, data); + } + } } - } + }; + + Thread t = new Thread(r); + t.start(); } private static Map getValues(Context context, final Bundle bundle) {