diff --git a/library/AndroidManifest.xml b/library/AndroidManifest.xml
new file mode 100644
index 0000000000..150baa85c0
--- /dev/null
+++ b/library/AndroidManifest.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/library/build.xml b/library/build.xml
new file mode 100644
index 0000000000..29b2da612e
--- /dev/null
+++ b/library/build.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/library.iml b/library/library.iml
new file mode 100644
index 0000000000..5c4185b541
--- /dev/null
+++ b/library/library.iml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/library/libs/libphonenumber-5.3.jar b/library/libs/libphonenumber-5.3.jar
new file mode 100644
index 0000000000..7be725cc63
Binary files /dev/null and b/library/libs/libphonenumber-5.3.jar differ
diff --git a/library/proguard-project.txt b/library/proguard-project.txt
new file mode 100644
index 0000000000..f2fe1559a2
--- /dev/null
+++ b/library/proguard-project.txt
@@ -0,0 +1,20 @@
+# To enable ProGuard in your project, edit project.properties
+# to define the proguard.config property as described in that file.
+#
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in ${sdk.dir}/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the ProGuard
+# include property in project.properties.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
diff --git a/library/res/values/strings.xml b/library/res/values/strings.xml
new file mode 100644
index 0000000000..045e125f3d
--- /dev/null
+++ b/library/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/org/thoughtcrime/securesms/util/PhoneNumberFormatter.java b/library/src/org/whispersystems/textsecure/util/PhoneNumberFormatter.java
similarity index 85%
rename from src/org/thoughtcrime/securesms/util/PhoneNumberFormatter.java
rename to library/src/org/whispersystems/textsecure/util/PhoneNumberFormatter.java
index 0dede0538f..a22d37cb41 100644
--- a/src/org/thoughtcrime/securesms/util/PhoneNumberFormatter.java
+++ b/library/src/org/whispersystems/textsecure/util/PhoneNumberFormatter.java
@@ -1,8 +1,5 @@
-package org.thoughtcrime.securesms.util;
+package org.whispersystems.textsecure.util;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
import android.util.Log;
import com.google.i18n.phonenumbers.NumberParseException;
@@ -10,8 +7,6 @@ import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
-import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
-
import java.util.Locale;
/**
@@ -54,10 +49,8 @@ public class PhoneNumberFormatter {
}
}
- public static String formatNumber(Context context, String number) {
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- String localNumber = preferences.getString(ApplicationPreferencesActivity.LOCAL_NUMBER_PREF, "No Stored Number");
- number = number.replaceAll("[^0-9+]", "");
+ public static String formatNumber(String number, String localNumber) {
+ number = number.replaceAll("[^0-9+]", "");
if (number.charAt(0) == '+')
return number;
diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java
index 2de68899dc..58314708a6 100644
--- a/src/org/thoughtcrime/securesms/ConversationActivity.java
+++ b/src/org/thoughtcrime/securesms/ConversationActivity.java
@@ -89,6 +89,7 @@ import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.EncryptedCharacterCalculator;
import org.thoughtcrime.securesms.util.InvalidMessageException;
import org.thoughtcrime.securesms.util.MemoryCleaner;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import java.io.IOException;
@@ -599,9 +600,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
}
private void initializeIme() {
- if (PreferenceManager.getDefaultSharedPreferences(this)
- .getBoolean(ApplicationPreferencesActivity.ENTER_PRESENT_PREF, false))
- {
+ if (TextSecurePreferences.isEnterImeKeyEnabled(this)) {
composeText.setInputType(composeText.getInputType() & (~InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE));
} else {
composeText.setInputType(composeText.getInputType() | (InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE));
@@ -852,7 +851,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
if (rawText.length() < 1 && !attachmentManager.isAttachmentPresent())
throw new InvalidMessageException(getString(R.string.ConversationActivity_message_is_empty_exclamation));
- if (!isEncryptedConversation && Tag.isTaggable(this, rawText))
+ if (!isEncryptedConversation && Tag.isTaggable(rawText))
rawText = Tag.getTaggedMessage(rawText);
return rawText;
@@ -1002,9 +1001,7 @@ public class ConversationActivity extends PassphraseRequiredSherlockFragmentActi
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
- if (PreferenceManager.getDefaultSharedPreferences(ConversationActivity.this)
- .getBoolean(ApplicationPreferencesActivity.ENTER_SENDS_PREF, false))
- {
+ if (TextSecurePreferences.isEnterSendsEnabled(ConversationActivity.this)) {
sendButton.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
sendButton.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_ENTER));
return true;
diff --git a/src/org/thoughtcrime/securesms/PassphraseChangeActivity.java b/src/org/thoughtcrime/securesms/PassphraseChangeActivity.java
index 71c711d53f..6832da1561 100644
--- a/src/org/thoughtcrime/securesms/PassphraseChangeActivity.java
+++ b/src/org/thoughtcrime/securesms/PassphraseChangeActivity.java
@@ -30,6 +30,7 @@ import org.thoughtcrime.securesms.crypto.InvalidPassphraseException;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
import org.thoughtcrime.securesms.util.MemoryCleaner;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
/**
* Activity for changing a user's local encryption passphrase.
@@ -67,7 +68,7 @@ public class PassphraseChangeActivity extends PassphraseActivity {
this.okButton.setOnClickListener(new OkButtonClickListener());
this.cancelButton.setOnClickListener(new CancelButtonClickListener());
- if (isPassphraseDisabled()) {
+ if (TextSecurePreferences.isPasswordDisabled(this)) {
this.originalPassphrase.setVisibility(View.GONE);
this.originalPassphraseLabel.setVisibility(View.GONE);
} else {
@@ -85,7 +86,7 @@ public class PassphraseChangeActivity extends PassphraseActivity {
String passphrase = (newText == null ? "" : newText.toString());
String passphraseRepeat = (repeatText == null ? "" : repeatText.toString());
- if (isPassphraseDisabled()) {
+ if (TextSecurePreferences.isPasswordDisabled(this)) {
original = MasterSecretUtil.UNENCRYPTED_PASSPHRASE;
}
@@ -98,11 +99,7 @@ public class PassphraseChangeActivity extends PassphraseActivity {
this.repeatPassphrase.setText("");
} else {
MasterSecret masterSecret = MasterSecretUtil.changeMasterSecretPassphrase(this, original, passphrase);
-
- PreferenceManager.getDefaultSharedPreferences(this)
- .edit()
- .putBoolean(ApplicationPreferencesActivity.DISABLE_PASSPHRASE_PREF, false)
- .commit();
+ TextSecurePreferences.setPasswordDisabled(this, false);
MemoryCleaner.clean(original);
MemoryCleaner.clean(passphrase);
@@ -117,11 +114,6 @@ public class PassphraseChangeActivity extends PassphraseActivity {
}
}
- private boolean isPassphraseDisabled() {
- return PreferenceManager.getDefaultSharedPreferences(this)
- .getBoolean(ApplicationPreferencesActivity.DISABLE_PASSPHRASE_PREF, false);
- }
-
private class CancelButtonClickListener implements OnClickListener {
public void onClick(View v) {
finish();
diff --git a/src/org/thoughtcrime/securesms/RegistrationActivity.java b/src/org/thoughtcrime/securesms/RegistrationActivity.java
index e928da7a01..51453caf54 100644
--- a/src/org/thoughtcrime/securesms/RegistrationActivity.java
+++ b/src/org/thoughtcrime/securesms/RegistrationActivity.java
@@ -24,8 +24,8 @@ import com.google.i18n.phonenumbers.AsYouTypeFormatter;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber;
-import org.thoughtcrime.securesms.util.PhoneNumberFormatter;
import org.thoughtcrime.securesms.util.Util;
+import org.whispersystems.textsecure.util.PhoneNumberFormatter;
/**
* The register account activity. Begins the account registration process.
diff --git a/src/org/thoughtcrime/securesms/RegistrationProgressActivity.java b/src/org/thoughtcrime/securesms/RegistrationProgressActivity.java
index 63411510b0..c038148fd6 100644
--- a/src/org/thoughtcrime/securesms/RegistrationProgressActivity.java
+++ b/src/org/thoughtcrime/securesms/RegistrationProgressActivity.java
@@ -32,8 +32,8 @@ import com.actionbarsherlock.app.SherlockActivity;
import org.thoughtcrime.securesms.gcm.PushServiceSocket;
import org.thoughtcrime.securesms.gcm.RateLimitException;
import org.thoughtcrime.securesms.service.RegistrationService;
-import org.thoughtcrime.securesms.util.PhoneNumberFormatter;
import org.thoughtcrime.securesms.util.Util;
+import org.whispersystems.textsecure.util.PhoneNumberFormatter;
import java.io.IOException;
diff --git a/src/org/thoughtcrime/securesms/contacts/ContactIdentityManagerGingerbread.java b/src/org/thoughtcrime/securesms/contacts/ContactIdentityManagerGingerbread.java
index 5f4793ecb0..fb97ea23b6 100644
--- a/src/org/thoughtcrime/securesms/contacts/ContactIdentityManagerGingerbread.java
+++ b/src/org/thoughtcrime/securesms/contacts/ContactIdentityManagerGingerbread.java
@@ -12,6 +12,7 @@ import android.provider.ContactsContract.RawContacts;
import android.telephony.TelephonyManager;
import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
import java.util.ArrayList;
import java.util.List;
@@ -24,14 +25,10 @@ class ContactIdentityManagerGingerbread extends ContactIdentityManager {
@Override
public Uri getSelfIdentityUri() {
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- String contactUriString = preferences.getString(ApplicationPreferencesActivity.IDENTITY_PREF, null);
+ String contactUriString = TextSecurePreferences.getIdentityContactUri(context);
- if (hasLocalNumber()) {
- return getContactUriForNumber(getLocalNumber());
- } else if (contactUriString != null) {
- return Uri.parse(contactUriString);
- }
+ if (hasLocalNumber()) return getContactUriForNumber(getLocalNumber());
+ else if (contactUriString != null) return Uri.parse(contactUriString);
return null;
}
diff --git a/src/org/thoughtcrime/securesms/crypto/DecryptingQueue.java b/src/org/thoughtcrime/securesms/crypto/DecryptingQueue.java
index edf9233881..c14c9ba23c 100644
--- a/src/org/thoughtcrime/securesms/crypto/DecryptingQueue.java
+++ b/src/org/thoughtcrime/securesms/crypto/DecryptingQueue.java
@@ -35,6 +35,7 @@ import org.thoughtcrime.securesms.recipients.RecipientFormattingException;
import org.thoughtcrime.securesms.recipients.Recipients;
import org.thoughtcrime.securesms.sms.SmsTransportDetails;
import org.thoughtcrime.securesms.util.Hex;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.WorkerThread;
import java.io.IOException;
@@ -309,9 +310,7 @@ public class DecryptingQueue {
}
private void handleKeyExchangeProcessing(String plaintxtBody) {
- if (PreferenceManager.getDefaultSharedPreferences(context)
- .getBoolean(ApplicationPreferencesActivity.AUTO_KEY_EXCHANGE_PREF, true))
- {
+ if (TextSecurePreferences.isAutoRespondKeyExchangeEnabled(context)) {
try {
Recipient recipient = new Recipient(null, originator, null, null);
KeyExchangeMessage keyExchangeMessage = new KeyExchangeMessage(plaintxtBody);
diff --git a/src/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java b/src/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java
index 5ad3d4930c..e64ac42b89 100644
--- a/src/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java
+++ b/src/org/thoughtcrime/securesms/database/loaders/CountryListLoader.java
@@ -13,7 +13,7 @@ import android.support.v4.content.AsyncTaskLoader;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import org.thoughtcrime.securesms.util.PhoneNumberFormatter;
+import org.whispersystems.textsecure.util.PhoneNumberFormatter;
public class CountryListLoader extends AsyncTaskLoader>> {
diff --git a/src/org/thoughtcrime/securesms/directory/NumberFilter.java b/src/org/thoughtcrime/securesms/directory/NumberFilter.java
index 04c7d3dc73..89a6a5d7c5 100644
--- a/src/org/thoughtcrime/securesms/directory/NumberFilter.java
+++ b/src/org/thoughtcrime/securesms/directory/NumberFilter.java
@@ -23,7 +23,9 @@ import android.util.Log;
import com.google.thoughtcrimegson.Gson;
import com.google.thoughtcrimegson.JsonParseException;
import com.google.thoughtcrimegson.annotations.SerializedName;
-import org.thoughtcrime.securesms.util.PhoneNumberFormatter;
+
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
+import org.whispersystems.textsecure.util.PhoneNumberFormatter;
import java.io.BufferedReader;
import java.io.File;
@@ -75,7 +77,10 @@ public class NumberFilter {
if (bloomFilter == null) return false;
else if (number == null || number.length() == 0) return false;
- return new BloomFilter(bloomFilter, hashCount).contains(PhoneNumberFormatter.formatNumber(context, number));
+ String localNumber = TextSecurePreferences.getLocalNumber(context);
+
+ return new BloomFilter(bloomFilter, hashCount)
+ .contains(PhoneNumberFormatter.formatNumber(number, localNumber));
} catch (IOException ioe) {
Log.w("NumberFilter", ioe);
return false;
diff --git a/src/org/thoughtcrime/securesms/gcm/GcmIntentService.java b/src/org/thoughtcrime/securesms/gcm/GcmIntentService.java
index 8b60a17899..ef51aee6a5 100644
--- a/src/org/thoughtcrime/securesms/gcm/GcmIntentService.java
+++ b/src/org/thoughtcrime/securesms/gcm/GcmIntentService.java
@@ -12,6 +12,7 @@ import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
import org.thoughtcrime.securesms.service.RegistrationService;
import org.thoughtcrime.securesms.service.SendReceiveService;
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import java.io.IOException;
@@ -76,9 +77,8 @@ public class GcmIntentService extends GCMBaseIntentService {
}
private PushServiceSocket getGcmSocket(Context context) {
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- String localNumber = preferences.getString(ApplicationPreferencesActivity.LOCAL_NUMBER_PREF, null);
- String password = preferences.getString(ApplicationPreferencesActivity.GCM_PASSWORD_PREF, null);
+ String localNumber = TextSecurePreferences.getLocalNumber(context);
+ String password = TextSecurePreferences.getPushServerPassword(context);
return new PushServiceSocket(context, localNumber, password);
}
}
diff --git a/src/org/thoughtcrime/securesms/gcm/OptimizingTransport.java b/src/org/thoughtcrime/securesms/gcm/OptimizingTransport.java
index a7c51342ac..a01bd5c4ed 100644
--- a/src/org/thoughtcrime/securesms/gcm/OptimizingTransport.java
+++ b/src/org/thoughtcrime/securesms/gcm/OptimizingTransport.java
@@ -3,14 +3,12 @@ package org.thoughtcrime.securesms.gcm;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.Context;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
import android.telephony.SmsManager;
import android.util.Log;
-import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
import org.thoughtcrime.securesms.directory.NumberFilter;
-import org.thoughtcrime.securesms.util.PhoneNumberFormatter;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
+import org.whispersystems.textsecure.util.PhoneNumberFormatter;
import java.io.IOException;
import java.util.ArrayList;
@@ -20,10 +18,13 @@ public class OptimizingTransport {
public static void sendTextMessage(Context context, String destinationAddress, String message,
PendingIntent sentIntent, PendingIntent deliveredIntent)
{
- Log.w("OptimzingTransport", "Outgoing message: " + PhoneNumberFormatter.formatNumber(context, destinationAddress));
- NumberFilter filter = NumberFilter.getInstance(context);
+ String localNumber = TextSecurePreferences.getLocalNumber(context);
+ String canonicalizedDestinationAddress = PhoneNumberFormatter.formatNumber(destinationAddress, localNumber);
+ NumberFilter filter = NumberFilter.getInstance(context);
- if (filter.containsNumber(PhoneNumberFormatter.formatNumber(context, destinationAddress))) {
+ Log.w("OptimzingTransport", "Outgoing message: " + canonicalizedDestinationAddress);
+
+ if (filter.containsNumber(canonicalizedDestinationAddress)) {
Log.w("OptimzingTransport", "In the filter, sending GCM...");
sendGcmTextMessage(context, destinationAddress, message, sentIntent, deliveredIntent);
} else {
@@ -48,9 +49,8 @@ public class OptimizingTransport {
PendingIntent sentIntent, PendingIntent deliveredIntent)
{
try {
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- String localNumber = preferences.getString(ApplicationPreferencesActivity.LOCAL_NUMBER_PREF, null);
- String password = preferences.getString(ApplicationPreferencesActivity.GCM_PASSWORD_PREF, null);
+ String localNumber = TextSecurePreferences.getLocalNumber(context);
+ String password = TextSecurePreferences.getPushServerPassword(context);
if (localNumber == null || password == null) {
Log.w("OptimzingTransport", "No credentials, falling back to SMS...");
@@ -59,7 +59,7 @@ public class OptimizingTransport {
}
PushServiceSocket pushServiceSocket = new PushServiceSocket(context, localNumber, password);
- pushServiceSocket.sendMessage(PhoneNumberFormatter.formatNumber(context, recipient), messageText);
+ pushServiceSocket.sendMessage(PhoneNumberFormatter.formatNumber(recipient, localNumber), messageText);
sentIntent.send(Activity.RESULT_OK);
} catch (IOException ioe) {
Log.w("OptimizingTransport", ioe);
diff --git a/src/org/thoughtcrime/securesms/mms/MmsCommunication.java b/src/org/thoughtcrime/securesms/mms/MmsCommunication.java
index 1930c30558..b22e95c331 100644
--- a/src/org/thoughtcrime/securesms/mms/MmsCommunication.java
+++ b/src/org/thoughtcrime/securesms/mms/MmsCommunication.java
@@ -36,6 +36,7 @@ import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
import org.thoughtcrime.securesms.database.DatabaseFactory;
import org.thoughtcrime.securesms.service.MmsDownloader;
import org.thoughtcrime.securesms.util.Conversions;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
import org.thoughtcrime.securesms.util.Util;
import java.io.DataInputStream;
@@ -47,10 +48,8 @@ public class MmsCommunication {
protected static MmsConnectionParameters getLocallyConfiguredMmsConnectionParameters(Context context)
throws ApnUnavailableException
{
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
-
- if (preferences.getBoolean(ApplicationPreferencesActivity.ENABLE_MANUAL_MMS_PREF, false)) {
- String mmsc = preferences.getString(ApplicationPreferencesActivity.MMSC_HOST_PREF, null);
+ if (TextSecurePreferences.isUseLocalApnsEnabled(context)) {
+ String mmsc = TextSecurePreferences.getMmscUrl(context);
if (mmsc == null)
throw new ApnUnavailableException("Malformed locally configured MMSC.");
@@ -58,8 +57,8 @@ public class MmsCommunication {
if (!mmsc.startsWith("http"))
mmsc = "http://" + mmsc;
- String proxy = preferences.getString(ApplicationPreferencesActivity.MMSC_PROXY_HOST_PREF, null);
- String port = preferences.getString(ApplicationPreferencesActivity.MMSC_PROXY_PORT_PREF, null);
+ String proxy = TextSecurePreferences.getMmscProxy(context);
+ String port = TextSecurePreferences.getMmscProxyPort(context);
return new MmsConnectionParameters(mmsc, proxy, port);
}
@@ -70,9 +69,7 @@ public class MmsCommunication {
protected static MmsConnectionParameters getLocalMmsConnectionParameters(Context context)
throws ApnUnavailableException
{
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
-
- if (preferences.getBoolean(ApplicationPreferencesActivity.ENABLE_MANUAL_MMS_PREF, false)) {
+ if (TextSecurePreferences.isUseLocalApnsEnabled(context)) {
return getLocallyConfiguredMmsConnectionParameters(context);
} else {
MmsConnectionParameters params = ApnDefaults.getMmsConnectionParameters(context);
@@ -205,7 +202,7 @@ public class MmsCommunication {
}
public boolean hasProxy() {
- return proxy != null && proxy.trim().length() != 0;
+ return !Util.isEmpty(proxy);
}
public String getMmsc() {
@@ -220,7 +217,7 @@ public class MmsCommunication {
}
public int getPort() {
- if (port == null || port.trim().length() == 0)
+ if (Util.isEmpty(port))
return 80;
return Integer.parseInt(port);
diff --git a/src/org/thoughtcrime/securesms/protocol/Tag.java b/src/org/thoughtcrime/securesms/protocol/Tag.java
index bcdb98be33..b863d4ca3d 100644
--- a/src/org/thoughtcrime/securesms/protocol/Tag.java
+++ b/src/org/thoughtcrime/securesms/protocol/Tag.java
@@ -10,9 +10,7 @@ public class Tag {
public static final String WHITESPACE_TAG = " ";
- public static boolean isTaggable(Context context, String message) {
- SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
-
+ public static boolean isTaggable(String message) {
return message.matches(".*[^\\s].*") &&
message.replaceAll("\\s+$", "").length() + WHITESPACE_TAG.length() <= 158;
}
diff --git a/src/org/thoughtcrime/securesms/service/KeyCachingService.java b/src/org/thoughtcrime/securesms/service/KeyCachingService.java
index c31bdc3ace..fef8f495c0 100644
--- a/src/org/thoughtcrime/securesms/service/KeyCachingService.java
+++ b/src/org/thoughtcrime/securesms/service/KeyCachingService.java
@@ -42,6 +42,7 @@ import org.thoughtcrime.securesms.crypto.InvalidPassphraseException;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
import org.thoughtcrime.securesms.notifications.MessageNotifier;
+import org.thoughtcrime.securesms.util.TextSecurePreferences;
/**
* Small service that stays running to keep a key cached in memory.
@@ -117,7 +118,7 @@ public class KeyCachingService extends Service {
this.pending = PendingIntent.getService(this, 0, new Intent(PASSPHRASE_EXPIRED_EVENT, null,
this, KeyCachingService.class), 0);
- if (isPassphraseDisabled()) {
+ if (TextSecurePreferences.isPasswordDisabled(this)) {
try {
MasterSecret masterSecret = MasterSecretUtil.getMasterSecret(this, MasterSecretUtil.UNENCRYPTED_PASSPHRASE);
setMasterSecret(masterSecret);
@@ -168,7 +169,7 @@ public class KeyCachingService extends Service {
}
private void handleDisableService() {
- if (isPassphraseDisabled())
+ if (TextSecurePreferences.isPasswordDisabled(this))
stopForeground(true);
}
@@ -176,7 +177,7 @@ public class KeyCachingService extends Service {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
boolean timeoutEnabled = sharedPreferences.getBoolean(ApplicationPreferencesActivity.PASSPHRASE_TIMEOUT_PREF, false);
- if ((activitiesRunning == 0) && (this.masterSecret != null) && timeoutEnabled && !isPassphraseDisabled()) {
+ if ((activitiesRunning == 0) && (this.masterSecret != null) && timeoutEnabled && !TextSecurePreferences.isPasswordDisabled(this)) {
long timeoutMinutes = sharedPreferences.getInt(ApplicationPreferencesActivity.PASSPHRASE_TIMEOUT_INTERVAL_PREF, 60 * 5);
long timeoutMillis = timeoutMinutes * 60 * 1000;
@@ -233,7 +234,7 @@ public class KeyCachingService extends Service {
}
private void foregroundService() {
- if (isPassphraseDisabled()) {
+ if (TextSecurePreferences.isPasswordDisabled(this)) {
stopForeground(true);
return;
}
@@ -257,11 +258,6 @@ public class KeyCachingService extends Service {
sendBroadcast(intent, KEY_PERMISSION);
}
- private boolean isPassphraseDisabled() {
- return PreferenceManager.getDefaultSharedPreferences(this)
- .getBoolean(ApplicationPreferencesActivity.DISABLE_PASSPHRASE_PREF, false);
- }
-
private PendingIntent buildLockIntent() {
Intent intent = new Intent(this, KeyCachingService.class);
intent.setAction(PASSPHRASE_EXPIRED_EVENT);
diff --git a/src/org/thoughtcrime/securesms/transport/UniversalTransport.java b/src/org/thoughtcrime/securesms/transport/UniversalTransport.java
index 3b124a0bd5..ef63ba6f26 100644
--- a/src/org/thoughtcrime/securesms/transport/UniversalTransport.java
+++ b/src/org/thoughtcrime/securesms/transport/UniversalTransport.java
@@ -1,15 +1,9 @@
package org.thoughtcrime.securesms.transport;
import android.content.Context;
-import android.util.Log;
import org.thoughtcrime.securesms.crypto.MasterSecret;
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
-import org.thoughtcrime.securesms.directory.NumberFilter;
-import org.thoughtcrime.securesms.recipients.Recipient;
-import org.thoughtcrime.securesms.util.PhoneNumberFormatter;
-
-import java.io.IOException;
public class UniversalTransport {
diff --git a/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java
new file mode 100644
index 0000000000..2bf8a51db2
--- /dev/null
+++ b/src/org/thoughtcrime/securesms/util/TextSecurePreferences.java
@@ -0,0 +1,69 @@
+package org.thoughtcrime.securesms.util;
+
+import android.content.Context;
+import android.preference.PreferenceManager;
+
+import org.thoughtcrime.securesms.ApplicationPreferencesActivity;
+
+public class TextSecurePreferences {
+
+ public static String getLocalNumber(Context context) {
+ return getStringPreference(context, ApplicationPreferencesActivity.LOCAL_NUMBER_PREF, "No Stored Number");
+ }
+
+ public static String getPushServerPassword(Context context) {
+ return getStringPreference(context, ApplicationPreferencesActivity.GCM_PASSWORD_PREF, null);
+ }
+
+ public static boolean isEnterImeKeyEnabled(Context context) {
+ return getBooleanPreference(context, ApplicationPreferencesActivity.ENTER_PRESENT_PREF, false);
+ }
+
+ public static boolean isEnterSendsEnabled(Context context) {
+ return getBooleanPreference(context, ApplicationPreferencesActivity.ENTER_SENDS_PREF, false);
+ }
+
+ public static boolean isPasswordDisabled(Context context) {
+ return getBooleanPreference(context, ApplicationPreferencesActivity.DISABLE_PASSPHRASE_PREF, false);
+ }
+
+ public static void setPasswordDisabled(Context context, boolean disabled) {
+ setBooleanPreference(context, ApplicationPreferencesActivity.DISABLE_PASSPHRASE_PREF, disabled);
+ }
+
+ public static String getMmscUrl(Context context) {
+ return getStringPreference(context, ApplicationPreferencesActivity.MMSC_HOST_PREF, "");
+ }
+
+ public static String getMmscProxy(Context context) {
+ return getStringPreference(context, ApplicationPreferencesActivity.MMSC_PROXY_HOST_PREF, "");
+ }
+
+ public static String getMmscProxyPort(Context context) {
+ return getStringPreference(context, ApplicationPreferencesActivity.MMSC_PROXY_PORT_PREF, "");
+ }
+
+ public static String getIdentityContactUri(Context context) {
+ return getStringPreference(context, ApplicationPreferencesActivity.IDENTITY_PREF, null);
+ }
+
+ public static boolean isAutoRespondKeyExchangeEnabled(Context context) {
+ return getBooleanPreference(context, ApplicationPreferencesActivity.AUTO_KEY_EXCHANGE_PREF, true);
+ }
+
+ public static boolean isUseLocalApnsEnabled(Context context) {
+ return getBooleanPreference(context, ApplicationPreferencesActivity.USE_LOCAL_MMS_APNS_PREF, false);
+ }
+
+ private static void setBooleanPreference(Context context, String key, boolean value) {
+ PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(key, value).commit();
+ }
+
+ private static boolean getBooleanPreference(Context context, String key, boolean defaultValue) {
+ return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(key, defaultValue);
+ }
+
+ private static String getStringPreference(Context context, String key, String defaultValue) {
+ return PreferenceManager.getDefaultSharedPreferences(context).getString(key, defaultValue);
+ }
+}