diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b7037a1..3732615 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,33 +1,34 @@
+ package="com.luca0n.joguitos.pluck">
-
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/luca0n/joguitos/pluck/settings/SettingsActivity.java b/app/src/main/java/com/luca0n/joguitos/pluck/settings/SettingsActivity.java
index 5cc8c8a..34e362d 100644
--- a/app/src/main/java/com/luca0n/joguitos/pluck/settings/SettingsActivity.java
+++ b/app/src/main/java/com/luca0n/joguitos/pluck/settings/SettingsActivity.java
@@ -31,30 +31,28 @@ import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
public class SettingsActivity extends AppCompatActivity {
- @Override
- protected void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
- ActionBar actionBar = getSupportActionBar();
- if (actionBar != null) {
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setTitle(null);
- }
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null)
+ actionBar.setDisplayHomeAsUpEnabled(true);
- getFragmentManager()
- .beginTransaction()
- .replace(android.R.id.content, new SettingsFragment())
- .commit();
- }
+ getFragmentManager()
+ .beginTransaction()
+ .replace(android.R.id.content, new SettingsFragment())
+ .commit();
+ }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case android.R.id.home:
- finish();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ finish();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
}
diff --git a/app/src/main/java/com/luca0n/joguitos/pluck/trivia/TriviaQuery.java b/app/src/main/java/com/luca0n/joguitos/pluck/trivia/TriviaQuery.java
index e1261bd..3ad82ad 100644
--- a/app/src/main/java/com/luca0n/joguitos/pluck/trivia/TriviaQuery.java
+++ b/app/src/main/java/com/luca0n/joguitos/pluck/trivia/TriviaQuery.java
@@ -23,79 +23,94 @@ Contact us at .
package com.luca0n.joguitos.pluck.trivia;
+import com.luca0n.joguitos.pluck.PluckApplication;
+import com.luca0n.joguitos.pluck.R;
+
import java.io.Serializable;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
public class TriviaQuery implements Serializable {
- private static final String BASE = "https://opentdb.com/api.php?";
- private static final int DEFAULT_AMOUNT = 10;
+ private static final int DEFAULT_AMOUNT = 10;
- private final int amount;
- private final TriviaCategory category;
- private final TriviaDifficulty difficulty;
- private final TriviaType type;
+ private final int amount;
+ private final TriviaCategory category;
+ private final TriviaDifficulty difficulty;
+ private final TriviaType type;
- private TriviaQuery(Builder builder) {
- this.amount = builder.amount;
- this.category = builder.category;
- this.difficulty = builder.difficulty;
- this.type = builder.type;
- }
+ private TriviaQuery(Builder builder) {
+ this.amount = builder.amount;
+ this.category = builder.category;
+ this.difficulty = builder.difficulty;
+ this.type = builder.type;
+ }
- public static class Builder {
- private final int amount;
- private TriviaCategory category;
- private TriviaDifficulty difficulty;
- private TriviaType type;
+ public static class Builder {
+ private final int amount;
+ private TriviaCategory category;
+ private TriviaDifficulty difficulty;
+ private TriviaType type;
- public Builder() {
- this.amount = DEFAULT_AMOUNT;
- }
+ public Builder() {
+ this.amount = DEFAULT_AMOUNT;
+ }
- public Builder(int amount) {
- if (amount > 50) {
- this.amount = 50;
- } else {
- this.amount = amount;
- }
- }
+ public Builder(int amount) {
+ if (amount > 50) {
+ this.amount = 50;
+ } else {
+ this.amount = amount;
+ }
+ }
- public Builder category(TriviaCategory category) {
- this.category = category;
- return this;
- }
+ public Builder category(TriviaCategory category) {
+ this.category = category;
+ return this;
+ }
- public Builder difficulty(TriviaDifficulty difficulty) {
- this.difficulty = difficulty;
- return this;
- }
+ public Builder difficulty(TriviaDifficulty difficulty) {
+ this.difficulty = difficulty;
+ return this;
+ }
- public Builder type(TriviaType type) {
- this.type = type;
- return this;
- }
+ public Builder type(TriviaType type) {
+ this.type = type;
+ return this;
+ }
- public TriviaQuery build() {
- return new TriviaQuery(this);
- }
- }
+ public TriviaQuery build() {
+ return new TriviaQuery(this);
+ }
+ }
- @Override
- public String toString() {
- StringBuilder url = new StringBuilder();
+ @Override
+ public String toString() {
+ StringBuilder url = new StringBuilder();
- url.append(BASE);
- url.append("amount=").append(this.amount);
+ // Load custom server URL.
+ Context c = PluckApplication.getAppContext();
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(c);
+ String key = c.getResources().getString(R.string.pref_network_server);
+ // Load default server URL in case the player did not specify a custom server URL.
+ String defaultServer = c.getResources().getString(R.string.pref_network_server_default);
- if (this.category != null & this.category != TriviaCategory.ANY) {
- url.append("&category=").append(this.category.getID());
- }
- if (this.difficulty != null & this.difficulty != TriviaDifficulty.ANY) {
- url.append("&difficulty=").append(this.difficulty.getName());
- }
- if (this.type != null & this.type != TriviaType.ANY) {
- url.append("&type=").append(this.type.getName());
- }
+ String base = sp.getString(key, defaultServer) + "?"; // append "?" to the end of the URL so we can specify GET parameters.
- return url.toString();
- }
+ url.append(base);
+ url.append("amount=").append(this.amount);
+
+ if (this.category != null & this.category != TriviaCategory.ANY) {
+ url.append("&category=").append(this.category.getID());
+ }
+ if (this.difficulty != null & this.difficulty != TriviaDifficulty.ANY) {
+ url.append("&difficulty=").append(this.difficulty.getName());
+ }
+ if (this.type != null & this.type != TriviaType.ANY) {
+ url.append("&type=").append(this.type.getName());
+ }
+
+ return url.toString();
+ }
}
diff --git a/app/src/main/res/values/pref_keys.xml b/app/src/main/res/values/pref_keys.xml
index d5333eb..c7bb272 100644
--- a/app/src/main/res/values/pref_keys.xml
+++ b/app/src/main/res/values/pref_keys.xml
@@ -26,4 +26,6 @@ Contact us at .
pref_key_category_sound
pref_sound_answer
pref_network_tor
+ pref_network_server
+ https://opentdb.com/api.php
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 7b1be37..5e788b4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -90,8 +90,11 @@ Contact us at .
Sound
Answer Sound Effect
+ Toggles game sound effects.
Network
- Connect using Tor
- Retrieves trivia data via the Tor network. Requires Orbot.
+ Connect Using Tor
+ Retrieves trivia data via the Tor network. Requires Orbot (recommended) or a Tor daemon with a SOCKS5 proxy listening on port 9050.
+ Server URL
+ Specifies the server location used by the game to fetch questions.
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 5f715b4..4c35560 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -24,23 +24,28 @@ Contact us at .
-
+
-
-
-
-
-
-
+
+
+
+
+
+