new proxy input method, removed hardcoded strings from GlobalSettings, proxy bug fix

This commit is contained in:
nuclearfog 2020-06-25 16:45:54 +02:00
parent 1a58d5c0ef
commit 7623cd154b
No known key found for this signature in database
GPG Key ID: ED35E22099354A64
9 changed files with 288 additions and 192 deletions

View File

@ -4,7 +4,6 @@ import android.app.Dialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener; import android.content.DialogInterface.OnDismissListener;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable;
import android.util.Patterns; import android.util.Patterns;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@ -23,6 +22,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AlertDialog.Builder; import androidx.appcompat.app.AlertDialog.Builder;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
@ -49,6 +49,7 @@ import java.util.regex.Matcher;
import static android.os.AsyncTask.Status.RUNNING; import static android.os.AsyncTask.Status.RUNNING;
import static android.view.View.GONE; import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static org.nuclearfog.twidda.activity.MainActivity.RETURN_APP_LOGOUT; import static org.nuclearfog.twidda.activity.MainActivity.RETURN_APP_LOGOUT;
import static org.nuclearfog.twidda.activity.MainActivity.RETURN_DB_CLEARED; import static org.nuclearfog.twidda.activity.MainActivity.RETURN_DB_CLEARED;
@ -72,6 +73,7 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
private EditText proxyAddr, proxyPort, proxyUser, proxyPass; private EditText proxyAddr, proxyPort, proxyUser, proxyPass;
private NumberPicker load_picker; private NumberPicker load_picker;
private Dialog load_dialog_selector, color_dialog_selector; private Dialog load_dialog_selector, color_dialog_selector;
private CheckBox enableProxy, enableAuth;
private Spinner locationSpinner; private Spinner locationSpinner;
private LocationAdapter locationAdapter; private LocationAdapter locationAdapter;
private View root, colorButton1_edge; private View root, colorButton1_edge;
@ -91,6 +93,8 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
CheckBox toggleImg = findViewById(R.id.toggleImg); CheckBox toggleImg = findViewById(R.id.toggleImg);
CheckBox toggleAns = findViewById(R.id.toggleAns); CheckBox toggleAns = findViewById(R.id.toggleAns);
Spinner fontSpinner = findViewById(R.id.spinner_font); Spinner fontSpinner = findViewById(R.id.spinner_font);
enableProxy = findViewById(R.id.settings_enable_proxy);
enableAuth = findViewById(R.id.settings_enable_auth);
locationSpinner = findViewById(R.id.spinner_woeid); locationSpinner = findViewById(R.id.spinner_woeid);
colorButton1_edge = findViewById(R.id.color_background_edge); colorButton1_edge = findViewById(R.id.color_background_edge);
colorButton1 = findViewById(R.id.color_background); colorButton1 = findViewById(R.id.color_background);
@ -142,7 +146,10 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
proxyPort.setText(settings.getProxyPort()); proxyPort.setText(settings.getProxyPort());
proxyUser.setText(settings.getProxyUser()); proxyUser.setText(settings.getProxyUser());
proxyPass.setText(settings.getProxyPass()); proxyPass.setText(settings.getProxyPass());
load_picker.setValue((settings.getRowLimit()) / 10); load_picker.setValue((settings.getListSize()) / 10);
enableProxy.setChecked(settings.isProxyEnabled());
enableAuth.setChecked(settings.isProxyAuthSet());
setProxySetupVisibility(settings.isProxyEnabled(), settings.isProxyAuthSet());
logout.setOnClickListener(this); logout.setOnClickListener(this);
load_popup.setOnClickListener(this); load_popup.setOnClickListener(this);
@ -153,6 +160,8 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
colorButton4.setOnClickListener(this); colorButton4.setOnClickListener(this);
toggleImg.setOnCheckedChangeListener(this); toggleImg.setOnCheckedChangeListener(this);
toggleAns.setOnCheckedChangeListener(this); toggleAns.setOnCheckedChangeListener(this);
enableProxy.setOnCheckedChangeListener(this);
enableAuth.setOnCheckedChangeListener(this);
fontSpinner.setOnItemSelectedListener(this); fontSpinner.setOnItemSelectedListener(this);
locationSpinner.setOnItemSelectedListener(this); locationSpinner.setOnItemSelectedListener(this);
load_dialog_selector.setOnDismissListener(this); load_dialog_selector.setOnDismissListener(this);
@ -162,7 +171,7 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
@Override @Override
protected void onStart() { protected void onStart() {
super.onStart(); super.onStart();
if (settings.getLogin() && locationAdapter.getCount() <= 1) { if (settings.getLogin() && locationAsync == null) {
locationAsync = new LocationListLoader(this); locationAsync = new LocationListLoader(this);
locationAsync.execute(); locationAsync.execute();
} }
@ -171,11 +180,20 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (validateInputs()) { if (saveProxySettings()) {
settings.setProxyServer(proxyAddr.getText().toString(), proxyPort.getText().toString());
settings.setProxyLogin(proxyUser.getText().toString(), proxyPass.getText().toString());
TwitterEngine.resetTwitter(); TwitterEngine.resetTwitter();
super.onBackPressed(); super.onBackPressed();
} else {
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.ConfirmDialog);
builder.setTitle(R.string.info_error).setMessage(R.string.info_wrong_proxy_settings);
builder.setPositiveButton(R.string.confirm_discard_proxy_changes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// exit without saving proxy settings
AppSettings.super.onBackPressed();
}
});
builder.setNegativeButton(android.R.string.cancel, null).show();
} }
} }
@ -308,8 +326,8 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
} }
} else if (d == load_dialog_selector) { } else if (d == load_dialog_selector) {
int selection = load_picker.getValue() * 10; int selection = load_picker.getValue() * 10;
if (settings.getRowLimit() != selection) { if (settings.getListSize() != selection) {
settings.setRowLimit(selection); settings.setListSize(selection);
} }
} }
} }
@ -325,6 +343,14 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
case R.id.toggleAns: case R.id.toggleAns:
settings.setAnswerLoad(checked); settings.setAnswerLoad(checked);
break; break;
case R.id.settings_enable_proxy:
setProxySetupVisibility(checked, false);
break;
case R.id.settings_enable_auth:
setProxySetupVisibility(true, checked);
break;
} }
} }
@ -357,13 +383,18 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
/** /**
* called when an error occurs * called when an error occurs
*
* @param err exception from twitter * @param err exception from twitter
*/ */
public void onError(EngineException err) { public void onError(EngineException err) {
ErrorHandler.handleFailure(this, err); ErrorHandler.handleFailure(this, err);
} }
/**
* show color picker dialog with preselected color
*
* @param preColor preselected color
*/
private void setColor(int preColor) { private void setColor(int preColor) {
color_dialog_selector = ColorPickerDialogBuilder.with(this) color_dialog_selector = ColorPickerDialogBuilder.with(this)
.showAlphaSlider(false).initialColor(preColor) .showAlphaSlider(false).initialColor(preColor)
@ -378,45 +409,58 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
color_dialog_selector.show(); color_dialog_selector.show();
} }
/**
private boolean validateInputs() { * set visibility of proxy layouts
boolean success = true; *
Editable editAddr = proxyAddr.getText(); * @param proxySetup visibility of proxy setup
Editable editPort = proxyPort.getText(); * @param proxyLogin visibility of proxy login
Editable editUser = proxyUser.getText(); */
Editable editPass = proxyPass.getText(); private void setProxySetupVisibility(boolean proxySetup, boolean proxyLogin) {
int setupVisibility = proxySetup ? VISIBLE : GONE;
if (editAddr != null && editAddr.length() > 0) { int authVisibility = proxyLogin ? VISIBLE : GONE;
Matcher ipMatch = Patterns.IP_ADDRESS.matcher(editAddr); proxyAddr.setVisibility(setupVisibility);
if (!ipMatch.matches()) { proxyPort.setVisibility(setupVisibility);
String errMsg = getString(R.string.error_wrong_ip); enableAuth.setVisibility(setupVisibility);
proxyAddr.setError(errMsg); proxyUser.setVisibility(authVisibility);
success = false; proxyPass.setVisibility(authVisibility);
}
/**
* check proxy settings and save them if they are correct
*
* @return true if settings are saved successfully
*/
private boolean saveProxySettings() {
boolean checkPassed = true;
if (enableProxy.isChecked()) {
checkPassed = proxyAddr.length() > 0 && proxyPort.length() > 0;
if (checkPassed) {
Matcher ipMatch = Patterns.IP_ADDRESS.matcher(proxyAddr.getText());
checkPassed = ipMatch.matches();
}
if (checkPassed) {
int port = 0;
String portStr = proxyPort.getText().toString();
if (!portStr.isEmpty()) {
port = Integer.parseInt(portStr);
}
checkPassed = port > 0 && port < 65536;
}
if (enableAuth.isChecked() && checkPassed) {
checkPassed = proxyUser.length() > 0 && proxyPass.length() > 0;
}
if (checkPassed) {
String proxyAddrStr = proxyAddr.getText().toString();
String proxyPortStr = proxyPort.getText().toString();
String proxyUserStr = proxyUser.getText().toString();
String proxyPassStr = proxyPass.getText().toString();
settings.setProxyServer(proxyAddrStr, proxyPortStr, proxyUserStr, proxyPassStr);
settings.setProxyEnabled(true);
settings.setProxyAuthSet(enableAuth.isChecked());
} }
if (editPort == null || editPort.length() == 0) {
String errMsg = getString(R.string.error_empty_port);
proxyPort.setError(errMsg);
success = false;
} else if (editPort.length() > 5) {
String errMsg = getString(R.string.error_invalid_port);
proxyPort.setError(errMsg);
success = false;
} else { } else {
int port = Integer.parseInt(editPort.toString()); settings.clearProxyServer();
if (port < 0 || port > 65535) { }
String errMsg = getString(R.string.error_invalid_port); return checkPassed;
proxyPort.setError(errMsg);
success = false;
}
}
}
if (editUser != null && editUser.length() > 0) {
if (editPass != null && editPass.length() == 0) {
String errMsg = getString(R.string.error_empty_pass);
proxyPass.setError(errMsg);
success = false;
}
}
return success;
} }
} }

