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.
305 lines
14 KiB
305 lines
14 KiB
/* |
|
* 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; |
|
} |
|
|
|
}
|
|
|