Browse Source

fixed honey service binding to homefragment

Alexander Brakowski 10 years ago
parent
commit
3f4a7feff0

+ 4 - 1
AndroidManifest.xml

@@ -33,7 +33,10 @@
 			android:icon="@drawable/ic_launcher"
 			android:label="@string/app_name"
 			android:theme="@style/AppTheme"
-			android:installLocation="preferExternal">
+			android:installLocation="preferExternal"
+			android:vmSafeMode="true"
+			android:allowClearUserData="true"
+			android:hardwareAccelerated="true">
 		<meta-data
 				android:name="com.google.android.gms.version"
 				android:value="14"/>

+ 3 - 1
TODO

@@ -1,2 +1,4 @@
 ! [Overview]    Greeting animation only to show on application start, not on every fragment creation/recreating
-! [Statistics]  Switch to records view on record click
+! [Statistics]  Switch to records view on record click
+! [Back Button] * Fix scenario: Home View -> Threat Map -> Back Button -> Threat Map
+                * Fix scenaria: Home View -> Connection details -> Records -> Back Button

+ 42 - 4
src/de/tudarmstadt/informatik/hostage/ui2/activity/MainActivity.java

@@ -6,9 +6,11 @@ import android.app.ActivityManager;
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
@@ -16,6 +18,7 @@ import android.content.res.TypedArray;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.support.v4.app.ActionBarDrawerToggle;
+import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.widget.DrawerLayout;
 import android.util.Log;
 import android.view.MenuItem;
@@ -26,6 +29,7 @@ import android.widget.ListView;
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
+import java.util.HashMap;
 
 import de.tudarmstadt.informatik.hostage.HoneyService;
 import de.tudarmstadt.informatik.hostage.R;
@@ -107,7 +111,9 @@ public class MainActivity extends Activity {
 
 	};
 
-	private boolean mInvalidMenuItem;
+	private boolean mInvalidMenuItem = false;
+
+	private HashMap<String, Boolean> mAttacksOnProtocol;
 
 	/**
 	 * Retrieve the singleton latest instance of the activity
@@ -126,11 +132,21 @@ public class MainActivity extends Activity {
 	public void onStart(){
 		super.onStart();
 
+		registerReceiver();
+
 		if(isServiceRunning()){
 			this.bindService();
 		}
 	}
 
+	@Override
+	protected void onStop() {
+		// Unregister Broadcast Receiver
+		unregisterReceiver();
+
+		super.onStop();
+	}
+
 	@Override
 	protected void onCreate(Bundle savedInstanceState) {
 		super.onCreate(savedInstanceState);
@@ -208,6 +224,22 @@ public class MainActivity extends Activity {
 		}
 	}
 
+	private void registerReceiver() {
+		LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver,
+				new IntentFilter(getString(R.string.broadcast)));
+	}
+
+	private void unregisterReceiver() {
+		LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
+	}
+
+	private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+		@Override
+		public void onReceive(Context context, Intent intent) {
+
+		}
+	};
+
 	public void startAndBind() {
 		if(!isServiceRunning()){
 			startService(getServiceIntent());
@@ -225,8 +257,13 @@ public class MainActivity extends Activity {
 	}
 
 	public void unbindService() {
-		unbindService(mConnection);
-		//mServiceBound = false;
+		try {
+			unbindService(mConnection);
+		} catch(IllegalArgumentException ex){
+			// somehow already unbound.
+		} finally {
+			mServiceBound = false;
+		}
 	}
 
 	public void bindService() {
@@ -361,7 +398,8 @@ public class MainActivity extends Activity {
 	public void injectFragment(Fragment fragment, boolean enableBack){
 		injectFragment(fragment, enableBack, null);
 	}
-	public void injectFragment(Fragment fragment, boolean enableBack, Object tagObj){
+
+	private void injectFragment(Fragment fragment, boolean enableBack, Object tagObj){
 		if(enableBack){
 			mDrawerToggle.setDrawerIndicatorEnabled(false);
 		}

+ 0 - 2
src/de/tudarmstadt/informatik/hostage/ui2/adapter/ServicesListAdapter.java

@@ -88,8 +88,6 @@ public class ServicesListAdapter extends ArrayAdapter<ServicesListItem> {
 					new CompoundButton.OnCheckedChangeListener() {
 						public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
 							ServicesListItem item = (ServicesListItem) buttonView.getTag();
-									System.out
-											.println("Protokoll: " + item.protocol);
 				if(!HelperUtils.isWifiConnected(mActivity)){
 					new AlertDialog.Builder(mActivity)
 							.setTitle("Information")

+ 31 - 10
src/de/tudarmstadt/informatik/hostage/ui2/fragment/HomeFragment.java

@@ -55,6 +55,7 @@ public class HomeFragment extends Fragment {
 	private UglyDbHelper dbh;
 
 	private static ThreatIndicatorGLRenderer.ThreatLevel THREAT_LEVEL = ThreatIndicatorGLRenderer.ThreatLevel.NO_THREAT;
+	private boolean mReceiverRegistered;
 
 	private void assignViews() {
 		mHomeSwitchConnection = (Switch) rootView.findViewById(R.id.home_switch_connection);
@@ -68,14 +69,17 @@ public class HomeFragment extends Fragment {
 	}
 
 	private void registerBroadcastReceiver(){
-		mReceiver = new BroadcastReceiver() {
-			@Override
-			public void onReceive(Context context, Intent intent) {
-				updateUI();
-			}
-		};
+		if(!mReceiverRegistered) {
+			LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, new IntentFilter(getString(R.string.broadcast)));
+			this.mReceiverRegistered = true;
+		}
+	}
 
-		LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, new IntentFilter(getString(R.string.broadcast)));
+	private void unregisterBroadcastReceiver(){
+		if(mReceiverRegistered){
+			LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mReceiver);
+			this.mReceiverRegistered = false;
+		}
 	}
 
 	public HomeFragment(){}
@@ -248,7 +252,12 @@ public class HomeFragment extends Fragment {
 	    setStateNotActive(true);
 	    setStateNotConnected();
 
-	    registerBroadcastReceiver();
+	    mReceiver = new BroadcastReceiver() {
+		    @Override
+		    public void onReceive(Context context, Intent intent) {
+			    updateUI();
+		    }
+	    };
 
 	    updateUI();
 
@@ -277,7 +286,7 @@ public class HomeFragment extends Fragment {
 				    } else {
 					    if(isChecked){
 						    for(String protocol: protocols){
-							    MainActivity.getInstance().getHoneyService().startListener(protocol);
+							    if(!MainActivity.getInstance().getHoneyService().isRunning(protocol)) MainActivity.getInstance().getHoneyService().startListener(protocol);
 						    }
 
 						    setStateActive();
@@ -304,9 +313,21 @@ public class HomeFragment extends Fragment {
         return rootView;
     }
 
+	@Override
+	public void onStart(){
+		super.onStart();
+		registerBroadcastReceiver();
+	}
+
+	@Override
+	public void onStop(){
+		super.onStop();
+		unregisterBroadcastReceiver();
+	}
+
 	@Override
 	public void onDestroy(){
+		unregisterBroadcastReceiver();
 		super.onDestroy();
-		LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mReceiver);
 	}
 }