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);
} }
} }
......
...@@ -7,7 +7,6 @@ import java.util.TimeZone; ...@@ -7,7 +7,6 @@ import java.util.TimeZone;
import org.libreoffice.impressremote.communication.CommunicationService; import org.libreoffice.impressremote.communication.CommunicationService;
import org.libreoffice.impressremote.communication.SlideShow.Timer; import org.libreoffice.impressremote.communication.SlideShow.Timer;
import android.annotation.SuppressLint;
import android.app.ActionBar; import android.app.ActionBar;
import android.app.Activity; import android.app.Activity;
import android.app.FragmentManager; import android.app.FragmentManager;
...@@ -20,8 +19,6 @@ import android.content.SharedPreferences; ...@@ -20,8 +19,6 @@ import android.content.SharedPreferences;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler; import android.os.Handler;
import android.os.IBinder; import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.preference.PreferenceManager; import android.preference.PreferenceManager;
import android.text.format.DateFormat; import android.text.format.DateFormat;
import android.view.KeyEvent; import android.view.KeyEvent;
...@@ -56,10 +53,12 @@ public class PresentationActivity extends Activity { ...@@ -56,10 +53,12 @@ public class PresentationActivity extends Activity {
setContentView(R.layout.activity_presentation); setContentView(R.layout.activity_presentation);
mOuterLayout = (FrameLayout) findViewById(R.id.framelayout); mOuterLayout = (FrameLayout) findViewById(R.id.framelayout);
mOuterLayout.removeAllViews();
mLayout = new InterceptorLayout(this); mLayout = new InterceptorLayout(this);
mOuterLayout.addView(mLayout); mOuterLayout.addView(mLayout);
mLayout.setId(R.id.presentation_innerFrame); mLayout.setId(R.id.presentation_innerFrame);
// ((FrameLayout) findViewById(R.id.framelayout)).addView(mLayout);
//((FrameLayout) findViewById(R.id.framelayout)).addView(mLayout);
mThumbnailFragment = new ThumbnailFragment(); mThumbnailFragment = new ThumbnailFragment();
mPresentationFragment = new PresentationFragment(); mPresentationFragment = new PresentationFragment();
...@@ -69,6 +68,13 @@ public class PresentationActivity extends Activity { ...@@ -69,6 +68,13 @@ public class PresentationActivity extends Activity {
fragmentTransaction.add(R.id.presentation_innerFrame, fragmentTransaction.add(R.id.presentation_innerFrame,
mPresentationFragment, "fragment_presentation"); mPresentationFragment, "fragment_presentation");
fragmentTransaction.commit(); fragmentTransaction.commit();
}
@Override
protected void onDestroy() {
mActionBarManager.stop();
super.onDestroy();
} }
@Override @Override
...@@ -105,7 +111,6 @@ public class PresentationActivity extends Activity { ...@@ -105,7 +111,6 @@ public class PresentationActivity extends Activity {
IBinder aService) { IBinder aService) {
mCommunicationService = ((CommunicationService.CBinder) aService) mCommunicationService = ((CommunicationService.CBinder) aService)
.getService(); .getService();
mCommunicationService.setActivityMessenger(mMessenger);
mPresentationFragment mPresentationFragment
.setCommunicationService(mCommunicationService); .setCommunicationService(mCommunicationService);
...@@ -119,17 +124,6 @@ public class PresentationActivity extends Activity { ...@@ -119,17 +124,6 @@ public class PresentationActivity extends Activity {
} }
}; };
final Messenger mMessenger = new Messenger(new MessageHandler());
@SuppressLint("HandlerLeak")
protected class MessageHandler extends Handler {
@Override
public void handleMessage(Message aMessage) {
mPresentationFragment.handleMessage(aMessage);
mThumbnailFragment.handleMessage(aMessage);
}
}
// ---------------------------------------------- ACTION BAR --------------- // ---------------------------------------------- ACTION BAR ---------------
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
...@@ -172,6 +166,8 @@ public class PresentationActivity extends Activity { ...@@ -172,6 +166,8 @@ public class PresentationActivity extends Activity {
FragmentManager.OnBackStackChangedListener, FragmentManager.OnBackStackChangedListener,
TextView.OnEditorActionListener { TextView.OnEditorActionListener {
private Handler timerHandler = new Handler();
private ToggleButton mTimeLabel; private ToggleButton mTimeLabel;
private ToggleButton mThumbnailButton; private ToggleButton mThumbnailButton;
...@@ -204,6 +200,10 @@ public class PresentationActivity extends Activity { ...@@ -204,6 +200,10 @@ public class PresentationActivity extends Activity {
*/ */
private boolean mTimerOn = false; private boolean mTimerOn = false;
public void stop() {
timerHandler.removeCallbacks(timerUpdateThread);
}
public ActionBarManager() { public ActionBarManager() {
ActionBar aBar = getActionBar(); ActionBar aBar = getActionBar();
...@@ -284,6 +284,9 @@ public class PresentationActivity extends Activity { ...@@ -284,6 +284,9 @@ public class PresentationActivity extends Activity {
} }
private void updateClockBar() { private void updateClockBar() {
if (mCommunicationService == null) {
return;
}
mClockBar_clockButton.setChecked(!mTimerOn); mClockBar_clockButton.setChecked(!mTimerOn);
mCountdownBar.setY(mClockBar.getHeight()); mCountdownBar.setY(mClockBar.getHeight());
...@@ -325,13 +328,11 @@ public class PresentationActivity extends Activity { ...@@ -325,13 +328,11 @@ public class PresentationActivity extends Activity {
} }
private Handler timerHandler = new Handler();
private Thread timerUpdateThread = new Thread() { private Thread timerUpdateThread = new Thread() {
@Override @Override
public void run() { public void run() {
// invalidateOptionsMenu(); //invalidateOptionsMenu();
CharSequence aTimeString; CharSequence aTimeString;
long aTime = mCommunicationService.getSlideShow().getTimer() long aTime = mCommunicationService.getSlideShow().getTimer()
.getTimeMillis(); .getTimeMillis();
......
...@@ -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(
CommunicationService.MSG_SLIDE_CHANGED)) {
int aSlide = aIntent.getExtras().getInt("slide_number");
mTopView.setSelection(aSlide, true); mTopView.setSelection(aSlide, true);
updateSlideNumberDisplay(); updateSlideNumberDisplay();
break; } else if (aIntent.getAction().equals(
case CommunicationService.MSG_SLIDE_PREVIEW: CommunicationService.MSG_SLIDE_PREVIEW)) {
int aNSlide = aData.getInt("slide_number"); int aNSlide = aIntent.getExtras().getInt("slide_number");
if (mTopView.getSelectedItemPosition() == aNSlide) { if (mTopView.getSelectedItemPosition() == aNSlide) {
// mTopView. // TODO: update the current item mTopView.setSelection(aNSlide);
} }
break; } else if (aIntent.getAction().equals(
CommunicationService.MSG_SLIDE_NOTES)) {
// TODO: update me
} }
} }
};
// ------------------------------------------------- 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);
}
}
};
}
...@@ -12,11 +12,14 @@ import org.libreoffice.impressremote.communication.CommunicationService; ...@@ -12,11 +12,14 @@ import org.libreoffice.impressremote.communication.CommunicationService;
import org.libreoffice.impressremote.communication.SlideShow; import org.libreoffice.impressremote.communication.SlideShow;
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.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Typeface; import android.graphics.Typeface;
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.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -42,24 +45,35 @@ public class ThumbnailFragment extends Fragment { ...@@ -42,24 +45,35 @@ public class ThumbnailFragment extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { Bundle savedInstanceState) {
// Inflate the layout for this fragment // Inflate the layout for this fragment
container.removeAllViews();
View v = inflater View v = inflater
.inflate(R.layout.fragment_thumbnail, container, false); .inflate(R.layout.fragment_thumbnail, container, false);
mGrid = (GridView) v.findViewById(R.id.thumbnail_grid); mGrid = (GridView) v.findViewById(R.id.thumbnail_grid);
mGrid.setOnItemClickListener(new ClickListener()); mGrid.setOnItemClickListener(new ClickListener());
mContext = container.getContext(); mContext = getActivity().getApplicationContext();
if (mCommunicationService != null && mSlideShow != null) { if (mCommunicationService != null && mSlideShow != null) {
mGrid.setAdapter(new ThumbnailAdapter(mContext, mSlideShow)); mGrid.setAdapter(new ThumbnailAdapter(mContext, mSlideShow));
} }
IntentFilter aFilter = new IntentFilter(
CommunicationService.MSG_SLIDE_CHANGED);
aFilter.addAction(CommunicationService.MSG_SLIDE_PREVIEW);
LocalBroadcastManager
.getInstance(getActivity().getApplicationContext())
.registerReceiver(mListener, aFilter);
return v; return v;
} }
@Override @Override
public void onDestroyView() { public void onDestroyView() {
super.onDestroyView(); super.onDestroyView();
LocalBroadcastManager
.getInstance(getActivity().getApplicationContext())
.unregisterReceiver(mListener);
mGrid = null; mGrid = null;
mContext = null; mContext = null;
mCurrentImage = null; mCurrentImage = null;
...@@ -135,22 +149,21 @@ public class ThumbnailFragment extends Fragment { ...@@ -135,22 +149,21 @@ public class ThumbnailFragment extends Fragment {
} }
} }
public void handleMessage(Message aMessage) { private BroadcastReceiver mListener = new BroadcastReceiver() {
if (!isVisible()) {
return;
}
Bundle aData = aMessage.getData(); @Override
switch (aMessage.what) { public void onReceive(Context aContext, Intent aIntent) {
case CommunicationService.MSG_SLIDE_CHANGED: if (aIntent.getAction().equals(
int aSlide = aData.getInt("slide_number"); CommunicationService.MSG_SLIDE_CHANGED)) {
break; int aSlide = aIntent.getExtras().getInt("slide_number");
case CommunicationService.MSG_SLIDE_PREVIEW: setSelected(aSlide);
} else if (aIntent.getAction().equals(
CommunicationService.MSG_SLIDE_PREVIEW)) {
mGrid.invalidateViews(); mGrid.invalidateViews();
break;
} }
} }
};
// ------------------------------------------------- THUMBNAIL ADAPTER ---- // ------------------------------------------------- THUMBNAIL ADAPTER ----
protected class ThumbnailAdapter extends BaseAdapter { protected class ThumbnailAdapter extends BaseAdapter {
......
...@@ -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,46 +10,40 @@ package org.libreoffice.impressremote.communication; ...@@ -10,46 +10,40 @@ 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;
mSlideShow = new SlideShow(mContext);
}
private Context mContext;
private SlideShow mSlideShow = new SlideShow(); private SlideShow mSlideShow;
public SlideShow getSlideShow() { public SlideShow getSlideShow() {
return mSlideShow; return mSlideShow;
} }
public void setActivityMessenger(Messenger aActivityMessenger) { public boolean isSlideShowRunning() {
mActivityMessenger = aActivityMessenger; return (mSlideShow.getSize() > 0);
} }
public void parseCommand(ArrayList<String> aCommand) { public void parseCommand(ArrayList<String> aCommand) {
if (mActivityMessenger == null) {
return;
}
String aInstruction = aCommand.get(0); String aInstruction = aCommand.get(0);
if (aInstruction.equals("slideshow_started")) { if (aInstruction.equals("slideshow_started")) {
int aSlideShowlength = Integer.parseInt(aCommand.get(1)); int aSlideShowlength = Integer.parseInt(aCommand.get(1));
int aCurrentSlide = Integer.parseInt(aCommand.get(2)); int aCurrentSlide = Integer.parseInt(aCommand.get(2));
mSlideShow.setLength(aSlideShowlength); mSlideShow.setLength(aSlideShowlength);
mSlideShow.setCurrentSlide(aCurrentSlide); mSlideShow.setCurrentSlide(aCurrentSlide);
Intent aIntent = new Intent(
Message aMessage = Message.obtain(null,
CommunicationService.MSG_SLIDESHOW_STARTED); CommunicationService.MSG_SLIDESHOW_STARTED);
Bundle aData = new Bundle(); LocalBroadcastManager.getInstance(mContext).sendBroadcast(aIntent);
aMessage.setData(aData);
try {
mActivityMessenger.send(aMessage);
} catch (RemoteException e) {
// Dead Handler -- i.e. Activity gone.
}
} else { } else {
if (mSlideShow == null) if (mSlideShow == null)
return; return;
...@@ -60,16 +54,11 @@ public class Receiver { ...@@ -60,16 +54,11 @@ public class Receiver {
mSlideShow.setCurrentSlide(aSlideNumber); mSlideShow.setCurrentSlide(aSlideNumber);
Message aMessage = Message.obtain(null, Intent aIntent = new Intent(
CommunicationService.MSG_SLIDE_CHANGED); CommunicationService.MSG_SLIDE_CHANGED);
Bundle aData = new Bundle(); aIntent.putExtra("slide_number", aSlideNumber);
aData.putInt("slide_number", aSlideNumber); LocalBroadcastManager.getInstance(mContext).sendBroadcast(
aMessage.setData(aData); aIntent);
try {
mActivityMessenger.send(aMessage);
} catch (RemoteException e) {
// Dead Handler -- i.e. Activity gone.
}
} else if (aInstruction.equals("slide_preview")) { } else if (aInstruction.equals("slide_preview")) {
int aSlideNumber = Integer.parseInt(aCommand.get(1)); int aSlideNumber = Integer.parseInt(aCommand.get(1));
String aImageString = aCommand.get(2); String aImageString = aCommand.get(2);
...@@ -78,18 +67,11 @@ public class Receiver { ...@@ -78,18 +67,11 @@ public class Receiver {
// Store image internally // Store image internally
mSlideShow.putImage(aSlideNumber, aImage); mSlideShow.putImage(aSlideNumber, aImage);
// Notify the frontend Intent aIntent = new Intent(
Message aMessage = Message.obtain(null,
CommunicationService.MSG_SLIDE_PREVIEW); CommunicationService.MSG_SLIDE_PREVIEW);
Bundle aData = new Bundle(); aIntent.putExtra("slide_number", aSlideNumber);
aData.putInt("slide_number", aSlideNumber); LocalBroadcastManager.getInstance(mContext).sendBroadcast(
aMessage.setData(aData); aIntent);
try {
mActivityMessenger.send(aMessage);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (aInstruction.equals("slide_notes")) { } else if (aInstruction.equals("slide_notes")) {
int aSlideNumber = Integer.parseInt(aCommand.get(1)); int aSlideNumber = Integer.parseInt(aCommand.get(1));
String aNotes = new String(); String aNotes = new String();
...@@ -100,18 +82,11 @@ public class Receiver { ...@@ -100,18 +82,11 @@ public class Receiver {
// Store image internally // Store image internally
mSlideShow.putNotes(aSlideNumber, aNotes); mSlideShow.putNotes(aSlideNumber, aNotes);
// Notify the frontend Intent aIntent = new Intent(
Message aMessage = Message.obtain(null,
CommunicationService.MSG_SLIDE_NOTES); CommunicationService.MSG_SLIDE_NOTES);
Bundle aData = new Bundle(); aIntent.putExtra("slide_number", aSlideNumber);
aData.putInt("slide_number", aSlideNumber); LocalBroadcastManager.getInstance(mContext).sendBroadcast(
aMessage.setData(aData); aIntent);
try {
mActivityMessenger.send(aMessage);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
} }
......
...@@ -8,6 +8,9 @@ ...@@ -8,6 +8,9 @@
*/ */
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;
...@@ -19,8 +22,10 @@ public class SlideShow { ...@@ -19,8 +22,10 @@ public class SlideShow {
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) { protected void setLength(int aSize) {
...@@ -45,6 +50,10 @@ public class SlideShow { ...@@ -45,6 +50,10 @@ public class SlideShow {
public Bitmap getImage(int aSlide) { public Bitmap getImage(int aSlide) {
byte[] aImage = mPreviewImages.get(aSlide); byte[] aImage = mPreviewImages.get(aSlide);
if (aImage == null) {
return BitmapFactory.decodeResource(mContext.getResources(),
R.drawable.image_loading);
}
return BitmapFactory.decodeByteArray(aImage, 0, aImage.length); return BitmapFactory.decodeByteArray(aImage, 0, aImage.length);
} }
......
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