com.pyamsoft.dontsuckmp.album.TrackListItem.java Source code

Java tutorial

Introduction

Here is the source code for com.pyamsoft.dontsuckmp.album.TrackListItem.java

Source

/*
 * 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);
        }
    }
}