diff --git a/library/src/org/whispersystems/textsecure/push/PushServiceSocket.java b/library/src/org/whispersystems/textsecure/push/PushServiceSocket.java
index c487e5e7d9..0289773a69 100644
--- a/library/src/org/whispersystems/textsecure/push/PushServiceSocket.java
+++ b/library/src/org/whispersystems/textsecure/push/PushServiceSocket.java
@@ -142,6 +142,8 @@ public class PushServiceSocket {
return response.getKeys();
} catch (JsonParseException e) {
throw new IOException(e);
+ } catch (NotFoundException nfe) {
+ throw new UnregisteredUserException(destination.getNumber(), nfe);
}
}
@@ -163,6 +165,8 @@ public class PushServiceSocket {
return response.getKeys().get(0);
} catch (JsonParseException e) {
throw new IOException(e);
+ } catch (NotFoundException nfe) {
+ throw new UnregisteredUserException(destination.getNumber(), nfe);
}
}
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ebe96759f2..308e8571ee 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -24,6 +24,9 @@
Unregistering...
Unregistering for data based communication
Error connecting to server!
+ You are not registered with the push service...
+ Updating directory
+ Updating push directory...
@@ -689,7 +692,8 @@
Allow SMS Fallback
Send and receive SMS messages when push is not available
-
+ Refresh Push Directory
+
diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml
index 8919e21aaa..fa830d847b 100644
--- a/res/xml/preferences.xml
+++ b/res/xml/preferences.xml
@@ -173,5 +173,9 @@
+
+
+
diff --git a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java
index e5fbee7f51..7534464c68 100644
--- a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java
+++ b/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java
@@ -52,6 +52,7 @@ import org.thoughtcrime.securesms.crypto.MasterSecretUtil;
import org.thoughtcrime.securesms.push.PushServiceSocketFactory;
import org.thoughtcrime.securesms.service.KeyCachingService;
import org.thoughtcrime.securesms.util.ActionBarUtil;
+import org.thoughtcrime.securesms.util.DirectoryHelper;
import org.thoughtcrime.securesms.util.DynamicLanguage;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.MemoryCleaner;
@@ -82,7 +83,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
private static final String PUSH_MESSAGING_PREF = "pref_toggle_push_messaging";
private static final String MMS_PREF = "pref_mms_preferences";
private static final String KITKAT_DEFAULT_PREF = "pref_set_default";
-
+ private static final String UPDATE_DIRECTORY_PREF = "pref_update_directory";
private final DynamicTheme dynamicTheme = new DynamicTheme();
private final DynamicLanguage dynamicLanguage = new DynamicLanguage();
@@ -119,6 +120,8 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
.setOnPreferenceChangeListener(new ListSummaryListener());
this.findPreference(TextSecurePreferences.RINGTONE_PREF)
.setOnPreferenceChangeListener(new RingtoneSummaryListener());
+ this.findPreference(UPDATE_DIRECTORY_PREF)
+ .setOnPreferenceClickListener(new DirectoryUpdateListener());
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.LED_COLOR_PREF));
initializeListSummary((ListPreference) findPreference(TextSecurePreferences.LED_BLINK_PREF));
@@ -529,6 +532,46 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredSherlockPr
}
}
+ private class DirectoryUpdateListener implements Preference.OnPreferenceClickListener {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ final Context context = ApplicationPreferencesActivity.this;
+
+ if (!TextSecurePreferences.isPushRegistered(context)) {
+ Toast.makeText(context,
+ getString(R.string.ApplicationPreferencesActivity_you_are_not_registered_with_the_push_service),
+ Toast.LENGTH_LONG).show();
+ return true;
+ }
+
+ new AsyncTask() {
+ private ProgressDialog progress;
+
+ @Override
+ protected void onPreExecute() {
+ progress = ProgressDialog.show(context,
+ getString(R.string.ApplicationPreferencesActivity_updating_directory),
+ getString(R.string.ApplicationPreferencesActivity_updating_push_directory),
+ true);
+ }
+
+ @Override
+ protected Void doInBackground(Void... params) {
+ DirectoryHelper.refreshDirectory(context);
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(Void result) {
+ if (progress != null)
+ progress.dismiss();
+ }
+ }.execute();
+
+ return true;
+ }
+ }
+
/* http://code.google.com/p/android/issues/detail?id=4611#c35 */
@SuppressWarnings("deprecation")
@Override