diff options
author | Andrzej J.R. Hunt <andrzej@ahunt.org> | 2012-08-13 21:39:12 +0200 |
---|---|---|
committer | Andrzej J.R. Hunt <andrzej@ahunt.org> | 2012-08-13 21:41:52 +0200 |
commit | 837a125ba6d31fb4cbc654e982884430464e8bba (patch) | |
tree | 2a7894d176dc79fee064460128316da4d28ba93a | |
parent | 4533d34d9acdd3779333334d1d560bf707267e04 (diff) |
Final fixes for pairing.
Change-Id: Ib66f227062f9c263dbc3dfefaf70525c73bdedc9
-rw-r--r-- | android/sdremote/AndroidManifest.xml | 9 | ||||
-rw-r--r-- | android/sdremote/src/org/libreoffice/impressremote/communication/CommunicationService.java | 67 | ||||
-rw-r--r-- | android/sdremote/src/org/libreoffice/impressremote/communication/NetworkClient.java | 11 | ||||
-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.cxx | 5 | ||||
-rw-r--r-- | sd/source/ui/dlg/RemoteDialogClientBox.cxx | 4 | ||||
-rw-r--r-- | sd/source/ui/remotecontrol/BufferedStreamSocket.cxx | 30 | ||||
-rw-r--r-- | sd/source/ui/remotecontrol/Server.cxx | 2 |
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 |