diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java
index 0a6bc062f1..7593d8083c 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadService.java
@@ -16,19 +16,14 @@
package com.google.android.exoplayer2.offline;
import android.app.Notification;
-import android.app.Notification.Builder;
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
-import android.support.annotation.CallSuper;
import android.support.annotation.Nullable;
import android.util.Log;
-import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.offline.DownloadManager.DownloadState;
import com.google.android.exoplayer2.scheduler.Requirements;
import com.google.android.exoplayer2.scheduler.RequirementsWatcher;
@@ -42,7 +37,7 @@ import java.io.IOException;
*
To start the service, create an instance of one of the subclasses of {@link DownloadAction}
* and call {@link #addDownloadAction(Context, Class, DownloadAction)} with it.
*/
-public abstract class DownloadService extends Service implements DownloadManager.DownloadListener {
+public abstract class DownloadService extends Service {
/** Use this action to initialize {@link DownloadManager}. */
public static final String ACTION_INIT =
@@ -62,8 +57,8 @@ public abstract class DownloadService extends Service implements DownloadManager
/** A {@link DownloadAction} to be executed. */
public static final String DOWNLOAD_ACTION = "DownloadAction";
- /** Default progress update interval in milliseconds. */
- public static final long DEFAULT_PROGRESS_UPDATE_INTERVAL_MILLIS = 1000;
+ /** Default foreground notification update interval in milliseconds. */
+ public static final long DEFAULT_FOREGROUND_NOTIFICATION_UPDATE_INTERVAL = 1000;
private static final String TAG = "DownloadService";
private static final boolean DEBUG = false;
@@ -73,27 +68,35 @@ public abstract class DownloadService extends Service implements DownloadManager
private static RequirementsWatcher requirementsWatcher;
private static Scheduler scheduler;
- private final int notificationIdOffset;
- private final long progressUpdateIntervalMillis;
+ private final ForegroundNotificationUpdater foregroundNotificationUpdater;
private DownloadManager downloadManager;
- private ProgressUpdater progressUpdater;
+ private DownloadListener downloadListener;
private int lastStartId;
- /** @param notificationIdOffset Value to offset notification ids. Must be greater than 0. */
- protected DownloadService(int notificationIdOffset) {
- this(notificationIdOffset, DEFAULT_PROGRESS_UPDATE_INTERVAL_MILLIS);
+ /**
+ * Creates a DownloadService with {@link #DEFAULT_FOREGROUND_NOTIFICATION_UPDATE_INTERVAL}.
+ *
+ * @param foregroundNotificationId The notification id for the foreground notification, must not
+ * be 0.
+ */
+ protected DownloadService(int foregroundNotificationId) {
+ this(foregroundNotificationId, DEFAULT_FOREGROUND_NOTIFICATION_UPDATE_INTERVAL);
}
/**
- * @param notificationIdOffset Value to offset notification ids. Must be greater than 0.
- * @param progressUpdateIntervalMillis {@link #onProgressUpdate(DownloadState[])} is called using
- * this interval. If it's {@link C#TIME_UNSET}, then {@link
- * #onProgressUpdate(DownloadState[])} isn't called.
+ * Creates a DownloadService.
+ *
+ * @param foregroundNotificationId The notification id for the foreground notification, must not
+ * be 0.
+ * @param foregroundNotificationUpdateInterval The maximum interval to update foreground
+ * notification, in milliseconds.
*/
- protected DownloadService(int notificationIdOffset, long progressUpdateIntervalMillis) {
- this.notificationIdOffset = notificationIdOffset;
- this.progressUpdateIntervalMillis = progressUpdateIntervalMillis;
+ protected DownloadService(
+ int foregroundNotificationId, long foregroundNotificationUpdateInterval) {
+ foregroundNotificationUpdater =
+ new ForegroundNotificationUpdater(
+ foregroundNotificationId, foregroundNotificationUpdateInterval);
}
/**
@@ -130,7 +133,8 @@ public abstract class DownloadService extends Service implements DownloadManager
public void onCreate() {
logd("onCreate");
downloadManager = getDownloadManager();
- downloadManager.addListener(this);
+ downloadListener = new DownloadListener();
+ downloadManager.addListener(downloadListener);
if (requirementsWatcher == null) {
Requirements requirements = getRequirements();
@@ -143,15 +147,13 @@ public abstract class DownloadService extends Service implements DownloadManager
requirementsWatcher.start();
}
}
-
- progressUpdater = new ProgressUpdater(this, progressUpdateIntervalMillis);
}
@Override
public void onDestroy() {
logd("onDestroy");
- progressUpdater.stop();
- downloadManager.removeListener(this);
+ foregroundNotificationUpdater.stopPeriodicUpdates();
+ downloadManager.removeListener(downloadListener);
if (downloadManager.getTaskCount() == 0) {
if (requirementsWatcher != null) {
requirementsWatcher.stop();
@@ -186,12 +188,12 @@ public abstract class DownloadService extends Service implements DownloadManager
case ACTION_ADD:
byte[] actionData = intent.getByteArrayExtra(DOWNLOAD_ACTION);
if (actionData == null) {
- onCommandError(intent, new IllegalArgumentException("DownloadAction is missing."));
+ onCommandError(new IllegalArgumentException("DownloadAction is missing."));
} else {
try {
- onNewTask(intent, downloadManager.handleAction(actionData));
+ downloadManager.handleAction(actionData);
} catch (IOException e) {
- onCommandError(intent, e);
+ onCommandError(e);
}
}
break;
@@ -202,11 +204,11 @@ public abstract class DownloadService extends Service implements DownloadManager
downloadManager.startDownloads();
break;
default:
- onCommandError(intent, new IllegalArgumentException("Unknown action: " + intentAction));
+ onCommandError(new IllegalArgumentException("Unknown action: " + intentAction));
break;
}
if (downloadManager.isIdle()) {
- onIdle(null);
+ stop();
}
return START_STICKY;
}
@@ -227,130 +229,110 @@ public abstract class DownloadService extends Service implements DownloadManager
/** Returns requirements for downloads to take place, or null. */
protected abstract @Nullable Requirements getRequirements();
- /** Called on error in start command. */
- protected void onCommandError(Intent intent, Exception error) {
+ /**
+ * Returns a notification to be displayed when this service running in the foreground.
+ *
+ *
This method is called when there is a download task state change and periodically while
+ * there is an active download. Update interval can be set using {@link #DownloadService(int,
+ * long)}.
+ *
+ *
On API level 26 and above, it may be also called just before the service stops with an empty
+ * {@code downloadStates} array, returned notification is used to satisfy system requirements for
+ * foreground services.
+ *
+ * @param downloadStates DownloadState for all tasks.
+ * @return A notification to be displayed when this service running in the foreground.
+ */
+ protected abstract Notification getForegroundNotification(DownloadState[] downloadStates);
+
+ /** Called when the download state changes. */
+ protected void onStateChange(DownloadState downloadState) {
// Do nothing.
}
- /** Called when a new task is added to the {@link DownloadManager}. */
- protected void onNewTask(Intent intent, int taskId) {
- // Do nothing.
+ private void onCommandError(Exception error) {
+ Log.e(TAG, "Command error", error);
}
- /** Returns a notification channelId. See {@link NotificationChannel}. */
- protected abstract String getNotificationChannelId();
-
- /**
- * Helper method which calls {@link #startForeground(int, Notification)} with {@code
- * notificationIdOffset} and {@code foregroundNotification}.
- */
- public void startForeground(Notification foregroundNotification) {
- // logd("start foreground");
- startForeground(notificationIdOffset, foregroundNotification);
- }
-
- /**
- * Sets/replaces or cancels the notification for the given id.
- *
- * @param id A unique id for the notification. This value is offset by {@code
- * notificationIdOffset}.
- * @param notification If not null, it's showed, replacing any previous notification. Otherwise
- * any previous notification is canceled.
- */
- public void setNotification(int id, @Nullable Notification notification) {
- NotificationManager notificationManager =
- (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- if (notification != null) {
- notificationManager.notify(notificationIdOffset + 1 + id, notification);
- } else {
- notificationManager.cancel(notificationIdOffset + 1 + id);
- }
- }
-
- /**
- * Override this method to get notified.
- *
- *
{@inheritDoc}
- */
- @CallSuper
- @Override
- public void onStateChange(DownloadManager downloadManager, DownloadState downloadState) {
- if (downloadState.state == DownloadState.STATE_STARTED) {
- progressUpdater.start();
- }
- }
-
- /**
- * Override this method to get notified.
- *
- *
{@inheritDoc}
- */
- @CallSuper
- @Override
- public void onIdle(DownloadManager downloadManager) {
+ private void stop() {
+ foregroundNotificationUpdater.stopPeriodicUpdates();
// Make sure startForeground is called before stopping.
+ // Workaround for [Internal: b/69424260]
if (Util.SDK_INT >= 26) {
- Builder notificationBuilder = new Builder(this, getNotificationChannelId());
- Notification foregroundNotification = notificationBuilder.build();
- startForeground(foregroundNotification);
+ foregroundNotificationUpdater.showNotificationIfNotAlready();
}
boolean stopSelfResult = stopSelfResult(lastStartId);
logd("stopSelf(" + lastStartId + ") result: " + stopSelfResult);
}
- /** Override this method to get notified on every second while there are active downloads. */
- protected void onProgressUpdate(DownloadState[] activeDownloadTasks) {
- // Do nothing.
- }
-
private void logd(String message) {
if (DEBUG) {
Log.d(TAG, message);
}
}
- private static final class ProgressUpdater implements Runnable {
+ private final class DownloadListener implements DownloadManager.DownloadListener {
+ @Override
+ public void onStateChange(DownloadManager downloadManager, DownloadState downloadState) {
+ DownloadService.this.onStateChange(downloadState);
+ if (downloadState.state == DownloadState.STATE_STARTED) {
+ foregroundNotificationUpdater.startPeriodicUpdates();
+ } else {
+ foregroundNotificationUpdater.update();
+ }
+ }
- private final DownloadService downloadService;
- private final long progressUpdateIntervalMillis;
+ @Override
+ public final void onIdle(DownloadManager downloadManager) {
+ stop();
+ }
+ }
+
+ private final class ForegroundNotificationUpdater implements Runnable {
+
+ private final int notificationId;
+ private final long updateInterval;
private final Handler handler;
- private boolean stopped;
- public ProgressUpdater(DownloadService downloadService, long progressUpdateIntervalMillis) {
- this.downloadService = downloadService;
- this.progressUpdateIntervalMillis = progressUpdateIntervalMillis;
+ private boolean periodicUpdatesStarted;
+ private boolean notificationDisplayed;
+
+ public ForegroundNotificationUpdater(int notificationId, long updateInterval) {
+ this.notificationId = notificationId;
+ this.updateInterval = updateInterval;
this.handler = new Handler(Looper.getMainLooper());
- stopped = true;
+ }
+
+ public void startPeriodicUpdates() {
+ periodicUpdatesStarted = true;
+ update();
+ }
+
+ public void stopPeriodicUpdates() {
+ periodicUpdatesStarted = false;
+ handler.removeCallbacks(this);
+ }
+
+ public void update() {
+ DownloadState[] downloadStates = downloadManager.getDownloadStates();
+ startForeground(notificationId, getForegroundNotification(downloadStates));
+ notificationDisplayed = true;
+ if (periodicUpdatesStarted) {
+ handler.removeCallbacks(this);
+ handler.postDelayed(this, updateInterval);
+ }
+ }
+
+ public void showNotificationIfNotAlready() {
+ if (!notificationDisplayed) {
+ update();
+ }
}
@Override
public void run() {
- DownloadState[] activeDownloadTasks =
- downloadService.downloadManager.getActiveDownloadStates();
- if (activeDownloadTasks.length > 0) {
- downloadService.onProgressUpdate(activeDownloadTasks);
- if (progressUpdateIntervalMillis != C.TIME_UNSET) {
- handler.postDelayed(this, progressUpdateIntervalMillis);
- }
- } else {
- stop();
- }
+ update();
}
-
- public void stop() {
- stopped = true;
- handler.removeCallbacks(this);
- }
-
- public void start() {
- if (stopped) {
- stopped = false;
- if (progressUpdateIntervalMillis != C.TIME_UNSET) {
- handler.post(this);
- }
- }
- }
-
}
private static final class RequirementsListener implements RequirementsWatcher.Listener {
diff --git a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadServiceDashTest.java b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadServiceDashTest.java
index e8044e57c1..7c01170f45 100644
--- a/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadServiceDashTest.java
+++ b/library/dash/src/test/java/com/google/android/exoplayer2/source/dash/offline/DownloadServiceDashTest.java
@@ -20,9 +20,12 @@ import static com.google.android.exoplayer2.source.dash.offline.DashDownloadTest
import static com.google.android.exoplayer2.testutil.CacheAsserts.assertCacheEmpty;
import static com.google.android.exoplayer2.testutil.CacheAsserts.assertCachedData;
+import android.app.Notification;
import android.content.Context;
import android.content.Intent;
+import android.support.annotation.Nullable;
import com.google.android.exoplayer2.offline.DownloadManager;
+import com.google.android.exoplayer2.offline.DownloadManager.DownloadState;
import com.google.android.exoplayer2.offline.DownloadService;
import com.google.android.exoplayer2.offline.DownloaderConstructorHelper;
import com.google.android.exoplayer2.scheduler.Requirements;
@@ -44,6 +47,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mockito;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -107,7 +111,7 @@ public class DownloadServiceDashTest {
new Runnable() {
@Override
public void run() {
- File actionFile = null;
+ File actionFile;
try {
actionFile = Util.createTempFile(context, "ExoPlayerTest");
} catch (IOException e) {
@@ -126,7 +130,7 @@ public class DownloadServiceDashTest {
dashDownloadManager.startDownloads();
dashDownloadService =
- new DownloadService(101010) {
+ new DownloadService(/*foregroundNotificationId=*/ 1) {
@Override
protected DownloadManager getDownloadManager() {
@@ -134,15 +138,18 @@ public class DownloadServiceDashTest {
}
@Override
- protected String getNotificationChannelId() {
- return "";
+ protected Notification getForegroundNotification(
+ DownloadState[] downloadStates) {
+ return Mockito.mock(Notification.class);
}
+ @Nullable
@Override
protected Scheduler getScheduler() {
return null;
}
+ @Nullable
@Override
protected Requirements getRequirements() {
return null;
@@ -216,7 +223,7 @@ public class DownloadServiceDashTest {
callDownloadServiceOnStart(new DashDownloadAction(TEST_MPD_URI, false, null, keys));
}
- private void callDownloadServiceOnStart(final DashDownloadAction action) throws Throwable {
+ private void callDownloadServiceOnStart(final DashDownloadAction action) {
dummyMainThread.runOnMainThread(
new Runnable() {
@Override
diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/DownloadNotificationUtil.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/DownloadNotificationUtil.java
index b4f69809a5..9085397f14 100644
--- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/DownloadNotificationUtil.java
+++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/DownloadNotificationUtil.java
@@ -16,23 +16,71 @@
package com.google.android.exoplayer2.ui;
import android.app.Notification;
-import android.app.Notification.BigTextStyle;
-import android.app.Notification.Builder;
import android.content.Context;
import android.support.annotation.Nullable;
+import android.support.v4.app.NotificationCompat;
import com.google.android.exoplayer2.offline.DownloadManager;
import com.google.android.exoplayer2.offline.DownloadManager.DownloadState;
import com.google.android.exoplayer2.util.ErrorMessageProvider;
-import com.google.android.exoplayer2.util.Util;
/** Helper class to create notifications for downloads using {@link DownloadManager}. */
public final class DownloadNotificationUtil {
+ private static final int NULL_STRING_ID = 0;
+
private DownloadNotificationUtil() {}
/**
- * Returns a notification for the given {@link DownloadState}, or null if no notification should
- * be displayed.
+ * Returns a progress notification for the given {@link DownloadState}s.
+ *
+ * @param downloadStates States of the downloads.
+ * @param context Used to access resources.
+ * @param smallIcon A small icon for the notification.
+ * @param channelId The id of the notification channel to use. Only required for API level 26 and
+ * above.
+ * @param message An optional message to display on the notification.
+ * @return A progress notification for the given {@link DownloadState}s.
+ */
+ public static @Nullable Notification createProgressNotification(
+ DownloadState[] downloadStates,
+ Context context,
+ int smallIcon,
+ String channelId,
+ @Nullable String message) {
+ float totalPercentage = 0;
+ int determinatePercentageCount = 0;
+ boolean isAnyDownloadActive = false;
+ for (DownloadState downloadState : downloadStates) {
+ if (downloadState.downloadAction.isRemoveAction()
+ || downloadState.state != DownloadState.STATE_STARTED) {
+ continue;
+ }
+ float percentage = downloadState.downloadPercentage;
+ if (!Float.isNaN(percentage)) {
+ totalPercentage += percentage;
+ determinatePercentageCount++;
+ }
+ isAnyDownloadActive = true;
+ }
+
+ int titleStringId = isAnyDownloadActive ? R.string.exo_downloading : NULL_STRING_ID;
+ NotificationCompat.Builder notificationBuilder =
+ createNotificationBuilder(context, smallIcon, channelId, message, titleStringId);
+
+ notificationBuilder.setOngoing(true);
+ int max = 100;
+ int progress = (int) (totalPercentage / determinatePercentageCount);
+ boolean indeterminate = determinatePercentageCount == 0;
+ notificationBuilder.setProgress(max, progress, indeterminate);
+
+ notificationBuilder.setShowWhen(false);
+ return notificationBuilder.build();
+ }
+
+ /**
+ * Returns a notification for a {@link DownloadState} which is in either {@link
+ * DownloadState#STATE_ENDED} or {@link DownloadState#STATE_ERROR} states. Returns null if it's
+ * some other state or it's state of a remove action.
*
* @param downloadState State of the download.
* @param context Used to access resources.
@@ -43,10 +91,11 @@ public final class DownloadNotificationUtil {
* @param errorMessageProvider An optional {@link ErrorMessageProvider} for translating download
* errors into readable error messages. If not null and there is a download error then the
* error message is displayed instead of {@code message}.
- * @return A notification for the given {@link DownloadState}, or null if no notification should
- * be displayed.
+ * @return A notification for a {@link DownloadState} which is in either {@link
+ * DownloadState#STATE_ENDED} or {@link DownloadState#STATE_ERROR} states. Returns null if
+ * it's some other state or it's state of a remove action.
*/
- public static @Nullable Notification createNotification(
+ public static @Nullable Notification createDownloadFinishedNotification(
DownloadState downloadState,
Context context,
int smallIcon,
@@ -54,63 +103,36 @@ public final class DownloadNotificationUtil {
@Nullable String message,
@Nullable ErrorMessageProvider errorMessageProvider) {
if (downloadState.downloadAction.isRemoveAction()
- || downloadState.state == DownloadState.STATE_CANCELED) {
+ || (downloadState.state != DownloadState.STATE_ENDED
+ && downloadState.state != DownloadState.STATE_ERROR)) {
return null;
}
-
- Builder notificationBuilder = new Builder(context);
- if (Util.SDK_INT >= 26) {
- notificationBuilder.setChannelId(channelId);
- }
- notificationBuilder.setSmallIcon(smallIcon);
-
- int titleStringId = getTitleStringId(downloadState);
- notificationBuilder.setContentTitle(context.getResources().getString(titleStringId));
-
- if (downloadState.state == DownloadState.STATE_STARTED) {
- notificationBuilder.setOngoing(true);
- float percentage = downloadState.downloadPercentage;
- boolean indeterminate = Float.isNaN(percentage);
- notificationBuilder.setProgress(100, indeterminate ? 0 : (int) percentage, indeterminate);
- }
- if (Util.SDK_INT >= 17) {
- // Hide timestamp on the notification while download progresses.
- notificationBuilder.setShowWhen(downloadState.state != DownloadState.STATE_STARTED);
- }
-
if (downloadState.error != null && errorMessageProvider != null) {
message = errorMessageProvider.getErrorMessage(downloadState.error).second;
}
- if (message != null) {
- if (Util.SDK_INT >= 16) {
- notificationBuilder.setStyle(new BigTextStyle().bigText(message));
- } else {
- notificationBuilder.setContentText(message);
- }
- }
- return notificationBuilder.getNotification();
+ int titleStringId =
+ downloadState.state == DownloadState.STATE_ENDED
+ ? R.string.exo_download_completed
+ : R.string.exo_download_failed;
+ NotificationCompat.Builder notificationBuilder =
+ createNotificationBuilder(context, smallIcon, channelId, message, titleStringId);
+ return notificationBuilder.build();
}
- private static int getTitleStringId(DownloadState downloadState) {
- int titleStringId;
- switch (downloadState.state) {
- case DownloadState.STATE_QUEUED:
- titleStringId = R.string.exo_download_queued;
- break;
- case DownloadState.STATE_STARTED:
- titleStringId = R.string.exo_downloading;
- break;
- case DownloadState.STATE_ENDED:
- titleStringId = R.string.exo_download_completed;
- break;
- case DownloadState.STATE_ERROR:
- titleStringId = R.string.exo_download_failed;
- break;
- case DownloadState.STATE_CANCELED:
- default:
- // Never happens.
- throw new IllegalStateException();
+ private static NotificationCompat.Builder createNotificationBuilder(
+ Context context,
+ int smallIcon,
+ String channelId,
+ @Nullable String message,
+ int titleStringId) {
+ NotificationCompat.Builder notificationBuilder =
+ new NotificationCompat.Builder(context, channelId).setSmallIcon(smallIcon);
+ if (titleStringId != NULL_STRING_ID) {
+ notificationBuilder.setContentTitle(context.getResources().getString(titleStringId));
}
- return titleStringId;
+ if (message != null) {
+ notificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(message));
+ }
+ return notificationBuilder;
}
}
diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/NotificationUtil.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/NotificationUtil.java
new file mode 100644
index 0000000000..ab665bcc01
--- /dev/null
+++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/NotificationUtil.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.google.android.exoplayer2.ui;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.content.Context;
+import android.content.Intent;
+import android.support.annotation.Nullable;
+import com.google.android.exoplayer2.util.Util;
+
+/** Utility methods for displaying {@link android.app.Notification}s. */
+public final class NotificationUtil {
+
+ private NotificationUtil() {}
+
+ /**
+ * Creates a notification channel that notifications can be posted to. See {@link
+ * NotificationChannel} and {@link
+ * NotificationManager#createNotificationChannel(NotificationChannel)} for details.
+ *
+ * @param context A {@link Context} to retrieve {@link NotificationManager}.
+ * @param id The id of the channel. Must be unique per package. The value may be truncated if it
+ * is too long.
+ * @param name The user visible name of the channel. You can rename this channel when the system
+ * locale changes by listening for the {@link Intent#ACTION_LOCALE_CHANGED} broadcast. The
+ * recommended maximum length is 40 characters; the value may be truncated if it is too long.
+ * @param importance The importance of the channel. This controls how interruptive notifications
+ * posted to this channel are.
+ */
+ public static void createNotificationChannel(
+ Context context, String id, int name, int importance) {
+ if (Util.SDK_INT >= 26) {
+ NotificationManager notificationManager =
+ (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+ NotificationChannel mChannel =
+ new NotificationChannel(id, context.getString(name), importance);
+ notificationManager.createNotificationChannel(mChannel);
+ }
+ }
+
+ /**
+ * Post a notification to be shown in the status bar. If a notification with the same id has
+ * already been posted by your application and has not yet been canceled, it will be replaced by
+ * the updated information. If {@code notification} is null, then cancels a previously shown
+ * notification.
+ *
+ * @param context A {@link Context} to retrieve {@link NotificationManager}.
+ * @param id An identifier for this notification unique within your application.
+ * @param notification A {@link Notification} object describing what to show the user. If null,
+ * then cancels a previously shown notification.
+ */
+ public static void setNotification(Context context, int id, @Nullable Notification notification) {
+ NotificationManager notificationManager =
+ (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
+ if (notification != null) {
+ notificationManager.notify(id, notification);
+ } else {
+ notificationManager.cancel(id);
+ }
+ }
+}
diff --git a/library/ui/src/main/res/values-af/strings.xml b/library/ui/src/main/res/values-af/strings.xml
index 0ede570914..e98f065a33 100644
--- a/library/ui/src/main/res/values-af/strings.xml
+++ b/library/ui/src/main/res/values-af/strings.xml
@@ -12,7 +12,6 @@
Herhaal alles
Skommel
Volskermmodus
- Aflaai op waglys
Laai tans af
Aflaai is voltooi
Kon nie aflaai nie
diff --git a/library/ui/src/main/res/values-am/strings.xml b/library/ui/src/main/res/values-am/strings.xml
index 80c4fd1fb6..fc7793a7dd 100644
--- a/library/ui/src/main/res/values-am/strings.xml
+++ b/library/ui/src/main/res/values-am/strings.xml
@@ -12,7 +12,6 @@
ሁሉንም ድገም
በውዝ
የሙሉ ማያ ሁነታ
- ማውረድ ወረፋ ይዟል
በማውረድ ላይ
ማውረድ ተጠናቋል
ማውረድ አልተሳካም
diff --git a/library/ui/src/main/res/values-ar/strings.xml b/library/ui/src/main/res/values-ar/strings.xml
index 5ccc6b3145..a25d8d863a 100644
--- a/library/ui/src/main/res/values-ar/strings.xml
+++ b/library/ui/src/main/res/values-ar/strings.xml
@@ -12,7 +12,6 @@
تكرار الكل
ترتيب عشوائي
وضع ملء الشاشة
- التنزيل قيد الانتظار
تحميل
اكتمل التنزيل
تعذّر التنزيل
diff --git a/library/ui/src/main/res/values-az/strings.xml b/library/ui/src/main/res/values-az/strings.xml
index cb1328f0ba..81b5db725c 100644
--- a/library/ui/src/main/res/values-az/strings.xml
+++ b/library/ui/src/main/res/values-az/strings.xml
@@ -12,7 +12,6 @@
Hamısı təkrarlansın
Qarışdırın
Tam ekran rejimi
- Endirmə gözlənilir
Endirilir
Endirmə tamamlandı
Endirmə alınmadı
diff --git a/library/ui/src/main/res/values-b+sr+Latn/strings.xml b/library/ui/src/main/res/values-b+sr+Latn/strings.xml
index be0223898b..90f82ba488 100644
--- a/library/ui/src/main/res/values-b+sr+Latn/strings.xml
+++ b/library/ui/src/main/res/values-b+sr+Latn/strings.xml
@@ -12,7 +12,6 @@
Ponovi sve
Pusti nasumično
Režim celog ekrana
- Preuzimanje je na čekanju
Preuzimanje
Preuzimanje je završeno
Preuzimanje nije uspelo
diff --git a/library/ui/src/main/res/values-be/strings.xml b/library/ui/src/main/res/values-be/strings.xml
index ce6d8b1cc8..cb7ec16a76 100644
--- a/library/ui/src/main/res/values-be/strings.xml
+++ b/library/ui/src/main/res/values-be/strings.xml
@@ -12,7 +12,6 @@
Паўтарыць усе
Перамяшаць
Поўнаэкранны рэжым
- Спампоўка пастаўлена ў чаргу
Спампоўка
Спампоўка завершана
Збой спампоўкі
diff --git a/library/ui/src/main/res/values-bg/strings.xml b/library/ui/src/main/res/values-bg/strings.xml
index 14cc2c8fcc..d13e98eea6 100644
--- a/library/ui/src/main/res/values-bg/strings.xml
+++ b/library/ui/src/main/res/values-bg/strings.xml
@@ -12,7 +12,6 @@
Повтаряне на всички
Разбъркване
Режим на цял екран
- Изтеглянето е в опашката
Изтегля се
Изтеглянето завърши
Изтеглянето не бе успешно
diff --git a/library/ui/src/main/res/values-bn/strings.xml b/library/ui/src/main/res/values-bn/strings.xml
index 539837dc04..98ca3c05db 100644
--- a/library/ui/src/main/res/values-bn/strings.xml
+++ b/library/ui/src/main/res/values-bn/strings.xml
@@ -12,7 +12,6 @@
সবগুলি আইটেম আবার চালান
শাফেল করুন
পূর্ণ স্ক্রিন মোড
- ডাউনলোড অপেক্ষমান
ডাউনলোড হচ্ছে
ডাউনলোড হয়ে গেছে
ডাউনলোড করা যায়নি
diff --git a/library/ui/src/main/res/values-bs/strings.xml b/library/ui/src/main/res/values-bs/strings.xml
index f7f4bf5cbb..3504767263 100644
--- a/library/ui/src/main/res/values-bs/strings.xml
+++ b/library/ui/src/main/res/values-bs/strings.xml
@@ -12,7 +12,6 @@
Ponovi sve
Izmiješaj
Način rada preko cijelog ekrana
- Preuzimanje je na čekanju
Preuzimanje
Preuzimanje je završeno
Preuzimanje nije uspjelo
diff --git a/library/ui/src/main/res/values-ca/strings.xml b/library/ui/src/main/res/values-ca/strings.xml
index 31fc1c59b3..c4212c590c 100644
--- a/library/ui/src/main/res/values-ca/strings.xml
+++ b/library/ui/src/main/res/values-ca/strings.xml
@@ -12,7 +12,6 @@
Repeteix tot
Reprodueix aleatòriament
Mode de pantalla completa
- La baixada s\'ha posat a la cua
S\'està baixant
S\'ha completat la baixada
No s\'ha pogut baixar
diff --git a/library/ui/src/main/res/values-cs/strings.xml b/library/ui/src/main/res/values-cs/strings.xml
index 75d5f6c1c1..e0f4771a1a 100644
--- a/library/ui/src/main/res/values-cs/strings.xml
+++ b/library/ui/src/main/res/values-cs/strings.xml
@@ -12,7 +12,6 @@
Opakovat vše
Náhodně
Režim celé obrazovky
- Zařazeno do fronty stahování
Stahování
Stahování bylo dokončeno
Stažení se nezdařilo
diff --git a/library/ui/src/main/res/values-da/strings.xml b/library/ui/src/main/res/values-da/strings.xml
index ce9c9e7da7..e96c37b9c4 100644
--- a/library/ui/src/main/res/values-da/strings.xml
+++ b/library/ui/src/main/res/values-da/strings.xml
@@ -12,7 +12,6 @@
Gentag alle
Bland
Fuld skærm
- Downloaden er i kø
Download
Downloaden er udført
Download mislykkedes
diff --git a/library/ui/src/main/res/values-de/strings.xml b/library/ui/src/main/res/values-de/strings.xml
index 3fd38a784b..7bfc01c0a8 100644
--- a/library/ui/src/main/res/values-de/strings.xml
+++ b/library/ui/src/main/res/values-de/strings.xml
@@ -12,7 +12,6 @@
Alle wiederholen
Zufallsmix
Vollbildmodus
- Download in der Warteschlange
Wird heruntergeladen
Download abgeschlossen
Download fehlgeschlagen
diff --git a/library/ui/src/main/res/values-el/strings.xml b/library/ui/src/main/res/values-el/strings.xml
index c4d15a55d6..d926c455b6 100644
--- a/library/ui/src/main/res/values-el/strings.xml
+++ b/library/ui/src/main/res/values-el/strings.xml
@@ -12,7 +12,6 @@
Επανάληψη όλων
Τυχαία αναπαραγωγή
Λειτουργία πλήρους οθόνης
- Η λήψη προστέθηκε στην ουρά
Λήψη
Η λήψη ολοκληρώθηκε
Η λήψη απέτυχε
diff --git a/library/ui/src/main/res/values-en-rAU/strings.xml b/library/ui/src/main/res/values-en-rAU/strings.xml
index cfb09d7f65..fddba2245c 100644
--- a/library/ui/src/main/res/values-en-rAU/strings.xml
+++ b/library/ui/src/main/res/values-en-rAU/strings.xml
@@ -12,7 +12,6 @@
Repeat all
Shuffle
Full-screen mode
- Download queued
Downloading
Download completed
Download failed
diff --git a/library/ui/src/main/res/values-en-rGB/strings.xml b/library/ui/src/main/res/values-en-rGB/strings.xml
index cfb09d7f65..fddba2245c 100644
--- a/library/ui/src/main/res/values-en-rGB/strings.xml
+++ b/library/ui/src/main/res/values-en-rGB/strings.xml
@@ -12,7 +12,6 @@
Repeat all
Shuffle
Full-screen mode
- Download queued
Downloading
Download completed
Download failed
diff --git a/library/ui/src/main/res/values-en-rIN/strings.xml b/library/ui/src/main/res/values-en-rIN/strings.xml
index cfb09d7f65..fddba2245c 100644
--- a/library/ui/src/main/res/values-en-rIN/strings.xml
+++ b/library/ui/src/main/res/values-en-rIN/strings.xml
@@ -12,7 +12,6 @@
Repeat all
Shuffle
Full-screen mode
- Download queued
Downloading
Download completed
Download failed
diff --git a/library/ui/src/main/res/values-es-rUS/strings.xml b/library/ui/src/main/res/values-es-rUS/strings.xml
index 990c2cc6ff..e4ef802db4 100644
--- a/library/ui/src/main/res/values-es-rUS/strings.xml
+++ b/library/ui/src/main/res/values-es-rUS/strings.xml
@@ -12,7 +12,6 @@
Repetir todo
Reproducir aleatoriamente
Modo de pantalla completa
- Descarga en fila
Descargando
Se completó la descarga
No se pudo descargar
diff --git a/library/ui/src/main/res/values-es/strings.xml b/library/ui/src/main/res/values-es/strings.xml
index 2210475e48..fdf98310b3 100644
--- a/library/ui/src/main/res/values-es/strings.xml
+++ b/library/ui/src/main/res/values-es/strings.xml
@@ -12,7 +12,6 @@
Repetir todo
Reproducir aleatoriamente
Modo de pantalla completa
- Descarga en cola
Descarga de archivos
Descarga de archivos completado
No se ha podido descargar
diff --git a/library/ui/src/main/res/values-et/strings.xml b/library/ui/src/main/res/values-et/strings.xml
index 79242a3f45..eb7662e0be 100644
--- a/library/ui/src/main/res/values-et/strings.xml
+++ b/library/ui/src/main/res/values-et/strings.xml
@@ -12,7 +12,6 @@
Korda kõiki
Esita juhuslikus järjekorras
Täisekraani režiim
- Allalaadimine on järjekorras
Allalaadimine
Allalaadimine lõpetati
Allalaadimine ebaõnnestus
diff --git a/library/ui/src/main/res/values-eu/strings.xml b/library/ui/src/main/res/values-eu/strings.xml
index 1358f57059..3f3e6e1a43 100644
--- a/library/ui/src/main/res/values-eu/strings.xml
+++ b/library/ui/src/main/res/values-eu/strings.xml
@@ -12,7 +12,6 @@
Errepikatu guztiak
Erreproduzitu ausaz
Pantaila osoko modua
- Ilaran dago deskarga
Deskargatzen
Osatu da deskarga
Ezin izan da deskargatu
diff --git a/library/ui/src/main/res/values-fa/strings.xml b/library/ui/src/main/res/values-fa/strings.xml
index c31f9dafa8..bcc8a884bc 100644
--- a/library/ui/src/main/res/values-fa/strings.xml
+++ b/library/ui/src/main/res/values-fa/strings.xml
@@ -12,7 +12,6 @@
تکرار همه
درهم
حالت تمامصفحه
- درانتظار بارگیری
درحال بارگیری
بارگیری کامل شد
بارگیری نشد
diff --git a/library/ui/src/main/res/values-fi/strings.xml b/library/ui/src/main/res/values-fi/strings.xml
index 4e2b6aaad0..b9eb2e1529 100644
--- a/library/ui/src/main/res/values-fi/strings.xml
+++ b/library/ui/src/main/res/values-fi/strings.xml
@@ -12,7 +12,6 @@
Toista kaikki uudelleen
Satunnaistoisto
Koko näytön tila
- Lataus jonossa
Ladataan
Lataus valmis
Lataus epäonnistui
diff --git a/library/ui/src/main/res/values-fr-rCA/strings.xml b/library/ui/src/main/res/values-fr-rCA/strings.xml
index 06fff296af..08a94dc696 100644
--- a/library/ui/src/main/res/values-fr-rCA/strings.xml
+++ b/library/ui/src/main/res/values-fr-rCA/strings.xml
@@ -12,7 +12,6 @@
Tout lire en boucle
Lecture aléatoire
Mode Plein écran
- File d\'attente de télécharg.
Téléchargement en cours…
Téléchargement terminé
Échec du téléchargement
diff --git a/library/ui/src/main/res/values-fr/strings.xml b/library/ui/src/main/res/values-fr/strings.xml
index 2a6c79df5e..07fc39bf71 100644
--- a/library/ui/src/main/res/values-fr/strings.xml
+++ b/library/ui/src/main/res/values-fr/strings.xml
@@ -12,7 +12,6 @@
Tout lire en boucle
Aléatoire
Mode plein écran
- Téléchargement en attente
Téléchargement…
Téléchargement terminé
Échec du téléchargement
diff --git a/library/ui/src/main/res/values-gl/strings.xml b/library/ui/src/main/res/values-gl/strings.xml
index 5a0e83fbf7..f46b00b9ec 100644
--- a/library/ui/src/main/res/values-gl/strings.xml
+++ b/library/ui/src/main/res/values-gl/strings.xml
@@ -12,7 +12,6 @@
Repetir todas as pistas
Reprodución aleatoria
Modo de pantalla completa
- A descarga está na cola
Descargando
Completouse a descarga
Produciuse un erro na descarga
diff --git a/library/ui/src/main/res/values-gu/strings.xml b/library/ui/src/main/res/values-gu/strings.xml
index ae1618d830..b129bc87ff 100644
--- a/library/ui/src/main/res/values-gu/strings.xml
+++ b/library/ui/src/main/res/values-gu/strings.xml
@@ -12,7 +12,6 @@
બધાને રિપીટ કરો
શફલ કરો
પૂર્ણસ્ક્રીન મોડ
- ડાઉનલોડ માટે કતારમાં છે
ડાઉનલોડ કરી રહ્યાં છીએ
ડાઉનલોડ પૂર્ણ થયું
ડાઉનલોડ નિષ્ફળ થયું
diff --git a/library/ui/src/main/res/values-hi/strings.xml b/library/ui/src/main/res/values-hi/strings.xml
index e5b7554acf..200f1ad140 100644
--- a/library/ui/src/main/res/values-hi/strings.xml
+++ b/library/ui/src/main/res/values-hi/strings.xml
@@ -12,7 +12,6 @@
सभी को दोहराएं
शफ़ल करें
फ़ुलस्क्रीन मोड
- डाउनलोड को कतार में लगाया गया
डाउनलोड हो रहा है
डाउनलोड पूरा हुआ
डाउनलोड नहीं हो सका
diff --git a/library/ui/src/main/res/values-hr/strings.xml b/library/ui/src/main/res/values-hr/strings.xml
index 324dedf417..6cec5d5074 100644
--- a/library/ui/src/main/res/values-hr/strings.xml
+++ b/library/ui/src/main/res/values-hr/strings.xml
@@ -12,7 +12,6 @@
Ponovi sve
Reproduciraj nasumično
Prikaz na cijelom zaslonu
- Preuzimanje na čekanju
Preuzimanje datoteka
Preuzimanje je dovršeno
Preuzimanje nije uspjelo
diff --git a/library/ui/src/main/res/values-hu/strings.xml b/library/ui/src/main/res/values-hu/strings.xml
index dd898ff22f..f3932ac085 100644
--- a/library/ui/src/main/res/values-hu/strings.xml
+++ b/library/ui/src/main/res/values-hu/strings.xml
@@ -12,7 +12,6 @@
Összes szám ismétlése
Keverés
Teljes képernyős mód
- Letöltés várólistára helyezve
Letöltés folyamatban
A letöltés befejeződött
Nem sikerült a letöltés
diff --git a/library/ui/src/main/res/values-hy/strings.xml b/library/ui/src/main/res/values-hy/strings.xml
index 73f8bff5e0..321bf61894 100644
--- a/library/ui/src/main/res/values-hy/strings.xml
+++ b/library/ui/src/main/res/values-hy/strings.xml
@@ -12,7 +12,6 @@
Կրկնել բոլորը
Խառնել
Լիաէկրան ռեժիմ
- Ներբեռնումը շուտով կսկսվի
Ներբեռնում
Ներբեռնումն ավարտվեց
Չհաջողվեց ներբեռնել
diff --git a/library/ui/src/main/res/values-in/strings.xml b/library/ui/src/main/res/values-in/strings.xml
index 6bc073d1fa..a4becda244 100644
--- a/library/ui/src/main/res/values-in/strings.xml
+++ b/library/ui/src/main/res/values-in/strings.xml
@@ -12,7 +12,6 @@
Ulangi semua
Acak
Mode layar penuh
- Download masih dalam antrean
Mendownload
Download selesai
Download gagal
diff --git a/library/ui/src/main/res/values-is/strings.xml b/library/ui/src/main/res/values-is/strings.xml
index e54fa9d7d4..02cee0d275 100644
--- a/library/ui/src/main/res/values-is/strings.xml
+++ b/library/ui/src/main/res/values-is/strings.xml
@@ -12,7 +12,6 @@
Endurtaka allt
Stokka
Allur skjárinn
- Niðurhal í bið
Sækir
Niðurhali lokið
Niðurhal mistókst
diff --git a/library/ui/src/main/res/values-it/strings.xml b/library/ui/src/main/res/values-it/strings.xml
index 9d84c760d1..9719029c12 100644
--- a/library/ui/src/main/res/values-it/strings.xml
+++ b/library/ui/src/main/res/values-it/strings.xml
@@ -12,7 +12,6 @@
Ripeti tutto
Riproduzione casuale
Modalità a schermo intero
- Download aggiunto alla coda
Download
Download completato
Download non riuscito
diff --git a/library/ui/src/main/res/values-iw/strings.xml b/library/ui/src/main/res/values-iw/strings.xml
index 5e08c74969..fb5eea4d9c 100644
--- a/library/ui/src/main/res/values-iw/strings.xml
+++ b/library/ui/src/main/res/values-iw/strings.xml
@@ -12,7 +12,6 @@
חזור על הכול
ערבוב
מצב מסך מלא
- ההורדה עדיין לא התחילה
מתבצעת הורדה
ההורדה הושלמה
ההורדה לא הושלמה
diff --git a/library/ui/src/main/res/values-ja/strings.xml b/library/ui/src/main/res/values-ja/strings.xml
index ae1578204e..678c042e25 100644
--- a/library/ui/src/main/res/values-ja/strings.xml
+++ b/library/ui/src/main/res/values-ja/strings.xml
@@ -12,7 +12,6 @@
全曲をリピート
シャッフル
全画面モード
- ダウンロードを待機しています
ダウンロードしています
ダウンロードが完了しました
ダウンロードに失敗しました
diff --git a/library/ui/src/main/res/values-ka/strings.xml b/library/ui/src/main/res/values-ka/strings.xml
index 772137785f..b04e660d52 100644
--- a/library/ui/src/main/res/values-ka/strings.xml
+++ b/library/ui/src/main/res/values-ka/strings.xml
@@ -12,7 +12,6 @@
ყველას გამეორება
არეულად დაკვრა
სრულეკრანიანი რეჟიმი
- ჩამოტვირთვა რიგს ელოდება
მიმდინარეობს ჩამოტვირთვა
ჩამოტვირთვა დასრულდა
ჩამოტვირთვა ვერ მოხერხდა
diff --git a/library/ui/src/main/res/values-kk/strings.xml b/library/ui/src/main/res/values-kk/strings.xml
index 62958a6315..f66e4ede58 100644
--- a/library/ui/src/main/res/values-kk/strings.xml
+++ b/library/ui/src/main/res/values-kk/strings.xml
@@ -12,7 +12,6 @@
Барлығын қайталау
Араластыру
Толық экран режимі
- Жүктеп алу кезегіне қойылды
Жүктеп алынуда
Жүктеп алынды
Жүктеп алынбады
diff --git a/library/ui/src/main/res/values-km/strings.xml b/library/ui/src/main/res/values-km/strings.xml
index 8e0360a1d7..72ddcb4c57 100644
--- a/library/ui/src/main/res/values-km/strings.xml
+++ b/library/ui/src/main/res/values-km/strings.xml
@@ -12,7 +12,6 @@
លេងឡើងវិញទាំងអស់
ច្របល់
មុខងារពេញអេក្រង់
- បានដាក់ការទាញយកក្នុងជួរ
កំពុងទាញយក
បានបញ្ចប់ការទាញយក
មិនអាចទាញយកបានទេ
diff --git a/library/ui/src/main/res/values-kn/strings.xml b/library/ui/src/main/res/values-kn/strings.xml
index ff3d29450a..5507d8ecff 100644
--- a/library/ui/src/main/res/values-kn/strings.xml
+++ b/library/ui/src/main/res/values-kn/strings.xml
@@ -12,7 +12,6 @@
ಎಲ್ಲವನ್ನು ಪುನರಾವರ್ತಿಸಿ
ಶಫಲ್
ಪೂರ್ಣ ಪರದೆ ಮೋಡ್
- ಡೌನ್ಲೋಡ್ ಸರದಿಯಲ್ಲಿದೆ
ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ
ಡೌನ್ಲೋಡ್ ಪೂರ್ಣಗೊಂಡಿದೆ
ಡೌನ್ಲೋಡ್ ವಿಫಲಗೊಂಡಿದೆ
diff --git a/library/ui/src/main/res/values-ko/strings.xml b/library/ui/src/main/res/values-ko/strings.xml
index 21e2bece31..a9abec2e7a 100644
--- a/library/ui/src/main/res/values-ko/strings.xml
+++ b/library/ui/src/main/res/values-ko/strings.xml
@@ -12,7 +12,6 @@
모두 반복
셔플
전체화면 모드
- 다운로드 대기 중
다운로드하는 중
다운로드 완료
다운로드 실패
diff --git a/library/ui/src/main/res/values-ky/strings.xml b/library/ui/src/main/res/values-ky/strings.xml
index 0582cce53c..93bd751893 100644
--- a/library/ui/src/main/res/values-ky/strings.xml
+++ b/library/ui/src/main/res/values-ky/strings.xml
@@ -12,7 +12,6 @@
Баарын кайталоо
Аралаштыруу
Толук экран режими
- Жүктөп алуу кезекке коюлду
Жүктөлүп алынууда
Жүктөп алуу аяктады
Жүктөлүп алынбай калды
diff --git a/library/ui/src/main/res/values-lo/strings.xml b/library/ui/src/main/res/values-lo/strings.xml
index ef888ab7f0..a72cefcc8e 100644
--- a/library/ui/src/main/res/values-lo/strings.xml
+++ b/library/ui/src/main/res/values-lo/strings.xml
@@ -12,7 +12,6 @@
ຫຼິ້ນຊ້ຳທັງໝົດ
ຫຼີ້ນແບບສຸ່ມ
ໂໝດເຕັມຈໍ
- ຈັດຄິວດາວໂຫລດໄວ້ແລ້ວ
ກຳລັງດາວໂຫລດ
ດາວໂຫລດສຳເລັດແລ້ວ
ດາວໂຫຼດບໍ່ສຳເລັດ
diff --git a/library/ui/src/main/res/values-lt/strings.xml b/library/ui/src/main/res/values-lt/strings.xml
index e756bd1019..3593a8080e 100644
--- a/library/ui/src/main/res/values-lt/strings.xml
+++ b/library/ui/src/main/res/values-lt/strings.xml
@@ -12,7 +12,6 @@
Kartoti viską
Maišyti
Viso ekrano režimas
- Atsisiunč. elem. laukia eilėje
Atsisiunčiama
Atsisiuntimo procesas baigtas
Nepavyko atsisiųsti
diff --git a/library/ui/src/main/res/values-lv/strings.xml b/library/ui/src/main/res/values-lv/strings.xml
index e330620e8b..e90977913d 100644
--- a/library/ui/src/main/res/values-lv/strings.xml
+++ b/library/ui/src/main/res/values-lv/strings.xml
@@ -12,7 +12,6 @@
Atkārtot visu
Atskaņot jauktā secībā
Pilnekrāna režīms
- Lejupielāde gaida rindā
Notiek lejupielāde
Lejupielāde ir pabeigta
Lejupielāde neizdevās
diff --git a/library/ui/src/main/res/values-mk/strings.xml b/library/ui/src/main/res/values-mk/strings.xml
index a014e1c0d1..b89c516ffa 100644
--- a/library/ui/src/main/res/values-mk/strings.xml
+++ b/library/ui/src/main/res/values-mk/strings.xml
@@ -12,7 +12,6 @@
Повтори ги сите
Измешај
Режим на цел екран
- Преземањето чека на ред
Се презема
Преземањето заврши
Неуспешно преземање
diff --git a/library/ui/src/main/res/values-ml/strings.xml b/library/ui/src/main/res/values-ml/strings.xml
index 37ea2be5e6..4eef4bb1d2 100644
--- a/library/ui/src/main/res/values-ml/strings.xml
+++ b/library/ui/src/main/res/values-ml/strings.xml
@@ -12,7 +12,6 @@
എല്ലാം ആവർത്തിക്കുക
ഇടകലര്ത്തുക
പൂർണ്ണ സ്ക്രീൻ മോഡ്
- ഡൗൺലോഡ് ക്യൂവിലാണ്
ഡൗൺലോഡ് ചെയ്യുന്നു
ഡൗൺലോഡ് പൂർത്തിയായി
ഡൗൺലോഡ് പരാജയപ്പെട്ടു
diff --git a/library/ui/src/main/res/values-mn/strings.xml b/library/ui/src/main/res/values-mn/strings.xml
index 883489b53c..22f7c0c286 100644
--- a/library/ui/src/main/res/values-mn/strings.xml
+++ b/library/ui/src/main/res/values-mn/strings.xml
@@ -12,7 +12,6 @@
Бүгдийг нь дахин тоглуулах
Холих
Бүтэн дэлгэцийн горим
- Татан авалтыг жагсаасан
Татаж байна
Татаж дууссан
Татаж чадсангүй
diff --git a/library/ui/src/main/res/values-mr/strings.xml b/library/ui/src/main/res/values-mr/strings.xml
index ed9e44bbce..7e661b67ab 100644
--- a/library/ui/src/main/res/values-mr/strings.xml
+++ b/library/ui/src/main/res/values-mr/strings.xml
@@ -12,7 +12,6 @@
सर्व रीपीट करा
शफल करा
पूर्ण स्क्रीन मोड
- रांगेत लावलेले डाउनलोड करा
डाउनलोड होत आहे
डाउनलोड पूर्ण झाले
डाउनलोड अयशस्वी झाले
diff --git a/library/ui/src/main/res/values-ms/strings.xml b/library/ui/src/main/res/values-ms/strings.xml
index aedb67fe92..6bc72513cc 100644
--- a/library/ui/src/main/res/values-ms/strings.xml
+++ b/library/ui/src/main/res/values-ms/strings.xml
@@ -12,7 +12,6 @@
Ulang semua
Rombak
Mod skrin penuh
- Muat turun dibaris gilir
Memuat turun
Muat turun selesai
Muat turun gagal
diff --git a/library/ui/src/main/res/values-my/strings.xml b/library/ui/src/main/res/values-my/strings.xml
index fe509be395..d49258e90d 100644
--- a/library/ui/src/main/res/values-my/strings.xml
+++ b/library/ui/src/main/res/values-my/strings.xml
@@ -12,7 +12,6 @@
အားလုံး ပြန်ကျော့ရန်
ရောသမမွှေ
မျက်နှာပြင်အပြည့် မုဒ်
- ဒေါင်းလုဒ်လုပ်ရန် စီထားသည်
ဒေါင်းလုဒ်လုပ်နေသည်
ဒေါင်းလုဒ်လုပ်ပြီးပါပြီ
ဒေါင်းလုဒ်လုပ်၍ မရပါ
diff --git a/library/ui/src/main/res/values-nb/strings.xml b/library/ui/src/main/res/values-nb/strings.xml
index 267a82994e..e140fa4b94 100644
--- a/library/ui/src/main/res/values-nb/strings.xml
+++ b/library/ui/src/main/res/values-nb/strings.xml
@@ -12,7 +12,6 @@
Gjenta alle
Tilfeldig rekkefølge
Fullskjermmodus
- Nedlasting står i kø
Laster ned
Nedlastingen er fullført
Nedlastingen mislyktes
diff --git a/library/ui/src/main/res/values-ne/strings.xml b/library/ui/src/main/res/values-ne/strings.xml
index ac3d71d356..292e3ad362 100644
--- a/library/ui/src/main/res/values-ne/strings.xml
+++ b/library/ui/src/main/res/values-ne/strings.xml
@@ -12,7 +12,6 @@
सबै दोहोर्याउनुहोस्
मिसाउनुहोस्
पूर्ण स्क्रिन मोड
- डाउनलोडलाई लाइनमा राखियो
डाउनलोड गरिँदै छ
डाउनलोड सम्पन्न भयो
डाउनलोड गर्न सकिएन
diff --git a/library/ui/src/main/res/values-nl/strings.xml b/library/ui/src/main/res/values-nl/strings.xml
index 70bda2fdcc..20a5089729 100644
--- a/library/ui/src/main/res/values-nl/strings.xml
+++ b/library/ui/src/main/res/values-nl/strings.xml
@@ -12,7 +12,6 @@
Alles herhalen
Shuffle
Modus \'Volledig scherm\'
- Download in de wachtrij
Downloaden
Downloaden voltooid
Downloaden mislukt
diff --git a/library/ui/src/main/res/values-pa/strings.xml b/library/ui/src/main/res/values-pa/strings.xml
index 59affc3aa9..7a95d0b26a 100644
--- a/library/ui/src/main/res/values-pa/strings.xml
+++ b/library/ui/src/main/res/values-pa/strings.xml
@@ -12,7 +12,6 @@
ਸਾਰਿਆਂ ਨੂੰ ਦੁਹਰਾਓ
ਬੇਤਰਤੀਬ ਕਰੋ
ਪੂਰੀ-ਸਕ੍ਰੀਨ ਮੋਡ
- ਡਾਊਨਲੋਡ ਕਤਾਰਬੱਧ ਕੀਤਾ ਗਿਆ
ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ
ਡਾਊਨਲੋਡ ਮੁਕੰਮਲ ਹੋਇਆ
ਡਾਊਨਲੋਡ ਅਸਫਲ ਰਿਹਾ
diff --git a/library/ui/src/main/res/values-pl/strings.xml b/library/ui/src/main/res/values-pl/strings.xml
index ef341f88e4..6beca2d401 100644
--- a/library/ui/src/main/res/values-pl/strings.xml
+++ b/library/ui/src/main/res/values-pl/strings.xml
@@ -12,7 +12,6 @@
Powtórz wszystkie
Odtwarzanie losowe
Tryb pełnoekranowy
- W kolejce pobierania
Pobieranie
Zakończono pobieranie
Nie udało się pobrać
diff --git a/library/ui/src/main/res/values-pt-rPT/strings.xml b/library/ui/src/main/res/values-pt-rPT/strings.xml
index 06fc3cc5eb..0251ce5bb6 100644
--- a/library/ui/src/main/res/values-pt-rPT/strings.xml
+++ b/library/ui/src/main/res/values-pt-rPT/strings.xml
@@ -12,7 +12,6 @@
Repetir tudo
Reproduzir aleatoriamente
Modo de ecrã inteiro
- Transfer. em fila de espera
A transferir…
Transferência concluída
Falha na transferência
diff --git a/library/ui/src/main/res/values-pt/strings.xml b/library/ui/src/main/res/values-pt/strings.xml
index 9c25f7de5f..af55905723 100644
--- a/library/ui/src/main/res/values-pt/strings.xml
+++ b/library/ui/src/main/res/values-pt/strings.xml
@@ -12,7 +12,6 @@
Repetir tudo
Aleatório
Modo de tela cheia
- Item na fila de download
Fazendo download
Download concluído
Falha no download
diff --git a/library/ui/src/main/res/values-ro/strings.xml b/library/ui/src/main/res/values-ro/strings.xml
index 4541a6c6e8..144049d231 100644
--- a/library/ui/src/main/res/values-ro/strings.xml
+++ b/library/ui/src/main/res/values-ro/strings.xml
@@ -12,7 +12,6 @@
Repetați-le pe toate
Redați aleatoriu
Modul Ecran complet
- Descărcarea este în lista de așteptare
Se descarcă
Descărcarea a fost finalizată
Descărcarea nu a reușit
diff --git a/library/ui/src/main/res/values-ru/strings.xml b/library/ui/src/main/res/values-ru/strings.xml
index 4e030ef5a4..53a91a08c5 100644
--- a/library/ui/src/main/res/values-ru/strings.xml
+++ b/library/ui/src/main/res/values-ru/strings.xml
@@ -12,7 +12,6 @@
Повторять все
Перемешать
Полноэкранный режим
- В очереди на скачивание
Загрузка файлов
Скачивание завершено
Ошибка скачивания
diff --git a/library/ui/src/main/res/values-si/strings.xml b/library/ui/src/main/res/values-si/strings.xml
index 0ccc0b9d26..0d5e334b6c 100644
--- a/library/ui/src/main/res/values-si/strings.xml
+++ b/library/ui/src/main/res/values-si/strings.xml
@@ -12,7 +12,6 @@
සියල්ල පුනරාවර්තනය කරන්න
කලවම් කරන්න
සම්පූර්ණ තිර ප්රකාරය
- බාගැනීම පේළියට තබන ලදී
බාගනිමින්
බාගැනීම සම්පූර්ණ කරන ලදී
බාගැනීම අසමත් විය
diff --git a/library/ui/src/main/res/values-sk/strings.xml b/library/ui/src/main/res/values-sk/strings.xml
index c827282b95..1ae27b1e4a 100644
--- a/library/ui/src/main/res/values-sk/strings.xml
+++ b/library/ui/src/main/res/values-sk/strings.xml
@@ -12,7 +12,6 @@
Opakovať všetko
Náhodne prehrávať
Režim celej obrazovky
- Sťahovanie je v poradí
Sťahuje sa
Sťahovanie bolo dokončené
Nepodarilo sa stiahnuť
diff --git a/library/ui/src/main/res/values-sl/strings.xml b/library/ui/src/main/res/values-sl/strings.xml
index c26a91826e..0a3a013ee0 100644
--- a/library/ui/src/main/res/values-sl/strings.xml
+++ b/library/ui/src/main/res/values-sl/strings.xml
@@ -12,7 +12,6 @@
Ponavljanje vseh
Naključno predvajanje
Celozaslonski način
- Prenos je v čakalni vrsti
Prenašanje
Prenos je končan
Prenos ni uspel
diff --git a/library/ui/src/main/res/values-sq/strings.xml b/library/ui/src/main/res/values-sq/strings.xml
index 56868ce503..0611398306 100644
--- a/library/ui/src/main/res/values-sq/strings.xml
+++ b/library/ui/src/main/res/values-sq/strings.xml
@@ -12,7 +12,6 @@
Përsërit të gjitha
Përziej
Modaliteti me ekran të plotë
- Shkarkimi u vendos në radhë
Po shkarkohet
Shkarkimi përfundoi
Shkarkimi dështoi
diff --git a/library/ui/src/main/res/values-sr/strings.xml b/library/ui/src/main/res/values-sr/strings.xml
index 8ba19a51a6..9e7b3918d5 100644
--- a/library/ui/src/main/res/values-sr/strings.xml
+++ b/library/ui/src/main/res/values-sr/strings.xml
@@ -12,7 +12,6 @@
Понови све
Пусти насумично
Режим целог екрана
- Преузимање је на чекању
Преузимање
Преузимање је завршено
Преузимање није успело
diff --git a/library/ui/src/main/res/values-sv/strings.xml b/library/ui/src/main/res/values-sv/strings.xml
index 6840738ba1..e7bcc05f6d 100644
--- a/library/ui/src/main/res/values-sv/strings.xml
+++ b/library/ui/src/main/res/values-sv/strings.xml
@@ -12,7 +12,6 @@
Upprepa alla
Blanda spår
Helskärmsläge
- Nedladdningen har köplacerats
Laddar ned
Nedladdningen är klar
Nedladdningen misslyckades
diff --git a/library/ui/src/main/res/values-sw/strings.xml b/library/ui/src/main/res/values-sw/strings.xml
index 5db4ee5995..5ee3613e8b 100644
--- a/library/ui/src/main/res/values-sw/strings.xml
+++ b/library/ui/src/main/res/values-sw/strings.xml
@@ -12,7 +12,6 @@
Rudia zote
Changanya
Hali ya skrini nzima
- Inasubiri kupakuliwa
Inapakua
Imepakuliwa
Imeshindwa kupakua
diff --git a/library/ui/src/main/res/values-ta/strings.xml b/library/ui/src/main/res/values-ta/strings.xml
index 65f02a38a2..7fa7a1e298 100644
--- a/library/ui/src/main/res/values-ta/strings.xml
+++ b/library/ui/src/main/res/values-ta/strings.xml
@@ -12,7 +12,6 @@
அனைத்தையும் மீண்டும் இயக்கு
கலைத்துப் போடு
முழுத்திரைப் பயன்முறை
- பதிவிறக்கம், வரிசையில் உள்ளது
பதிவிறக்கப்படுகிறது
பதிவிறக்கப்பட்டது
பதிவிறக்க முடியவில்லை
diff --git a/library/ui/src/main/res/values-te/strings.xml b/library/ui/src/main/res/values-te/strings.xml
index d27afe9ce7..038ac32afa 100644
--- a/library/ui/src/main/res/values-te/strings.xml
+++ b/library/ui/src/main/res/values-te/strings.xml
@@ -12,7 +12,6 @@
అన్నింటినీ పునరావృతం చేయండి
షఫుల్ చేయండి
పూర్తి స్క్రీన్ మోడ్
- డౌన్లోడ్ క్రమవరుసలో ఉంది
డౌన్లోడ్ చేస్తోంది
డౌన్లోడ్ పూర్తయింది
డౌన్లోడ్ విఫలమైంది
diff --git a/library/ui/src/main/res/values-th/strings.xml b/library/ui/src/main/res/values-th/strings.xml
index bb5edb211c..f472433913 100644
--- a/library/ui/src/main/res/values-th/strings.xml
+++ b/library/ui/src/main/res/values-th/strings.xml
@@ -12,7 +12,6 @@
เล่นซ้ำทั้งหมด
สุ่ม
โหมดเต็มหน้าจอ
- การดาวน์โหลดอยู่ในคิว
กำลังดาวน์โหลด
การดาวน์โหลดเสร็จสมบูรณ์
การดาวน์โหลดล้มเหลว
diff --git a/library/ui/src/main/res/values-tl/strings.xml b/library/ui/src/main/res/values-tl/strings.xml
index 4807026e05..31779c8172 100644
--- a/library/ui/src/main/res/values-tl/strings.xml
+++ b/library/ui/src/main/res/values-tl/strings.xml
@@ -12,7 +12,6 @@
Ulitin lahat
I-shuffle
Fullscreen mode
- Naka-queue ang download
Nagda-download
Tapos na ang pag-download
Hindi na-download
diff --git a/library/ui/src/main/res/values-tr/strings.xml b/library/ui/src/main/res/values-tr/strings.xml
index a8a409676f..66f7870839 100644
--- a/library/ui/src/main/res/values-tr/strings.xml
+++ b/library/ui/src/main/res/values-tr/strings.xml
@@ -12,7 +12,6 @@
Tümünü tekrarla
Karıştır
Tam ekran modu
- İndirme işlemi sıraya alındı
İndiriliyor
İndirme işlemi tamamlandı
İndirilemedi
diff --git a/library/ui/src/main/res/values-uk/strings.xml b/library/ui/src/main/res/values-uk/strings.xml
index 44190c4dde..a73379572d 100644
--- a/library/ui/src/main/res/values-uk/strings.xml
+++ b/library/ui/src/main/res/values-uk/strings.xml
@@ -12,7 +12,6 @@
Повторити всі
Перемішати
Повноекранний режим
- Завантаження розміщено в черзі
Завантажується
Завантаження завершено
Не вдалося завантажити
diff --git a/library/ui/src/main/res/values-ur/strings.xml b/library/ui/src/main/res/values-ur/strings.xml
index 26e1b0e060..99451aa622 100644
--- a/library/ui/src/main/res/values-ur/strings.xml
+++ b/library/ui/src/main/res/values-ur/strings.xml
@@ -12,7 +12,6 @@
سبھی کو دہرائیں
شفل کریں
پوری اسکرین والی وضع
- ڈاؤن لوڈ قطار بند ہے
ڈاؤن لوڈ کیا جا رہا ہے
ڈاؤن لوڈ مکمل ہو گیا
ڈاؤن لوڈ ناکام ہو گیا
diff --git a/library/ui/src/main/res/values-uz/strings.xml b/library/ui/src/main/res/values-uz/strings.xml
index 26d37380d7..fbc30c1de2 100644
--- a/library/ui/src/main/res/values-uz/strings.xml
+++ b/library/ui/src/main/res/values-uz/strings.xml
@@ -12,7 +12,6 @@
Hammasini takrorlash
Aralash
Butun ekran rejimi
- Yuklab olish navbatga olindi
Yuklab olinmoqda
Yuklab olindi
Yuklab olinmadi
diff --git a/library/ui/src/main/res/values-vi/strings.xml b/library/ui/src/main/res/values-vi/strings.xml
index 2754eec898..c9cc4d910a 100644
--- a/library/ui/src/main/res/values-vi/strings.xml
+++ b/library/ui/src/main/res/values-vi/strings.xml
@@ -12,7 +12,6 @@
Lặp lại tất cả
Phát ngẫu nhiên
Chế độ toàn màn hình
- Đã đưa tài nguyên đã tải xuống vào hàng đợi
Đang tải xuống
Đã hoàn tất tải xuống
Không tải xuống được
diff --git a/library/ui/src/main/res/values-zh-rCN/strings.xml b/library/ui/src/main/res/values-zh-rCN/strings.xml
index cb8beae7b9..84868e8746 100644
--- a/library/ui/src/main/res/values-zh-rCN/strings.xml
+++ b/library/ui/src/main/res/values-zh-rCN/strings.xml
@@ -12,7 +12,6 @@
全部重复播放
随机播放
全屏模式
- 已加入待下载队列
正在下载
下载完毕
下载失败
diff --git a/library/ui/src/main/res/values-zh-rHK/strings.xml b/library/ui/src/main/res/values-zh-rHK/strings.xml
index a61c20a847..8cc210b1ef 100644
--- a/library/ui/src/main/res/values-zh-rHK/strings.xml
+++ b/library/ui/src/main/res/values-zh-rHK/strings.xml
@@ -12,7 +12,6 @@
全部重複播放
隨機播放
全螢幕模式
- 已加入下載列
正在下載
下載完畢
下載失敗
diff --git a/library/ui/src/main/res/values-zh-rTW/strings.xml b/library/ui/src/main/res/values-zh-rTW/strings.xml
index cd6a8c1703..a30fea1c04 100644
--- a/library/ui/src/main/res/values-zh-rTW/strings.xml
+++ b/library/ui/src/main/res/values-zh-rTW/strings.xml
@@ -12,7 +12,6 @@
重複播放所有項目
隨機播放
全螢幕模式
- 已排入下載佇列
下載中
下載完成
無法下載
diff --git a/library/ui/src/main/res/values-zu/strings.xml b/library/ui/src/main/res/values-zu/strings.xml
index 19bfab08fc..de9a39d3bd 100644
--- a/library/ui/src/main/res/values-zu/strings.xml
+++ b/library/ui/src/main/res/values-zu/strings.xml
@@ -12,7 +12,6 @@
Phinda konke
Shova
Imodi yesikrini esigcwele
- Ukulanda kukulayini
Iyalanda
Ukulanda kuqedile
Ukulanda kuhlulekile
diff --git a/library/ui/src/main/res/values/strings.xml b/library/ui/src/main/res/values/strings.xml
index c5967a260a..2675445d7f 100644
--- a/library/ui/src/main/res/values/strings.xml
+++ b/library/ui/src/main/res/values/strings.xml
@@ -38,8 +38,6 @@
Shuffle
Fullscreen mode
-
- Download queued
Downloading