View File

@ -13,8 +13,6 @@ import java.net.URI;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static java.net.Authenticator.RequestorType.PROXY;
/** /**
* Creates a https proxy connection for all connections * Creates a https proxy connection for all connections
*/ */
@ -24,9 +22,9 @@ abstract class ProxySetup {
ProxyConnection proxyConnection; ProxyConnection proxyConnection;
ProxyAuthenticator proxyLogin; ProxyAuthenticator proxyLogin;
if (settings.isProxyServerSet()) { if (settings.isProxyEnabled()) {
proxyConnection = new ProxyConnection(settings); proxyConnection = new ProxyConnection(settings);
if (settings.isProxyLoginSet()) { if (settings.isProxyAuthSet()) {
proxyLogin = new ProxyAuthenticator(settings); proxyLogin = new ProxyAuthenticator(settings);
} else { } else {
proxyLogin = new ProxyAuthenticator(); proxyLogin = new ProxyAuthenticator();
@ -65,10 +63,8 @@ abstract class ProxySetup {
int proxyPort = settings.getProxyPortNumber(); int proxyPort = settings.getProxyPortNumber();
InetSocketAddress socket = new InetSocketAddress(proxyHost, proxyPort); InetSocketAddress socket = new InetSocketAddress(proxyHost, proxyPort);
Proxy httpsProxy = new Proxy(Proxy.Type.HTTP, socket); Proxy httpsProxy = new Proxy(Proxy.Type.HTTP, socket);
Proxy socksProxy = new Proxy(Proxy.Type.SOCKS, socket); proxyList = new ArrayList<>(1);
proxyList = new ArrayList<>(2);
proxyList.add(httpsProxy); proxyList.add(httpsProxy);
proxyList.add(socksProxy);
} }
@Override @Override
@ -115,10 +111,5 @@ abstract class ProxySetup {
protected PasswordAuthentication getPasswordAuthentication() { protected PasswordAuthentication getPasswordAuthentication() {
return proxyPass; return proxyPass;
} }
@Override
protected RequestorType getRequestorType() {
return PROXY;
}
} }
} }

View File

@ -77,10 +77,10 @@ public class TwitterEngine {
builder.setOAuthConsumerKey(BuildConfig.API_KEY_1); builder.setOAuthConsumerKey(BuildConfig.API_KEY_1);
builder.setOAuthConsumerSecret(BuildConfig.API_KEY_2); builder.setOAuthConsumerSecret(BuildConfig.API_KEY_2);
// Twitter4J has its own proxy settings // Twitter4J has its own proxy settings
if (settings.isProxyServerSet()) { if (settings.isProxyEnabled()) {
builder.setHttpProxyHost(settings.getProxyHost()); builder.setHttpProxyHost(settings.getProxyHost());
builder.setHttpProxyPort(settings.getProxyPortNumber()); builder.setHttpProxyPort(settings.getProxyPortNumber());
if (settings.isProxyLoginSet()) { if (settings.isProxyAuthSet()) {
builder.setHttpProxyUser(settings.getProxyUser()); builder.setHttpProxyUser(settings.getProxyUser());
builder.setHttpProxyPassword(settings.getProxyPass()); builder.setHttpProxyPassword(settings.getProxyPass());
} }
@ -179,7 +179,7 @@ public class TwitterEngine {
public List<Tweet> getHome(long sinceId, long maxId) throws EngineException { public List<Tweet> getHome(long sinceId, long maxId) throws EngineException {
try { try {
Paging paging = new Paging(); Paging paging = new Paging();
paging.setCount(settings.getRowLimit()); paging.setCount(settings.getListSize());
if (sinceId > 0) if (sinceId > 0)
paging.setSinceId(sinceId); paging.setSinceId(sinceId);
if (maxId > 1) if (maxId > 1)
@ -203,7 +203,7 @@ public class TwitterEngine {
public List<Tweet> getMention(long sinceId, long maxId) throws EngineException { public List<Tweet> getMention(long sinceId, long maxId) throws EngineException {
try { try {
Paging paging = new Paging(); Paging paging = new Paging();
paging.setCount(settings.getRowLimit()); paging.setCount(settings.getListSize());
if (sinceId > 0) if (sinceId > 0)
paging.setSinceId(sinceId); paging.setSinceId(sinceId);
if (maxId > 1) if (maxId > 1)
@ -227,7 +227,7 @@ public class TwitterEngine {
*/ */
public List<Tweet> searchTweets(String search, long sinceId, long maxId) throws EngineException { public List<Tweet> searchTweets(String search, long sinceId, long maxId) throws EngineException {
try { try {
int load = settings.getRowLimit(); int load = settings.getListSize();
Query q = new Query(); Query q = new Query();
q.setQuery(search + " +exclude:retweets"); q.setQuery(search + " +exclude:retweets");
q.setCount(load); q.setCount(load);
@ -321,7 +321,7 @@ public class TwitterEngine {
public List<Tweet> getUserTweets(long userId, long sinceId, long maxId) throws EngineException { public List<Tweet> getUserTweets(long userId, long sinceId, long maxId) throws EngineException {
try { try {
Paging paging = new Paging(); Paging paging = new Paging();
paging.setCount(settings.getRowLimit()); paging.setCount(settings.getListSize());
if (sinceId > 0) if (sinceId > 0)
paging.setSinceId(sinceId); paging.setSinceId(sinceId);
if (maxId > 1) if (maxId > 1)
@ -345,7 +345,7 @@ public class TwitterEngine {
public List<Tweet> getUserTweets(String username, long sinceId, long maxId) throws EngineException { public List<Tweet> getUserTweets(String username, long sinceId, long maxId) throws EngineException {
try { try {
Paging paging = new Paging(); Paging paging = new Paging();
paging.setCount(settings.getRowLimit()); paging.setCount(settings.getListSize());
if (sinceId > 0) if (sinceId > 0)
paging.setSinceId(sinceId); paging.setSinceId(sinceId);
if (maxId > 0) if (maxId > 0)
@ -369,7 +369,7 @@ public class TwitterEngine {
public List<Tweet> getUserFavs(long userId, long sinceId, long maxId) throws EngineException { public List<Tweet> getUserFavs(long userId, long sinceId, long maxId) throws EngineException {
try { try {
Paging paging = new Paging(); Paging paging = new Paging();
paging.setCount(settings.getRowLimit()); paging.setCount(settings.getListSize());
if (sinceId > 0) if (sinceId > 0)
paging.setSinceId(sinceId); paging.setSinceId(sinceId);
if (maxId > 1) if (maxId > 1)
@ -393,7 +393,7 @@ public class TwitterEngine {
public List<Tweet> getUserFavs(String username, long sinceId, long maxId) throws EngineException { public List<Tweet> getUserFavs(String username, long sinceId, long maxId) throws EngineException {
try { try {
Paging paging = new Paging(); Paging paging = new Paging();
paging.setCount(settings.getRowLimit()); paging.setCount(settings.getListSize());
if (sinceId > 0) if (sinceId > 0)
paging.setSinceId(sinceId); paging.setSinceId(sinceId);
if (maxId > 0) if (maxId > 0)
@ -590,7 +590,7 @@ public class TwitterEngine {
*/ */
public UserListHolder getFollowing(long userId, long cursor) throws EngineException { public UserListHolder getFollowing(long userId, long cursor) throws EngineException {
try { try {
int load = settings.getRowLimit(); int load = settings.getListSize();
IDs userIDs = twitter.getFriendsIDs(userId, cursor, load); IDs userIDs = twitter.getFriendsIDs(userId, cursor, load);
long[] ids = userIDs.getIDs(); long[] ids = userIDs.getIDs();
long prevCursor = cursor > 0 ? cursor : 0; long prevCursor = cursor > 0 ? cursor : 0;
@ -617,7 +617,7 @@ public class TwitterEngine {
*/ */
public UserListHolder getFollower(long userId, long cursor) throws EngineException { public UserListHolder getFollower(long userId, long cursor) throws EngineException {
try { try {
int load = settings.getRowLimit(); int load = settings.getListSize();
IDs userIDs = twitter.getFollowersIDs(userId, cursor, load); IDs userIDs = twitter.getFollowersIDs(userId, cursor, load);
long[] ids = userIDs.getIDs(); long[] ids = userIDs.getIDs();
long prevCursor = cursor > 0 ? cursor : 0; long prevCursor = cursor > 0 ? cursor : 0;
@ -691,7 +691,7 @@ public class TwitterEngine {
*/ */
public List<Tweet> getAnswers(String name, long tweetId, long sinceId, long maxId) throws EngineException { public List<Tweet> getAnswers(String name, long tweetId, long sinceId, long maxId) throws EngineException {
try { try {
int load = settings.getRowLimit(); int load = settings.getListSize();
List<Status> answers = new LinkedList<>(); List<Status> answers = new LinkedList<>();
Query query = new Query("to:" + name + " +exclude:retweets"); Query query = new Query("to:" + name + " +exclude:retweets");
query.setCount(load); query.setCount(load);
@ -796,7 +796,7 @@ public class TwitterEngine {
*/ */
public UserListHolder getRetweeter(long tweetID, long cursor) throws EngineException { public UserListHolder getRetweeter(long tweetID, long cursor) throws EngineException {
try { try {
int load = settings.getRowLimit(); int load = settings.getListSize();
IDs userIDs = twitter.getRetweeterIds(tweetID, load, cursor); IDs userIDs = twitter.getRetweeterIds(tweetID, load, cursor);
long[] ids = userIDs.getIDs(); long[] ids = userIDs.getIDs();
long prevCursor = cursor > 0 ? cursor : 0; long prevCursor = cursor > 0 ? cursor : 0;
@ -822,7 +822,7 @@ public class TwitterEngine {
*/ */
public List<Message> getMessages() throws EngineException { public List<Message> getMessages() throws EngineException {
try { try {
int load = settings.getRowLimit(); int load = settings.getListSize();
List<DirectMessage> dmList = twitter.getDirectMessages(load); List<DirectMessage> dmList = twitter.getDirectMessages(load);
List<Message> result = new LinkedList<>(); List<Message> result = new LinkedList<>();
for (DirectMessage dm : dmList) { for (DirectMessage dm : dmList) {
@ -1028,7 +1028,7 @@ public class TwitterEngine {
public List<Tweet> getListTweets(long listId, long sinceId, long maxId) throws EngineException { public List<Tweet> getListTweets(long listId, long sinceId, long maxId) throws EngineException {
try { try {
Paging paging = new Paging(); Paging paging = new Paging();
paging.setCount(settings.getRowLimit()); paging.setCount(settings.getListSize());
if (sinceId > 0) if (sinceId > 0)
paging.setSinceId(sinceId); paging.setSinceId(sinceId);
if (maxId > 1) if (maxId > 1)

View File

@ -46,7 +46,7 @@ public class AppDatabase {
dataHelper = DatabaseAdapter.getInstance(context); dataHelper = DatabaseAdapter.getInstance(context);
GlobalSettings settings = GlobalSettings.getInstance(context); GlobalSettings settings = GlobalSettings.getInstance(context);
homeId = settings.getUserId(); homeId = settings.getUserId();
limit = settings.getRowLimit(); limit = settings.getListSize();
} }
/** /**

View File

@ -16,8 +16,28 @@ public class GlobalSettings {
public static final Typeface[] fonts = {Typeface.DEFAULT, Typeface.MONOSPACE, public static final Typeface[] fonts = {Typeface.DEFAULT, Typeface.MONOSPACE,
Typeface.SERIF, Typeface.create("sans-serif-thin", Typeface.NORMAL)}; Typeface.SERIF, Typeface.create("sans-serif-thin", Typeface.NORMAL)};
public static final String[] fontnames = {"Default", "Monospace", "Serif", "sans-serif-thin"}; public static final String[] fontnames = {"Default", "Monospace", "Serif", "sans-serif-thin"};
private static final String BACKGROUND_COLOR = "background_color";
private static final String HIGHLIGHT_COLOR = "highlight_color";
private static final String FONT_COLOR = "font_color";
private static final String POPUP_COLOR = "tweet_color";
private static final String INDEX_FONT = "index_font";
private static final String LIST_SIZE = "preload";
private static final String IMAGE_LOAD = "image_load";
private static final String ANSWER_LOAD = "answer_load";
private static final String LOGGED_IN = "login";
private static final String AUTH_KEY1 = "key1";
private static final String AUTH_KEY2 = "key2";
private static final String USER_ID = "userID";
private static final String PROXY_SET = "proxy_enabled";
private static final String AUTH_SET = "proxy_auth_set";
private static final String PROXY_ADDR = "proxy_addr";
private static final String PROXY_PORT = "proxy_port";
private static final String PROXY_USER = "proxy_user";
private static final String PROXY_PASS = "proxy_pass";
private static final String TREND_LOC = "location";
private static final String TREND_ID = "world_id";
private static final String NAME = "settings"; private static final String NAME = "settings";
private static final GlobalSettings ourInstance = new GlobalSettings(); private static final GlobalSettings ourInstance = new GlobalSettings();
private SharedPreferences settings; private SharedPreferences settings;
@ -26,12 +46,14 @@ public class GlobalSettings {
private boolean loadImage; private boolean loadImage;
private boolean loadAnswer; private boolean loadAnswer;
private boolean loggedIn; private boolean loggedIn;
private boolean isProxyEnabled;
private boolean isProxyAuthSet;
private int indexFont; private int indexFont;
private int background_color; private int background_color;
private int font_color; private int font_color;
private int highlight_color; private int highlight_color;
private int tweet_color; private int popup_color;
private int row; private int listSize;
private long userId; private long userId;
private String proxyHost, proxyPort; private String proxyHost, proxyPort;
@ -70,8 +92,9 @@ public class GlobalSettings {
*/ */
public void setBackgroundColor(int color) { public void setBackgroundColor(int color) {
background_color = color; background_color = color;
Editor edit = settings.edit(); Editor edit = settings.edit();
edit.putInt("background_color", color); edit.putInt(BACKGROUND_COLOR, color);
edit.apply(); edit.apply();
} }
@ -91,8 +114,9 @@ public class GlobalSettings {
*/ */
public void setFontColor(int color) { public void setFontColor(int color) {
font_color = color; font_color = color;
Editor edit = settings.edit(); Editor edit = settings.edit();
edit.putInt("font_color", color); edit.putInt(FONT_COLOR, color);
edit.apply(); edit.apply();
} }
@ -112,8 +136,9 @@ public class GlobalSettings {
*/ */
public void setHighlightColor(int color) { public void setHighlightColor(int color) {
highlight_color = color; highlight_color = color;
Editor edit = settings.edit(); Editor edit = settings.edit();
edit.putInt("highlight_color", color); edit.putInt(HIGHLIGHT_COLOR, color);
edit.apply(); edit.apply();
} }
@ -123,7 +148,7 @@ public class GlobalSettings {
* @return color value * @return color value
*/ */
public int getPopupColor() { public int getPopupColor() {
return tweet_color; return popup_color;
} }
/** /**
@ -132,9 +157,10 @@ public class GlobalSettings {
* @param color color value * @param color color value
*/ */
public void setPopupColor(int color) { public void setPopupColor(int color) {
tweet_color = color; popup_color = color;
Editor edit = settings.edit(); Editor edit = settings.edit();
edit.putInt("tweet_color", color); edit.putInt(POPUP_COLOR, color);
edit.apply(); edit.apply();
} }
@ -154,8 +180,9 @@ public class GlobalSettings {
*/ */
public void setImageLoad(boolean image) { public void setImageLoad(boolean image) {
loadImage = image; loadImage = image;
Editor edit = settings.edit(); Editor edit = settings.edit();
edit.putBoolean("image_load", image); edit.putBoolean(IMAGE_LOAD, image);
edit.apply(); edit.apply();
} }
@ -175,8 +202,9 @@ public class GlobalSettings {
*/ */
public void setAnswerLoad(boolean loadAnswer) { public void setAnswerLoad(boolean loadAnswer) {
this.loadAnswer = loadAnswer; this.loadAnswer = loadAnswer;
Editor edit = settings.edit(); Editor edit = settings.edit();
edit.putBoolean("answer_load", loadAnswer); edit.putBoolean(ANSWER_LOAD, loadAnswer);
edit.apply(); edit.apply();
} }
@ -196,9 +224,10 @@ public class GlobalSettings {
*/ */
public void setTrendLocation(TrendLocation location) { public void setTrendLocation(TrendLocation location) {
this.location = location; this.location = location;
Editor edit = settings.edit(); Editor edit = settings.edit();
edit.putInt("world_id", location.getWoeId()); edit.putInt(TREND_ID, location.getWoeId());
edit.putString("location", location.getName()); edit.putString(TREND_LOC, location.getName());
edit.apply(); edit.apply();
} }
@ -208,19 +237,20 @@ public class GlobalSettings {
* *
* @return max numbers of tweets/users should be loaded * @return max numbers of tweets/users should be loaded
*/ */
public int getRowLimit() { public int getListSize() {
return row; return listSize;
} }
/** /**
* set limit of tweets/users * set limit of tweets/users
* *
* @param limit max numbers of tweets/users * @param listSize max numbers of tweets/users
*/ */
public void setRowLimit(int limit) { public void setListSize(int listSize) {
row = limit; this.listSize = listSize;
Editor edit = settings.edit(); Editor edit = settings.edit();
edit.putInt("preload", limit); edit.putInt(LIST_SIZE, listSize);
edit.apply(); edit.apply();
} }
@ -245,12 +275,13 @@ public class GlobalSettings {
/** /**
* set font type * set font type
* *
* @param index index of font type in array * @param indexFont index of font type in array
*/ */
public void setFont(int index) { public void setFont(int indexFont) {
indexFont = index; this.indexFont = indexFont;
Editor edit = settings.edit(); Editor edit = settings.edit();
edit.putInt("index_font", index); edit.putInt(INDEX_FONT, indexFont);
edit.apply(); edit.apply();
} }
@ -260,19 +291,64 @@ public class GlobalSettings {
* @param proxyHost address of proxy * @param proxyHost address of proxy
* @param proxyPort port of proxy * @param proxyPort port of proxy
*/ */
public void setProxyServer(String proxyHost, String proxyPort) { public void setProxyServer(String proxyHost, String proxyPort, String proxyUser, String proxyPass) {
Editor edit = settings.edit();
if (proxyHost.trim().isEmpty()) {
this.proxyHost = "";
this.proxyPort = "";
edit.putString("proxy_addr", "");
edit.putString("proxy_port", "");
} else {
this.proxyHost = proxyHost; this.proxyHost = proxyHost;
this.proxyPort = proxyPort; this.proxyPort = proxyPort;
edit.putString("proxy_addr", proxyHost); this.proxyUser = proxyUser;
edit.putString("proxy_port", proxyPort); this.proxyPass = proxyPass;
Editor edit = settings.edit();
edit.putString(PROXY_ADDR, proxyHost);
edit.putString(PROXY_PORT, proxyPort);
edit.putString(PROXY_USER, proxyUser);
edit.putString(PROXY_PASS, proxyPass);
edit.apply();
} }
/**
* Remove Proxy settings
*/
public void clearProxyServer() {
isProxyEnabled = false;
isProxyAuthSet = false;
this.proxyHost = "";
this.proxyPort = "";
this.proxyUser = "";
this.proxyPass = "";
Editor edit = settings.edit();
edit.putBoolean(PROXY_SET, false);
edit.putBoolean(AUTH_SET, false);
edit.putString(PROXY_ADDR, "");
edit.putString(PROXY_PORT, "");
edit.putString(PROXY_USER, "");
edit.putString(PROXY_PASS, "");
edit.apply();
}
/**
* set proxy server connection enabled
*
* @param enable true if proxy connection is set
*/
public void setProxyEnabled(boolean enable) {
isProxyEnabled = enable;
Editor edit = settings.edit();
edit.putBoolean(PROXY_SET, enable);
edit.apply();
}
/**
* set proxy authentication enabled
*
* @param enable true if proxy auth is enabled
*/
public void setProxyAuthSet(boolean enable) {
isProxyAuthSet = enable;
Editor edit = settings.edit();
edit.putBoolean(AUTH_SET, enable);
edit.apply(); edit.apply();
} }
@ -282,7 +358,9 @@ public class GlobalSettings {
* @return proxy address * @return proxy address
*/ */
public String getProxyHost() { public String getProxyHost() {
if (isProxyEnabled)
return proxyHost; return proxyHost;
return "";
} }
/** /**
@ -291,7 +369,9 @@ public class GlobalSettings {
* @return proxy port string * @return proxy port string
*/ */
public String getProxyPort() { public String getProxyPort() {
if (isProxyEnabled)
return proxyPort; return proxyPort;
return "";
} }
/** /**
@ -311,8 +391,11 @@ public class GlobalSettings {
* @return username * @return username
*/ */
public String getProxyUser() { public String getProxyUser() {
if (isProxyAuthSet) {
return proxyUser; return proxyUser;
} }
return "";
}
/** /**
* get proxy password * get proxy password
@ -320,47 +403,28 @@ public class GlobalSettings {
* @return login password * @return login password
*/ */
public String getProxyPass() { public String getProxyPass() {
if (isProxyAuthSet) {
return proxyPass; return proxyPass;
} }
return "";
}
/** /**
* check if proxy is set * check if proxy connection is set
* *
* @return true if proxy is set * @return true if proxy is set
*/ */
public boolean isProxyServerSet() { public boolean isProxyEnabled() {
return !proxyHost.isEmpty(); return isProxyEnabled;
} }
/** /**
* check if proxy login is set * check kif proxy authentication is set
* *
* @return true if login is set * @return true if user auth is set
*/ */
public boolean isProxyLoginSet() { public boolean isProxyAuthSet() {
return !proxyUser.isEmpty(); return isProxyAuthSet;
}
/**
* set proxy user login
*
* @param proxyUser proxy username
* @param proxyPass proxy password
*/
public void setProxyLogin(String proxyUser, String proxyPass) {
Editor edit = settings.edit();
if (proxyUser.trim().isEmpty() || proxyHost.trim().isEmpty()) {
this.proxyUser = "";
this.proxyPass = "";
edit.putString("proxy_user", "");
edit.putString("proxy_pass", "");
} else {
this.proxyUser = proxyUser;
this.proxyPass = proxyPass;
edit.putString("proxy_user", proxyUser);
edit.putString("proxy_pass", proxyPass);
}
edit.apply();
} }
/** /**
@ -405,11 +469,12 @@ public class GlobalSettings {
this.key1 = key1; this.key1 = key1;
this.key2 = key2; this.key2 = key2;
this.userId = userId; this.userId = userId;
Editor e = settings.edit(); Editor e = settings.edit();
e.putBoolean("login", true); e.putBoolean(LOGGED_IN, true);
e.putLong("userID", userId); e.putLong(USER_ID, userId);
e.putString("key1", key1); e.putString(AUTH_KEY1, key1);
e.putString("key2", key2); e.putString(AUTH_KEY2, key2);
e.apply(); e.apply();
} }
@ -425,24 +490,26 @@ public class GlobalSettings {
* Init setting values * Init setting values
*/ */
private void initialize() { private void initialize() {
background_color = settings.getInt("background_color", 0xff0f114a); background_color = settings.getInt(BACKGROUND_COLOR, 0xff0f114a);
highlight_color = settings.getInt("highlight_color", 0xffff00ff); highlight_color = settings.getInt(HIGHLIGHT_COLOR, 0xffff00ff);
font_color = settings.getInt("font_color", 0xffffffff); font_color = settings.getInt(FONT_COLOR, 0xffffffff);
tweet_color = settings.getInt("tweet_color", 0xff19aae8); popup_color = settings.getInt(POPUP_COLOR, 0xff19aae8);
indexFont = settings.getInt("index_font", 0); indexFont = settings.getInt(INDEX_FONT, 0);
row = settings.getInt("preload", 20); listSize = settings.getInt(LIST_SIZE, 20);
loadImage = settings.getBoolean("image_load", true); loadImage = settings.getBoolean(IMAGE_LOAD, true);
loadAnswer = settings.getBoolean("answer_load", true); loadAnswer = settings.getBoolean(ANSWER_LOAD, true);
loggedIn = settings.getBoolean("login", false); loggedIn = settings.getBoolean(LOGGED_IN, false);
key1 = settings.getString("key1", ""); key1 = settings.getString(AUTH_KEY1, "");
key2 = settings.getString("key2", ""); key2 = settings.getString(AUTH_KEY2, "");
userId = settings.getLong("userID", -1L); userId = settings.getLong(USER_ID, -1L);
proxyHost = settings.getString("proxy_addr", ""); isProxyEnabled = settings.getBoolean(PROXY_SET, false);
proxyPort = settings.getString("proxy_port", ""); isProxyAuthSet = settings.getBoolean(AUTH_SET, false);
proxyUser = settings.getString("proxy_user", ""); proxyHost = settings.getString(PROXY_ADDR, "");
proxyPass = settings.getString("proxy_pass", ""); proxyPort = settings.getString(PROXY_PORT, "");
String place = settings.getString("location", "Worldwide"); proxyUser = settings.getString(PROXY_USER, "");
int woeId = settings.getInt("world_id", 1); proxyPass = settings.getString(PROXY_PASS, "");
String place = settings.getString(TREND_LOC, "Worldwide");
int woeId = settings.getInt(TREND_ID, 1);
location = new TrendLocation(place, woeId); location = new TrendLocation(place, woeId);
} }
} }

View File

@ -7,7 +7,6 @@
android:orientation="vertical"> android:orientation="vertical">
<ProgressBar <ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle" style="?android:attr/progressBarStyle"
android:layout_width="@dimen/item_image_progress_size" android:layout_width="@dimen/item_image_progress_size"
android:layout_height="@dimen/item_image_progress_size" android:layout_height="@dimen/item_image_progress_size"

View File

@ -260,28 +260,27 @@
<View <View
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/divider" android:layout_height="@dimen/divider"
android:layout_marginBottom="@dimen/margin_layout"
android:background="?android:attr/listDivider" /> android:background="?android:attr/listDivider" />
<CheckBox
android:id="@+id/settings_enable_proxy"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:text="@string/settings_enable_proxy" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginTop="@dimen/margin_layout"
android:orientation="horizontal"> android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:gravity="center_vertical"
android:singleLine="true"
android:text="@string/proxy_address_text" />
<EditText <EditText
android:id="@+id/edit_proxyadress" android:id="@+id/edit_proxyadress"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_margin="@dimen/settings_edittext_margin" android:layout_margin="@dimen/settings_edittext_margin"
android:layout_weight="4" android:layout_weight="2"
android:background="@color/half_transparent" android:background="@color/half_transparent"
android:digits="0123456789." android:digits="0123456789."
android:ems="10" android:ems="10"
@ -307,19 +306,19 @@
</LinearLayout> </LinearLayout>
<CheckBox
android:id="@+id/settings_enable_auth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true"
android:text="@string/settings_enable_proxy_auth" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="horizontal"> android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
android:gravity="center_vertical"
android:singleLine="true"
android:text="@string/proxy_authentication" />
<EditText <EditText
android:id="@+id/edit_proxyuser" android:id="@+id/edit_proxyuser"
android:layout_width="0dp" android:layout_width="0dp"

View File

@ -104,10 +104,6 @@
<string name="app_name">Shitter</string> <string name="app_name">Shitter</string>
<string name="tweet">Tweet</string> <string name="tweet">Tweet</string>
<string name="proxy_password">Passwort</string> <string name="proxy_password">Passwort</string>
<string name="proxy_address_text">HTTPS Proxy</string>
<string name="proxy_authentication">Proxy Login</string>
<string name="error_empty_port">Proxy port muss gesetzt werden!</string>
<string name="error_empty_pass">Proxy Passort darf nicht leer sein!</string>
<string name="error_dm_send">Direktnachricht konnte nicht an diesen Nutzer gesendet werden!</string> <string name="error_dm_send">Direktnachricht konnte nicht an diesen Nutzer gesendet werden!</string>
<string name="confirm_mute">User stummschalten?</string> <string name="confirm_mute">User stummschalten?</string>
<string name="error_location">Standort konnte nicht ermittelt werden!</string> <string name="error_location">Standort konnte nicht ermittelt werden!</string>
@ -128,7 +124,6 @@
<string name="page_profile_edior">Profil bearbeiten</string> <string name="page_profile_edior">Profil bearbeiten</string>
<string name="error_no_card_app">Keine Karten App gefunden!</string> <string name="error_no_card_app">Keine Karten App gefunden!</string>
<string name="error_no_media_app">Keine Galerie App gefunden!</string> <string name="error_no_media_app">Keine Galerie App gefunden!</string>
<string name="error_wrong_ip">Falsche IP Adresse!</string>
<string name="delete_list">Liste löschen</string> <string name="delete_list">Liste löschen</string>
<string name="confirm_delete_list">Liste löschen?</string> <string name="confirm_delete_list">Liste löschen?</string>
<string name="confirm_delete_message">Nachricht löschen?</string> <string name="confirm_delete_message">Nachricht löschen?</string>
@ -148,5 +143,8 @@
<string name="error_image_loading">Bild konnte nicht geladen werden!</string> <string name="error_image_loading">Bild konnte nicht geladen werden!</string>
<string name="item_image_save">Bild speichern</string> <string name="item_image_save">Bild speichern</string>
<string name="error_cant_load_video">Video kann nicht abgespielt werden!</string> <string name="error_cant_load_video">Video kann nicht abgespielt werden!</string>
<string name="error_invalid_port">Ungültiger Port!</string> <string name="settings_enable_proxy">Proxy aktivieren</string>
<string name="settings_enable_proxy_auth">Aktiviere Proxy Authentifizierung</string>
<string name="info_wrong_proxy_settings">Falsche Proxy Einstellungen</string>
<string name="confirm_discard_proxy_changes">Einstellungen Verwerfen</string>
</resources> </resources>

View File

@ -104,10 +104,6 @@
<string name="proxy_port">Port</string> <string name="proxy_port">Port</string>
<string name="edit_proxyuser">username</string> <string name="edit_proxyuser">username</string>
<string name="proxy_password">password</string> <string name="proxy_password">password</string>
<string name="proxy_address_text">HTTPS Proxy</string>
<string name="proxy_authentication">Proxy login</string>
<string name="error_empty_port">Port must be set!</string>
<string name="error_empty_pass">Proxy password should not be empty!</string>
<string name="error_dm_send">Cannot send direct message to this user!</string> <string name="error_dm_send">Cannot send direct message to this user!</string>
<string name="settings_info_link" translatable="false">https://github.com/nuclearfog/Shitter</string> <string name="settings_info_link" translatable="false">https://github.com/nuclearfog/Shitter</string>
<string name="confirm_mute">mute user?</string> <string name="confirm_mute">mute user?</string>
@ -129,7 +125,6 @@
<string name="page_profile_edior">Edit profile</string> <string name="page_profile_edior">Edit profile</string>
<string name="error_no_card_app">No card app installed!</string> <string name="error_no_card_app">No card app installed!</string>
<string name="error_no_media_app">No media app found!</string> <string name="error_no_media_app">No media app found!</string>
<string name="error_wrong_ip">wrong IP address!</string>
<string name="delete_list">delete list</string> <string name="delete_list">delete list</string>
<string name="confirm_delete_list">Delete list?</string> <string name="confirm_delete_list">Delete list?</string>
<string name="confirm_delete_message">Delete message?</string> <string name="confirm_delete_message">Delete message?</string>
@ -151,5 +146,8 @@
<string name="error_image_loading">Could not load image!</string> <string name="error_image_loading">Could not load image!</string>
<string name="item_image_save">save image</string> <string name="item_image_save">save image</string>
<string name="error_cant_load_video">Could not play video!</string> <string name="error_cant_load_video">Could not play video!</string>
<string name="error_invalid_port">Invalid port!</string> <string name="settings_enable_proxy">enable proxy</string>
<string name="settings_enable_proxy_auth">enable proxy authentication</string>
<string name="info_wrong_proxy_settings">Wrong Proxy settings!</string>
<string name="confirm_discard_proxy_changes">Discard changes</string>
</resources> </resources>