diff options
author | Andrzej J. R. Hunt <andrzej@ahunt.org> | 2012-07-20 12:02:54 +0200 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2012-08-06 10:22:59 +0100 |
commit | 0aa7aa85a4cb0b0608afea6c69f61ed8426c8185 (patch) | |
tree | 48b7fc76bb69484d35297cc643470174093cb490 /android | |
parent | 597924e78a7c34ed74aa642aafe9f3504a4c335d (diff) |
Fixed a further bug in the Listener cycle. Refactored image storage.
Change-Id: I2b3f9e2c46dafde4bd488bc95675c04e8806c9a4
Diffstat (limited to 'android')
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); |