package org.commcare.activities;
import android.os.Build;
import android.os.Bundle;
import android.view.MenuItem;
import org.commcare.activities.components.MenuList;
import org.commcare.preferences.DeveloperPreferences;
import org.commcare.session.SessionFrame;
import org.commcare.suite.model.Menu;
/**
* A version of the CommCare home screen that uses the UI of the root module menu
* displayed in grid view, and makes all home screen actions available via a
* navigation drawer (instead of via the usual home screen buttons and options menu)
*
* @author Aliza Stone
*/
public class RootMenuHomeActivity extends HomeScreenBaseActivity<RootMenuHomeActivity> {
private HomeNavDrawerController navDrawerController;
private MenuList menuView;
@Override
protected void onCreateSessionSafe(Bundle savedInstanceState) {
super.onCreateSessionSafe(savedInstanceState);
String menuId = getIntent().getStringExtra(SessionFrame.STATE_COMMAND_ID);
if (menuId == null) {
menuId = Menu.ROOT_MENU_ID;
}
menuView = MenuList.setupMenuViewInActivity(this, menuId, true, true);
navDrawerController = new HomeNavDrawerController(this);
if (usingNavDrawer()) {
navDrawerController.setupNavDrawer(savedInstanceState);
}
}
@Override
public void onResume() {
super.onResume();
navDrawerController.reopenDrawerIfNeeded();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (usingNavDrawer() && item.getItemId() == android.R.id.home) {
navDrawerController.toggleDrawer();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(HomeNavDrawerController.KEY_DRAWER_WAS_OPEN,
navDrawerController.isDrawerOpen());
}
private boolean usingNavDrawer() {
// It's possible that this activity is being used as the home screen without having this flag
// set explicitly (if this is a consumer app), in which case we don't want to show user actions
return DeveloperPreferences.useRootModuleMenuAsHomeScreen() &&
Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
}
@Override
public boolean shouldShowSyncItemInActionBar() {
// It's possible that this activity is being used as the home screen without having this flag
// set explicitly (if this is a consumer app), in which case we don't want to show user actions
return DeveloperPreferences.useRootModuleMenuAsHomeScreen();
}
@Override
protected void updateUiAfterDataPullOrSend(String message, boolean success) {
displayToast(message);
if (usingNavDrawer()) {
navDrawerController.refreshItems();
}
menuView.refreshItems();
}
@Override
public void refreshUI() {
// empty intentionally
}
@Override
public boolean usesSubmissionProgressBar() {
return true;
}
}