Java tutorial
/* * Copyright 2016 Peter Kenji Yamanaka * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.pyamsoft.dontsuckmp.album; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.media.MediaMetadataCompat; import android.support.v7.widget.RecyclerView; import android.text.format.DateUtils; import android.view.View; import com.mikepenz.fastadapter.items.GenericAbstractItem; import com.pyamsoft.dontsuckmp.R; import com.pyamsoft.dontsuckmp.databinding.AdapterItemTrackBinding; import com.pyamsoft.dontsuckmp.model.Track; import com.pyamsoft.dontsuckmp.uicore.FilterableItem; import java.util.List; import java.util.Locale; import timber.log.Timber; class TrackListItem extends GenericAbstractItem<Track, TrackListItem, TrackListItem.ViewHolder> implements FilterableItem<TrackListItem, TrackListItem.ViewHolder> { @Nullable private MediaMetadataCompat metadata; TrackListItem(@NonNull Track track) { this(track, null); } TrackListItem(@NonNull Track track, @Nullable MediaMetadataCompat metadata) { super(track); this.metadata = metadata; } void setMetadata(@Nullable MediaMetadataCompat metadata) { this.metadata = metadata; } @Override public int getType() { return R.id.fastadapter_tracklist_item; } @Override public int getLayoutRes() { return R.layout.adapter_item_track; } @Override public void bindView(ViewHolder holder, List<Object> payloads) { super.bindView(holder, payloads); Track track = getModel(); holder.binding.trackTitle.setText(track.title()); final long duration = track.duration(); holder.binding.trackDuration.setText(DateUtils.formatElapsedTime(duration / 1000)); String trackNumber; final int disc = track.disc(); if (disc == 0) { trackNumber = ""; } else { trackNumber = String.format(Locale.US, "%d/", disc); } final int number = track.track(); if (number == 0) { trackNumber += "?"; } else { trackNumber += String.valueOf(number); } holder.binding.trackNumber.setText(trackNumber); final int playIcon; final String trackMediaId = track.mediaId(); if (metadata == null) { playIcon = R.drawable.ic_play_arrow_24dp; } else { final String mediaId = metadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID); Timber.i("Metadata id: %s", mediaId); Timber.d("Compare to metadata id: %s", trackMediaId); if (trackMediaId.equals(mediaId)) { playIcon = R.drawable.ic_now_playing_24dp; } else { playIcon = R.drawable.ic_play_arrow_24dp; } } // TODO load play icon } @Override public void unbindView(ViewHolder holder) { super.unbindView(holder); holder.binding.trackNumber.setText(null); holder.binding.trackDuration.setText(null); holder.binding.trackTitle.setText(null); holder.binding.trackPlayingIcon.setImageDrawable(null); } @Override public boolean filterAgainst(@NonNull String query) { final String name = getModel().title().toLowerCase().trim(); Timber.d("Filter predicate: '%s' against %s", query, name); return !name.contains(query); } @Override public ViewHolder getViewHolder(View view) { return new ViewHolder(view); } static class ViewHolder extends RecyclerView.ViewHolder { @NonNull final AdapterItemTrackBinding binding; ViewHolder(View itemView) { super(itemView); binding = AdapterItemTrackBinding.bind(itemView); } } }