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