Browse Source

-wifi direct:
*improve
Failure handling

*fix
connection (timeout)
disconnection (if unreachable)
destroy (if still connected to no device)

Julien Clauter 9 years ago
parent
commit
9aea8d8886

+ 24 - 0
src/de/tudarmstadt/informatik/hostage/sync/wifi_direct/TimerTask.java

@@ -0,0 +1,24 @@
+package de.tudarmstadt.informatik.hostage.sync.wifi_direct;
+
+/**
+ * Created by Julien on 18.02.2015.
+ */
+public class TimerTask extends BackgroundTask {
+
+    private int seconds;
+
+    public TimerTask(int seconds, BackgroundTaskCompletionListener l){
+        super(l);
+        this.seconds = seconds;
+    }
+
+    public boolean performInBackground(){
+        try {
+            Thread.sleep(this.seconds * 1000);
+        } catch (InterruptedException e){
+            // what ever
+            return false;
+        }
+        return true;
+    }
+}

+ 59 - 6
src/de/tudarmstadt/informatik/hostage/sync/wifi_direct/WiFiP2pBroadcastReceiver.java

@@ -38,6 +38,12 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
     private WifiP2pManager manager;
     private WifiP2pManager.Channel channel;
 
+    private boolean isConnecting;
+
+    public WifiP2pDevice getOwnDevice() {
+        return ownDevice;
+    }
+
     private WifiP2pDevice ownDevice;
 
     private android.net.NetworkInfo.DetailedState networkState = null;
@@ -85,7 +91,7 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
         } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
             // THE DEVICE LIST CHANGED
             // REQUEST THE LIST OF DEVICES
-            Log.d("WiFiP2pBroadcastReceiver", "P2P peers changed.");
+            Log.d("DEBUG_WiFiP2pBroadcastReceiver", "P2P peers changed.");
             if (manager != null) {
                 manager.requestPeers(channel, this);
             }
@@ -115,7 +121,7 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
                 }
             }
             if (this.networkState != networkInfo.getDetailedState()){
-                Log.d("WiFiP2pBroadcastReceiver", "P2P device network state changed to " + this.getDeviceNetworkStatus(networkInfo.getDetailedState()) + ".");
+                Log.d("DEBUG_WiFiP2pBroadcastReceiver", "P2P device network state changed to " + this.getDeviceNetworkStatus(networkInfo.getDetailedState()) + ".");
             }
             this.networkState = networkInfo.getDetailedState();
         } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
@@ -142,6 +148,7 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
         // socket.
 
         if (info.groupFormed){
+            isConnecting = false;
             this.eventListener.didConnect(info.isGroupOwner, info);
         }
     }
@@ -155,7 +162,7 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
         peers.addAll(peerList.getDeviceList());
 
         if (peers.size() == 0) {
-            Log.d("WiFiP2pBroadcastReceiver", "No devices found");
+            Log.d("DEBUG_WiFiP2pBroadcastReceiver", "No devices found");
         }
 
         this.eventListener.discoveredDevices(peers);
@@ -171,6 +178,7 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
             WifiP2pConfig config = new WifiP2pConfig();
             config.deviceAddress = device.deviceAddress;
             config.wps.setup = WpsInfo.PBC;
+            isConnecting = true;
             manager.connect(channel, config, new WifiP2pManager.ActionListener() {
                 private WiFiP2pBroadcastListener eventListener;
                 @Override
@@ -181,6 +189,7 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
 
                 @Override
                 public void onFailure(int reason) {
+                    isConnecting = false;
                     this.eventListener.failedToConnect();
                 }
 
@@ -189,6 +198,27 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
                     return this;
                 }
             }.init(this.eventListener));
+
+            TimerTask abort_task = new TimerTask(20, new BackgroundTask.BackgroundTaskCompletionListener() {
+                private WiFiP2pBroadcastReceiver receiver;
+                @Override
+                public void didSucceed() {
+                    if (this.receiver.getOwnDevice().status != WifiP2pDevice.CONNECTED && isConnecting){
+                        this.receiver.disconnect();
+                        Log.d("DEBUG_WiFiP2pBroadcastReceiver", "Cancel connection process.");
+                        isConnecting = false;
+                    }
+                }
+                @Override
+                public void didFail() {
+                    // do nothing here
+                }
+                public BackgroundTask.BackgroundTaskCompletionListener init(WiFiP2pBroadcastReceiver receiver){
+                    this.receiver = receiver;
+                    return this;
+                }
+            }.init(this));
+            abort_task.execute();
         }
     }
 
