package net.reichholf.dreamdroid.fragment;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.content.Loader;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
import com.wdullaer.materialdatetimepicker.time.RadialPickerLayout;
import com.wdullaer.materialdatetimepicker.time.TimePickerDialog;
import net.reichholf.dreamdroid.R;
import net.reichholf.dreamdroid.activities.abs.MultiPaneHandler;
import net.reichholf.dreamdroid.adapter.recyclerview.EpgAdapter;
import net.reichholf.dreamdroid.fragment.abs.BaseHttpRecyclerEventFragment;
import net.reichholf.dreamdroid.helpers.ExtendedHashMap;
import net.reichholf.dreamdroid.helpers.NameValuePair;
import net.reichholf.dreamdroid.helpers.Statics;
import net.reichholf.dreamdroid.helpers.enigma2.Event;
import net.reichholf.dreamdroid.helpers.enigma2.Service;
import net.reichholf.dreamdroid.helpers.enigma2.URIStore;
import net.reichholf.dreamdroid.helpers.enigma2.requesthandler.EventListRequestHandler;
import net.reichholf.dreamdroid.loader.AsyncListLoader;
import net.reichholf.dreamdroid.loader.LoaderResult;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
/**
* Created by Stephan on 01.11.2014.
*/
public class EpgBouquetFragment extends BaseHttpRecyclerEventFragment implements DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener {
private static final String LOG_TAG = EpgBouquetFragment.class.getSimpleName();
private TextView mDateView;
private TextView mTimeView;
private int mTime;
private boolean mWaitingForPicker;
@Override
public void onCreate(Bundle savedInstanceState) {
mCardListStyle = true;
mEnableReload = true;
super.onCreate(savedInstanceState);
initTitle(getString(R.string.epg));
mReference = getArguments().getString(Event.KEY_SERVICE_REFERENCE);
mName = getArguments().getString(Event.KEY_SERVICE_NAME);
mTime = (int) (Calendar.getInstance().getTimeInMillis() / 1000);
mWaitingForPicker = false;
mReload = true;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.card_recycler_content, container, false);
View header = inflater.inflate(R.layout.date_time_picker_header, null, false);
Calendar cal = getCalendar();
SimpleDateFormat today = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat now = new SimpleDateFormat("HH:mm");
mDateView = (TextView) header.findViewById(R.id.textViewDate);
mDateView.setText(today.format(cal.getTime()));
mDateView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar calendar = getCalendar();
final DatePickerDialog datePickerDialog = DatePickerDialog.newInstance(EpgBouquetFragment.this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
getMultiPaneHandler().showDialogFragment(datePickerDialog, "epg_bouquet_date_picker");
}
});
mTimeView = (TextView) header.findViewById(R.id.textViewTime);
mTimeView.setText(now.format(cal.getTime()));
mTimeView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar calendar = getCalendar();
final TimePickerDialog timePickerDialog = TimePickerDialog.newInstance(EpgBouquetFragment.this, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true);
getMultiPaneHandler().showDialogFragment(timePickerDialog, "epg_bouquet_time_picker");
}
});
FrameLayout frame = (FrameLayout) getAppCompatActivity().findViewById(R.id.content_header);
frame.removeAllViews();
frame.addView(header);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
setAdapter();
if (mMapList.size() <= 0)
Log.w(LOG_TAG, String.format("%s", mTime));
super.onActivityCreated(savedInstanceState);
}
@Override
public void createOptionsMenu(Menu menu, MenuInflater inflater) {
super.createOptionsMenu(menu, inflater);
inflater.inflate(R.menu.epgbouquet, menu);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_OK)
return;
switch (requestCode) {
case Statics.REQUEST_PICK_BOUQUET:
ExtendedHashMap service = data.getParcelableExtra(PickServiceFragment.KEY_BOUQUET);
String reference = service.getString(Service.KEY_REFERENCE);
if (!reference.equals(mReference)) {
mReference = reference;
mName = service.getString(Service.KEY_NAME);
getRecyclerView().smoothScrollToPosition(0);
}
reload();
mWaitingForPicker = false;
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void reload() {
if(mReference != null && !mReference.isEmpty())
super.reload();
else if(!mWaitingForPicker)
pickBouquet();
}
/**
* Initializes the <code>SimpleTextAdapter</code>
*/
private void setAdapter() {
mAdapter = new EpgAdapter(mMapList, R.layout.epg_multi_service_list_item, new String[]{
Event.KEY_EVENT_TITLE, Event.KEY_SERVICE_NAME, Event.KEY_EVENT_DESCRIPTION_EXTENDED, Event.KEY_EVENT_START_READABLE,
Event.KEY_EVENT_DURATION_READABLE}, new int[]{R.id.event_title, R.id.service_name, R.id.event_short, R.id.event_start,
R.id.event_duration});
getRecyclerView().setAdapter(mAdapter);
}
@Override
public ArrayList<NameValuePair> getHttpParams(int loader) {
ArrayList<NameValuePair> params = new ArrayList<>();
params.add(new NameValuePair("bRef", mReference));
params.add(new NameValuePair("time", Integer.toString(mTime)));
return params;
}
@Override
public String getLoadFinishedTitle() {
return mName;
}
@Override
public Loader<LoaderResult<ArrayList<ExtendedHashMap>>> onCreateLoader(int id, Bundle args) {
return new AsyncListLoader(getAppCompatActivity(), new EventListRequestHandler(URIStore.EPG_BOUQUET), false, args);
}
@Override
protected boolean onItemSelected(int id) {
switch (id) {
case R.id.menu_pick_bouquet:
pickBouquet();
return true;
}
return super.onItemSelected(id);
}
@Override
public boolean hasHeader() {
return true;
}
private void pickBouquet() {
mWaitingForPicker = true;
PickServiceFragment f = new PickServiceFragment();
Bundle args = new Bundle();
ExtendedHashMap data = new ExtendedHashMap();
data.put(Service.KEY_REFERENCE, "default");
args.putSerializable(sData, data);
args.putString("action", Statics.INTENT_ACTION_PICK_BOUQUET);
f.setArguments(args);
f.setTargetFragment(this, Statics.REQUEST_PICK_BOUQUET);
((MultiPaneHandler) getAppCompatActivity()).showDetails(f, true);
}
private Calendar getCalendar() {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis((long) mTime * 1000);
return cal;
}
@Override
public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) {
Calendar cal = getCalendar();
if (cal.get(Calendar.YEAR) == year && cal.get(Calendar.MONTH) == month && cal.get(Calendar.DATE) == day)
return;
cal.set(year, month, day);
SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd");
mDateView.setText(dayFormat.format(cal.getTime()));
mTime = (int) (cal.getTimeInMillis() / 1000);
Log.i(LOG_TAG, String.format("%s", mTime));
reload();
}
@Override
public void onTimeSet(RadialPickerLayout radialPickerLayout, int hourOfDay, int minute, int second) {
Calendar cal = getCalendar();
if (cal.get(Calendar.HOUR_OF_DAY) == hourOfDay && cal.get(Calendar.MINUTE) == minute)
return;
cal.set(Calendar.HOUR_OF_DAY, hourOfDay);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, 0);
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
mTimeView.setText(timeFormat.format(cal.getTime()));
mTime = (int) (cal.getTimeInMillis() / 1000);
Log.i(LOG_TAG, String.format("%s", mTime));
reload();
}
}