diff --git a/F-Droid/res/values/strings.xml b/F-Droid/res/values/strings.xml
index 8fae272f7..293f1ace8 100644
--- a/F-Droid/res/values/strings.xml
+++ b/F-Droid/res/values/strings.xml
@@ -210,6 +210,7 @@
- Percentage complete (int between 0-100)
-->
Downloading\n%2$s / %3$s (%4$d%%) from\n%1$s
+ Updating repositories
Processing %2$s / %3$s (%4$d%%) from %1$s
Connecting to\n%1$s
Checking apps compatibility with your deviceā¦
diff --git a/F-Droid/src/org/fdroid/fdroid/UpdateService.java b/F-Droid/src/org/fdroid/fdroid/UpdateService.java
index ec63a7d49..2aa6f2b63 100644
--- a/F-Droid/src/org/fdroid/fdroid/UpdateService.java
+++ b/F-Droid/src/org/fdroid/fdroid/UpdateService.java
@@ -20,13 +20,15 @@ package org.fdroid.fdroid;
import android.app.AlarmManager;
import android.app.IntentService;
+import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
-import android.app.ProgressDialog;
+import android.content.BroadcastReceiver;
import android.content.ContentProviderOperation;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.OperationApplicationException;
import android.content.SharedPreferences;
import android.database.Cursor;
@@ -35,13 +37,12 @@ import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
-import android.os.Handler;
import android.os.RemoteException;
-import android.os.ResultReceiver;
import android.os.SystemClock;
import android.preference.PreferenceManager;
import android.support.v4.app.NotificationCompat;
import android.support.v4.app.TaskStackBuilder;
+import android.support.v4.content.LocalBroadcastManager;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
@@ -63,30 +64,26 @@ public class UpdateService extends IntentService implements ProgressListener {
private static final String TAG = "UpdateService";
- public static final String RESULT_MESSAGE = "msg";
- public static final String RESULT_EVENT = "event";
- public static final String RESULT_REPO_ERRORS = "repoErrors";
+ public static final String LOCAL_ACTION_STATUS = "status";
+
+ public static final String EXTRA_MESSAGE = "msg";
+ public static final String EXTRA_REPO_ERRORS = "repoErrors";
+ public static final String EXTRA_STATUS_CODE = "status";
+ public static final String EXTRA_ADDRESS = "address";
+ public static final String EXTRA_MANUAL_UPDATE = "manualUpdate";
public static final int STATUS_COMPLETE_WITH_CHANGES = 0;
- public static final int STATUS_COMPLETE_AND_SAME = 1;
- public static final int STATUS_ERROR_GLOBAL = 2;
- public static final int STATUS_ERROR_LOCAL = 3;
- public static final int STATUS_ERROR_LOCAL_SMALL = 4;
- public static final int STATUS_INFO = 5;
+ public static final int STATUS_COMPLETE_AND_SAME = 1;
+ public static final int STATUS_ERROR_GLOBAL = 2;
+ public static final int STATUS_ERROR_LOCAL = 3;
+ public static final int STATUS_ERROR_LOCAL_SMALL = 4;
+ public static final int STATUS_INFO = 5;
- // I don't like that I've had to dupliacte the statuses above with strings here, however
- // one method of communication/notification is using ResultReceiver (int status codes)
- // while the other uses progress events (string event types).
- public static final String EVENT_COMPLETE_WITH_CHANGES = "repoUpdateComplete (changed)";
- public static final String EVENT_COMPLETE_AND_SAME = "repoUpdateComplete (not changed)";
- public static final String EVENT_FINISHED = "repoUpdateFinished";
- public static final String EVENT_ERROR = "repoUpdateError";
- public static final String EVENT_INFO = "repoUpdateInfo";
+ private static final int NOTIFY_ID_UPDATING = 0;
+ private static final int NOTIFY_ID_UPDATES_AVAILABLE = 1;
- public static final String EXTRA_RECEIVER = "receiver";
- public static final String EXTRA_ADDRESS = "address";
-
- private ResultReceiver receiver = null;
+ private NotificationManager notificationManager;
+ private NotificationCompat.Builder notificationBuilder;
public UpdateService() {
super("UpdateService");
@@ -106,130 +103,17 @@ public class UpdateService extends IntentService implements ProgressListener {
AppProvider.DataColumns.IGNORE_THISUPDATE
};
- // For receiving results from the UpdateService when we've told it to
- // update in response to a user request.
- public static class UpdateReceiver extends ResultReceiver {
-
- private Context context;
- private ProgressDialog dialog;
- private ProgressListener listener;
- private String lastShownMessage = null;
-
- public UpdateReceiver(Handler handler) {
- super(handler);
- }
-
- public UpdateReceiver setDialog(ProgressDialog dialog) {
- this.dialog = dialog;
- return this;
- }
-
- public UpdateReceiver setListener(ProgressListener listener) {
- this.listener = listener;
- return this;
- }
-
- private void forwardEvent(String type) {
- if (listener != null) {
- listener.onProgress(new Event(type));
- }
- }
-
- private void ensureDialog() {
- if (dialog == null) {
- String title = context.getString(R.string.process_wait_title);
- String message = lastShownMessage == null ? context.getString(R.string.process_update_msg) : lastShownMessage;
- dialog = ProgressDialog.show(context, title, message, true, true);
- dialog.setIcon(android.R.drawable.ic_dialog_info);
- dialog.setCanceledOnTouchOutside(false);
- }
- }
-
- public UpdateReceiver showDialog(Context context) {
- this.context = context;
- ensureDialog();
- dialog.show();
- return this;
- }
-
- public void hideDialog() {
- dialog.hide();
- dialog.dismiss();
- dialog = null;
- }
-
- @Override
- protected void onReceiveResult(int resultCode, Bundle resultData) {
- final String message = resultData.getString(RESULT_MESSAGE);
- boolean finished = false;
- switch (resultCode) {
- case STATUS_ERROR_GLOBAL:
- forwardEvent(EVENT_ERROR);
- Toast.makeText(context, context.getString(R.string.global_error_updating_repos) + " " + message, Toast.LENGTH_LONG).show();
- finished = true;
- break;
- case STATUS_ERROR_LOCAL:
- case STATUS_ERROR_LOCAL_SMALL:
- StringBuilder msgB = new StringBuilder();
- List repoErrors = resultData.getCharSequenceArrayList(RESULT_REPO_ERRORS);
- for (CharSequence error : repoErrors) {
- if (msgB.length() > 0) msgB.append('\n');
- msgB.append(error);
- }
- if (resultCode == STATUS_ERROR_LOCAL_SMALL) {
- msgB.append('\n').append(context.getString(R.string.all_other_repos_fine));
- }
- Toast.makeText(context, msgB.toString(), Toast.LENGTH_LONG).show();
- finished = true;
- break;
- case STATUS_COMPLETE_WITH_CHANGES:
- forwardEvent(EVENT_COMPLETE_WITH_CHANGES);
- finished = true;
- break;
- case STATUS_COMPLETE_AND_SAME:
- forwardEvent(EVENT_COMPLETE_AND_SAME);
- Toast.makeText(context, context.getString(R.string.repos_unchanged), Toast.LENGTH_LONG).show();
- finished = true;
- break;
- case STATUS_INFO:
- forwardEvent(EVENT_INFO);
- if (dialog != null) {
- lastShownMessage = message;
- dialog.setMessage(message);
- }
- break;
- }
-
- if (finished) {
- forwardEvent(EVENT_FINISHED);
- if (dialog != null && dialog.isShowing()) {
- try {
- dialog.dismiss();
- } catch (IllegalArgumentException e) {
- // sometimes dialog.isShowing() doesn't work :(
- // https://stackoverflow.com/questions/19538282/view-not-attached-to-window-manager-dialog-dismiss
- e.printStackTrace();
- }
- }
- }
- }
+ public static void updateNow(Context context) {
+ updateRepoNow(null, context);
}
- public static UpdateReceiver updateNow(Context context) {
- return updateRepoNow(null, context);
- }
-
- public static UpdateReceiver updateRepoNow(String address, Context context) {
+ public static void updateRepoNow(String address, Context context) {
Intent intent = new Intent(context, UpdateService.class);
- UpdateReceiver receiver = new UpdateReceiver(new Handler());
- receiver.showDialog(context);
- intent.putExtra(EXTRA_RECEIVER, receiver);
+ intent.putExtra(EXTRA_MANUAL_UPDATE, true);
if (!TextUtils.isEmpty(address)) {
intent.putExtra(EXTRA_ADDRESS, address);
}
context.startService(intent);
-
- return receiver;
}
// Schedule (or cancel schedule for) this service, according to the
@@ -259,36 +143,109 @@ public class UpdateService extends IntentService implements ProgressListener {
}
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
+ lbm.registerReceiver(localBroadcastReceiver, new IntentFilter(LOCAL_ACTION_STATUS));
+
+ notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+
+ notificationBuilder = new NotificationCompat.Builder(this)
+ .setSmallIcon(R.drawable.ic_refresh_white)
+ .setOngoing(true)
+ .setCategory(NotificationCompat.CATEGORY_SERVICE)
+ .setContentTitle(getString(R.string.update_notification_title));
+ notificationManager.notify(NOTIFY_ID_UPDATING, notificationBuilder.build());
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ notificationManager.cancel(NOTIFY_ID_UPDATING);
+ }
+
protected void sendStatus(int statusCode) {
sendStatus(statusCode, null);
}
protected void sendStatus(int statusCode, String message) {
- if (receiver != null) {
- Bundle resultData = new Bundle();
- if (!TextUtils.isEmpty(message)) {
- resultData.putString(RESULT_MESSAGE, message);
- }
- receiver.send(statusCode, resultData);
- }
+ Intent intent = new Intent(LOCAL_ACTION_STATUS);
+ intent.putExtra(EXTRA_STATUS_CODE, statusCode);
+ if (!TextUtils.isEmpty(message))
+ intent.putExtra(EXTRA_MESSAGE, message);
+ LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
protected void sendRepoErrorStatus(int statusCode, ArrayList repoErrors) {
- if (receiver != null) {
- Bundle resultData = new Bundle();
- resultData.putCharSequenceArrayList(RESULT_REPO_ERRORS, repoErrors);
- receiver.send(statusCode, resultData);
- }
+ Intent intent = new Intent(LOCAL_ACTION_STATUS);
+ intent.putExtra(EXTRA_STATUS_CODE, statusCode);
+ intent.putExtra(EXTRA_REPO_ERRORS, repoErrors);
+ LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
- /**
- * We might be doing a scheduled run, or we might have been launched by the
- * app in response to a user's request. If we have a receiver, it's the
- * latter...
- */
- private boolean isScheduledRun() {
- return receiver == null;
- }
+ // For receiving results from the UpdateService when we've told it to
+ // update in response to a user request.
+ private BroadcastReceiver localBroadcastReceiver = new BroadcastReceiver() {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action == null)
+ return;
+
+ if (!action.equals(LOCAL_ACTION_STATUS))
+ return;
+
+ final String message = intent.getStringExtra(EXTRA_MESSAGE);
+ int resultCode = intent.getIntExtra(EXTRA_STATUS_CODE, -1);
+
+ String text;
+ switch (resultCode) {
+ case STATUS_INFO:
+ notificationBuilder.setContentText(message)
+ .setProgress(0, 0, true)
+ .setCategory(NotificationCompat.CATEGORY_SERVICE);
+ notificationManager.notify(NOTIFY_ID_UPDATING, notificationBuilder.build());
+ break;
+ case STATUS_ERROR_GLOBAL:
+ text = context.getString(R.string.global_error_updating_repos) + " " + message;
+ notificationBuilder.setContentText(text)
+ .setCategory(Notification.CATEGORY_ERROR)
+ .setSmallIcon(android.R.drawable.ic_dialog_alert);
+ notificationManager.notify(NOTIFY_ID_UPDATING, notificationBuilder.build());
+ Toast.makeText(context, text, Toast.LENGTH_LONG).show();
+ break;
+ case STATUS_ERROR_LOCAL:
+ case STATUS_ERROR_LOCAL_SMALL:
+ StringBuilder msgBuilder = new StringBuilder();
+ CharSequence[] repoErrors = intent.getCharSequenceArrayExtra(EXTRA_REPO_ERRORS);
+ for (CharSequence error : repoErrors) {
+ if (msgBuilder.length() > 0) msgBuilder.append('\n');
+ msgBuilder.append(error);
+ }
+ if (resultCode == STATUS_ERROR_LOCAL_SMALL) {
+ msgBuilder.append('\n').append(context.getString(R.string.all_other_repos_fine));
+ }
+ text = msgBuilder.toString();
+ notificationBuilder.setContentText(text)
+ .setCategory(Notification.CATEGORY_ERROR)
+ .setSmallIcon(android.R.drawable.ic_dialog_info);
+ notificationManager.notify(NOTIFY_ID_UPDATING, notificationBuilder.build());
+ Toast.makeText(context, text, Toast.LENGTH_LONG).show();
+ break;
+ case STATUS_COMPLETE_WITH_CHANGES:
+ break;
+ case STATUS_COMPLETE_AND_SAME:
+ text = context.getString(R.string.repos_unchanged);
+ notificationBuilder.setContentText(text)
+ .setCategory(NotificationCompat.CATEGORY_SERVICE);
+ notificationManager.notify(NOTIFY_ID_UPDATING, notificationBuilder.build());
+ break;
+ }
+ }
+ };
/**
* Check whether it is time to run the scheduled update.
@@ -332,15 +289,14 @@ public class UpdateService extends IntentService implements ProgressListener {
@Override
protected void onHandleIntent(Intent intent) {
- receiver = intent.getParcelableExtra(EXTRA_RECEIVER);
String address = intent.getStringExtra(EXTRA_ADDRESS);
+ boolean manualUpdate = intent.getBooleanExtra(EXTRA_MANUAL_UPDATE, false);
- long startTime = System.currentTimeMillis();
try {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
// See if it's time to actually do anything yet...
- if (!isScheduledRun()) {
+ if (manualUpdate) {
Log.d(TAG, "Unscheduled (manually requested) update");
} else if (!verifyIsTimeForScheduledRun()) {
return;
@@ -460,11 +416,6 @@ public class UpdateService extends IntentService implements ProgressListener {
"Exception during update processing:\n"
+ Log.getStackTraceString(e));
sendStatus(STATUS_ERROR_GLOBAL, e.getMessage());
- } finally {
- Log.d(TAG, "Update took "
- + ((System.currentTimeMillis() - startTime) / 1000)
- + " seconds.");
- receiver = null;
}
}
@@ -557,8 +508,7 @@ public class UpdateService extends IntentService implements ProgressListener {
.setContentText(contentText)
.setStyle(createNotificationBigStyle(hasUpdates));
- NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- nm.notify(1, builder.build());
+ notificationManager.notify(NOTIFY_ID_UPDATES_AVAILABLE, builder.build());
}
private List getKnownAppIds(List apps) {
diff --git a/F-Droid/src/org/fdroid/fdroid/views/ManageReposActivity.java b/F-Droid/src/org/fdroid/fdroid/views/ManageReposActivity.java
index 5dc2ba9b1..fed38e4ef 100644
--- a/F-Droid/src/org/fdroid/fdroid/views/ManageReposActivity.java
+++ b/F-Droid/src/org/fdroid/fdroid/views/ManageReposActivity.java
@@ -19,10 +19,12 @@
package org.fdroid.fdroid.views;
+import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.res.ColorStateList;
import android.database.Cursor;
@@ -40,6 +42,7 @@ import android.support.v4.app.LoaderManager;
import android.support.v4.app.NavUtils;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
+import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.AlertDialog;
import android.text.Editable;
@@ -64,7 +67,6 @@ import org.apache.http.impl.client.DefaultHttpClient;
import org.fdroid.fdroid.FDroid;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.Preferences;
-import org.fdroid.fdroid.ProgressListener;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.UpdateService;
import org.fdroid.fdroid.compat.ClipboardCompat;
@@ -103,8 +105,6 @@ public class ManageReposActivity extends ActionBarActivity {
IS_SWAP
}
- private UpdateService.UpdateReceiver updateHandler = null;
-
private static boolean changed = false;
private RepoListFragment listFragment;
@@ -151,9 +151,10 @@ public class ManageReposActivity extends ActionBarActivity {
@Override
protected void onResume() {
super.onResume();
- if (updateHandler != null) {
- updateHandler.showDialog(this);
- }
+
+ LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver,
+ new IntentFilter(UpdateService.LOCAL_ACTION_STATUS));
+
/* let's see if someone is trying to send us a new repo */
addRepoFromIntent(getIntent());
}
@@ -161,9 +162,7 @@ public class ManageReposActivity extends ActionBarActivity {
@Override
protected void onPause() {
super.onPause();
- if (updateHandler != null) {
- updateHandler.hideDialog();
- }
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver);
}
@Override
@@ -209,7 +208,7 @@ public class ManageReposActivity extends ActionBarActivity {
showAddRepo();
return true;
case R.id.action_update_repo:
- updateRepos();
+ UpdateService.updateNow(this);
return true;
case R.id.action_find_local_repos:
scanForRepos();
@@ -218,25 +217,16 @@ public class ManageReposActivity extends ActionBarActivity {
return super.onOptionsItemSelected(item);
}
- private void updateRepos() {
- updateHandler = UpdateService.updateNow(this).setListener(
- new ProgressListener() {
- @Override
- public void onProgress(Event event) {
- switch (event.type) {
- case UpdateService.EVENT_COMPLETE_AND_SAME:
- case UpdateService.EVENT_COMPLETE_WITH_CHANGES:
- // No need to prompt to update any more, we just
- // did it!
- changed = false;
- break;
- case UpdateService.EVENT_FINISHED:
- updateHandler = null;
- break;
- }
- }
- });
- }
+ BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ int statusCode = intent.getIntExtra(UpdateService.EXTRA_STATUS_CODE, -1);
+ if (statusCode == UpdateService.STATUS_COMPLETE_AND_SAME
+ || statusCode == UpdateService.STATUS_COMPLETE_WITH_CHANGES)
+ // No need to prompt to update any more, we just did it!
+ changed = false;
+ }
+ };
private void scanForRepos() {
final RepoScanListAdapter adapter = new RepoScanListAdapter(this);
diff --git a/F-Droid/src/org/fdroid/fdroid/views/RepoDetailsActivity.java b/F-Droid/src/org/fdroid/fdroid/views/RepoDetailsActivity.java
index 6153492ca..c49325c45 100644
--- a/F-Droid/src/org/fdroid/fdroid/views/RepoDetailsActivity.java
+++ b/F-Droid/src/org/fdroid/fdroid/views/RepoDetailsActivity.java
@@ -1,9 +1,12 @@
package org.fdroid.fdroid.views;
import android.annotation.TargetApi;
+import android.content.BroadcastReceiver;
import android.content.ContentValues;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.IntentFilter;
import android.net.Uri;
import android.nfc.NdefMessage;
import android.nfc.NfcAdapter;
@@ -12,6 +15,7 @@ import android.os.Bundle;
import android.os.Parcelable;
import android.support.v7.app.AlertDialog;
import android.support.v4.app.NavUtils;
+import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.util.Log;
@@ -25,7 +29,6 @@ import android.widget.Toast;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.NfcHelper;
import org.fdroid.fdroid.NfcNotEnabledActivity;
-import org.fdroid.fdroid.ProgressListener;
import org.fdroid.fdroid.QrGenAsyncTask;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.UpdateService;
@@ -146,6 +149,9 @@ public class RepoDetailsActivity extends ActionBarActivity {
repo = RepoProvider.Helper.findById(this, repoId);
updateRepoView();
+ LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver,
+ new IntentFilter(UpdateService.LOCAL_ACTION_STATUS));
+
// FDroid.java and AppDetails set different NFC actions, so reset here
setNfc();
processIntent(getIntent());
@@ -175,6 +181,21 @@ public class RepoDetailsActivity extends ActionBarActivity {
}
}
+ private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ int statusCode = intent.getIntExtra(UpdateService.EXTRA_STATUS_CODE, -1);
+ if (statusCode == UpdateService.STATUS_COMPLETE_WITH_CHANGES)
+ updateRepoView();
+ }
+ };
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver);
+ }
+
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.repo_details_activity, menu);
@@ -316,16 +337,7 @@ public class RepoDetailsActivity extends ActionBarActivity {
values.put(RepoProvider.DataColumns.IN_USE, 1);
RepoProvider.Helper.update(this, repo, values);
- UpdateService.updateRepoNow(repo.address, this).setListener(new ProgressListener() {
- @Override
- public void onProgress(Event event) {
- switch (event.type) {
- case UpdateService.EVENT_COMPLETE_WITH_CHANGES:
- updateRepoView();
- break;
- }
- }
- });
+ UpdateService.updateRepoNow(repo.address, this);
}
private void promptForDelete() {
diff --git a/F-Droid/src/org/fdroid/fdroid/views/swap/ConnectSwapActivity.java b/F-Droid/src/org/fdroid/fdroid/views/swap/ConnectSwapActivity.java
index 3eebca77c..2cb2afa6d 100644
--- a/F-Droid/src/org/fdroid/fdroid/views/swap/ConnectSwapActivity.java
+++ b/F-Droid/src/org/fdroid/fdroid/views/swap/ConnectSwapActivity.java
@@ -1,13 +1,17 @@
package org.fdroid.fdroid.views.swap;
import android.app.Activity;
+import android.content.BroadcastReceiver;
import android.content.ContentValues;
+import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.net.Uri;
import android.net.http.AndroidHttpClient;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
+import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
@@ -20,7 +24,6 @@ import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.fdroid.fdroid.FDroidApp;
-import org.fdroid.fdroid.ProgressListener;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.UpdateService;
import org.fdroid.fdroid.Utils;
@@ -33,7 +36,7 @@ import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
-public class ConnectSwapActivity extends ActionBarActivity implements ProgressListener {
+public class ConnectSwapActivity extends ActionBarActivity {
private static final String TAG = "ConnectSwapActivity";
private static final String STATE_CONFIRM = "startSwap";
@@ -79,6 +82,10 @@ public class ConnectSwapActivity extends ActionBarActivity implements ProgressLi
@Override
protected void onResume() {
super.onResume();
+
+ LocalBroadcastManager.getInstance(this).registerReceiver(broadcastReceiver,
+ new IntentFilter(UpdateService.LOCAL_ACTION_STATUS));
+
// Only confirm the action, and then return a result...
newRepoConfig = new NewRepoConfig(this, getIntent());
if (newRepoConfig.isValidRepo()) {
@@ -91,40 +98,48 @@ public class ConnectSwapActivity extends ActionBarActivity implements ProgressLi
}
@Override
- @SuppressWarnings("fallthrough")
- public void onProgress(Event event) {
- // TODO: Show progress, but we can worry about that later.
- // Might be nice to have it nicely embedded in the UI, rather than as
- // an additional dialog. E.g. White text on blue, letting the user
- // know what we are up to.
+ protected void onPause() {
+ super.onPause();
+ LocalBroadcastManager.getInstance(this).unregisterReceiver(broadcastReceiver);
+ }
- switch (event.type) {
- case UpdateService.EVENT_COMPLETE_AND_SAME:
- Log.i(TAG, "EVENT_COMPLETE_AND_SAME");
- case UpdateService.EVENT_COMPLETE_WITH_CHANGES:
- Log.i(TAG, "EVENT_COMPLETE_WITH_CHANGES");
- Intent intent = new Intent(this, SwapAppListActivity.class);
- intent.putExtra(SwapAppListActivity.EXTRA_REPO_ID, repo.getId());
- startActivity(intent);
- finish();
+ BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // TODO: Show progress, but we can worry about that later.
+ // Might be nice to have it nicely embedded in the UI, rather than as
+ // an additional dialog. E.g. White text on blue, letting the user
+ // know what we are up to.
+ int statusCode = intent.getIntExtra(UpdateService.EXTRA_STATUS_CODE, -1);
+
+ switch (statusCode) {
+ case UpdateService.STATUS_COMPLETE_AND_SAME:
+ Log.i(TAG, "STATUS_COMPLETE_AND_SAME");
+ case UpdateService.STATUS_COMPLETE_WITH_CHANGES:
+ Log.i(TAG, "STATUS_COMPLETE_WITH_CHANGES");
+ Intent salIntent = new Intent(getBaseContext(), SwapAppListActivity.class);
+ salIntent.putExtra(SwapAppListActivity.EXTRA_REPO_ID, repo.getId());
+ startActivity(salIntent);
+ finish();
/*
// TODO: Load repo from database to get proper name. This is what the category we want to select will be called.
intent.putExtra("category", newRepoConfig.getHost());
getActivity().setResult(Activity.RESULT_OK, intent);
*/
- break;
- case UpdateService.EVENT_ERROR:
- // TODO: Show message on this screen (with a big "okay" button that goes back to F-Droid activity)
- // rather than finishing directly.
- finish();
- break;
+ break;
+ case UpdateService.STATUS_ERROR_GLOBAL:
+ // TODO: Show message on this screen (with a big "okay" button that goes back to F-Droid activity)
+ // rather than finishing directly.
+ finish();
+ break;
+ }
}
- }
+ };
private void confirm() {
repo = ensureRepoExists();
if (repo != null) {
- UpdateService.updateRepoNow(repo.address, this).setListener(this);
+ UpdateService.updateRepoNow(repo.address, this);
}
}