@@ -196,18 +226,20 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
      * Disconnects from the connected wifi direct group if the own device is still connected.
      */
     public void disconnect() {
-        if (isConnected){
+        if (isConnected||this.getOwnDevice().status == WifiP2pDevice.CONNECTED){
             manager.removeGroup(channel, new WifiP2pManager.ActionListener() {
                 private WiFiP2pBroadcastListener eventListener;
 
                 @Override
                 public void onFailure(int reasonCode) {
+                    isConnecting = false;
                     this.eventListener.failedToDisconnect();
                 }
 
                 @Override
                 public void onSuccess() {
                     isConnected = false;
+                    isConnecting = false;
                     this.eventListener.didDisconnect();
                 }
 
@@ -216,6 +248,27 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
                     return this;
                 }
             }.init(this.eventListener));
+        }else {
+            if (isConnecting){
+                manager.cancelConnect(channel, new WifiP2pManager.ActionListener() {
+                    private WiFiP2pBroadcastListener eventListener;
+                    @Override
+                    public void onSuccess() {
+                        this.eventListener.failedToConnect();
+                        isConnecting = false;
+                    }
+
+                    @Override
+                    public void onFailure(int i) {
+                        this.eventListener.failedToConnect();
+                        isConnecting = false;
+                    }
+                    public WifiP2pManager.ActionListener init(WiFiP2pBroadcastListener listener){
+                        this.eventListener = listener;
+                        return this;
+                    }
+                }.init(this.eventListener));
+            }
         }
     }
 
@@ -227,11 +280,11 @@ public class WiFiP2pBroadcastReceiver extends BroadcastReceiver implements WifiP
         manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
             @Override
             public void onSuccess() {
-                Log.d("WiFiP2pBroadcastReceiver", " Discovering Peers initiated.");
+                Log.d("DEBUG_WiFiP2pBroadcastReceiver", " Discovering Peers initiated.");
             }
             @Override
             public void onFailure(int reasonCode) {
-                Log.d("WiFiP2pBroadcastReceiver", " Discovering Peers failed. c="+reasonCode);
+                Log.d("DEBUG_WiFiP2pBroadcastReceiver", " Discovering Peers failed. c="+reasonCode);
             }
         });
     }

+ 8 - 8
src/de/tudarmstadt/informatik/hostage/sync/wifi_direct/WiFiP2pClientTask.java

@@ -62,7 +62,7 @@ public abstract class WiFiP2pClientTask extends BackgroundTask {
             try {
                 this.socket.close();
             } catch (IOException e) {
-                Log.e("WiFiP2pClientTask", e.getMessage());
+                Log.e("DEBUG_WiFiP2pClientTask", e.getMessage());
             }
         }
     }
