package com.google.android.exoplayer2.offline; import android.app.Notification; 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 com.google.android.exoplayer2.offline.DownloadManager; import com.google.android.exoplayer2.offline.DownloadService; import com.google.android.exoplayer2.scheduler.Requirements; import com.google.android.exoplayer2.scheduler.Scheduler; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.NotificationUtil; import com.google.android.exoplayer2.util.Util; import java.util.HashMap; import java.util.List; import org.checkerframework.checker.nullness.qual.RequiresNonNull; /* loaded from: classes2.dex */ public abstract class DownloadService extends Service { public static final String ACTION_ADD_DOWNLOAD = "com.google.android.exoplayer.downloadService.action.ADD_DOWNLOAD"; public static final String ACTION_INIT = "com.google.android.exoplayer.downloadService.action.INIT"; public static final String ACTION_PAUSE_DOWNLOADS = "com.google.android.exoplayer.downloadService.action.PAUSE_DOWNLOADS"; public static final String ACTION_REMOVE_ALL_DOWNLOADS = "com.google.android.exoplayer.downloadService.action.REMOVE_ALL_DOWNLOADS"; public static final String ACTION_REMOVE_DOWNLOAD = "com.google.android.exoplayer.downloadService.action.REMOVE_DOWNLOAD"; private static final String ACTION_RESTART = "com.google.android.exoplayer.downloadService.action.RESTART"; public static final String ACTION_RESUME_DOWNLOADS = "com.google.android.exoplayer.downloadService.action.RESUME_DOWNLOADS"; public static final String ACTION_SET_REQUIREMENTS = "com.google.android.exoplayer.downloadService.action.SET_REQUIREMENTS"; public static final String ACTION_SET_STOP_REASON = "com.google.android.exoplayer.downloadService.action.SET_STOP_REASON"; public static final long DEFAULT_FOREGROUND_NOTIFICATION_UPDATE_INTERVAL = 1000; public static final int FOREGROUND_NOTIFICATION_ID_NONE = 0; public static final String KEY_CONTENT_ID = "content_id"; public static final String KEY_DOWNLOAD_REQUEST = "download_request"; public static final String KEY_FOREGROUND = "foreground"; public static final String KEY_REQUIREMENTS = "requirements"; public static final String KEY_STOP_REASON = "stop_reason"; private static final String TAG = "DownloadService"; private static final HashMap, DownloadManagerHelper> downloadManagerHelpers = new HashMap<>(); private final int channelDescriptionResourceId; private final String channelId; private final int channelNameResourceId; private DownloadManagerHelper downloadManagerHelper; private final ForegroundNotificationUpdater foregroundNotificationUpdater; private boolean isDestroyed; private boolean isStopped; private int lastStartId; private boolean startedInForeground; private boolean taskRemoved; /* JADX INFO: Access modifiers changed from: private */ public boolean isStopped() { return this.isStopped; } /* JADX INFO: Access modifiers changed from: private */ public static boolean needsStartedService(int i) { return i == 2 || i == 5 || i == 7; } protected abstract DownloadManager getDownloadManager(); protected abstract Notification getForegroundNotification(List list, int i); protected abstract Scheduler getScheduler(); @Override // android.app.Service public void onTaskRemoved(Intent intent) { this.taskRemoved = true; } protected DownloadService(int i) { this(i, 1000L); } protected DownloadService(int i, long j) { this(i, j, null, 0, 0); } @Deprecated protected DownloadService(int i, long j, String str, int i2) { this(i, j, str, i2, 0); } protected DownloadService(int i, long j, String str, int i2, int i3) { if (i == 0) { this.foregroundNotificationUpdater = null; this.channelId = null; this.channelNameResourceId = 0; this.channelDescriptionResourceId = 0; return; } this.foregroundNotificationUpdater = new ForegroundNotificationUpdater(i, j); this.channelId = str; this.channelNameResourceId = i2; this.channelDescriptionResourceId = i3; } public static Intent buildAddDownloadIntent(Context context, Class cls, DownloadRequest downloadRequest, boolean z) { return buildAddDownloadIntent(context, cls, downloadRequest, 0, z); } public static Intent buildAddDownloadIntent(Context context, Class cls, DownloadRequest downloadRequest, int i, boolean z) { return getIntent(context, cls, ACTION_ADD_DOWNLOAD, z).putExtra("download_request", downloadRequest).putExtra("stop_reason", i); } public static Intent buildRemoveDownloadIntent(Context context, Class cls, String str, boolean z) { return getIntent(context, cls, ACTION_REMOVE_DOWNLOAD, z).putExtra("content_id", str); } public static Intent buildRemoveAllDownloadsIntent(Context context, Class cls, boolean z) { return getIntent(context, cls, ACTION_REMOVE_ALL_DOWNLOADS, z); } public static Intent buildResumeDownloadsIntent(Context context, Class cls, boolean z) { return getIntent(context, cls, ACTION_RESUME_DOWNLOADS, z); } public static Intent buildPauseDownloadsIntent(Context context, Class cls, boolean z) { return getIntent(context, cls, ACTION_PAUSE_DOWNLOADS, z); } public static Intent buildSetStopReasonIntent(Context context, Class cls, String str, int i, boolean z) { return getIntent(context, cls, ACTION_SET_STOP_REASON, z).putExtra("content_id", str).putExtra("stop_reason", i); } public static Intent buildSetRequirementsIntent(Context context, Class cls, Requirements requirements, boolean z) { return getIntent(context, cls, ACTION_SET_REQUIREMENTS, z).putExtra("requirements", requirements); } public static void sendAddDownload(Context context, Class cls, DownloadRequest downloadRequest, boolean z) { startService(context, buildAddDownloadIntent(context, cls, downloadRequest, z), z); } public static void sendAddDownload(Context context, Class cls, DownloadRequest downloadRequest, int i, boolean z) { startService(context, buildAddDownloadIntent(context, cls, downloadRequest, i, z), z); } public static void sendRemoveDownload(Context context, Class cls, String str, boolean z) { startService(context, buildRemoveDownloadIntent(context, cls, str, z), z); } public static void sendRemoveAllDownloads(Context context, Class cls, boolean z) { startService(context, buildRemoveAllDownloadsIntent(context, cls, z), z); } public static void sendResumeDownloads(Context context, Class cls, boolean z) { startService(context, buildResumeDownloadsIntent(context, cls, z), z); } public static void sendPauseDownloads(Context context, Class cls, boolean z) { startService(context, buildPauseDownloadsIntent(context, cls, z), z); } public static void sendSetStopReason(Context context, Class cls, String str, int i, boolean z) { startService(context, buildSetStopReasonIntent(context, cls, str, i, z), z); } public static void sendSetRequirements(Context context, Class cls, Requirements requirements, boolean z) { startService(context, buildSetRequirementsIntent(context, cls, requirements, z), z); } public static void start(Context context, Class cls) { context.startService(getIntent(context, cls, ACTION_INIT)); } public static void startForeground(Context context, Class cls) { Util.startForegroundService(context, getIntent(context, cls, ACTION_INIT, true)); } public static void clearDownloadManagerHelpers() { downloadManagerHelpers.clear(); } /* JADX WARN: Multi-variable type inference failed */ @Override // android.app.Service public void onCreate() { String str = this.channelId; if (str != null) { NotificationUtil.createNotificationChannel(this, str, this.channelNameResourceId, this.channelDescriptionResourceId, 2); } Class cls = getClass(); HashMap, DownloadManagerHelper> hashMap = downloadManagerHelpers; DownloadManagerHelper downloadManagerHelper = (DownloadManagerHelper) hashMap.get(cls); if (downloadManagerHelper == null) { boolean z = this.foregroundNotificationUpdater != null; Scheduler scheduler = (z && (Util.SDK_INT < 31)) ? getScheduler() : null; DownloadManager downloadManager = getDownloadManager(); downloadManager.resumeDownloads(); downloadManagerHelper = new DownloadManagerHelper(getApplicationContext(), downloadManager, z, scheduler, cls); hashMap.put(cls, downloadManagerHelper); } this.downloadManagerHelper = downloadManagerHelper; downloadManagerHelper.attachService(this); } @Override // android.app.Service public int onStartCommand(Intent intent, int i, int i2) { String str; String str2; ForegroundNotificationUpdater foregroundNotificationUpdater; this.lastStartId = i2; this.taskRemoved = false; if (intent != null) { str = intent.getAction(); str2 = intent.getStringExtra("content_id"); this.startedInForeground |= intent.getBooleanExtra("foreground", false) || ACTION_RESTART.equals(str); } else { str = null; str2 = null; } if (str == null) { str = ACTION_INIT; } DownloadManager downloadManager = ((DownloadManagerHelper) Assertions.checkNotNull(this.downloadManagerHelper)).downloadManager; str.hashCode(); char c = 65535; switch (str.hashCode()) { case -1931239035: if (str.equals(ACTION_ADD_DOWNLOAD)) { c = 0; break; } break; case -932047176: if (str.equals(ACTION_RESUME_DOWNLOADS)) { c = 1; break; } break; case -871181424: if (str.equals(ACTION_RESTART)) { c = 2; break; } break; case -650547439: if (str.equals(ACTION_REMOVE_ALL_DOWNLOADS)) { c = 3; break; } break; case -119057172: if (str.equals(ACTION_SET_REQUIREMENTS)) { c = 4; break; } break; case 191112771: if (str.equals(ACTION_PAUSE_DOWNLOADS)) { c = 5; break; } break; case 671523141: if (str.equals(ACTION_SET_STOP_REASON)) { c = 6; break; } break; case 1015676687: if (str.equals(ACTION_INIT)) { c = 7; break; } break; case 1547520644: if (str.equals(ACTION_REMOVE_DOWNLOAD)) { c = '\b'; break; } break; } switch (c) { case 0: DownloadRequest downloadRequest = (DownloadRequest) ((Intent) Assertions.checkNotNull(intent)).getParcelableExtra("download_request"); if (downloadRequest == null) { Log.e(TAG, "Ignored ADD_DOWNLOAD: Missing download_request extra"); break; } else { downloadManager.addDownload(downloadRequest, intent.getIntExtra("stop_reason", 0)); break; } case 1: downloadManager.resumeDownloads(); break; case 2: case 7: break; case 3: downloadManager.removeAllDownloads(); break; case 4: Requirements requirements = (Requirements) ((Intent) Assertions.checkNotNull(intent)).getParcelableExtra("requirements"); if (requirements == null) { Log.e(TAG, "Ignored SET_REQUIREMENTS: Missing requirements extra"); break; } else { downloadManager.setRequirements(requirements); break; } case 5: downloadManager.pauseDownloads(); break; case 6: if (!((Intent) Assertions.checkNotNull(intent)).hasExtra("stop_reason")) { Log.e(TAG, "Ignored SET_STOP_REASON: Missing stop_reason extra"); break; } else { downloadManager.setStopReason(str2, intent.getIntExtra("stop_reason", 0)); break; } case '\b': if (str2 == null) { Log.e(TAG, "Ignored REMOVE_DOWNLOAD: Missing content_id extra"); break; } else { downloadManager.removeDownload(str2); break; } default: Log.e(TAG, "Ignored unrecognized action: " + str); break; } if (Util.SDK_INT >= 26 && this.startedInForeground && (foregroundNotificationUpdater = this.foregroundNotificationUpdater) != null) { foregroundNotificationUpdater.showNotificationIfNotAlready(); } this.isStopped = false; if (downloadManager.isIdle()) { onIdle(); } return 1; } @Override // android.app.Service public void onDestroy() { this.isDestroyed = true; ((DownloadManagerHelper) Assertions.checkNotNull(this.downloadManagerHelper)).detachService(this); ForegroundNotificationUpdater foregroundNotificationUpdater = this.foregroundNotificationUpdater; if (foregroundNotificationUpdater != null) { foregroundNotificationUpdater.stopPeriodicUpdates(); } } @Override // android.app.Service public final IBinder onBind(Intent intent) { throw new UnsupportedOperationException(); } protected final void invalidateForegroundNotification() { ForegroundNotificationUpdater foregroundNotificationUpdater = this.foregroundNotificationUpdater; if (foregroundNotificationUpdater == null || this.isDestroyed) { return; } foregroundNotificationUpdater.invalidate(); } /* JADX INFO: Access modifiers changed from: private */ public void notifyDownloads(List list) { if (this.foregroundNotificationUpdater != null) { for (int i = 0; i < list.size(); i++) { if (needsStartedService(list.get(i).state)) { this.foregroundNotificationUpdater.startPeriodicUpdates(); return; } } } } /* JADX INFO: Access modifiers changed from: private */ public void notifyDownloadChanged(Download download) { if (this.foregroundNotificationUpdater != null) { if (needsStartedService(download.state)) { this.foregroundNotificationUpdater.startPeriodicUpdates(); } else { this.foregroundNotificationUpdater.invalidate(); } } } /* JADX INFO: Access modifiers changed from: private */ public void notifyDownloadRemoved() { ForegroundNotificationUpdater foregroundNotificationUpdater = this.foregroundNotificationUpdater; if (foregroundNotificationUpdater != null) { foregroundNotificationUpdater.invalidate(); } } /* JADX INFO: Access modifiers changed from: private */ public void onIdle() { ForegroundNotificationUpdater foregroundNotificationUpdater = this.foregroundNotificationUpdater; if (foregroundNotificationUpdater != null) { foregroundNotificationUpdater.stopPeriodicUpdates(); } if (((DownloadManagerHelper) Assertions.checkNotNull(this.downloadManagerHelper)).updateScheduler()) { if (Util.SDK_INT < 28 && this.taskRemoved) { stopSelf(); this.isStopped = true; } else { this.isStopped |= stopSelfResult(this.lastStartId); } } } private static Intent getIntent(Context context, Class cls, String str, boolean z) { return getIntent(context, cls, str).putExtra("foreground", z); } /* JADX INFO: Access modifiers changed from: private */ public static Intent getIntent(Context context, Class cls, String str) { return new Intent(context, cls).setAction(str); } private static void startService(Context context, Intent intent, boolean z) { if (z) { Util.startForegroundService(context, intent); } else { context.startService(intent); } } /* JADX INFO: Access modifiers changed from: private */ /* loaded from: classes2.dex */ public final class ForegroundNotificationUpdater { private final Handler handler = new Handler(Looper.getMainLooper()); private boolean notificationDisplayed; private final int notificationId; private boolean periodicUpdatesStarted; private final long updateInterval; public ForegroundNotificationUpdater(int i, long j) { this.notificationId = i; this.updateInterval = j; } public void startPeriodicUpdates() { this.periodicUpdatesStarted = true; update(); } public void stopPeriodicUpdates() { this.periodicUpdatesStarted = false; this.handler.removeCallbacksAndMessages(null); } public void showNotificationIfNotAlready() { if (this.notificationDisplayed) { return; } update(); } public void invalidate() { if (this.notificationDisplayed) { update(); } } /* JADX INFO: Access modifiers changed from: private */ public void update() { DownloadManager downloadManager = ((DownloadManagerHelper) Assertions.checkNotNull(DownloadService.this.downloadManagerHelper)).downloadManager; Notification foregroundNotification = DownloadService.this.getForegroundNotification(downloadManager.getCurrentDownloads(), downloadManager.getNotMetRequirements()); if (!this.notificationDisplayed) { DownloadService.this.startForeground(this.notificationId, foregroundNotification); this.notificationDisplayed = true; } else { ((NotificationManager) DownloadService.this.getSystemService("notification")).notify(this.notificationId, foregroundNotification); } if (this.periodicUpdatesStarted) { this.handler.removeCallbacksAndMessages(null); this.handler.postDelayed(new Runnable() { // from class: com.google.android.exoplayer2.offline.DownloadService$ForegroundNotificationUpdater$$ExternalSyntheticLambda0 @Override // java.lang.Runnable public final void run() { DownloadService.ForegroundNotificationUpdater.this.update(); } }, this.updateInterval); } } } /* JADX INFO: Access modifiers changed from: private */ /* loaded from: classes2.dex */ public static final class DownloadManagerHelper implements DownloadManager.Listener { private final Context context; private final DownloadManager downloadManager; private DownloadService downloadService; private final boolean foregroundAllowed; private Requirements scheduledRequirements; private final Scheduler scheduler; private final Class serviceClass; private DownloadManagerHelper(Context context, DownloadManager downloadManager, boolean z, Scheduler scheduler, Class cls) { this.context = context; this.downloadManager = downloadManager; this.foregroundAllowed = z; this.scheduler = scheduler; this.serviceClass = cls; downloadManager.addListener(this); updateScheduler(); } public void attachService(final DownloadService downloadService) { Assertions.checkState(this.downloadService == null); this.downloadService = downloadService; if (this.downloadManager.isInitialized()) { Util.createHandlerForCurrentOrMainLooper().postAtFrontOfQueue(new Runnable() { // from class: com.google.android.exoplayer2.offline.DownloadService$DownloadManagerHelper$$ExternalSyntheticLambda0 @Override // java.lang.Runnable public final void run() { DownloadService.DownloadManagerHelper.this.m5435x5d17c8bb(downloadService); } }); } } /* JADX INFO: Access modifiers changed from: package-private */ /* renamed from: lambda$attachService$0$com-google-android-exoplayer2-offline-DownloadService$DownloadManagerHelper, reason: not valid java name */ public /* synthetic */ void m5435x5d17c8bb(DownloadService downloadService) { downloadService.notifyDownloads(this.downloadManager.getCurrentDownloads()); } public void detachService(DownloadService downloadService) { Assertions.checkState(this.downloadService == downloadService); this.downloadService = null; } public boolean updateScheduler() { boolean isWaitingForRequirements = this.downloadManager.isWaitingForRequirements(); if (this.scheduler == null) { return !isWaitingForRequirements; } if (!isWaitingForRequirements) { cancelScheduler(); return true; } Requirements requirements = this.downloadManager.getRequirements(); if (!this.scheduler.getSupportedRequirements(requirements).equals(requirements)) { cancelScheduler(); return false; } if (!schedulerNeedsUpdate(requirements)) { return true; } if (this.scheduler.schedule(requirements, this.context.getPackageName(), DownloadService.ACTION_RESTART)) { this.scheduledRequirements = requirements; return true; } Log.w(DownloadService.TAG, "Failed to schedule restart"); cancelScheduler(); return false; } @Override // com.google.android.exoplayer2.offline.DownloadManager.Listener public void onInitialized(DownloadManager downloadManager) { DownloadService downloadService = this.downloadService; if (downloadService != null) { downloadService.notifyDownloads(downloadManager.getCurrentDownloads()); } } @Override // com.google.android.exoplayer2.offline.DownloadManager.Listener public void onDownloadChanged(DownloadManager downloadManager, Download download, Exception exc) { DownloadService downloadService = this.downloadService; if (downloadService != null) { downloadService.notifyDownloadChanged(download); } if (serviceMayNeedRestart() && DownloadService.needsStartedService(download.state)) { Log.w(DownloadService.TAG, "DownloadService wasn't running. Restarting."); restartService(); } } @Override // com.google.android.exoplayer2.offline.DownloadManager.Listener public void onDownloadRemoved(DownloadManager downloadManager, Download download) { DownloadService downloadService = this.downloadService; if (downloadService != null) { downloadService.notifyDownloadRemoved(); } } @Override // com.google.android.exoplayer2.offline.DownloadManager.Listener public final void onIdle(DownloadManager downloadManager) { DownloadService downloadService = this.downloadService; if (downloadService != null) { downloadService.onIdle(); } } @Override // com.google.android.exoplayer2.offline.DownloadManager.Listener public void onRequirementsStateChanged(DownloadManager downloadManager, Requirements requirements, int i) { updateScheduler(); } @Override // com.google.android.exoplayer2.offline.DownloadManager.Listener public void onWaitingForRequirementsChanged(DownloadManager downloadManager, boolean z) { if (z || downloadManager.getDownloadsPaused() || !serviceMayNeedRestart()) { return; } List currentDownloads = downloadManager.getCurrentDownloads(); for (int i = 0; i < currentDownloads.size(); i++) { if (currentDownloads.get(i).state == 0) { restartService(); return; } } } private boolean schedulerNeedsUpdate(Requirements requirements) { return !Util.areEqual(this.scheduledRequirements, requirements); } @RequiresNonNull({"scheduler"}) private void cancelScheduler() { Requirements requirements = new Requirements(0); if (schedulerNeedsUpdate(requirements)) { this.scheduler.cancel(); this.scheduledRequirements = requirements; } } private boolean serviceMayNeedRestart() { DownloadService downloadService = this.downloadService; return downloadService == null || downloadService.isStopped(); } private void restartService() { if (this.foregroundAllowed) { try { Util.startForegroundService(this.context, DownloadService.getIntent(this.context, this.serviceClass, DownloadService.ACTION_RESTART)); return; } catch (IllegalStateException unused) { Log.w(DownloadService.TAG, "Failed to restart (foreground launch restriction)"); return; } } try { this.context.startService(DownloadService.getIntent(this.context, this.serviceClass, DownloadService.ACTION_INIT)); } catch (IllegalStateException unused2) { Log.w(DownloadService.TAG, "Failed to restart (process is idle)"); } } } }