package com.code44.finance.ui; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Parcelable; import com.code44.finance.R; import com.code44.finance.data.model.Model; import java.util.List; import java.util.Set; public abstract class ModelListActivityOld extends DrawerActivity implements ModelListFragment.OnModelSelectedListener, ModelListFragment.OnModelsSelectedListener { public static final String RESULT_EXTRA_MODEL = "RESULT_EXTRA_MODEL"; public static final String RESULT_EXTRA_MODELS = "RESULT_EXTRA_MODELS"; private static final String EXTRA_MODE = ModelListActivityOld.class.getName() + ".EXTRA_MODE"; private static final String EXTRA_SELECTED_MODELS = ModelListActivityOld.class.getName() + ".EXTRA_SELECTED_MODELS"; protected ModelListFragment.Mode mode; protected Parcelable[] selectedModels; public static Intent makeIntentView(Context context, Class<? extends ModelListActivityOld> activityClass) { final Intent intent = makeIntentForActivity(context, activityClass); intent.putExtra(EXTRA_MODE, ModelListFragment.Mode.VIEW); return intent; } public static Intent makeIntentSelect(Context context, Class<? extends ModelListActivityOld> activityClass) { final Intent intent = makeIntentForActivity(context, activityClass); intent.putExtra(EXTRA_MODE, ModelListFragment.Mode.SELECT); return intent; } public static Intent makeIntentMultiSelect(Context context, Class<? extends ModelListActivityOld> activityClass, List<? extends Model> selectedModels) { final Intent intent = makeIntentForActivity(context, activityClass); intent.putExtra(EXTRA_MODE, ModelListFragment.Mode.MULTI_SELECT); final Parcelable[] parcelables = new Parcelable[selectedModels.size()]; int index = 0; for (Model model : selectedModels) { parcelables[index++] = model; } intent.putExtra(EXTRA_SELECTED_MODELS, parcelables); return intent; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); readExtras(); final int containerId = inflateActivity(); // Setup ActionBar if (mode == ModelListFragment.Mode.SELECT) { getSupportActionBar().setTitle(R.string.select); } final boolean addFragmentHere = containerId != 0; if (addFragmentHere && savedInstanceState == null) { ModelListFragment fragment = createModelsFragment(mode, selectedModels); if (fragment != null) { getSupportFragmentManager().beginTransaction().add(containerId, fragment).commit(); } } } @Override public void onModelSelected(Model model) { final Intent data = new Intent(); data.putExtra(RESULT_EXTRA_MODEL, model); setResult(RESULT_OK, data); finish(); } @Override public void onModelsSelected(Set<Model> models) { final Intent data = new Intent(); final Parcelable[] parcelables = new Parcelable[models.size()]; int index = 0; for (Model model : models) { parcelables[index++] = model; } data.putExtra(RESULT_EXTRA_MODELS, parcelables); setResult(RESULT_OK, data); finish(); } @Override public void onModelsSelectCanceled() { finish(); } protected int inflateActivity() { setContentView(R.layout.activity_simple); return R.id.content; } protected void readExtras() { mode = (ModelListFragment.Mode) getIntent().getSerializableExtra(EXTRA_MODE); selectedModels = getIntent().getParcelableArrayExtra(EXTRA_SELECTED_MODELS); if (mode == null) { throw new IllegalStateException("Activity " + ((Object) this).getClass().getName() + " must be created with Intent containing " + EXTRA_MODE + " with values from " + ModelListFragment.Mode.class.getName()); } } protected abstract ModelListFragment createModelsFragment(ModelListFragment.Mode mode, Parcelable[] selectedModels); }