/* © 2010 Stephan Reichholf <stephan at reichholf dot net> * * Licensed under the Create-Commons Attribution-Noncommercial-Share Alike 3.0 Unported * http://creativecommons.org/licenses/by-nc-sa/3.0/ */ package net.reichholf.dreamdroid.fragment; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.support.v4.content.Loader; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import net.reichholf.dreamdroid.R; import net.reichholf.dreamdroid.activities.abs.MultiPaneHandler; import net.reichholf.dreamdroid.fragment.abs.BaseHttpFragment; import net.reichholf.dreamdroid.fragment.dialogs.EpgDetailDialog; import net.reichholf.dreamdroid.helpers.ExtendedHashMap; import net.reichholf.dreamdroid.helpers.Statics; import net.reichholf.dreamdroid.helpers.enigma2.CurrentService; import net.reichholf.dreamdroid.helpers.enigma2.Event; import net.reichholf.dreamdroid.helpers.enigma2.Picon; import net.reichholf.dreamdroid.helpers.enigma2.Service; import net.reichholf.dreamdroid.helpers.enigma2.Timer; import net.reichholf.dreamdroid.helpers.enigma2.requesthandler.CurrentServiceRequestHandler; import net.reichholf.dreamdroid.helpers.enigma2.requesthandler.TimerAddByEventIdRequestHandler; import net.reichholf.dreamdroid.intents.IntentFactory; import net.reichholf.dreamdroid.loader.AsyncSimpleLoader; import net.reichholf.dreamdroid.loader.LoaderResult; import java.util.ArrayList; import java.util.HashMap; /** * Shows some information about the service currently running on TV * * @author sreichholf * */ public class CurrentServiceFragment extends BaseHttpFragment { @SuppressWarnings("unused") private static final String LOG_TAG = "CurrentServiceFragment"; private ExtendedHashMap mCurrent; private TextView mServiceName; private TextView mProvider; private TextView mNowStart; private TextView mNowTitle; private TextView mNowDesc; private TextView mNowDuration; private TextView mNextStart; private TextView mNextTitle; private TextView mNextDesc; private TextView mNextDuration; private Button mStream; private LinearLayout mNowLayout; private LinearLayout mNextLayout; protected ProgressDialog mProgress; private ExtendedHashMap mService; private ExtendedHashMap mNow; private ExtendedHashMap mNext; private ExtendedHashMap mCurrentItem; private boolean mCurrentServiceReady; @SuppressWarnings("unchecked") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initTitles(getString(R.string.current_service)); mCurrentServiceReady = false; if (savedInstanceState != null) { // currents service data HashMap<String, Object> current = savedInstanceState.getParcelable("current"); mCurrent = new ExtendedHashMap(current); // currently selected item (now or next dialog) HashMap<String, Object> currentItem = savedInstanceState .getParcelable("currentItem"); mCurrentItem = new ExtendedHashMap(currentItem); } } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.current_service, container, false); mServiceName = (TextView) view.findViewById(R.id.service_name); mProvider = (TextView) view.findViewById(R.id.provider); mNowStart = (TextView) view.findViewById(R.id.event_now_start); mNowTitle = (TextView) view.findViewById(R.id.event_now_title); mNowDesc = (TextView) view.findViewById(R.id.event_now_desc); mNowDuration = (TextView) view.findViewById(R.id.event_now_duration); mNextStart = (TextView) view.findViewById(R.id.event_next_start); mNextTitle = (TextView) view.findViewById(R.id.event_next_title); mNextDesc = (TextView) view.findViewById(R.id.event_next_desc); mNextDuration = (TextView) view.findViewById(R.id.event_next_duration); mStream = (Button) view.findViewById(R.id.ButtonStream); mNowLayout = (LinearLayout) view.findViewById(R.id.layout_now); mNextLayout = (LinearLayout) view.findViewById(R.id.layout_next); registerOnClickListener(mNowLayout, Statics.ITEM_NOW); registerOnClickListener(mNextLayout, Statics.ITEM_NEXT); registerOnClickListener(mStream, Statics.ITEM_STREAM); return view; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { if (mCurrent == null || mCurrent.isEmpty()) mReload = true; super.onViewCreated(view, savedInstanceState); if(!mReload) applyData(0, mCurrent); } @Override public void onSaveInstanceState(Bundle outState) { outState.putParcelable("currentItem", mCurrentItem); outState.putParcelable("current", mCurrent); super.onSaveInstanceState(outState); } /** * Register an <code>OnClickListener</code> for a view and a specific item * ID (<code>ITEM_*</code> statics) * * @param v * The view an OnClickListener should be registered for * @param id * The id used to identify the item clicked (<code>ITEM_*</code> * statics) */ protected void registerOnClickListener(View v, final int id) { v.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onItemSelected(id); } }); } /** * @param id */ @Override protected boolean onItemSelected(int id) { if(!mCurrentServiceReady){ showToast(getText(R.string.not_available)); return true; } String ref; switch (id) { case Statics.ITEM_NOW: showEpgDetail(mNow); return true; case Statics.ITEM_NEXT: showEpgDetail(mNext); return true; case Statics.ITEM_STREAM: ref = mService.getString(Service.KEY_REFERENCE); String name = mService.getString(Service.KEY_NAME); if (!"".equals(ref) && ref != null) { streamService(ref, name); } else { showToast(getText(R.string.not_available)); } return true; default: return super.onItemSelected(id); } } private void showEpgDetail(ExtendedHashMap event) { if (event != null) { mCurrentItem = event; Bundle args = new Bundle(); args.putParcelable("currentItem", mCurrentItem); ((MultiPaneHandler) getAppCompatActivity()).showDialogFragment(EpgDetailDialog.class, args, "current_epg_detail_dialog"); } } /** * Called after loading the current service has finished to update the * GUI-Content */ @Override public void applyData(int loaderId, ExtendedHashMap content) { if (content != null && !content.isEmpty()) { mCurrent = content; mCurrentServiceReady = true; mService = (ExtendedHashMap) mCurrent.get(CurrentService.KEY_SERVICE); @SuppressWarnings("unchecked") ArrayList<ExtendedHashMap> events = (ArrayList<ExtendedHashMap>) mCurrent.get(CurrentService.KEY_EVENTS); mNow = events.get(0); mNext = events.get(1); mServiceName.setText(mService.getString(CurrentService.KEY_SERVICE_NAME)); mProvider.setText(mService.getString(CurrentService.KEY_SERVICE_PROVIDER)); // Now mNowStart.setText(mNow.getString(Event.KEY_EVENT_START_READABLE)); mNowTitle.setText(mNow.getString(Event.KEY_EVENT_TITLE)); mNowDesc.setText(mNow.getString(Event.KEY_EVENT_DESCRIPTION_EXTENDED, "")); mNowDuration.setText(mNow.getString(Event.KEY_EVENT_DURATION_READABLE)); // Next mNextStart.setText(mNext.getString(Event.KEY_EVENT_START_READABLE)); mNextTitle.setText(mNext.getString(Event.KEY_EVENT_TITLE)); mNextDesc.setText(mNext.getString(Event.KEY_EVENT_DESCRIPTION_EXTENDED, "")); mNextDuration.setText(mNext.getString(Event.KEY_EVENT_DURATION_READABLE)); ImageView piconView = (ImageView) getView().findViewById(R.id.picon); Picon.setPiconForView(getAppCompatActivity(), piconView, mService, Statics.TAG_PICON); } else { showToast(getText(R.string.not_available)); } } /** * @param event */ protected void setTimerByEventData(ExtendedHashMap event) { Timer.editUsingEvent((MultiPaneHandler) getAppCompatActivity(), event, this); } /** * @param event */ protected void setTimerById(ExtendedHashMap event) { if (mProgress != null) { if (mProgress.isShowing()) { mProgress.dismiss(); } } mProgress = ProgressDialog.show(getAppCompatActivity(), "", getText(R.string.saving), true); execSimpleResultTask(new TimerAddByEventIdRequestHandler(), Timer.getEventIdParams(event)); } /* * (non-Javadoc) * * @see * net.reichholf.dreamdroid.abstivities.AbstractHttpListActivity#onSimpleResult * (boolean, net.reichholf.dreamdroid.helpers.ExtendedHashMap) */ public void onSimpleResult(boolean success, ExtendedHashMap result) { if (mProgress != null) { if (mProgress.isShowing()) { mProgress.dismiss(); } } super.onSimpleResult(success, result); } /** * @param ref * A ServiceReference */ private void streamService(String ref, String name) { Intent intent = IntentFactory.getStreamServiceIntent(getAppCompatActivity(), ref, name); startActivity(intent); } @Override public void onDialogAction(int action, Object details, String dialogTag) { switch (action) { case Statics.ACTION_SET_TIMER: setTimerById(mCurrentItem); break; case Statics.ACTION_EDIT_TIMER: setTimerByEventData(mCurrentItem); break; case Statics.ACTION_FIND_SIMILAR: findSimilarEvents(mCurrentItem); break; case Statics.ACTION_IMDB: IntentFactory.queryIMDb(getAppCompatActivity(), mCurrentItem); break; } } @Override public Loader<LoaderResult<ExtendedHashMap>> onCreateLoader(int id, Bundle args) { return new AsyncSimpleLoader(getAppCompatActivity(), new CurrentServiceRequestHandler(), args); } }