Kaydet (Commit) 0357b778 authored tarafından Andrzej J.R. Hunt's avatar Andrzej J.R. Hunt

Implemented rotation of slideshow view.

Change-Id: Ib518e1609d21463273a00fcf161f20c80eae6a67
üst e02468f6
...@@ -20,21 +20,14 @@ ...@@ -20,21 +20,14 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity
android:name=".communication.TestClient"
android:label="Remote--Direct" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".communication.CommunicationService" > <service android:name=".communication.CommunicationService" >
</service> </service>
<activity android:name=".PairingActivity" > <activity android:name=".PairingActivity" >
</activity> </activity>
<activity android:name=".StartPresentationActivity" >
</activity>
<activity <activity
android:name=".PresentationActivity" android:name=".PresentationActivity"
android:label="@string/title_activity_presentation" > android:label="@string/title_activity_presentation" >
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
<pl.polidea.coverflow.CoverFlow <pl.polidea.coverflow.CoverFlow
xmlns:coverflow="http://schemas.android.com/apk/res/org.libreoffice.impressremote" xmlns:coverflow="http://schemas.android.com/apk/res/org.libreoffice.impressremote"
android:id="@+id/presentation_coverflow" android:id="@+id/presentation_coverflow"
android:layout_width="fill_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="match_parent"
android:layout_marginTop="5dip" android:layout_marginTop="5dip"
coverflow:imageHeight="150dip" coverflow:imageHeight="150dip"
coverflow:imageWidth="180dip" coverflow:imageWidth="180dip"
...@@ -42,8 +42,8 @@ ...@@ -42,8 +42,8 @@
<ScrollView <ScrollView
android:id="@+id/presentation_scrollview" android:id="@+id/presentation_scrollview"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="wrap_content" > android:layout_height="match_parent" >
<WebView <WebView
android:id="@+id/presentation_notes" android:id="@+id/presentation_notes"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/startpresentation_instruction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_margin="5dip"
android:text="@string/startpresentation_instruction" />
<Button
android:id="@+id/startpresentation_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/startpresentation_button" />
</LinearLayout>
\ No newline at end of file
...@@ -24,7 +24,9 @@ ...@@ -24,7 +24,9 @@
<string name="wifi">WI-FI</string> <string name="wifi">WI-FI</string>
<string name="selector_noservers">Searching for computers…</string> <string name="selector_noservers">Searching for computers…</string>
<string name="pairing_instructions_1">In Impress, click on the "Slideshow" menu and select "Impress Remote".</string> <string name="pairing_instructions_1">In Impress, click on the "Slideshow" menu and select "Impress Remote".</string>
<string name="pairing_instructions_2_deviceName">Choose "{1}" as your device.</string> <string name="pairing_instructions_2_deviceName">Choose \"{0}\" as your device.</string>
<string name="pairing_instructions_3">Then input this PIN:</string> <string name="pairing_instructions_3">Then input this PIN:</string>
<string name="startpresentation_instruction">No presentation is currently running.</string>
<string name="startpresentation_button">Start Presentation</string>
</resources> </resources>
\ No newline at end of file
...@@ -39,21 +39,12 @@ public class PairingActivity extends Activity { ...@@ -39,21 +39,12 @@ public class PairingActivity extends Activity {
Context.BIND_IMPORTANT); Context.BIND_IMPORTANT);
mIsBound = true; mIsBound = true;
mPinText = (TextView) findViewById(R.id.pairing_pin);
IntentFilter aFilter = new IntentFilter( IntentFilter aFilter = new IntentFilter(
CommunicationService.MSG_PAIRING_STARTED); CommunicationService.MSG_PAIRING_STARTED);
aFilter.addAction(CommunicationService.MSG_PAIRING_SUCCESSFUL); aFilter.addAction(CommunicationService.MSG_PAIRING_SUCCESSFUL);
LocalBroadcastManager.getInstance(this).registerReceiver(mListener, LocalBroadcastManager.getInstance(this).registerReceiver(mListener,
aFilter); aFilter);
// mBluetoothContainer = findViewById(R.id.selector_container_bluetooth);
// mBluetoothList = (LinearLayout) findViewById(R.id.selector_list_bluetooth);
// mNetworkContainer = findViewById(R.id.selector_container_network);
// mNetworkList = (LinearLayout) findViewById(R.id.selector_list_network);
// mNoServerLabel = (TextView) findViewById(R.id.selector_label_none);
//
// refreshLists();
} }
private ServiceConnection mConnection = new ServiceConnection() { private ServiceConnection mConnection = new ServiceConnection() {
...@@ -61,7 +52,9 @@ public class PairingActivity extends Activity { ...@@ -61,7 +52,9 @@ public class PairingActivity extends Activity {
public void onServiceConnected(ComponentName aClassName, public void onServiceConnected(ComponentName aClassName,
IBinder aService) { IBinder aService) {
setContentView(R.layout.activity_pairing); setContentView(R.layout.activity_pairing);
mPinText = (TextView) findViewById(R.id.pairing_pin);
mCommunicationService = ((CommunicationService.CBinder) aService)
.getService();
((TextView) findViewById(R.id.pairing_instruction2_deviceName)) ((TextView) findViewById(R.id.pairing_instruction2_deviceName))
.setText(MessageFormat .setText(MessageFormat
.format(getResources() .format(getResources()
...@@ -69,8 +62,6 @@ public class PairingActivity extends Activity { ...@@ -69,8 +62,6 @@ public class PairingActivity extends Activity {
mCommunicationService mCommunicationService
.getDeviceName())); .getDeviceName()));
mCommunicationService = ((CommunicationService.CBinder) aService)
.getService();
if (mCommunicationService.getState() == State.CONNECTING) { if (mCommunicationService.getState() == State.CONNECTING) {
mPinText.setText(mCommunicationService.getPairingPin()); mPinText.setText(mCommunicationService.getPairingPin());
} }
...@@ -94,7 +85,9 @@ public class PairingActivity extends Activity { ...@@ -94,7 +85,9 @@ public class PairingActivity extends Activity {
// refreshLists(); // refreshLists();
} else if (aIntent.getAction().equals( } else if (aIntent.getAction().equals(
CommunicationService.MSG_PAIRING_SUCCESSFUL)) { CommunicationService.MSG_PAIRING_SUCCESSFUL)) {
mPinText.setText("Paired!"); Intent nIntent = new Intent(PairingActivity.this,
StartPresentationActivity.class);
startActivity(nIntent);
} }
} }
......
...@@ -6,7 +6,10 @@ import org.libreoffice.impressremote.communication.SlideShow; ...@@ -6,7 +6,10 @@ import org.libreoffice.impressremote.communication.SlideShow;
import pl.polidea.coverflow.AbstractCoverFlowImageAdapter; import pl.polidea.coverflow.AbstractCoverFlowImageAdapter;
import pl.polidea.coverflow.CoverFlow; import pl.polidea.coverflow.CoverFlow;
import android.app.Fragment; import android.app.Fragment;
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
...@@ -14,7 +17,7 @@ import android.graphics.Color; ...@@ -14,7 +17,7 @@ import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.RectF; import android.graphics.RectF;
import android.os.Bundle; import android.os.Bundle;
import android.os.Message; import android.support.v4.content.LocalBroadcastManager;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
...@@ -47,8 +50,8 @@ public class PresentationFragment extends Fragment { ...@@ -47,8 +50,8 @@ public class PresentationFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
mContext = container.getContext(); mContext = getActivity().getApplicationContext();
container.removeAllViews();
View v = inflater.inflate(R.layout.fragment_presentation, container, View v = inflater.inflate(R.layout.fragment_presentation, container,
false); false);
...@@ -85,9 +88,26 @@ public class PresentationFragment extends Fragment { ...@@ -85,9 +88,26 @@ public class PresentationFragment extends Fragment {
// We need to update the view now // We need to update the view now
aAdapter.notifyDataSetChanged(); aAdapter.notifyDataSetChanged();
} }
IntentFilter aFilter = new IntentFilter(
CommunicationService.MSG_SLIDE_CHANGED);
aFilter.addAction(CommunicationService.MSG_SLIDE_NOTES);
aFilter.addAction(CommunicationService.MSG_SLIDE_PREVIEW);
LocalBroadcastManager
.getInstance(getActivity().getApplicationContext())
.registerReceiver(mListener, aFilter);
return v; return v;
} }
@Override
public void onDestroyView() {
super.onDestroyView();
LocalBroadcastManager
.getInstance(getActivity().getApplicationContext())
.unregisterReceiver(mListener);
}
private void updateSlideNumberDisplay() { private void updateSlideNumberDisplay() {
int aSlide = mSlideShow.getCurrentSlide(); int aSlide = mSlideShow.getCurrentSlide();
mNumberText.setText((aSlide + 1) + "/" + mSlideShow.getSize()); mNumberText.setText((aSlide + 1) + "/" + mSlideShow.getSize());
...@@ -204,23 +224,28 @@ public class PresentationFragment extends Fragment { ...@@ -204,23 +224,28 @@ public class PresentationFragment extends Fragment {
updateSlideNumberDisplay(); updateSlideNumberDisplay();
} }
public void handleMessage(Message aMessage) { private BroadcastReceiver mListener = new BroadcastReceiver() {
Bundle aData = aMessage.getData();
switch (aMessage.what) { @Override
case CommunicationService.MSG_SLIDE_CHANGED: public void onReceive(Context aContext, Intent aIntent) {
int aSlide = aData.getInt("slide_number"); if (aIntent.getAction().equals(
mTopView.setSelection(aSlide, true); CommunicationService.MSG_SLIDE_CHANGED)) {
updateSlideNumberDisplay(); int aSlide = aIntent.getExtras().getInt("slide_number");
break; mTopView.setSelection(aSlide, true);
case CommunicationService.MSG_SLIDE_PREVIEW: updateSlideNumberDisplay();
int aNSlide = aData.getInt("slide_number"); } else if (aIntent.getAction().equals(
if (mTopView.getSelectedItemPosition() == aNSlide) { CommunicationService.MSG_SLIDE_PREVIEW)) {
// mTopView. // TODO: update the current item int aNSlide = aIntent.getExtras().getInt("slide_number");
if (mTopView.getSelectedItemPosition() == aNSlide) {
mTopView.setSelection(aNSlide);
}
} else if (aIntent.getAction().equals(
CommunicationService.MSG_SLIDE_NOTES)) {
// TODO: update me
} }
break;
} }
} };
// ------------------------------------------------- THUMBNAIL ADAPTER ---- // ------------------------------------------------- THUMBNAIL ADAPTER ----
protected class ThumbnailAdapter extends AbstractCoverFlowImageAdapter { protected class ThumbnailAdapter extends AbstractCoverFlowImageAdapter {
......
...@@ -61,6 +61,12 @@ public class SelectorActivity extends Activity { ...@@ -61,6 +61,12 @@ public class SelectorActivity extends Activity {
refreshLists(); refreshLists();
} }
@Override
protected void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mListener);
}
@Override @Override
public void onBackPressed() { public void onBackPressed() {
mCommunicationService.stopFindingServers(); mCommunicationService.stopFindingServers();
......
package org.libreoffice.impressremote;
import org.libreoffice.impressremote.communication.CommunicationService;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v4.content.LocalBroadcastManager;
import android.view.View;
import android.view.View.OnClickListener;
public class StartPresentationActivity extends Activity {
private CommunicationService mCommunicationService = null;
private boolean mIsBound = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_startpresentation);
bindService(new Intent(this, CommunicationService.class), mConnection,
Context.BIND_IMPORTANT);
mIsBound = true;
IntentFilter aFilter = new IntentFilter(
CommunicationService.MSG_SLIDESHOW_STARTED);
LocalBroadcastManager.getInstance(this).registerReceiver(mListener,
aFilter);
findViewById(R.id.startpresentation_button).setOnClickListener(
mClickListener);
}
@Override
protected void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mListener);
}
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName aClassName,
IBinder aService) {
mCommunicationService = ((CommunicationService.CBinder) aService)
.getService();
if (mCommunicationService.isSlideShowRunning()) {
Intent nIntent = new Intent(StartPresentationActivity.this,
PresentationActivity.class);
startActivity(nIntent);
}
}
@Override
public void onServiceDisconnected(ComponentName aClassName) {
mCommunicationService = null;
}
};
private OnClickListener mClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (mCommunicationService != null) {
mCommunicationService.getTransmitter().startPresentation();
}
}
};
private BroadcastReceiver mListener = new BroadcastReceiver() {
@Override
public void onReceive(Context aContext, Intent aIntent) {
if (aIntent.getAction().equals(
CommunicationService.MSG_SLIDESHOW_STARTED)) {
Intent nIntent = new Intent(StartPresentationActivity.this,
PresentationActivity.class);
startActivity(nIntent);
}
}
};
}
...@@ -34,6 +34,8 @@ public abstract class Client { ...@@ -34,6 +34,8 @@ public abstract class Client {
protected OutputStream mOutputStream; protected OutputStream mOutputStream;
protected String mPin = ""; protected String mPin = "";
private static Client latestInstance = null;
public abstract void closeConnection(); public abstract void closeConnection();
private Receiver mReceiver; private Receiver mReceiver;
...@@ -42,6 +44,7 @@ public abstract class Client { ...@@ -42,6 +44,7 @@ public abstract class Client {
public Client(Context aContext) { public Client(Context aContext) {
mContext = aContext; mContext = aContext;
latestInstance = this;
} }
public void setReceiver(Receiver aReceiver) { public void setReceiver(Receiver aReceiver) {
...@@ -77,11 +80,16 @@ public abstract class Client { ...@@ -77,11 +80,16 @@ public abstract class Client {
// TODO stream couldn't be opened. // TODO stream couldn't be opened.
e1.printStackTrace(); e1.printStackTrace();
} }
latestInstance = null;
} }
public String getPin() { public static String getPin() {
return mPin; if (latestInstance != null) {
return latestInstance.mPin;
} else {
return "";
}
} }
/** /**
......
...@@ -12,7 +12,6 @@ import android.app.Service; ...@@ -12,7 +12,6 @@ import android.app.Service;
import android.content.Intent; import android.content.Intent;
import android.os.Binder; import android.os.Binder;
import android.os.IBinder; import android.os.IBinder;
import android.os.Messenger;
public class CommunicationService extends Service implements Runnable { public class CommunicationService extends Service implements Runnable {
...@@ -32,10 +31,7 @@ public class CommunicationService extends Service implements Runnable { ...@@ -32,10 +31,7 @@ public class CommunicationService extends Service implements Runnable {
} }
public String getPairingPin() { public String getPairingPin() {
if (mClient != null) return Client.getPin();
return mClient.getPin();
else
return "";
} }
public String getDeviceName() { public String getDeviceName() {
...@@ -67,6 +63,7 @@ public class CommunicationService extends Service implements Runnable { ...@@ -67,6 +63,7 @@ public class CommunicationService extends Service implements Runnable {
mState = State.DISCONNECTED; mState = State.DISCONNECTED;
} }
if (mStateDesired == State.CONNECTED) { if (mStateDesired == State.CONNECTED) {
mState = State.CONNECTING;
switch (mServerDesired.getProtocol()) { switch (mServerDesired.getProtocol()) {
case NETWORK: case NETWORK:
mClient = new NetworkClient( mClient = new NetworkClient(
...@@ -138,10 +135,10 @@ public class CommunicationService extends Service implements Runnable { ...@@ -138,10 +135,10 @@ public class CommunicationService extends Service implements Runnable {
private final IBinder mBinder = new CBinder(); private final IBinder mBinder = new CBinder();
public static final int MSG_SLIDESHOW_STARTED = 1; public static final String MSG_SLIDESHOW_STARTED = "SLIDESHOW_STARTED";
public static final int MSG_SLIDE_CHANGED = 2; public static final String MSG_SLIDE_CHANGED = "SLIDE_CHANGED";
public static final int MSG_SLIDE_PREVIEW = 3; public static final String MSG_SLIDE_PREVIEW = "SLIDE_PREVIEW";
public static final int MSG_SLIDE_NOTES = 4; public static final String MSG_SLIDE_NOTES = "SLIDE_NOTES";
public static final String MSG_SERVERLIST_CHANGED = "SERVERLIST_CHANGED"; public static final String MSG_SERVERLIST_CHANGED = "SERVERLIST_CHANGED";
public static final String MSG_PAIRING_STARTED = "PAIRING_STARTED"; public static final String MSG_PAIRING_STARTED = "PAIRING_STARTED";
...@@ -151,14 +148,10 @@ public class CommunicationService extends Service implements Runnable { ...@@ -151,14 +148,10 @@ public class CommunicationService extends Service implements Runnable {
private Client mClient; private Client mClient;
private Receiver mReceiver = new Receiver(); private Receiver mReceiver = new Receiver(this);
private ServerFinder mFinder = new ServerFinder(this); private ServerFinder mFinder = new ServerFinder(this);
public void setActivityMessenger(Messenger aActivityMessenger) {
mReceiver.setActivityMessenger(aActivityMessenger);
}
@Override @Override
public IBinder onBind(Intent intent) { public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
...@@ -201,5 +194,9 @@ public class CommunicationService extends Service implements Runnable { ...@@ -201,5 +194,9 @@ public class CommunicationService extends Service implements Runnable {
return mReceiver.getSlideShow(); return mReceiver.getSlideShow();
} }
public boolean isSlideShowRunning() {
return mReceiver.isSlideShowRunning();
}
} }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
...@@ -10,112 +10,87 @@ package org.libreoffice.impressremote.communication; ...@@ -10,112 +10,87 @@ package org.libreoffice.impressremote.communication;
import java.util.ArrayList; import java.util.ArrayList;
import android.os.Bundle; import android.content.Context;
import android.os.Message; import android.content.Intent;
import android.os.Messenger; import android.support.v4.content.LocalBroadcastManager;
import android.os.RemoteException;
import android.util.Base64; import android.util.Base64;
public class Receiver { public class Receiver {
private Messenger mActivityMessenger; public Receiver(Context aContext) {
mContext = aContext;
private SlideShow mSlideShow = new SlideShow(); mSlideShow = new SlideShow(mContext);
}
public SlideShow getSlideShow() {
return mSlideShow; private Context mContext;
}
private SlideShow mSlideShow;
public void setActivityMessenger(Messenger aActivityMessenger) {
mActivityMessenger = aActivityMessenger; public SlideShow getSlideShow() {
} return mSlideShow;
}
public void parseCommand(ArrayList<String> aCommand) {
if (mActivityMessenger == null) { public boolean isSlideShowRunning() {
return; return (mSlideShow.getSize() > 0);
} }
String aInstruction = aCommand.get(0);
if (aInstruction.equals("slideshow_started")) { public void parseCommand(ArrayList<String> aCommand) {
int aSlideShowlength = Integer.parseInt(aCommand.get(1)); String aInstruction = aCommand.get(0);
int aCurrentSlide = Integer.parseInt(aCommand.get(2)); if (aInstruction.equals("slideshow_started")) {
mSlideShow.setLength(aSlideShowlength); int aSlideShowlength = Integer.parseInt(aCommand.get(1));
mSlideShow.setCurrentSlide(aCurrentSlide); int aCurrentSlide = Integer.parseInt(aCommand.get(2));
mSlideShow.setLength(aSlideShowlength);
Message aMessage = Message.obtain(null, mSlideShow.setCurrentSlide(aCurrentSlide);
CommunicationService.MSG_SLIDESHOW_STARTED); Intent aIntent = new Intent(
Bundle aData = new Bundle(); CommunicationService.MSG_SLIDESHOW_STARTED);
aMessage.setData(aData); LocalBroadcastManager.getInstance(mContext).sendBroadcast(aIntent);
try { } else {
mActivityMessenger.send(aMessage); if (mSlideShow == null)
} catch (RemoteException e) { return;
// Dead Handler -- i.e. Activity gone.
} if (aInstruction.equals("slide_updated")) {
} else {
if (mSlideShow == null) int aSlideNumber = Integer.parseInt(aCommand.get(1));
return;
mSlideShow.setCurrentSlide(aSlideNumber);
if (aInstruction.equals("slide_updated")) {
Intent aIntent = new Intent(
int aSlideNumber = Integer.parseInt(aCommand.get(1)); CommunicationService.MSG_SLIDE_CHANGED);
aIntent.putExtra("slide_number", aSlideNumber);
mSlideShow.setCurrentSlide(aSlideNumber); LocalBroadcastManager.getInstance(mContext).sendBroadcast(
aIntent);
Message aMessage = Message.obtain(null, } else if (aInstruction.equals("slide_preview")) {
CommunicationService.MSG_SLIDE_CHANGED); int aSlideNumber = Integer.parseInt(aCommand.get(1));
Bundle aData = new Bundle(); String aImageString = aCommand.get(2);
aData.putInt("slide_number", aSlideNumber); byte[] aImage = Base64.decode(aImageString, Base64.DEFAULT);
aMessage.setData(aData);
try { // Store image internally
mActivityMessenger.send(aMessage); mSlideShow.putImage(aSlideNumber, aImage);
} catch (RemoteException e) {
// Dead Handler -- i.e. Activity gone. Intent aIntent = new Intent(
} CommunicationService.MSG_SLIDE_PREVIEW);
} else if (aInstruction.equals("slide_preview")) { aIntent.putExtra("slide_number", aSlideNumber);
int aSlideNumber = Integer.parseInt(aCommand.get(1)); LocalBroadcastManager.getInstance(mContext).sendBroadcast(
String aImageString = aCommand.get(2); aIntent);
byte[] aImage = Base64.decode(aImageString, Base64.DEFAULT); } else if (aInstruction.equals("slide_notes")) {
int aSlideNumber = Integer.parseInt(aCommand.get(1));
// Store image internally String aNotes = new String();
mSlideShow.putImage(aSlideNumber, aImage); for (int i = 2; i < aCommand.size(); i++) {
aNotes += aCommand.get(i);
// Notify the frontend }
Message aMessage = Message.obtain(null,
CommunicationService.MSG_SLIDE_PREVIEW); // Store image internally
Bundle aData = new Bundle(); mSlideShow.putNotes(aSlideNumber, aNotes);
aData.putInt("slide_number", aSlideNumber);
aMessage.setData(aData); Intent aIntent = new Intent(
try { CommunicationService.MSG_SLIDE_NOTES);
mActivityMessenger.send(aMessage); aIntent.putExtra("slide_number", aSlideNumber);
} catch (RemoteException e) { LocalBroadcastManager.getInstance(mContext).sendBroadcast(
// TODO Auto-generated catch block aIntent);
e.printStackTrace(); }
}
} else if (aInstruction.equals("slide_notes")) { }
int aSlideNumber = Integer.parseInt(aCommand.get(1));
String aNotes = new String(); }
for (int i = 2; i < aCommand.size(); i++) {
aNotes += aCommand.get(i);
}
// Store image internally
mSlideShow.putNotes(aSlideNumber, aNotes);
// Notify the frontend
Message aMessage = Message.obtain(null,
CommunicationService.MSG_SLIDE_NOTES);
Bundle aData = new Bundle();
aData.putInt("slide_number", aSlideNumber);
aMessage.setData(aData);
try {
mActivityMessenger.send(aMessage);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
} }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
...@@ -8,160 +8,169 @@ ...@@ -8,160 +8,169 @@
*/ */
package org.libreoffice.impressremote.communication; package org.libreoffice.impressremote.communication;
import org.libreoffice.impressremote.R;
import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.util.SparseArray; import android.util.SparseArray;
public class SlideShow { public class SlideShow {
private SparseArray<byte[]> mPreviewImages = new SparseArray<byte[]>(); private SparseArray<byte[]> mPreviewImages = new SparseArray<byte[]>();
private SparseArray<String> mNotes = new SparseArray<String>(); private SparseArray<String> mNotes = new SparseArray<String>();
private int mSize = 0; private int mSize = 0;
private int mCurrentSlide = 0; private int mCurrentSlide = 0;
private Context mContext;
protected SlideShow() {
} protected SlideShow(Context aContext) {
mContext = aContext;
protected void setLength(int aSize) { }
mSize = aSize;
} protected void setLength(int aSize) {
mSize = aSize;
public int getSize() { }
return mSize;
} public int getSize() {
return mSize;
public int getCurrentSlide() { }
return mCurrentSlide;
} public int getCurrentSlide() {
return mCurrentSlide;
protected void setCurrentSlide(int aSlide) { }
mCurrentSlide = aSlide;
} protected void setCurrentSlide(int aSlide) {
mCurrentSlide = aSlide;
protected void putImage(int aSlide, byte[] aImage) { }
mPreviewImages.put(aSlide, aImage);
} protected void putImage(int aSlide, byte[] aImage) {
mPreviewImages.put(aSlide, aImage);
public Bitmap getImage(int aSlide) { }
byte[] aImage = mPreviewImages.get(aSlide);
return BitmapFactory.decodeByteArray(aImage, 0, aImage.length); public Bitmap getImage(int aSlide) {
} byte[] aImage = mPreviewImages.get(aSlide);
if (aImage == null) {
protected void putNotes(int aSlide, String aNotes) { return BitmapFactory.decodeResource(mContext.getResources(),
mNotes.put(aSlide, aNotes); R.drawable.image_loading);
} }
return BitmapFactory.decodeByteArray(aImage, 0, aImage.length);
public String getNotes(int aSlide) { }
return mNotes.get(aSlide);
} protected void putNotes(int aSlide, String aNotes) {
mNotes.put(aSlide, aNotes);
// ---------------------------------------------------- TIMER -------------- }
private Timer mTimer = new Timer();
public String getNotes(int aSlide) {
public Timer getTimer() { return mNotes.get(aSlide);
return mTimer; }
}
// ---------------------------------------------------- TIMER --------------
public class Timer { private Timer mTimer = new Timer();
/**
* This stores the starting time of the timer if running. public Timer getTimer() {
* return mTimer;
* If paused this stores how long the timer was previously running. }
*/
private long aTime = 0; public class Timer {
/**
private long mCountdownTime = 0; * This stores the starting time of the timer if running.
*
private boolean mIsRunning = false; * If paused this stores how long the timer was previously running.
*/
private boolean mIsCountdown = false; private long aTime = 0;
/** private long mCountdownTime = 0;
* Set whether this timer should be a normal or a countdown timer.
* @param aIsCountdown private boolean mIsRunning = false;
* Whether this should be a countdown timer.
*/ private boolean mIsCountdown = false;
public void setCountdown(boolean aIsCountdown) {
mIsCountdown = aIsCountdown; /**
if (mIsRunning) { * Set whether this timer should be a normal or a countdown timer.
mIsRunning = false; * @param aIsCountdown
aTime = 0; * Whether this should be a countdown timer.
} */
} public void setCountdown(boolean aIsCountdown) {
mIsCountdown = aIsCountdown;
/** if (mIsRunning) {
* Set the countdown time. Can be set, and isn't lost, whatever mode mIsRunning = false;
* the timer is running in. aTime = 0;
* @param aCountdownTime }
* The countdown time. }
*/
public void setCountdownTime(long aCountdownTime) { /**
mCountdownTime = aCountdownTime; * Set the countdown time. Can be set, and isn't lost, whatever mode
} * the timer is running in.
* @param aCountdownTime
public long getCountdownTime() { * The countdown time.
return mCountdownTime; */
} public void setCountdownTime(long aCountdownTime) {
mCountdownTime = aCountdownTime;
public boolean isCountdown() { }
return mIsCountdown;
} public long getCountdownTime() {
return mCountdownTime;
public boolean isRunning() { }
return mIsRunning;
} public boolean isCountdown() {
return mIsCountdown;
/** }
* Reset the timer, and stop it it was running.
*/ public boolean isRunning() {
public void reset() { return mIsRunning;
mIsRunning = false; }
aTime = 0;
} /**
* Reset the timer, and stop it it was running.
public void startTimer() { */
if (mIsRunning) public void reset() {
return; mIsRunning = false;
aTime = 0;
aTime = System.currentTimeMillis() - aTime; }
mIsRunning = true;
} public void startTimer() {
if (mIsRunning)
public void stopTimer() { return;
if (!mIsRunning)
return; aTime = System.currentTimeMillis() - aTime;
mIsRunning = true;
aTime = System.currentTimeMillis() - aTime; }
mIsRunning = false;
} public void stopTimer() {
if (!mIsRunning)
/** return;
* Get either how long this timer has been running, or how long the
* timer still has left to run. aTime = System.currentTimeMillis() - aTime;
* @return mIsRunning = false;
*/ }
public long getTimeMillis() {
long aTimeRunning; /**
// Determine how long we've been going. * Get either how long this timer has been running, or how long the
if (mIsRunning) { * timer still has left to run.
aTimeRunning = System.currentTimeMillis() - aTime; * @return
} else { */
aTimeRunning = aTime; public long getTimeMillis() {
} long aTimeRunning;
// And give the time going, or time left // Determine how long we've been going.
if (!mIsCountdown) { if (mIsRunning) {
return aTimeRunning; aTimeRunning = System.currentTimeMillis() - aTime;
} else { } else {
long aRet = mCountdownTime - aTimeRunning; aTimeRunning = aTime;
if (aRet < 0) { // We have completed! }
mIsRunning = false; // And give the time going, or time left
aRet = 0; if (!mIsCountdown) {
} return aTimeRunning;
return aRet; } else {
} long aRet = mCountdownTime - aTimeRunning;
if (aRet < 0) { // We have completed!
} mIsRunning = false;
} aRet = 0;
}
return aRet;
}
}
}
} }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment