package org.example.mqtt.data; import java.text.SimpleDateFormat; import java.util.Date; import org.example.mqtt.MqttApplication; import org.example.mqtt.R; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.graphics.drawable.Drawable; import android.support.v4.widget.CursorAdapter; import android.support.v4.widget.SimpleCursorAdapter; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; // cursor adaptor that translates the date from long to string public class NotificationCursorAdapter extends SimpleCursorAdapter { private final String TAG = "NotificationCursorAdapter"; private Context context; public NotificationCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { super(context, layout, c, from, to, flags); this.context = context; } @Override public void bindView(View v, Context context, Cursor c) { super.bindView(v, context, c); // the value is empty, we clear its linear layout String value = c.getString(c.getColumnIndex(NotificationData.VALUE)); String description = c.getString(c.getColumnIndex(NotificationData.DESCRIPTION)); Log.d(TAG, "value is " + value); LinearLayout valueLayout = (LinearLayout) v.findViewById(R.id.valueLayout); if(null == value || value.isEmpty()){ valueLayout.setVisibility(View.GONE); }else{ valueLayout.setVisibility(View.VISIBLE); // if I do not set it explicitly to visible //, Android seems to get confused and set some of them to gone } TextView descText = (TextView) v.findViewById(R.id.description); if(null == description || description.isEmpty()){ descText.setVisibility(View.GONE); }else{ descText.setVisibility(View.VISIBLE); // if I do not set it explicitly to visible //, Android seems to get confused and set some of them to gone } String type = c.getString(c.getColumnIndex(NotificationData.ALERT_TYPE)); String imgName = MqttApplication.iconList.get(type); if(null != imgName){ int id = context.getResources().getIdentifier("org.example.mqtt:drawable/" + imgName, null, null); ImageView img = (ImageView) v.findViewById(R.id.list_image); Drawable drawable = context.getResources().getDrawable( id ); img.setImageDrawable(drawable); } } @Override public void setViewText(TextView v, String text) { int view = v.getId(); switch (view){ // time column from service_specifc_notif_row.xml or all_status_row_layout.xml case R.id.notif_date: case R.id.timestamp: long l = Long.valueOf(text).longValue(); Date d = new Date(l); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try{ text = format.format(d.getTime()); } catch(IllegalArgumentException e){ Log.e(TAG, "long is " + l + " and exception is " + e.getMessage()); } break; // replace service URI by name case R.id.service: MqttApplication app = (MqttApplication) context.getApplicationContext(); String servName = app.getServiceNameFromURI(text); text= servName; break; } super.setViewText(v,text); } }