Browse Source

Quick Fix for Synchronization

Lars Pandikow 10 years ago
parent
commit
62721d6d6b

+ 8 - 4
AndroidManifest.xml

@@ -15,6 +15,9 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.BLUETOOTH" />
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
+    <uses-permission android:name="android.permission.NFC" />
     <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
 
     <uses-feature
@@ -42,7 +45,7 @@
             android:configChanges="keyboardHidden|orientation|screenSize"
             android:label="@string/app_name"
             android:screenOrientation="portrait" >
-            <intent-filter>
+           	<intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
                 <category android:name="android.intent.category.LAUNCHER" />
@@ -52,6 +55,7 @@
             android:name="de.tudarmstadt.informatik.hostage.ui.MainActivity"
             android:configChanges="keyboardHidden|orientation|screenSize"
             android:label="@string/app_name" >
+
         </activity>
         <activity
             android:name="de.tudarmstadt.informatik.hostage.ui.ViewLog"
@@ -78,17 +82,17 @@
             android:label="@string/gui_playground" >
         </activity>
         <activity
-            android:name="de.tudarmstadt.informatik.hostage.sync.TracingSync"
+            android:name="de.tudarmstadt.informatik.hostage.sync.tracing.TracingSync"
             android:label="@string/gui_tracing"
             android:theme="@android:style/Theme.Dialog" >
         </activity>
         <activity
-            android:name="de.tudarmstadt.informatik.hostage.sync.BluetoothSync"
+            android:name="de.tudarmstadt.informatik.hostage.sync.bluetooth.BluetoothSync"
             android:label="@string/gui_bluetooth"
             android:theme="@android:style/Theme.Dialog" >
         </activity>
         <activity
-            android:name="de.tudarmstadt.informatik.hostage.sync.NFCSync"
+            android:name="de.tudarmstadt.informatik.hostage.sync.nfc.NFCSync"
             android:label="@string/gui_nfc"
             android:theme="@android:style/Theme.Dialog" >
             <intent-filter>

+ 1 - 1
project.properties

@@ -15,4 +15,4 @@ target=android-19
 android.library=false
 
 
-android.library.reference.1=../../development/Android/HosTaGe/google-play-services_lib
+android.library.reference.1=../google-play-services_lib

+ 1 - 1
src/de/tudarmstadt/informatik/hostage/Handler.java

@@ -107,7 +107,7 @@ public class Handler implements Runnable {
 		} catch (Exception e) {
 			
 		} 
-		
+		//TODO kann ConcurrentModificationException auslösen, da über collection iteriert wird während elemente entfernt werden
 		listener.refreshHandlers();
 	}
 

+ 1 - 0
src/de/tudarmstadt/informatik/hostage/Listener.java

@@ -121,6 +121,7 @@ public class Listener implements Runnable {
 			addHandler();
 		}
 		for (Handler handler : handlers) {
+			//TODO kann ConcurrentModificationException auslösen, da über collection iteriert wird während elemente entfernt werden
 			handler.kill();
 		}
 	}

+ 18 - 11
src/de/tudarmstadt/informatik/hostage/sync/bluetooth/BluetoothSync.java

