summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorAndrzej J. R. Hunt <andrzej@ahunt.org>2012-07-20 12:02:54 +0200
committerMichael Meeks <michael.meeks@suse.com>2012-08-06 10:22:59 +0100
commit0aa7aa85a4cb0b0608afea6c69f61ed8426c8185 (patch)
tree48b7fc76bb69484d35297cc643470174093cb490 /android
parent597924e78a7c34ed74aa642aafe9f3504a4c335d (diff)
Fixed a further bug in the Listener cycle. Refactored image storage.
Change-Id: I2b3f9e2c46dafde4bd488bc95675c04e8806c9a4
Diffstat (limited to 'android')
-rw-r--r--android/sdremote/src/org/libreoffice/impressremote/TestClient.java28
-rw-r--r--android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java7
-rw-r--r--android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java18
3 files changed, 34 insertions, 19 deletions
diff --git a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java b/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
index 4d716adac2a9..627d885b4b76 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
@@ -1,7 +1,5 @@
package org.libreoffice.impressremote;
-import java.util.HashMap;
-
import org.libreoffice.impressremote.communication.CommunicationService;
import android.app.Activity;
import android.content.ComponentName;
@@ -23,11 +21,12 @@ import android.widget.TextView;
public class TestClient extends Activity {
- private HashMap<Integer, Bitmap> mPreviewImages = new HashMap<Integer, Bitmap>();
private boolean mCurrentPreviewImageMissing = false;
private boolean mIsBound = false;
+ private int mCurrentSlide = 0;
+
private CommunicationService mCommunicationService;
final Messenger mMessenger = new Messenger(new MessageHandler());
@@ -141,22 +140,17 @@ public class TestClient extends Activity {
case CommunicationService.MSG_SLIDE_CHANGED:
int newSlide = aData.getInt("slide_number");
mSlideLabel.setText("Slide " + newSlide);
- if (mPreviewImages.containsKey(newSlide)) {
- mImageView.setImageBitmap(mPreviewImages.get(newSlide));
- mCurrentPreviewImageMissing = false;
- } else {
- mCurrentPreviewImageMissing = true;
- }
- break;
+ mCurrentPreviewImageMissing = true;
+ // We continue on to try and update the image.
case CommunicationService.MSG_SLIDE_PREVIEW:
int aSlideNumber = aData.getInt("slide_number");
- byte[] aPreviewImage = aData.getByteArray("preview_image");
- Bitmap aBitmap = BitmapFactory.decodeByteArray(aPreviewImage,
- 0, aPreviewImage.length);
- mPreviewImages.put(aSlideNumber, aBitmap);
- if (mCurrentPreviewImageMissing) {
- mImageView.setImageBitmap(aBitmap);
- mCurrentPreviewImageMissing = false;
+ if ( mCurrentPreviewImageMissing ) {
+ Bitmap aImage = mCommunicationService
+ .getPreviewImage(aSlideNumber);
+ if (aImage != null) {
+ mImageView.setImageBitmap(aImage);
+ mCurrentPreviewImageMissing = false;
+ }
}
break;
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java b/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java
index eec69fc38ec1..ab2794ad5564 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java
@@ -2,6 +2,8 @@ package org.libreoffice.impressremote.communication;
import android.app.Service;
import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.os.Binder;
import android.os.IBinder;
import android.os.Messenger;
@@ -72,4 +74,9 @@ public class CommunicationService extends Service {
mClient.closeConnection();
}
+ public Bitmap getPreviewImage(int aSlide) {
+ return mReceiver.getPreviewImage(aSlide);
+ }
+
+
}
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
index 8418cab550b5..05d26e0ac883 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
@@ -10,22 +10,32 @@ package org.libreoffice.impressremote.communication;
import java.util.ArrayList;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.util.Base64;
+import android.util.SparseArray;
public class Receiver {
private Messenger mActivityMessenger;
+ private SparseArray<byte[]> mPreviewImages = new SparseArray<byte[]>();
+
public void setActivityMessenger(Messenger aActivityMessenger) {
mActivityMessenger = aActivityMessenger;
}
+ public Bitmap getPreviewImage(int aSlide) {
+ byte[] aImage = mPreviewImages.get(aSlide);
+ return BitmapFactory.decodeByteArray(aImage, 0, aImage.length);
+ }
+
public void parseCommand(ArrayList<String> aCommand) {
- System.out.println("parsing " +aCommand.get(0));
+ System.out.println("parsing " + aCommand.get(0));
if (mActivityMessenger == null) {
return;
}
@@ -46,11 +56,15 @@ public class Receiver {
int aSlideNumber = Integer.parseInt(aCommand.get(1));
String aImageString = aCommand.get(2);
byte[] aImage = Base64.decode(aImageString, Base64.DEFAULT);
+
+ // Store image internally
+ mPreviewImages.put(aSlideNumber, aImage);
+
+ // Notify the frontend
Message aMessage = Message.obtain(null,
CommunicationService.MSG_SLIDE_PREVIEW);
Bundle aData = new Bundle();
aData.putInt("slide_number", aSlideNumber);
- aData.putByteArray("preview_image", aImage);
aMessage.setData(aData);
try {
mActivityMessenger.send(aMessage);