mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
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
This commit is contained in:
parent
9779d71a1d
commit
112117a1ac
1 changed files with 118 additions and 118 deletions
|
|
@ -573,6 +573,52 @@ public final class DownloadManager {
|
||||||
return true;
|
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) {
|
private void setManualStopReasonInternal(@Nullable String id, int manualStopReason) {
|
||||||
if (id != null) {
|
if (id != null) {
|
||||||
DownloadInternal downloadInternal = getDownload(id);
|
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) {
|
private void onDownloadChangedInternal(DownloadInternal downloadInternal, Download download) {
|
||||||
logd("Download state is changed", downloadInternal);
|
logd("Download state is changed", downloadInternal);
|
||||||
try {
|
try {
|
||||||
|
|
@ -654,101 +731,6 @@ public final class DownloadManager {
|
||||||
mainHandler.obtainMessage(MSG_DOWNLOAD_REMOVED, download).sendToTarget();
|
mainHandler.obtainMessage(MSG_DOWNLOAD_REMOVED, download).sendToTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private DownloadInternal getDownload(String id) {
|
|
||||||
for (int i = 0; i < downloadInternals.size(); i++) {
|
|
||||||
DownloadInternal downloadInternal = downloadInternals.get(i);
|
|
||||||
if (downloadInternal.download.action.id.equals(id)) {
|
|
||||||
return downloadInternal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Download loadDownload(String id) {
|
|
||||||
try {
|
|
||||||
return downloadIndex.getDownload(id);
|
|
||||||
} catch (DatabaseIOException e) {
|
|
||||||
Log.e(TAG, "loadDownload failed", e);
|
|
||||||
}
|
|
||||||
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);
|
|
||||||
logd("Download is added", downloadInternal);
|
|
||||||
downloadInternal.initialize();
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean canStartDownloads() {
|
|
||||||
return downloadsStarted && notMetRequirements == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void logd(String message) {
|
|
||||||
if (DEBUG) {
|
|
||||||
Log.d(TAG, message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void logd(String message, DownloadInternal downloadInternal) {
|
|
||||||
if (DEBUG) {
|
|
||||||
logd(message + ": " + downloadInternal);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void logdFlags(String message, int flags) {
|
|
||||||
if (DEBUG) {
|
|
||||||
logd(message + ": " + Integer.toBinaryString(flags));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@StartThreadResults
|
@StartThreadResults
|
||||||
private int startDownloadThread(DownloadInternal downloadInternal) {
|
private int startDownloadThread(DownloadInternal downloadInternal) {
|
||||||
if (activeDownloads.containsKey(downloadInternal)) {
|
if (activeDownloads.containsKey(downloadInternal)) {
|
||||||
|
|
@ -780,34 +762,52 @@ public final class DownloadManager {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void releaseInternal() {
|
@Nullable
|
||||||
for (DownloadInternal downloadInternal : activeDownloads.keySet()) {
|
private DownloadInternal getDownload(String id) {
|
||||||
stopDownloadThread(downloadInternal);
|
for (int i = 0; i < downloadInternals.size(); i++) {
|
||||||
|
DownloadInternal downloadInternal = downloadInternals.get(i);
|
||||||
|
if (downloadInternal.download.action.id.equals(id)) {
|
||||||
|
return downloadInternal;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
internalThread.quit();
|
return null;
|
||||||
synchronized (releaseLock) {
|
}
|
||||||
released = true;
|
|
||||||
releaseLock.notifyAll();
|
private Download loadDownload(String id) {
|
||||||
|
try {
|
||||||
|
return downloadIndex.getDownload(id);
|
||||||
|
} catch (DatabaseIOException e) {
|
||||||
|
Log.e(TAG, "loadDownload failed", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addDownloadForState(Download download) {
|
||||||
|
DownloadInternal downloadInternal = new DownloadInternal(this, download);
|
||||||
|
downloadInternals.add(downloadInternal);
|
||||||
|
logd("Download is added", downloadInternal);
|
||||||
|
downloadInternal.initialize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean canStartDownloads() {
|
||||||
|
return downloadsStarted && notMetRequirements == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void logd(String message) {
|
||||||
|
if (DEBUG) {
|
||||||
|
Log.d(TAG, message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onDownloadThreadStoppedInternal(DownloadThread downloadThread) {
|
private static void logd(String message, DownloadInternal downloadInternal) {
|
||||||
DownloadInternal downloadInternal = downloadThread.downloadInternal;
|
if (DEBUG) {
|
||||||
logd("Download is stopped", downloadInternal);
|
logd(message + ": " + 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;
|
private static void logdFlags(String message, int flags) {
|
||||||
simultaneousDownloads < maxSimultaneousDownloads && i < downloadInternals.size();
|
if (DEBUG) {
|
||||||
i++) {
|
logd(message + ": " + Integer.toBinaryString(flags));
|
||||||
downloadInternals.get(i).start();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue