package com.infonuascape.osrshelper.widget; import java.util.ArrayList; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; import android.util.Log; import android.widget.RemoteViews; import android.widget.RemoteViewsService; import com.infonuascape.osrshelper.R; import com.infonuascape.osrshelper.db.OSRSHelperDataSource; import com.infonuascape.osrshelper.hiscore.HiscoreHelper; import com.infonuascape.osrshelper.utils.Skill; import com.infonuascape.osrshelper.utils.SkillsEnum.SkillType; import com.infonuascape.osrshelper.utils.exceptions.PlayerNotFoundException; import com.infonuascape.osrshelper.utils.players.PlayerSkills; public class OSRSWidgetService extends RemoteViewsService { @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { return new StackRemoteViewsFactory(this.getApplicationContext(), intent); } } class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { private final String TAG = "OSRSWidgetService"; private ArrayList<Skill> skills; private Context mContext; private PlayerSkills playerSkills; private int mAppWidgetId; public StackRemoteViewsFactory(Context context, Intent intent) { mContext = context; mAppWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } public void onCreate() { Log.i(TAG, "onCreate"); skills = new ArrayList<Skill>(); playerSkills = new PlayerSkills(); skills = PlayerSkills.getSkillsInOrderForRSView(playerSkills); } public void onDestroy() { // In onDestroy() you should tear down anything that was setup for your // data source, // eg. cursors, connections, etc. skills.clear(); } public int getCount() { return skills.size(); } public RemoteViews getViewAt(int position) { // position will always range from 0 to getCount() - 1. // We construct a remote views item based on our widget item xml file, // and set the // text based on the position. RemoteViews rv = new RemoteViews(mContext.getPackageName(), R.layout.rs_view_item); Skill skill = skills.get(position); // set value into textview rv.setTextViewText(R.id.skill_level, skill.getLevel() + ""); if(skill.getSkillType() != SkillType.Overall){ rv.setImageViewResource(R.id.skill_image, skill.getDrawableInt()); } else { rv.setImageViewResource(R.id.skill_image, R.drawable.overall_rsview); } // Return the remote views object. return rv; } public RemoteViews getLoadingView() { return null; } public int getViewTypeCount() { return 1; } public long getItemId(int position) { return position; } public boolean hasStableIds() { return true; } public void onDataSetChanged() { Log.i(TAG, "onDataSetChanged"); OSRSHelperDataSource osrsHelperDataSource = new OSRSHelperDataSource(mContext); osrsHelperDataSource.open(); final String username = osrsHelperDataSource.getUsernameForWidget(mAppWidgetId); osrsHelperDataSource.close(); HiscoreHelper hiscoreHelper = new HiscoreHelper(); hiscoreHelper.setUserName(username); try { playerSkills = hiscoreHelper.getPlayerStats(); skills = PlayerSkills.getSkillsInOrderForRSView(playerSkills); } catch (PlayerNotFoundException e) { if(playerSkills == null) { playerSkills = new PlayerSkills(); skills = PlayerSkills.getSkillsInOrderForRSView(playerSkills); } e.printStackTrace(); } catch (Exception uhe) { if(playerSkills == null) { playerSkills = new PlayerSkills(); skills = PlayerSkills.getSkillsInOrderForRSView(playerSkills); } uhe.printStackTrace(); } } }