// Copyright 2015 The Project Buendia Authors
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy
// of the License at: http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distrib-
// uted under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
// OR CONDITIONS OF ANY KIND, either express or implied. See the License for
// specific language governing permissions and limitations under the License.
package org.projectbuendia.client.ui.lists;
import android.app.ActionBar;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import org.projectbuendia.client.App;
import org.projectbuendia.client.AppSettings;
import org.projectbuendia.client.R;
import org.projectbuendia.client.filter.db.SimpleSelectionFilter;
import org.projectbuendia.client.ui.OdkActivityLauncher;
import org.projectbuendia.client.ui.SectionedSpinnerAdapter;
import org.projectbuendia.client.utils.Utils;
import javax.inject.Inject;
/** A list of patients with a choice of several filters in a dropdown menu. */
public class FilteredPatientListActivity extends BaseSearchablePatientListActivity {
private static final String SELECTED_FILTER_KEY = "selected_filter";
private PatientFilterController mFilterController;
private int mSelectedFilter = 0;
public static void start(Context caller) {
caller.startActivity(new Intent(caller, FilteredPatientListActivity.class));
}
@Override protected void onCreateImpl(Bundle savedInstanceState) {
super.onCreateImpl(savedInstanceState);
setContentView(R.layout.activity_patient_list);
if (savedInstanceState != null) {
mSelectedFilter = savedInstanceState.getInt(SELECTED_FILTER_KEY, 0);
}
mFilterController = new PatientFilterController(
new FilterUi(),
mCrudEventBus,
mAppModel,
mLocale);
mFilterController.setupActionBarAsync();
App.getInstance().inject(this);
}
@Override protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(SELECTED_FILTER_KEY, getActionBar().getSelectedNavigationIndex());
}
private final class FilterUi implements PatientFilterController.Ui {
@Override public void populateActionBar(final SimpleSelectionFilter[] filters) {
SectionedSpinnerAdapter<SimpleSelectionFilter> adapter = new SectionedSpinnerAdapter<>(
FilteredPatientListActivity.this,
R.layout.patient_list_spinner_dropdown_item,
R.layout.patient_list_spinner_expanded_dropdown_item,
R.layout.patient_list_spinner_expanded_section_divider,
filters);
ActionBar.OnNavigationListener callback = new ActionBar.OnNavigationListener() {
@Override public boolean onNavigationItemSelected(int position, long id) {
getSearchController().setFilter(filters[position]);
Utils.logUserAction("filter_selected",
"filter", filters[position].toString());
getSearchController().loadSearchResults();
return true;
}
};
final ActionBar actionBar = getActionBar();
actionBar.setLogo(R.drawable.ic_launcher);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(adapter, callback);
actionBar.setSelectedNavigationItem(mSelectedFilter);
getSearchController().setFilter(filters[mSelectedFilter]);
}
}
}