Implemented rotation of slideshow view.
Change-Id: Ib518e1609d21463273a00fcf161f20c80eae6a67
This commit is contained in:
@@ -20,21 +20,14 @@
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</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>
|
||||
|
||||
<activity android:name=".PairingActivity" >
|
||||
</activity>
|
||||
<activity android:name=".StartPresentationActivity" >
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".PresentationActivity"
|
||||
android:label="@string/title_activity_presentation" >
|
||||
|
BIN
android/sdremote/res/drawable/image_loading.png
Normal file
BIN
android/sdremote/res/drawable/image_loading.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 287 B |
@@ -13,8 +13,8 @@
|
||||
<pl.polidea.coverflow.CoverFlow
|
||||
xmlns:coverflow="http://schemas.android.com/apk/res/org.libreoffice.impressremote"
|
||||
android:id="@+id/presentation_coverflow"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="5dip"
|
||||
coverflow:imageHeight="150dip"
|
||||
coverflow:imageWidth="180dip"
|
||||
@@ -42,8 +42,8 @@
|
||||
|
||||
<ScrollView
|
||||
android:id="@+id/presentation_scrollview"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent" >
|
||||
|
||||
<WebView
|
||||
android:id="@+id/presentation_notes"
|
||||
|
22
android/sdremote/res/layout/activity_startpresentation.xml
Normal file
22
android/sdremote/res/layout/activity_startpresentation.xml
Normal file
@@ -0,0 +1,22 @@
|
||||
<?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>
|
@@ -24,7 +24,9 @@
|
||||
<string name="wifi">WI-FI</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_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="startpresentation_instruction">No presentation is currently running.</string>
|
||||
<string name="startpresentation_button">Start Presentation</string>
|
||||
|
||||
</resources>
|
@@ -39,21 +39,12 @@ public class PairingActivity extends Activity {
|
||||
Context.BIND_IMPORTANT);
|
||||
mIsBound = true;
|
||||
|
||||
mPinText = (TextView) findViewById(R.id.pairing_pin);
|
||||
|
||||
IntentFilter aFilter = new IntentFilter(
|
||||
CommunicationService.MSG_PAIRING_STARTED);
|
||||
aFilter.addAction(CommunicationService.MSG_PAIRING_SUCCESSFUL);
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(mListener,
|
||||
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() {
|
||||
@@ -61,7 +52,9 @@ public class PairingActivity extends Activity {
|
||||
public void onServiceConnected(ComponentName aClassName,
|
||||
IBinder aService) {
|
||||
setContentView(R.layout.activity_pairing);
|
||||
|
||||
mPinText = (TextView) findViewById(R.id.pairing_pin);
|
||||
mCommunicationService = ((CommunicationService.CBinder) aService)
|
||||
.getService();
|
||||
((TextView) findViewById(R.id.pairing_instruction2_deviceName))
|
||||
.setText(MessageFormat
|
||||
.format(getResources()
|
||||
@@ -69,8 +62,6 @@ public class PairingActivity extends Activity {
|
||||
mCommunicationService
|
||||
.getDeviceName()));
|
||||
|
||||
mCommunicationService = ((CommunicationService.CBinder) aService)
|
||||
.getService();
|
||||
if (mCommunicationService.getState() == State.CONNECTING) {
|
||||
mPinText.setText(mCommunicationService.getPairingPin());
|
||||
}
|
||||
@@ -94,7 +85,9 @@ public class PairingActivity extends Activity {
|
||||
// refreshLists();
|
||||
} else if (aIntent.getAction().equals(
|
||||
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;
|
||||
import org.libreoffice.impressremote.communication.CommunicationService;
|
||||
import org.libreoffice.impressremote.communication.SlideShow.Timer;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.ActionBar;
|
||||
import android.app.Activity;
|
||||
import android.app.FragmentManager;
|
||||
@@ -20,8 +19,6 @@ import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Message;
|
||||
import android.os.Messenger;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.format.DateFormat;
|
||||
import android.view.KeyEvent;
|
||||
@@ -38,446 +35,450 @@ import android.widget.TextView;
|
||||
import android.widget.ToggleButton;
|
||||
|
||||
public class PresentationActivity extends Activity {
|
||||
private CommunicationService mCommunicationService;
|
||||
private boolean mIsBound = false;
|
||||
private FrameLayout mLayout;
|
||||
private FrameLayout mOuterLayout;
|
||||
private ThumbnailFragment mThumbnailFragment;
|
||||
private PresentationFragment mPresentationFragment;
|
||||
private ActionBarManager mActionBarManager;
|
||||
private CommunicationService mCommunicationService;
|
||||
private boolean mIsBound = false;
|
||||
private FrameLayout mLayout;
|
||||
private FrameLayout mOuterLayout;
|
||||
private ThumbnailFragment mThumbnailFragment;
|
||||
private PresentationFragment mPresentationFragment;
|
||||
private ActionBarManager mActionBarManager;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
bindService(new Intent(this, CommunicationService.class), mConnection,
|
||||
Context.BIND_IMPORTANT);
|
||||
mIsBound = true;
|
||||
bindService(new Intent(this, CommunicationService.class), mConnection,
|
||||
Context.BIND_IMPORTANT);
|
||||
mIsBound = true;
|
||||
|
||||
setContentView(R.layout.activity_presentation);
|
||||
mOuterLayout = (FrameLayout) findViewById(R.id.framelayout);
|
||||
mLayout = new InterceptorLayout(this);
|
||||
mOuterLayout.addView(mLayout);
|
||||
mLayout.setId(R.id.presentation_innerFrame);
|
||||
// ((FrameLayout) findViewById(R.id.framelayout)).addView(mLayout);
|
||||
mThumbnailFragment = new ThumbnailFragment();
|
||||
mPresentationFragment = new PresentationFragment();
|
||||
setContentView(R.layout.activity_presentation);
|
||||
mOuterLayout = (FrameLayout) findViewById(R.id.framelayout);
|
||||
mOuterLayout.removeAllViews();
|
||||
mLayout = new InterceptorLayout(this);
|
||||
mOuterLayout.addView(mLayout);
|
||||
mLayout.setId(R.id.presentation_innerFrame);
|
||||
|
||||
FragmentManager fragmentManager = getFragmentManager();
|
||||
FragmentTransaction fragmentTransaction = fragmentManager
|
||||
.beginTransaction();
|
||||
fragmentTransaction.add(R.id.presentation_innerFrame,
|
||||
mPresentationFragment, "fragment_presentation");
|
||||
fragmentTransaction.commit();
|
||||
}
|
||||
//((FrameLayout) findViewById(R.id.framelayout)).addView(mLayout);
|
||||
mThumbnailFragment = new ThumbnailFragment();
|
||||
mPresentationFragment = new PresentationFragment();
|
||||
|
||||
@Override
|
||||
public boolean dispatchKeyEvent(KeyEvent event) {
|
||||
SharedPreferences aPref = PreferenceManager
|
||||
.getDefaultSharedPreferences(this);
|
||||
boolean aVolumeSwitching = aPref.getBoolean("option_volumeswitching",
|
||||
false);
|
||||
boolean aRelevantFragmentVisible = mPresentationFragment.isVisible()
|
||||
|| mThumbnailFragment.isVisible();
|
||||
if (aVolumeSwitching && aRelevantFragmentVisible) {
|
||||
FragmentManager fragmentManager = getFragmentManager();
|
||||
FragmentTransaction fragmentTransaction = fragmentManager
|
||||
.beginTransaction();
|
||||
fragmentTransaction.add(R.id.presentation_innerFrame,
|
||||
mPresentationFragment, "fragment_presentation");
|
||||
fragmentTransaction.commit();
|
||||
|
||||
int action = event.getAction();
|
||||
int keyCode = event.getKeyCode();
|
||||
switch (keyCode) {
|
||||
case KeyEvent.KEYCODE_VOLUME_UP:
|
||||
if (action == KeyEvent.ACTION_UP) {
|
||||
mCommunicationService.getTransmitter().nextTransition();
|
||||
}
|
||||
return true;
|
||||
case KeyEvent.KEYCODE_VOLUME_DOWN:
|
||||
if (action == KeyEvent.ACTION_DOWN) {
|
||||
mCommunicationService.getTransmitter().previousTransition();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.dispatchKeyEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
private ServiceConnection mConnection = new ServiceConnection() {
|
||||
@Override
|
||||
public void onServiceConnected(ComponentName aClassName,
|
||||
IBinder aService) {
|
||||
mCommunicationService = ((CommunicationService.CBinder) aService)
|
||||
.getService();
|
||||
mCommunicationService.setActivityMessenger(mMessenger);
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
mActionBarManager.stop();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
mPresentationFragment
|
||||
.setCommunicationService(mCommunicationService);
|
||||
mThumbnailFragment.setCommunicationService(mCommunicationService);
|
||||
@Override
|
||||
public boolean dispatchKeyEvent(KeyEvent event) {
|
||||
SharedPreferences aPref = PreferenceManager
|
||||
.getDefaultSharedPreferences(this);
|
||||
boolean aVolumeSwitching = aPref.getBoolean("option_volumeswitching",
|
||||
false);
|
||||
boolean aRelevantFragmentVisible = mPresentationFragment.isVisible()
|
||||
|| mThumbnailFragment.isVisible();
|
||||
if (aVolumeSwitching && aRelevantFragmentVisible) {
|
||||
|
||||
}
|
||||
int action = event.getAction();
|
||||
int keyCode = event.getKeyCode();
|
||||
switch (keyCode) {
|
||||
case KeyEvent.KEYCODE_VOLUME_UP:
|
||||
if (action == KeyEvent.ACTION_UP) {
|
||||
mCommunicationService.getTransmitter().nextTransition();
|
||||
}
|
||||
return true;
|
||||
case KeyEvent.KEYCODE_VOLUME_DOWN:
|
||||
if (action == KeyEvent.ACTION_DOWN) {
|
||||
mCommunicationService.getTransmitter().previousTransition();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return super.dispatchKeyEvent(event);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceDisconnected(ComponentName aClassName) {
|
||||
mCommunicationService = null;
|
||||
}
|
||||
};
|
||||
private ServiceConnection mConnection = new ServiceConnection() {
|
||||
@Override
|
||||
public void onServiceConnected(ComponentName aClassName,
|
||||
IBinder aService) {
|
||||
mCommunicationService = ((CommunicationService.CBinder) aService)
|
||||
.getService();
|
||||
|
||||
final Messenger mMessenger = new Messenger(new MessageHandler());
|
||||
mPresentationFragment
|
||||
.setCommunicationService(mCommunicationService);
|
||||
mThumbnailFragment.setCommunicationService(mCommunicationService);
|
||||
|
||||
@SuppressLint("HandlerLeak")
|
||||
protected class MessageHandler extends Handler {
|
||||
@Override
|
||||
public void handleMessage(Message aMessage) {
|
||||
mPresentationFragment.handleMessage(aMessage);
|
||||
mThumbnailFragment.handleMessage(aMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------- ACTION BAR ---------------
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.actionbar_presentation, menu);
|
||||
mActionBarManager = new ActionBarManager();
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public void onServiceDisconnected(ComponentName aClassName) {
|
||||
mCommunicationService = null;
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
Intent aIntent;
|
||||
switch (item.getItemId()) {
|
||||
case R.id.actionbar_presentation_submenu_options:
|
||||
// ---------------------------------------------- ACTION BAR ---------------
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.actionbar_presentation, menu);
|
||||
mActionBarManager = new ActionBarManager();
|
||||
return true;
|
||||
}
|
||||
|
||||
aIntent = new Intent(this, SettingsActivity.class);
|
||||
startActivity(aIntent);
|
||||
return true;
|
||||
case R.id.actionbar_presentation_submenu_blank:
|
||||
boolean aRelevantFragmentVisible = mPresentationFragment
|
||||
.isVisible() || mThumbnailFragment.isVisible();
|
||||
if (aRelevantFragmentVisible) {
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
Intent aIntent;
|
||||
switch (item.getItemId()) {
|
||||
case R.id.actionbar_presentation_submenu_options:
|
||||
|
||||
BlankScreenFragment aFragment = new BlankScreenFragment(
|
||||
mCommunicationService);
|
||||
aIntent = new Intent(this, SettingsActivity.class);
|
||||
startActivity(aIntent);
|
||||
return true;
|
||||
case R.id.actionbar_presentation_submenu_blank:
|
||||
boolean aRelevantFragmentVisible = mPresentationFragment
|
||||
.isVisible() || mThumbnailFragment.isVisible();
|
||||
if (aRelevantFragmentVisible) {
|
||||
|
||||
FragmentTransaction ft = getFragmentManager()
|
||||
.beginTransaction();
|
||||
ft.replace(R.id.presentation_innerFrame, aFragment);
|
||||
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
|
||||
ft.addToBackStack(null);
|
||||
ft.commit();
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
BlankScreenFragment aFragment = new BlankScreenFragment(
|
||||
mCommunicationService);
|
||||
|
||||
private class ActionBarManager implements OnClickListener,
|
||||
FragmentManager.OnBackStackChangedListener,
|
||||
TextView.OnEditorActionListener {
|
||||
FragmentTransaction ft = getFragmentManager()
|
||||
.beginTransaction();
|
||||
ft.replace(R.id.presentation_innerFrame, aFragment);
|
||||
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
|
||||
ft.addToBackStack(null);
|
||||
ft.commit();
|
||||
}
|
||||
return true;
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
}
|
||||
|
||||
private ToggleButton mTimeLabel;
|
||||
private ToggleButton mThumbnailButton;
|
||||
private class ActionBarManager implements OnClickListener,
|
||||
FragmentManager.OnBackStackChangedListener,
|
||||
TextView.OnEditorActionListener {
|
||||
|
||||
private View mDropdownOptions;
|
||||
private View mDropdownBlank;
|
||||
private Handler timerHandler = new Handler();
|
||||
|
||||
// ------- CLOCKBAR
|
||||
private View mClockBar;
|
||||
private ToggleButton mClockBar_clockButton;
|
||||
private ToggleButton mClockBar_stopwatchButton;
|
||||
private ToggleButton mClockBar_countdownButton;
|
||||
private ToggleButton mTimeLabel;
|
||||
private ToggleButton mThumbnailButton;
|
||||
|
||||
// ------- STOPWATCH BAR
|
||||
private View mStopwatchBar;
|
||||
private Button mStopwatchButtonRun;
|
||||
private Button mStopwatchButtonReset;
|
||||
private View mDropdownOptions;
|
||||
private View mDropdownBlank;
|
||||
|
||||
// ------- COUNTDOWN BAR
|
||||
private View mCountdownBar;
|
||||
private EditText mCountdownEntry;
|
||||
private Button mCountdownButton;
|
||||
// ------- CLOCKBAR
|
||||
private View mClockBar;
|
||||
private ToggleButton mClockBar_clockButton;
|
||||
private ToggleButton mClockBar_stopwatchButton;
|
||||
private ToggleButton mClockBar_countdownButton;
|
||||
|
||||
private String aTimeFormat = getResources().getString(
|
||||
R.string.actionbar_timeformat);
|
||||
private String aTimerFormat = getResources().getString(
|
||||
R.string.actionbar_timerformat);
|
||||
/*
|
||||
* True if the timer is being used as a timer, false if we are showing a
|
||||
* clock.
|
||||
*/
|
||||
private boolean mTimerOn = false;
|
||||
// ------- STOPWATCH BAR
|
||||
private View mStopwatchBar;
|
||||
private Button mStopwatchButtonRun;
|
||||
private Button mStopwatchButtonReset;
|
||||
|
||||
public ActionBarManager() {
|
||||
// ------- COUNTDOWN BAR
|
||||
private View mCountdownBar;
|
||||
private EditText mCountdownEntry;
|
||||
private Button mCountdownButton;
|
||||
|
||||
ActionBar aBar = getActionBar();
|
||||
aBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
|
||||
aBar.setCustomView(R.layout.presentation_actionbar);
|
||||
private String aTimeFormat = getResources().getString(
|
||||
R.string.actionbar_timeformat);
|
||||
private String aTimerFormat = getResources().getString(
|
||||
R.string.actionbar_timerformat);
|
||||
/*
|
||||
* True if the timer is being used as a timer, false if we are showing a
|
||||
* clock.
|
||||
*/
|
||||
private boolean mTimerOn = false;
|
||||
|
||||
mThumbnailButton = (ToggleButton) aBar.getCustomView()
|
||||
.findViewById(R.id.actionbar_thumbnailtoggle);
|
||||
mThumbnailButton.setOnClickListener(this);
|
||||
public void stop() {
|
||||
timerHandler.removeCallbacks(timerUpdateThread);
|
||||
}
|
||||
|
||||
mTimeLabel = (ToggleButton) aBar.getCustomView().findViewById(
|
||||
R.id.actionbar_time);
|
||||
mTimeLabel.setOnClickListener(this);
|
||||
public ActionBarManager() {
|
||||
|
||||
setupClockBar();
|
||||
ActionBar aBar = getActionBar();
|
||||
aBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
|
||||
aBar.setCustomView(R.layout.presentation_actionbar);
|
||||
|
||||
getFragmentManager().addOnBackStackChangedListener(this);
|
||||
mThumbnailButton = (ToggleButton) aBar.getCustomView()
|
||||
.findViewById(R.id.actionbar_thumbnailtoggle);
|
||||
mThumbnailButton.setOnClickListener(this);
|
||||
|
||||
timerHandler.removeCallbacks(timerUpdateThread);
|
||||
timerHandler.postDelayed(timerUpdateThread, 50);
|
||||
mTimeLabel = (ToggleButton) aBar.getCustomView().findViewById(
|
||||
R.id.actionbar_time);
|
||||
mTimeLabel.setOnClickListener(this);
|
||||
|
||||
}
|
||||
setupClockBar();
|
||||
|
||||
public void hidePopups() {
|
||||
if (mClockBar.getVisibility() == View.VISIBLE) {
|
||||
mClockBar.setVisibility(View.INVISIBLE);
|
||||
mStopwatchBar.setVisibility(View.INVISIBLE);
|
||||
mCountdownBar.setVisibility(View.INVISIBLE);
|
||||
mTimeLabel.setChecked(false);
|
||||
}
|
||||
}
|
||||
getFragmentManager().addOnBackStackChangedListener(this);
|
||||
|
||||
private void setupClockBar() {
|
||||
// ClockBar
|
||||
LayoutInflater aInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
aInflater.inflate(R.layout.presentation_clockbar, mOuterLayout);
|
||||
mClockBar = mOuterLayout.findViewById(R.id.clockbar);
|
||||
timerHandler.removeCallbacks(timerUpdateThread);
|
||||
timerHandler.postDelayed(timerUpdateThread, 50);
|
||||
|
||||
mClockBar_clockButton = (ToggleButton) mClockBar
|
||||
.findViewById(R.id.clockbar_toggle_clockmode);
|
||||
mClockBar_stopwatchButton = (ToggleButton) mClockBar
|
||||
.findViewById(R.id.clockbar_toggle_stopwatchmode);
|
||||
mClockBar_countdownButton = (ToggleButton) mClockBar
|
||||
.findViewById(R.id.clockbar_toggle_countdownmode);
|
||||
mClockBar_clockButton.setOnClickListener(this);
|
||||
mClockBar_stopwatchButton.setOnClickListener(this);
|
||||
mClockBar_countdownButton.setOnClickListener(this);
|
||||
}
|
||||
|
||||
// Stopwatch bar
|
||||
aInflater.inflate(R.layout.presentation_clockbar_stopwatchbar,
|
||||
mOuterLayout);
|
||||
mStopwatchBar = mOuterLayout
|
||||
.findViewById(R.id.clockbar_stopwatchbar);
|
||||
public void hidePopups() {
|
||||
if (mClockBar.getVisibility() == View.VISIBLE) {
|
||||
mClockBar.setVisibility(View.INVISIBLE);
|
||||
mStopwatchBar.setVisibility(View.INVISIBLE);
|
||||
mCountdownBar.setVisibility(View.INVISIBLE);
|
||||
mTimeLabel.setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
mStopwatchButtonRun = (Button) mStopwatchBar
|
||||
.findViewById(R.id.clockbar_stopwatch_run);
|
||||
mStopwatchButtonReset = (Button) mStopwatchBar
|
||||
.findViewById(R.id.clockbar_stopwatch_reset);
|
||||
mStopwatchButtonRun.setOnClickListener(this);
|
||||
mStopwatchButtonReset.setOnClickListener(this);
|
||||
private void setupClockBar() {
|
||||
// ClockBar
|
||||
LayoutInflater aInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
aInflater.inflate(R.layout.presentation_clockbar, mOuterLayout);
|
||||
mClockBar = mOuterLayout.findViewById(R.id.clockbar);
|
||||
|
||||
// Countdown bar
|
||||
aInflater.inflate(R.layout.presentation_clockbar_countdownbar,
|
||||
mOuterLayout);
|
||||
mCountdownBar = mOuterLayout
|
||||
.findViewById(R.id.clockbar_countdownbar);
|
||||
mClockBar_clockButton = (ToggleButton) mClockBar
|
||||
.findViewById(R.id.clockbar_toggle_clockmode);
|
||||
mClockBar_stopwatchButton = (ToggleButton) mClockBar
|
||||
.findViewById(R.id.clockbar_toggle_stopwatchmode);
|
||||
mClockBar_countdownButton = (ToggleButton) mClockBar
|
||||
.findViewById(R.id.clockbar_toggle_countdownmode);
|
||||
mClockBar_clockButton.setOnClickListener(this);
|
||||
mClockBar_stopwatchButton.setOnClickListener(this);
|
||||
mClockBar_countdownButton.setOnClickListener(this);
|
||||
|
||||
mCountdownEntry = (EditText) mCountdownBar
|
||||
.findViewById(R.id.clockbar_countdown_time);
|
||||
mCountdownButton = (Button) mCountdownBar
|
||||
.findViewById(R.id.clockbar_countdown_button);
|
||||
mCountdownButton.setOnClickListener(this);
|
||||
mCountdownEntry.setOnEditorActionListener(this);
|
||||
// Stopwatch bar
|
||||
aInflater.inflate(R.layout.presentation_clockbar_stopwatchbar,
|
||||
mOuterLayout);
|
||||
mStopwatchBar = mOuterLayout
|
||||
.findViewById(R.id.clockbar_stopwatchbar);
|
||||
|
||||
updateClockBar();
|
||||
hidePopups();
|
||||
mStopwatchButtonRun = (Button) mStopwatchBar
|
||||
.findViewById(R.id.clockbar_stopwatch_run);
|
||||
mStopwatchButtonReset = (Button) mStopwatchBar
|
||||
.findViewById(R.id.clockbar_stopwatch_reset);
|
||||
mStopwatchButtonRun.setOnClickListener(this);
|
||||
mStopwatchButtonReset.setOnClickListener(this);
|
||||
|
||||
}
|
||||
// Countdown bar
|
||||
aInflater.inflate(R.layout.presentation_clockbar_countdownbar,
|
||||
mOuterLayout);
|
||||
mCountdownBar = mOuterLayout
|
||||
.findViewById(R.id.clockbar_countdownbar);
|
||||
|
||||
private void updateClockBar() {
|
||||
mClockBar_clockButton.setChecked(!mTimerOn);
|
||||
mCountdownEntry = (EditText) mCountdownBar
|
||||
.findViewById(R.id.clockbar_countdown_time);
|
||||
mCountdownButton = (Button) mCountdownBar
|
||||
.findViewById(R.id.clockbar_countdown_button);
|
||||
mCountdownButton.setOnClickListener(this);
|
||||
mCountdownEntry.setOnEditorActionListener(this);
|
||||
|
||||
mCountdownBar.setY(mClockBar.getHeight());
|
||||
mStopwatchBar.setY(mClockBar.getHeight());
|
||||
updateClockBar();
|
||||
hidePopups();
|
||||
|
||||
boolean aIsCountdown = mCommunicationService.getSlideShow()
|
||||
.getTimer().isCountdown();
|
||||
// Stopwatch
|
||||
boolean aStopwatchMode = mTimerOn && !aIsCountdown;
|
||||
mClockBar_stopwatchButton.setChecked(aStopwatchMode);
|
||||
mStopwatchBar.setVisibility(aStopwatchMode ? View.VISIBLE
|
||||
: View.INVISIBLE);
|
||||
mStopwatchBar.bringToFront();
|
||||
if (aStopwatchMode) {
|
||||
Timer aTimer = mCommunicationService.getSlideShow().getTimer();
|
||||
if (aTimer.isRunning()) {
|
||||
mStopwatchButtonRun.setText(R.string.clock_timer_pause);
|
||||
mStopwatchButtonReset.setText(R.string.clock_timer_restart);
|
||||
} else {
|
||||
mStopwatchButtonRun.setText(R.string.clock_timer_start);
|
||||
mStopwatchButtonReset.setText(R.string.clock_timer_reset);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Countdown
|
||||
boolean aCountdownMode = mTimerOn && aIsCountdown;
|
||||
mClockBar_countdownButton.setChecked(mTimerOn && aIsCountdown);
|
||||
mCountdownBar.setVisibility(mTimerOn && aIsCountdown ? View.VISIBLE
|
||||
: View.INVISIBLE);
|
||||
mCountdownBar.bringToFront();
|
||||
if (aCountdownMode) {
|
||||
Timer aTimer = mCommunicationService.getSlideShow().getTimer();
|
||||
if (aTimer.isRunning()) {
|
||||
mCountdownButton.setText(R.string.clock_timer_pause);
|
||||
} else {
|
||||
mCountdownButton.setText(R.string.clock_timer_resume);
|
||||
}
|
||||
}
|
||||
private void updateClockBar() {
|
||||
if (mCommunicationService == null) {
|
||||
return;
|
||||
}
|
||||
mClockBar_clockButton.setChecked(!mTimerOn);
|
||||
|
||||
}
|
||||
mCountdownBar.setY(mClockBar.getHeight());
|
||||
mStopwatchBar.setY(mClockBar.getHeight());
|
||||
|
||||
private Handler timerHandler = new Handler();
|
||||
boolean aIsCountdown = mCommunicationService.getSlideShow()
|
||||
.getTimer().isCountdown();
|
||||
// Stopwatch
|
||||
boolean aStopwatchMode = mTimerOn && !aIsCountdown;
|
||||
mClockBar_stopwatchButton.setChecked(aStopwatchMode);
|
||||
mStopwatchBar.setVisibility(aStopwatchMode ? View.VISIBLE
|
||||
: View.INVISIBLE);
|
||||
mStopwatchBar.bringToFront();
|
||||
if (aStopwatchMode) {
|
||||
Timer aTimer = mCommunicationService.getSlideShow().getTimer();
|
||||
if (aTimer.isRunning()) {
|
||||
mStopwatchButtonRun.setText(R.string.clock_timer_pause);
|
||||
mStopwatchButtonReset.setText(R.string.clock_timer_restart);
|
||||
} else {
|
||||
mStopwatchButtonRun.setText(R.string.clock_timer_start);
|
||||
mStopwatchButtonReset.setText(R.string.clock_timer_reset);
|
||||
}
|
||||
}
|
||||
|
||||
private Thread timerUpdateThread = new Thread() {
|
||||
// Countdown
|
||||
boolean aCountdownMode = mTimerOn && aIsCountdown;
|
||||
mClockBar_countdownButton.setChecked(mTimerOn && aIsCountdown);
|
||||
mCountdownBar.setVisibility(mTimerOn && aIsCountdown ? View.VISIBLE
|
||||
: View.INVISIBLE);
|
||||
mCountdownBar.bringToFront();
|
||||
if (aCountdownMode) {
|
||||
Timer aTimer = mCommunicationService.getSlideShow().getTimer();
|
||||
if (aTimer.isRunning()) {
|
||||
mCountdownButton.setText(R.string.clock_timer_pause);
|
||||
} else {
|
||||
mCountdownButton.setText(R.string.clock_timer_resume);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
// invalidateOptionsMenu();
|
||||
CharSequence aTimeString;
|
||||
long aTime = mCommunicationService.getSlideShow().getTimer()
|
||||
.getTimeMillis();
|
||||
if (mTimerOn) {
|
||||
aTimeString = DateFormat.format(aTimerFormat, aTime);
|
||||
} else {
|
||||
aTimeString = DateFormat.format(aTimeFormat,
|
||||
System.currentTimeMillis());
|
||||
}
|
||||
mTimeLabel.setText(aTimeString);
|
||||
// TODO: set the string
|
||||
timerHandler.postDelayed(this, 50);
|
||||
}
|
||||
|
||||
}
|
||||
private Thread timerUpdateThread = new Thread() {
|
||||
|
||||
};
|
||||
@Override
|
||||
public void run() {
|
||||
//invalidateOptionsMenu();
|
||||
CharSequence aTimeString;
|
||||
long aTime = mCommunicationService.getSlideShow().getTimer()
|
||||
.getTimeMillis();
|
||||
if (mTimerOn) {
|
||||
aTimeString = DateFormat.format(aTimerFormat, aTime);
|
||||
} else {
|
||||
aTimeString = DateFormat.format(aTimeFormat,
|
||||
System.currentTimeMillis());
|
||||
}
|
||||
mTimeLabel.setText(aTimeString);
|
||||
// TODO: set the string
|
||||
timerHandler.postDelayed(this, 50);
|
||||
|
||||
@Override
|
||||
public void onClick(View aSource) {
|
||||
Timer aTimer = mCommunicationService.getSlideShow().getTimer();
|
||||
// --------------------------------- ACTIONBAR BUTTONS -------------
|
||||
if (aSource == mThumbnailButton) {
|
||||
if (!mThumbnailFragment.isVisible()) {
|
||||
FragmentTransaction ft = getFragmentManager()
|
||||
.beginTransaction();
|
||||
ft.replace(R.id.presentation_innerFrame, mThumbnailFragment);
|
||||
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
|
||||
ft.addToBackStack(null);
|
||||
ft.commit();
|
||||
} else {
|
||||
getFragmentManager().popBackStack();
|
||||
}
|
||||
} else if (aSource == mTimeLabel) {
|
||||
if (mClockBar.getVisibility() == View.VISIBLE) {
|
||||
hidePopups();
|
||||
} else {
|
||||
mClockBar.setVisibility(View.VISIBLE);
|
||||
updateClockBar();
|
||||
mClockBar.bringToFront();
|
||||
}
|
||||
}
|
||||
// ------------------------------------ CLOCKBAR BUTTONS -----------
|
||||
else if (aSource == mClockBar_clockButton) {
|
||||
mTimerOn = false;
|
||||
updateClockBar();
|
||||
} else if (aSource == mClockBar_stopwatchButton) {
|
||||
mTimerOn = true;
|
||||
if (aTimer.isCountdown()) { // Changing mode.
|
||||
aTimer.reset();
|
||||
}
|
||||
aTimer.setCountdown(false);
|
||||
updateClockBar();
|
||||
} else if (aSource == mClockBar_countdownButton) {
|
||||
mTimerOn = true;
|
||||
if (!aTimer.isCountdown()) { // Changing mode
|
||||
aTimer.reset();
|
||||
}
|
||||
aTimer.setCountdown(true);
|
||||
updateClockBar();
|
||||
}
|
||||
// ------------------------------------- TIMER BUTTONS
|
||||
else if (aSource == mStopwatchButtonRun) {
|
||||
if (aTimer.isRunning()) {
|
||||
aTimer.stopTimer();
|
||||
} else {
|
||||
aTimer.startTimer();
|
||||
}
|
||||
updateClockBar();
|
||||
} else if (aSource == mStopwatchButtonReset) {
|
||||
if (aTimer.isRunning()) {
|
||||
aTimer.reset();
|
||||
aTimer.startTimer();
|
||||
} else {
|
||||
aTimer.reset();
|
||||
}
|
||||
updateClockBar();
|
||||
} else if (aSource == mCountdownButton) {
|
||||
if (aTimer.isRunning()) {
|
||||
aTimer.stopTimer();
|
||||
} else {
|
||||
aTimer.startTimer();
|
||||
}
|
||||
updateClockBar();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
@Override
|
||||
public void onBackStackChanged() {
|
||||
if (getFragmentManager().getBackStackEntryCount() == 0) {
|
||||
mThumbnailButton.setChecked(false);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onClick(View aSource) {
|
||||
Timer aTimer = mCommunicationService.getSlideShow().getTimer();
|
||||
// --------------------------------- ACTIONBAR BUTTONS -------------
|
||||
if (aSource == mThumbnailButton) {
|
||||
if (!mThumbnailFragment.isVisible()) {
|
||||
FragmentTransaction ft = getFragmentManager()
|
||||
.beginTransaction();
|
||||
ft.replace(R.id.presentation_innerFrame, mThumbnailFragment);
|
||||
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
|
||||
ft.addToBackStack(null);
|
||||
ft.commit();
|
||||
} else {
|
||||
getFragmentManager().popBackStack();
|
||||
}
|
||||
} else if (aSource == mTimeLabel) {
|
||||
if (mClockBar.getVisibility() == View.VISIBLE) {
|
||||
hidePopups();
|
||||
} else {
|
||||
mClockBar.setVisibility(View.VISIBLE);
|
||||
updateClockBar();
|
||||
mClockBar.bringToFront();
|
||||
}
|
||||
}
|
||||
// ------------------------------------ CLOCKBAR BUTTONS -----------
|
||||
else if (aSource == mClockBar_clockButton) {
|
||||
mTimerOn = false;
|
||||
updateClockBar();
|
||||
} else if (aSource == mClockBar_stopwatchButton) {
|
||||
mTimerOn = true;
|
||||
if (aTimer.isCountdown()) { // Changing mode.
|
||||
aTimer.reset();
|
||||
}
|
||||
aTimer.setCountdown(false);
|
||||
updateClockBar();
|
||||
} else if (aSource == mClockBar_countdownButton) {
|
||||
mTimerOn = true;
|
||||
if (!aTimer.isCountdown()) { // Changing mode
|
||||
aTimer.reset();
|
||||
}
|
||||
aTimer.setCountdown(true);
|
||||
updateClockBar();
|
||||
}
|
||||
// ------------------------------------- TIMER BUTTONS
|
||||
else if (aSource == mStopwatchButtonRun) {
|
||||
if (aTimer.isRunning()) {
|
||||
aTimer.stopTimer();
|
||||
} else {
|
||||
aTimer.startTimer();
|
||||
}
|
||||
updateClockBar();
|
||||
} else if (aSource == mStopwatchButtonReset) {
|
||||
if (aTimer.isRunning()) {
|
||||
aTimer.reset();
|
||||
aTimer.startTimer();
|
||||
} else {
|
||||
aTimer.reset();
|
||||
}
|
||||
updateClockBar();
|
||||
} else if (aSource == mCountdownButton) {
|
||||
if (aTimer.isRunning()) {
|
||||
aTimer.stopTimer();
|
||||
} else {
|
||||
aTimer.startTimer();
|
||||
}
|
||||
updateClockBar();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onEditorAction(TextView tv, int aID, KeyEvent aEvent) {
|
||||
if (aEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
|
||||
}
|
||||
|
||||
long aTime = 0;
|
||||
try {
|
||||
SimpleDateFormat aFormat = new SimpleDateFormat("HH:mm:ss");
|
||||
aFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
aTime = aFormat.parse(mCountdownEntry.getText().toString())
|
||||
.getTime();
|
||||
} catch (ParseException e) {
|
||||
}
|
||||
if (aTime == 0) {
|
||||
try {
|
||||
SimpleDateFormat aFormat = new SimpleDateFormat("mm:ss");
|
||||
aFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
aTime = aFormat.parse(
|
||||
mCountdownEntry.getText().toString())
|
||||
.getTime();
|
||||
} catch (ParseException e) {
|
||||
}
|
||||
}
|
||||
mCommunicationService.getSlideShow().getTimer()
|
||||
.setCountdownTime(aTime);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onBackStackChanged() {
|
||||
if (getFragmentManager().getBackStackEntryCount() == 0) {
|
||||
mThumbnailButton.setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Intermediate layout that catches all touches, used in order to hide
|
||||
* the clock menu as appropriate.
|
||||
* @author andy
|
||||
*
|
||||
*/
|
||||
private class InterceptorLayout extends FrameLayout {
|
||||
@Override
|
||||
public boolean onEditorAction(TextView tv, int aID, KeyEvent aEvent) {
|
||||
if (aEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
|
||||
|
||||
public InterceptorLayout(Context context) {
|
||||
super(context);
|
||||
}
|
||||
long aTime = 0;
|
||||
try {
|
||||
SimpleDateFormat aFormat = new SimpleDateFormat("HH:mm:ss");
|
||||
aFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
aTime = aFormat.parse(mCountdownEntry.getText().toString())
|
||||
.getTime();
|
||||
} catch (ParseException e) {
|
||||
}
|
||||
if (aTime == 0) {
|
||||
try {
|
||||
SimpleDateFormat aFormat = new SimpleDateFormat("mm:ss");
|
||||
aFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
|
||||
aTime = aFormat.parse(
|
||||
mCountdownEntry.getText().toString())
|
||||
.getTime();
|
||||
} catch (ParseException e) {
|
||||
}
|
||||
}
|
||||
mCommunicationService.getSlideShow().getTimer()
|
||||
.setCountdownTime(aTime);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onInterceptTouchEvent(MotionEvent aEvent) {
|
||||
mActionBarManager.hidePopups();
|
||||
return super.onInterceptTouchEvent(aEvent);
|
||||
}
|
||||
/**
|
||||
* Intermediate layout that catches all touches, used in order to hide
|
||||
* the clock menu as appropriate.
|
||||
* @author andy
|
||||
*
|
||||
*/
|
||||
private class InterceptorLayout extends FrameLayout {
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent aEvent) {
|
||||
return super.onTouchEvent(aEvent);
|
||||
}
|
||||
public InterceptorLayout(Context context) {
|
||||
super(context);
|
||||
}
|
||||
|
||||
}
|
||||
@Override
|
||||
public boolean onInterceptTouchEvent(MotionEvent aEvent) {
|
||||
mActionBarManager.hidePopups();
|
||||
return super.onInterceptTouchEvent(aEvent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent aEvent) {
|
||||
return super.onTouchEvent(aEvent);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -6,7 +6,10 @@ import org.libreoffice.impressremote.communication.SlideShow;
|
||||
import pl.polidea.coverflow.AbstractCoverFlowImageAdapter;
|
||||
import pl.polidea.coverflow.CoverFlow;
|
||||
import android.app.Fragment;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.res.Configuration;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
@@ -14,7 +17,7 @@ import android.graphics.Color;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.RectF;
|
||||
import android.os.Bundle;
|
||||
import android.os.Message;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
@@ -47,8 +50,8 @@ public class PresentationFragment extends Fragment {
|
||||
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
mContext = container.getContext();
|
||||
|
||||
mContext = getActivity().getApplicationContext();
|
||||
container.removeAllViews();
|
||||
View v = inflater.inflate(R.layout.fragment_presentation, container,
|
||||
false);
|
||||
|
||||
@@ -85,9 +88,26 @@ public class PresentationFragment extends Fragment {
|
||||
// We need to update the view now
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
LocalBroadcastManager
|
||||
.getInstance(getActivity().getApplicationContext())
|
||||
.unregisterReceiver(mListener);
|
||||
|
||||
}
|
||||
|
||||
private void updateSlideNumberDisplay() {
|
||||
int aSlide = mSlideShow.getCurrentSlide();
|
||||
mNumberText.setText((aSlide + 1) + "/" + mSlideShow.getSize());
|
||||
@@ -204,23 +224,28 @@ public class PresentationFragment extends Fragment {
|
||||
updateSlideNumberDisplay();
|
||||
}
|
||||
|
||||
public void handleMessage(Message aMessage) {
|
||||
Bundle aData = aMessage.getData();
|
||||
switch (aMessage.what) {
|
||||
case CommunicationService.MSG_SLIDE_CHANGED:
|
||||
int aSlide = aData.getInt("slide_number");
|
||||
mTopView.setSelection(aSlide, true);
|
||||
updateSlideNumberDisplay();
|
||||
break;
|
||||
case CommunicationService.MSG_SLIDE_PREVIEW:
|
||||
int aNSlide = aData.getInt("slide_number");
|
||||
if (mTopView.getSelectedItemPosition() == aNSlide) {
|
||||
// mTopView. // TODO: update the current item
|
||||
private BroadcastReceiver mListener = new BroadcastReceiver() {
|
||||
|
||||
@Override
|
||||
public void onReceive(Context aContext, Intent aIntent) {
|
||||
if (aIntent.getAction().equals(
|
||||
CommunicationService.MSG_SLIDE_CHANGED)) {
|
||||
int aSlide = aIntent.getExtras().getInt("slide_number");
|
||||
mTopView.setSelection(aSlide, true);
|
||||
updateSlideNumberDisplay();
|
||||
} else if (aIntent.getAction().equals(
|
||||
CommunicationService.MSG_SLIDE_PREVIEW)) {
|
||||
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 ----
|
||||
protected class ThumbnailAdapter extends AbstractCoverFlowImageAdapter {
|
||||
|
@@ -61,6 +61,12 @@ public class SelectorActivity extends Activity {
|
||||
refreshLists();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
LocalBroadcastManager.getInstance(this).unregisterReceiver(mListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
mCommunicationService.stopFindingServers();
|
||||
|
@@ -0,0 +1,91 @@
|
||||
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;
|
||||
import org.libreoffice.impressremote.communication.SlideShow;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Typeface;
|
||||
import android.os.Bundle;
|
||||
import android.os.Message;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@@ -29,194 +32,204 @@ import android.widget.TextView;
|
||||
|
||||
public class ThumbnailFragment extends Fragment {
|
||||
|
||||
private CommunicationService mCommunicationService;
|
||||
private CommunicationService mCommunicationService;
|
||||
|
||||
private GridView mGrid;
|
||||
private ImageView mCurrentImage;
|
||||
private TextView mCurrentText;
|
||||
private GridView mGrid;
|
||||
private ImageView mCurrentImage;
|
||||
private TextView mCurrentText;
|
||||
|
||||
private SlideShow mSlideShow;
|
||||
private Context mContext;
|
||||
private SlideShow mSlideShow;
|
||||
private Context mContext;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
// Inflate the layout for this fragment
|
||||
View v = inflater
|
||||
.inflate(R.layout.fragment_thumbnail, container, false);
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
// Inflate the layout for this fragment
|
||||
container.removeAllViews();
|
||||
View v = inflater
|
||||
.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());
|
||||
mContext = container.getContext();
|
||||
mGrid.setOnItemClickListener(new ClickListener());
|
||||
mContext = getActivity().getApplicationContext();
|
||||
|
||||
if (mCommunicationService != null && mSlideShow != null) {
|
||||
mGrid.setAdapter(new ThumbnailAdapter(mContext, mSlideShow));
|
||||
}
|
||||
if (mCommunicationService != null && mSlideShow != null) {
|
||||
mGrid.setAdapter(new ThumbnailAdapter(mContext, mSlideShow));
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
IntentFilter aFilter = new IntentFilter(
|
||||
CommunicationService.MSG_SLIDE_CHANGED);
|
||||
aFilter.addAction(CommunicationService.MSG_SLIDE_PREVIEW);
|
||||
LocalBroadcastManager
|
||||
.getInstance(getActivity().getApplicationContext())
|
||||
.registerReceiver(mListener, aFilter);
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
mGrid = null;
|
||||
mContext = null;
|
||||
mCurrentImage = null;
|
||||
mCurrentText = null;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
LocalBroadcastManager
|
||||
.getInstance(getActivity().getApplicationContext())
|
||||
.unregisterReceiver(mListener);
|
||||
mGrid = null;
|
||||
mContext = null;
|
||||
mCurrentImage = null;
|
||||
mCurrentText = null;
|
||||
}
|
||||
|
||||
}
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
}
|
||||
}
|
||||
|
||||
private void setSelected(int position) {
|
||||
formatUnselected(mCurrentImage, mCurrentText);
|
||||
@Override
|
||||
public void onPause() {
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
if (mGrid == null) {
|
||||
return;
|
||||
}
|
||||
private void setSelected(int position) {
|
||||
formatUnselected(mCurrentImage, mCurrentText);
|
||||
|
||||
View aV = mGrid.getChildAt(position);
|
||||
if (aV != null) {
|
||||
mCurrentImage = (ImageView) aV.findViewById(R.id.sub_thumbnail);
|
||||
mCurrentText = (TextView) aV.findViewById(R.id.sub_number);
|
||||
if (mGrid == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
formatSelected(mCurrentImage, mCurrentText);
|
||||
}
|
||||
}
|
||||
View aV = mGrid.getChildAt(position);
|
||||
if (aV != null) {
|
||||
mCurrentImage = (ImageView) aV.findViewById(R.id.sub_thumbnail);
|
||||
mCurrentText = (TextView) aV.findViewById(R.id.sub_number);
|
||||
|
||||
private void formatUnselected(ImageView aImage, TextView aText) {
|
||||
if (aImage != null) {
|
||||
aImage.setBackgroundColor(getResources().getColor(
|
||||
R.color.thumbnail_border));
|
||||
}
|
||||
if (aText != null) {
|
||||
aText.setTypeface(Typeface.create(aText.getTypeface(),
|
||||
Typeface.NORMAL));
|
||||
}
|
||||
}
|
||||
formatSelected(mCurrentImage, mCurrentText);
|
||||
}
|
||||
}
|
||||
|
||||
private void formatSelected(ImageView aImage, TextView aText) {
|
||||
if (aImage != null) {
|
||||
aImage.setBackgroundColor(getResources().getColor(
|
||||
R.color.thumbnail_border_selected));
|
||||
}
|
||||
if (aText != null) {
|
||||
aText.setTypeface(Typeface.create(aText.getTypeface(),
|
||||
Typeface.BOLD));
|
||||
}
|
||||
}
|
||||
private void formatUnselected(ImageView aImage, TextView aText) {
|
||||
if (aImage != null) {
|
||||
aImage.setBackgroundColor(getResources().getColor(
|
||||
R.color.thumbnail_border));
|
||||
}
|
||||
if (aText != null) {
|
||||
aText.setTypeface(Typeface.create(aText.getTypeface(),
|
||||
Typeface.NORMAL));
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------- CLICK LISTENER ----
|
||||
protected class ClickListener implements AdapterView.OnItemClickListener {
|
||||
public void onItemClick(AdapterView<?> parent, View v, int position,
|
||||
long id) {
|
||||
if (mCommunicationService != null)
|
||||
mCommunicationService.getTransmitter().gotoSlide(position);
|
||||
}
|
||||
}
|
||||
private void formatSelected(ImageView aImage, TextView aText) {
|
||||
if (aImage != null) {
|
||||
aImage.setBackgroundColor(getResources().getColor(
|
||||
R.color.thumbnail_border_selected));
|
||||
}
|
||||
if (aText != null) {
|
||||
aText.setTypeface(Typeface.create(aText.getTypeface(),
|
||||
Typeface.BOLD));
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------- MESSAGE HANDLER ----
|
||||
// ----------------------------------------------------- CLICK LISTENER ----
|
||||
protected class ClickListener implements AdapterView.OnItemClickListener {
|
||||
public void onItemClick(AdapterView<?> parent, View v, int position,
|
||||
long id) {
|
||||
if (mCommunicationService != null)
|
||||
mCommunicationService.getTransmitter().gotoSlide(position);
|
||||
}
|
||||
}
|
||||
|
||||
public void setCommunicationService(
|
||||
CommunicationService aCommunicationService) {
|
||||
mCommunicationService = aCommunicationService;
|
||||
mSlideShow = mCommunicationService.getSlideShow();
|
||||
if (mGrid != null) {
|
||||
mGrid.setAdapter(new ThumbnailAdapter(mContext, mSlideShow));
|
||||
}
|
||||
}
|
||||
// ---------------------------------------------------- MESSAGE HANDLER ----
|
||||
|
||||
public void handleMessage(Message aMessage) {
|
||||
if (!isVisible()) {
|
||||
return;
|
||||
}
|
||||
public void setCommunicationService(
|
||||
CommunicationService aCommunicationService) {
|
||||
mCommunicationService = aCommunicationService;
|
||||
mSlideShow = mCommunicationService.getSlideShow();
|
||||
if (mGrid != null) {
|
||||
mGrid.setAdapter(new ThumbnailAdapter(mContext, mSlideShow));
|
||||
}
|
||||
}
|
||||
|
||||
Bundle aData = aMessage.getData();
|
||||
switch (aMessage.what) {
|
||||
case CommunicationService.MSG_SLIDE_CHANGED:
|
||||
int aSlide = aData.getInt("slide_number");
|
||||
break;
|
||||
case CommunicationService.MSG_SLIDE_PREVIEW:
|
||||
mGrid.invalidateViews();
|
||||
break;
|
||||
private BroadcastReceiver mListener = new BroadcastReceiver() {
|
||||
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void onReceive(Context aContext, Intent aIntent) {
|
||||
if (aIntent.getAction().equals(
|
||||
CommunicationService.MSG_SLIDE_CHANGED)) {
|
||||
int aSlide = aIntent.getExtras().getInt("slide_number");
|
||||
setSelected(aSlide);
|
||||
} else if (aIntent.getAction().equals(
|
||||
CommunicationService.MSG_SLIDE_PREVIEW)) {
|
||||
mGrid.invalidateViews();
|
||||
}
|
||||
|
||||
// ------------------------------------------------- THUMBNAIL ADAPTER ----
|
||||
protected class ThumbnailAdapter extends BaseAdapter {
|
||||
}
|
||||
};
|
||||
|
||||
private Context mContext;
|
||||
// ------------------------------------------------- THUMBNAIL ADAPTER ----
|
||||
protected class ThumbnailAdapter extends BaseAdapter {
|
||||
|
||||
private SlideShow mSlideShow;
|
||||
private Context mContext;
|
||||
|
||||
public ThumbnailAdapter(Context aContext, SlideShow aSlideShow) {
|
||||
mContext = aContext;
|
||||
mSlideShow = aSlideShow;
|
||||
}
|
||||
private SlideShow mSlideShow;
|
||||
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mSlideShow.getSize();
|
||||
}
|
||||
public ThumbnailAdapter(Context aContext, SlideShow aSlideShow) {
|
||||
mContext = aContext;
|
||||
mSlideShow = aSlideShow;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getItem(int arg0) {
|
||||
return null;
|
||||
}
|
||||
@Override
|
||||
public int getCount() {
|
||||
return mSlideShow.getSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return 0;
|
||||
}
|
||||
@Override
|
||||
public Object getItem(int arg0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
LayoutInflater aInflater = (LayoutInflater) mContext
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
View v = aInflater.inflate(R.layout.slide_thumbnail, null);
|
||||
@Override
|
||||
public long getItemId(int position) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
ImageView aImage = (ImageView) v.findViewById(R.id.sub_thumbnail);
|
||||
TextView aText = (TextView) v.findViewById(R.id.sub_number);
|
||||
@Override
|
||||
public View getView(int position, View convertView, ViewGroup parent) {
|
||||
LayoutInflater aInflater = (LayoutInflater) mContext
|
||||
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||
View v = aInflater.inflate(R.layout.slide_thumbnail, null);
|
||||
|
||||
// Do the image & number styling
|
||||
int aBorderWidth = getResources().getInteger(
|
||||
R.integer.thumbnail_border_width);
|
||||
aImage.setPadding(aBorderWidth, aBorderWidth, aBorderWidth,
|
||||
aBorderWidth);
|
||||
ImageView aImage = (ImageView) v.findViewById(R.id.sub_thumbnail);
|
||||
TextView aText = (TextView) v.findViewById(R.id.sub_number);
|
||||
|
||||
if ((mSlideShow != null)
|
||||
&& (position == mSlideShow.getCurrentSlide())) {
|
||||
formatSelected(aImage, aText);
|
||||
mCurrentImage = aImage;
|
||||
mCurrentText = aText;
|
||||
} else {
|
||||
formatUnselected(aImage, aText);
|
||||
}
|
||||
// Do the image & number styling
|
||||
int aBorderWidth = getResources().getInteger(
|
||||
R.integer.thumbnail_border_width);
|
||||
aImage.setPadding(aBorderWidth, aBorderWidth, aBorderWidth,
|
||||
aBorderWidth);
|
||||
|
||||
Bitmap aBitmap = mSlideShow.getImage(position);
|
||||
// Width
|
||||
int aWidth = (mGrid.getWidth()) / 3 - 20;
|
||||
aImage.setMaxWidth(aWidth);
|
||||
aImage.setScaleType(ScaleType.FIT_CENTER);
|
||||
if ((mSlideShow != null)
|
||||
&& (position == mSlideShow.getCurrentSlide())) {
|
||||
formatSelected(aImage, aText);
|
||||
mCurrentImage = aImage;
|
||||
mCurrentText = aText;
|
||||
} else {
|
||||
formatUnselected(aImage, aText);
|
||||
}
|
||||
|
||||
if (aBitmap != null) {
|
||||
aImage.setImageBitmap(aBitmap);
|
||||
}
|
||||
Bitmap aBitmap = mSlideShow.getImage(position);
|
||||
// Width
|
||||
int aWidth = (mGrid.getWidth()) / 3 - 20;
|
||||
aImage.setMaxWidth(aWidth);
|
||||
aImage.setScaleType(ScaleType.FIT_CENTER);
|
||||
|
||||
aText.setText(String.valueOf(position + 1));
|
||||
if (aBitmap != null) {
|
||||
aImage.setImageBitmap(aBitmap);
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
}
|
||||
aText.setText(String.valueOf(position + 1));
|
||||
|
||||
return v;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -34,6 +34,8 @@ public abstract class Client {
|
||||
protected OutputStream mOutputStream;
|
||||
protected String mPin = "";
|
||||
|
||||
private static Client latestInstance = null;
|
||||
|
||||
public abstract void closeConnection();
|
||||
|
||||
private Receiver mReceiver;
|
||||
@@ -42,6 +44,7 @@ public abstract class Client {
|
||||
|
||||
public Client(Context aContext) {
|
||||
mContext = aContext;
|
||||
latestInstance = this;
|
||||
}
|
||||
|
||||
public void setReceiver(Receiver aReceiver) {
|
||||
@@ -77,11 +80,16 @@ public abstract class Client {
|
||||
// TODO stream couldn't be opened.
|
||||
e1.printStackTrace();
|
||||
}
|
||||
latestInstance = null;
|
||||
|
||||
}
|
||||
|
||||
public String getPin() {
|
||||
return mPin;
|
||||
public static String getPin() {
|
||||
if (latestInstance != null) {
|
||||
return latestInstance.mPin;
|
||||
} else {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -12,7 +12,6 @@ import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.Binder;
|
||||
import android.os.IBinder;
|
||||
import android.os.Messenger;
|
||||
|
||||
public class CommunicationService extends Service implements Runnable {
|
||||
|
||||
@@ -32,10 +31,7 @@ public class CommunicationService extends Service implements Runnable {
|
||||
}
|
||||
|
||||
public String getPairingPin() {
|
||||
if (mClient != null)
|
||||
return mClient.getPin();
|
||||
else
|
||||
return "";
|
||||
return Client.getPin();
|
||||
}
|
||||
|
||||
public String getDeviceName() {
|
||||
@@ -67,6 +63,7 @@ public class CommunicationService extends Service implements Runnable {
|
||||
mState = State.DISCONNECTED;
|
||||
}
|
||||
if (mStateDesired == State.CONNECTED) {
|
||||
mState = State.CONNECTING;
|
||||
switch (mServerDesired.getProtocol()) {
|
||||
case NETWORK:
|
||||
mClient = new NetworkClient(
|
||||
@@ -138,10 +135,10 @@ public class CommunicationService extends Service implements Runnable {
|
||||
|
||||
private final IBinder mBinder = new CBinder();
|
||||
|
||||
public static final int MSG_SLIDESHOW_STARTED = 1;
|
||||
public static final int MSG_SLIDE_CHANGED = 2;
|
||||
public static final int MSG_SLIDE_PREVIEW = 3;
|
||||
public static final int MSG_SLIDE_NOTES = 4;
|
||||
public static final String MSG_SLIDESHOW_STARTED = "SLIDESHOW_STARTED";
|
||||
public static final String MSG_SLIDE_CHANGED = "SLIDE_CHANGED";
|
||||
public static final String MSG_SLIDE_PREVIEW = "SLIDE_PREVIEW";
|
||||
public static final String MSG_SLIDE_NOTES = "SLIDE_NOTES";
|
||||
|
||||
public static final String MSG_SERVERLIST_CHANGED = "SERVERLIST_CHANGED";
|
||||
public static final String MSG_PAIRING_STARTED = "PAIRING_STARTED";
|
||||
@@ -151,14 +148,10 @@ public class CommunicationService extends Service implements Runnable {
|
||||
|
||||
private Client mClient;
|
||||
|
||||
private Receiver mReceiver = new Receiver();
|
||||
private Receiver mReceiver = new Receiver(this);
|
||||
|
||||
private ServerFinder mFinder = new ServerFinder(this);
|
||||
|
||||
public void setActivityMessenger(Messenger aActivityMessenger) {
|
||||
mReceiver.setActivityMessenger(aActivityMessenger);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
// TODO Auto-generated method stub
|
||||
@@ -201,5 +194,9 @@ public class CommunicationService extends Service implements Runnable {
|
||||
return mReceiver.getSlideShow();
|
||||
}
|
||||
|
||||
public boolean isSlideShowRunning() {
|
||||
return mReceiver.isSlideShowRunning();
|
||||
}
|
||||
|
||||
}
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -10,112 +10,87 @@ package org.libreoffice.impressremote.communication;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.os.Message;
|
||||
import android.os.Messenger;
|
||||
import android.os.RemoteException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.util.Base64;
|
||||
|
||||
public class Receiver {
|
||||
|
||||
private Messenger mActivityMessenger;
|
||||
public Receiver(Context aContext) {
|
||||
mContext = aContext;
|
||||
mSlideShow = new SlideShow(mContext);
|
||||
}
|
||||
|
||||
private SlideShow mSlideShow = new SlideShow();
|
||||
private Context mContext;
|
||||
|
||||
public SlideShow getSlideShow() {
|
||||
return mSlideShow;
|
||||
}
|
||||
private SlideShow mSlideShow;
|
||||
|
||||
public void setActivityMessenger(Messenger aActivityMessenger) {
|
||||
mActivityMessenger = aActivityMessenger;
|
||||
}
|
||||
public SlideShow getSlideShow() {
|
||||
return mSlideShow;
|
||||
}
|
||||
|
||||
public void parseCommand(ArrayList<String> aCommand) {
|
||||
if (mActivityMessenger == null) {
|
||||
return;
|
||||
}
|
||||
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);
|
||||
public boolean isSlideShowRunning() {
|
||||
return (mSlideShow.getSize() > 0);
|
||||
}
|
||||
|
||||
Message aMessage = Message.obtain(null,
|
||||
CommunicationService.MSG_SLIDESHOW_STARTED);
|
||||
Bundle aData = new Bundle();
|
||||
aMessage.setData(aData);
|
||||
try {
|
||||
mActivityMessenger.send(aMessage);
|
||||
} catch (RemoteException e) {
|
||||
// Dead Handler -- i.e. Activity gone.
|
||||
}
|
||||
} else {
|
||||
if (mSlideShow == null)
|
||||
return;
|
||||
public void parseCommand(ArrayList<String> aCommand) {
|
||||
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(
|
||||
CommunicationService.MSG_SLIDESHOW_STARTED);
|
||||
LocalBroadcastManager.getInstance(mContext).sendBroadcast(aIntent);
|
||||
} else {
|
||||
if (mSlideShow == null)
|
||||
return;
|
||||
|
||||
if (aInstruction.equals("slide_updated")) {
|
||||
if (aInstruction.equals("slide_updated")) {
|
||||
|
||||
int aSlideNumber = Integer.parseInt(aCommand.get(1));
|
||||
int aSlideNumber = Integer.parseInt(aCommand.get(1));
|
||||
|
||||
mSlideShow.setCurrentSlide(aSlideNumber);
|
||||
mSlideShow.setCurrentSlide(aSlideNumber);
|
||||
|
||||
Message aMessage = Message.obtain(null,
|
||||
CommunicationService.MSG_SLIDE_CHANGED);
|
||||
Bundle aData = new Bundle();
|
||||
aData.putInt("slide_number", aSlideNumber);
|
||||
aMessage.setData(aData);
|
||||
try {
|
||||
mActivityMessenger.send(aMessage);
|
||||
} catch (RemoteException e) {
|
||||
// Dead Handler -- i.e. Activity gone.
|
||||
}
|
||||
} else if (aInstruction.equals("slide_preview")) {
|
||||
int aSlideNumber = Integer.parseInt(aCommand.get(1));
|
||||
String aImageString = aCommand.get(2);
|
||||
byte[] aImage = Base64.decode(aImageString, Base64.DEFAULT);
|
||||
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);
|
||||
byte[] aImage = Base64.decode(aImageString, Base64.DEFAULT);
|
||||
|
||||
// Store image internally
|
||||
mSlideShow.putImage(aSlideNumber, aImage);
|
||||
// Store image internally
|
||||
mSlideShow.putImage(aSlideNumber, aImage);
|
||||
|
||||
// Notify the frontend
|
||||
Message aMessage = Message.obtain(null,
|
||||
CommunicationService.MSG_SLIDE_PREVIEW);
|
||||
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();
|
||||
}
|
||||
} 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);
|
||||
}
|
||||
Intent aIntent = new Intent(
|
||||
CommunicationService.MSG_SLIDE_PREVIEW);
|
||||
aIntent.putExtra("slide_number", aSlideNumber);
|
||||
LocalBroadcastManager.getInstance(mContext).sendBroadcast(
|
||||
aIntent);
|
||||
} 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);
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
Intent aIntent = new Intent(
|
||||
CommunicationService.MSG_SLIDE_NOTES);
|
||||
aIntent.putExtra("slide_number", aSlideNumber);
|
||||
LocalBroadcastManager.getInstance(mContext).sendBroadcast(
|
||||
aIntent);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -8,160 +8,169 @@
|
||||
*/
|
||||
package org.libreoffice.impressremote.communication;
|
||||
|
||||
import org.libreoffice.impressremote.R;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.util.SparseArray;
|
||||
|
||||
public class SlideShow {
|
||||
|
||||
private SparseArray<byte[]> mPreviewImages = new SparseArray<byte[]>();
|
||||
private SparseArray<String> mNotes = new SparseArray<String>();
|
||||
private SparseArray<byte[]> mPreviewImages = new SparseArray<byte[]>();
|
||||
private SparseArray<String> mNotes = new SparseArray<String>();
|
||||
|
||||
private int mSize = 0;
|
||||
private int mCurrentSlide = 0;
|
||||
private int mSize = 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) {
|
||||
return BitmapFactory.decodeResource(mContext.getResources(),
|
||||
R.drawable.image_loading);
|
||||
}
|
||||
return BitmapFactory.decodeByteArray(aImage, 0, aImage.length);
|
||||
}
|
||||
|
||||
protected void putNotes(int aSlide, String aNotes) {
|
||||
mNotes.put(aSlide, aNotes);
|
||||
}
|
||||
protected void putNotes(int aSlide, String aNotes) {
|
||||
mNotes.put(aSlide, aNotes);
|
||||
}
|
||||
|
||||
public String getNotes(int aSlide) {
|
||||
return mNotes.get(aSlide);
|
||||
}
|
||||
public String getNotes(int aSlide) {
|
||||
return mNotes.get(aSlide);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------- TIMER --------------
|
||||
private Timer mTimer = new Timer();
|
||||
// ---------------------------------------------------- TIMER --------------
|
||||
private Timer mTimer = new Timer();
|
||||
|
||||
public Timer getTimer() {
|
||||
return mTimer;
|
||||
}
|
||||
public Timer getTimer() {
|
||||
return mTimer;
|
||||
}
|
||||
|
||||
public class Timer {
|
||||
/**
|
||||
* This stores the starting time of the timer if running.
|
||||
*
|
||||
* If paused this stores how long the timer was previously running.
|
||||
*/
|
||||
private long aTime = 0;
|
||||
public class Timer {
|
||||
/**
|
||||
* This stores the starting time of the timer if running.
|
||||
*
|
||||
* If paused this stores how long the timer was previously running.
|
||||
*/
|
||||
private long aTime = 0;
|
||||
|
||||
private long mCountdownTime = 0;
|
||||
private long mCountdownTime = 0;
|
||||
|
||||
private boolean mIsRunning = false;
|
||||
private boolean mIsRunning = false;
|
||||
|
||||
private boolean mIsCountdown = false;
|
||||
private boolean mIsCountdown = false;
|
||||
|
||||
/**
|
||||
* Set whether this timer should be a normal or a countdown timer.
|
||||
* @param aIsCountdown
|
||||
* Whether this should be a countdown timer.
|
||||
*/
|
||||
public void setCountdown(boolean aIsCountdown) {
|
||||
mIsCountdown = aIsCountdown;
|
||||
if (mIsRunning) {
|
||||
mIsRunning = false;
|
||||
aTime = 0;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Set whether this timer should be a normal or a countdown timer.
|
||||
* @param aIsCountdown
|
||||
* Whether this should be a countdown timer.
|
||||
*/
|
||||
public void setCountdown(boolean aIsCountdown) {
|
||||
mIsCountdown = aIsCountdown;
|
||||
if (mIsRunning) {
|
||||
mIsRunning = false;
|
||||
aTime = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the countdown time. Can be set, and isn't lost, whatever mode
|
||||
* the timer is running in.
|
||||
* @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
|
||||
* The countdown time.
|
||||
*/
|
||||
public void setCountdownTime(long aCountdownTime) {
|
||||
mCountdownTime = aCountdownTime;
|
||||
}
|
||||
|
||||
public long getCountdownTime() {
|
||||
return mCountdownTime;
|
||||
}
|
||||
public long getCountdownTime() {
|
||||
return mCountdownTime;
|
||||
}
|
||||
|
||||
public boolean isCountdown() {
|
||||
return mIsCountdown;
|
||||
}
|
||||
public boolean isCountdown() {
|
||||
return mIsCountdown;
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
return mIsRunning;
|
||||
}
|
||||
public boolean isRunning() {
|
||||
return mIsRunning;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the timer, and stop it it was running.
|
||||
*/
|
||||
public void reset() {
|
||||
mIsRunning = false;
|
||||
aTime = 0;
|
||||
}
|
||||
/**
|
||||
* Reset the timer, and stop it it was running.
|
||||
*/
|
||||
public void reset() {
|
||||
mIsRunning = false;
|
||||
aTime = 0;
|
||||
}
|
||||
|
||||
public void startTimer() {
|
||||
if (mIsRunning)
|
||||
return;
|
||||
public void startTimer() {
|
||||
if (mIsRunning)
|
||||
return;
|
||||
|
||||
aTime = System.currentTimeMillis() - aTime;
|
||||
mIsRunning = true;
|
||||
}
|
||||
aTime = System.currentTimeMillis() - aTime;
|
||||
mIsRunning = true;
|
||||
}
|
||||
|
||||
public void stopTimer() {
|
||||
if (!mIsRunning)
|
||||
return;
|
||||
public void stopTimer() {
|
||||
if (!mIsRunning)
|
||||
return;
|
||||
|
||||
aTime = System.currentTimeMillis() - aTime;
|
||||
mIsRunning = false;
|
||||
}
|
||||
aTime = System.currentTimeMillis() - aTime;
|
||||
mIsRunning = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get either how long this timer has been running, or how long the
|
||||
* timer still has left to run.
|
||||
* @return
|
||||
*/
|
||||
public long getTimeMillis() {
|
||||
long aTimeRunning;
|
||||
// Determine how long we've been going.
|
||||
if (mIsRunning) {
|
||||
aTimeRunning = System.currentTimeMillis() - aTime;
|
||||
} else {
|
||||
aTimeRunning = aTime;
|
||||
}
|
||||
// And give the time going, or time left
|
||||
if (!mIsCountdown) {
|
||||
return aTimeRunning;
|
||||
} else {
|
||||
long aRet = mCountdownTime - aTimeRunning;
|
||||
if (aRet < 0) { // We have completed!
|
||||
mIsRunning = false;
|
||||
aRet = 0;
|
||||
}
|
||||
return aRet;
|
||||
}
|
||||
/**
|
||||
* Get either how long this timer has been running, or how long the
|
||||
* timer still has left to run.
|
||||
* @return
|
||||
*/
|
||||
public long getTimeMillis() {
|
||||
long aTimeRunning;
|
||||
// Determine how long we've been going.
|
||||
if (mIsRunning) {
|
||||
aTimeRunning = System.currentTimeMillis() - aTime;
|
||||
} else {
|
||||
aTimeRunning = aTime;
|
||||
}
|
||||
// And give the time going, or time left
|
||||
if (!mIsCountdown) {
|
||||
return aTimeRunning;
|
||||
} else {
|
||||
long aRet = mCountdownTime - aTimeRunning;
|
||||
if (aRet < 0) { // We have completed!
|
||||
mIsRunning = false;
|
||||
aRet = 0;
|
||||
}
|
||||
return aRet;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
@@ -1,197 +1,197 @@
|
||||
/* -*- Mode: C++; 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 org.libreoffice.impressremote.PresentationActivity;
|
||||
import org.libreoffice.impressremote.R;
|
||||
import org.libreoffice.impressremote.communication.Server.Protocol;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.Message;
|
||||
import android.os.Messenger;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.Button;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
public class TestClient extends Activity {
|
||||
|
||||
private boolean mCurrentPreviewImageMissing = false;
|
||||
|
||||
private boolean mIsBound = false;
|
||||
|
||||
private CommunicationService mCommunicationService;
|
||||
|
||||
final Messenger mMessenger = new Messenger(new MessageHandler());
|
||||
|
||||
/** Called when the activity is first created. */
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.testlayout);
|
||||
setupUI();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
doBindService();
|
||||
|
||||
}
|
||||
|
||||
// FIXME: move all necessary code to CommunicationService.onUnbind
|
||||
|
||||
@Override
|
||||
protected void onPause() {
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
// TODO Auto-generated method stub
|
||||
mCommunicationService.disconnect();
|
||||
stopService(new Intent(this, CommunicationService.class));
|
||||
doUnbindService();
|
||||
finish();
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
// TODO Auto-generated method stub
|
||||
super.onStop();
|
||||
// mCommunicationService.disconnect();
|
||||
// stopService(new Intent(this, CommunicationService.class));
|
||||
}
|
||||
|
||||
private ServiceConnection mConnection = new ServiceConnection() {
|
||||
@Override
|
||||
public void onServiceConnected(ComponentName aClassName,
|
||||
IBinder aService) {
|
||||
mCommunicationService = ((CommunicationService.CBinder) aService)
|
||||
.getService();
|
||||
mCommunicationService.connectTo(new Server(Protocol.NETWORK,
|
||||
"10.0.2.2", "TestServer", 0l));
|
||||
mCommunicationService.setActivityMessenger(mMessenger);
|
||||
enableButtons(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onServiceDisconnected(ComponentName aClassName) {
|
||||
mCommunicationService = null;
|
||||
enableButtons(false);
|
||||
}
|
||||
};
|
||||
|
||||
void doBindService() {
|
||||
Intent aIntent = new Intent(this, CommunicationService.class);
|
||||
startService(aIntent);
|
||||
bindService(aIntent, mConnection, Context.BIND_IMPORTANT);
|
||||
mIsBound = true;
|
||||
}
|
||||
|
||||
void doUnbindService() {
|
||||
mCommunicationService.setActivityMessenger(null);
|
||||
if (mIsBound) {
|
||||
unbindService(mConnection);
|
||||
mIsBound = false;
|
||||
}
|
||||
}
|
||||
|
||||
private Button mButtonNext;
|
||||
|
||||
private Button mButtonPrevious;
|
||||
|
||||
private ImageView mImageView;
|
||||
|
||||
private TextView mSlideLabel;
|
||||
|
||||
private void setupUI() {
|
||||
mButtonNext = (Button) findViewById(R.id.button_next);
|
||||
mButtonPrevious = (Button) findViewById(R.id.button_previous);
|
||||
mImageView = (ImageView) findViewById(R.id.image_preview);
|
||||
mSlideLabel = (TextView) findViewById(R.id.label_curSlide);
|
||||
|
||||
enableButtons(false);
|
||||
|
||||
mButtonNext.setOnClickListener(new OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mCommunicationService.getTransmitter().nextTransition();
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
mButtonPrevious.setOnClickListener(new OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mCommunicationService.getTransmitter().previousTransition();
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
Button mThumbnailButton = (Button) findViewById(R.id.button_thumbnail);
|
||||
|
||||
mThumbnailButton.setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
Intent aIntent = new Intent(TestClient.this,
|
||||
PresentationActivity.class);
|
||||
startActivity(aIntent);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void enableButtons(boolean aEnabled) {
|
||||
mButtonNext.setEnabled(aEnabled);
|
||||
mButtonPrevious.setEnabled(aEnabled);
|
||||
}
|
||||
|
||||
class MessageHandler extends Handler {
|
||||
@Override
|
||||
public void handleMessage(Message aMessage) {
|
||||
Bundle aData = aMessage.getData();
|
||||
switch (aMessage.what) {
|
||||
case CommunicationService.MSG_SLIDE_CHANGED:
|
||||
int newSlide = aData.getInt("slide_number");
|
||||
mSlideLabel.setText("Slide " + newSlide);
|
||||
mCurrentPreviewImageMissing = true;
|
||||
// We continue on to try and update the image.
|
||||
case CommunicationService.MSG_SLIDE_PREVIEW:
|
||||
int aSlideNumber = aData.getInt("slide_number");
|
||||
if (mCurrentPreviewImageMissing) {
|
||||
Bitmap aImage = mCommunicationService.getSlideShow()
|
||||
.getImage(aSlideNumber);
|
||||
if (aImage != null) {
|
||||
mImageView.setImageBitmap(aImage);
|
||||
mCurrentPreviewImageMissing = false;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
///* -*- Mode: C++; 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 org.libreoffice.impressremote.PresentationActivity;
|
||||
//import org.libreoffice.impressremote.R;
|
||||
//import org.libreoffice.impressremote.communication.Server.Protocol;
|
||||
//
|
||||
//import android.app.Activity;
|
||||
//import android.content.ComponentName;
|
||||
//import android.content.Context;
|
||||
//import android.content.Intent;
|
||||
//import android.content.ServiceConnection;
|
||||
//import android.graphics.Bitmap;
|
||||
//import android.os.Bundle;
|
||||
//import android.os.Handler;
|
||||
//import android.os.IBinder;
|
||||
//import android.os.Message;
|
||||
//import android.os.Messenger;
|
||||
//import android.view.View;
|
||||
//import android.view.View.OnClickListener;
|
||||
//import android.widget.Button;
|
||||
//import android.widget.ImageView;
|
||||
//import android.widget.TextView;
|
||||
//
|
||||
//public class TestClient extends Activity {
|
||||
//
|
||||
// private boolean mCurrentPreviewImageMissing = false;
|
||||
//
|
||||
// private boolean mIsBound = false;
|
||||
//
|
||||
// private CommunicationService mCommunicationService;
|
||||
//
|
||||
// final Messenger mMessenger = new Messenger(new MessageHandler());
|
||||
//
|
||||
// /** Called when the activity is first created. */
|
||||
// @Override
|
||||
// public void onCreate(Bundle savedInstanceState) {
|
||||
// super.onCreate(savedInstanceState);
|
||||
// setContentView(R.layout.testlayout);
|
||||
// setupUI();
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected void onResume() {
|
||||
// super.onResume();
|
||||
// doBindService();
|
||||
//
|
||||
// }
|
||||
//
|
||||
// // FIXME: move all necessary code to CommunicationService.onUnbind
|
||||
//
|
||||
// @Override
|
||||
// protected void onPause() {
|
||||
// super.onPause();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onBackPressed() {
|
||||
// // TODO Auto-generated method stub
|
||||
// mCommunicationService.disconnect();
|
||||
// stopService(new Intent(this, CommunicationService.class));
|
||||
// doUnbindService();
|
||||
// finish();
|
||||
// super.onBackPressed();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// protected void onStop() {
|
||||
// // TODO Auto-generated method stub
|
||||
// super.onStop();
|
||||
// // mCommunicationService.disconnect();
|
||||
// // stopService(new Intent(this, CommunicationService.class));
|
||||
// }
|
||||
//
|
||||
// private ServiceConnection mConnection = new ServiceConnection() {
|
||||
// @Override
|
||||
// public void onServiceConnected(ComponentName aClassName,
|
||||
// IBinder aService) {
|
||||
// mCommunicationService = ((CommunicationService.CBinder) aService)
|
||||
// .getService();
|
||||
// mCommunicationService.connectTo(new Server(Protocol.NETWORK,
|
||||
// "10.0.2.2", "TestServer", 0l));
|
||||
// mCommunicationService.setActivityMessenger(mMessenger);
|
||||
// enableButtons(true);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void onServiceDisconnected(ComponentName aClassName) {
|
||||
// mCommunicationService = null;
|
||||
// enableButtons(false);
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// void doBindService() {
|
||||
// Intent aIntent = new Intent(this, CommunicationService.class);
|
||||
// startService(aIntent);
|
||||
// bindService(aIntent, mConnection, Context.BIND_IMPORTANT);
|
||||
// mIsBound = true;
|
||||
// }
|
||||
//
|
||||
// void doUnbindService() {
|
||||
// mCommunicationService.setActivityMessenger(null);
|
||||
// if (mIsBound) {
|
||||
// unbindService(mConnection);
|
||||
// mIsBound = false;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private Button mButtonNext;
|
||||
//
|
||||
// private Button mButtonPrevious;
|
||||
//
|
||||
// private ImageView mImageView;
|
||||
//
|
||||
// private TextView mSlideLabel;
|
||||
//
|
||||
// private void setupUI() {
|
||||
// mButtonNext = (Button) findViewById(R.id.button_next);
|
||||
// mButtonPrevious = (Button) findViewById(R.id.button_previous);
|
||||
// mImageView = (ImageView) findViewById(R.id.image_preview);
|
||||
// mSlideLabel = (TextView) findViewById(R.id.label_curSlide);
|
||||
//
|
||||
// enableButtons(false);
|
||||
//
|
||||
// mButtonNext.setOnClickListener(new OnClickListener() {
|
||||
//
|
||||
// @Override
|
||||
// public void onClick(View v) {
|
||||
// mCommunicationService.getTransmitter().nextTransition();
|
||||
//
|
||||
// }
|
||||
//
|
||||
// });
|
||||
//
|
||||
// mButtonPrevious.setOnClickListener(new OnClickListener() {
|
||||
//
|
||||
// @Override
|
||||
// public void onClick(View v) {
|
||||
// mCommunicationService.getTransmitter().previousTransition();
|
||||
//
|
||||
// }
|
||||
//
|
||||
// });
|
||||
//
|
||||
// Button mThumbnailButton = (Button) findViewById(R.id.button_thumbnail);
|
||||
//
|
||||
// mThumbnailButton.setOnClickListener(new OnClickListener() {
|
||||
// @Override
|
||||
// public void onClick(View v) {
|
||||
// Intent aIntent = new Intent(TestClient.this,
|
||||
// PresentationActivity.class);
|
||||
// startActivity(aIntent);
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// }
|
||||
//
|
||||
// private void enableButtons(boolean aEnabled) {
|
||||
// mButtonNext.setEnabled(aEnabled);
|
||||
// mButtonPrevious.setEnabled(aEnabled);
|
||||
// }
|
||||
//
|
||||
// class MessageHandler extends Handler {
|
||||
// @Override
|
||||
// public void handleMessage(Message aMessage) {
|
||||
// Bundle aData = aMessage.getData();
|
||||
// switch (aMessage.what) {
|
||||
// case CommunicationService.MSG_SLIDE_CHANGED:
|
||||
// int newSlide = aData.getInt("slide_number");
|
||||
// mSlideLabel.setText("Slide " + newSlide);
|
||||
// mCurrentPreviewImageMissing = true;
|
||||
// // We continue on to try and update the image.
|
||||
// case CommunicationService.MSG_SLIDE_PREVIEW:
|
||||
// int aSlideNumber = aData.getInt("slide_number");
|
||||
// if (mCurrentPreviewImageMissing) {
|
||||
// Bitmap aImage = mCommunicationService.getSlideShow()
|
||||
// .getImage(aSlideNumber);
|
||||
// if (aImage != null) {
|
||||
// mImageView.setImageBitmap(aImage);
|
||||
// mCurrentPreviewImageMissing = false;
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
//
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
///* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
Reference in New Issue
Block a user