/*
* *
* * This file is part of QuickLyric
* * Copyright © 2017 QuickLyric SPRL
* *
* * QuickLyric 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.
* *
* * QuickLyric 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 QuickLyric. If not, see <http://www.gnu.org/licenses/>.
*
*/
package com.geecko.QuickLyric.tasks;
import android.os.AsyncTask;
import android.os.Process;
import android.widget.Toast;
import com.geecko.QuickLyric.R;
import com.geecko.QuickLyric.SearchActivity;
import com.geecko.QuickLyric.fragment.SearchFragment;
import com.geecko.QuickLyric.provider.Genius;
import com.geecko.QuickLyric.provider.JLyric;
import com.geecko.QuickLyric.provider.LyricWiki;
import com.geecko.QuickLyric.model.Lyrics;
import com.geecko.QuickLyric.utils.DatabaseHelper;
import com.geecko.QuickLyric.utils.OnlineAccessVerifier;
import java.util.ArrayList;
import java.util.List;
public class SearchTask extends AsyncTask<Object, Object, List<Lyrics>> {
private SearchFragment searchFragment;
private String searchQuery;
@Override
@SuppressWarnings("unchecked")
protected List<Lyrics> doInBackground(Object... params) {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
searchQuery = (String) params[0];
searchFragment = (SearchFragment) params[1];
int position = (Integer) params[2];
SearchActivity searchActivity = (SearchActivity) searchFragment.getActivity();
if (searchActivity == null)
return null;
List<Lyrics> results;
do
results = doSearch(searchActivity.searchProviders.get(position));
while (results == null && !isCancelled() && searchFragment != null &&
searchFragment.getActivity() != null &&
(OnlineAccessVerifier.check(searchFragment.getActivity()) ||
position == 0)); // DatabaseHelper
return results;
}
protected void onPostExecute(List<Lyrics> results) {
if (searchFragment.getActivity() == null)
return;
((SearchActivity) searchFragment.getActivity()).setSearchQuery(searchQuery);
if (results == null && searchFragment.getActivity() != null &&
!OnlineAccessVerifier.check(searchFragment.getActivity()))
Toast.makeText(searchFragment.getActivity(),
searchFragment.getString(R.string.connection_error),
Toast.LENGTH_LONG).show();
else if (searchFragment.getActivity() != null) {
if (results == null)
results = new ArrayList<>(0);
searchFragment.setResults(results);
}
}
@SuppressWarnings("unchecked")
private List<Lyrics> doSearch(Class provider) {
switch (provider.getSimpleName()) {
case "LyricWiki":
return LyricWiki.search(searchQuery);
case "Genius":
return Genius.search(searchQuery);
case "DatabaseHelper":
return DatabaseHelper.getInstance(searchFragment.getActivity()).search(searchQuery);
case "JLyric":
return JLyric.search(searchQuery);
default:
try {
return (List<Lyrics>) provider.getMethod("search", String.class).invoke(null, searchQuery);
} catch (Exception ignored) {
ignored.printStackTrace();
return null;
}
}
}
}