package com.kuxhausen.huemore.editmood;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.GridView;
import com.kuxhausen.huemore.R;
import com.kuxhausen.huemore.state.BulbState;
import java.util.ArrayList;
import java.util.HashSet;
public class RecentStatesFragment extends Fragment implements
EditStateDialogFragment.StateSelector,
OnClickListener {
private BulbState mInitialState;
private GridView mGrid;
private StateCellAdapter mCellAdapter;
private int mLastSelectedPosition = -1;
private ArrayList<StateCell> mList;
private EditStateDialogFragment mParent;
@Override
public void initialize(EditStateDialogFragment statePage, BulbState initialState) {
mParent = statePage;
loadPrevious(mParent.getStateGridFragment().moodRows);
mInitialState = initialState;
}
private void loadPrevious(ArrayList<StateRow> rows) {
mList = extractUniques(rows);
}
public static ArrayList<StateCell> extractUniques(ArrayList<StateRow> rows) {
ArrayList<StateCell> list = new ArrayList<StateCell>();
HashSet<String> bulbStateHash = new HashSet<String>();
for (StateRow row : rows) {
for (StateCell cell : row.cellRay) {
StateCell localCopy = cell.clone();
if (!bulbStateHash.contains(localCopy.hs.toString())
&& (!localCopy.hs.isEmpty())) {
bulbStateHash.add(localCopy.hs.toString());
list.add(localCopy);
}
}
}
return list;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View myView = inflater.inflate(R.layout.grid_view, null);
mGrid = (GridView) myView.findViewById(R.id.myGrid);
mCellAdapter = new StateCellAdapter(this, mList, this);
mGrid.setAdapter(mCellAdapter);
stateChanged(mInitialState);
return myView;
}
@Override
public void onClick(View v) {
if (mLastSelectedPosition > -1) {
mList.get(mLastSelectedPosition).selected = false;
}
mLastSelectedPosition = (Integer) v.getTag();
mList.get(mLastSelectedPosition).selected = true;
mCellAdapter.notifyDataSetChanged();
mParent.setStateIfVisible(mList.get(mLastSelectedPosition).hs, this,
EditStatePager.RECENT_PAGE);
}
@Override
public BulbState getState() {
if (mLastSelectedPosition > -1) {
return mList.get(mLastSelectedPosition).hs;
} else {
return new BulbState();
}
}
@Override
public void stateChanged(BulbState newState) {
int newSelectedPosition = -1;
for (int i = 0; i < mList.size(); i++) {
if (mList.get(i).hs.toString().equals(newState.toString())) {
newSelectedPosition = i;
mList.get(i).selected = true;
} else {
mList.get(i).selected = false;
}
}
if (mLastSelectedPosition != newSelectedPosition) {
mLastSelectedPosition = newSelectedPosition;
if (mCellAdapter != null) {
mCellAdapter.notifyDataSetChanged();
}
}
}
}