package bg.mentormate.academy.radarapp.activities; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import bg.mentormate.academy.radarapp.data.LocalDb; import bg.mentormate.academy.radarapp.R; import bg.mentormate.academy.radarapp.fragments.HomeFragment; import bg.mentormate.academy.radarapp.fragments.NavigationDrawerFragment; import bg.mentormate.academy.radarapp.fragments.ProfileFragment; import bg.mentormate.academy.radarapp.fragments.SearchFragment; import bg.mentormate.academy.radarapp.models.User; import bg.mentormate.academy.radarapp.services.LocationTrackingService; public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks { /** * Fragments Tags */ private final static String HOME_TAG = "HOME"; private final static String MY_PROFILE_TAG = "MY_PROFILE"; private final static String SEARCH_TAG = "SEARCH"; /** * Fragments relating to the drawer menu items */ private HomeFragment mHomeFragment; private ProfileFragment mMyProfileFragment; private SearchFragment mSearchFragment; /** * Fragment managing the behaviors, interactions and presentation of the navigation drawer. */ private NavigationDrawerFragment mNavigationDrawerFragment; /** * Used to store the last screen title. For use in {@link #restoreActionBar()}. */ private CharSequence mTitle; private LocalDb mLocalDb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { mLocalDb = LocalDb.getInstance(); User currentUser = mLocalDb.getCurrentUser(); if (currentUser == null) { Intent loginIntent = new Intent(this, LoginActivity.class); startActivity(loginIntent); finish(); } mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer); mTitle = getTitle(); // Set up the drawer. mNavigationDrawerFragment.setUp( R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout)); } @Override protected void onResume() { super.onResume(); invalidateOptionsMenu(); } @Override public void onNavigationDrawerItemSelected(int position) { User currentUser = (User) User.getCurrentUser(); if (currentUser != null) { // update the main content by replacing fragments FragmentManager fragmentManager = getSupportFragmentManager(); switch (position) { case 0: mHomeFragment = (HomeFragment) fragmentManager.findFragmentByTag(HOME_TAG); if (mHomeFragment == null) { mHomeFragment = HomeFragment.newInstance(position + 1); } fragmentManager.beginTransaction() .replace(R.id.container, mHomeFragment, HOME_TAG) .addToBackStack(HOME_TAG) .commit(); break; case 1: mMyProfileFragment = (ProfileFragment) fragmentManager.findFragmentByTag(MY_PROFILE_TAG); if (mMyProfileFragment == null) { mMyProfileFragment = ProfileFragment.newInstance(position + 1); } fragmentManager.beginTransaction() .replace(R.id.container, mMyProfileFragment, MY_PROFILE_TAG) .addToBackStack(MY_PROFILE_TAG) .commit(); break; case 2: mSearchFragment = (SearchFragment) fragmentManager.findFragmentByTag(SEARCH_TAG); if (mSearchFragment == null) { mSearchFragment = SearchFragment.newInstance(position + 1); } fragmentManager.beginTransaction() .replace(R.id.container, mSearchFragment, SEARCH_TAG) .addToBackStack(SEARCH_TAG) .commit(); break; } } } public void onSectionAttached(int number, String title) { switch (number) { case 1: mTitle = getString(R.string.title_section1); break; case 2: mTitle = title; break; case 3: mTitle = title; } } public void restoreActionBar() { ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); actionBar.setDisplayShowTitleEnabled(true); actionBar.setTitle(mTitle); } @Override public boolean onCreateOptionsMenu(Menu menu) { if (!mNavigationDrawerFragment.isDrawerOpen()) { // Only show items in the action bar relevant to this screen // if the drawer is not showing. Otherwise, let the drawer // decide what to show in the action bar. getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem trackingStatus = menu.findItem(R.id.actionTrackingStatus); if (!mLocalDb.isTrackingOn()) { trackingStatus.setIcon(getResources().getDrawable(R.drawable.ic_marker_off)); } else { trackingStatus.setIcon(getResources().getDrawable(R.drawable.ic_marker_on)); } if (mTitle != null) { restoreActionBar(); } return true; } return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.actionLogout: logout(); return true; case R.id.actionTrackingStatus: toggleTrackingStatus(item); return true; } return super.onOptionsItemSelected(item); } private void toggleTrackingStatus(MenuItem item) { if (!mLocalDb.isTrackingOn()) { startPositionTracking(); item.setIcon(getResources().getDrawable(R.drawable.ic_marker_on)); } else { stopPositionTracking(); item.setIcon(getResources().getDrawable(R.drawable.ic_marker_off)); } } private void startPositionTracking() { Intent trackingIntent = new Intent(this, LocationTrackingService.class); trackingIntent.setAction(LocationTrackingService.ACTION_START_MONITORING); startService(trackingIntent); mLocalDb.setTrackingOn(true); } private void stopPositionTracking() { Intent trackingIntent = new Intent(this, LocationTrackingService.class); trackingIntent.setAction(LocationTrackingService.ACTION_STOP_MONITORING); startService(trackingIntent); mLocalDb.setTrackingOn(false); } private void logout() { stopPositionTracking(); User.logOut(); LocalDb.getInstance().setCurrentUser(null); goToLoginScreen(); } private void goToLoginScreen() { Intent loginIntent = new Intent(this, LoginActivity.class); loginIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); loginIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(loginIntent); } }