Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
0357b778
Kaydet (Commit)
0357b778
authored
Agu 14, 2012
tarafından
Andrzej J.R. Hunt
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Implemented rotation of slideshow view.
Change-Id: Ib518e1609d21463273a00fcf161f20c80eae6a67
üst
e02468f6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
438 additions
and
312 deletions
+438
-312
AndroidManifest.xml
android/sdremote/AndroidManifest.xml
+2
-9
image_loading.png
android/sdremote/res/drawable/image_loading.png
+0
-0
fragment_presentation.xml
android/sdremote/res/layout-land/fragment_presentation.xml
+4
-4
activity_startpresentation.xml
android/sdremote/res/layout/activity_startpresentation.xml
+23
-0
strings.xml
android/sdremote/res/values/strings.xml
+4
-1
PairingActivity.java
...te/src/org/libreoffice/impressremote/PairingActivity.java
+6
-13
PresentationActivity.java
...c/org/libreoffice/impressremote/PresentationActivity.java
+0
-0
PresentationFragment.java
...c/org/libreoffice/impressremote/PresentationFragment.java
+42
-17
SelectorActivity.java
...e/src/org/libreoffice/impressremote/SelectorActivity.java
+6
-0
StartPresentationActivity.java
.../libreoffice/impressremote/StartPresentationActivity.java
+91
-0
ThumbnailFragment.java
.../src/org/libreoffice/impressremote/ThumbnailFragment.java
+0
-0
Client.java
...c/org/libreoffice/impressremote/communication/Client.java
+10
-2
CommunicationService.java
...ice/impressremote/communication/CommunicationService.java
+12
-14
Receiver.java
...org/libreoffice/impressremote/communication/Receiver.java
+79
-103
SlideShow.java
...rg/libreoffice/impressremote/communication/SlideShow.java
+159
-149
TestClient.java
...g/libreoffice/impressremote/communication/TestClient.java
+0
-0
No files found.
android/sdremote/AndroidManifest.xml
Dosyayı görüntüle @
0357b778
...
...
@@ -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"
>
...
...
android/sdremote/res/drawable/image_loading.png
0 → 100644
Dosyayı görüntüle @
0357b778
287 Bytes
android/sdremote/res/layout-land/fragment_presentation.xml
Dosyayı görüntüle @
0357b778
...
...
@@ -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_par
ent"
android:layout_height=
"
wrap_cont
ent"
android:layout_width=
"
wrap_cont
ent"
android:layout_height=
"
match_par
ent"
android:layout_marginTop=
"5dip"
coverflow:imageHeight=
"150dip"
coverflow:imageWidth=
"180dip"
...
...
@@ -42,8 +42,8 @@
<ScrollView
android:id=
"@+id/presentation_scrollview"
android:layout_width=
"
match_par
ent"
android:layout_height=
"
wrap_cont
ent"
>
android:layout_width=
"
wrap_cont
ent"
android:layout_height=
"
match_par
ent"
>
<WebView
android:id=
"@+id/presentation_notes"
...
...
android/sdremote/res/layout/activity_startpresentation.xml
0 → 100644
Dosyayı görüntüle @
0357b778
<?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
android/sdremote/res/values/strings.xml
Dosyayı görüntüle @
0357b778
...
...
@@ -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>
\ No newline at end of file
android/sdremote/src/org/libreoffice/impressremote/PairingActivity.java
Dosyayı görüntüle @
0357b778
...
...
@@ -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
);
}
}
...
...
android/sdremote/src/org/libreoffice/impressremote/PresentationActivity.java
Dosyayı görüntüle @
0357b778
This diff is collapsed.
Click to expand it.
android/sdremote/src/org/libreoffice/impressremote/PresentationFragment.java
Dosyayı görüntüle @
0357b778
...
...
@@ -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
.
get
Context
();
mContext
=
getActivity
().
getApplication
Context
();
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
{
...
...
android/sdremote/src/org/libreoffice/impressremote/SelectorActivity.java
Dosyayı görüntüle @
0357b778
...
...
@@ -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
();
...
...
android/sdremote/src/org/libreoffice/impressremote/StartPresentationActivity.java
0 → 100644
Dosyayı görüntüle @
0357b778
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
);
}
}
};
}
android/sdremote/src/org/libreoffice/impressremote/ThumbnailFragment.java
Dosyayı görüntüle @
0357b778
This diff is collapsed.
Click to expand it.
android/sdremote/src/org/libreoffice/impressremote/communication/Client.java
Dosyayı görüntüle @
0357b778
...
...
@@ -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
""
;
}
}
/**
...
...
android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java
Dosyayı görüntüle @
0357b778
...
...
@@ -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: */
\ No newline at end of file
android/sdremote/src/org/libreoffice/impressremote/communication/Receiver.java
Dosyayı görüntüle @
0357b778
...
...
@@ -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
;
private
SlideShow
mSlideShow
=
new
SlideShow
();
public
SlideShow
getSlideShow
()
{
return
mSlideShow
;
}
public
void
setActivityMessenger
(
Messenger
aActivityMessenger
)
{
mActivityMessenger
=
aActivityMessenger
;
}
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
);
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
;
if
(
aInstruction
.
equals
(
"slide_updated"
))
{
int
aSlideNumber
=
Integer
.
parseInt
(
aCommand
.
get
(
1
));
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
);
// 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
);
}
// 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
();
}
}
}
}
public
Receiver
(
Context
aContext
)
{
mContext
=
aContext
;
mSlideShow
=
new
SlideShow
(
mContext
);
}
private
Context
mContext
;
private
SlideShow
mSlideShow
;
public
SlideShow
getSlideShow
()
{
return
mSlideShow
;
}
public
boolean
isSlideShowRunning
()
{
return
(
mSlideShow
.
getSize
()
>
0
);
}
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"
))
{
int
aSlideNumber
=
Integer
.
parseInt
(
aCommand
.
get
(
1
));
mSlideShow
.
setCurrentSlide
(
aSlideNumber
);
Intent
aIntent
=
new
Intent
(
CommunicationService
.
MSG_SLIDE_CHANGED
);
aIntent
.
putExtra
(
"slide_number"
,
aSlideNumber
);
LocalBroadcastManager
.
getInstance
(
mContext
).
sendBroadcast
(
aIntent
);
}
else
if
(
aInstruction
.
equals
(
"slide_preview"
))
{
int
aSlideNumber
=
Integer
.
parseInt
(
aCommand
.
get
(
1
));
String
aImageString
=
aCommand
.
get
(
2
);
byte
[]
aImage
=
Base64
.
decode
(
aImageString
,
Base64
.
DEFAULT
);
// Store image internally
mSlideShow
.
putImage
(
aSlideNumber
,
aImage
);
Intent
aIntent
=
new
Intent
(
CommunicationService
.
MSG_SLIDE_PREVIEW
);
aIntent
.
putExtra
(
"slide_number"
,
aSlideNumber
);
LocalBroadcastManager
.
getInstance
(
mContext
).
sendBroadcast
(
aIntent
);
}
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
);
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: */
\ No newline at end of file
android/sdremote/src/org/libreoffice/impressremote/communication/SlideShow.java
Dosyayı görüntüle @
0357b778
...
...
@@ -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
int
mSize
=
0
;
private
int
mCurrentSlide
=
0
;
protected
SlideShow
()
{
}
protected
void
setLength
(
int
aSize
)
{
mSize
=
aSize
;
}
public
int
getSize
()
{
return
mSize
;
}
public
int
getCurrentSlide
()
{
return
mCurrentSlide
;
}
protected
void
setCurrentSlide
(
int
aSlide
)
{
mCurrentSlide
=
aSlide
;
}
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
);
}
protected
void
putNotes
(
int
aSlide
,
String
aNotes
)
{
mNotes
.
put
(
aSlide
,
aNotes
);
}
public
String
getNotes
(
int
aSlide
)
{
return
mNotes
.
get
(
aSlide
);
}
// ---------------------------------------------------- TIMER --------------
private
Timer
mTimer
=
new
Timer
();
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
;
private
long
mCountdownTime
=
0
;
private
boolean
mIsRunning
=
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 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
boolean
isCountdown
()
{
return
mIsCountdown
;
}
public
boolean
isRunning
()
{
return
mIsRunning
;
}
/**
* Reset the timer, and stop it it was running.
*/
public
void
reset
()
{
mIsRunning
=
false
;
aTime
=
0
;
}
public
void
startTimer
()
{
if
(
mIsRunning
)
return
;
aTime
=
System
.
currentTimeMillis
()
-
aTime
;
mIsRunning
=
true
;
}
public
void
stopTimer
()
{
if
(!
mIsRunning
)
return
;
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
;
}
}
}
private
SparseArray
<
byte
[]>
mPreviewImages
=
new
SparseArray
<
byte
[]>();
private
SparseArray
<
String
>
mNotes
=
new
SparseArray
<
String
>();
private
int
mSize
=
0
;
private
int
mCurrentSlide
=
0
;
private
Context
mContext
;
protected
SlideShow
(
Context
aContext
)
{
mContext
=
aContext
;
}
protected
void
setLength
(
int
aSize
)
{
mSize
=
aSize
;
}
public
int
getSize
()
{
return
mSize
;
}
public
int
getCurrentSlide
()
{
return
mCurrentSlide
;
}
protected
void
setCurrentSlide
(
int
aSlide
)
{
mCurrentSlide
=
aSlide
;
}
protected
void
putImage
(
int
aSlide
,
byte
[]
aImage
)
{
mPreviewImages
.
put
(
aSlide
,
aImage
);
}
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
);
}
public
String
getNotes
(
int
aSlide
)
{
return
mNotes
.
get
(
aSlide
);
}
// ---------------------------------------------------- TIMER --------------
private
Timer
mTimer
=
new
Timer
();
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
;
private
long
mCountdownTime
=
0
;
private
boolean
mIsRunning
=
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 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
boolean
isCountdown
()
{
return
mIsCountdown
;
}
public
boolean
isRunning
()
{
return
mIsRunning
;
}
/**
* Reset the timer, and stop it it was running.
*/
public
void
reset
()
{
mIsRunning
=
false
;
aTime
=
0
;
}
public
void
startTimer
()
{
if
(
mIsRunning
)
return
;
aTime
=
System
.
currentTimeMillis
()
-
aTime
;
mIsRunning
=
true
;
}
public
void
stopTimer
()
{
if
(!
mIsRunning
)
return
;
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
;
}
}
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
\ No newline at end of file
android/sdremote/src/org/libreoffice/impressremote/communication/TestClient.java
Dosyayı görüntüle @
0357b778
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment