de.geeksfactory.opacclient.frontend.ResultsAdapter.java Source code

Java tutorial

Introduction

Here is the source code for de.geeksfactory.opacclient.frontend.ResultsAdapter.java

Source

/**
 * Copyright (C) 2013 by Raphael Michel under the MIT license:
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), 
 * to deal in the Software without restriction, including without limitation 
 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 
 * and/or sell copies of the Software, and to permit persons to whom the Software 
 * is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in 
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
 * DEALINGS IN THE SOFTWARE.
 */
package de.geeksfactory.opacclient.frontend;

import android.content.Context;
import android.net.ConnectivityManager;
import android.support.annotation.DrawableRes;
import android.support.v4.net.ConnectivityManagerCompat;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import org.apache.http.client.HttpClient;

import java.util.List;

import de.geeksfactory.opacclient.R;
import de.geeksfactory.opacclient.apis.ApacheBaseApi;
import de.geeksfactory.opacclient.apis.BaseApi;
import de.geeksfactory.opacclient.apis.OpacApi;
import de.geeksfactory.opacclient.networking.AndroidHttpClientFactory;
import de.geeksfactory.opacclient.networking.CoverDownloadTask;
import de.geeksfactory.opacclient.objects.CoverHolder;
import de.geeksfactory.opacclient.objects.SearchResult;
import de.geeksfactory.opacclient.objects.SearchResult.MediaType;
import de.geeksfactory.opacclient.storage.PreferenceDataSource;
import de.geeksfactory.opacclient.utils.BitmapUtils;

public class ResultsAdapter extends ArrayAdapter<SearchResult> {
    private List<SearchResult> objects;
    final int padding8dp;

    public ResultsAdapter(Context context, List<SearchResult> objects, OpacApi api) {
        super(context, R.layout.listitem_searchresult, objects);
        this.objects = objects;
        this.padding8dp = (int) (8 * context.getResources().getDisplayMetrics().density + 0.5f);
    }

    @DrawableRes
    public static int getResourceByMediaType(MediaType type) {
        switch (type) {
        case NONE:
            return 0;
        case BOOK:
            return R.drawable.type_book;
        case CD:
            return R.drawable.type_cd;
        case CD_SOFTWARE:
            return R.drawable.type_cd_software;
        case CD_MUSIC:
            return R.drawable.type_cd_music;
        case BLURAY:
            return R.drawable.type_bluray;
        case DVD:
            return R.drawable.type_dvd;
        case MOVIE:
            return R.drawable.type_movie;
        case AUDIOBOOK:
            return R.drawable.type_audiobook;
        case PACKAGE:
            return R.drawable.type_package;
        case GAME_CONSOLE:
        case GAME_CONSOLE_NINTENDO:
        case GAME_CONSOLE_PLAYSTATION:
        case GAME_CONSOLE_WII:
        case GAME_CONSOLE_XBOX:
            return R.drawable.type_game_console;
        case EBOOK:
            return R.drawable.type_ebook;
        case SCORE_MUSIC:
            return R.drawable.type_score_music;
        case PACKAGE_BOOKS:
            return R.drawable.type_package_books;
        case UNKNOWN:
            return R.drawable.type_unknown;
        case MAGAZINE:
        case NEWSPAPER:
            return R.drawable.type_newspaper;
        case BOARDGAME:
            return R.drawable.type_boardgame;
        case SCHOOL_VERSION:
            return R.drawable.type_school_version;
        case AUDIO_CASSETTE:
            return R.drawable.type_audio_cassette;
        case URL:
            return R.drawable.type_url;
        case EDOC:
            return R.drawable.type_edoc;
        case EVIDEO:
            return R.drawable.type_evideo;
        case EAUDIO:
        case MP3:
            return R.drawable.type_eaudio;
        case ART:
            return R.drawable.type_art;
        case MAP:
            return R.drawable.type_map;
        case LP_RECORD:
            return R.drawable.type_lp_record;
        case DEVICE:
            return R.drawable.type_device;
        }

        return R.drawable.type_unknown;

    }

    @Override
    public View getView(int position, View contentView, ViewGroup viewGroup) {
        View view;

        // position always 0-7
        if (objects.get(position) == null) {
            LayoutInflater layoutInflater = (LayoutInflater) getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.listitem_searchresult, viewGroup, false);
            return view;
        }

        SearchResult item = objects.get(position);

        if (contentView == null) {
            LayoutInflater layoutInflater = (LayoutInflater) getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.listitem_searchresult, viewGroup, false);
        } else {
            view = contentView;
        }

        TextView tv = (TextView) view.findViewById(R.id.tvResult);
        tv.setText(Html.fromHtml(item.getInnerhtml()));

        ImageView ivType = (ImageView) view.findViewById(R.id.ivType);

        PreferenceDataSource pds = new PreferenceDataSource(getContext());
        ConnectivityManager connMgr = (ConnectivityManager) getContext()
                .getSystemService(Context.CONNECTIVITY_SERVICE);

        if (item.getCoverBitmap() != null) {
            ivType.setImageBitmap(BitmapUtils.bitmapFromBytes(item.getCoverBitmap()));
            ivType.setVisibility(View.VISIBLE);
            ivType.setPadding(0, 0, 0, 0);
        } else if ((pds.isLoadCoversOnDataPreferenceSet()
                || !ConnectivityManagerCompat.isActiveNetworkMetered(connMgr)) && item.getCover() != null) {
            LoadCoverTask lct = new LoadCoverTask(ivType, item);
            lct.execute();
            ivType.setImageResource(R.drawable.ic_loading);
            ivType.setVisibility(View.VISIBLE);
            ivType.setPadding(0, 0, 0, 0);
        } else if (item.getType() != null && item.getType() != MediaType.NONE) {
            ivType.setImageResource(getResourceByMediaType(item.getType()));
            ivType.setVisibility(View.VISIBLE);
            ivType.setPadding(padding8dp, padding8dp, padding8dp, padding8dp);
        } else {
            ivType.setVisibility(View.INVISIBLE);
        }
        ImageView ivStatus = (ImageView) view.findViewById(R.id.ivStatus);

        if (item.getStatus() != null) {
            ivStatus.setVisibility(View.VISIBLE);
            switch (item.getStatus()) {
            case GREEN:
                ivStatus.setImageResource(R.drawable.status_light_green_check);
                break;
            case RED:
                ivStatus.setImageResource(R.drawable.status_light_red_cross);
                break;
            case YELLOW:
                ivStatus.setImageResource(R.drawable.status_light_yellow_alert);
                break;
            case UNKNOWN:
                ivStatus.setVisibility(View.INVISIBLE);
                break;
            }
        } else {
            ivStatus.setVisibility(View.GONE);
        }

        return view;
    }

    public class LoadCoverTask extends CoverDownloadTask {
        protected ImageView iv;

        public LoadCoverTask(ImageView iv, SearchResult item) {
            super(getContext(), item);
            this.iv = iv;
        }

        @Override
        protected void onPostExecute(CoverHolder result) {
            if (item.getCover() != null && item.getCoverBitmap() != null) {
                iv.setImageBitmap(BitmapUtils.bitmapFromBytes(item.getCoverBitmap()));
                iv.setVisibility(View.VISIBLE);
            } else if (item instanceof SearchResult && ((SearchResult) item).getType() != null
                    && ((SearchResult) item).getType() != MediaType.NONE) {
                iv.setImageResource(getResourceByMediaType(((SearchResult) item).getType()));
                iv.setVisibility(View.VISIBLE);
            } else {
                iv.setVisibility(View.INVISIBLE);
            }
        }
    }
}