MainActivity.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  1. package de.tudarmstadt.informatik.hostage.ui2.activity;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import android.app.ActionBar;
  6. import android.app.Activity;
  7. import android.app.ActivityManager;
  8. import android.app.AlertDialog;
  9. import android.app.Fragment;
  10. import android.app.FragmentManager;
  11. import android.app.FragmentTransaction;
  12. import android.content.BroadcastReceiver;
  13. import android.content.ComponentName;
  14. import android.content.Context;
  15. import android.content.DialogInterface;
  16. import android.content.Intent;
  17. import android.content.IntentFilter;
  18. import android.content.ServiceConnection;
  19. import android.content.SharedPreferences;
  20. import android.content.pm.ActivityInfo;
  21. import android.content.res.Configuration;
  22. import android.content.res.TypedArray;
  23. import android.net.Uri;
  24. import android.os.Bundle;
  25. import android.os.IBinder;
  26. import android.support.v4.app.ActionBarDrawerToggle;
  27. import android.support.v4.content.LocalBroadcastManager;
  28. import android.support.v4.widget.DrawerLayout;
  29. import android.text.Html;
  30. import android.util.Log;
  31. import android.view.Gravity;
  32. import android.view.KeyEvent;
  33. import android.view.MenuItem;
  34. import android.view.View;
  35. import android.widget.AdapterView;
  36. import android.widget.ListView;
  37. import android.widget.Toast;
  38. import de.tudarmstadt.informatik.hostage.Hostage;
  39. import de.tudarmstadt.informatik.hostage.R;
  40. import de.tudarmstadt.informatik.hostage.model.Profile;
  41. import de.tudarmstadt.informatik.hostage.persistence.ProfileManager;
  42. import de.tudarmstadt.informatik.hostage.ui2.model.LogFilter;
  43. import de.tudarmstadt.informatik.hostage.ui2.adapter.DrawerListAdapter;
  44. import de.tudarmstadt.informatik.hostage.ui2.fragment.AboutFragment;
  45. import de.tudarmstadt.informatik.hostage.ui2.fragment.HomeFragment;
  46. import de.tudarmstadt.informatik.hostage.ui2.fragment.ProfileManagerFragment;
  47. import de.tudarmstadt.informatik.hostage.ui2.fragment.RecordOverviewFragment;
  48. import de.tudarmstadt.informatik.hostage.ui2.fragment.ServicesFragment;
  49. import de.tudarmstadt.informatik.hostage.ui2.fragment.SettingsFragment;
  50. import de.tudarmstadt.informatik.hostage.ui2.fragment.StatisticsFragment;
  51. import de.tudarmstadt.informatik.hostage.ui2.fragment.ThreatMapFragment;
  52. import de.tudarmstadt.informatik.hostage.ui2.fragment.UpNavigatibleFragment;
  53. import de.tudarmstadt.informatik.hostage.ui2.fragment.opengl.ThreatIndicatorGLRenderer;
  54. import de.tudarmstadt.informatik.hostage.ui2.model.DrawerListItem;
  55. /**
  56. * @author Alexander Brakowski
  57. * @created 12.01.14 23:24
  58. */
  59. public class MainActivity extends Activity {
  60. public static volatile Context context;
  61. /** singleton instance of the MainActivity **/
  62. private static MainActivity sInstance = null;
  63. public Fragment mDisplayedFragment;
  64. public Hostage mHoneyService;
  65. private DrawerLayout mDrawerLayout;
  66. private ListView mDrawerList;
  67. private ActionBarDrawerToggle mDrawerToggle;
  68. private CharSequence mDrawerTitle;
  69. private CharSequence mTitle;
  70. private MainMenuItem mSelectedMenuItem = null;
  71. private ArrayList<DrawerListItem> mDrawerItems;
  72. private boolean mServiceBound = false;
  73. private ProfileManager mProfileManager;
  74. private Fragment rootFragment;
  75. /**
  76. * Connection to bind the background service
  77. *
  78. * @see de.tudarmstadt.informatik.hostage.Hostage
  79. */
  80. private ServiceConnection mConnection = new ServiceConnection() {
  81. /**
  82. * After the service is bound, check which has been clicked and start
  83. * it.
  84. *
  85. * @see android.content.ServiceConnection#onServiceConnected(android.content.ComponentName,
  86. * android.os.IBinder)
  87. */
  88. @Override
  89. public void onServiceConnected(ComponentName name, IBinder service) {
  90. mHoneyService = ((Hostage.LocalBinder) service).getService();
  91. mServiceBound = true;
  92. }
  93. /**
  94. * After the service is unbound, delete reference.
  95. *
  96. * @see android.content.ServiceConnection#onServiceDisconnected(android.content.ComponentName)
  97. */
  98. @Override
  99. public void onServiceDisconnected(ComponentName name) {
  100. mHoneyService = null;
  101. mServiceBound = false;
  102. }
  103. };
  104. private HashMap<String, Boolean> mAttacksOnProtocol = new HashMap<String, Boolean>();
  105. private boolean mCloseWarning = false;
  106. private SharedPreferences mSharedPreferences;
  107. /**
  108. * Retrieve the singleton latest instance of the activity
  109. *
  110. * @return MainActivity - the singleton instance
  111. */
  112. public static MainActivity getInstance() {
  113. assert (sInstance != null);
  114. return sInstance;
  115. }
  116. public static Context getContext() {
  117. return MainActivity.context;
  118. }
  119. @Override
  120. public void onStart() {
  121. super.onStart();
  122. registerReceiver();
  123. if (isServiceRunning()) {
  124. this.bindService();
  125. }
  126. }
  127. @Override
  128. public void onStop() {
  129. this.unbindService();
  130. super.onStop();
  131. }
  132. @Override
  133. protected void onCreate(Bundle savedInstanceState) {
  134. super.onCreate(savedInstanceState);
  135. sInstance = this;
  136. MainActivity.context = getApplicationContext();
  137. setContentView(R.layout.activity_drawer_main);
  138. mProfileManager = ProfileManager.getInstance();
  139. ThreatIndicatorGLRenderer.assets = getAssets();
  140. ThreatIndicatorGLRenderer.setThreatLevel(ThreatIndicatorGLRenderer.ThreatLevel.NOT_MONITORING);
  141. // set background color
  142. TypedArray arr = getTheme().obtainStyledAttributes(new int[] { android.R.color.background_light });
  143. ThreatIndicatorGLRenderer.setBackgroundColor(arr.getColor(0, 0xFFFFFF));
  144. arr.recycle();
  145. ActionBar actionBar = getActionBar();
  146. actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_HOME_AS_UP);
  147. mTitle = mDrawerTitle = getTitle();
  148. mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
  149. mDrawerList = (ListView) findViewById(R.id.left_drawer);
  150. mDrawerItems = new ArrayList<DrawerListItem>();
  151. mDrawerItems.add(new DrawerListItem(R.string.drawer_overview, R.drawable.ic_menu_home));
  152. mDrawerItems.add(new DrawerListItem(R.string.drawer_threat_map, R.drawable.ic_menu_mapmode));
  153. mDrawerItems.add(new DrawerListItem(R.string.drawer_records, R.drawable.ic_menu_records));
  154. mDrawerItems.add(new DrawerListItem(R.string.drawer_statistics, R.drawable.ic_menu_stats));
  155. mDrawerItems.add(new DrawerListItem(R.string.drawer_services, R.drawable.ic_menu_set_as));
  156. mDrawerItems.add(new DrawerListItem(R.string.drawer_profile_manager, R.drawable.ic_menu_allfriends));
  157. mDrawerItems.add(new DrawerListItem(R.string.drawer_settings, R.drawable.ic_menu_preferences));
  158. mDrawerItems.add(new DrawerListItem(R.string.drawer_help, R.drawable.ic_menu_help));
  159. mDrawerItems.add(new DrawerListItem(R.string.drawer_app_info, R.drawable.ic_menu_info_details));
  160. DrawerListAdapter listAdapter = new DrawerListAdapter(this, mDrawerItems);
  161. mDrawerList.setAdapter(listAdapter);
  162. mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
  163. getActionBar().setDisplayHomeAsUpEnabled(true);
  164. getActionBar().setHomeButtonEnabled(true);
  165. getActionBar().setDisplayShowHomeEnabled(true);
  166. mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
  167. mDrawerLayout, /* DrawerLayout object */
  168. R.drawable.ic_navigation_drawer, /*
  169. * nav drawer image to replace 'Up'
  170. * caret
  171. */
  172. R.string.drawer_open, /* "open drawer" description for accessibility */
  173. R.string.drawer_close /* "close drawer" description for accessibility */
  174. ) {
  175. public void onDrawerClosed(View view) {
  176. getActionBar().setTitle(mTitle);
  177. invalidateOptionsMenu(); // creates call to
  178. // onPrepareOptionsMenu()
  179. }
  180. public void onDrawerOpened(View drawerView) {
  181. getActionBar().setTitle(mDrawerTitle);
  182. invalidateOptionsMenu(); // creates call to
  183. // onPrepareOptionsMenu()
  184. }
  185. };
  186. mDrawerLayout.setDrawerListener(mDrawerToggle);
  187. startAndBind();
  188. mSharedPreferences = getSharedPreferences(getString(R.string.shared_preference_path), Hostage.MODE_PRIVATE);
  189. if(mSharedPreferences.getBoolean("isFirstRun", true)){
  190. mDrawerLayout.postDelayed(new Runnable() {
  191. @Override
  192. public void run() {
  193. mDrawerLayout.openDrawer(Gravity.LEFT);
  194. }
  195. }, 1000);
  196. onFirstRun();
  197. }
  198. if (savedInstanceState == null) {
  199. // on first time display view for first nav item
  200. displayView(0);
  201. }
  202. }
  203. private void onFirstRun(){
  204. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  205. builder.setMessage(Html.fromHtml(getString(R.string.hostage_disclaimer)))
  206. .setCancelable(false)
  207. .setPositiveButton(getString(R.string.agree), new DialogInterface.OnClickListener() {
  208. public void onClick(DialogInterface dialog, int id) {
  209. // and, if the user accept, you can execute something like this:
  210. // We need an Editor object to make preference changes.
  211. // All objects are from android.context.Context
  212. SharedPreferences.Editor editor = mSharedPreferences.edit();
  213. editor.putBoolean("isFirstRun", false);
  214. // Commit the edits!
  215. editor.commit();
  216. }
  217. })
  218. .setNegativeButton(getString(R.string.disagree), new DialogInterface.OnClickListener() {
  219. public void onClick(DialogInterface dialog, int id) {
  220. getHostageService().stopListeners();
  221. stopAndUnbind();
  222. finish();
  223. }
  224. });
  225. AlertDialog alert = builder.create();
  226. alert.show();
  227. }
  228. private void registerReceiver() {
  229. LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, new IntentFilter(getString(R.string.broadcast)));
  230. }
  231. private void unregisterReceiver() {
  232. LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);
  233. }
  234. private BroadcastReceiver mReceiver = new BroadcastReceiver() {
  235. @Override
  236. public void onReceive(Context context, Intent intent) {
  237. Bundle extras = intent.getExtras();
  238. String sender = extras.getString("SENDER");
  239. String[] values = extras.getStringArray("VALUES");
  240. if (sender.equals(Hostage.class.getName()) && values[0].equals(getString(R.string.broadcast_started))) {
  241. mAttacksOnProtocol.put(values[1], true);
  242. }
  243. }
  244. };
  245. public boolean hasProtocolAttacks(String protocol) {
  246. if (!mAttacksOnProtocol.containsKey(protocol))
  247. return false;
  248. return mAttacksOnProtocol.get(protocol);
  249. }
  250. public void startAndBind() {
  251. if (!isServiceRunning()) {
  252. startService(getServiceIntent());
  253. }
  254. bindService();
  255. }
  256. public void stopAndUnbind() {
  257. if (mHoneyService != null) {
  258. unbindService();
  259. }
  260. stopService(getServiceIntent());
  261. }
  262. public void unbindService() {
  263. try {
  264. unbindService(mConnection);
  265. } catch (IllegalArgumentException ex) {
  266. // somehow already unbound.
  267. }
  268. }
  269. public void bindService() {
  270. mAttacksOnProtocol.clear();
  271. bindService(getServiceIntent(), mConnection, BIND_AUTO_CREATE);
  272. // mServiceBound = true;
  273. }
  274. @Override
  275. protected void onDestroy() {
  276. super.onDestroy();
  277. // Unregister Broadcast Receiver
  278. unregisterReceiver();
  279. // Unbind running service
  280. if (!mHoneyService.hasRunningListeners()) {
  281. stopAndUnbind();
  282. }
  283. }
  284. @Override
  285. protected void onResume() {
  286. super.onResume();
  287. String action = getIntent().getAction();
  288. if (action != null && action.equals("SHOW_HOME")) {
  289. /*if (this.mDisplayedFragment != null && !this.mDisplayedFragment.getClass().equals(HomeFragment.class)) {
  290. getFragmentManager().popBackStackImmediate(HomeFragment.class.getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
  291. displayView(MainMenuItem.HOME.getValue());
  292. getIntent().setAction(null);
  293. }*/
  294. }
  295. }
  296. @Override
  297. public boolean onOptionsItemSelected(MenuItem item) {
  298. // toggle nav drawer on selecting action bar app icon/title
  299. if (mDrawerToggle.onOptionsItemSelected(item)) {
  300. return true;
  301. }
  302. if (item.getItemId() == android.R.id.home) {
  303. if (!mDrawerToggle.isDrawerIndicatorEnabled()) {
  304. navigateBack();
  305. }
  306. }
  307. return super.onOptionsItemSelected(item);
  308. }
  309. public void navigateBack(){
  310. if (!(this.mDisplayedFragment instanceof UpNavigatibleFragment)) {
  311. mDrawerToggle.setDrawerIndicatorEnabled(true);
  312. return;
  313. }
  314. UpNavigatibleFragment upNav = (UpNavigatibleFragment) this.mDisplayedFragment;
  315. getFragmentManager().popBackStackImmediate(upNav.getUpFragment().getName(), 0);
  316. this.mDisplayedFragment = getFragmentManager().findFragmentById(R.id.content_frame);
  317. configureFragment();
  318. if (!(this.mDisplayedFragment instanceof UpNavigatibleFragment) || !((UpNavigatibleFragment) this.mDisplayedFragment).isUpNavigatible()) {
  319. mDrawerToggle.setDrawerIndicatorEnabled(true);
  320. } else {
  321. mDrawerToggle.setDrawerIndicatorEnabled(false);
  322. }
  323. }
  324. @Override
  325. public void setTitle(CharSequence title) {
  326. mTitle = title;
  327. getActionBar().setTitle(mTitle);
  328. }
  329. /**
  330. * When using the ActionBarDrawerToggle, you must call it during
  331. * onPostCreate() and onConfigurationChanged()...
  332. */
  333. @Override
  334. protected void onPostCreate(Bundle savedInstanceState) {
  335. super.onPostCreate(savedInstanceState);
  336. // Sync the toggle state after onRestoreInstanceState has occurred.
  337. mDrawerToggle.syncState();
  338. }
  339. @Override
  340. public void onConfigurationChanged(Configuration newConfig) {
  341. super.onConfigurationChanged(newConfig);
  342. // Pass any configuration change to the drawer toggls
  343. mDrawerToggle.onConfigurationChanged(newConfig);
  344. }
  345. public Fragment getCurrentFragment() {
  346. return this.mDisplayedFragment;
  347. }
  348. public void setDrawerIndicatorEnabled(boolean val) {
  349. mDrawerToggle.setDrawerIndicatorEnabled(val);
  350. }
  351. public void displayView(int position) {
  352. MainMenuItem menuItemPosition = MainMenuItem.create(position);
  353. if (this.mDisplayedFragment != null && this.mDisplayedFragment.getClass() == menuItemPosition.getKlass()) {
  354. mDrawerLayout.closeDrawer(mDrawerList);
  355. return;
  356. }
  357. if(menuItemPosition == MainMenuItem.HELP){
  358. Intent intent = new Intent(Intent.ACTION_VIEW);
  359. intent.setData(Uri.parse("https://www.youtube.com/playlist?list=PLJyUmtMldh3s1XtRfE4YFaQ8ME7xjf7Gx"));
  360. startActivity(intent);
  361. return;
  362. }
  363. Fragment fragment = null;
  364. try {
  365. fragment = (Fragment) menuItemPosition.getKlass().newInstance();
  366. } catch (InstantiationException e) {
  367. Log.i(menuItemPosition.getKlass().toString(), "Could not create new instance of fragment");
  368. } catch (IllegalAccessException e) {
  369. Log.i(menuItemPosition.getKlass().toString(), "Could not create new instance of fragment");
  370. }
  371. if (fragment != null) {
  372. if(position == 0 && rootFragment == null){
  373. rootFragment = fragment;
  374. }
  375. boolean isFirst = getFragmentManager().getBackStackEntryCount() == 0;
  376. //getFragmentManager().popBackStackImmediate(HomeFragment.class.getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
  377. // update selected item and title, then close the drawer if needed
  378. //if(!(fragment instanceof HomeFragment) || isFirst) {
  379. injectFragment(fragment);// , false, menuItemPosition);
  380. //} else {
  381. // injectFragment(rootFragment);
  382. //}
  383. mDrawerList.setItemChecked(position, true);
  384. mDrawerList.setSelection(position);
  385. setTitle(mDrawerItems.get(position).text);
  386. }
  387. mDrawerLayout.closeDrawer(mDrawerList);
  388. }
  389. public void injectFragment(Fragment fragment, boolean enableBack) {
  390. injectFragment(fragment);
  391. }
  392. public void injectFragment(Fragment fragment) {
  393. this.mCloseWarning = false;
  394. // set orientation fixed to portrait in home fragment
  395. if (fragment instanceof UpNavigatibleFragment) {
  396. UpNavigatibleFragment upFrag = (UpNavigatibleFragment) fragment;
  397. if (upFrag.getUpFragment() == null) {
  398. upFrag.setUpFragment(this.mDisplayedFragment.getClass());
  399. }
  400. if (upFrag.isUpNavigatible()) {
  401. mDrawerToggle.setDrawerIndicatorEnabled(false);
  402. }
  403. }
  404. configureFragment(fragment);
  405. FragmentManager fragmentManager = getFragmentManager();
  406. FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
  407. fragmentTransaction.replace(R.id.content_frame, fragment, fragment.getClass().getName());
  408. fragmentTransaction.addToBackStack(fragment.getClass().getName());
  409. fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
  410. fragmentTransaction.commit();
  411. this.mDisplayedFragment = fragment;
  412. }
  413. private void configureFragment() {
  414. configureFragment(this.mDisplayedFragment);
  415. }
  416. private void configureFragment(Fragment fragment) {
  417. if (fragment == null)
  418. return;
  419. if (fragment instanceof HomeFragment || fragment instanceof AboutFragment) {
  420. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT | ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
  421. } else {
  422. setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
  423. }
  424. if (fragment instanceof StatisticsFragment || fragment instanceof RecordOverviewFragment) {
  425. Intent intent = this.getIntent();
  426. intent.removeExtra(LogFilter.LOG_FILTER_INTENT_KEY);
  427. }
  428. }
  429. @Override
  430. public void onBackPressed() {
  431. if (mDisplayedFragment instanceof HomeFragment) {
  432. if (this.mCloseWarning) {
  433. MainActivity.getInstance().getHostageService().stopListeners();
  434. MainActivity.getInstance().stopAndUnbind();
  435. this.mCloseWarning = false;
  436. finish();
  437. } else {
  438. Toast.makeText(this, "Press the back button again to close HosTaGe", Toast.LENGTH_SHORT).show();
  439. this.mCloseWarning = true;
  440. }
  441. //}
  442. } else {
  443. super.onBackPressed();
  444. this.mDisplayedFragment = getFragmentManager().findFragmentById(R.id.content_frame);
  445. configureFragment();
  446. if (!(this.mDisplayedFragment instanceof UpNavigatibleFragment) || !((UpNavigatibleFragment) this.mDisplayedFragment).isUpNavigatible()) {
  447. mDrawerToggle.setDrawerIndicatorEnabled(true);
  448. } else {
  449. mDrawerToggle.setDrawerIndicatorEnabled(false);
  450. }
  451. }
  452. }
  453. @Override
  454. public boolean onKeyDown(int keycode, KeyEvent e) {
  455. switch (keycode) {
  456. case KeyEvent.KEYCODE_MENU:
  457. if (this.mDrawerToggle.isDrawerIndicatorEnabled()) {
  458. if (this.mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
  459. this.mDrawerLayout.closeDrawer(Gravity.LEFT);
  460. return true;
  461. }
  462. this.mDrawerLayout.openDrawer(Gravity.LEFT);
  463. }
  464. return true;
  465. }
  466. return super.onKeyDown(keycode, e);
  467. }
  468. public Intent getServiceIntent() {
  469. return new Intent(this, Hostage.class);
  470. }
  471. public Fragment getDisplayedFragment() {
  472. return this.mDisplayedFragment;
  473. }
  474. public Hostage getHostageService() {
  475. return this.mHoneyService;
  476. }
  477. public boolean isServiceBound() {
  478. return this.mServiceBound;
  479. }
  480. public boolean isServiceRunning() {
  481. ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
  482. for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
  483. if (service.service.getClassName().equals(Hostage.class.getName())) {
  484. return true;
  485. }
  486. }
  487. return false;
  488. }
  489. public void startMonitorServices(List<String> protocols){
  490. for(String protocol: protocols){
  491. if(protocol.equals("GHOST")){
  492. if(mProfileManager.getCurrentActivatedProfile() != null){
  493. Profile profile = mProfileManager.getCurrentActivatedProfile();
  494. if(profile.mGhostActive){
  495. for(int port: profile.getGhostPorts()){
  496. if(!getHostageService().isRunning(protocol, port)) getHostageService().startListener(protocol, port);
  497. }
  498. }
  499. }
  500. } else {
  501. if(!getHostageService().isRunning(protocol)) getHostageService().startListener(protocol);
  502. }
  503. }
  504. }
  505. public enum MainMenuItem {
  506. HOME(0, HomeFragment.class),
  507. THREAT_MAP(1, ThreatMapFragment.class),
  508. RECORDS(2, RecordOverviewFragment.class),
  509. STATISTICS(3, StatisticsFragment.class),
  510. SERVICES(4, ServicesFragment.class),
  511. PROFILE_MANAGER(5, ProfileManagerFragment.class),
  512. SETTINGS(6, SettingsFragment.class),
  513. HELP(7, Class.class),
  514. APPLICATION_INFO(8, AboutFragment.class);
  515. private int value;
  516. private Class<?> klass;
  517. private MainMenuItem(int value, Class<?> klass) {
  518. this.value = value;
  519. this.klass = klass;
  520. }
  521. static public MainMenuItem create(int value) {
  522. if (value < 0 || value >= MainMenuItem.values().length)
  523. return MainMenuItem.HOME;
  524. return MainMenuItem.values()[value];
  525. }
  526. public static boolean hasClass(Class<?> klass){
  527. for(MainMenuItem m: MainMenuItem.values()){
  528. if(m.getKlass().equals(klass)) return true;
  529. }
  530. return false;
  531. }
  532. public int getValue() {
  533. return value;
  534. }
  535. public Class<?> getKlass() {
  536. return this.klass;
  537. }
  538. }
  539. private class DrawerItemClickListener implements ListView.OnItemClickListener {
  540. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  541. displayView(position);
  542. }
  543. }
  544. }