From 13ea5f7890109beb42d009be9a3f21d5bf518353 Mon Sep 17 00:00:00 2001 From: Scott Jackson Date: Mon, 23 Dec 2013 19:32:08 -0800 Subject: Created an abstract basic list fragment --- .../dsub/fragments/SelectListFragment.java | 142 +++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 src/github/daneren2005/dsub/fragments/SelectListFragment.java diff --git a/src/github/daneren2005/dsub/fragments/SelectListFragment.java b/src/github/daneren2005/dsub/fragments/SelectListFragment.java new file mode 100644 index 00000000..c5fd4508 --- /dev/null +++ b/src/github/daneren2005/dsub/fragments/SelectListFragment.java @@ -0,0 +1,142 @@ +/* + This file is part of Subsonic. + + Subsonic is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + Subsonic is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with Subsonic. If not, see . + + Copyright 2010 (C) Sindre Mehus + */ +package github.daneren2005.dsub.fragments; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Adapter; +import android.widget.AdapterView; +import android.widget.ListAdapter; +import android.widget.ListView; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import github.daneren2005.dsub.R; +import github.daneren2005.dsub.domain.Genre; +import github.daneren2005.dsub.service.MusicService; +import github.daneren2005.dsub.service.MusicServiceFactory; +import github.daneren2005.dsub.util.BackgroundTask; +import github.daneren2005.dsub.util.Constants; +import github.daneren2005.dsub.util.TabBackgroundTask; +import github.daneren2005.dsub.view.GenreAdapter; + +public abstract class SelectListFragment extends SubsonicFragment implements AdapterView.OnItemClickListener { + private static final String TAG = SelectListFragment.class.getSimpleName(); + private ListView listView; + private View emptyView; + private List objects; + + @Override + public void onCreate(Bundle bundle) { + super.onCreate(bundle); + + if(bundle != null) { + objects = (List) bundle.getSerializable(Constants.FRAGMENT_LIST); + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.putSerializable(Constants.FRAGMENT_LIST, (Serializable) objects); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) { + rootView = inflater.inflate(R.layout.abstract_list_fragment, container, false); + + listView = (ListView)rootView.findViewById(R.id.fragment_list); + listView.setOnItemClickListener(this); + emptyView = rootView.findViewById(R.id.fragment_list_empty); + + if(objects == null) { + refresh(); + } else { + listView.setAdapter(getAdapter(objects)); + } + + return rootView; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater menuInflater) { + if(!primaryFragment) { + return; + } + + menuInflater.inflate(getOptionsMenu(), menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if(super.onOptionsItemSelected(item)) { + return true; + } + + return false; + } + + @Override + protected void refresh(boolean refresh) { + setTitle(getTitleResource()); + listView.setVisibility(View.INVISIBLE); + + BackgroundTask> task = new TabBackgroundTask>(this) { + @Override + protected List doInBackground() throws Throwable { + MusicService musicService = MusicServiceFactory.getMusicService(context); + + objects = new ArrayList(); + + try { + objects = getObjects(); + } catch (Exception x) { + Log.e(TAG, "Failed to load", x); + } + + return objects; + } + + @Override + protected void done(List result) { + emptyView.setVisibility(result == null || result.isEmpty() ? View.VISIBLE : View.GONE); + + if (result != null) { + // TODO: + listView.setAdapter(getAdapter(result)); + listView.setVisibility(View.VISIBLE); + } + } + }; + task.execute(); + } + + public abstract int getOptionsMenu(); + public abstract ListAdapter getAdapter(List objs); + public abstract List getObjects(); + public abstract int getTitleResource(); +} -- cgit v1.2.3