Commit 112117a1 by olly Committed by Oliver Woodman

Reorder DownloadManager methods

Put methods into a more sensible order (the same order as
in the switch statement, which is a more natural order with
e.g. initialize coming first and release coming last).

PiperOrigin-RevId: 242891742
parent 9779d71a
......@@ -573,6 +573,52 @@ public final class DownloadManager {
return true;
}
private void initializeInternal(int notMetRequirements) {
this.notMetRequirements = notMetRequirements;
ArrayList<Download> loadedStates = new ArrayList<>();
try (DownloadCursor cursor =
downloadIndex.getDownloads(
STATE_QUEUED, STATE_STOPPED, STATE_DOWNLOADING, STATE_REMOVING, STATE_RESTARTING)) {
while (cursor.moveToNext()) {
loadedStates.add(cursor.getDownload());
}
logd("Download states are loaded.");
} catch (Throwable e) {
Log.e(TAG, "Download state loading failed.", e);
loadedStates.clear();
}
for (Download download : loadedStates) {
addDownloadForState(download);
}
logd("Downloads are created.");
mainHandler.obtainMessage(MSG_INITIALIZED, loadedStates).sendToTarget();
for (int i = 0; i < downloadInternals.size(); i++) {
downloadInternals.get(i).start();
}
}
private void setDownloadsStartedInternal(boolean downloadsStarted) {
if (this.downloadsStarted == downloadsStarted) {
return;
}
this.downloadsStarted = downloadsStarted;
for (int i = 0; i < downloadInternals.size(); i++) {
downloadInternals.get(i).updateStopState();
}
}
private void setNotMetRequirementsInternal(
@Requirements.RequirementFlags int notMetRequirements) {
if (this.notMetRequirements == notMetRequirements) {
return;
}
this.notMetRequirements = notMetRequirements;
logdFlags("Not met requirements are changed", notMetRequirements);
for (int i = 0; i < downloadInternals.size(); i++) {
downloadInternals.get(i).updateStopState();
}
}
private void setManualStopReasonInternal(@Nullable String id, int manualStopReason) {
if (id != null) {
DownloadInternal downloadInternal = getDownload(id);
......@@ -630,6 +676,37 @@ public final class DownloadManager {
}
}
private void onDownloadThreadStoppedInternal(DownloadThread downloadThread) {
DownloadInternal downloadInternal = downloadThread.downloadInternal;
logd("Download is stopped", downloadInternal);
activeDownloads.remove(downloadInternal);
boolean tryToStartDownloads = false;
if (!downloadThread.isRemoveThread) {
// If maxSimultaneousDownloads was hit, there might be a download waiting for a slot.
tryToStartDownloads = simultaneousDownloads == maxSimultaneousDownloads;
simultaneousDownloads--;
}
downloadInternal.onDownloadThreadStopped(downloadThread.isCanceled, downloadThread.finalError);
if (tryToStartDownloads) {
for (int i = 0;
simultaneousDownloads < maxSimultaneousDownloads && i < downloadInternals.size();
i++) {
downloadInternals.get(i).start();
}
}
}
private void releaseInternal() {
for (DownloadInternal downloadInternal : activeDownloads.keySet()) {
stopDownloadThread(downloadInternal);
}
internalThread.quit();
synchronized (releaseLock) {
released = true;
releaseLock.notifyAll();
}
}
private void onDownloadChangedInternal(DownloadInternal downloadInternal, Download download) {
logd("Download state is changed", downloadInternal);
try {
......@@ -654,26 +731,35 @@ public final class DownloadManager {
mainHandler.obtainMessage(MSG_DOWNLOAD_REMOVED, download).sendToTarget();
}
private void setDownloadsStartedInternal(boolean downloadsStarted) {
if (this.downloadsStarted == downloadsStarted) {
return;
@StartThreadResults
private int startDownloadThread(DownloadInternal downloadInternal) {
if (activeDownloads.containsKey(downloadInternal)) {
if (stopDownloadThread(downloadInternal)) {
return START_THREAD_WAIT_DOWNLOAD_CANCELLATION;
}
return START_THREAD_WAIT_REMOVAL_TO_FINISH;
}
this.downloadsStarted = downloadsStarted;
for (int i = 0; i < downloadInternals.size(); i++) {
downloadInternals.get(i).updateStopState();
if (!downloadInternal.isInRemoveState()) {
if (simultaneousDownloads == maxSimultaneousDownloads) {
return START_THREAD_TOO_MANY_DOWNLOADS;
}
simultaneousDownloads++;
}
DownloadThread downloadThread = new DownloadThread(downloadInternal);
activeDownloads.put(downloadInternal, downloadThread);
downloadInternal.setCounters(downloadThread.downloader.getCounters());
logd("Download is started", downloadInternal);
return START_THREAD_SUCCEEDED;
}
private void setNotMetRequirementsInternal(
@Requirements.RequirementFlags int notMetRequirements) {
if (this.notMetRequirements == notMetRequirements) {
return;
}
this.notMetRequirements = notMetRequirements;
logdFlags("Not met requirements are changed", notMetRequirements);
for (int i = 0; i < downloadInternals.size(); i++) {
downloadInternals.get(i).updateStopState();
private boolean stopDownloadThread(DownloadInternal downloadInternal) {
DownloadThread downloadThread = activeDownloads.get(downloadInternal);
if (downloadThread != null && !downloadThread.isRemoveThread) {
downloadThread.cancel();
logd("Download is cancelled", downloadInternal);
return true;
}
return false;
}
@Nullable
......@@ -696,30 +782,6 @@ public final class DownloadManager {
return null;
}
private void initializeInternal(int notMetRequirements) {
this.notMetRequirements = notMetRequirements;
ArrayList<Download> loadedStates = new ArrayList<>();
try (DownloadCursor cursor =
downloadIndex.getDownloads(
STATE_QUEUED, STATE_STOPPED, STATE_DOWNLOADING, STATE_REMOVING, STATE_RESTARTING)) {
while (cursor.moveToNext()) {
loadedStates.add(cursor.getDownload());
}
logd("Download states are loaded.");
} catch (Throwable e) {
Log.e(TAG, "Download state loading failed.", e);
loadedStates.clear();
}
for (Download download : loadedStates) {
addDownloadForState(download);
}
logd("Downloads are created.");
mainHandler.obtainMessage(MSG_INITIALIZED, loadedStates).sendToTarget();
for (int i = 0; i < downloadInternals.size(); i++) {
downloadInternals.get(i).start();
}
}
private void addDownloadForState(Download download) {
DownloadInternal downloadInternal = new DownloadInternal(this, download);
downloadInternals.add(downloadInternal);
......@@ -749,68 +811,6 @@ public final class DownloadManager {
}
}
@StartThreadResults
private int startDownloadThread(DownloadInternal downloadInternal) {
if (activeDownloads.containsKey(downloadInternal)) {
if (stopDownloadThread(downloadInternal)) {
return START_THREAD_WAIT_DOWNLOAD_CANCELLATION;
}
return START_THREAD_WAIT_REMOVAL_TO_FINISH;
}
if (!downloadInternal.isInRemoveState()) {
if (simultaneousDownloads == maxSimultaneousDownloads) {
return START_THREAD_TOO_MANY_DOWNLOADS;
}
simultaneousDownloads++;
}
DownloadThread downloadThread = new DownloadThread(downloadInternal);
activeDownloads.put(downloadInternal, downloadThread);
downloadInternal.setCounters(downloadThread.downloader.getCounters());
logd("Download is started", downloadInternal);
return START_THREAD_SUCCEEDED;
}
private boolean stopDownloadThread(DownloadInternal downloadInternal) {
DownloadThread downloadThread = activeDownloads.get(downloadInternal);
if (downloadThread != null && !downloadThread.isRemoveThread) {
downloadThread.cancel();
logd("Download is cancelled", downloadInternal);
return true;
}
return false;
}
private void releaseInternal() {
for (DownloadInternal downloadInternal : activeDownloads.keySet()) {
stopDownloadThread(downloadInternal);
}
internalThread.quit();
synchronized (releaseLock) {
released = true;
releaseLock.notifyAll();
}
}
private void onDownloadThreadStoppedInternal(DownloadThread downloadThread) {
DownloadInternal downloadInternal = downloadThread.downloadInternal;
logd("Download is stopped", downloadInternal);
activeDownloads.remove(downloadInternal);
boolean tryToStartDownloads = false;
if (!downloadThread.isRemoveThread) {
// If maxSimultaneousDownloads was hit, there might be a download waiting for a slot.
tryToStartDownloads = simultaneousDownloads == maxSimultaneousDownloads;
simultaneousDownloads--;
}
downloadInternal.onDownloadThreadStopped(downloadThread.isCanceled, downloadThread.finalError);
if (tryToStartDownloads) {
for (int i = 0;
simultaneousDownloads < maxSimultaneousDownloads && i < downloadInternals.size();
i++) {
downloadInternals.get(i).start();
}
}
}
private static final class DownloadInternal {
private final DownloadManager downloadManager;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment