]> iEval git - fonbot.git/blobdiff - src/ro/ieval/fonbot/FonBotMainActivity.java
Add retries to message sending
[fonbot.git] / src / ro / ieval / fonbot / FonBotMainActivity.java
index 7ef45b849c485400cfc83276141a1fdb382ab67a..d7581fab0c7fab8875263c2e78271f924b72a8d8 100644 (file)
@@ -3,11 +3,11 @@ package ro.ieval.fonbot;
 import static ro.ieval.fonbot.R.string.logging_in;
 import static ro.ieval.fonbot.Utils.toNonNull;
 
-import java.util.Collections;
-
+import java.io.InputStream;
 import org.eclipse.jdt.annotation.Nullable;
 
 import ro.ieval.fonbot.FonBotMainService.Binder;
+import ro.ieval.fonbot.HttpCallExecutableRunnable.ResultCallback;
 import ro.ieval.fonbot.Utils.OngoingEvent;
 import android.app.ListActivity;
 import android.content.BroadcastReceiver;
@@ -16,6 +16,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
 import android.support.v4.content.LocalBroadcastManager;
 import android.view.LayoutInflater;
@@ -141,21 +142,41 @@ public final class FonBotMainActivity extends ListActivity {
        }
 
        /**
-        * BroadcastReceiver that updates {@link #resultTextView}
+        * Implementation of <code>ResultCallback</code> that updates the {@link #resultTextView}
         *
-        * @author Marius Gavrilescu <marius@ieval.ro>
+        * @author Marius Gavrilescu
         */
-       private final class LoginReceiver extends BroadcastReceiver {
+       public final class UpdateResultCallback implements ResultCallback{
                @Override
-               public void onReceive(@Nullable final Context context, @Nullable final Intent intent) {
-                       if(intent==null)
-                               return;
-                       resultTextView.setText(intent.getStringExtra(SendHttpMessageAsyncTask.EXTRA_RESPONSE_MESSAGE));
-                       final int responseCode=intent.getIntExtra(SendHttpMessageAsyncTask.EXTRA_RESPONSE_CODE, 0);
-                       if(responseCode>=200&&responseCode<300)
-                               resultTextView.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.tick, 0, 0);
+               public void onResult(final int responseCode, final String responseMessage, final InputStream inputStream) {
+                       if(responseCode>=200 && responseCode<300)
+                               updateResultTextView(responseMessage, false);
                        else
-                               resultTextView.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.cross, 0, 0);
+                               updateResultTextView(responseMessage, true);
+               }
+
+               @Override
+               public void onError(final String error) {
+                       updateResultTextView(error, true);
+               }
+
+               /**
+                * Update the {@link #resultTextView}.
+                *
+                * @param message new text for the TextView
+                * @param error true if the text is an error message, false otherwise
+                */
+               private void updateResultTextView(final String message, final boolean error){
+                       handler.post(new Runnable() {
+                               @Override
+                               public void run() {
+                                       resultTextView.setText(message);
+                                       if(error)
+                                               resultTextView.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.cross, 0, 0);
+                                       else
+                                               resultTextView.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.tick, 0, 0);
+                               }
+                       });
                }
        }
 
@@ -168,17 +189,9 @@ public final class FonBotMainActivity extends ListActivity {
         */
        private static final IntentFilter ONGOING_UPDATE_FILTER=new IntentFilter(FonBotMainService.ACTION_ONGOING_UPDATE);
        /**
-        * The one instance of {@link LoginReceiver}
+        * The one instance of {@link UpdateResultCallback}
         */
-       private final BroadcastReceiver loginReceiver=new LoginReceiver();
-       /**
-        * The broadcast sent by {@link SendHttpMessageAsyncTask} when logging in. 
-        */
-       private static final String LOGIN_BROADCAST="ro.ieval.fonbot.LOGIN_RESULT";
-       /**
-        * IntentFilter for {@link #loginReceiver}
-        */
-       private static final IntentFilter LOGIN_FILTER=new IntentFilter(LOGIN_BROADCAST);
+       private final UpdateResultCallback updateResultCallback=new UpdateResultCallback();
        /**
         * The one instance of {@link ServiceConnection}
         */
@@ -188,13 +201,15 @@ public final class FonBotMainActivity extends ListActivity {
         * TextView that tells the user whether logging in failed or succeded.
         */
        private TextView resultTextView;
+       /** Handler instance */
+       private Handler handler;
 
        @Override
        protected void onCreate(@Nullable final Bundle icicle) {
                super.onCreate(icicle);
 
                setContentView(R.layout.main);
-
+               handler=new Handler();
                resultTextView=(TextView) findViewById(R.id.resultTextView);
        }
 
@@ -202,15 +217,14 @@ public final class FonBotMainActivity extends ListActivity {
        protected void onStart() {
                super.onStart();
                resultTextView.setText(logging_in);
-               new SendHttpMessageAsyncTask("/ok", toNonNull(Collections.<Header>emptySet()),
-                               LOGIN_BROADCAST,this).execute();
+               new HttpCallExecutableRunnable("/ok", null,
+                               toNonNull(getApplicationContext()), toNonNull(updateResultCallback), false).execute();
                connection.refreshAdapter();
        }
 
        @Override
        protected void onResume() {
                super.onResume();
-               registerReceiver(loginReceiver, LOGIN_FILTER);
                LocalBroadcastManager.getInstance(this).registerReceiver(ongoingUpdateReceiver, ONGOING_UPDATE_FILTER);
                bindService(new Intent(this, FonBotMainService.class), connection, 0);
        }
@@ -218,7 +232,6 @@ public final class FonBotMainActivity extends ListActivity {
        @Override
        protected void onPause() {
                super.onPause();
-               unregisterReceiver(loginReceiver);
                LocalBroadcastManager.getInstance(this).unregisterReceiver(ongoingUpdateReceiver);
                unbindService(connection);
        }
This page took 0.025096 seconds and 4 git commands to generate.