More resource caching for images used as defaults for asyncimageviews

pull/14/head
Sam Bosley 13 years ago
parent 27c964c4cc
commit 03f1ce1dc0

@ -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() {

@ -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<AssignedChangedListener> listeners = new LinkedList<AssignedChangedListener>();
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"));

@ -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));
}

@ -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) {

@ -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 {

@ -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);
}

@ -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();

@ -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<String> pictureUrls = new LinkedHashSet<String>();
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));

@ -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);

@ -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);

@ -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<Filter> {
@ -79,6 +81,8 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
/** parent activity */
protected final Activity activity;
protected final Resources resources;
/** owner listview */
protected ListView listView;
@ -133,6 +137,7 @@ public class FilterAdapter extends ArrayAdapter<Filter> {
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<Filter> {
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);
}

@ -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$

@ -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);
}

@ -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);
}
}
}
Loading…
Cancel
Save