You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.9 KiB
146 lines
4.9 KiB
/* |
|
* Copyright 2010-2024 Eric Kok et al. |
|
* |
|
* Transdroid 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. |
|
* |
|
* Transdroid 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 Transdroid. If not, see <http://www.gnu.org/licenses/>. |
|
*/ |
|
package org.transdroid.core.gui.remoterss; |
|
|
|
|
|
import android.view.View; |
|
import android.widget.ArrayAdapter; |
|
import android.widget.ListView; |
|
import android.widget.Spinner; |
|
import android.widget.TextView; |
|
|
|
import androidx.fragment.app.Fragment; |
|
|
|
import org.androidannotations.annotations.AfterViews; |
|
import org.androidannotations.annotations.Bean; |
|
import org.androidannotations.annotations.EFragment; |
|
import org.androidannotations.annotations.ItemClick; |
|
import org.androidannotations.annotations.ItemSelect; |
|
import org.androidannotations.annotations.OptionsItem; |
|
import org.androidannotations.annotations.ViewById; |
|
import org.transdroid.R; |
|
import org.transdroid.core.gui.log.Log; |
|
import org.transdroid.core.gui.remoterss.data.RemoteRssChannel; |
|
import org.transdroid.core.gui.remoterss.data.RemoteRssItem; |
|
import org.transdroid.core.gui.rss.RssFeedsActivity; |
|
import org.transdroid.core.gui.settings.MainSettingsActivity_; |
|
|
|
import java.util.ArrayList; |
|
import java.util.List; |
|
|
|
/** |
|
* Fragment that shows a list of RSS items from the server and allows the user |
|
* to download remotely, without having to set up RSS feeds on the Android device. |
|
* |
|
* @author Twig |
|
*/ |
|
@EFragment(R.layout.fragment_remoterss) |
|
public class RemoteRssFragment extends Fragment { |
|
@Bean |
|
protected Log log; |
|
|
|
// Local data |
|
protected ArrayList<RemoteRssItem> remoteRssItems; |
|
|
|
// Views |
|
@ViewById |
|
protected View detailsContainer; |
|
@ViewById(R.id.remoterss_filter) |
|
protected Spinner remoteRssFilter; |
|
@ViewById |
|
protected ListView torrentsList; |
|
@ViewById(R.id.remoterss_status_message) |
|
protected TextView remoteRssStatusMessage; |
|
|
|
|
|
@AfterViews |
|
protected void init() { |
|
// Inject menu options in the actions toolbar |
|
setHasOptionsMenu(true); |
|
|
|
// Set up details adapter |
|
RemoteRssItemsAdapter adapter = new RemoteRssItemsAdapter(getActivity()); |
|
torrentsList.setAdapter(adapter); |
|
torrentsList.setFastScrollEnabled(true); |
|
} |
|
|
|
@Override |
|
public void onResume() { |
|
super.onResume(); |
|
this.refreshScreen(); |
|
} |
|
|
|
@OptionsItem(R.id.action_refresh) |
|
protected void refreshScreen() { |
|
RssFeedsActivity rssActivity = (RssFeedsActivity) getActivity(); |
|
rssActivity.refreshRemoteFeeds(); |
|
} |
|
|
|
@OptionsItem(R.id.action_settings) |
|
protected void openSettings() { |
|
MainSettingsActivity_.intent(getActivity()).start(); |
|
} |
|
|
|
/** |
|
* Updates the UI with a new list of RSS items. |
|
*/ |
|
public void updateRemoteItems(List<RemoteRssItem> remoteItems, boolean scrollToTop) { |
|
RemoteRssItemsAdapter adapter = (RemoteRssItemsAdapter) torrentsList.getAdapter(); |
|
|
|
remoteRssItems = new ArrayList<>(remoteItems); |
|
adapter.updateItems(remoteRssItems); |
|
|
|
if (scrollToTop) { |
|
torrentsList.smoothScrollToPosition(0); |
|
} |
|
// Show/hide a nice message if there are no items to show |
|
if (remoteRssItems.size() > 0) { |
|
remoteRssStatusMessage.setVisibility(View.GONE); |
|
} else { |
|
remoteRssStatusMessage.setVisibility(View.VISIBLE); |
|
remoteRssStatusMessage.setText(R.string.remoterss_no_files); |
|
} |
|
} |
|
|
|
public void updateChannelFilters(List<RemoteRssChannel> feedLabels) { |
|
List<String> labels = new ArrayList<>(); |
|
|
|
for (RemoteRssChannel feedLabel : feedLabels) { |
|
labels.add(feedLabel.getName()); |
|
} |
|
|
|
ArrayAdapter<String> adapter = new ArrayAdapter<>(this.getContext(), android.R.layout.simple_spinner_dropdown_item, labels); |
|
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); |
|
remoteRssFilter.setAdapter(adapter); |
|
} |
|
|
|
/** |
|
* When the user clicks on an item, prepare to download it. |
|
*/ |
|
@ItemClick(resName = "torrents_list") |
|
protected void detailsListClicked(int position) { |
|
RemoteRssItemsAdapter adapter = (RemoteRssItemsAdapter) torrentsList.getAdapter(); |
|
RemoteRssItem item = (RemoteRssItem) adapter.getItem(position); |
|
|
|
((RssFeedsActivity) getActivity()).downloadRemoteRssItem(item); |
|
} |
|
|
|
@ItemSelect(R.id.remoterss_filter) |
|
protected void onFeedSelected(boolean selected, int position) { |
|
((RssFeedsActivity) getActivity()).onFeedSelected(position); |
|
} |
|
}
|
|
|