diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java | 89 |
1 files changed, 84 insertions, 5 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java b/app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java index 18741e02..2ce0386d 100644 --- a/app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java +++ b/app/src/main/java/net/lacolaco/smileessence/view/adapter/EventListAdapter.java @@ -25,13 +25,92 @@ package net.lacolaco.smileessence.view.adapter; import android.app.Activity; -import net.lacolaco.smileessence.viewmodel.EventViewModel; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import com.android.volley.toolbox.NetworkImageView; +import net.lacolaco.smileessence.R; +import net.lacolaco.smileessence.World; +import net.lacolaco.smileessence.data.ImageCache; +import net.lacolaco.smileessence.entity.Event; +import net.lacolaco.smileessence.entity.RBinding; +import net.lacolaco.smileessence.preference.UserPreferenceHelper; +import net.lacolaco.smileessence.util.StringUtils; +import net.lacolaco.smileessence.util.UIObserverBundle; +import net.lacolaco.smileessence.view.DialogHelper; +import net.lacolaco.smileessence.view.dialog.UserDetailDialogFragment; +import net.lacolaco.smileessence.view.listener.ListItemClickListener; -public class EventListAdapter extends UnorderedCustomListAdapter<EventViewModel> { +import java.lang.ref.WeakReference; +import java.util.List; - // --------------------------- CONSTRUCTORS --------------------------- +public class EventListAdapter extends CustomListAdapter<Event> { + private final World world; + private final Activity activity; - public EventListAdapter(Activity activity) { - super(activity); + public EventListAdapter(World world, Activity activity) { + super(); + this.world = world; + this.activity = activity; + } + + @Override + protected List<Event> getList() { + return world.getEvents(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Event event = getItem(position); + if (convertView == null) { + convertView = activity.getLayoutInflater().inflate(R.layout.list_item_status, null); + } + UIObserverBundle bundle = (UIObserverBundle) convertView.getTag(); + if (bundle != null) { + bundle.detachAll(); + } else { + bundle = new UIObserverBundle(); + convertView.setTag(bundle); + } + + int textSize = UserPreferenceHelper.getInstance().getTextSize(); + + TextView header = (TextView) convertView.findViewById(R.id.textview_status_header); + header.setTextSize(textSize); + + updateViewUser(event, convertView); + + TextView content = (TextView) convertView.findViewById(R.id.textview_status_text); + content.setTextSize(textSize); + content.setText(event.getTargetObject() != null ? event.getTargetObject().getText() : ""); + TextView footer = (TextView) convertView.findViewById(R.id.textview_status_footer); + footer.setTextSize(textSize - 2); + footer.setText(StringUtils.dateToString(event.getCreatedAt())); + ImageView favorited = (ImageView) convertView.findViewById(R.id.imageview_status_favorited); + favorited.setVisibility(View.GONE); + convertView.setOnClickListener(new ListItemClickListener(activity, () -> { + UserDetailDialogFragment fragment = new UserDetailDialogFragment(); + fragment.setUserID(event.getSource().getId()); + DialogHelper.showDialog(activity, fragment); + })); + + final WeakReference<View> weakView = new WeakReference<>(convertView); + bundle.attach(event.getSource(), changes -> { + View strongView = weakView.get(); + if (strongView != null && changes.contains(RBinding.BASIC)) + updateViewUser(event, strongView); + }); + + return convertView; + } + + private void updateViewUser(Event event, View convertedView) { + NetworkImageView icon = (NetworkImageView) convertedView.findViewById(R.id.imageview_status_icon); + String iconUrl = event.getSource().getProfileImageUrlOriginal(); + ImageCache.getInstance().setImageToView(iconUrl, icon); + + TextView header = (TextView) convertedView.findViewById(R.id.textview_status_header); + header.setText(event.getFormattedString()); } } |