summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrzej J.R. Hunt <andrzej@ahunt.org>2012-08-13 21:39:12 +0200
committerAndrzej J.R. Hunt <andrzej@ahunt.org>2012-08-13 21:41:52 +0200
commit837a125ba6d31fb4cbc654e982884430464e8bba (patch)
tree2a7894d176dc79fee064460128316da4d28ba93a
parent4533d34d9acdd3779333334d1d560bf707267e04 (diff)
Final fixes for pairing.
Change-Id: Ib66f227062f9c263dbc3dfefaf70525c73bdedc9
-rw-r--r--android/sdremote/AndroidManifest.xml9
-rw-r--r--android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java67
-rw-r--r--android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java11
-rw-r--r--android/sdremote/src/org/libreoffice/impressremote/communication/TestClient.java (renamed from android/sdremote/src/org/libreoffice/impressremote/TestClient.java)9
-rw-r--r--sd/source/ui/dlg/RemoteDialog.cxx5
-rw-r--r--sd/source/ui/dlg/RemoteDialogClientBox.cxx4
-rw-r--r--sd/source/ui/remotecontrol/BufferedStreamSocket.cxx30
-rw-r--r--sd/source/ui/remotecontrol/Server.cxx2
8 files changed, 92 insertions, 45 deletions
diff --git a/android/sdremote/AndroidManifest.xml b/android/sdremote/AndroidManifest.xml
index 4364b24aad5a..10041933a41f 100644
--- a/android/sdremote/AndroidManifest.xml
+++ b/android/sdremote/AndroidManifest.xml
@@ -20,6 +20,15 @@
<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>
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java b/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java
index 56036841a867..73b6f3db3bf5 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java
@@ -33,32 +33,36 @@ public class CommunicationService extends Service implements Runnable {
@Override
public void run() {
- while (true) {
- // Condition
- try {
- wait();
- } catch (InterruptedException e) {
- // We don't care.
- }
- // Work
- synchronized (mConnectionVariableMutex) {
- if ((mStateDesired == State.CONNECTED && mState == State.CONNECTED)
- || (mStateDesired == State.DISCONNECTED && mState == State.CONNECTED)) {
- mClient.closeConnection();
- mState = State.DISCONNECTED;
+ synchronized (this) {
+ while (true) {
+ // Condition
+ try {
+
+ wait();
+ } catch (InterruptedException e) {
+ // We have finished
+ return;
}
- if (mStateDesired == State.CONNECTED) {
- switch (mServerDesired.getProtocol()) {
- case NETWORK:
- mClient = new NetworkClient(
- mServerDesired.getAddress(), this);
- mTransmitter = new Transmitter(mClient);
- mClient.setReceiver(mReceiver);
- break;
- case BLUETOOTH:
- break;
+ // Work
+ synchronized (mConnectionVariableMutex) {
+ if ((mStateDesired == State.CONNECTED && mState == State.CONNECTED)
+ || (mStateDesired == State.DISCONNECTED && mState == State.CONNECTED)) {
+ mClient.closeConnection();
+ mState = State.DISCONNECTED;
+ }
+ if (mStateDesired == State.CONNECTED) {
+ switch (mServerDesired.getProtocol()) {
+ case NETWORK:
+ mClient = new NetworkClient(
+ mServerDesired.getAddress(), this);
+ mTransmitter = new Transmitter(mClient);
+ mClient.setReceiver(mReceiver);
+ break;
+ case BLUETOOTH:
+ break;
+ }
+ mState = State.CONNECTED;
}
- mState = State.CONNECTED;
}
}
}
@@ -90,7 +94,10 @@ public class CommunicationService extends Service implements Runnable {
}
mServerDesired = aServer;
mStateDesired = State.CONNECTED;
- notify();
+ synchronized (this) {
+ notify();
+ }
+
}
// TODO: connect
}
@@ -98,7 +105,9 @@ public class CommunicationService extends Service implements Runnable {
public void disconnect() {
synchronized (mConnectionVariableMutex) {
mStateDesired = State.DISCONNECTED;
- notify();
+ synchronized (this) {
+ notify();
+ }
}
}
@@ -140,14 +149,20 @@ public class CommunicationService extends Service implements Runnable {
return mBinder;
}
+ private Thread mThread = null;
+
@Override
public void onCreate() {
// TODO Create a notification (if configured).
+ mThread = new Thread(this);
+ mThread.start();
}
@Override
public void onDestroy() {
// TODO Destroy the notification (as necessary).
+ mThread.interrupt();
+ mThread = null;
}
public Transmitter getTransmitter() {
diff --git a/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java b/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java
index f76e14e3c1e7..33b600b02b62 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java
@@ -50,8 +50,15 @@ public class NetworkClient extends Client {
CommunicationService.MSG_PAIRING_STARTED);
aIntent.putExtra("PIN", aPin);
LocalBroadcastManager.getInstance(mContext).sendBroadcast(aIntent);
+ // Send out
+ String aName = "Bob"; // TODO: get the proper name
+ sendCommand("LO_SERVER_CLIENT_PAIR\n" + aName + "\n" + aPin
+ + "\n\n");
+
// Wait until we get the appropriate string back...
+ System.out.println("SF:waiting");
String aTemp = mReader.readLine();
+ System.out.println("SF:waited");
if (!aTemp.equals("LO_SERVER_SERVER_PAIRED")) {
return;
} else {
@@ -60,9 +67,11 @@ public class NetworkClient extends Client {
LocalBroadcastManager.getInstance(mContext).sendBroadcast(
aIntent);
}
- while ((aTemp = mReader.readLine()).length() != 0) {
+ while (mReader.readLine().length() != 0) {
// Get rid of extra lines
+ System.out.println("SF: empty line");
}
+ System.out.println("SD: empty");
startListening();
} catch (UnknownHostException e) {
// TODO Tell the user we have a problem
diff --git a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java b/android/sdremote/src/org/libreoffice/impressremote/communication/TestClient.java
index 2bc6e907077f..662cb5016724 100644
--- a/android/sdremote/src/org/libreoffice/impressremote/TestClient.java
+++ b/android/sdremote/src/org/libreoffice/impressremote/communication/TestClient.java
@@ -6,9 +6,11 @@
* 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;
+package org.libreoffice.impressremote.communication;
-import org.libreoffice.impressremote.communication.CommunicationService;
+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;
@@ -84,7 +86,8 @@ public class TestClient extends Activity {
IBinder aService) {
mCommunicationService = ((CommunicationService.CBinder) aService)
.getService();
- // mCommunicationService.connectTo(Protocol.NETWORK, "192.168.0.18");
+ mCommunicationService.connectTo(new Server(Protocol.NETWORK,
+ "10.0.2.2", "TestServer", 0l));
mCommunicationService.setActivityMessenger(mMessenger);
enableButtons(true);
}
diff --git a/sd/source/ui/dlg/RemoteDialog.cxx b/sd/source/ui/dlg/RemoteDialog.cxx
index 0df0f7070547..d920d91c0527 100644
--- a/sd/source/ui/dlg/RemoteDialog.cxx
+++ b/sd/source/ui/dlg/RemoteDialog.cxx
@@ -50,9 +50,12 @@ IMPL_LINK_NOARG(RemoteDialog, HandleConnectButton)
if ( aSelected < 0 )
return 1;
TClientBoxEntry aEntry = mClientBox.GetEntryData(aSelected);
- OUString aPin = mClientBox.getPin();
+ OUString aPin ( mClientBox.getPin() );
if ( RemoteServer::connectClient( aEntry->m_pClientInfo, aPin ) )
+ {
+ Close();
return 0;
+ }
else
return 1;
}
diff --git a/sd/source/ui/dlg/RemoteDialogClientBox.cxx b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
index 11128f364da8..8ce809e7d356 100644
--- a/sd/source/ui/dlg/RemoteDialogClientBox.cxx
+++ b/sd/source/ui/dlg/RemoteDialogClientBox.cxx
@@ -97,6 +97,8 @@ ClientBox::ClientBox( Dialog* pParent, RemoteServer *pServer,
m_pScrollBar->SetScrollHdl( LINK( this, ClientBox, ScrollHdl ) );
m_pScrollBar->EnableDrag();
+ m_aPinBox.SetUseThousandSep(false);
+
SetPaintTransparent( true );
SetPosPixel( Point( RSC_SP_DLG_INNERBORDER_LEFT, RSC_SP_DLG_INNERBORDER_TOP ) );
long nIconHeight = 2*TOP_OFFSET + SMALL_ICON_SIZE;
@@ -582,7 +584,7 @@ long ClientBox::PointToPos( const Point& rPos )
OUString ClientBox::getPin()
{
- return m_aPinBox.GetText();
+ return OUString::valueOf( m_aPinBox.GetValue() );
}
//------------------------------------------------------------------------------
diff --git a/sd/source/ui/remotecontrol/BufferedStreamSocket.cxx b/sd/source/ui/remotecontrol/BufferedStreamSocket.cxx
index 8232bd085a06..0e274c30295a 100644
--- a/sd/source/ui/remotecontrol/BufferedStreamSocket.cxx
+++ b/sd/source/ui/remotecontrol/BufferedStreamSocket.cxx
@@ -27,8 +27,25 @@ sal_Int32 BufferedStreamSocket::readLine( OString& aLine )
{
while ( true )
{
+ // Process buffer first incase data already present.
+ vector<char>::iterator aIt;
+ if ( (aIt = find( aBuffer.begin(), aBuffer.end(), '\n' ))
+ != aBuffer.end() )
+ {
+ sal_uInt64 aLocation = aIt - aBuffer.begin();
+
+ aLine = OString( &(*aBuffer.begin()), aLocation );
+
+ aBuffer.erase( aBuffer.begin(), aIt + 1 ); // Also delete the empty line
+ aRead -= (aLocation + 1);
+
+ return aLine.getLength();
+ }
+
+ // Then try and receive if nothing present
aBuffer.resize( aRead + 100 );
aRet = recv( &aBuffer[aRead], 100 );
+
if ( aRet == 0 )
{
return aRet;
@@ -40,19 +57,6 @@ sal_Int32 BufferedStreamSocket::readLine( OString& aLine )
return 0;
}
aRead += aRet;
- vector<char>::iterator aIt;
- while ( (aIt = find( aBuffer.begin(), aBuffer.end(), '\n' ))
- != aBuffer.end() )
- {
- sal_uInt64 aLocation = aIt - aBuffer.begin();
-
- aLine = OString( &(*aBuffer.begin()), aLocation );
-
- aBuffer.erase( aBuffer.begin(), aIt + 1 ); // Also delete the empty line
- aRead -= (aLocation + 1);
-
- return aLine.getLength();
- }
}
diff --git a/sd/source/ui/remotecontrol/Server.cxx b/sd/source/ui/remotecontrol/Server.cxx
index af4170aed6dd..e7a361e59e51 100644
--- a/sd/source/ui/remotecontrol/Server.cxx
+++ b/sd/source/ui/remotecontrol/Server.cxx
@@ -82,6 +82,7 @@ void RemoteServer::execute()
if ( ! pSocket->readLine( aLine ) ) delete pSocket;
OString aPin( aLine );
+ fprintf( stderr, "Pin:%s\n", aPin.getStr() );
SocketAddr aClientAddr;
pSocket->getPeerAddr( aClientAddr );
@@ -191,6 +192,7 @@ sal_Bool RemoteServer::connectClient( ClientInfo* pClient, rtl::OUString aPin )
break;
}
}
+ pCommunicator->launch();
return true;
}
else