package neongarage.slakr.Assignment;
/**
* Created by Aaron on 1/22/2015.
*/
import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.TextView;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import neongarage.slakr.AddGradesActivity;
import neongarage.slakr.Course.Course;
import neongarage.slakr.Course.CourseAdapter;
import neongarage.slakr.MySQLiteHelper;
import neongarage.slakr.R;
public class AssignmentListFragment extends Fragment {
private RecyclerView mAssignmentRecyclerView;
private AssignmentAdapter assignmentAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private List<Assignment> assignments = new ArrayList<Assignment>();
private MySQLiteHelper db;
private String itemGrade;
private String itemName;
private long id;
private static int UPDATE_GRADE_REQUEST = 1;
private static int NEW_ASSIGNMENT_REQUEST = 2;
private Course c;
//The data to show
List<Map<String, String>> coursesList = new ArrayList<Map<String, String>>();
private View view;
private static final String TAG = "RecyclerViewFragment";
private static final String KEY_LAYOUT_MANAGER = "layoutManager";
private static final int SPAN_COUNT = 2;
private enum LayoutManagerType {
GRID_LAYOUT_MANAGER,
LINEAR_LAYOUT_MANAGER
}
protected LayoutManagerType mCurrentLayoutManagerType;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_assignment_list, container, false);
if (savedInstanceState != null) {
// Restore saved layout manager type.
mCurrentLayoutManagerType = (LayoutManagerType) savedInstanceState
.getSerializable(KEY_LAYOUT_MANAGER);
}
c = (Course) getActivity().getIntent().getParcelableExtra("course");
db = new MySQLiteHelper(getActivity());
assignments = db.getAssignmentsForCourse(c);
mAssignmentRecyclerView = (RecyclerView) view.findViewById(R.id.my_assignment_recycler_view);
mLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER;
if (savedInstanceState != null) {
// Restore saved layout manager type.
mCurrentLayoutManagerType = (LayoutManagerType) savedInstanceState
.getSerializable(KEY_LAYOUT_MANAGER);
}
setRecyclerViewLayoutManager(mCurrentLayoutManagerType);
assignmentAdapter = new AssignmentAdapter(assignments);
mAssignmentRecyclerView.setAdapter(assignmentAdapter);
return view;
}
public void setRecyclerViewLayoutManager(LayoutManagerType layoutManagerType) {
int scrollPosition = 0;
// If a layout manager has already been set, get current scroll position.
if (mAssignmentRecyclerView.getLayoutManager() != null) {
scrollPosition = ((LinearLayoutManager) mAssignmentRecyclerView.getLayoutManager())
.findFirstCompletelyVisibleItemPosition();
}
switch (layoutManagerType) {
case GRID_LAYOUT_MANAGER:
mLayoutManager = new GridLayoutManager(getActivity(), SPAN_COUNT);
mCurrentLayoutManagerType = LayoutManagerType.GRID_LAYOUT_MANAGER;
break;
case LINEAR_LAYOUT_MANAGER:
default:
mLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER;
break;
}
mAssignmentRecyclerView.setLayoutManager(mLayoutManager);
mAssignmentRecyclerView.scrollToPosition(scrollPosition);
mAssignmentRecyclerView.getItemAnimator();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
SeekBar gradeSeekBar = (SeekBar) view.findViewById(R.id.seekBar);
final TextView newGrade = (TextView) view.findViewById(R.id.desired_grade);
gradeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progress = 0;
@Override
public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
progress = progresValue;
}@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
newGrade.setText(progress + "%");
}
});
}
/* @Override
public void onListItemClick(ListView l, View v, int position, long click_id) {
id = click_id;
Log.i("FragmentList", "Item clicked: " + id);
TextView assignment = (TextView) v.findViewById(R.id.assignment_name);
Intent intent = new Intent(getActivity(), AddGradesActivity.class);
intent.putExtra("click_id", id);
startActivityForResult(intent, UPDATE_GRADE_REQUEST);
}
*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
long clickId = -1;
if (requestCode == UPDATE_GRADE_REQUEST) {
// Make sure the request was successful
if (resultCode == Activity.RESULT_OK) {
itemGrade = data.getStringExtra("item_grade");
clickId = data.getLongExtra("click_id", -1);
Log.i("FragmentList.onResult", "Item grade: " + itemGrade + " ID: " + id);
addGrade(itemGrade, (long)id);
}
}
if (requestCode == NEW_ASSIGNMENT_REQUEST){
//check if assignment activity was successful
if (resultCode == Activity.RESULT_OK){
itemGrade = data.getStringExtra("item_grade");
itemName = data.getStringExtra("item_name");
//TODO add a new item to the list view but now go to bed
//assignmentArray.add(itemName);
//assignmentAdapter = new AssignmentAdapter(getActivity(), R.layout.row_add_assignment, assignments);
//assignmentAdapter.notifyDataSetChanged();
}
}
}
public void addAssignment(Assignment assignment, Course c){
Log.i("FragmentList.addAssit", "Item Grade: " + assignment.getName());
String date = new SimpleDateFormat("MMMM dd, yyyy", Locale.US).format(new Date());
db.addAssignment(assignment, c.getDept(), c.getNum());
assignments.add(assignment);
assignmentAdapter.notifyItemInserted(assignments.size()-1);
}
private void addGrade(String grade, long id){
Log.i("FragmentList.addGrade", "Item grade: " + itemGrade + "ID: " + id);
View v = this.getView();
ListView lv = (ListView)view.findViewById(android.R.id.list);
TextView gradeView = (TextView) lv.getChildAt((int)id - lv.getFirstVisiblePosition()).findViewById(R.id.assignment_grade);
gradeView.setText(grade + '%');
String date = new SimpleDateFormat("MMMM dd, yyyy", Locale.US).format(new Date());
TextView mdate = (TextView) lv.getChildAt((int)id - lv.getFirstVisiblePosition()).findViewById(R.id.assignment_date);
mdate.setText(date);
assignmentAdapter.notifyDataSetChanged();
}
private HashMap<String, String> createCourse(String key, String name) {
HashMap<String, String> course = new HashMap<String, String>();
course.put(key, name);
return course;
}
public void addCourseItem(){
// We get the ListView component from the layout
// This is a simple adapter that accepts as parameter
// Context
// Data list
// The row layout that is used during the row creation
// The keys used to retrieve the data
// The View id used to show the data. The key number and the view id must match
//CourseAdapter courseAdp = new CourseAdapter(getActivity(),new String [10] );
//ListView listView = (ListView) getView().findViewById(R.id.course_list_view);
//setListAdapter(courseAdp);
String[] stringArray;
stringArray = new String[10];
for(int i=0; i < stringArray.length; i++){
stringArray[i] = "String " + i;
}
// ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, stringArray);
}
}