package org.commcare.activities; import android.annotation.SuppressLint; import android.os.Build; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.view.ViewTreeObserver; import org.commcare.CommCareApp; import org.commcare.CommCareApplication; import org.commcare.adapters.HomeScreenAdapter; import org.commcare.dalvik.R; import org.commcare.interfaces.CommCareActivityUIController; import org.commcare.preferences.CommCarePreferences; import org.commcare.preferences.DeveloperPreferences; import org.commcare.suite.model.Profile; import java.util.Vector; /** * Handles UI of the normal home screen * * @author Aliza Stone (astone@dimagi.com) */ public class StandardHomeActivityUIController implements CommCareActivityUIController { private final StandardHomeActivity activity; private HomeScreenAdapter adapter; public StandardHomeActivityUIController(StandardHomeActivity activity) { this.activity = activity; } @Override public void setupUI() { activity.setContentView(R.layout.home_screen); adapter = new HomeScreenAdapter(activity, getHiddenButtons(), StandardHomeActivity.isDemoUser()); setupGridView(); } @Override public void refreshView() { if (adapter != null) { // adapter can be null if backstack was cleared for memory reasons adapter.notifyDataSetChanged(); } } private static Vector<String> getHiddenButtons() { CommCareApp ccApp = CommCareApplication.instance().getCurrentApp(); Vector<String> hiddenButtons = new Vector<>(); Profile p = ccApp.getCommCarePlatform().getCurrentProfile(); if ((p != null && !p.isFeatureActive(Profile.FEATURE_REVIEW)) || !CommCarePreferences.isSavedFormsEnabled()) { hiddenButtons.add("saved"); } if (!CommCarePreferences.isIncompleteFormsEnabled()) { hiddenButtons.add("incomplete"); } if (!DeveloperPreferences.isHomeReportEnabled()) { hiddenButtons.add("report"); } return hiddenButtons; } private void setupGridView() { final RecyclerView grid = (RecyclerView)activity.findViewById(R.id.home_gridview_buttons); grid.setHasFixedSize(false); StaggeredGridLayoutManager gridView = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL); grid.setLayoutManager(gridView); grid.setItemAnimator(null); grid.setAdapter(adapter); grid.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @SuppressLint("NewApi") @Override public void onGlobalLayout() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { grid.getViewTreeObserver().removeGlobalOnLayoutListener(this); } else { grid.getViewTreeObserver().removeOnGlobalLayoutListener(this); } grid.requestLayout(); adapter.notifyDataSetChanged(); activity.rebuildOptionsMenu(); } }); } protected void updateSyncButtonMessage(String message) { // Manually route message payloads since RecyclerView payloads are a pain in the ass adapter.setMessagePayload(adapter.getSyncButtonPosition(), message); adapter.notifyItemChanged(adapter.getSyncButtonPosition()); } }