From cbb182c18a311aad4548ace1a6793d0f078fa875 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 21 Jan 2014 21:52:56 -0500 Subject: [PATCH] add method for updating a single repo while leaving the rest as is Now, clicking Update in "Repo Detail" only updates that repo, not all of the repos. This will also be very useful for more transitory repos, like p2p repos that are reached via bluetooth, local wifi, etc. --- src/org/fdroid/fdroid/UpdateService.java | 30 +++++++++++++++++-- .../views/fragments/RepoDetailsFragment.java | 2 +- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/org/fdroid/fdroid/UpdateService.java b/src/org/fdroid/fdroid/UpdateService.java index f1c2544ce..f2c13b760 100644 --- a/src/org/fdroid/fdroid/UpdateService.java +++ b/src/org/fdroid/fdroid/UpdateService.java @@ -20,6 +20,8 @@ package org.fdroid.fdroid; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.TreeSet; import android.app.AlarmManager; import android.app.IntentService; @@ -119,6 +121,10 @@ public class UpdateService extends IntentService implements ProgressListener { } public static UpdateReceiver updateNow(Context context) { + return updateRepoNow(null, context); + } + + public static UpdateReceiver updateRepoNow(String address, Context context) { String title = context.getString(R.string.process_wait_title); String message = context.getString(R.string.process_update_msg); ProgressDialog dialog = ProgressDialog.show(context, title, message, true, true); @@ -129,6 +135,8 @@ public class UpdateService extends IntentService implements ProgressListener { UpdateReceiver receiver = new UpdateReceiver(new Handler()); receiver.setContext(context).setDialog(dialog); intent.putExtra("receiver", receiver); + if (!TextUtils.isEmpty(address)) + intent.putExtra("address", address); context.startService(intent); return receiver; @@ -204,6 +212,7 @@ public class UpdateService extends IntentService implements ProgressListener { protected void onHandleIntent(Intent intent) { receiver = intent.getParcelableExtra("receiver"); + String address = intent.getStringExtra("address"); long startTime = System.currentTimeMillis(); String errmsg = ""; @@ -242,7 +251,7 @@ public class UpdateService extends IntentService implements ProgressListener { } else { Log.d("FDroid", "Unscheduled (manually requested) update"); } - errmsg = updateRepos(); + errmsg = updateRepos(address); if (TextUtils.isEmpty(errmsg)) { Editor e = prefs.edit(); e.putLong(Preferences.PREF_UPD_LAST, System.currentTimeMillis()); @@ -263,7 +272,7 @@ public class UpdateService extends IntentService implements ProgressListener { } } - protected String updateRepos() throws Exception { + protected String updateRepos(String address) throws Exception { SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); boolean notify = prefs.getBoolean(Preferences.PREF_UPD_NOTIFY, false); @@ -283,11 +292,26 @@ public class UpdateService extends IntentService implements ProgressListener { // Process each repo... List updatingApps = new ArrayList(); - List keeprepos = new ArrayList(); + Set keeprepos = new TreeSet(); boolean changes = false; + boolean update; for (DB.Repo repo : repos) { if (!repo.inuse) continue; + // are we updating all repos, or just one? + if (TextUtils.isEmpty(address)) { + update = true; + } else { + // if only updating one repo, mark the rest as keepers + if (address.equals(repo.address)) { + update = true; + } else { + keeprepos.add(repo.id); + update = false; + } + } + if (!update) + continue; sendStatus(STATUS_INFO, getString(R.string.status_connecting_to_repo, repo.address)); RepoUpdater updater = RepoUpdater.createUpdaterFor(getBaseContext(), repo); updater.setProgressListener(this); diff --git a/src/org/fdroid/fdroid/views/fragments/RepoDetailsFragment.java b/src/org/fdroid/fdroid/views/fragments/RepoDetailsFragment.java index 367aacb5a..96d2b3d45 100644 --- a/src/org/fdroid/fdroid/views/fragments/RepoDetailsFragment.java +++ b/src/org/fdroid/fdroid/views/fragments/RepoDetailsFragment.java @@ -211,7 +211,7 @@ public class RepoDetailsFragment extends Fragment { */ private void performUpdate() { repo.enable((FDroidApp)getActivity().getApplication()); - UpdateService.updateNow(getActivity()).setListener(new ProgressListener() { + UpdateService.updateRepoNow(repo.address, getActivity()).setListener(new ProgressListener() { @Override public void onProgress(Event event) { if (event.type == UpdateService.STATUS_COMPLETE_AND_SAME ||