Merge pull request #1039 from TomHennen/fix_concurrentmodexception
Fix locking in GpodnetPreferences
This commit is contained in:
commit
c7d2975039
|
@ -426,30 +426,4 @@ public class PreferencesTest extends ActivityInstrumentationTestCase2<Preference
|
|||
}
|
||||
}, Timeout.getLargeTimeout());
|
||||
}
|
||||
|
||||
@FlakyTest(tolerance = 3)
|
||||
public void testAbout() throws IOException {
|
||||
int numViews = 0, numLinks = 0;
|
||||
InputStream input = getActivity().getResources().getAssets().open("about.html");
|
||||
List<String> lines = IOUtils.readLines(input);
|
||||
input.close();
|
||||
for(String line : lines) {
|
||||
if(line.contains("(View)")) {
|
||||
numViews++;
|
||||
} else if(line.contains("(Link)")) {
|
||||
numLinks++;
|
||||
}
|
||||
}
|
||||
for(int i=0; i < numViews; i++) {
|
||||
solo.clickOnText(solo.getString(R.string.about_pref));
|
||||
solo.clickOnText("(View)", i);
|
||||
solo.goBack();
|
||||
}
|
||||
for(int i=0; i < numLinks; i++) {
|
||||
solo.clickOnText(solo.getString(R.string.about_pref));
|
||||
solo.clickOnText("(Link)", i);
|
||||
solo.goBack();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -8,7 +8,6 @@ import org.apache.commons.lang3.StringUtils;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
@ -217,26 +216,36 @@ public class GpodnetPreferences {
|
|||
|
||||
public static void removeRemovedFeeds(Collection<String> removed) {
|
||||
ensurePreferencesLoaded();
|
||||
feedListLock.lock();
|
||||
removedFeeds.removeAll(removed);
|
||||
writePreference(PREF_SYNC_REMOVED, removedFeeds);
|
||||
feedListLock.unlock();
|
||||
}
|
||||
|
||||
public static synchronized void enqueueEpisodeAction(GpodnetEpisodeAction action) {
|
||||
public static void enqueueEpisodeAction(GpodnetEpisodeAction action) {
|
||||
ensurePreferencesLoaded();
|
||||
feedListLock.lock();
|
||||
queuedEpisodeActions.add(action);
|
||||
writePreference(PREF_SYNC_EPISODE_ACTIONS, writeEpisodeActionsToString(queuedEpisodeActions));
|
||||
feedListLock.unlock();
|
||||
GpodnetSyncService.sendSyncActionsIntent(ClientConfig.applicationCallbacks.getApplicationInstance());
|
||||
}
|
||||
|
||||
public static List<GpodnetEpisodeAction> getQueuedEpisodeActions() {
|
||||
ensurePreferencesLoaded();
|
||||
return Collections.unmodifiableList(queuedEpisodeActions);
|
||||
List<GpodnetEpisodeAction> copy = new ArrayList();
|
||||
feedListLock.lock();
|
||||
copy.addAll(queuedEpisodeActions);
|
||||
feedListLock.unlock();
|
||||
return copy;
|
||||
}
|
||||
|
||||
public static synchronized void removeQueuedEpisodeActions(Collection<GpodnetEpisodeAction> queued) {
|
||||
public static void removeQueuedEpisodeActions(Collection<GpodnetEpisodeAction> queued) {
|
||||
ensurePreferencesLoaded();
|
||||
feedListLock.lock();
|
||||
queuedEpisodeActions.removeAll(queued);
|
||||
writePreference(PREF_SYNC_EPISODE_ACTIONS, writeEpisodeActionsToString(queuedEpisodeActions));
|
||||
feedListLock.unlock();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -252,12 +261,14 @@ public class GpodnetPreferences {
|
|||
setUsername(null);
|
||||
setPassword(null);
|
||||
setDeviceID(null);
|
||||
feedListLock.lock();
|
||||
addedFeeds.clear();
|
||||
writePreference(PREF_SYNC_ADDED, addedFeeds);
|
||||
removedFeeds.clear();
|
||||
writePreference(PREF_SYNC_REMOVED, removedFeeds);
|
||||
queuedEpisodeActions.clear();
|
||||
writePreference(PREF_SYNC_EPISODE_ACTIONS, writeEpisodeActionsToString(queuedEpisodeActions));
|
||||
feedListLock.unlock();
|
||||
setLastSubscriptionSyncTimestamp(0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue