diff --git a/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/RestoreMessagesActivity.java b/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/RestoreMessagesActivity.java index 6bbd9fc..9d155c9 100644 --- a/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/RestoreMessagesActivity.java +++ b/src/main/java/fr/unix_experience/owncloud_sms/activities/remote_account/RestoreMessagesActivity.java @@ -35,12 +35,14 @@ import android.widget.TextView; import fr.unix_experience.owncloud_sms.R; import fr.unix_experience.owncloud_sms.engine.ASyncSMSRecovery; +import fr.unix_experience.owncloud_sms.engine.ConnectivityMonitor; public class RestoreMessagesActivity extends AppCompatActivity { Account _account = null; String _defaultSmsApp; private static final int REQUEST_DEFAULT_SMSAPP = 1; + boolean restoreInProgress = false; @Override protected void onCreate(Bundle savedInstanceState) { @@ -65,13 +67,58 @@ public class RestoreMessagesActivity extends AppCompatActivity { throw new IllegalStateException(getString(R.string.err_didnt_find_account_restore)); } + initInterface(); + Button fix_button = (Button) findViewById(R.id.button_fix_permissions); + final Button launch_restore = (Button) findViewById(R.id.button_launch_restore); + final ProgressBar pb = (ProgressBar) findViewById(R.id.progressbar_restore); + + final RestoreMessagesActivity me = this; + fix_button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { + notifyIncompatibleVersion(); + return; + } + + if (!new ConnectivityMonitor(me).isValid()) { + notifyNoConnectivity(); + return; + } + + Log.i(RestoreMessagesActivity.TAG, "Ask to change the default SMS app"); + + Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); + intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getBaseContext().getPackageName()); + startActivityForResult(intent, REQUEST_DEFAULT_SMSAPP); + } + }); + + launch_restore.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + if (!new ConnectivityMonitor(me).isValid()) { + notifyNoConnectivity(); + return; + } + + launch_restore.setVisibility(View.INVISIBLE); + pb.setVisibility(View.VISIBLE); + + // Verify connectivity + Log.i(RestoreMessagesActivity.TAG, "Launching restore asynchronously"); + restoreInProgress = true; + new ASyncSMSRecovery.SMSRecoveryTask(me, _account).execute(); + } + }); + } + + private void initInterface() { TextView tv_error = (TextView) findViewById(R.id.tv_error_default_smsapp); tv_error.setText(R.string.error_make_default_sms_app); findViewById(R.id.tv_restore_finished).setVisibility(View.INVISIBLE); findViewById(R.id.tv_progress_value).setVisibility(View.INVISIBLE); Button fix_button = (Button) findViewById(R.id.button_fix_permissions); - final Button launch_restore = (Button) findViewById(R.id.button_launch_restore); - final ProgressBar pb = (ProgressBar) findViewById(R.id.progressbar_restore); + Button launch_restore = (Button) findViewById(R.id.button_launch_restore); + ProgressBar pb = (ProgressBar) findViewById(R.id.progressbar_restore); pb.setVisibility(View.INVISIBLE); if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { @@ -91,46 +138,28 @@ public class RestoreMessagesActivity extends AppCompatActivity { fix_button.setVisibility(View.INVISIBLE); launch_restore.setVisibility(View.VISIBLE); } - - fix_button.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { - notifyIncompatibleVersion(); - return; - } - - Log.i(RestoreMessagesActivity.TAG, "Ask to change the default SMS app"); - - Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); - intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getBaseContext().getPackageName()); - startActivityForResult(intent, REQUEST_DEFAULT_SMSAPP); - } - }); - - final RestoreMessagesActivity me = this; - launch_restore.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - launch_restore.setVisibility(View.INVISIBLE); - pb.setVisibility(View.VISIBLE); - - // Verify connectivity - Log.i(RestoreMessagesActivity.TAG, "Launching restore asynchronously"); - new ASyncSMSRecovery.SMSRecoveryTask(me, _account).execute(); - } - }); } - private void notifyIncompatibleVersion() { + private void errorNotification(int err) { TextView tv = (TextView) findViewById(R.id.tv_error_default_smsapp); Button fix_button = (Button) findViewById(R.id.button_fix_permissions); Button launch_restore = (Button) findViewById(R.id.button_launch_restore); ProgressBar pb = (ProgressBar) findViewById(R.id.progressbar_restore); - tv.setText(R.string.err_kitkat_required); + tv.setText(err); + tv.setVisibility(View.VISIBLE); fix_button.setVisibility(View.INVISIBLE); launch_restore.setVisibility(View.INVISIBLE); pb.setVisibility(View.INVISIBLE); } + private void notifyIncompatibleVersion() { + errorNotification(R.string.err_kitkat_required); + } + + private void notifyNoConnectivity() { + errorNotification(R.string.err_no_connection); + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { @@ -149,15 +178,33 @@ public class RestoreMessagesActivity extends AppCompatActivity { } } + @Override + protected void onResume() { + super.onResume(); + if (!new ConnectivityMonitor(this).isValid()) { + notifyNoConnectivity(); + return; + } + + if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { + notifyIncompatibleVersion(); + return; + } + + if (!restoreInProgress) { + initInterface(); + } + } + public void onRestoreDone() { - // @TODO - Log.i(RestoreMessagesActivity.TAG, "Sync is done, updating interface"); findViewById(R.id.progressbar_restore).setVisibility(View.INVISIBLE); findViewById(R.id.tv_restore_finished).setVisibility(View.VISIBLE); Intent finalIntent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); finalIntent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, _defaultSmsApp); startActivity(finalIntent); + + restoreInProgress = false; } public void onProgressUpdate(Integer value) { diff --git a/src/main/java/fr/unix_experience/owncloud_sms/engine/ASyncSMSRecovery.java b/src/main/java/fr/unix_experience/owncloud_sms/engine/ASyncSMSRecovery.java index 4a7ffb6..18393d0 100644 --- a/src/main/java/fr/unix_experience/owncloud_sms/engine/ASyncSMSRecovery.java +++ b/src/main/java/fr/unix_experience/owncloud_sms/engine/ASyncSMSRecovery.java @@ -49,10 +49,13 @@ public interface ASyncSMSRecovery { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.KITKAT) { return null; } + + if (!new ConnectivityMonitor(_context).isValid()) { + Log.e(ASyncSMSRecovery.TAG, "Restore connectivity problems, aborting"); + return null; + } + Log.i(ASyncSMSRecovery.TAG, "Starting background recovery"); - - // Verify connectivity - Long start = (long) 0; OCSMSOwnCloudClient client = new OCSMSOwnCloudClient(_context, _account); @@ -119,6 +122,11 @@ public interface ASyncSMSRecovery { } start = obj.getLong("last_id"); + + if (!new ConnectivityMonitor(_context).isValid()) { + Log.e(ASyncSMSRecovery.TAG, "Restore connectivity problems, aborting"); + return null; + } obj = client.retrieveSomeMessages(start, 500); } } catch (JSONException e) { diff --git a/src/main/res/values-en/strings.xml b/src/main/res/values-en/strings.xml index 3cc3af9..e2826e0 100644 --- a/src/main/res/values-en/strings.xml +++ b/src/main/res/values-en/strings.xml @@ -178,5 +178,6 @@ Android 4.4 or greater is required to use this feature. Please make this application default SMS application to permit restore your messages. This limitation has been introduced by Android 4.4. messages restored... + No connection available, please ensure you have a valid data connection. diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index 14d4aa7..5e482fb 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -166,4 +166,5 @@ Erreur #1: Données invalides reçues lors de l\'obtention des messages précédents. Merci de bien vouloir mettre cette application en application SMS par défaut le temps de restaurer les messages. Cette limitation a été ajoutée depuis Android 4.4. messages restaurés... + Aucune connexion disponible, assurez voir d\'avoir une connection de données valide. diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 88608cf..7cbad11 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -253,4 +253,5 @@ Android 4.4 or greater is required to use this feature. SMS restauration is now finished. messages restored... + No connection available, please ensure you have a valid data connection.