package org.mtransit.android.ui.view; import java.util.ArrayList; import org.mtransit.android.R; import org.mtransit.android.commons.CollectionUtils; import org.mtransit.android.commons.ColorUtils; import org.mtransit.android.commons.HtmlUtils; import org.mtransit.android.commons.MTLog; import org.mtransit.android.commons.data.ServiceUpdate; import org.mtransit.android.data.POIManager; import org.mtransit.android.util.LinkUtils; import android.content.Context; import android.text.TextUtils; import android.view.View; import android.widget.TextView; public class POIServiceUpdateViewController implements MTLog.Loggable { private static final String TAG = POIServiceUpdateViewController.class.getSimpleName(); @Override public String getLogTag() { return TAG; } public static Integer getLayoutResId() { return R.layout.layout_poi_service_update; } public static void initViewHolder(POIManager poim, View view) { ServiceUpdatesListViewHolder serviceUpdatesListViewHolder = new ServiceUpdatesListViewHolder(); serviceUpdatesListViewHolder.layout = view; serviceUpdatesListViewHolder.messagesTv = (TextView) view.findViewById(R.id.service_udapte_text); view.setTag(serviceUpdatesListViewHolder); } public static void updateView(Context context, View view, POIManager poim, POIViewController.POIDataProvider dataProvider) { if (view == null) { return; } if (view.getTag() == null || !(view.getTag() instanceof ServiceUpdatesListViewHolder)) { initViewHolder(poim, view); } ServiceUpdatesListViewHolder holder = (ServiceUpdatesListViewHolder) view.getTag(); updateView(context, holder, poim, dataProvider); } private static void updateView(Context context, ServiceUpdatesListViewHolder serviceUpdatesListViewHolder, POIManager poim, POIViewController.POIDataProvider dataProvider) { if (dataProvider == null || !dataProvider.isShowingStatus() || poim == null || serviceUpdatesListViewHolder == null) { if (serviceUpdatesListViewHolder != null) { serviceUpdatesListViewHolder.layout.setVisibility(View.GONE); } return; } updateServiceUpdatesView(context, serviceUpdatesListViewHolder, poim, dataProvider); } public static void updateServiceUpdate(Context context, View view, ArrayList<ServiceUpdate> serviceUpdates, POIViewController.POIDataProvider dataProvider) { if (view == null || view.getTag() == null || !(view.getTag() instanceof ServiceUpdatesListViewHolder)) { return; } ServiceUpdatesListViewHolder holder = (ServiceUpdatesListViewHolder) view.getTag(); updateServiceUpdatesView(context, holder, serviceUpdates, dataProvider); } private static void updateServiceUpdatesView(Context context, ServiceUpdatesListViewHolder serviceUpdatesListViewHolder, POIManager poim, POIViewController.POIDataProvider dataProvider) { if (serviceUpdatesListViewHolder != null) { if (dataProvider != null && dataProvider.isShowingServiceUpdates() && poim != null) { poim.setServiceUpdateLoaderListener(dataProvider); updateServiceUpdatesView(context, serviceUpdatesListViewHolder, poim.getServiceUpdates(context), dataProvider); } else { serviceUpdatesListViewHolder.layout.setVisibility(View.GONE); } } } private static void updateServiceUpdatesView(Context context, ServiceUpdatesListViewHolder serviceUpdatesListViewHolder, ArrayList<ServiceUpdate> serviceUpdates, POIViewController.POIDataProvider dataProvider) { int serviceMessageDisplayed = 0; boolean isWarning = false; if (dataProvider != null && CollectionUtils.getSize(serviceUpdates) != 0) { StringBuilder ssb = new StringBuilder(); if (serviceUpdates != null) { for (ServiceUpdate serviceUpdate : serviceUpdates) { if (serviceUpdate.getSeverity() == ServiceUpdate.SEVERITY_NONE) { continue; } if (TextUtils.isEmpty(serviceUpdate.getText()) && TextUtils.isEmpty(serviceUpdate.getTextHTML())) { continue; } if (ssb.length() > 0) { ssb.append(HtmlUtils.BR).append(HtmlUtils.BR); } String thisMsgFromHtml = serviceUpdate.getTextHTML(); if (serviceUpdate.isSeverityWarning()) { thisMsgFromHtml = HtmlUtils.applyFontColor(thisMsgFromHtml, ColorUtils.toRGBColor(ColorUtils.getTextColorSecondary(context))); } else { thisMsgFromHtml = HtmlUtils.applyFontColor(thisMsgFromHtml, ColorUtils.toRGBColor(ColorUtils.getTextColorTertiary(context))); } ssb.append(thisMsgFromHtml); if (!isWarning && serviceUpdate.isSeverityWarning()) { isWarning = true; } serviceMessageDisplayed++; } } serviceUpdatesListViewHolder.messagesTv.setText(LinkUtils.linkifyHtml(ssb.toString(), true)); serviceUpdatesListViewHolder.messagesTv.setMovementMethod(LinkUtils.LinkMovementMethodInterceptop.getInstance(dataProvider)); } if (serviceMessageDisplayed == 0) { serviceUpdatesListViewHolder.layout.setVisibility(View.GONE); } else { serviceUpdatesListViewHolder.layout.setVisibility(View.VISIBLE); } } private static class ServiceUpdatesListViewHolder { View layout; TextView messagesTv; } }