[Libreoffice-commits] core.git: Branch 'feature/android-remote-ng' - android/sdremote
Artur Dryomov
artur.dryomov at gmail.com
Sat Jun 15 07:39:41 PDT 2013
android/sdremote/src/org/libreoffice/impressremote/BlankScreenFragment.java | 8
android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java | 4
android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java | 17
android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java | 8
android/sdremote/src/org/libreoffice/impressremote/communication/Protocol.java | 55 ++
android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java | 201 +++++-----
android/sdremote/src/org/libreoffice/impressremote/communication/Server.java | 57 +-
android/sdremote/src/org/libreoffice/impressremote/communication/SlideShow.java | 83 ++--
android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java | 91 ++--
9 files changed, 311 insertions(+), 213 deletions(-)
New commits:
commit 94a3e898b03c8e134e7f9d04b936dc18b83a5ab7
Author: Artur Dryomov <artur.dryomov at gmail.com>
Date: Sat Jun 15 15:56:01 2013 +0300
Refactor Receiver, Transmitter, Server and SlideShow classes.
Introduce the Protocol class which contains all static information about
the remote protocol: server messages, client commands, etc. It will help
to avoid duplicates and possible typos.
Change-Id: Ic96a17899b3cec13c4081d671e2296c647bf328c
diff --git a/android/sdremote/src/org/libreoffice/impressremote/BlankScreenFragment.java b/android/sdremote/src/org/libreoffice/impressremote/BlankScreenFragment.java
index 8f172e5..f39a10a 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/BlankScreenFragment.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/BlankScreenFragment.java
@@ -39,8 +39,8 @@ public class BlankScreenFragment extends SherlockFragment {
View v = inflater.inflate(R.layout.fragment_blankscreen, container,
false);
- Bitmap aBitmap = mCommunicationService.getSlideShow().getImage(
- mCommunicationService.getSlideShow().getCurrentSlide());
+ Bitmap aBitmap = mCommunicationService.getSlideShow().getSlidePreview(
+ mCommunicationService.getSlideShow().getCurrentSlideIndex());
// Process the image
final int borderWidth = 8;
@@ -74,14 +74,14 @@ public class BlankScreenFragment extends SherlockFragment {
v.findViewById(R.id.blankscreen_slidepreview).setOnClickListener(
aListener);
v.findViewById(R.id.blankscreen_return).setOnClickListener(aListener);
- mCommunicationService.getTransmitter().blankScreen();
+ mCommunicationService.getTransmitter().setUpBlankScreen();
return v;
}
@Override
public void onDestroyView() {
super.onDestroyView();
- mCommunicationService.getTransmitter().resume();
+ mCommunicationService.getTransmitter().resumePresentation();
}
}
diff --git a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java
index ab081df..22c2f18 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java
@@ -127,12 +127,12 @@ public class PresentationActivity extends SherlockFragmentActivity {
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
if (action == KeyEvent.ACTION_UP) {
- mCommunicationService.getTransmitter().nextTransition();
+ mCommunicationService.getTransmitter().performNextTransition();
}
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
if (action == KeyEvent.ACTION_DOWN) {
- mCommunicationService.getTransmitter().previousTransition();
+ mCommunicationService.getTransmitter().performPreviousTransition();
}
return true;
}
diff --git a/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java b/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java
index 8f1ba7d..1834c2d 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java
@@ -66,12 +66,12 @@ public class PresentationFragment extends SherlockFragment {
mTopView.setAdapter(new ThumbnailAdapter(mContext,
mCommunicationService.getSlideShow()));
mTopView.setSelection(mCommunicationService.getSlideShow()
- .getCurrentSlide(), true);
+ .getCurrentSlideIndex(), true);
mTopView.setOnItemSelectedListener(new ClickListener());
}
updateSlideNumberDisplay(mCommunicationService.getSlideShow()
- .getCurrentSlide());
+ .getCurrentSlideIndex());
}
@@ -151,9 +151,9 @@ public class PresentationFragment extends SherlockFragment {
private void updateSlideNumberDisplay(int aPosition) {
// int aSlide = mCommunicationService.getSlideShow().getCurrentSlide();
mNumberText.setText((aPosition + 1) + "/"
- + mCommunicationService.getSlideShow().getSize());
+ + mCommunicationService.getSlideShow().getSlidesCount());
mNotes.loadDataWithBaseURL(null, mCommunicationService.getSlideShow()
- .getNotes(aPosition), "text/html", "UTF-8", null);
+ .getSlideNotes(aPosition), "text/html", "UTF-8", null);
}
// -------------------------------------------------- RESIZING LISTENER ----
@@ -241,7 +241,8 @@ public class PresentationFragment extends SherlockFragment {
public void onItemSelected(AdapterView<?> arg0, View arg1,
int aPosition, long arg3) {
if (mCommunicationService != null)
- mCommunicationService.getTransmitter().gotoSlide(aPosition);
+ mCommunicationService.getTransmitter().setCurrentSlide(
+ aPosition);
lastUpdateTime = System.currentTimeMillis();
updateSlideNumberDisplay(aPosition);
}
@@ -278,7 +279,7 @@ public class PresentationFragment extends SherlockFragment {
int aPosition = aIntent.getExtras().getInt("slide_number");
if ( aPosition == mTopView.getSelectedItemPosition() ) {
mNotes.loadDataWithBaseURL(null, mCommunicationService.getSlideShow()
- .getNotes(aPosition), "text/html", "UTF-8", null);
+ .getSlideNotes(aPosition), "text/html", "UTF-8", null);
}
}
@@ -297,12 +298,12 @@ public class PresentationFragment extends SherlockFragment {
@Override
public int getCount() {
- return mSlideShow.getSize();
+ return mSlideShow.getSlidesCount();
}
@Override
protected Bitmap createBitmap(int position) {
- return mSlideShow.getImage(position);
+ return mSlideShow.getSlidePreview(position);
}
}
}
diff --git a/android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java b/android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java
index c939973..81184df 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java
@@ -125,7 +125,7 @@ public class ThumbnailFragment extends SherlockFragment {
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
if (mCommunicationService != null)
- mCommunicationService.getTransmitter().gotoSlide(position);
+ mCommunicationService.getTransmitter().setCurrentSlide(position);
}
}
@@ -172,7 +172,7 @@ public class ThumbnailFragment extends SherlockFragment {
@Override
public int getCount() {
- return mSlideShow.getSize();
+ return mSlideShow.getSlidesCount();
}
@Override
@@ -201,7 +201,7 @@ public class ThumbnailFragment extends SherlockFragment {
aBorderWidth);
if ((mSlideShow != null)
- && (position == mSlideShow.getCurrentSlide())) {
+ && (position == mSlideShow.getCurrentSlideIndex())) {
formatSelected(aImage, aText);
mCurrentImage = aImage;
mCurrentText = aText;
@@ -209,7 +209,7 @@ public class ThumbnailFragment extends SherlockFragment {
formatUnselected(aImage, aText);
}
- Bitmap aBitmap = mSlideShow.getImage(position);
+ Bitmap aBitmap = mSlideShow.getSlidePreview(position);
// Width
int aWidth = (mGrid.getWidth()) / 3 - 20;
aImage.setMaxWidth(aWidth);
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Protocol.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Protocol.java
new file mode 100644
index 0000000..5227ee6
--- /dev/null
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Protocol.java
@@ -0,0 +1,55 @@
+/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+package org.libreoffice.impressremote.communication;
+
+import android.text.TextUtils;
+
+final class Protocol {
+ private Protocol() {
+ }
+
+ public static final class Messages {
+ private Messages() {
+ }
+
+ public static final String SLIDESHOW_STARTED = "slideshow_started";
+ public static final String SLIDESHOW_FINISHED = "slideshow_finished";
+ public static final String SLIDE_UPDATED = "slide_updated";
+ public static final String SLIDE_PREVIEW = "slide_preview";
+ public static final String SLIDE_NOTES = "slide_notes";
+ }
+
+ public static final class Commands {
+ private Commands() {
+ }
+
+ public static final String TRANSITION_NEXT = "transition_next";
+ public static final String TRANSITION_PREVIOUS = "transition_previous";
+ public static final String GOTO_SLIDE = "goto_slide";
+ public static final String PRESENTATION_BLANK_SCREEN = "presentation_blank_screen";
+ public static final String PRESENTATION_RESUME = "presentation_resume";
+ public static final String PRESENTATION_START = "presentation_start";
+ public static final String PRESENTATION_STOP = "presentation_stop";
+
+ private static final String DELIMITER_PARAMETER = "\n";
+ private static final String DELIMITER_COMMAND = "\n\n";
+
+ public static String prepareCommand(String aCommand) {
+ return String.format("%s%s", aCommand, DELIMITER_COMMAND);
+ }
+
+ public static String prepareCommand(String... aParameters) {
+ String aCommand = TextUtils.join(DELIMITER_PARAMETER, aParameters);
+
+ return prepareCommand(aCommand);
+ }
+ }
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
index 4ba252f..91a10e5 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
@@ -8,7 +8,7 @@
*/
package org.libreoffice.impressremote.communication;
-import java.util.ArrayList;
+import java.util.List;
import android.content.Context;
import android.content.Intent;
@@ -16,106 +16,133 @@ import android.support.v4.content.LocalBroadcastManager;
import android.util.Base64;
public class Receiver {
+ private final Context mContext;
+
+ private SlideShow mSlideShow;
public Receiver(Context aContext) {
- mContext = aContext;
- mSlideShow = new SlideShow(mContext);
+ this.mContext = aContext;
+ this.mSlideShow = new SlideShow(mContext);
}
- private Context mContext;
-
- private SlideShow mSlideShow;
-
public SlideShow getSlideShow() {
return mSlideShow;
}
public boolean isSlideShowRunning() {
- return (mSlideShow.getSize() > 0);
+ return mSlideShow.getSlidesCount() > 0;
}
- public void parseCommand(ArrayList<String> aCommand) {
- if (aCommand.size() == 0)
- return; // E.g. if empty line received for whatever reason.
- String aInstruction = aCommand.get(0);
- if (aInstruction.equals("slideshow_started")) {
- int aSlideShowlength = Integer.parseInt(aCommand.get(1));
- int aCurrentSlide = Integer.parseInt(aCommand.get(2));
- mSlideShow.setLength(aSlideShowlength);
- mSlideShow.setCurrentSlide(aCurrentSlide);
- // Intent aIntent = new Intent(mContext.getApplicationContext(),
- // PresentationActivity.class);
- // aIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- // aIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
- // mContext.getApplicationContext().startActivity(aIntent);
- Intent aIntent = new Intent(
- CommunicationService.STATUS_CONNECTED_SLIDESHOW_RUNNING);
- LocalBroadcastManager.getInstance(mContext).sendBroadcast(aIntent);
- aIntent = new Intent(
- CommunicationService.MSG_SLIDE_CHANGED);
- aIntent.putExtra("slide_number", aCurrentSlide);
- LocalBroadcastManager.getInstance(mContext).sendBroadcast(aIntent);
- } else if (aInstruction.equals("slideshow_finished")) {
- mSlideShow = new SlideShow(mContext);
- // Intent aIntent = new Intent(mContext.getApplicationContext(),
- // StartPresentationActivity.class);
- // aIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- // aIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
- // mContext.getApplicationContext().startActivity(aIntent);
- Intent aIntent = new Intent(
- CommunicationService.STATUS_CONNECTED_NOSLIDESHOW);
- LocalBroadcastManager.getInstance(mContext).sendBroadcast(aIntent);
- } else {
- if (mSlideShow == null)
- return;
-
- if (aInstruction.equals("slide_updated")) {
-
- int aSlideNumber = Integer.parseInt(aCommand.get(1));
-
- mSlideShow.setCurrentSlide(aSlideNumber);
-
- Intent aIntent = new Intent(
- CommunicationService.MSG_SLIDE_CHANGED);
- aIntent.putExtra("slide_number", aSlideNumber);
- LocalBroadcastManager.getInstance(mContext).sendBroadcast(
- aIntent);
- } else if (aInstruction.equals("slide_preview")) {
- int aSlideNumber = Integer.parseInt(aCommand.get(1));
- String aImageString = aCommand.get(2);
- try {
- byte[] aImage = Base64.decode(aImageString, Base64.DEFAULT);
-
- // Store image internally
- mSlideShow.putImage(aSlideNumber, aImage);
-
- Intent aIntent = new Intent(
- CommunicationService.MSG_SLIDE_PREVIEW);
- aIntent.putExtra("slide_number", aSlideNumber);
- LocalBroadcastManager.getInstance(mContext).sendBroadcast(
- aIntent);
- } catch (IllegalArgumentException e) {
- // Bad data - tough luck
- }
- } else if (aInstruction.equals("slide_notes")) {
- int aSlideNumber = Integer.parseInt(aCommand.get(1));
- StringBuilder aNotes = new StringBuilder();
- for (int i = 2; i < aCommand.size(); i++) {
- aNotes.append(aCommand.get(i));
- }
-
- // Store image internally
- mSlideShow.putNotes(aSlideNumber, aNotes.toString());
-
- Intent aIntent = new Intent(
- CommunicationService.MSG_SLIDE_NOTES);
- aIntent.putExtra("slide_number", aSlideNumber);
- LocalBroadcastManager.getInstance(mContext).sendBroadcast(
- aIntent);
- }
+ public void parseCommand(List<String> aInstruction) {
+ if (aInstruction.isEmpty()) {
+ return;
+ }
+
+ String aCommand = aInstruction.get(0);
+
+ if (aCommand.equals(Protocol.Messages.SLIDESHOW_STARTED)) {
+ startSlideShow(aInstruction);
+ return;
+ }
+
+ if (aCommand.equals(Protocol.Messages.SLIDESHOW_FINISHED)) {
+ finishSlideShow();
+ return;
+ }
+ if (mSlideShow == null) {
+ return;
}
+ if (aCommand.equals(Protocol.Messages.SLIDE_UPDATED)) {
+ setUpCurrentSlide(aInstruction);
+ return;
+ }
+
+ if (aCommand.equals(Protocol.Messages.SLIDE_PREVIEW)) {
+ setUpSlidePreview(aInstruction);
+ return;
+ }
+
+ if (aCommand.equals(Protocol.Messages.SLIDE_NOTES)) {
+ setUpSlideNotes(aInstruction);
+ }
+ }
+
+ private void startSlideShow(List<String> aInstruction) {
+ int aSlideShowSlidesCount = Integer.parseInt(aInstruction.get(1));
+ int aCurrentSlideIndex = Integer.parseInt(aInstruction.get(2));
+
+ mSlideShow.setSlidesCount(aSlideShowSlidesCount);
+ mSlideShow.setCurrentSlideIndex(aCurrentSlideIndex);
+
+ Intent aStatusConnectedSlideShowRunningIntent = new Intent(
+ CommunicationService.STATUS_CONNECTED_SLIDESHOW_RUNNING);
+ Intent aSlideChangedIntent = new Intent(
+ CommunicationService.MSG_SLIDE_CHANGED);
+ aSlideChangedIntent.putExtra("slide_number", aCurrentSlideIndex);
+
+ LocalBroadcastManager.getInstance(mContext)
+ .sendBroadcast(aStatusConnectedSlideShowRunningIntent);
+ LocalBroadcastManager.getInstance(mContext)
+ .sendBroadcast(aSlideChangedIntent);
+ }
+
+ private void finishSlideShow() {
+ this.mSlideShow = new SlideShow(mContext);
+
+ Intent aStatusConnectedNoSlideShowIntent = new Intent(
+ CommunicationService.STATUS_CONNECTED_NOSLIDESHOW);
+
+ LocalBroadcastManager.getInstance(mContext)
+ .sendBroadcast(aStatusConnectedNoSlideShowIntent);
+ }
+
+ private void setUpCurrentSlide(List<String> aInstruction) {
+ int aCurrentSlideIndex = Integer.parseInt(aInstruction.get(1));
+
+ mSlideShow.setCurrentSlideIndex(aCurrentSlideIndex);
+
+ Intent aSlideChangedIntent = new Intent(
+ CommunicationService.MSG_SLIDE_CHANGED);
+ aSlideChangedIntent.putExtra("slide_number", aCurrentSlideIndex);
+
+ LocalBroadcastManager.getInstance(mContext)
+ .sendBroadcast(aSlideChangedIntent);
+ }
+
+ private void setUpSlidePreview(List<String> aInstruction) {
+ int aSlideIndex = Integer.parseInt(aInstruction.get(1));
+ String aImageAsString = aInstruction.get(2);
+
+ byte[] aImage = Base64.decode(aImageAsString, Base64.DEFAULT);
+ mSlideShow.setSlidePreview(aSlideIndex, aImage);
+
+ Intent aSlidePreviewChangedIntent = new Intent(
+ CommunicationService.MSG_SLIDE_PREVIEW);
+ aSlidePreviewChangedIntent.putExtra("slide_number", aSlideIndex);
+
+ LocalBroadcastManager.getInstance(mContext)
+ .sendBroadcast(aSlidePreviewChangedIntent);
+ }
+
+ private void setUpSlideNotes(List<String> aInstruction) {
+ int aSlideIndex = Integer.parseInt(aInstruction.get(1));
+ StringBuilder aNotesBuilder = new StringBuilder();
+ for (int aNoteIndex = 2; aNoteIndex < aInstruction
+ .size(); aNoteIndex++) {
+ aNotesBuilder.append(aInstruction.get(aNoteIndex));
+ }
+ String aNotes = aNotesBuilder.toString();
+
+ mSlideShow.setSlideNotes(aSlideIndex, aNotes);
+
+ Intent aSlideNotesChangedIntent = new Intent(
+ CommunicationService.MSG_SLIDE_NOTES);
+ aSlideNotesChangedIntent.putExtra("slide_number", aSlideIndex);
+
+ LocalBroadcastManager.getInstance(mContext)
+ .sendBroadcast(aSlideNotesChangedIntent);
}
}
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Server.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Server.java
index 503f87a..dd2bc5b 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/Server.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Server.java
@@ -12,27 +12,28 @@ import android.os.Parcel;
import android.os.Parcelable;
public class Server implements Parcelable {
+ private static final int SPECIAL_PARCELABLE_OBJECTS_BITMASK = 0;
- public enum Protocol {
+ public static enum Protocol {
NETWORK, BLUETOOTH
}
- private Protocol mProtocol;
- private String mAddress;
- private String mName;
- private long mTimeDiscovered;
+ private final Protocol mProtocol;
+ private final String mAddress;
+ private final String mName;
+ private final long mTimeDiscovered;
+
/**
* Signifies a Server that shouldn't be automatically removed from the list.
* Used e.g. for the emulator.
*/
protected boolean mNoTimeout = false;
- protected Server(Protocol aProtocol, String aAddress, String aName,
- long aTimeDiscovered) {
- mProtocol = aProtocol;
- mAddress = aAddress;
- mName = aName;
- mTimeDiscovered = aTimeDiscovered;
+ protected Server(Protocol aProtocol, String aAddress, String aName, long aTimeDiscovered) {
+ this.mProtocol = aProtocol;
+ this.mAddress = aAddress;
+ this.mName = aName;
+ this.mTimeDiscovered = aTimeDiscovered;
}
public Protocol getProtocol() {
@@ -43,11 +44,6 @@ public class Server implements Parcelable {
return mAddress;
}
- /**
- * Get a human friendly name for the server.
- *
- * @return The name.
- */
public String getName() {
return mName;
}
@@ -57,25 +53,26 @@ public class Server implements Parcelable {
}
public String toString() {
- return getClass().getName() + '@' + Integer.toHexString(hashCode()) + ":{" + mAddress + "," + mName + "}";
+ return getClass().getName() + '@' + Integer
+ .toHexString(hashCode()) + ":{" + mAddress + "," + mName + "}";
}
@Override
public int describeContents() {
- return 0;
+ return SPECIAL_PARCELABLE_OBJECTS_BITMASK;
}
@Override
- public void writeToParcel(Parcel out, int flags) {
- out.writeString(mAddress);
- out.writeString(mName);
- out.writeString(mProtocol.name());
- out.writeLong(mTimeDiscovered);
+ public void writeToParcel(Parcel parcel, int flags) {
+ parcel.writeString(mAddress);
+ parcel.writeString(mName);
+ parcel.writeString(mProtocol.name());
+ parcel.writeLong(mTimeDiscovered);
}
public static final Parcelable.Creator<Server> CREATOR = new Parcelable.Creator<Server>() {
- public Server createFromParcel(Parcel in) {
- return new Server(in);
+ public Server createFromParcel(Parcel parcel) {
+ return new Server(parcel);
}
public Server[] newArray(int size) {
@@ -83,11 +80,11 @@ public class Server implements Parcelable {
}
};
- private Server(Parcel in) {
- mAddress = in.readString();
- mName = in.readString();
- mProtocol = Protocol.valueOf(in.readString());
- mTimeDiscovered = in.readLong();
+ private Server(Parcel parcel) {
+ this.mAddress = parcel.readString();
+ this.mName = parcel.readString();
+ this.mProtocol = Protocol.valueOf(parcel.readString());
+ this.mTimeDiscovered = parcel.readLong();
}
}
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/SlideShow.java b/android/sdremote/src/org/libreoffice/impressremote/communication/SlideShow.java
index 8b7a8e1..dbb5c56 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/SlideShow.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/SlideShow.java
@@ -8,8 +8,6 @@
*/
package org.libreoffice.impressremote.communication;
-import org.libreoffice.impressremote.R;
-
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -19,69 +17,79 @@ import android.graphics.Paint;
import android.graphics.RectF;
import android.util.SparseArray;
+import org.libreoffice.impressremote.R;
+
public class SlideShow {
+ private final Context mContext;
+
+ private int mSlidesCount;
+ private int mCurrentSlideIndex;
+
+ private final SparseArray<Bitmap> mSlidePreviews;
+ private final SparseArray<String> mSlideNotes;
- private SparseArray<Bitmap> mPreviews = new SparseArray<Bitmap>();
- private SparseArray<String> mNotes = new SparseArray<String>();
+ public SlideShow(Context aContext) {
+ this.mContext = aContext;
- private int mSize = 0;
- private int mCurrentSlide = 0;
- private Context mContext;
+ this.mSlidesCount = 0;
+ this.mCurrentSlideIndex = 0;
- protected SlideShow(Context aContext) {
- mContext = aContext;
+ this.mSlidePreviews = new SparseArray<Bitmap>();
+ this.mSlideNotes = new SparseArray<String>();
}
- protected void setLength(int aSize) {
- mSize = aSize;
+ public void setSlidesCount(int aSlidesCount) {
+ this.mSlidesCount = aSlidesCount;
}
- public int getSize() {
- return mSize;
+ public int getSlidesCount() {
+ return mSlidesCount;
}
- public int getCurrentSlide() {
- return mCurrentSlide;
+ public void setCurrentSlideIndex(int aCurrentSlideIndex) {
+ this.mCurrentSlideIndex = aCurrentSlideIndex;
}
- protected void setCurrentSlide(int aSlide) {
- mCurrentSlide = aSlide;
+ public int getCurrentSlideIndex() {
+ return mCurrentSlideIndex;
}
- protected void putImage(int aSlide, byte[] aImage) {
- Bitmap aBitmap = BitmapFactory.decodeByteArray(aImage, 0, aImage.length);
+ public void setSlidePreview(int aSlideIndex, byte[] aSlidePreview) {
+ Bitmap aBitmap = BitmapFactory
+ .decodeByteArray(aSlidePreview, 0, aSlidePreview.length);
final int borderWidth = 8;
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setShadowLayer(borderWidth, 0, 0, Color.BLACK);
RectF aRect = new RectF(borderWidth, borderWidth, borderWidth
- + aBitmap.getWidth(), borderWidth
- + aBitmap.getHeight());
+ + aBitmap.getWidth(), borderWidth
+ + aBitmap.getHeight());
Bitmap aOut = Bitmap.createBitmap(aBitmap.getWidth() + 2
- * borderWidth, aBitmap.getHeight() + 2
- * borderWidth, aBitmap.getConfig());
+ * borderWidth, aBitmap.getHeight() + 2
+ * borderWidth, aBitmap.getConfig());
Canvas canvas = new Canvas(aOut);
canvas.drawColor(mContext.getResources().getColor(R.color.light_grey));
canvas.drawRect(aRect, p);
canvas.drawBitmap(aBitmap, null, aRect, null);
- mPreviews.put(aSlide, aOut);
+ mSlidePreviews.put(aSlideIndex, aOut);
}
- public Bitmap getImage(int aSlide) {
- return mPreviews.get(aSlide);
+ public Bitmap getSlidePreview(int aSlideIndex) {
+ return mSlidePreviews.get(aSlideIndex);
}
- protected void putNotes(int aSlide, String aNotes) {
- mNotes.put(aSlide, aNotes);
+ public void setSlideNotes(int aSlideIndex, String aSlideNotes) {
+ mSlideNotes.put(aSlideIndex, aSlideNotes);
}
- public String getNotes(int aSlide) {
- String aNote = mNotes.get(aSlide);
- if (aNote != null) {
- return aNote;
+ public String getSlideNotes(int aSlideIndex) {
+ String aSlideNotes = mSlideNotes.get(aSlideIndex);
+
+ if (aSlideNotes != null) {
+ return aSlideNotes;
} else {
return "";
}
@@ -97,7 +105,7 @@ public class SlideShow {
public class Timer {
/**
* This stores the starting time of the timer if running.
- *
+ * <p/>
* If paused this stores how long the timer was previously running.
*/
private long aTime = 0;
@@ -110,8 +118,8 @@ public class SlideShow {
/**
* Set whether this timer should be a normal or a countdown timer.
- * @param aIsCountdown
- * Whether this should be a countdown timer.
+ *
+ * @param aIsCountdown Whether this should be a countdown timer.
*/
public void setCountdown(boolean aIsCountdown) {
mIsCountdown = aIsCountdown;
@@ -124,8 +132,8 @@ public class SlideShow {
/**
* Set the countdown time. Can be set, and isn't lost, whatever mode
* the timer is running in.
- * @param aCountdownTime
- * The countdown time.
+ *
+ * @param aCountdownTime The countdown time.
*/
public void setCountdownTime(long aCountdownTime) {
mCountdownTime = aCountdownTime;
@@ -170,6 +178,7 @@ public class SlideShow {
/**
* Get either how long this timer has been running, or how long the
* timer still has left to run.
+ *
* @return
*/
public long getTimeMillis() {
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java b/android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java
index eebc2f3..520a0e9 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/Transmitter.java
@@ -14,57 +14,66 @@ import android.graphics.Color;
* Interface to send commands to the server.
*/
public class Transmitter {
+ private final Client mClient;
- private Client mClient;
+ public Transmitter(Client aClient) {
+ this.mClient = aClient;
+ }
- public Transmitter(Client aClient) {
- mClient = aClient;
- }
+ public void performNextTransition() {
+ mClient.sendCommand(Protocol.Commands
+ .prepareCommand(Protocol.Commands.TRANSITION_NEXT));
+ }
- public void nextTransition() {
- mClient.sendCommand("transition_next\n\n");
- }
+ public void performPreviousTransition() {
+ mClient.sendCommand(Protocol.Commands
+ .prepareCommand(Protocol.Commands.TRANSITION_PREVIOUS));
+ }
- public void previousTransition() {
+ public void setCurrentSlide(int slideIndex) {
+ mClient.sendCommand(Protocol.Commands
+ .prepareCommand(Protocol.Commands.GOTO_SLIDE,
+ Integer.toString(slideIndex)));
+ }
- mClient.sendCommand("transition_previous\n\n");
- }
+ /**
+ * Blank the screen to the default colour (set server-side), which is
+ * generally black. This is slightly faster than using
+ * <code> setUpBlankScreen( colour ) </code>.
+ */
+ public void setUpBlankScreen() {
+ mClient.sendCommand(Protocol.Commands
+ .prepareCommand(Protocol.Commands.PRESENTATION_BLANK_SCREEN));
+ }
- public void gotoSlide(int slide) {
- mClient.sendCommand("goto_slide\n" + slide + "\n\n");
- }
+ /**
+ * Set the screen to a specific colour. Only use if a non default colour is
+ * needed.
+ *
+ * @param aColor blank screen color
+ */
+ public void setUpBlankScreen(Color aColor) {
+ // FIXME: check how to get colour in integer form.
- /**
- * Blank the screen to the default colour (set server-side), which is
- * generally black. This is slightly faster than using
- * <code> blankScreen( colour ) </code>.
- */
- public void blankScreen() {
- mClient.sendCommand("presentation_blank_screen\n\n");
- }
+ mClient.sendCommand(Protocol.Commands
+ .prepareCommand(Protocol.Commands.PRESENTATION_BLANK_SCREEN,
+ aColor.toString()));
+ }
- /**
- * Set the screen to a specific colour. Only use if a non default colour is
- * needed.
- *
- * @param aColor
- */
- public void blankScreen(Color aColor) {
- // FIXME: check how to get colour in integer form.
- mClient.sendCommand("presentation_blank_screen\n" + aColor + "\n\n");
- }
+ public void resumePresentation() {
+ mClient.sendCommand(Protocol.Commands
+ .prepareCommand(Protocol.Commands.PRESENTATION_RESUME));
+ }
- public void resume() {
- mClient.sendCommand("presentation_resume\n\n");
- }
+ public void startPresentation() {
+ mClient.sendCommand(Protocol.Commands
+ .prepareCommand(Protocol.Commands.PRESENTATION_START));
+ }
- public void startPresentation() {
- mClient.sendCommand("presentation_start\n\n");
- }
-
- public void stopPresentation() {
- mClient.sendCommand("presentation_stop\n\n");
- }
+ public void stopPresentation() {
+ mClient.sendCommand(Protocol.Commands
+ .prepareCommand(Protocol.Commands.PRESENTATION_STOP));
+ }
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list