package cl.monsoon.s1next.view.activity;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.view.View;
import android.widget.AdapterView;
import java.util.List;
import cl.monsoon.s1next.R;
import cl.monsoon.s1next.databinding.ToolbarSpinnerBinding;
import cl.monsoon.s1next.view.fragment.ForumFragment;
import cl.monsoon.s1next.view.internal.ToolbarDropDownInterface;
import cl.monsoon.s1next.viewmodel.DropDownItemListViewModel;
/**
* An Activity shows the forum groups.
* <p>
* This Activity has Spinner in Toolbar to switch between different forum groups.
*/
public final class ForumActivity extends BaseActivity
implements ToolbarDropDownInterface.Callback, AdapterView.OnItemSelectedListener {
/**
* The serialization (saved instance state) Bundle key representing
* the position of the selected spinner item.
*/
private static final String STATE_SPINNER_SELECTED_POSITION = "spinner_selected_position";
private ToolbarSpinnerBinding mToolbarSpinnerBinding;
/**
* Stores selected Spinner position.
*/
private int mSelectedPosition = 0;
private ToolbarDropDownInterface.OnItemSelectedListener onItemSelectedListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
Fragment fragment;
FragmentManager fragmentManager = getSupportFragmentManager();
if (savedInstanceState == null) {
fragment = new ForumFragment();
fragmentManager.beginTransaction().add(R.id.frame_layout, fragment, ForumFragment.TAG)
.commit();
} else {
mSelectedPosition = savedInstanceState.getInt(STATE_SPINNER_SELECTED_POSITION);
fragment = fragmentManager.findFragmentByTag(ForumFragment.TAG);
}
onItemSelectedListener = (ToolbarDropDownInterface.OnItemSelectedListener) fragment;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_SPINNER_SELECTED_POSITION, mSelectedPosition);
}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
mSelectedPosition = position;
onItemSelectedListener.onToolbarDropDownItemSelected(mSelectedPosition);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {}
@Override
public void setupToolbarDropDown(List<? extends CharSequence> dropDownItemList) {
if (mToolbarSpinnerBinding == null) {
setTitle(null);
// add Spinner to Toolbar
mToolbarSpinnerBinding = DataBindingUtil.inflate(getLayoutInflater(),
R.layout.toolbar_spinner, getToolbar().get(), true);
mToolbarSpinnerBinding.spinner.setOnItemSelectedListener(this);
// let spinner's parent to handle clicking event in order
// to increase spinner's clicking area.
mToolbarSpinnerBinding.spinnerContainer.setOnClickListener(v ->
mToolbarSpinnerBinding.spinner.performClick());
mToolbarSpinnerBinding.setDropDownItemListViewModel(new DropDownItemListViewModel());
}
DropDownItemListViewModel viewModel = mToolbarSpinnerBinding.getDropDownItemListViewModel();
viewModel.setSelectedItemPosition(mSelectedPosition);
viewModel.dropDownItemList.clear();
viewModel.dropDownItemList.addAll(dropDownItemList);
}
}