|
|
|
/*
|
|
|
|
* 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 <http://www.gnu.org/licenses/>.
|
|
|
|
*/
|
|
|
|
package org.transdroid.core.gui.settings;
|
|
|
|
|
|
|
|
import android.annotation.TargetApi;
|
|
|
|
import android.app.AlertDialog;
|
|
|
|
import android.app.Dialog;
|
|
|
|
import android.content.DialogInterface;
|
|
|
|
import android.content.DialogInterface.OnClickListener;
|
|
|
|
import android.content.Intent;
|
|
|
|
import android.content.SharedPreferences;
|
|
|
|
import android.net.Uri;
|
|
|
|
import android.os.Build;
|
|
|
|
import android.os.Bundle;
|
|
|
|
|
|
|
|
import androidx.preference.ListPreference;
|
|
|
|
import androidx.preference.Preference;
|
|
|
|
import androidx.preference.Preference.OnPreferenceClickListener;
|
|
|
|
|
|
|
|
import org.androidannotations.annotations.Bean;
|
|
|
|
import org.androidannotations.annotations.EActivity;
|
|
|
|
import org.androidannotations.annotations.OptionsItem;
|
|
|
|
import org.transdroid.R;
|
|
|
|
import org.transdroid.core.app.search.SearchHelper;
|
|
|
|
import org.transdroid.core.app.search.SearchSite;
|
|
|
|
import org.transdroid.core.app.settings.ApplicationSettings;
|
|
|
|
import org.transdroid.core.app.settings.RssfeedSetting;
|
|
|
|
import org.transdroid.core.app.settings.ServerSetting;
|
|
|
|
import org.transdroid.core.app.settings.WebsearchSetting;
|
|
|
|
import org.transdroid.core.gui.TorrentsActivity_;
|
|
|
|
import org.transdroid.core.gui.navigation.NavigationHelper;
|
|
|
|
import org.transdroid.core.gui.settings.RssfeedPreference.OnRssfeedClickedListener;
|
|
|
|
import org.transdroid.core.gui.settings.ServerPreference.OnServerClickedListener;
|
|
|
|
import org.transdroid.core.gui.settings.WebsearchPreference.OnWebsearchClickedListener;
|
|
|
|
import org.transdroid.core.seedbox.SeedboxPreference;
|
|
|
|
import org.transdroid.core.seedbox.SeedboxPreference.OnSeedboxClickedListener;
|
|
|
|
import org.transdroid.core.seedbox.SeedboxProvider;
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.List;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The main activity that provides access to all application settings. It shows the configured serves, web search sites and RSS feeds along with other
|
|
|
|
* general settings.
|
|
|
|
*
|
|
|
|
* @author Eric Kok
|
|
|
|
*/
|
|
|
|
@EActivity
|
|
|
|
public class MainSettingsActivity extends PreferenceCompatActivity {
|
|
|
|
|
|
|
|
protected static final int DIALOG_ADDSEEDBOX = 0;
|
|
|
|
@Bean
|
|
|
|
protected NavigationHelper navigationHelper;
|
|
|
|
@Bean
|
|
|
|
protected ApplicationSettings applicationSettings;
|
|
|
|
@Bean
|
|
|
|
protected SearchHelper searchHelper;
|
|
|
|
protected SharedPreferences prefs;
|
|
|
|
private OnPreferenceClickListener onAddServer = new OnPreferenceClickListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
|
|
if (navigationHelper.enableSeedboxes())
|
|
|
|
showDialog(DIALOG_ADDSEEDBOX);
|
|
|
|
else
|
|
|
|
ServerSettingsActivity_.intent(MainSettingsActivity.this).start();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnPreferenceClickListener onAddWebsearch = new OnPreferenceClickListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
|
|
WebsearchSettingsActivity_.intent(MainSettingsActivity.this).start();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnPreferenceClickListener onAddRssfeed = new OnPreferenceClickListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
|
|
RssfeedSettingsActivity_.intent(MainSettingsActivity.this).start();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnPreferenceClickListener onBackgroundSettings = new OnPreferenceClickListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
|
|
NotificationSettingsActivity_.intent(MainSettingsActivity.this).start();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnPreferenceClickListener onSystemSettings = new OnPreferenceClickListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
|
|
SystemSettingsActivity_.intent(MainSettingsActivity.this).start();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnPreferenceClickListener onHelpSettings = new OnPreferenceClickListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
|
|
HelpSettingsActivity_.intent(MainSettingsActivity.this).start();
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnPreferenceClickListener onDonate = new OnPreferenceClickListener() {
|
|
|
|
@Override
|
|
|
|
public boolean onPreferenceClick(Preference preference) {
|
|
|
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.donate_url))));
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnServerClickedListener onServerClicked = new OnServerClickedListener() {
|
|
|
|
@Override
|
|
|
|
public void onServerClicked(ServerSetting serverSetting) {
|
|
|
|
ServerSettingsActivity_.intent(MainSettingsActivity.this).key(serverSetting.getOrder()).start();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnSeedboxClickedListener onSeedboxClicked = new OnSeedboxClickedListener() {
|
|
|
|
@Override
|
|
|
|
public void onSeedboxClicked(ServerSetting serverSetting, SeedboxProvider provider, int seedboxOffset) {
|
|
|
|
// NOTE: The seedboxOffset is the seedbox type-unique order that we need to supply uin the Extras bundle to
|
|
|
|
// edit this specific seedbox
|
|
|
|
startActivity(provider.getSettings().getSettingsActivityIntent(MainSettingsActivity.this).putExtra("key", seedboxOffset));
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnWebsearchClickedListener onWebsearchClicked = new OnWebsearchClickedListener() {
|
|
|
|
@Override
|
|
|
|
public void onWebsearchClicked(WebsearchSetting websearchSetting) {
|
|
|
|
WebsearchSettingsActivity_.intent(MainSettingsActivity.this).key(websearchSetting.getOrder()).start();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnRssfeedClickedListener onRssfeedClicked = new OnRssfeedClickedListener() {
|
|
|
|
@Override
|
|
|
|
public void onRssfeedClicked(RssfeedSetting rssfeedSetting) {
|
|
|
|
RssfeedSettingsActivity_.intent(MainSettingsActivity.this).key(rssfeedSetting.getOrder()).start();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
private OnClickListener onAddSeedbox = new OnClickListener() {
|
|
|
|
@Override
|
|
|
|
public void onClick(DialogInterface dialog, int which) {
|
|
|
|
// Start the configuration activity for this specific chosen seedbox
|
|
|
|
if (which == 0)
|
|
|
|
ServerSettingsActivity_.intent(MainSettingsActivity.this).start();
|
|
|
|
else
|
|
|
|
startActivity(SeedboxProvider.values()[which - 1].getSettings().getSettingsActivityIntent(MainSettingsActivity.this));
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
// Note: Settings are loaded in onResume()
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onResume() {
|
|
|
|
super.onResume();
|
|
|
|
|
|
|
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
|
|
|
|
|
|
boolean enableSearchUi = navigationHelper.enableSearchUi();
|
|
|
|
boolean enableRssUi = navigationHelper.enableRssUi();
|
|
|
|
boolean enableDonateLink = !getString(R.string.donate_url).isEmpty();
|
|
|
|
|
|
|
|
// Load the preference menu and attach actions
|
|
|
|
addPreferencesFromResource(R.xml.pref_main);
|
|
|
|
prefs = getPreferenceManager().getSharedPreferences();
|
|
|
|
findPreference("header_addserver").setOnPreferenceClickListener(onAddServer);
|
|
|
|
if (enableSearchUi) {
|
|
|
|
findPreference("header_addwebsearch").setOnPreferenceClickListener(onAddWebsearch);
|
|
|
|
}
|
|
|
|
if (enableRssUi) {
|
|
|
|
findPreference("header_addrssfeed").setOnPreferenceClickListener(onAddRssfeed);
|
|
|
|
}
|
|
|
|
findPreference("header_background").setOnPreferenceClickListener(onBackgroundSettings);
|
|
|
|
findPreference("header_system").setOnPreferenceClickListener(onSystemSettings);
|
|
|
|
findPreference("header_help").setOnPreferenceClickListener(onHelpSettings);
|
|
|
|
if (enableDonateLink) {
|
|
|
|
findPreference("header_donate").setOnPreferenceClickListener(onDonate);
|
|
|
|
} else {
|
|
|
|
getPreferenceScreen().removePreference(findPreference("header_donate"));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Keep a list of the server codes and names (for default server selection)
|
|
|
|
List<String> serverCodes = new ArrayList<>();
|
|
|
|
List<String> serverNames = new ArrayList<>();
|
|
|
|
serverCodes.add(Integer.toString(ApplicationSettings.DEFAULTSERVER_LASTUSED));
|
|
|
|
serverCodes.add(Integer.toString(ApplicationSettings.DEFAULTSERVER_ASKONADD));
|
|
|
|
serverNames.add(getString(R.string.pref_defaultserver_lastused));
|
|
|
|
serverNames.add(getString(R.string.pref_defaultserver_askonadd));
|
|
|
|
|
|
|
|
// Add existing servers
|
|
|
|
List<ServerSetting> servers = applicationSettings.getNormalServerSettings();
|
|
|
|
for (ServerSetting serverSetting : servers) {
|
|
|
|
getPreferenceScreen()
|
|
|
|
.addPreference(new ServerPreference(this).setServerSetting(serverSetting).setOnServerClickedListener(onServerClicked));
|
|
|
|
if (serverSetting.getUniqueIdentifier() != null) {
|
|
|
|
serverCodes.add(Integer.toString(serverSetting.getOrder()));
|
|
|
|
serverNames.add(serverSetting.getName());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Add seedboxes; serversOffset keeps an int to have all ServerSettings with unique ids, seedboxOffset is unique
|
|
|
|
// only per seedbox type
|
|
|
|
int orderOffset = servers.size();
|
|
|
|
for (SeedboxProvider provider : SeedboxProvider.values()) {
|
|
|
|
int seedboxOffset = 0;
|
|
|
|
for (ServerSetting seedbox : provider.getSettings().getAllServerSettings(prefs, orderOffset)) {
|
|
|
|
getPreferenceScreen().addPreference(new SeedboxPreference(this).setProvider(provider).setServerSetting(seedbox)
|
|
|
|
.setOnSeedboxClickedListener(onSeedboxClicked, seedboxOffset));
|
|
|
|
orderOffset++;
|
|
|
|
seedboxOffset++;
|
|
|
|
if (seedbox.getUniqueIdentifier() != null) {
|
|
|
|
serverCodes.add(Integer.toString(seedbox.getOrder()));
|
|
|
|
serverNames.add(seedbox.getName());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Allow selection of the default server
|
|
|
|
ListPreference defaultServerPreference = (ListPreference) findPreference("header_defaultserver");
|
|
|
|
defaultServerPreference.setEntries(serverNames.toArray(new String[serverNames.size()]));
|
|
|
|
defaultServerPreference.setEntryValues(serverCodes.toArray(new String[serverCodes.size()]));
|
|
|
|
|
|
|
|
// Add existing RSS feeds
|
|
|
|
if (!enableRssUi) {
|
|
|
|
// RSS should be disabled
|
|
|
|
getPreferenceScreen().removePreference(findPreference("header_rssfeeds"));
|
|
|
|
} else {
|
|
|
|
List<RssfeedSetting> rssfeeds = applicationSettings.getRssfeedSettings();
|
|
|
|
for (RssfeedSetting rssfeedSetting : rssfeeds) {
|
|
|
|
getPreferenceScreen()
|
|
|
|
.addPreference(new RssfeedPreference(this).setRssfeedSetting(rssfeedSetting).setOnRssfeedClickedListener(onRssfeedClicked));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!enableSearchUi) {
|
|
|
|
// Search should be disabled
|
|
|
|
getPreferenceScreen().removePreference(findPreference("header_searchsites"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add existing websearch sites
|
|
|
|
List<WebsearchSetting> websearches = applicationSettings.getWebsearchSettings();
|
|
|
|
for (WebsearchSetting websearchSetting : websearches) {
|
|
|
|
getPreferenceScreen().addPreference(
|
|
|
|
new WebsearchPreference(this).setWebsearchSetting(websearchSetting).setOnWebsearchClickedListener(onWebsearchClicked));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Construct list of all available search sites, in-app and web
|
|
|
|
ListPreference setSite = (ListPreference) findPreference("header_setsearchsite");
|
|
|
|
// Retrieve the available in-app search sites (using the Torrent Search package)
|
|
|
|
List<SearchSite> searchsites = searchHelper.getAvailableSites();
|
|
|
|
if (searchsites == null) {
|
|
|
|
searchsites = new ArrayList<>();
|
|
|
|
}
|
|
|
|
List<String> siteNames = new ArrayList<>(websearches.size() + searchsites.size());
|
|
|
|
List<String> siteValues = new ArrayList<>(websearches.size() + searchsites.size());
|
|
|
|
for (SearchSite searchSite : searchsites) {
|
|
|
|
siteNames.add(searchSite.getName());
|
|
|
|
siteValues.add(searchSite.getKey());
|
|
|
|
}
|
|
|
|
for (WebsearchSetting websearch : websearches) {
|
|
|
|
siteNames.add(websearch.getName());
|
|
|
|
siteValues.add(websearch.getKey());
|
|
|
|
}
|
|
|
|
// Supply the Preference list names and values
|
|
|
|
setSite.setEntries(siteNames.toArray(new String[siteNames.size()]));
|
|
|
|
setSite.setEntryValues(siteValues.toArray(new String[siteValues.size()]));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
|
|
|
@OptionsItem(android.R.id.home)
|
|
|
|
protected void navigateUp() {
|
|
|
|
TorrentsActivity_.intent(this).flags(Intent.FLAG_ACTIVITY_CLEAR_TOP).start();
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected Dialog onCreateDialog(int id) {
|
|
|
|
switch (id) {
|
|
|
|
case DIALOG_ADDSEEDBOX:
|
|
|
|
// Open dialog to pick one of the supported seedbox providers (or a normal server)
|
|
|
|
String[] seedboxes = new String[SeedboxProvider.values().length + 1];
|
|
|
|
seedboxes[0] = getString(R.string.pref_addserver_normal);
|
|
|
|
for (int i = 0; i < seedboxes.length - 1; i++) {
|
|
|
|
seedboxes[i + 1] = getString(R.string.pref_seedbox_addseedbox, SeedboxProvider.values()[i].getSettings().getName());
|
|
|
|
}
|
|
|
|
return new AlertDialog.Builder(this).setItems(seedboxes, onAddSeedbox).create();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|