@@ -29,10 +29,11 @@ import de.tudarmstadt.informatik.hostage.sync.SyncMessage;
 
 public class BluetoothSync extends Activity{	
 	
-    public static final int CONNECTION_ESTABLISHED = 0x0;
-    public static final int CONNECTION_FAILED = 0x1;
-    public static final int SYNC_SUCCESSFUL = 0x2;
-    public static final int SYNC_FAILED = 0x3;
+	public static final int CONNECTING = 0x0;
+    public static final int CONNECTION_ESTABLISHED = 0x1;
+    public static final int CONNECTION_FAILED = 0x2;
+    public static final int SYNC_SUCCESSFUL = 0x3;
+    public static final int SYNC_FAILED = 0x4;
     
     public static UUID serviceUUID;
 	
@@ -111,14 +112,10 @@ public class BluetoothSync extends Activity{
 	}
 		
 
-	private void manageConnectedSocket(BluetoothSocket socket) {
+	protected void manageConnectedSocket(BluetoothSocket socket) {
 		mBluetoothAdapter.cancelDiscovery();
 		unregisterBroadcastReceiver();
 		
-		layout.removeView(listView);
-		String deviceName = socket.getRemoteDevice().getName();
-		mInfoText.setText("Synchronizing with " + deviceName + "...");	
-		
 		HostageDBOpenHelper dbh = new HostageDBOpenHelper(this);
 		commThread = new CommunicationThread(this, socket, mHandler);
 		commThread.start();
@@ -180,6 +177,8 @@ public class BluetoothSync extends Activity{
 			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 				String deviceInfo = arrayAdapter.getItem(position);
 				String mac = deviceInfo.substring(deviceInfo.indexOf("\n") + 1);
+				String name = deviceInfo.substring(0, deviceInfo.indexOf("\n"));
+				mHandler.obtainMessage(CONNECTING, name).sendToTarget();
 				clientThread = new ClientThread(mBluetoothAdapter.getRemoteDevice(mac), mHandler);
 				clientThread.start();
 			}
@@ -191,11 +190,19 @@ public class BluetoothSync extends Activity{
         @Override
         public void handleMessage(Message msg) {
         	switch(msg.what){
+        		case CONNECTING:       
+        			layout.removeView(listView);
+        			mInfoText.setText("Connecting to " + (String)msg.obj + "!");
+        			break;
         		case CONNECTION_ESTABLISHED: 
-        			manageConnectedSocket((BluetoothSocket) msg.obj);
+        			BluetoothSocket socket = (BluetoothSocket) msg.obj;
+        			layout.removeView(listView);
+        			String deviceName = socket.getRemoteDevice().getName();
+        			mInfoText.setText("Synchronizing with " + deviceName + "...");	
+        			manageConnectedSocket(socket);
         			break;
         		case CONNECTION_FAILED: 
-        			mInfoText.setText("Synchronization failed!");
+        			mInfoText.setText("Failed to connect to device!");
         			break;
         		case SYNC_SUCCESSFUL: 
         			mInfoText.setText("Synchronization successfull!");

+ 3 - 2
src/de/tudarmstadt/informatik/hostage/sync/bluetooth/CommunicationThread.java

@@ -98,11 +98,12 @@ public class CommunicationThread extends Thread {
 				if(devices_local.containsKey("TRACING"))
 					tracing_timestamp = devices_local.get("TRACING");				
 					
-				for(String key : devices_remote.keySet()){
+				for(Iterator<String> i = devices_remote.keySet().iterator(); i.hasNext(); ){
+					String key = i.next();
 					if((devices_local.containsKey(key) && devices_local.get(key) >= devices_remote.get(key)) 
 					    || (tracing_timestamp > devices_remote.get(key))){
 						Log.i("CommunicationThread", "Removed: " + key);
-						devices_remote.remove(key);
+						i.remove();
 					}
 				}
 				mdbh.updateSyncDevices(devices_remote);

+ 3 - 1
src/de/tudarmstadt/informatik/hostage/sync/tracing/TracingSyncActivity.java

@@ -1,5 +1,7 @@
 package de.tudarmstadt.informatik.hostage.sync.tracing;
 
-public class TracingSyncActivity {
+import android.app.Activity;
+
+public class TracingSyncActivity extends Activity{
 	//TODO
 }

+ 4 - 0
src/de/tudarmstadt/informatik/hostage/sync/tracing/TracingSyncService.java

@@ -32,9 +32,13 @@ import de.tudarmstadt.informatik.hostage.persistence.HostageDBOpenHelper;
 
 public class TracingSyncService extends IntentService{
 	
+	public static final String REMOTE_DEVICE = "de.tudarmstadt.informatik.hostage.REMOTE_DEVICE";
+	
 	public static final int RECORD_UPLOADED = 0x00;
 	public static final int SYNC_COMPLETE = 0x01;
 	
+	
+	
 	private HttpClient httpClient;
 	private Handler mHandler;