diff --git a/app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssActivity.java b/app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssActivity.java deleted file mode 100644 index 7b390c15..00000000 --- a/app/src/main/java/org/transdroid/core/gui/remoterss/RemoteRssActivity.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright 2010-2018 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 . - */ -package org.transdroid.core.gui.remoterss; - -import android.annotation.TargetApi; -import android.os.Build; -import android.os.Bundle; -import android.os.Parcel; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.Toolbar; -import android.widget.LinearLayout; -import android.widget.ListView; - -import com.nispok.snackbar.Snackbar; -import com.nispok.snackbar.SnackbarManager; -import com.nispok.snackbar.enums.SnackbarType; - -import org.androidannotations.annotations.AfterViews; -import org.androidannotations.annotations.Background; -import org.androidannotations.annotations.Bean; -import org.androidannotations.annotations.EActivity; -import org.androidannotations.annotations.FragmentById; -import org.androidannotations.annotations.InstanceState; -import org.androidannotations.annotations.ItemClick; -import org.androidannotations.annotations.NonConfigurationInstance; -import org.androidannotations.annotations.OptionsItem; -import org.androidannotations.annotations.UiThread; -import org.androidannotations.annotations.ViewById; -import org.transdroid.R; -import org.transdroid.core.app.settings.ApplicationSettings; -import org.transdroid.core.app.settings.ServerSetting; -import org.transdroid.core.app.settings.SettingsUtils; -import org.transdroid.core.gui.lists.LocalTorrent; -import org.transdroid.core.gui.lists.SimpleListItemAdapter; -import org.transdroid.core.gui.log.Log; -import org.transdroid.core.gui.navigation.RefreshableActivity; -import org.transdroid.core.gui.remoterss.data.RemoteRssChannel; -import org.transdroid.core.gui.remoterss.data.RemoteRssItem; -import org.transdroid.core.gui.remoterss.data.RemoteRssSupplier; -import org.transdroid.core.service.ConnectivityHelper; -import org.transdroid.daemon.DaemonException; -import org.transdroid.daemon.IDaemonAdapter; - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.List; - -/** - * An activity that displays a list of {@link RemoteRssItem}s via an instance of {@link RemoteRssFragment}. - * The activity manages the drawer to filter items by the feed they came through. - * - * By default it displays the latest items within the last month. - * - * @author Twig Nguyen - */ -@EActivity(R.layout.activity_remoterss) -public class RemoteRssActivity extends AppCompatActivity implements RefreshableActivity { - @NonConfigurationInstance - protected ArrayList feeds; - - @InstanceState - protected int selectedFilter; - - @NonConfigurationInstance - protected ArrayList recentItems; - - // Server connection - @Bean - protected ApplicationSettings applicationSettings; - @Bean - protected Log log; - @Bean - protected ConnectivityHelper connectivityHelper; - private IDaemonAdapter currentConnection; - - // Details view components - @ViewById - protected DrawerLayout drawerLayout; - @ViewById - protected LinearLayout drawerContainer; - - @ViewById - protected Toolbar torrentsToolbar; - - @ViewById - protected ListView drawerList; - - @FragmentById(R.id.remoterss_fragment) - protected RemoteRssFragment fragmentRemoteRss; - - @Override - public void onCreate(Bundle savedInstanceState) { - SettingsUtils.applyDayNightTheme(this); - super.onCreate(savedInstanceState); - } - - @AfterViews - protected void init() { - // Simple action bar with up, torrent name as title and refresh button - torrentsToolbar.setNavigationIcon(R.drawable.ic_action_drawer); - setSupportActionBar(torrentsToolbar); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - // Connect to the last used server - ServerSetting lastUsed = applicationSettings.getLastUsedServer(); - currentConnection = lastUsed.createServerAdapter(connectivityHelper.getConnectedNetworkName(), this); - - if (feeds != null) { - // Called from a configuration change. No need to load anything from server - showChannelFilters(); - fragmentRemoteRss.updateRemoteItems( - selectedFilter == 0 ? recentItems : feeds.get(selectedFilter - 1).getItems(), - false /* allow android to restore scroll position */ ); - } else { - loadFeeds(); - } - - } - - @Background - protected void loadFeeds() { - try { - fragmentRemoteRss.setRefreshing(true); - feeds = ((RemoteRssSupplier) (currentConnection)).getRemoteRssChannels(log); - fragmentRemoteRss.setRefreshing(false); - } catch (DaemonException e) { - onCommunicationError(e); - } - - recentItems = new ArrayList<>(); - Calendar calendar = Calendar.getInstance(); - calendar.add(Calendar.MONTH, -1); - Date oneMonthAgo = calendar.getTime(); - - for (RemoteRssChannel feed : feeds) { - for (RemoteRssItem item : feed.getItems()) { - if (item.getTimestamp().after(oneMonthAgo)) { - recentItems.add(item); - } - } - } - // Sort by -newest - Collections.sort(recentItems, new Comparator() { - @Override - public int compare(RemoteRssItem lhs, RemoteRssItem rhs) { - return rhs.getTimestamp().compareTo(lhs.getTimestamp()); - } - }); - - afterLoadFeeds(); - } - - @UiThread - protected void afterLoadFeeds() { - // We need to wrap these calls in a @UiThread rather than make them each a @UiThread themselves - // because they need to run sequentially in a configuration change scenario in order for Android - // to maintain scroll position on the fragment adapter. - showChannelFilters(); - onFeedSelected(selectedFilter); - } - - @UiThread - protected void onCommunicationError(DaemonException daemonException) { - //noinspection ThrowableResultOfMethodCallIgnored - log.i(this, daemonException.toString()); - String error = getString(LocalTorrent.getResourceForDaemonException(daemonException)); - SnackbarManager.show(Snackbar.with(this).text(error).colorResource(R.color.red).type(SnackbarType.MULTI_LINE)); - } - - - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - @OptionsItem(android.R.id.home) - protected void navigateUp() { - if (drawerLayout.isDrawerOpen(drawerContainer)) { - drawerLayout.closeDrawers(); - } else { - drawerLayout.openDrawer(drawerContainer); - } - } - - @Override - public void onBackPressed() { - if (drawerLayout.isDrawerOpen(drawerContainer)) { - drawerLayout.closeDrawers(); - } else { - finish(); - } - } - - private void showChannelFilters() { - List feedLabels = new ArrayList<>(feeds.size() +1); - feedLabels.add(new RemoteRssChannel() { - @Override - public String getName() { - return getString(R.string.remoterss_filter_allrecent); - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } - }); - feedLabels.addAll(feeds); - - drawerList.setAdapter(new SimpleListItemAdapter(this, feedLabels)); - } - - @ItemClick(R.id.drawer_list) - protected void onFeedSelected(int position) { - selectedFilter = position; - fragmentRemoteRss.updateRemoteItems(position == 0 ? recentItems : feeds.get(position - 1).getItems(), true); - - RemoteRssChannel channel = (RemoteRssChannel) drawerList.getAdapter().getItem(position); - getSupportActionBar().setSubtitle(channel.getName()); - - drawerLayout.closeDrawers(); - } - - public IDaemonAdapter getCurrentConnection() { - return currentConnection; - } - - public RemoteRssChannel getChannel(String name) { - for (RemoteRssChannel feed : feeds) { - if (feed.getName().equals(name)) { - return feed; - } - } - return null; - } - - @Override - public void refreshScreen() { - loadFeeds(); - } -}