@@ -75,19 +75,19 @@ public abstract class WiFiP2pClientTask extends BackgroundTask {
             this.socket = new Socket();
 
             try {
-                Log.d("WiFiP2pClientTask", "Opening client socket - ");
+                Log.d("DEBUG_WiFiP2pClientTask", "Opening client socket - ");
                 socket.bind(null);
                 socket.connect((new InetSocketAddress(hostIP, port())), time_out());
 
-                Log.d("WiFiP2pClientTask", "Client socket - " + socket.isConnected());
+                Log.d("DEBUG_WiFiP2pClientTask", "Client socket - " + socket.isConnected());
                 this.handleConnection(socket);
 
-                Log.d("WiFiP2pClientTask", "Client: Data written");
+                Log.d("DEBUG_WiFiP2pClientTask", "Client: Data written");
             } catch (ClassNotFoundException e){
-                Log.e("WiFiP2pClientTask", e.getMessage());
+                Log.e("DEBUG_WiFiP2pClientTask", e.getMessage());
                 return false;
             } catch (IOException e) {
-                Log.e("WiFiP2pClientTask", e.getMessage());
+                Log.e("DEBUG_WiFiP2pClientTask", e.getMessage());
 
                 if(this.isInterrupted()) {
                     this.interrupt(true);
@@ -96,7 +96,7 @@ public abstract class WiFiP2pClientTask extends BackgroundTask {
 
                 long seconds_to_wait = (long) Math.min(60, Math.pow(2, 1));
                 tryNum++;
-                Log.i("WiFiP2pClientTask", "could not connect to server. Will try again in " + seconds_to_wait + "s");
+                Log.i("DEBUG_WiFiP2pClientTask", "could not connect to server. Will try again in " + seconds_to_wait + "s");
                 try {
                     Thread.sleep(seconds_to_wait * time_out());
                 } catch (InterruptedException ie){
@@ -110,7 +110,7 @@ public abstract class WiFiP2pClientTask extends BackgroundTask {
                         } catch (IOException e) {
                             // Give up
                             e.printStackTrace();
-                            Log.d("WiFiP2p_Error"," Failed to close socket - "+ e.getLocalizedMessage());
+                            Log.d("DEBUG_WiFiP2p_Error"," Failed to close socket - "+ e.getLocalizedMessage());
                             return false;
                         }
                     }

+ 2 - 1
src/de/tudarmstadt/informatik/hostage/sync/wifi_direct/WiFiP2pEventHandler.java

@@ -89,8 +89,9 @@ public class WiFiP2pEventHandler implements WifiP2pManager.ChannelListener {
      * @param device
      */
     public void connect(WifiP2pDevice device){
-        if (this.receiver != null && device != null)
+        if (this.receiver != null && device != null) {
             this.receiver.connect(device);
+        }
     }
 
     /**

+ 5 - 5
src/de/tudarmstadt/informatik/hostage/sync/wifi_direct/WiFiP2pServerTask.java

@@ -40,7 +40,7 @@ public abstract class WiFiP2pServerTask extends BackgroundTask {
             try {
                 this.serverSocket.close();
             } catch (IOException e) {
-                Log.e("WiFiP2pServerTask", e.getMessage());
+                Log.e("DEBUG_WiFiP2pServerTask", e.getMessage());
             }
         }
     }
@@ -55,9 +55,9 @@ public abstract class WiFiP2pServerTask extends BackgroundTask {
         while (!this.isInterrupted()){
             try {
                 this.serverSocket = new ServerSocket(WiFiP2pClientTask.port());
-                Log.d("WiFiP2pServerTask", "Server: Socket opened");
+                Log.d("DEBUG_WiFiP2pServerTask", "Server: Socket opened");
                 Socket client = this.serverSocket.accept();
-                Log.d("WiFiP2pServerTask", "Server: connection done");
+                Log.d("DEBUG_WiFiP2pServerTask", "Server: connection done");
 
                 this.handleConnection(client, this.serverSocket);
 
@@ -67,11 +67,11 @@ public abstract class WiFiP2pServerTask extends BackgroundTask {
                 return true;
             } catch (ClassNotFoundException e){
                 e.printStackTrace();
-                Log.e("WiFiP2pServerTask", e.getMessage());
+                Log.e("DEBUG_WiFiP2pServerTask", e.getMessage());
                 return false;
             } catch (IOException  e) {
                 e.printStackTrace();
-                Log.e("WiFiP2pServerTask", e.getMessage());
+                Log.e("DEBUG_WiFiP2pServerTask", e.getMessage());
                 return false;
             }
         }

+ 4 - 4
src/de/tudarmstadt/informatik/hostage/sync/wifi_direct/sync_tasks/SyncClientTask.java

@@ -32,7 +32,7 @@ public class SyncClientTask extends WiFiP2pClientTask {
     public WiFiP2pSerializableObject handleReceivedObject(WiFiP2pSerializableObject receivedObj) {
 
         if (receivedObj == null) {
-            Log.i("WiFiP2p_Client", "Starting sync process: " + SyncHostTask.SYNC_INFO_REQUEST);
+            Log.i("DEBUG_WiFiP2p_Client", "Starting sync process: " + SyncHostTask.SYNC_INFO_REQUEST);
             SyncInfo thisSyncInfo = synchronizer.getSyncInfo();
             WiFiP2pSerializableObject syncObj = new WiFiP2pSerializableObject();
 
@@ -42,12 +42,12 @@ public class SyncClientTask extends WiFiP2pClientTask {
             return syncObj;
 
         } else {
-            Log.i("WiFiP2p_Client", "Received: " + receivedObj.getRequestIdentifier());
+            Log.i("DEBUG_WiFiP2p_Client", "Received: " + receivedObj.getRequestIdentifier());
             if (receivedObj.getRequestIdentifier().equals(SyncHostTask.SYNC_INFO_RESPONSE)) {
                 SyncInfo sinfo = (SyncInfo) receivedObj.getObjectToSend();
 
                 if (sinfo != null && (sinfo instanceof SyncInfo)) {
-                    Log.i("WiFiP2p_Client", "Sending Data: " + SyncHostTask.SYNC_DATA_REQUEST);
+                    Log.i("DEBUG_WiFiP2p_Client", "Sending Data: " + SyncHostTask.SYNC_DATA_REQUEST);
                     SyncData syncData = synchronizer.getSyncData(sinfo);
                     WiFiP2pSerializableObject syncObj = new WiFiP2pSerializableObject();
 
@@ -58,7 +58,7 @@ public class SyncClientTask extends WiFiP2pClientTask {
                 }
 
             } else if (receivedObj.getRequestIdentifier().equals(SyncHostTask.SYNC_DATA_RESPONSE)) {
-                Log.i("WiFiP2p_Client", "Received Sync Data - ending sync process successfully." );
+                Log.i("DEBUG_WiFiP2p_Client", "Received Sync Data - ending sync process successfully." );
                 SyncData sdata = (SyncData) receivedObj.getObjectToSend();
 
                 if (sdata != null && (sdata instanceof SyncData)) {

+ 4 - 4
src/de/tudarmstadt/informatik/hostage/sync/wifi_direct/sync_tasks/SyncHostTask.java

@@ -45,10 +45,10 @@ public class SyncHostTask extends WiFiP2pServerTask {
     @Override
     public WiFiP2pSerializableObject handleReceivedObject(WiFiP2pSerializableObject receivedObj){
         if (receivedObj != null) {
-            Log.i("WiFiP2p_Host", "Received: " + receivedObj.getRequestIdentifier());
+            Log.i("DEBUG_WiFiP2p_Host", "Received: " + receivedObj.getRequestIdentifier());
 
             if (receivedObj.getRequestIdentifier().equals(SYNC_INFO_REQUEST)){
-                Log.i("WiFiP2p_Host", "Sending Sync Info: " + SYNC_INFO_RESPONSE);
+                Log.i("DEBUG_WiFiP2p_Host", "Sending Sync Info: " + SYNC_INFO_RESPONSE);
 
                 SyncInfo syncInfo = (SyncInfo) receivedObj.getObjectToSend();
                 this.receivedInfoPerDevice.put(receivedObj.getActingDevice_IP_address(), syncInfo);
@@ -63,7 +63,7 @@ public class SyncHostTask extends WiFiP2pServerTask {
             }
 
             if (receivedObj.getRequestIdentifier().equals(SYNC_DATA_REQUEST)){
-                Log.i("WiFiP2p_Host", "Sending Sync Data: " + SYNC_DATA_RESPONSE);
+                Log.i("DEBUG_WiFiP2p_Host", "Sending Sync Data: " + SYNC_DATA_RESPONSE);
 
                 SyncData sdata = (SyncData) receivedObj.getObjectToSend();
 
@@ -84,7 +84,7 @@ public class SyncHostTask extends WiFiP2pServerTask {
             }
         }
 
-        Log.i("WiFiP2p_Host", "Stop Sync Process - Performing a disconnect.");
+        Log.i("DEBUG_WiFiP2p_Host", "Stop Sync Process - Performing a disconnect.");
         // DISCONNECT
         this.interrupt(true);
         return null;

+ 55 - 26
src/de/tudarmstadt/informatik/hostage/sync/wifi_direct/ui/WiFiP2pSyncActivity.java

@@ -8,6 +8,7 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.net.wifi.p2p.WifiP2pDevice;
 import android.net.wifi.p2p.WifiP2pInfo;
+import android.os.AsyncTask;
 import android.os.Bundle;
 import android.provider.Settings;
 import android.util.Log;
@@ -128,6 +129,7 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
         if (this.clientTask != null) this.clientTask.interrupt(true);
         if (this.hostTask != null) this.hostTask.interrupt(true);
 
+        this.wifiEventHandler().disconnect();
         this.wifiEventHandler().stopService();
         super.onPause();
     }
@@ -173,20 +175,20 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
 
                 @Override
                 public void discoveredDevices(List<WifiP2pDevice> peers) {
-                    Log.d("WiFiP2pSyncActivity", "Actualise devices list");
+                    Log.d("DEBUG_WiFiP2pSyncActivity", "Actualise devices list");
                     this.activity.updateDeviceListView(peers);
                 }
 
                 @Override
                 public void wifiP2pIsEnabled(boolean enabled) {
                     String tmp = enabled? "enabled" : "disabled";
-                    Log.d("WiFiP2pSyncActivity", "Peer to peer is " + tmp + ".");
+                    Log.d("DEBUG_WiFiP2pSyncActivity", "Peer to peer is " + tmp + ".");
                     this.activity.setWifiDirectAvailable(enabled);
                 }
 
                 @Override
                 public void didConnect(boolean isHost, WifiP2pInfo connectionInfo) {
-                    Log.d("WiFiP2pSyncActivity", "Did connect");
+                    Log.d("DEBUG_WiFiP2pSyncActivity", "Did connect");
 
                     String progressTitle = PROGRESS_TITLE_LOADING;
                     if (this.activity.progressDialog != null){
@@ -197,41 +199,46 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
 
                     this.activity.setHost(isHost);
                     if (isHost){
-                        Log.d("WiFiP2pSyncActivity", "Connected as HOST");
+                        Log.d("DEBUG_WiFiP2pSyncActivity", "Connected as HOST");
                         this.activity.startHost();
                     } else {
-                        Log.d("WiFiP2pSyncActivity", "Connected as Client");
+                        Log.d("DEBUG_WiFiP2pSyncActivity", "Connected as Client");
                         this.activity.startClient(connectionInfo);
                     }
                 }
 
                 @Override
                 public void failedToConnect() {
-                    Log.d("WiFiP2pSyncActivity", "Failed to connect");
+                    Log.d("DEBUG_WiFiP2pSyncActivity", "Failed to connect");
                     Toast.makeText(this.activity, COULD_NOT_CONNECT_MESSAGE , Toast.LENGTH_LONG).show();
-                    this.activity.progressDialog.dismiss();
+                    if (this.activity.progressDialog != null){
+                        this.activity.progressDialog.dismiss();
+                    }
                 }
 
                 @Override
                 public void didDisconnect() {
-                    Log.d("WiFiP2pSyncActivity", "Did disconnect");
-                    this.activity.progressDialog.dismiss();
+                    Log.d("DEBUG_WiFiP2pSyncActivity", "Did disconnect");
+                    if (this.activity.progressDialog != null){
+                        this.activity.progressDialog.dismiss();
+                    }
                 }
 
                 @Override
                 public void failedToDisconnect() {
-                    Log.d("WiFiP2pSyncActivity", "Failed to disconnect");
+                    Log.d("DEBUG_WiFiP2pSyncActivity", "Failed to disconnect");
                     //Toast.makeText(this.activity, "Could not disconnect with device. Retry.", Toast.LENGTH_LONG).show();
                     // Other device did disconnect a while before.
-                    this.activity.progressDialog.dismiss();
+                    if (this.activity.progressDialog != null){
+                        this.activity.progressDialog.dismiss();
+                    }
                 }
 
                 @Override
                 public void ownDeviceInformationIsUpdated(WifiP2pDevice device) {
-                    Log.d("WiFiP2pSyncActivity", "Updated device " + device.deviceName + " " + device.deviceAddress + ".");
+                    Log.d("DEBUG_WiFiP2pSyncActivity", "Updated device " + device.deviceName + " " + device.deviceAddress + ".");
                     this.activity.updateOwnDeviceInformation(device);
                     this.activity.searchForDevices();
-
                 }
 
                 @Override
@@ -275,8 +282,10 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
                 public void didSucceed() {
                     Toast.makeText(this.activity, SYNCHRONIZATION_COMPLETE_MESSAGE , Toast.LENGTH_SHORT).show();
                     this.activity.wifiEventHandler().disconnect();
-                    this.activity.hostTask.setInterrupted(true);
-                    this.activity.hostTask = null;
+                    if (this.activity.hostTask != null){
+                        this.activity.hostTask.setInterrupted(true);
+                        this.activity.hostTask = null;
+                    }
                     //this.activity.clientTask = null;
                 }
 
@@ -284,8 +293,10 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
                 public void didFail() {
                     Toast.makeText(this.activity, SYNCHRONIZATION_FAILED_MESSAGE, Toast.LENGTH_LONG).show();
                     this.activity.wifiEventHandler().disconnect();
-                    this.activity.hostTask.setInterrupted(true);
-                    this.activity.hostTask = null;
+                    if (this.activity.hostTask != null){
+                        this.activity.hostTask.setInterrupted(true);
+                        this.activity.hostTask = null;
+                    }
                     //this.activity.clientTask = null;
                 }
             }.init(this);
@@ -324,7 +335,7 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
                 return this;
             }
         }.init(this.mLstP2PDevices));
-        Log.d("WiFiP2pSyncActivity", " Discovered "+peers.size()+" devices.");
+        Log.d("DEBUG_WiFiP2pSyncActivity", " Discovered "+peers.size()+" devices.");
 
         if (peers.size() == 0){
             this.searchForDevices();
@@ -336,15 +347,16 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
      */
     private void startHost()
     {
-        if (this.hostTask == null || this.hostTask.isInterrupted()){
-            Log.d("WiFiP2pSyncActivity", "Starting HOST Task");
+
+        //if (this.hostTask == null || this.hostTask.isInterrupted()){
+            Log.d("DEBUG_WiFiP2pSyncActivity", "Starting HOST Task");
             //Toast.makeText(this, PERFORMING_TASK_AS_HOST , Toast.LENGTH_SHORT).show();
             this.hostTask = new SyncHostTask(this.ownDevice, this.syncCompletionListener(), getApplicationContext());
             this.executingTask = this.hostTask;
             this.hostTask.execute();
-        } else {
-            Log.d("WiFiP2pSyncActivity", "Preventing third device for any syncing.");
-        }
+        //} else {
+        //    Log.d("DEBUG_WiFiP2pSyncActivity", "Preventing third device for any syncing.");
+        //}
     }
 
     /**
@@ -353,7 +365,7 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
      */
     private void startClient(WifiP2pInfo info)
     {
-           Log.d("WiFiP2pSyncActivity", "Starting CLIENT Task");
+           Log.d("DEBUG_WiFiP2pSyncActivity", "Starting CLIENT Task");
            this.clientTask = new SyncClientTask( info.groupOwnerAddress.getHostAddress(),this.ownDevice, this.syncCompletionListener(), getApplicationContext() );
            this.executingTask = this.clientTask;
            this.clientTask.execute();
@@ -367,12 +379,27 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
         String connectionTitle = PROGRESS_TITLE_CONNECTING;
         if (device != null){
             if (progressDialog == null){
-                this.progressDialog = ProgressDialog.show(this, "", connectionTitle);
+                this.progressDialog = ProgressDialog.show(this, "", PROGRESS_TITLE_CONNECTING);
             } else {
-                progressDialog.setTitle(connectionTitle);
+                this.progressDialog.setTitle(PROGRESS_TITLE_CONNECTING);
             }
+            new Thread()
+            {
+                public void run()
+                {
+                    try
+                    {
+                        sleep(20);
+                    }
+                    catch (Exception e)
+                    {
+                    }
+                    progressDialog.setTitle(PROGRESS_TITLE_CONNECTING);
+                }
+            }.start();
             mOtherDevice = device;
             this.wifiEventHandler().connect(device);
+
         }
     }
 
@@ -498,6 +525,8 @@ public class WiFiP2pSyncActivity extends Activity implements AdapterView.OnItemC
     }
 
 
+
+
     /**
      * Array adapter for ListFragment that maintains WifiP2pDevice list.
      */