package in.co.praveenkumar.mdroid.fragment; import in.co.praveenkumar.R; import in.co.praveenkumar.mdroid.activity.CalendarActivity; import in.co.praveenkumar.mdroid.activity.ContactActivity; import in.co.praveenkumar.mdroid.activity.CourseContentActivity; import in.co.praveenkumar.mdroid.activity.DiscussionActivity; import in.co.praveenkumar.mdroid.activity.MessagingActivity; import in.co.praveenkumar.mdroid.activity.PostActivity; import in.co.praveenkumar.mdroid.helper.IconMap; import in.co.praveenkumar.mdroid.helper.SessionSetting; import in.co.praveenkumar.mdroid.helper.Workaround; import in.co.praveenkumar.mdroid.model.MDroidNotification; import in.co.praveenkumar.mdroid.service.MDroidService; import java.util.List; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class NotificationFragment extends Fragment implements OnRefreshListener { final String DEBUG_TAG = "NotificationFragment"; List<MDroidNotification> notifications; Context context; NotificationListAdapter adapter; SessionSetting session; LinearLayout chatEmptyLayout; SwipeRefreshLayout swipeLayout; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { context = getActivity(); View rootView = inflater.inflate(R.layout.frag_notification, container, false); chatEmptyLayout = (LinearLayout) rootView .findViewById(R.id.chat_empty_layout); ListView notificationList = (ListView) rootView .findViewById(R.id.content_list); // Get sites info session = new SessionSetting(getActivity()); notifications = MDroidNotification .find(MDroidNotification.class, "siteid = ? and read = ?", session.getCurrentSiteId() + "", "0"); adapter = new NotificationListAdapter(getActivity()); notificationList.setAdapter(adapter); // OnItem click notificationList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { MDroidNotification notification = notifications.get(position); int extras = notification.getExtras(); Intent i = null; switch (notification.getType()) { case MDroidNotification.TYPE_CONTACT: i = new Intent(context, ContactActivity.class); break; case MDroidNotification.TYPE_COURSE_CONTENT: i = new Intent(context, CourseContentActivity.class); i.putExtra("courseid", extras); break; case MDroidNotification.TYPE_EVENT: i = new Intent(context, CalendarActivity.class); break; case MDroidNotification.TYPE_FORUM: i = new Intent(context, CourseContentActivity.class); i.putExtra("courseid", extras); break; case MDroidNotification.TYPE_FORUM_TOPIC: i = new Intent(context, DiscussionActivity.class); i.putExtra("forumid", extras); break; case MDroidNotification.TYPE_FORUM_REPLY: i = new Intent(context, PostActivity.class); i.putExtra("discussionid", extras); break; case MDroidNotification.TYPE_MESSAGE: i = new Intent(context, MessagingActivity.class); break; case MDroidNotification.TYPE_PARTICIPANT: i = new Intent(context, CourseContentActivity.class); i.putExtra("courseid", extras); break; default: Toast.makeText(context, "Unknown notification type! Please report!", Toast.LENGTH_LONG).show(); break; } if (i != null) { notification.setRead(true); notification.save(); context.startActivity(i); } } }); swipeLayout = (SwipeRefreshLayout) rootView .findViewById(R.id.swipe_refresh); Workaround.linkSwipeRefreshAndListView(swipeLayout, notificationList); swipeLayout.setOnRefreshListener(this); return rootView; } @Override public void onResume() { super.onResume(); // Recheck notifications list notifications = MDroidNotification .find(MDroidNotification.class, "siteid = ? and read = ?", session.getCurrentSiteId() + "", "0"); adapter.notifyDataSetChanged(); } public class NotificationListAdapter extends BaseAdapter { private final Context context; public NotificationListAdapter(Context context) { this.context = context; if (!notifications.isEmpty()) chatEmptyLayout.setVisibility(LinearLayout.GONE); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.list_item_notification, parent, false); viewHolder.icon = (ImageView) convertView .findViewById(R.id.list_notification_icon); viewHolder.title = (TextView) convertView .findViewById(R.id.list_notification_title); viewHolder.content = (TextView) convertView .findViewById(R.id.list_notification_content); // Save the holder with the view convertView.setTag(viewHolder); } else { // Just use the viewHolder and avoid findviewbyid() viewHolder = (ViewHolder) convertView.getTag(); } // Set texts viewHolder.icon.setImageResource(IconMap .notificationIcon(notifications.get(position).getType())); viewHolder.title.setText(notifications.get(position).getTitle()); String content = notifications.get(position).getContent(); if (content == null) content = ""; else content = Html.fromHtml(content).toString().trim(); viewHolder.content.setText(content); return convertView; } @Override public int getCount() { return notifications.size(); } @Override public Object getItem(int position) { return notifications.get(position); } @Override public long getItemId(int position) { return position; } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); if (!notifications.isEmpty()) chatEmptyLayout.setVisibility(LinearLayout.GONE); else chatEmptyLayout.setVisibility(LinearLayout.VISIBLE); } } static class ViewHolder { ImageView icon; TextView title; TextView content; } @Override public void onRefresh() { SharedPreferences settings = PreferenceManager .getDefaultSharedPreferences(context); // Check if notifications are enabled if (!settings.getBoolean("notifications", false)) Toast.makeText(context, "Please turn on notifications from settings", Toast.LENGTH_LONG).show(); else { Toast.makeText(context, "Checking started. You will be notified", Toast.LENGTH_LONG).show(); // Start service Intent i = new Intent(context, MDroidService.class); i.putExtra("forceCheck", true); i.putExtra("siteid", session.getCurrentSiteId()); context.startService(i); } swipeLayout.setRefreshing(false); } }