Browse Source

Fixed: Destroy bug when restarting service in same session.
NetReciever(not entirely tested)

lp-tu 10 years ago
parent
commit
2292f0766f

+ 1 - 1
AndroidManifest.xml

@@ -12,6 +12,7 @@
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
     <application
         android:allowBackup="true"
@@ -23,7 +24,6 @@
             android:label="@string/app_name" >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
-
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>

+ 1 - 1
bin/AndroidManifest.xml

@@ -12,6 +12,7 @@
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 
     <application
         android:allowBackup="true"
@@ -23,7 +24,6 @@
             android:label="@string/app_name" >
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
-
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>

BIN
bin/classes.dex


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$1.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$2.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$3.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$4.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity$5.class


BIN
bin/classes/de/tudarmstadt/informatik/hostage/ui/MainActivity.class


BIN
bin/hostage.apk


BIN
bin/resources.ap_


+ 1 - 1
src/de/tudarmstadt/informatik/hostage/commons/HelperUtils.java

@@ -119,7 +119,7 @@ public final class HelperUtils {
 	}
 
 	/* Checks if external storage is available for read and write */
-	public boolean isExternalStorageWritable() {
+	public static boolean isExternalStorageWritable() {
 		String state = Environment.getExternalStorageState();
 		if (Environment.MEDIA_MOUNTED.equals(state)) {
 			return true;

+ 2 - 1
src/de/tudarmstadt/informatik/hostage/logging/DatabaseHandler.java

@@ -244,8 +244,9 @@ public class DatabaseHandler extends SQLiteOpenHelper {
         Cursor cursor = db.rawQuery(countQuery, null);
         int result = cursor.getCount();
         cursor.close();
-        
+        db.close();
         return result > 0;
+        
     }
     
     //Delete all Data from Database

+ 10 - 3
src/de/tudarmstadt/informatik/hostage/logging/SQLLogger.java

@@ -38,10 +38,17 @@ public class SQLLogger implements Logger{
 			SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
 			if(pref.getBoolean("pref_external_storage", false)){
 				//TODO Fehlermeldung wenn keine SD karte gefunden werden kann
-				log = context.openFileOutput("hostage_" + format + "_" + System.currentTimeMillis() + ".log", Context.MODE_PRIVATE);
+				File root = Environment.getExternalStorageDirectory();
+				if(root != null && HelperUtils.isExternalStorageWritable()){
+					File file = new File(root, "hostage_" + format + "_" + System.currentTimeMillis() + ".log");
+					log = new FileOutputStream(file);
+				}else {
+					Toast.makeText(context, "Could not write to SD Card", Toast.LENGTH_SHORT).show();
+					return;
+				}
+
 			} else{
-				File file = new File(Environment.getExternalStorageDirectory(), "hostage_" + format + "_" + System.currentTimeMillis() + ".log");
-				log = new FileOutputStream(file);
+				log = context.openFileOutput("hostage_" + format + "_" + System.currentTimeMillis() + ".log", Context.MODE_PRIVATE);
 			}
 			
 			ArrayList<Record> records = dbh.getAllRecords();

+ 30 - 35
src/de/tudarmstadt/informatik/hostage/ui/MainActivity.java

@@ -117,21 +117,17 @@ public class MainActivity extends Activity {
 		if (isServiceRunning()) {
 			unbindService(mConnection);
 		}
-		unregisterReceiver();
 		unregisterNetReceiver();
+		unregisterReceiver();
 		super.onStop();
 	}
 	
 	@Override
 	protected void onDestroy(){
 		super.onDestroy();
-		//TODO vielleicht wieder einfügen
-		/*
 		if(!isServiceRunning()){
-	    	editor.clear();
-	    	editor.commit();
+			deleteSessionData();
 		}
-		*/
 	}
 
 	@Override
@@ -163,8 +159,6 @@ public class MainActivity extends Activity {
 	private void stopAndUnbind() {
 		unbindService(mConnection);
 		stopService(getServiceIntent());
-    	editor.clear();
-    	editor.commit();
 	}
 	
 	private ServiceConnection mConnection = new ServiceConnection() {
@@ -235,8 +229,6 @@ public class MainActivity extends Activity {
 		});
 	}
 
-
-
 	private boolean isServiceRunning() {
 		ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
 		for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
@@ -247,8 +239,11 @@ public class MainActivity extends Activity {
 		return false;
 	}
 	
-
-
+	// Delete session data
+	private void deleteSessionData(){
+    	editor.clear();
+    	editor.commit();
+	}
 
 	private void registerReceiver() {
 		LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,
@@ -258,38 +253,40 @@ public class MainActivity extends Activity {
 	private void unregisterReceiver() {
 		LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
 	}
+	
+	private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent) {
+			updateUI();
+		}
+	};
 
 	private void registerNetReceiver() {
-		LocalBroadcastManager.getInstance(this).registerReceiver(netReceiver,
-				new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
+	    // register BroadcastReceiver on network state changes
+	    final IntentFilter intent = new IntentFilter();
+	    intent.addAction(android.net.ConnectivityManager.CONNECTIVITY_ACTION); //"android.net.conn.CONNECTIVITY_CHANGE"
+	    registerReceiver(netReceiver, intent);
 	}
 
 	private void unregisterNetReceiver() {
 		LocalBroadcastManager.getInstance(this).unregisterReceiver(netReceiver);
 	}
 
-	private BroadcastReceiver mReceiver = new BroadcastReceiver() {
-
-		@Override
-		public void onReceive(Context context, Intent intent) {
-			updateUI();
-		}
-
-	};
-
 	private BroadcastReceiver netReceiver = new BroadcastReceiver() {
-
 		@Override
 		public void onReceive(Context context, Intent intent) {
+			if (isServiceRunning()) {
+				Toast.makeText(getApplicationContext(),"Connection changed! Services stopped!", Toast.LENGTH_LONG).show();
+				mService.stopListeners();
+				stopAndUnbind();
+			}
+			deleteSessionData();
 			updateConnectionInfo();
+			updateUI();
 		}
-
-	};
-	
-	
+	};	
 
 	private void updateUI() {		
-//		SharedPreferences pref = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
 		boolean activeListeners = false;
 		boolean activeHandlers = false;
 		boolean yellowLight = false;
@@ -400,10 +397,10 @@ public class MainActivity extends Activity {
 		TextView internalIPView = (TextView) findViewById(R.id.textViewInternalIPValue);
 		TextView externalIPView = (TextView) findViewById(R.id.textViewExternalIPValue);
 		
-		String ssid = HelperUtils.getSSID(getApplicationContext());
-		String bssid = HelperUtils.getBSSID(getApplicationContext());
-		String internalIP = HelperUtils.getInternalIP(getApplicationContext());
-		String externalIP = HelperUtils.getExternalIP(getApplicationContext());
+		String ssid = HelperUtils.getSSID(this);
+		String bssid = HelperUtils.getBSSID(this);
+		String internalIP = HelperUtils.getInternalIP(this);
+		String externalIP = HelperUtils.getExternalIP(this);
 
 		if (ssid != null)
 			ssidView.setText(ssid);
@@ -483,8 +480,6 @@ public class MainActivity extends Activity {
 		}
 	};
 	
-	
-	//TODO NACH TEST ENTFERNEN
 	public void showLog(View view){
 		startActivity(new Intent(this, ViewLog.class));
 	}