/* This file is part of ZAX. ZAX is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ZAX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ZAX. If not, see <http://www.gnu.org/licenses/>. */ package com.inovex.zabbixmobile.data; import java.util.TreeSet; import android.annotation.TargetApi; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.os.Build; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import com.inovex.zabbixmobile.R; import com.inovex.zabbixmobile.activities.ProblemsActivity; import com.inovex.zabbixmobile.model.HostGroup; import com.inovex.zabbixmobile.model.Trigger; import com.inovex.zabbixmobile.model.TriggerSeverity; import com.j256.ormlite.android.apptools.OpenHelperManager; @TargetApi(Build.VERSION_CODES.HONEYCOMB) public class HomescreenCollectionWidgetService extends RemoteViewsService { @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { return new CollectionRemoteViewsFactory(this.getApplicationContext(), intent); } class CollectionRemoteViewsFactory implements RemoteViewsFactory { private Context mContext; private int mAppWidgetId; private TreeSet<Trigger> mWidgetItems = new TreeSet<Trigger>(); private DatabaseHelper mDatabaseHelper; public CollectionRemoteViewsFactory(Context context, Intent intent) { mContext = context; mAppWidgetId = intent.getIntExtra( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } @Override public void onCreate() { // set up database connection to be able to query the problems later if (mDatabaseHelper == null) { // set up SQLite connection using OrmLite mDatabaseHelper = OpenHelperManager.getHelper( getApplicationContext(), DatabaseHelper.class); } } @Override public void onDataSetChanged() { mWidgetItems.clear(); mWidgetItems.addAll(mDatabaseHelper .getProblemsBySeverityAndHostGroupId(TriggerSeverity.ALL, HostGroup.GROUP_ID_ALL)); } @Override public void onDestroy() { if (mDatabaseHelper != null) mDatabaseHelper.close(); } @Override public int getCount() { return mWidgetItems.size(); } @Override public RemoteViews getViewAt(int position) { RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.homescreen_widget_list_item); if (mWidgetItems.size() > position) { Trigger trigger = (Trigger) mWidgetItems.toArray()[position]; rv.setImageViewResource(R.id.status, trigger.getPriority() .getImageResourceId()); rv.setTextViewText(R.id.host, trigger.getHostNames()); rv.setTextViewText(R.id.description, trigger.getDescription()); // on click intent Intent fillInIntent = new Intent(); fillInIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); fillInIntent.putExtra(ProblemsActivity.ARG_TRIGGER_POSITION, position); rv.setOnClickFillInIntent(R.id.widget_item, fillInIntent); } return rv; } @Override public RemoteViews getLoadingView() { // TODO Auto-generated method stub return null; } @Override public int getViewTypeCount() { return 1; } @Override public long getItemId(int position) { return position; } @Override public boolean hasStableIds() { return false; } } }