From 03f1ce1dc035b922c02dbb064cf996077c6c604c Mon Sep 17 00:00:00 2001 From: Sam Bosley Date: Mon, 21 Jan 2013 15:16:47 -0800 Subject: [PATCH] More resource caching for images used as defaults for asyncimageviews --- .../astrid/actfm/CommentsFragment.java | 5 ++ .../astrid/actfm/EditPeopleControlSet.java | 7 +- .../astrid/actfm/TagCommentsFragment.java | 3 +- .../astrid/actfm/TagSettingsActivity.java | 3 +- .../todoroo/astrid/actfm/TagViewFragment.java | 5 +- .../astrid/notes/EditNoteActivity.java | 6 +- .../astrid/people/PersonViewFragment.java | 3 +- .../astrid/reminders/ReminderDialog.java | 5 +- .../reusable/FeaturedTaskListFragment.java | 3 +- .../astrid/activity/TaskListFragment.java | 5 +- .../todoroo/astrid/adapter/FilterAdapter.java | 7 +- .../todoroo/astrid/adapter/TaskAdapter.java | 5 +- .../todoroo/astrid/ui/PeopleContainer.java | 14 ++-- .../astrid/utility/ResourceDrawableCache.java | 71 +++++++++++++++++++ 14 files changed, 124 insertions(+), 18 deletions(-) create mode 100644 astrid/src/com/todoroo/astrid/utility/ResourceDrawableCache.java diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java index 7820811b6..6cc146a10 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/CommentsFragment.java @@ -7,6 +7,7 @@ package com.todoroo.astrid.actfm; import android.app.Activity; import android.content.Intent; +import android.content.res.Resources; import android.database.Cursor; import android.graphics.Bitmap; import android.os.Bundle; @@ -69,6 +70,8 @@ public abstract class CommentsFragment extends ListFragment { protected final ImageDiskCache imageCache; + protected Resources resources; + @Autowired ActFmSyncService actFmSyncService; @Autowired ActFmPreferenceService actFmPreferenceService; @@ -135,6 +138,8 @@ public abstract class CommentsFragment extends ListFragment { addCommentField.setOnTouchListener(onTouch); setUpUpdateList(); + + resources = getResources(); } protected void setUpUpdateList() { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java index 5d8606da4..d5bb966a3 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/EditPeopleControlSet.java @@ -20,6 +20,7 @@ import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.res.Resources; import android.database.Cursor; import android.graphics.Color; import android.net.Uri; @@ -78,6 +79,7 @@ import com.todoroo.astrid.ui.PeopleContainer; import com.todoroo.astrid.ui.PeopleContainer.OnAddNewPersonListener; import com.todoroo.astrid.ui.PeopleContainer.ParseSharedException; import com.todoroo.astrid.ui.PopupControlSet; +import com.todoroo.astrid.utility.ResourceDrawableCache; public class EditPeopleControlSet extends PopupControlSet { @@ -139,6 +141,8 @@ public class EditPeopleControlSet extends PopupControlSet { private boolean dontClearAssignedCustom = false; + private final Resources resources; + private final List listeners = new LinkedList(); public interface AssignedChangedListener { @@ -158,6 +162,7 @@ public class EditPeopleControlSet extends PopupControlSet { public EditPeopleControlSet(Activity activity, Fragment fragment, int viewLayout, int displayViewLayout, int title, int loginRequestCode) { super(activity, viewLayout, displayViewLayout, title); DependencyInjectionService.getInstance().inject(this); + this.resources = activity.getResources(); this.loginRequestCode = loginRequestCode; this.fragment = fragment; displayText.setText(activity.getString(R.string.TEA_control_who)); @@ -583,7 +588,7 @@ public class EditPeopleControlSet extends PopupControlSet { ctv.setChecked(false); } AsyncImageView image = (AsyncImageView) convertView.findViewById(R.id.person_image); - image.setDefaultImageResource(R.drawable.icn_default_person_image); + image.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); image.setUrl(getItem(position).user.optString("picture")); if (getItem(position).user.optInt("default_picture", 0) > 0) { image.setDefaultImageResource(getItem(position).user.optInt("default_picture")); diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java index 2ab1d9734..2b558c237 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagCommentsFragment.java @@ -27,6 +27,7 @@ import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.utility.AstridPreferences; +import com.todoroo.astrid.utility.ResourceDrawableCache; public class TagCommentsFragment extends CommentsFragment { @@ -102,7 +103,7 @@ public class TagCommentsFragment extends CommentsFragment { AsyncImageView imageView = (AsyncImageView) header.findViewById(R.id.tag_picture); - imageView.setDefaultImageResource(TagService.getDefaultImageIDForTag(tagName)); + imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(getResources(), TagService.getDefaultImageIDForTag(tagName))); imageView.setUrl(tagData.getValue(TagData.PICTURE)); } diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java index d3d03c3bc..da63d120d 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagSettingsActivity.java @@ -58,6 +58,7 @@ import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.ui.PeopleContainer; import com.todoroo.astrid.ui.PeopleContainer.ParseSharedException; import com.todoroo.astrid.utility.AstridPreferences; +import com.todoroo.astrid.utility.ResourceDrawableCache; import com.todoroo.astrid.welcome.HelpInfoPopover; public class TagSettingsActivity extends FragmentActivity { @@ -207,7 +208,7 @@ public class TagSettingsActivity extends FragmentActivity { findViewById(R.id.tag_silenced_container).setVisibility(View.VISIBLE); } - picture.setDefaultImageResource(TagService.getDefaultImageIDForTag(tagData.getValue(TagData.NAME))); + picture.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(getResources(), TagService.getDefaultImageIDForTag(tagData.getValue(TagData.NAME)))); picture.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { diff --git a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java index 468eac34b..86bf75710 100644 --- a/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/actfm/TagViewFragment.java @@ -67,6 +67,7 @@ import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.tags.TagService.Tag; import com.todoroo.astrid.utility.AstridPreferences; import com.todoroo.astrid.utility.Flags; +import com.todoroo.astrid.utility.ResourceDrawableCache; import com.todoroo.astrid.welcome.HelpInfoPopover; public class TagViewFragment extends TaskListFragment { @@ -380,9 +381,9 @@ public class TagViewFragment extends TaskListFragment { image.setLayoutParams(new LinearLayout.LayoutParams((int)(43 * displayMetrics.density), (int)(43 * displayMetrics.density))); - image.setDefaultImageResource(R.drawable.icn_default_person_image); + image.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); if (member.optLong("id", Task.USER_ID_SELF) == Task.USER_ID_UNASSIGNED) - image.setDefaultImageResource(R.drawable.icn_anyone); + image.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_anyone)); image.setScaleType(ImageView.ScaleType.FIT_CENTER); try { diff --git a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java index bb521e97d..793807edd 100644 --- a/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/notes/EditNoteActivity.java @@ -16,6 +16,7 @@ import org.json.JSONObject; import android.app.Activity; import android.content.Intent; +import android.content.res.Resources; import android.database.sqlite.SQLiteException; import android.graphics.Bitmap; import android.graphics.Color; @@ -74,6 +75,7 @@ import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.timers.TimerActionControlSet.TimerActionListener; +import com.todoroo.astrid.utility.ResourceDrawableCache; public class EditNoteActivity extends LinearLayout implements TimerActionListener { @@ -100,6 +102,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene private ImageButton pictureButton; private Bitmap pendingCommentPicture = null; private final Fragment fragment; + private final Resources resources; private final ImageDiskCache imageCache; private final int cameraButton; private final String linkColor; @@ -118,6 +121,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene imageCache = ImageDiskCache.getInstance(); this.fragment = fragment; + this.resources = fragment.getResources(); linkColor = UpdateAdapter.getLinkColor(fragment); @@ -366,7 +370,7 @@ public class EditNoteActivity extends LinearLayout implements TimerActionListene public synchronized void bindView(View view, NoteOrUpdate item) { // picture final AsyncImageView pictureView = (AsyncImageView)view.findViewById(R.id.picture); { - pictureView.setDefaultImageResource(R.drawable.icn_default_person_image); + pictureView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); pictureView.setUrl(item.picture); } diff --git a/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java b/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java index b41699f75..3d5e08793 100644 --- a/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/people/PersonViewFragment.java @@ -30,6 +30,7 @@ import com.todoroo.astrid.service.SyncV2Service; import com.todoroo.astrid.service.ThemeService; import com.todoroo.astrid.sync.SyncResultCallback; import com.todoroo.astrid.sync.SyncResultCallbackAdapter; +import com.todoroo.astrid.utility.ResourceDrawableCache; public class PersonViewFragment extends TaskListFragment { @@ -70,7 +71,7 @@ public class PersonViewFragment extends TaskListFragment { private void setupUserHeader() { if (user != null) { - userImage.setDefaultImageResource(R.drawable.icn_default_person_image); + userImage.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); userImage.setUrl(user.getValue(User.PICTURE)); userSubtitle.setText(getUserSubtitleText()); setupUserStatusButton(); diff --git a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderDialog.java b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderDialog.java index 0c897a972..b6fe45781 100644 --- a/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderDialog.java +++ b/astrid/plugin-src/com/todoroo/astrid/reminders/ReminderDialog.java @@ -17,6 +17,7 @@ import android.app.Activity; import android.app.Dialog; import android.app.TimePickerDialog.OnTimeSetListener; import android.content.Intent; +import android.content.res.Resources; import android.text.TextUtils; import android.util.DisplayMetrics; import android.view.View; @@ -43,6 +44,7 @@ import com.todoroo.astrid.service.StatisticsConstants; import com.todoroo.astrid.service.StatisticsService; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.tags.TagService; +import com.todoroo.astrid.utility.ResourceDrawableCache; /** * A dialog that shows your task reminder @@ -158,6 +160,7 @@ public class ReminderDialog extends Dialog { private void addFacesToReminder(Activity activity, Task task) { if (task == null) return; + Resources resources = activity.getResources(); LinkedHashSet pictureUrls = new LinkedHashSet(); AtomicBoolean isSharedTask = new AtomicBoolean(false); @@ -179,7 +182,7 @@ public class ReminderDialog extends Dialog { int count = 0; for (String url : pictureUrls) { AsyncImageView image = new AsyncImageView(activity); - image.setDefaultImageResource(R.drawable.icn_default_person_image); + image.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); image.setUrl(url); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams((int) (35 * metrics.density), (int) (35 * metrics.density)); diff --git a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java index a073710ef..37fa52576 100644 --- a/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java +++ b/astrid/plugin-src/com/todoroo/astrid/tags/reusable/FeaturedTaskListFragment.java @@ -32,6 +32,7 @@ import com.todoroo.astrid.service.TagDataService; import com.todoroo.astrid.tags.TagFilterExposer; import com.todoroo.astrid.tags.TagService.Tag; import com.todoroo.astrid.utility.Flags; +import com.todoroo.astrid.utility.ResourceDrawableCache; public class FeaturedTaskListFragment extends TagViewFragment { @@ -92,7 +93,7 @@ public class FeaturedTaskListFragment extends TagViewFragment { String imageUrl = tagData.getValue(TagData.PICTURE); if (!TextUtils.isEmpty(imageUrl)) { imageView.setVisibility(View.VISIBLE); - imageView.setDefaultImageResource(R.drawable.default_list_0); + imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.default_list_0)); imageView.setUrl(imageUrl); } else { imageView.setVisibility(View.GONE); diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java index c4d16e013..0d11dbc93 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListFragment.java @@ -21,6 +21,7 @@ import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.res.Resources; import android.database.Cursor; import android.database.sqlite.SQLiteException; import android.graphics.drawable.Drawable; @@ -185,6 +186,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, new ReminderDebugContextActions.WhenReminder(), }; + protected Resources resources; protected TaskAdapter taskAdapter = null; protected DetailReceiver detailReceiver = new DetailReceiver(); protected RefreshReceiver refreshReceiver = new RefreshReceiver(); @@ -333,6 +335,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // We have a menu item to show in action bar. + resources = getResources(); setHasOptionsMenu(true); syncActionHelper = new SyncActionHelper(getActivity(), this); setUpUiComponents(); @@ -380,7 +383,7 @@ public class TaskListFragment extends ListFragment implements OnScrollListener, filter = extras.getParcelable(TOKEN_FILTER); extras.remove(TOKEN_FILTER); // Otherwise writing this filter to parcel gives infinite recursion } else { - filter = CoreFilterExposer.buildInboxFilter(getResources()); + filter = CoreFilterExposer.buildInboxFilter(resources); } filter.setFilterQueryOverride(null); isInbox = CoreFilterExposer.isInbox(filter); diff --git a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java index 39759d255..a22ec662e 100644 --- a/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/FilterAdapter.java @@ -22,6 +22,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.res.Resources; import android.graphics.Color; import android.os.Bundle; import android.os.Parcelable; @@ -59,6 +60,7 @@ import com.todoroo.astrid.service.MarketStrategy.NookMarketStrategy; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.utility.Constants; +import com.todoroo.astrid.utility.ResourceDrawableCache; public class FilterAdapter extends ArrayAdapter { @@ -79,6 +81,8 @@ public class FilterAdapter extends ArrayAdapter { /** parent activity */ protected final Activity activity; + protected final Resources resources; + /** owner listview */ protected ListView listView; @@ -133,6 +137,7 @@ public class FilterAdapter extends ArrayAdapter { DependencyInjectionService.getInstance().inject(this); this.activity = activity; + this.resources = activity.getResources(); this.listView = listView; this.layout = rowLayout; this.skipIntentFilters = skipIntentFilters; @@ -578,7 +583,7 @@ public class FilterAdapter extends ArrayAdapter { viewHolder.name.getLayoutParams().height = (int) (58 * metrics.density); if(!nook && filter instanceof FilterWithUpdate) { viewHolder.urlImage.setVisibility(View.VISIBLE); - viewHolder.urlImage.setDefaultImageResource(TagService.getDefaultImageIDForTag(viewHolder.name.getText().toString())); + viewHolder.urlImage.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, TagService.getDefaultImageIDForTag(viewHolder.name.getText().toString()))); viewHolder.urlImage.setUrl(((FilterWithUpdate)filter).imageUrl); } diff --git a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java index 724313a4d..30b76f750 100644 --- a/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java +++ b/astrid/src/com/todoroo/astrid/adapter/TaskAdapter.java @@ -95,6 +95,7 @@ import com.todoroo.astrid.tags.TagService; import com.todoroo.astrid.timers.TimerDecorationExposer; import com.todoroo.astrid.ui.CheckableImageView; import com.todoroo.astrid.utility.Constants; +import com.todoroo.astrid.utility.ResourceDrawableCache; /** * Adapter for displaying a user's tasks as a list @@ -1144,9 +1145,9 @@ public class TaskAdapter extends CursorAdapter implements Filterable { if (viewHolder.isTaskRabbit) { pictureView.setDefaultImageResource(R.drawable.task_rabbit_image); } else if(task.getValue(Task.USER_ID) == Task.USER_ID_UNASSIGNED) - pictureView.setDefaultImageResource(R.drawable.icn_anyone_transparent); + pictureView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_anyone_transparent)); else { - pictureView.setDefaultImageResource(R.drawable.icn_default_person_image); + pictureView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); try { JSONObject user = new JSONObject(task.getValue(Task.USER)); pictureView.setUrl(user.optString("picture")); //$NON-NLS-1$ diff --git a/astrid/src/com/todoroo/astrid/ui/PeopleContainer.java b/astrid/src/com/todoroo/astrid/ui/PeopleContainer.java index a816d9f73..884cb32b1 100644 --- a/astrid/src/com/todoroo/astrid/ui/PeopleContainer.java +++ b/astrid/src/com/todoroo/astrid/ui/PeopleContainer.java @@ -13,6 +13,7 @@ import org.json.JSONObject; import android.app.Activity; import android.content.Context; +import android.content.res.Resources; import android.content.res.TypedArray; import android.text.Editable; import android.text.TextUtils; @@ -31,6 +32,7 @@ import com.timsu.astrid.R; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.actfm.sync.ActFmPreferenceService; import com.todoroo.astrid.helper.AsyncImageView; +import com.todoroo.astrid.utility.ResourceDrawableCache; public class PeopleContainer extends LinearLayout { @@ -38,11 +40,13 @@ public class PeopleContainer extends LinearLayout { protected OnAddNewPersonListener onAddNewPerson = null; + protected Resources resources; + // --- accessors and boilerplate public PeopleContainer(Context arg0, AttributeSet attrs) { super(arg0, attrs); - + resources = arg0.getResources(); TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ContactsAutoComplete); completeTags = a.getBoolean(R.styleable.ContactsAutoComplete_completeTags, false); @@ -113,11 +117,11 @@ public class PeopleContainer extends LinearLayout { findViewById(R.id.icon); imageView.setUrl(image); if (TextUtils.isEmpty(textView.getText())) { - imageView.setDefaultImageResource(R.drawable.icn_add_contact); + imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_add_contact)); removeButton.setVisibility(View.GONE); } else { - imageView.setDefaultImageResource(R.drawable.icn_default_person_image); + imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); removeButton.setVisibility(View.VISIBLE); } @@ -140,11 +144,11 @@ public class PeopleContainer extends LinearLayout { addPerson("", ""); } if (TextUtils.isEmpty(textView.getText())) { - imageView.setDefaultImageResource(R.drawable.icn_add_contact); + imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_add_contact)); removeButton.setVisibility(View.GONE); } else { - imageView.setDefaultImageResource(R.drawable.icn_default_person_image); + imageView.setDefaultImageDrawable(ResourceDrawableCache.getImageDrawableFromId(resources, R.drawable.icn_default_person_image)); removeButton.setVisibility(View.VISIBLE); } diff --git a/astrid/src/com/todoroo/astrid/utility/ResourceDrawableCache.java b/astrid/src/com/todoroo/astrid/utility/ResourceDrawableCache.java new file mode 100644 index 000000000..166bb9c42 --- /dev/null +++ b/astrid/src/com/todoroo/astrid/utility/ResourceDrawableCache.java @@ -0,0 +1,71 @@ +package com.todoroo.astrid.utility; + +import android.content.res.Resources; +import android.graphics.drawable.Drawable; + +import com.timsu.astrid.R; +import com.todoroo.andlib.service.ContextManager; + +/** + * This class caches common images based on resource ID to avoid + * the performance hit from constantly loading them from disk + * @author Sam + * + */ +public class ResourceDrawableCache { + + private static Drawable ICN_DEFAULT_PERSON_IMAGE = null; + private static Drawable ICN_ANYONE = null; + private static Drawable ICN_ANYONE_TRANSPARENT = null; + private static Drawable ICN_ADD_CONTACT = null; + + private static Drawable DEFAULT_LIST_0 = null; + private static Drawable DEFAULT_LIST_1 = null; + private static Drawable DEFAULT_LIST_2 = null; + private static Drawable DEFAULT_LIST_3 = null; + + + public static Drawable getImageDrawableFromId(Resources r, int resId) { + if (r == null) + r = ContextManager.getResources(); + switch(resId) { + case R.drawable.icn_default_person_image: + if (ICN_DEFAULT_PERSON_IMAGE == null) + ICN_DEFAULT_PERSON_IMAGE = r.getDrawable(resId); + return ICN_DEFAULT_PERSON_IMAGE; + case R.drawable.icn_anyone: + if (ICN_ANYONE == null) + ICN_ANYONE = r.getDrawable(resId); + return ICN_ANYONE; + case R.drawable.icn_anyone_transparent: + if (ICN_ANYONE_TRANSPARENT == null) + ICN_ANYONE_TRANSPARENT = r.getDrawable(resId); + return ICN_ANYONE_TRANSPARENT; + case R.drawable.icn_add_contact: + if (ICN_ADD_CONTACT == null) + ICN_ADD_CONTACT = r.getDrawable(resId); + return ICN_ADD_CONTACT; + + case R.drawable.default_list_0: + if (DEFAULT_LIST_0 == null) + DEFAULT_LIST_0 = r.getDrawable(resId); + return DEFAULT_LIST_0; + case R.drawable.default_list_1: + if (DEFAULT_LIST_1 == null) + DEFAULT_LIST_1 = r.getDrawable(resId); + return DEFAULT_LIST_1; + case R.drawable.default_list_2: + if (DEFAULT_LIST_2 == null) + DEFAULT_LIST_2 = r.getDrawable(resId); + return DEFAULT_LIST_2; + case R.drawable.default_list_3: + if (DEFAULT_LIST_3 == null) + DEFAULT_LIST_3 = r.getDrawable(resId); + return DEFAULT_LIST_3; + + default: + return r.getDrawable(resId); + } + } + +}