123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333 |
- package de.tudarmstadt.informatik.hostage.ui2.fragment;
- import android.app.AlertDialog;
- import android.app.Fragment;
- import android.app.FragmentManager;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.content.SharedPreferences;
- import android.os.Bundle;
- import android.support.v4.content.LocalBroadcastManager;
- import android.util.Log;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.CompoundButton;
- import android.widget.ImageView;
- import android.widget.Switch;
- import android.widget.TextView;
- import de.tudarmstadt.informatik.hostage.R;
- import de.tudarmstadt.informatik.hostage.commons.HelperUtils;
- import de.tudarmstadt.informatik.hostage.dao.ProfileManager;
- import de.tudarmstadt.informatik.hostage.logging.UglyDbHelper;
- import de.tudarmstadt.informatik.hostage.model.Profile;
- import de.tudarmstadt.informatik.hostage.ui2.activity.MainActivity;
- import de.tudarmstadt.informatik.hostage.ui2.fragment.opengl.ThreatIndicatorGLRenderer;
- /**
- * @author Alexander Brakowski
- * @created 13.01.14 19:06
- */
- public class HomeFragment extends Fragment {
- private Switch mHomeSwitchConnection;
- private TextView mHomeTextName;
- private TextView mHomeTextSecurity;
- private TextView mHomeTextAttacks;
- private TextView mHomeTextProfile;
- private TextView mHomeTextProfileHeader;
- private ImageView mHomeProfileImage;
- private ImageView mHomeConnectionInfoButton;
- private View rootView;
- private BroadcastReceiver mReceiver;
- private CompoundButton.OnCheckedChangeListener switchChangeListener = null;
- private int defaultTextColor;
- private ProfileManager mProfileManager;
- private SharedPreferences mConnectionInfo;
- 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);
- mHomeTextName = (TextView) rootView.findViewById(R.id.home_text_name);
- mHomeTextSecurity = (TextView) rootView.findViewById(R.id.home_text_security);
- mHomeTextAttacks = (TextView) rootView.findViewById(R.id.home_text_attacks);
- mHomeTextProfile = (TextView) rootView.findViewById(R.id.home_text_profile);
- mHomeTextProfileHeader = (TextView) rootView.findViewById(R.id.home_text_profile_header);
- mHomeProfileImage = (ImageView) rootView.findViewById(R.id.home_image_profile);
- mHomeConnectionInfoButton = (ImageView) rootView.findViewById(R.id.home_button_connection_info);
- }
- private void registerBroadcastReceiver(){
- if(!mReceiverRegistered) {
- LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mReceiver, new IntentFilter(getString(R.string.broadcast)));
- this.mReceiverRegistered = true;
- }
- }
- private void unregisterBroadcastReceiver(){
- if(mReceiverRegistered){
- LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mReceiver);
- this.mReceiverRegistered = false;
- }
- }
- public HomeFragment(){}
- public void setStateNotActive(boolean initial){
- mHomeTextName.setTextColor(getResources().getColor(R.color.light_grey));
- mHomeTextSecurity.setTextColor(getResources().getColor(R.color.light_grey));
- mHomeTextAttacks.setTextColor(getResources().getColor(R.color.light_grey));
- mHomeTextProfile.setTextColor(getResources().getColor(R.color.light_grey));
- mHomeTextProfileHeader.setTextColor(getResources().getColor(R.color.light_grey));
- if(!initial){
- ThreatIndicatorGLRenderer.setThreatLevel(ThreatIndicatorGLRenderer.ThreatLevel.NOT_MONITORING);
- }
- mHomeSwitchConnection.setChecked(false);
- }
- public void setStateNotActive(){
- setStateNotActive(false);
- }
- public void setStateActive(){
- setStateActive(false);
- }
- public void setStateActive(boolean initial){
- mHomeTextAttacks.setVisibility(View.VISIBLE);
- mHomeTextSecurity.setVisibility(View.VISIBLE);
- mHomeTextName.setTextColor(defaultTextColor);
- mHomeTextProfile.setTextColor(defaultTextColor);
- mHomeTextProfileHeader.setTextColor(defaultTextColor);
- if(!initial){
- ThreatIndicatorGLRenderer.setThreatLevel(ThreatIndicatorGLRenderer.ThreatLevel.NO_THREAT);
- }
- mHomeSwitchConnection.setChecked(true);
- }
- public void setStateNotConnected(){
- mHomeTextSecurity.setVisibility(View.INVISIBLE);
- mHomeTextAttacks.setVisibility(View.INVISIBLE);
- mHomeTextProfile.setVisibility(View.INVISIBLE);
- mHomeTextProfileHeader.setVisibility(View.INVISIBLE);
- mHomeProfileImage.setVisibility(View.INVISIBLE);
- mHomeConnectionInfoButton.setVisibility(View.INVISIBLE);
- mHomeTextName.setText("Not connected");
- }
- public void setStateConnected(){
- mHomeTextProfile.setVisibility(View.VISIBLE);
- mHomeTextProfileHeader.setVisibility(View.VISIBLE);
- mHomeProfileImage.setVisibility(View.VISIBLE);
- mHomeConnectionInfoButton.setVisibility(View.VISIBLE);
- }
- public void updateUI(){
- Profile profile = mProfileManager.getCurrentActivatedProfile();
- if(profile != null){
- mHomeTextProfile.setText(profile.mLabel);
- mHomeProfileImage.setImageBitmap(profile.getIconBitmap());
- }
- if(HelperUtils.isWifiConnected(getActivity())){
- setStateConnected();
- mHomeTextName.setText(mConnectionInfo.getString(getString(R.string.connection_info_ssid), ""));
- }
- boolean hasActiveListeners = false;
- int totalAttacks = 0;
- int totalLogged = 0;
- if(MainActivity.getInstance().isServiceBound()){
- for(String protocol: getResources().getStringArray(R.array.protocols)){
- if(MainActivity.getInstance().getHoneyService().isRunning(protocol)){
- hasActiveListeners = true;
- int attacks = MainActivity.getInstance().getHoneyService().getNumberOfActiveConnections(protocol);
- totalAttacks += attacks;
- if(attacks == 0){
- int log_attacks = dbh.numBssidSeen(protocol, mConnectionInfo.getString(getString(R.string.connection_info_bssid), null));
- totalLogged += log_attacks;
- if(log_attacks > 0){
- if(THREAT_LEVEL != ThreatIndicatorGLRenderer.ThreatLevel.LIVE_THREAT){
- THREAT_LEVEL = ThreatIndicatorGLRenderer.ThreatLevel.PAST_THREAT;
- }
- } else {
- if(THREAT_LEVEL != ThreatIndicatorGLRenderer.ThreatLevel.LIVE_THREAT && THREAT_LEVEL != ThreatIndicatorGLRenderer.ThreatLevel.PAST_THREAT){
- THREAT_LEVEL = ThreatIndicatorGLRenderer.ThreatLevel.NO_THREAT;
- }
- }
- } else {
- THREAT_LEVEL = ThreatIndicatorGLRenderer.ThreatLevel.LIVE_THREAT;
- }
- }
- }
- }
- if(hasActiveListeners){
- setStateActive(true);
- switch(THREAT_LEVEL){
- case NO_THREAT:
- mHomeTextAttacks.setText("0 attacks recorded");
- mHomeTextSecurity.setText("Secure");
- mHomeTextAttacks.setTextColor(getResources().getColor(R.color.holo_dark_green));
- mHomeTextSecurity.setTextColor(getResources().getColor(R.color.holo_dark_green));
- break;
- case PAST_THREAT:
- mHomeTextAttacks.setText(totalLogged + (totalLogged == 1 ? " attack" : " attacks") + " logged");
- mHomeTextSecurity.setText("Insecure");
- mHomeTextAttacks.setTextColor(getResources().getColor(R.color.holo_yellow));
- mHomeTextSecurity.setTextColor(getResources().getColor(R.color.holo_yellow));
- break;
- case LIVE_THREAT:
- mHomeTextAttacks.setText(totalAttacks + (totalAttacks == 1 ? " attack" : " attacks") + " recorded");
- mHomeTextSecurity.setText("Insecure");
- mHomeTextAttacks.setTextColor(getResources().getColor(R.color.holo_red));
- mHomeTextSecurity.setTextColor(getResources().getColor(R.color.holo_red));
- break;
- }
- ThreatIndicatorGLRenderer.setThreatLevel(THREAT_LEVEL);
- } else {
- mHomeSwitchConnection.setOnCheckedChangeListener(null);
- setStateNotActive();
- THREAT_LEVEL = ThreatIndicatorGLRenderer.ThreatLevel.NO_THREAT;
- if(!HelperUtils.isWifiConnected(getActivity())){
- setStateNotConnected();
- }
- mHomeSwitchConnection.setOnCheckedChangeListener(switchChangeListener);
- }
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- super.onCreateView(inflater, container, savedInstanceState);
- getActivity().setTitle(getResources().getString(R.string.drawer_overview));
- dbh = new UglyDbHelper(getActivity());
- mProfileManager = ProfileManager.getInstance();
- mConnectionInfo = getActivity().getSharedPreferences(getString(R.string.connection_info), Context.MODE_PRIVATE);
- rootView = inflater.inflate(R.layout.fragment_home, container, false);
- assignViews();
- // hook up the connection info button
- mHomeConnectionInfoButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- ConnectionInfoDialogFragment connectionInfoDialogFragment = new ConnectionInfoDialogFragment();
- connectionInfoDialogFragment.show(getFragmentManager().beginTransaction(), connectionInfoDialogFragment.getTag());
- }
- });
- defaultTextColor = mHomeTextName.getCurrentTextColor();
- setStateNotActive(true);
- setStateNotConnected();
- mReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- updateUI();
- }
- };
- updateUI();
- final String[] protocols = getResources().getStringArray(R.array.protocols);
- mHomeSwitchConnection = (Switch) rootView.findViewById(R.id.home_switch_connection);
- if(switchChangeListener == null){
- switchChangeListener = new CompoundButton.OnCheckedChangeListener() {
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if(!HelperUtils.isWifiConnected(getActivity())){
- new AlertDialog.Builder(getActivity())
- .setTitle("Information")
- .setMessage("You are not connected to a WiFi network. \n\nPlease connect to one, before trying to activate HosTaGe.")
- .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- }
- })
- .setIcon(android.R.drawable.ic_dialog_info)
- .show();
- setStateNotActive();
- setStateNotConnected();
- } else {
- if(isChecked){
- for(String protocol: protocols){
- if(!MainActivity.getInstance().getHoneyService().isRunning(protocol)) MainActivity.getInstance().getHoneyService().startListener(protocol);
- }
- setStateActive();
- } else {
- MainActivity.getInstance().getHoneyService().stopListeners();
- MainActivity.getInstance().stopAndUnbind();
- setStateNotActive();
- }
- }
- }
- };
- }
- mHomeSwitchConnection.setOnCheckedChangeListener(switchChangeListener);
- rootView.findViewById(R.id.home_profile_details).setOnClickListener(
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Fragment fragment = new ProfileManagerFragment();
- MainActivity.getInstance().injectFragment(fragment, false);
- }
- }
- );
- return rootView;
- }
- @Override
- public void onStart(){
- super.onStart();
- registerBroadcastReceiver();
- }
- @Override
- public void onStop(){
- super.onStop();
- unregisterBroadcastReceiver();
- }
- @Override
- public void onDestroy(){
- unregisterBroadcastReceiver();
- super.onDestroy();
- }
- }
|