package com.iwedia.service.content; import java.util.HashMap; import java.util.Map; import android.os.RemoteException; import android.util.Log; import com.iwedia.comm.content.IContentFilter; import com.iwedia.comm.enums.FilterType; import com.iwedia.service.IWEDIAService; /** * ContentManager is used to handle ContentList filters. * {@link com.iwedia.service.content.ContentFilterAll, * com.iwedia.service.content.ContentFilterApps, * com.iwedia.service.content.ContentFilterData, * com.iwedia.service.content.ContentFilterDVB_C, * com.iwedia.service.content.ContentFilterDVB_S, * com.iwedia.service.content.ContentFilterDVB_T, * com.iwedia.service.content.ContentFilterInputs, * com.iwedia.service.content.ContentFilterIP, * com.iwedia.service.content.ContentFilterMultimedia, * com.iwedia.service.content.ContentFilterPVRRecorded, * com.iwedia.service.content.ContentFilterPVRScheduled, * com.iwedia.service.content.ContentFilterRadio, * com.iwedia.service.content.ContentFilterWidgets}. * * @author Marko Zivanovic */ public class ContentManager { private final String LOG_TAG = "ContentManager"; private ContentListControl cControl; /** * Hash map of content filters. Hash map key represent filterType * {@link com.iwedia.comm.enums.FilterType}. The value of hash map represent * content filter, one of the following: * {@link com.iwedia.service.content.ContentFilterAll, * com.iwedia.service.content.ContentFilterApps, * com.iwedia.service.content.ContentFilterData, * com.iwedia.service.content.ContentFilterDVB_C, * com.iwedia.service.content.ContentFilterDVB_S, * com.iwedia.service.content.ContentFilterDVB_T, * com.iwedia.service.content.ContentFilterInputs, * com.iwedia.service.content.ContentFilterIP, * com.iwedia.service.content.ContentFilterMultimedia, * com.iwedia.service.content.ContentFilterPVRRecorded, * com.iwedia.service.content.ContentFilterPVRScheduled, * com.iwedia.service.content.ContentFilterRadio, * com.iwedia.service.content.ContentFilterWidgets}. */ private HashMap<Integer, IContentFilter> filters; /** * Currently active filter. One of the following: * {@link com.iwedia.service.content.ContentFilterAll, * com.iwedia.service.content.ContentFilterApps, * com.iwedia.service.content.ContentFilterData, * com.iwedia.service.content.ContentFilterDVB_C, * com.iwedia.service.content.ContentFilterDVB_S, * com.iwedia.service.content.ContentFilterDVB_T, * com.iwedia.service.content.ContentFilterInputs, * com.iwedia.service.content.ContentFilterIP, * com.iwedia.service.content.ContentFilterMultimedia, * com.iwedia.service.content.ContentFilterPVRRecorded, * com.iwedia.service.content.ContentFilterPVRScheduled, * com.iwedia.service.content.ContentFilterRadio, * com.iwedia.service.content.ContentFilterWidgets}. */ private IContentFilter activeFilter; /** * Default constructor. Initialize necessary fields. */ public ContentManager() { filters = new HashMap<Integer, IContentFilter>(); try { cControl = ((ContentListControl) IWEDIAService.getInstance() .getDtvManagerProxy().getContentListControl()); } catch (RemoteException e) { e.printStackTrace(); } } /** * This function is called in ContentListControl when MW service scan has * been finished to reinitialize all necessary fields of ContentFilters * after scan {@link com.iwedia.service.content.ContentFilterAll, * com.iwedia.service.content.ContentFilterApps, * com.iwedia.service.content.ContentFilterData, * com.iwedia.service.content.ContentFilterDVB_C, * com.iwedia.service.content.ContentFilterDVB_S, * com.iwedia.service.content.ContentFilterDVB_T, * com.iwedia.service.content.ContentFilterInputs, * com.iwedia.service.content.ContentFilterIP, * com.iwedia.service.content.ContentFilterMultimedia, * com.iwedia.service.content.ContentFilterPVRRecorded, * com.iwedia.service.content.ContentFilterPVRScheduled, * com.iwedia.service.content.ContentFilterRadio, * com.iwedia.service.content.ContentFilterWidgets}. */ public void reinitialize() { try { for (Map.Entry<Integer, IContentFilter> entry : filters.entrySet()) { IContentFilter singleFilter = entry.getValue(); if (singleFilter != null) { if (IWEDIAService.DEBUG) Log.e(LOG_TAG, "singleFilter.toInt():" + singleFilter.toInt()); if (singleFilter.toInt() != FilterType.ALL) { singleFilter.reinitialize(); } } } filters.get(FilterType.ALL).reinitialize(); } catch (Exception e) { e.printStackTrace(); } } /** * Returns Content filter by given filterType. * * @param filterType * one of the following: {@link com.iwedia.comm.enums.FilterType} . * Used as hash key to get specific filter. . * @return IContentFilter one of the following: * {@link com.iwedia.service.content.ContentFilterAll, * com.iwedia.service.content.ContentFilterApps, * com.iwedia.service.content.ContentFilterData, * com.iwedia.service.content.ContentFilterDVB_C, * com.iwedia.service.content.ContentFilterDVB_S, * com.iwedia.service.content.ContentFilterDVB_T, * com.iwedia.service.content.ContentFilterInputs, * com.iwedia.service.content.ContentFilterIP, * com.iwedia.service.content.ContentFilterMultimedia, * com.iwedia.service.content.ContentFilterPVRRecorded, * com.iwedia.service.content.ContentFilterPVRScheduled, * com.iwedia.service.content.ContentFilterRadio, * com.iwedia.service.content.ContentFilterWidgets}. */ public IContentFilter getContentFilter(int filterType) { /** * Get specific filter by filterType. */ IContentFilter filter = filters.get(filterType); /** * If filter was not already initialized, initialize it and add it to * filters hash map. */ if (filter == null) switch (filterType) { case FilterType.APPS: { if (IWEDIAService.DEBUG) { Log.e(LOG_TAG, "getContentFilter-null: APPS"); } addContentFilter(FilterType.APPS, new ContentFilterApps(cControl.getContentManager(), cControl.getRecenltyWatchedList())); break; } case FilterType.INPUTS: { if (IWEDIAService.DEBUG) { Log.e(LOG_TAG, "getContentFilter-null: INPUTS"); } addContentFilter( FilterType.INPUTS, new ContentFilterInputs(cControl .getContentManager(), cControl .getRecenltyWatchedList())); break; } case FilterType.WIDGETS: { if (IWEDIAService.DEBUG) { Log.e(LOG_TAG, "getContentFilter-null: WIDGETS"); } addContentFilter( FilterType.WIDGETS, new ContentFilterWidgets(cControl .getContentManager(), cControl .getRecenltyWatchedList())); break; } case FilterType.MULTIMEDIA: { if (IWEDIAService.DEBUG) { Log.e(LOG_TAG, "getContentFilter-null: MULTIMEDIA"); } addContentFilter(FilterType.MULTIMEDIA, new ContentFilterMultimedia()); break; } case FilterType.PVR_RECORDED: { if (IWEDIAService.DEBUG) { Log.e(LOG_TAG, "getContentFilter-null: PVR_RECORDED"); } addContentFilter(FilterType.PVR_RECORDED, cControl.getPvrRecordedFilter()); break; } case FilterType.PVR_SCHEDULED: { if (IWEDIAService.DEBUG) { Log.e(LOG_TAG, "getContentFilter-null: PVR_SCHEDULED"); } addContentFilter(FilterType.PVR_SCHEDULED, cControl.getPvrScheduledFilter()); break; } case FilterType.IP_STREAM: { if (IWEDIAService.DEBUG) { Log.e(LOG_TAG, "getContentFilter-null: IP_STREAM"); } addContentFilter(FilterType.IP_STREAM, new ContentFilterIP(cControl.getContentManager(), cControl.getRecenltyWatchedList())); break; } default: { if (IWEDIAService.DEBUG) { Log.e(LOG_TAG, "getContentFilter-null: FAVORITES"); } // TODO: filter type offset! odakle da ga vucem! addContentFilter( filterType, new ContentFilterServiceList(cControl .getContentManager(), filterType, cControl .getRecenltyWatchedList())); break; } } filter = filters.get(filterType); return filter; } /** * Adds new ContentFilter to hash map of available filters. * * @param filterType * one of the following: {@link com.iwedia.comm.enums.FilterType} . * filterType is used as hash key to get specific filter. * @param contentFilter * one of the following: * {@link com.iwedia.service.content.ContentFilterAll, * com.iwedia.service.content.ContentFilterApps, * com.iwedia.service.content.ContentFilterData, * com.iwedia.service.content.ContentFilterDVB_C, * com.iwedia.service.content.ContentFilterDVB_S, * com.iwedia.service.content.ContentFilterDVB_T, * com.iwedia.service.content.ContentFilterInputs, * com.iwedia.service.content.ContentFilterIP, * com.iwedia.service.content.ContentFilterMultimedia, * com.iwedia.service.content.ContentFilterPVRRecorded, * com.iwedia.service.content.ContentFilterPVRScheduled, * com.iwedia.service.content.ContentFilterRadio, * com.iwedia.service.content.ContentFilterWidgets}. */ public void addContentFilter(int filterType, IContentFilter contentFilter) { filters.put(filterType, contentFilter); this.activeFilter = contentFilter; } /** * Removes ContentFilter from hash map of available filters. * * @param filterType * one of the following: {@link com.iwedia.comm.enums.FilterType} . * filterType is used as hash key to get specific filter. * @return Removed filter if found, otherwise null */ public IContentFilter removeContentFilter(int filterType) { if (this.activeFilter.equals(filters.get(filterType))) { Log.d(LOG_TAG, "removeContentFilter - trying to remove active filter"); this.activeFilter = filters.get(FilterType.ALL); } return filters.remove(filterType); } /** * Sets currently active filter. * * @param filter * one of the following: * {@link com.iwedia.service.content.ContentFilterAll, * com.iwedia.service.content.ContentFilterApps, * com.iwedia.service.content.ContentFilterData, * com.iwedia.service.content.ContentFilterDVB_C, * com.iwedia.service.content.ContentFilterDVB_S, * com.iwedia.service.content.ContentFilterDVB_T, * com.iwedia.service.content.ContentFilterInputs, * com.iwedia.service.content.ContentFilterIP, * com.iwedia.service.content.ContentFilterMultimedia, * com.iwedia.service.content.ContentFilterPVRRecorded, * com.iwedia.service.content.ContentFilterPVRScheduled, * com.iwedia.service.content.ContentFilterRadio, * com.iwedia.service.content.ContentFilterWidgets}. */ public void setActiveFilter(IContentFilter filter) { this.activeFilter = filter; } /** * Returns currently active filter. * * @return one of the following: * {@link com.iwedia.service.content.ContentFilterAll, * com.iwedia.service.content.ContentFilterApps, * com.iwedia.service.content.ContentFilterData, * com.iwedia.service.content.ContentFilterDVB_C, * com.iwedia.service.content.ContentFilterDVB_S, * com.iwedia.service.content.ContentFilterDVB_T, * com.iwedia.service.content.ContentFilterInputs, * com.iwedia.service.content.ContentFilterIP, * com.iwedia.service.content.ContentFilterMultimedia, * com.iwedia.service.content.ContentFilterPVRRecorded, * com.iwedia.service.content.ContentFilterPVRScheduled, * com.iwedia.service.content.ContentFilterRadio, * com.iwedia.service.content.ContentFilterWidgets}. */ public IContentFilter getActiveFilter() { return activeFilter; } }