55 */
66
77import android .Manifest ;
8+ import android .annotation .SuppressLint ;
89import android .app .Activity ;
910import android .content .Context ;
1011import android .content .Intent ;
@@ -84,13 +85,29 @@ public void onCreatePreferences(Bundle bundle, String s) {
8485
8586 }
8687
87- if (preferences .getSmsActivation ()) {
88- ((SwitchPreference ) findPreference (PreferenceManager .SMS_ACTIVE )).setChecked (true );
89- }
88+ SwitchPreference switchPreference =
89+ (SwitchPreference ) findPreference (PreferenceManager .REMOTE_NOTIFICATION_ACTIVE );
90+
91+ switchPreference .setChecked (preferences .isRemoteNotificationActive ());
92+
93+ switchPreference .setOnPreferenceChangeListener ((preference , newValue ) -> {
94+ // user wants to enable/disable remote notification
95+
96+ boolean enabled = (Boolean ) newValue ;
97+
98+ if (enabled && !canSendRemoteNotification ()) {
99+ collectDataForRemoteNotification ();
100+ }
101+
102+ preferences .setRemoteNotificationActive (enabled && canSendRemoteNotification ());
103+ switchPreference .setChecked (enabled && canSendRemoteNotification ());
90104
91- findPreference (PreferenceManager .SMS_NUMBER ).setOnPreferenceClickListener (preference -> {
92- if (preferences .getSmsNumber ().isEmpty ()) {
93- ((EditTextPreference ) findPreference (PreferenceManager .SMS_NUMBER )).setText (getCountryCode ());
105+ return false ;
106+ });
107+
108+ findPreference (PreferenceManager .REMOTE_PHONE_NUMBER ).setOnPreferenceClickListener (preference -> {
109+ if (preferences .getRemotePhoneNumber ().isEmpty ()) {
110+ ((EditTextPreference ) findPreference (PreferenceManager .REMOTE_PHONE_NUMBER )).setText (getCountryCode ());
94111 }
95112 return false ;
96113 });
@@ -101,11 +118,12 @@ public void onCreatePreferences(Bundle bundle, String s) {
101118 return false ;
102119 });
103120
104- if (checkValidString (preferences .getSmsNumber ())) {
105- ((EditTextPreference ) findPreference (PreferenceManager .SMS_NUMBER )).setText (preferences .getSmsNumber ().trim ());
106- findPreference (PreferenceManager .SMS_NUMBER ).setSummary (preferences .getSmsNumber ().trim ());
121+ if (checkValidString (preferences .getRemotePhoneNumber ())) {
122+ ((EditTextPreference ) findPreference (PreferenceManager .REMOTE_PHONE_NUMBER ))
123+ .setText (preferences .getRemotePhoneNumber ());
124+ findPreference (PreferenceManager .REMOTE_PHONE_NUMBER ).setSummary (preferences .getRemotePhoneNumber ());
107125 } else {
108- findPreference (PreferenceManager .SMS_NUMBER ).setSummary (R .string .sms_dialog_summary );
126+ findPreference (PreferenceManager .REMOTE_PHONE_NUMBER ).setSummary (R .string .sms_dialog_summary );
109127 }
110128
111129 if (preferences .getRemoteAccessActive ()) {
@@ -202,6 +220,41 @@ public void onCreatePreferences(Bundle bundle, String s) {
202220
203221 }
204222
223+ private boolean canSendRemoteNotification () {
224+ String remotePhoneNumber = preferences .getRemotePhoneNumber ();
225+ String signalUsername = preferences .getSignalUsername ();
226+ return !remotePhoneNumber .isEmpty () && !getCountryCode ().equalsIgnoreCase (remotePhoneNumber ) &&
227+ !TextUtils .isEmpty (signalUsername ) && !getCountryCode ().equalsIgnoreCase (signalUsername );
228+ }
229+
230+ /**
231+ * Collect data required for Remote notification with Signal.
232+ * We need a remote phone number and a verified signal Username.
233+ */
234+ @ SuppressLint ("RestrictedApi" )
235+ private void collectDataForRemoteNotification () {
236+ String remotePhoneNumber = preferences .getRemotePhoneNumber ();
237+ if (remotePhoneNumber .isEmpty () || getCountryCode ().equalsIgnoreCase (remotePhoneNumber )) {
238+ findPreference (PreferenceManager .REMOTE_PHONE_NUMBER ).performClick ();
239+ }
240+ String signalUsername = preferences .getSignalUsername ();
241+ if (TextUtils .isEmpty (signalUsername )) {
242+ findPreference (PreferenceManager .REGISTER_SIGNAL ).performClick ();
243+ } else {
244+ activateSignal (signalUsername , null );
245+ }
246+ }
247+
248+ private void onRemoteNotificationParameterChange () {
249+ SwitchPreference switchPreference =
250+ (SwitchPreference ) findPreference (PreferenceManager .REMOTE_NOTIFICATION_ACTIVE );
251+
252+ boolean remoteNotificationActive = canSendRemoteNotification ();
253+ preferences .setRemoteNotificationActive (remoteNotificationActive );
254+
255+ switchPreference .setChecked (remoteNotificationActive );
256+ }
257+
205258 @ Override
206259 public boolean onOptionsItemSelected (MenuItem item ) {
207260 switch (item .getItemId ()) {
@@ -230,6 +283,10 @@ protected void save() {
230283
231284 preferences .setSignalUsername (((EditTextPreference ) findPreference (PreferenceManager .REGISTER_SIGNAL )).getText ());
232285
286+ boolean remoteNotificationActive =
287+ ((SwitchPreference ) findPreference (PreferenceManager .REMOTE_NOTIFICATION_ACTIVE )).isChecked ();
288+ preferences .setRemoteNotificationActive (remoteNotificationActive );
289+
233290 boolean remoteAccessActive = ((SwitchPreference ) findPreference (PreferenceManager .REMOTE_ACCESS_ACTIVE )).isChecked ();
234291
235292 preferences .activateRemoteAccess (remoteAccessActive );
@@ -320,10 +377,6 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin
320377
321378 }
322379 break ;
323- case PreferenceManager .SMS_ACTIVE :
324-
325- setPhoneNumber ();
326- break ;
327380 case PreferenceManager .REMOTE_ACCESS_ACTIVE :
328381 boolean remoteAccessActive = ((SwitchPreference ) findPreference (PreferenceManager .REMOTE_ACCESS_ACTIVE )).isChecked ();
329382 if (remoteAccessActive ) {
@@ -348,19 +401,17 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin
348401 preferences .setSignalUsername ("" );
349402 findPreference (PreferenceManager .REGISTER_SIGNAL ).setSummary (R .string .register_signal_desc );
350403 }
404+ onRemoteNotificationParameterChange ();
351405 break ;
352406 case PreferenceManager .VERIFY_SIGNAL : {
353407 String text = ((EditTextPreference ) findPreference (PreferenceManager .VERIFY_SIGNAL )).getText ();
354408 activateSignal (preferences .getSignalUsername (), text );
409+ onRemoteNotificationParameterChange ();
355410 break ;
356411 }
357- case PreferenceManager .SMS_NUMBER :
358- boolean smsActive = ((SwitchPreference ) findPreference (PreferenceManager .SMS_ACTIVE )).isChecked ();
359- if (smsActive && TextUtils .isEmpty (preferences .getSignalUsername ())) {
360- askForPermission (Manifest .permission .SEND_SMS , 6 );
361- askForPermission (Manifest .permission .READ_PHONE_STATE , 6 );
362- }
412+ case PreferenceManager .REMOTE_PHONE_NUMBER :
363413 setPhoneNumber ();
414+ onRemoteNotificationParameterChange ();
364415 break ;
365416 case PreferenceManager .NOTIFICATION_TIME :
366417 try
@@ -471,20 +522,14 @@ private void setDefaultStoragePath () {
471522 }
472523
473524 private void setPhoneNumber () {
474- boolean smsActive = ((SwitchPreference ) findPreference (PreferenceManager .SMS_ACTIVE )).isChecked ();
475- String phoneNumber = ((EditTextPreference ) findPreference (PreferenceManager .SMS_NUMBER )).getText ();
476- if (smsActive && checkValidString (phoneNumber )) {
477- preferences .activateSms (true );
478- } else {
479- preferences .activateSms (false );
480- }
525+ String phoneNumber = ((EditTextPreference ) findPreference (PreferenceManager .REMOTE_PHONE_NUMBER )).getText ();
481526
482527 if (checkValidString (phoneNumber ) && !getCountryCode ().equalsIgnoreCase (phoneNumber )) {
483- preferences .setSmsNumber (phoneNumber .trim ());
484- findPreference (PreferenceManager .SMS_NUMBER ).setSummary (phoneNumber .trim ());
528+ preferences .setRemotePhoneNumber (phoneNumber .trim ());
529+ findPreference (PreferenceManager .REMOTE_PHONE_NUMBER ).setSummary (phoneNumber .trim ());
485530 } else if (!getCountryCode ().equalsIgnoreCase (phoneNumber )){
486- preferences .setSmsNumber ("" );
487- findPreference (PreferenceManager .SMS_NUMBER ).setSummary (R .string .sms_dialog_message );
531+ preferences .setRemotePhoneNumber ("" );
532+ findPreference (PreferenceManager .REMOTE_PHONE_NUMBER ).setSummary (R .string .sms_dialog_message );
488533 }
489534 }
490535
0 commit comments