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); + } +}