/** * * TURTLE PLAYER * * Licensed under MIT & GPL * * 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. * * More Information @ www.turtle-player.co.uk * * @author Simon Honegger (Hoene84) */ package com.turtleplayer.util; import android.app.Activity; import android.content.Context; import android.os.Handler; import android.os.Looper; 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 com.turtleplayer.model.*; import com.turtleplayer.presentation.InstanceFormatter; import java.util.Collections; import java.util.List; public class DefaultAdapter<T extends Instance> extends ArrayAdapter<T> { private final List<T> objects; private final Activity activity; private final boolean allowsDuplicates; private final InstanceFormatter formatter; final Handler instanceAddedhandler = new Handler(Looper.getMainLooper()); /** * @param context needed by super * @param objects has to be prepared according allowsDuplicates and has to be sorted (if needed) * @param startingActivity to join UI Thread * @param allowsDuplicates remove duplicates by adding items * @param formatter */ public DefaultAdapter( Context context, List<T> objects, Activity startingActivity, boolean allowsDuplicates, InstanceFormatter formatter) { super(context, com.turtleplayerv2.R.layout.file_list_entry, objects); this.activity = startingActivity; this.objects = objects; this.allowsDuplicates = allowsDuplicates; this.formatter = formatter; } public void add(final T object) { if(allowsDuplicates || !objects.contains(object)){ activity.runOnUiThread(new Runnable() { public void run() { if(!instanceAddedhandler.hasMessages(0)){ instanceAddedhandler.postDelayed(new Runnable() { public void run() { if(allowsDuplicates || !objects.contains(object)){ objects.add(object); Collections.sort(objects, new FormattedInstanceComparator(formatter)); notifyDataSetChanged(); } } }, 2000); } } }); } } /** * @param object objects has to be prepared according allowsDuplicates and has to be sorted (if needed) */ public void replace(final List<? extends T> object) { activity.runOnUiThread(new Runnable() { public void run() { objects.clear(); objects.addAll(object); notifyDataSetChanged(); } }); } public void clear() { activity.runOnUiThread(new Runnable() { public void run() { objects.clear(); notifyDataSetChanged(); } }); } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(com.turtleplayerv2.R.layout.file_list_entry, parent, false); T currObject = getItem(position); TextView textView = (TextView) rowView.findViewById(com.turtleplayerv2.R.id.label); textView.setText(currObject.accept(formatter)); final ImageView icon = (ImageView) rowView.findViewById(com.turtleplayerv2.R.id.icon); currObject.accept(new InstanceVisitor<Object>() { public Object visit(Track track) { icon.setImageResource(com.turtleplayerv2.R.drawable.track24); return null; } public Object visit(SongDigest track) { icon.setImageResource(com.turtleplayerv2.R.drawable.track24); return null; } public Object visit(Album album) { icon.setImageResource(com.turtleplayerv2.R.drawable.album24); return null; } public Object visit(GenreDigest genre) { icon.setImageResource(com.turtleplayerv2.R.drawable.genre24); return null; } public Object visit(ArtistDigest artist) { icon.setImageResource(com.turtleplayerv2.R.drawable.artist24); return null; } public Object visit(FSobject FSobject) { icon.setImageResource(com.turtleplayerv2.R.drawable.dir24); return null; } }); return rowView; } }