@ -16,22 +16,14 @@
* /
package org.thoughtcrime.securesms ;
import android.app.AlertDialog ;
import android.content.Context ;
import android.content.DialogInterface ;
import android.content.Intent ;
import android.content.SharedPreferences ;
import android.os.Bundle ;
import android.preference.CheckBoxPreference ;
import android.preference.Preference ;
import android.support.v4.app.Fragment ;
import android.support.v4.app.FragmentManager ;
import android.support.v4.app.FragmentTransaction ;
import android.support.v4.preference.PreferenceFragment ;
import android.util.Log ;
import android.widget.Toast ;
import com.google.android.gms.gcm.GoogleCloudMessaging ;
import org.thoughtcrime.securesms.crypto.MasterSecret ;
import org.thoughtcrime.securesms.preferences.AdvancedPreferenceFragment ;
@ -40,20 +32,11 @@ import org.thoughtcrime.securesms.preferences.AppearancePreferenceFragment;
import org.thoughtcrime.securesms.preferences.NotificationsPreferenceFragment ;
import org.thoughtcrime.securesms.preferences.SmsMmsPreferenceFragment ;
import org.thoughtcrime.securesms.preferences.StoragePreferenceFragment ;
import org.thoughtcrime.securesms.push.TextSecureCommunicationFactory ;
import org.thoughtcrime.securesms.service.KeyCachingService ;
import org.thoughtcrime.securesms.util.Dialogs ;
import org.thoughtcrime.securesms.util.DynamicLanguage ;
import org.thoughtcrime.securesms.util.DynamicTheme ;
import org.thoughtcrime.securesms.util.MemoryCleaner ;
import org.thoughtcrime.securesms.util.ProgressDialogAsyncTask ;
import org.thoughtcrime.securesms.util.ResUtil ;
import org.thoughtcrime.securesms.util.TextSecurePreferences ;
import org.whispersystems.libaxolotl.util.guava.Optional ;
import org.whispersystems.textsecure.api.TextSecureAccountManager ;
import org.whispersystems.textsecure.api.push.exceptions.AuthorizationFailedException ;
import java.io.IOException ;
/ * *
* The Activity for application preference display and management .
@ -74,8 +57,6 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
private static final String PREFERENCE_CATEGORY_STORAGE = "preference_category_storage" ;
private static final String PREFERENCE_CATEGORY_ADVANCED = "preference_category_advanced" ;
private static final String PUSH_MESSAGING_PREF = "pref_toggle_push_messaging" ;
private final DynamicTheme dynamicTheme = new DynamicTheme ( ) ;
private final DynamicLanguage dynamicLanguage = new DynamicLanguage ( ) ;
@ -146,11 +127,8 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
@Override
public void onCreate ( Bundle icicle ) {
super . onCreate ( icicle ) ;
addPreferencesFromResource ( R . xml . preferences ) ;
initializePushMessagingToggle ( ) ;
this . findPreference ( PREFERENCE_CATEGORY_SMS_MMS )
. setOnPreferenceClickListener ( new CategoryClickListener ( PREFERENCE_CATEGORY_SMS_MMS ) ) ;
this . findPreference ( PREFERENCE_CATEGORY_NOTIFICATIONS )
@ -228,89 +206,5 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
return true ;
}
}
private void initializePushMessagingToggle ( ) {
CheckBoxPreference preference = ( CheckBoxPreference ) this . findPreference ( PUSH_MESSAGING_PREF ) ;
preference . setChecked ( TextSecurePreferences . isPushRegistered ( getActivity ( ) ) ) ;
preference . setOnPreferenceChangeListener ( new PushMessagingClickListener ( ) ) ;
}
private class PushMessagingClickListener implements Preference . OnPreferenceChangeListener {
private static final int SUCCESS = 0 ;
private static final int NETWORK_ERROR = 1 ;
private class DisablePushMessagesTask extends ProgressDialogAsyncTask < Void , Void , Integer > {
private final CheckBoxPreference checkBoxPreference ;
public DisablePushMessagesTask ( final CheckBoxPreference checkBoxPreference ) {
super ( getActivity ( ) , R . string . ApplicationPreferencesActivity_unregistering , R . string . ApplicationPreferencesActivity_unregistering_for_data_based_communication ) ;
this . checkBoxPreference = checkBoxPreference ;
}
@Override
protected void onPostExecute ( Integer result ) {
super . onPostExecute ( result ) ;
switch ( result ) {
case NETWORK_ERROR :
Toast . makeText ( getActivity ( ) ,
R . string . ApplicationPreferencesActivity_error_connecting_to_server ,
Toast . LENGTH_LONG ) . show ( ) ;
break ;
case SUCCESS :
checkBoxPreference . setChecked ( false ) ;
TextSecurePreferences . setPushRegistered ( getActivity ( ) , false ) ;
break ;
}
}
@Override
protected Integer doInBackground ( Void . . . params ) {
try {
Context context = getActivity ( ) ;
TextSecureAccountManager accountManager = TextSecureCommunicationFactory . createManager ( context ) ;
accountManager . setGcmId ( Optional . < String > absent ( ) ) ;
GoogleCloudMessaging . getInstance ( context ) . unregister ( ) ;
return SUCCESS ;
} catch ( AuthorizationFailedException afe ) {
Log . w ( TAG , afe ) ;
return SUCCESS ;
} catch ( IOException ioe ) {
Log . w ( TAG , ioe ) ;
return NETWORK_ERROR ;
}
}
}
@Override
public boolean onPreferenceChange ( final Preference preference , Object newValue ) {
if ( ( ( CheckBoxPreference ) preference ) . isChecked ( ) ) {
AlertDialog . Builder builder = new AlertDialog . Builder ( getActivity ( ) ) ;
builder . setIcon ( ResUtil . getDrawable ( getActivity ( ) , R . attr . dialog_info_icon ) ) ;
builder . setTitle ( R . string . ApplicationPreferencesActivity_disable_push_messages ) ;
builder . setMessage ( R . string . ApplicationPreferencesActivity_this_will_disable_push_messages ) ;
builder . setNegativeButton ( android . R . string . cancel , null ) ;
builder . setPositiveButton ( android . R . string . ok , new DialogInterface . OnClickListener ( ) {
@Override
public void onClick ( DialogInterface dialog , int which ) {
new DisablePushMessagesTask ( ( CheckBoxPreference ) preference ) . execute ( ) ;
}
} ) ;
builder . show ( ) ;
} else {
Intent nextIntent = new Intent ( getActivity ( ) , ApplicationPreferencesActivity . class ) ;
nextIntent . putExtra ( "master_secret" , getActivity ( ) . getIntent ( ) . getParcelableExtra ( "master_secret" ) ) ;
Intent intent = new Intent ( getActivity ( ) , RegistrationActivity . class ) ;
intent . putExtra ( "cancel_button" , true ) ;
intent . putExtra ( "next_intent" , nextIntent ) ;
intent . putExtra ( "master_secret" , getActivity ( ) . getIntent ( ) . getParcelableExtra ( "master_secret" ) ) ;
startActivity ( intent ) ;
}
return false ;
}
}
}
}