.class public final Landroidx/media3/datasource/cache/SimpleCache; .super Ljava/lang/Object; .source "SimpleCache.java" # interfaces .implements Landroidx/media3/datasource/cache/Cache; # static fields .field private static final SUBDIRECTORY_COUNT:I = 0xa .field private static final TAG:Ljava/lang/String; = "SimpleCache" .field private static final UID_FILE_SUFFIX:Ljava/lang/String; = ".uid" .field private static final lockedCacheDirs:Ljava/util/HashSet; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/HashSet<", "Ljava/io/File;", ">;" } .end annotation .end field # instance fields .field private final cacheDir:Ljava/io/File; .field private final contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .field private final evictor:Landroidx/media3/datasource/cache/CacheEvictor; .field private final fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; .field private initializationException:Landroidx/media3/datasource/cache/Cache$CacheException; .field private final listeners:Ljava/util/HashMap; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/HashMap<", "Ljava/lang/String;", "Ljava/util/ArrayList<", "Landroidx/media3/datasource/cache/Cache$Listener;", ">;>;" } .end annotation .end field .field private final random:Ljava/util/Random; .field private released:Z .field private totalSpace:J .field private final touchCacheSpans:Z .field private uid:J # direct methods .method static constructor ()V .locals 1 .line 64 new-instance v0, Ljava/util/HashSet; invoke-direct {v0}, Ljava/util/HashSet;->()V sput-object v0, Landroidx/media3/datasource/cache/SimpleCache;->lockedCacheDirs:Ljava/util/HashSet; return-void .end method .method public constructor (Ljava/io/File;Landroidx/media3/datasource/cache/CacheEvictor;)V .locals 7 .annotation runtime Ljava/lang/Deprecated; .end annotation const/4 v3, 0x0 const/4 v4, 0x0 const/4 v5, 0x0 const/4 v6, 0x1 move-object v0, p0 move-object v1, p1 move-object v2, p2 .line 141 invoke-direct/range {v0 .. v6}, Landroidx/media3/datasource/cache/SimpleCache;->(Ljava/io/File;Landroidx/media3/datasource/cache/CacheEvictor;Landroidx/media3/database/DatabaseProvider;[BZZ)V return-void .end method .method public constructor (Ljava/io/File;Landroidx/media3/datasource/cache/CacheEvictor;Landroidx/media3/database/DatabaseProvider;)V .locals 7 const/4 v4, 0x0 const/4 v5, 0x0 const/4 v6, 0x0 move-object v0, p0 move-object v1, p1 move-object v2, p2 move-object v3, p3 .line 160 invoke-direct/range {v0 .. v6}, Landroidx/media3/datasource/cache/SimpleCache;->(Ljava/io/File;Landroidx/media3/datasource/cache/CacheEvictor;Landroidx/media3/database/DatabaseProvider;[BZZ)V return-void .end method .method public constructor (Ljava/io/File;Landroidx/media3/datasource/cache/CacheEvictor;Landroidx/media3/database/DatabaseProvider;[BZZ)V .locals 7 .line 195 new-instance v6, Landroidx/media3/datasource/cache/CachedContentIndex; move-object v0, v6 move-object v1, p3 move-object v2, p1 move-object v3, p4 move v4, p5 move v5, p6 invoke-direct/range {v0 .. v5}, Landroidx/media3/datasource/cache/CachedContentIndex;->(Landroidx/media3/database/DatabaseProvider;Ljava/io/File;[BZZ)V if-eqz p3, :cond_0 if-nez p6, :cond_0 .line 205 new-instance p4, Landroidx/media3/datasource/cache/CacheFileMetadataIndex; invoke-direct {p4, p3}, Landroidx/media3/datasource/cache/CacheFileMetadataIndex;->(Landroidx/media3/database/DatabaseProvider;)V goto :goto_0 :cond_0 const/4 p4, 0x0 .line 195 :goto_0 invoke-direct {p0, p1, p2, v6, p4}, Landroidx/media3/datasource/cache/SimpleCache;->(Ljava/io/File;Landroidx/media3/datasource/cache/CacheEvictor;Landroidx/media3/datasource/cache/CachedContentIndex;Landroidx/media3/datasource/cache/CacheFileMetadataIndex;)V return-void .end method .method constructor (Ljava/io/File;Landroidx/media3/datasource/cache/CacheEvictor;Landroidx/media3/datasource/cache/CachedContentIndex;Landroidx/media3/datasource/cache/CacheFileMetadataIndex;)V .locals 1 .line 213 invoke-direct {p0}, Ljava/lang/Object;->()V .line 214 invoke-static {p1}, Landroidx/media3/datasource/cache/SimpleCache;->lockFolder(Ljava/io/File;)Z move-result v0 if-eqz v0, :cond_0 iput-object p1, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; iput-object p2, p0, Landroidx/media3/datasource/cache/SimpleCache;->evictor:Landroidx/media3/datasource/cache/CacheEvictor; iput-object p3, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; iput-object p4, p0, Landroidx/media3/datasource/cache/SimpleCache;->fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; .line 222 new-instance p1, Ljava/util/HashMap; invoke-direct {p1}, Ljava/util/HashMap;->()V iput-object p1, p0, Landroidx/media3/datasource/cache/SimpleCache;->listeners:Ljava/util/HashMap; .line 223 new-instance p1, Ljava/util/Random; invoke-direct {p1}, Ljava/util/Random;->()V iput-object p1, p0, Landroidx/media3/datasource/cache/SimpleCache;->random:Ljava/util/Random; .line 224 invoke-interface {p2}, Landroidx/media3/datasource/cache/CacheEvictor;->requiresCacheSpanTouches()Z move-result p1 iput-boolean p1, p0, Landroidx/media3/datasource/cache/SimpleCache;->touchCacheSpans:Z const-wide/16 p1, -0x1 iput-wide p1, p0, Landroidx/media3/datasource/cache/SimpleCache;->uid:J .line 228 new-instance p1, Landroid/os/ConditionVariable; invoke-direct {p1}, Landroid/os/ConditionVariable;->()V .line 229 new-instance p2, Landroidx/media3/datasource/cache/SimpleCache$1; const-string p3, "ExoPlayer:SimpleCacheInit" invoke-direct {p2, p0, p3, p1}, Landroidx/media3/datasource/cache/SimpleCache$1;->(Landroidx/media3/datasource/cache/SimpleCache;Ljava/lang/String;Landroid/os/ConditionVariable;)V .line 238 invoke-virtual {p2}, Landroidx/media3/datasource/cache/SimpleCache$1;->start()V .line 239 invoke-virtual {p1}, Landroid/os/ConditionVariable;->block()V return-void .line 215 :cond_0 new-instance p0, Ljava/lang/IllegalStateException; new-instance p2, Ljava/lang/StringBuilder; const-string p3, "Another SimpleCache instance uses the folder: " invoke-direct {p2, p3}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p2, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object p1 invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 invoke-direct {p0, p1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw p0 .end method .method static synthetic access$000(Landroidx/media3/datasource/cache/SimpleCache;)V .locals 0 .line 51 invoke-direct {p0}, Landroidx/media3/datasource/cache/SimpleCache;->initialize()V return-void .end method .method static synthetic access$100(Landroidx/media3/datasource/cache/SimpleCache;)Landroidx/media3/datasource/cache/CacheEvictor; .locals 0 .line 51 iget-object p0, p0, Landroidx/media3/datasource/cache/SimpleCache;->evictor:Landroidx/media3/datasource/cache/CacheEvictor; return-object p0 .end method .method private addSpan(Landroidx/media3/datasource/cache/SimpleCacheSpan;)V .locals 4 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 691 iget-object v1, p1, Landroidx/media3/datasource/cache/SimpleCacheSpan;->key:Ljava/lang/String; invoke-virtual {v0, v1}, Landroidx/media3/datasource/cache/CachedContentIndex;->getOrAdd(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object v0 invoke-virtual {v0, p1}, Landroidx/media3/datasource/cache/CachedContent;->addSpan(Landroidx/media3/datasource/cache/SimpleCacheSpan;)V iget-wide v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->totalSpace:J .line 692 iget-wide v2, p1, Landroidx/media3/datasource/cache/SimpleCacheSpan;->length:J add-long/2addr v0, v2 iput-wide v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->totalSpace:J .line 693 invoke-direct {p0, p1}, Landroidx/media3/datasource/cache/SimpleCache;->notifySpanAdded(Landroidx/media3/datasource/cache/SimpleCacheSpan;)V return-void .end method .method private static createCacheDirectories(Ljava/io/File;)V .locals 2 .annotation system Ldalvik/annotation/Throws; value = { Landroidx/media3/datasource/cache/Cache$CacheException; } .end annotation .line 807 invoke-virtual {p0}, Ljava/io/File;->mkdirs()Z move-result v0 if-nez v0, :cond_1 invoke-virtual {p0}, Ljava/io/File;->isDirectory()Z move-result v0 if-eqz v0, :cond_0 goto :goto_0 .line 808 :cond_0 new-instance v0, Ljava/lang/StringBuilder; const-string v1, "Failed to create cache directory: " invoke-direct {v0, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object p0 invoke-virtual {p0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 const-string v0, "SimpleCache" .line 809 invoke-static {v0, p0}, Landroidx/media3/common/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)V .line 810 new-instance v0, Landroidx/media3/datasource/cache/Cache$CacheException; invoke-direct {v0, p0}, Landroidx/media3/datasource/cache/Cache$CacheException;->(Ljava/lang/String;)V throw v0 :cond_1 :goto_0 return-void .end method .method private static createUid(Ljava/io/File;)J .locals 5 .annotation system Ldalvik/annotation/Throws; value = { Ljava/io/IOException; } .end annotation .line 789 new-instance v0, Ljava/security/SecureRandom; invoke-direct {v0}, Ljava/security/SecureRandom;->()V invoke-virtual {v0}, Ljava/security/SecureRandom;->nextLong()J move-result-wide v0 const-wide/high16 v2, -0x8000000000000000L cmp-long v2, v0, v2 if-nez v2, :cond_0 const-wide/16 v0, 0x0 goto :goto_0 .line 790 :cond_0 invoke-static {v0, v1}, Ljava/lang/Math;->abs(J)J move-result-wide v0 :goto_0 const/16 v2, 0x10 .line 792 invoke-static {v0, v1, v2}, Ljava/lang/Long;->toString(JI)Ljava/lang/String; move-result-object v2 .line 793 new-instance v3, Ljava/io/File; new-instance v4, Ljava/lang/StringBuilder; invoke-direct {v4}, Ljava/lang/StringBuilder;->()V invoke-virtual {v4, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 const-string v4, ".uid" invoke-virtual {v2, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-direct {v3, p0, v2}, Ljava/io/File;->(Ljava/io/File;Ljava/lang/String;)V .line 794 invoke-virtual {v3}, Ljava/io/File;->createNewFile()Z move-result p0 if-eqz p0, :cond_1 return-wide v0 .line 796 :cond_1 new-instance p0, Ljava/io/IOException; new-instance v0, Ljava/lang/StringBuilder; const-string v1, "Failed to create UID file: " invoke-direct {v0, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v0, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 invoke-direct {p0, v0}, Ljava/io/IOException;->(Ljava/lang/String;)V throw p0 .end method .method public static delete(Ljava/io/File;Landroidx/media3/database/DatabaseProvider;)V .locals 6 const-string v0, "Failed to delete file metadata: " const-string v1, "SimpleCache" .line 98 invoke-virtual {p0}, Ljava/io/File;->exists()Z move-result v2 if-nez v2, :cond_0 return-void .line 102 :cond_0 invoke-virtual {p0}, Ljava/io/File;->listFiles()[Ljava/io/File; move-result-object v2 if-nez v2, :cond_1 .line 104 invoke-virtual {p0}, Ljava/io/File;->delete()Z return-void :cond_1 if-eqz p1, :cond_2 .line 111 invoke-static {v2}, Landroidx/media3/datasource/cache/SimpleCache;->loadUid([Ljava/io/File;)J move-result-wide v2 const-wide/16 v4, -0x1 cmp-long v4, v2, v4 if-eqz v4, :cond_2 .line 114 :try_start_0 invoke-static {p1, v2, v3}, Landroidx/media3/datasource/cache/CacheFileMetadataIndex;->delete(Landroidx/media3/database/DatabaseProvider;J)V :try_end_0 .catch Landroidx/media3/database/DatabaseIOException; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_0 .line 116 :catch_0 new-instance v4, Ljava/lang/StringBuilder; invoke-direct {v4, v0}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v4, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; move-result-object v4 invoke-virtual {v4}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v4 invoke-static {v1, v4}, Landroidx/media3/common/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V .line 119 :goto_0 :try_start_1 invoke-static {p1, v2, v3}, Landroidx/media3/datasource/cache/CachedContentIndex;->delete(Landroidx/media3/database/DatabaseProvider;J)V :try_end_1 .catch Landroidx/media3/database/DatabaseIOException; {:try_start_1 .. :try_end_1} :catch_1 goto :goto_1 .line 121 :catch_1 new-instance p1, Ljava/lang/StringBuilder; invoke-direct {p1, v0}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {p1, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; move-result-object p1 invoke-virtual {p1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 invoke-static {v1, p1}, Landroidx/media3/common/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V .line 126 :cond_2 :goto_1 invoke-static {p0}, Landroidx/media3/common/util/Util;->recursiveDelete(Ljava/io/File;)V return-void .end method .method private getSpan(Ljava/lang/String;JJ)Landroidx/media3/datasource/cache/SimpleCacheSpan; .locals 5 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 669 invoke-virtual {v0, p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->get(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object v0 if-nez v0, :cond_0 .line 671 invoke-static {p1, p2, p3, p4, p5}, Landroidx/media3/datasource/cache/SimpleCacheSpan;->createHole(Ljava/lang/String;JJ)Landroidx/media3/datasource/cache/SimpleCacheSpan; move-result-object p0 return-object p0 .line 674 :cond_0 :goto_0 invoke-virtual {v0, p2, p3, p4, p5}, Landroidx/media3/datasource/cache/CachedContent;->getSpan(JJ)Landroidx/media3/datasource/cache/SimpleCacheSpan; move-result-object p1 .line 675 iget-boolean v1, p1, Landroidx/media3/datasource/cache/SimpleCacheSpan;->isCached:Z if-eqz v1, :cond_1 iget-object v1, p1, Landroidx/media3/datasource/cache/SimpleCacheSpan;->file:Ljava/io/File; invoke-virtual {v1}, Ljava/io/File;->length()J move-result-wide v1 iget-wide v3, p1, Landroidx/media3/datasource/cache/SimpleCacheSpan;->length:J cmp-long v1, v1, v3 if-eqz v1, :cond_1 .line 678 invoke-direct {p0}, Landroidx/media3/datasource/cache/SimpleCache;->removeStaleSpans()V goto :goto_0 :cond_1 return-object p1 .end method .method private initialize()V .locals 6 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 518 invoke-virtual {v0}, Ljava/io/File;->exists()Z move-result v0 if-nez v0, :cond_0 :try_start_0 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 520 invoke-static {v0}, Landroidx/media3/datasource/cache/SimpleCache;->createCacheDirectories(Ljava/io/File;)V :try_end_0 .catch Landroidx/media3/datasource/cache/Cache$CacheException; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_0 :catch_0 move-exception v0 iput-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->initializationException:Landroidx/media3/datasource/cache/Cache$CacheException; return-void :cond_0 :goto_0 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 527 invoke-virtual {v0}, Ljava/io/File;->listFiles()[Ljava/io/File; move-result-object v0 const-string v1, "SimpleCache" if-nez v0, :cond_1 .line 529 new-instance v0, Ljava/lang/StringBuilder; const-string v2, "Failed to list cache directory files: " invoke-direct {v0, v2}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V iget-object v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v0 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v0 .line 530 invoke-static {v1, v0}, Landroidx/media3/common/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)V .line 531 new-instance v1, Landroidx/media3/datasource/cache/Cache$CacheException; invoke-direct {v1, v0}, Landroidx/media3/datasource/cache/Cache$CacheException;->(Ljava/lang/String;)V iput-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->initializationException:Landroidx/media3/datasource/cache/Cache$CacheException; return-void .line 535 :cond_1 invoke-static {v0}, Landroidx/media3/datasource/cache/SimpleCache;->loadUid([Ljava/io/File;)J move-result-wide v2 iput-wide v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->uid:J const-wide/16 v4, -0x1 cmp-long v2, v2, v4 if-nez v2, :cond_2 :try_start_1 iget-object v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 538 invoke-static {v2}, Landroidx/media3/datasource/cache/SimpleCache;->createUid(Ljava/io/File;)J move-result-wide v2 iput-wide v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->uid:J :try_end_1 .catch Ljava/io/IOException; {:try_start_1 .. :try_end_1} :catch_1 goto :goto_1 :catch_1 move-exception v0 .line 540 new-instance v2, Ljava/lang/StringBuilder; const-string v3, "Failed to create cache UID: " invoke-direct {v2, v3}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V iget-object v3, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 .line 541 invoke-static {v1, v2, v0}, Landroidx/media3/common/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V .line 542 new-instance v1, Landroidx/media3/datasource/cache/Cache$CacheException; invoke-direct {v1, v2, v0}, Landroidx/media3/datasource/cache/Cache$CacheException;->(Ljava/lang/String;Ljava/lang/Throwable;)V iput-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->initializationException:Landroidx/media3/datasource/cache/Cache$CacheException; return-void :cond_2 :goto_1 :try_start_2 iget-object v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; iget-wide v3, p0, Landroidx/media3/datasource/cache/SimpleCache;->uid:J .line 548 invoke-virtual {v2, v3, v4}, Landroidx/media3/datasource/cache/CachedContentIndex;->initialize(J)V iget-object v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; const/4 v3, 0x1 if-eqz v2, :cond_3 iget-wide v4, p0, Landroidx/media3/datasource/cache/SimpleCache;->uid:J .line 550 invoke-virtual {v2, v4, v5}, Landroidx/media3/datasource/cache/CacheFileMetadataIndex;->initialize(J)V iget-object v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; .line 551 invoke-virtual {v2}, Landroidx/media3/datasource/cache/CacheFileMetadataIndex;->getAll()Ljava/util/Map; move-result-object v2 iget-object v4, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 552 invoke-direct {p0, v4, v3, v0, v2}, Landroidx/media3/datasource/cache/SimpleCache;->loadDirectory(Ljava/io/File;Z[Ljava/io/File;Ljava/util/Map;)V iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; .line 553 invoke-interface {v2}, Ljava/util/Map;->keySet()Ljava/util/Set; move-result-object v2 invoke-virtual {v0, v2}, Landroidx/media3/datasource/cache/CacheFileMetadataIndex;->removeAll(Ljava/util/Set;)V goto :goto_2 :cond_3 iget-object v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; const/4 v4, 0x0 .line 555 invoke-direct {p0, v2, v3, v0, v4}, Landroidx/media3/datasource/cache/SimpleCache;->loadDirectory(Ljava/io/File;Z[Ljava/io/File;Ljava/util/Map;)V :try_end_2 .catch Ljava/io/IOException; {:try_start_2 .. :try_end_2} :catch_3 :goto_2 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 564 invoke-virtual {v0}, Landroidx/media3/datasource/cache/CachedContentIndex;->removeEmpty()V :try_start_3 iget-object p0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 566 invoke-virtual {p0}, Landroidx/media3/datasource/cache/CachedContentIndex;->store()V :try_end_3 .catch Ljava/io/IOException; {:try_start_3 .. :try_end_3} :catch_2 goto :goto_3 :catch_2 move-exception p0 const-string v0, "Storing index file failed" .line 568 invoke-static {v1, v0, p0}, Landroidx/media3/common/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V :goto_3 return-void :catch_3 move-exception v0 .line 558 new-instance v2, Ljava/lang/StringBuilder; const-string v3, "Failed to initialize cache indices: " invoke-direct {v2, v3}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V iget-object v3, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v2 invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 .line 559 invoke-static {v1, v2, v0}, Landroidx/media3/common/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V .line 560 new-instance v1, Landroidx/media3/datasource/cache/Cache$CacheException; invoke-direct {v1, v2, v0}, Landroidx/media3/datasource/cache/Cache$CacheException;->(Ljava/lang/String;Ljava/lang/Throwable;)V iput-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->initializationException:Landroidx/media3/datasource/cache/Cache$CacheException; return-void .end method .method public static declared-synchronized isCacheFolderLocked(Ljava/io/File;)Z .locals 2 const-class v0, Landroidx/media3/datasource/cache/SimpleCache; monitor-enter v0 :try_start_0 sget-object v1, Landroidx/media3/datasource/cache/SimpleCache;->lockedCacheDirs:Ljava/util/HashSet; .line 84 invoke-virtual {p0}, Ljava/io/File;->getAbsoluteFile()Ljava/io/File; move-result-object p0 invoke-virtual {v1, p0}, Ljava/util/HashSet;->contains(Ljava/lang/Object;)Z move-result p0 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 monitor-exit v0 return p0 :catchall_0 move-exception p0 monitor-exit v0 throw p0 .end method .method private loadDirectory(Ljava/io/File;Z[Ljava/io/File;Ljava/util/Map;)V .locals 9 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/io/File;", "Z[", "Ljava/io/File;", "Ljava/util/Map<", "Ljava/lang/String;", "Landroidx/media3/datasource/cache/CacheFileMetadata;", ">;)V" } .end annotation if-eqz p3, :cond_8 .line 587 array-length v0, p3 if-nez v0, :cond_0 goto :goto_4 .line 596 :cond_0 array-length p1, p3 const/4 v0, 0x0 move v1, v0 :goto_0 if-ge v1, p1, :cond_7 aget-object v8, p3, v1 .line 597 invoke-virtual {v8}, Ljava/io/File;->getName()Ljava/lang/String; move-result-object v2 if-eqz p2, :cond_1 const/16 v3, 0x2e .line 598 invoke-virtual {v2, v3}, Ljava/lang/String;->indexOf(I)I move-result v3 const/4 v4, -0x1 if-ne v3, v4, :cond_1 .line 599 invoke-virtual {v8}, Ljava/io/File;->listFiles()[Ljava/io/File; move-result-object v2 invoke-direct {p0, v8, v0, v2, p4}, Landroidx/media3/datasource/cache/SimpleCache;->loadDirectory(Ljava/io/File;Z[Ljava/io/File;Ljava/util/Map;)V goto :goto_3 :cond_1 if-eqz p2, :cond_2 .line 602 invoke-static {v2}, Landroidx/media3/datasource/cache/CachedContentIndex;->isIndexFile(Ljava/lang/String;)Z move-result v3 if-nez v3, :cond_6 const-string v3, ".uid" invoke-virtual {v2, v3}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z move-result v3 if-eqz v3, :cond_2 goto :goto_3 :cond_2 if-eqz p4, :cond_3 .line 609 invoke-interface {p4, v2}, Ljava/util/Map;->remove(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v2 check-cast v2, Landroidx/media3/datasource/cache/CacheFileMetadata; goto :goto_1 :cond_3 const/4 v2, 0x0 :goto_1 if-eqz v2, :cond_4 .line 611 iget-wide v3, v2, Landroidx/media3/datasource/cache/CacheFileMetadata;->length:J .line 612 iget-wide v5, v2, Landroidx/media3/datasource/cache/CacheFileMetadata;->lastTouchTimestamp:J goto :goto_2 :cond_4 const-wide/16 v2, -0x1 const-wide v4, -0x7fffffffffffffffL # -4.9E-324 move-wide v5, v4 move-wide v3, v2 :goto_2 iget-object v7, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; move-object v2, v8 .line 616 invoke-static/range {v2 .. v7}, Landroidx/media3/datasource/cache/SimpleCacheSpan;->createCacheEntry(Ljava/io/File;JJLandroidx/media3/datasource/cache/CachedContentIndex;)Landroidx/media3/datasource/cache/SimpleCacheSpan; move-result-object v2 if-eqz v2, :cond_5 .line 618 invoke-direct {p0, v2}, Landroidx/media3/datasource/cache/SimpleCache;->addSpan(Landroidx/media3/datasource/cache/SimpleCacheSpan;)V goto :goto_3 .line 620 :cond_5 invoke-virtual {v8}, Ljava/io/File;->delete()Z :cond_6 :goto_3 add-int/lit8 v1, v1, 0x1 goto :goto_0 :cond_7 return-void :cond_8 :goto_4 if-nez p2, :cond_9 .line 592 invoke-virtual {p1}, Ljava/io/File;->delete()Z :cond_9 return-void .end method .method private static loadUid([Ljava/io/File;)J .locals 5 .line 771 array-length v0, p0 const/4 v1, 0x0 :goto_0 if-ge v1, v0, :cond_1 aget-object v2, p0, v1 .line 772 invoke-virtual {v2}, Ljava/io/File;->getName()Ljava/lang/String; move-result-object v3 const-string v4, ".uid" .line 773 invoke-virtual {v3, v4}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z move-result v4 if-eqz v4, :cond_0 .line 775 :try_start_0 invoke-static {v3}, Landroidx/media3/datasource/cache/SimpleCache;->parseUid(Ljava/lang/String;)J move-result-wide v0 :try_end_0 .catch Ljava/lang/NumberFormatException; {:try_start_0 .. :try_end_0} :catch_0 return-wide v0 .line 778 :catch_0 new-instance v3, Ljava/lang/StringBuilder; const-string v4, "Malformed UID file: " invoke-direct {v3, v4}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v3, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; move-result-object v3 invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v3 const-string v4, "SimpleCache" invoke-static {v4, v3}, Landroidx/media3/common/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)V .line 779 invoke-virtual {v2}, Ljava/io/File;->delete()Z :cond_0 add-int/lit8 v1, v1, 0x1 goto :goto_0 :cond_1 const-wide/16 v0, -0x1 return-wide v0 .end method .method private static declared-synchronized lockFolder(Ljava/io/File;)Z .locals 2 const-class v0, Landroidx/media3/datasource/cache/SimpleCache; monitor-enter v0 :try_start_0 sget-object v1, Landroidx/media3/datasource/cache/SimpleCache;->lockedCacheDirs:Ljava/util/HashSet; .line 815 invoke-virtual {p0}, Ljava/io/File;->getAbsoluteFile()Ljava/io/File; move-result-object p0 invoke-virtual {v1, p0}, Ljava/util/HashSet;->add(Ljava/lang/Object;)Z move-result p0 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 monitor-exit v0 return p0 :catchall_0 move-exception p0 monitor-exit v0 throw p0 .end method .method private notifySpanAdded(Landroidx/media3/datasource/cache/SimpleCacheSpan;)V .locals 3 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->listeners:Ljava/util/HashMap; .line 745 iget-object v1, p1, Landroidx/media3/datasource/cache/SimpleCacheSpan;->key:Ljava/lang/String; invoke-virtual {v0, v1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/util/ArrayList; if-eqz v0, :cond_0 .line 747 invoke-virtual {v0}, Ljava/util/ArrayList;->size()I move-result v1 add-int/lit8 v1, v1, -0x1 :goto_0 if-ltz v1, :cond_0 .line 748 invoke-virtual {v0, v1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v2 check-cast v2, Landroidx/media3/datasource/cache/Cache$Listener; invoke-interface {v2, p0, p1}, Landroidx/media3/datasource/cache/Cache$Listener;->onSpanAdded(Landroidx/media3/datasource/cache/Cache;Landroidx/media3/datasource/cache/CacheSpan;)V add-int/lit8 v1, v1, -0x1 goto :goto_0 :cond_0 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->evictor:Landroidx/media3/datasource/cache/CacheEvictor; .line 751 invoke-interface {v0, p0, p1}, Landroidx/media3/datasource/cache/CacheEvictor;->onSpanAdded(Landroidx/media3/datasource/cache/Cache;Landroidx/media3/datasource/cache/CacheSpan;)V return-void .end method .method private notifySpanRemoved(Landroidx/media3/datasource/cache/CacheSpan;)V .locals 3 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->listeners:Ljava/util/HashMap; .line 735 iget-object v1, p1, Landroidx/media3/datasource/cache/CacheSpan;->key:Ljava/lang/String; invoke-virtual {v0, v1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/util/ArrayList; if-eqz v0, :cond_0 .line 737 invoke-virtual {v0}, Ljava/util/ArrayList;->size()I move-result v1 add-int/lit8 v1, v1, -0x1 :goto_0 if-ltz v1, :cond_0 .line 738 invoke-virtual {v0, v1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v2 check-cast v2, Landroidx/media3/datasource/cache/Cache$Listener; invoke-interface {v2, p0, p1}, Landroidx/media3/datasource/cache/Cache$Listener;->onSpanRemoved(Landroidx/media3/datasource/cache/Cache;Landroidx/media3/datasource/cache/CacheSpan;)V add-int/lit8 v1, v1, -0x1 goto :goto_0 :cond_0 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->evictor:Landroidx/media3/datasource/cache/CacheEvictor; .line 741 invoke-interface {v0, p0, p1}, Landroidx/media3/datasource/cache/CacheEvictor;->onSpanRemoved(Landroidx/media3/datasource/cache/Cache;Landroidx/media3/datasource/cache/CacheSpan;)V return-void .end method .method private notifySpanTouched(Landroidx/media3/datasource/cache/SimpleCacheSpan;Landroidx/media3/datasource/cache/CacheSpan;)V .locals 3 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->listeners:Ljava/util/HashMap; .line 755 iget-object v1, p1, Landroidx/media3/datasource/cache/SimpleCacheSpan;->key:Ljava/lang/String; invoke-virtual {v0, v1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/util/ArrayList; if-eqz v0, :cond_0 .line 757 invoke-virtual {v0}, Ljava/util/ArrayList;->size()I move-result v1 add-int/lit8 v1, v1, -0x1 :goto_0 if-ltz v1, :cond_0 .line 758 invoke-virtual {v0, v1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v2 check-cast v2, Landroidx/media3/datasource/cache/Cache$Listener; invoke-interface {v2, p0, p1, p2}, Landroidx/media3/datasource/cache/Cache$Listener;->onSpanTouched(Landroidx/media3/datasource/cache/Cache;Landroidx/media3/datasource/cache/CacheSpan;Landroidx/media3/datasource/cache/CacheSpan;)V add-int/lit8 v1, v1, -0x1 goto :goto_0 :cond_0 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->evictor:Landroidx/media3/datasource/cache/CacheEvictor; .line 761 invoke-interface {v0, p0, p1, p2}, Landroidx/media3/datasource/cache/CacheEvictor;->onSpanTouched(Landroidx/media3/datasource/cache/Cache;Landroidx/media3/datasource/cache/CacheSpan;Landroidx/media3/datasource/cache/CacheSpan;)V return-void .end method .method private static parseUid(Ljava/lang/String;)J .locals 2 const/16 v0, 0x2e .line 802 invoke-virtual {p0, v0}, Ljava/lang/String;->indexOf(I)I move-result v0 const/4 v1, 0x0 invoke-virtual {p0, v1, v0}, Ljava/lang/String;->substring(II)Ljava/lang/String; move-result-object p0 const/16 v0, 0x10 invoke-static {p0, v0}, Ljava/lang/Long;->parseLong(Ljava/lang/String;I)J move-result-wide v0 return-wide v0 .end method .method private removeSpanInternal(Landroidx/media3/datasource/cache/CacheSpan;)V .locals 5 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 697 iget-object v1, p1, Landroidx/media3/datasource/cache/CacheSpan;->key:Ljava/lang/String; invoke-virtual {v0, v1}, Landroidx/media3/datasource/cache/CachedContentIndex;->get(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object v0 if-eqz v0, :cond_2 .line 698 invoke-virtual {v0, p1}, Landroidx/media3/datasource/cache/CachedContent;->removeSpan(Landroidx/media3/datasource/cache/CacheSpan;)Z move-result v1 if-nez v1, :cond_0 goto :goto_1 :cond_0 iget-wide v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->totalSpace:J .line 701 iget-wide v3, p1, Landroidx/media3/datasource/cache/CacheSpan;->length:J sub-long/2addr v1, v3 iput-wide v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->totalSpace:J iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; if-eqz v1, :cond_1 .line 703 iget-object v1, p1, Landroidx/media3/datasource/cache/CacheSpan;->file:Ljava/io/File; invoke-virtual {v1}, Ljava/io/File;->getName()Ljava/lang/String; move-result-object v1 :try_start_0 iget-object v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; .line 705 invoke-virtual {v2, v1}, Landroidx/media3/datasource/cache/CacheFileMetadataIndex;->remove(Ljava/lang/String;)V :try_end_0 .catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_0 .line 709 :catch_0 new-instance v2, Ljava/lang/StringBuilder; const-string v3, "Failed to remove file index entry for: " invoke-direct {v2, v3}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v1 invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 const-string v2, "SimpleCache" invoke-static {v2, v1}, Landroidx/media3/common/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V :cond_1 :goto_0 iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 712 iget-object v0, v0, Landroidx/media3/datasource/cache/CachedContent;->key:Ljava/lang/String; invoke-virtual {v1, v0}, Landroidx/media3/datasource/cache/CachedContentIndex;->maybeRemove(Ljava/lang/String;)V .line 713 invoke-direct {p0, p1}, Landroidx/media3/datasource/cache/SimpleCache;->notifySpanRemoved(Landroidx/media3/datasource/cache/CacheSpan;)V :cond_2 :goto_1 return-void .end method .method private removeStaleSpans()V .locals 8 .line 721 new-instance v0, Ljava/util/ArrayList; invoke-direct {v0}, Ljava/util/ArrayList;->()V iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 722 invoke-virtual {v1}, Landroidx/media3/datasource/cache/CachedContentIndex;->getAll()Ljava/util/Collection; move-result-object v1 invoke-interface {v1}, Ljava/util/Collection;->iterator()Ljava/util/Iterator; move-result-object v1 :cond_0 invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_2 invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Landroidx/media3/datasource/cache/CachedContent; .line 723 invoke-virtual {v2}, Landroidx/media3/datasource/cache/CachedContent;->getSpans()Ljava/util/TreeSet; move-result-object v2 invoke-virtual {v2}, Ljava/util/TreeSet;->iterator()Ljava/util/Iterator; move-result-object v2 :cond_1 :goto_0 invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z move-result v3 if-eqz v3, :cond_0 invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v3 check-cast v3, Landroidx/media3/datasource/cache/CacheSpan; .line 724 iget-object v4, v3, Landroidx/media3/datasource/cache/CacheSpan;->file:Ljava/io/File; invoke-virtual {v4}, Ljava/io/File;->length()J move-result-wide v4 iget-wide v6, v3, Landroidx/media3/datasource/cache/CacheSpan;->length:J cmp-long v4, v4, v6 if-eqz v4, :cond_1 .line 725 invoke-virtual {v0, v3}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z goto :goto_0 :cond_2 const/4 v1, 0x0 .line 729 :goto_1 invoke-virtual {v0}, Ljava/util/ArrayList;->size()I move-result v2 if-ge v1, v2, :cond_3 .line 730 invoke-virtual {v0, v1}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v2 check-cast v2, Landroidx/media3/datasource/cache/CacheSpan; invoke-direct {p0, v2}, Landroidx/media3/datasource/cache/SimpleCache;->removeSpanInternal(Landroidx/media3/datasource/cache/CacheSpan;)V add-int/lit8 v1, v1, 0x1 goto :goto_1 :cond_3 return-void .end method .method private touchSpan(Ljava/lang/String;Landroidx/media3/datasource/cache/SimpleCacheSpan;)Landroidx/media3/datasource/cache/SimpleCacheSpan; .locals 9 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->touchCacheSpans:Z if-nez v0, :cond_0 return-object p2 .line 638 :cond_0 iget-object v0, p2, Landroidx/media3/datasource/cache/SimpleCacheSpan;->file:Ljava/io/File; invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/io/File; invoke-virtual {v0}, Ljava/io/File;->getName()Ljava/lang/String; move-result-object v2 .line 639 iget-wide v3, p2, Landroidx/media3/datasource/cache/SimpleCacheSpan;->length:J .line 640 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v7 iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; if-eqz v1, :cond_1 move-wide v5, v7 .line 644 :try_start_0 invoke-virtual/range {v1 .. v6}, Landroidx/media3/datasource/cache/CacheFileMetadataIndex;->set(Ljava/lang/String;JJ)V :try_end_0 .catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0 goto :goto_0 :catch_0 const-string v0, "SimpleCache" const-string v1, "Failed to update index with new touch timestamp." .line 646 invoke-static {v0, v1}, Landroidx/media3/common/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)V :goto_0 const/4 v0, 0x0 goto :goto_1 :cond_1 const/4 v0, 0x1 :goto_1 iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 654 invoke-virtual {v1, p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->get(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object p1 invoke-virtual {p1, p2, v7, v8, v0}, Landroidx/media3/datasource/cache/CachedContent;->setLastTouchTimestamp(Landroidx/media3/datasource/cache/SimpleCacheSpan;JZ)Landroidx/media3/datasource/cache/SimpleCacheSpan; move-result-object p1 .line 655 invoke-direct {p0, p2, p1}, Landroidx/media3/datasource/cache/SimpleCache;->notifySpanTouched(Landroidx/media3/datasource/cache/SimpleCacheSpan;Landroidx/media3/datasource/cache/CacheSpan;)V return-object p1 .end method .method private static declared-synchronized unlockFolder(Ljava/io/File;)V .locals 2 const-class v0, Landroidx/media3/datasource/cache/SimpleCache; monitor-enter v0 :try_start_0 sget-object v1, Landroidx/media3/datasource/cache/SimpleCache;->lockedCacheDirs:Ljava/util/HashSet; .line 819 invoke-virtual {p0}, Ljava/io/File;->getAbsoluteFile()Ljava/io/File; move-result-object p0 invoke-virtual {v1, p0}, Ljava/util/HashSet;->remove(Ljava/lang/Object;)Z :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 820 monitor-exit v0 return-void :catchall_0 move-exception p0 monitor-exit v0 throw p0 .end method # virtual methods .method public declared-synchronized addListener(Ljava/lang/String;Landroidx/media3/datasource/cache/Cache$Listener;)Ljava/util/NavigableSet; .locals 2 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/lang/String;", "Landroidx/media3/datasource/cache/Cache$Listener;", ")", "Ljava/util/NavigableSet<", "Landroidx/media3/datasource/cache/CacheSpan;", ">;" } .end annotation monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 277 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 278 invoke-static {p1}, Landroidx/media3/common/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; .line 279 invoke-static {p2}, Landroidx/media3/common/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->listeners:Ljava/util/HashMap; .line 280 invoke-virtual {v0, p1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/util/ArrayList; if-nez v0, :cond_0 .line 282 new-instance v0, Ljava/util/ArrayList; invoke-direct {v0}, Ljava/util/ArrayList;->()V iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->listeners:Ljava/util/HashMap; .line 283 invoke-virtual {v1, p1, v0}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; .line 285 :cond_0 invoke-virtual {v0, p2}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z .line 286 invoke-virtual {p0, p1}, Landroidx/media3/datasource/cache/SimpleCache;->getCachedSpans(Ljava/lang/String;)Ljava/util/NavigableSet; move-result-object p1 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 monitor-exit p0 return-object p1 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized applyContentMetadataMutations(Ljava/lang/String;Landroidx/media3/datasource/cache/ContentMetadataMutations;)V .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Landroidx/media3/datasource/cache/Cache$CacheException; } .end annotation monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 499 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 500 invoke-virtual {p0}, Landroidx/media3/datasource/cache/SimpleCache;->checkInitialization()V iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 502 invoke-virtual {v0, p1, p2}, Landroidx/media3/datasource/cache/CachedContentIndex;->applyContentMetadataMutations(Ljava/lang/String;Landroidx/media3/datasource/cache/ContentMetadataMutations;)V :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 :try_start_1 iget-object p1, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 504 invoke-virtual {p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->store()V :try_end_1 .catch Ljava/io/IOException; {:try_start_1 .. :try_end_1} :catch_0 .catchall {:try_start_1 .. :try_end_1} :catchall_0 .line 508 monitor-exit p0 return-void :catch_0 move-exception p1 .line 506 :try_start_2 new-instance p2, Landroidx/media3/datasource/cache/Cache$CacheException; invoke-direct {p2, p1}, Landroidx/media3/datasource/cache/Cache$CacheException;->(Ljava/lang/Throwable;)V throw p2 :try_end_2 .catchall {:try_start_2 .. :try_end_2} :catchall_0 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized checkInitialization()V .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Landroidx/media3/datasource/cache/Cache$CacheException; } .end annotation monitor-enter p0 :try_start_0 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->initializationException:Landroidx/media3/datasource/cache/Cache$CacheException; :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 if-nez v0, :cond_0 .line 251 monitor-exit p0 return-void .line 249 :cond_0 :try_start_1 throw v0 :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 :catchall_0 move-exception v0 monitor-exit p0 throw v0 .end method .method public declared-synchronized commitFile(Ljava/io/File;J)V .locals 9 .annotation system Ldalvik/annotation/Throws; value = { Landroidx/media3/datasource/cache/Cache$CacheException; } .end annotation monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z const/4 v1, 0x1 const/4 v2, 0x0 xor-int/2addr v0, v1 .line 396 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 397 invoke-virtual {p1}, Ljava/io/File;->exists()Z move-result v0 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 if-nez v0, :cond_0 .line 398 monitor-exit p0 return-void :cond_0 const-wide/16 v3, 0x0 cmp-long v0, p2, v3 if-nez v0, :cond_1 .line 401 :try_start_1 invoke-virtual {p1}, Ljava/io/File;->delete()Z :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 .line 402 monitor-exit p0 return-void :cond_1 :try_start_2 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 406 invoke-static {p1, p2, p3, v0}, Landroidx/media3/datasource/cache/SimpleCacheSpan;->createCacheEntry(Ljava/io/File;JLandroidx/media3/datasource/cache/CachedContentIndex;)Landroidx/media3/datasource/cache/SimpleCacheSpan; move-result-object p2 invoke-static {p2}, Landroidx/media3/common/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p2 check-cast p2, Landroidx/media3/datasource/cache/SimpleCacheSpan; iget-object p3, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 407 iget-object v0, p2, Landroidx/media3/datasource/cache/SimpleCacheSpan;->key:Ljava/lang/String; invoke-virtual {p3, v0}, Landroidx/media3/datasource/cache/CachedContentIndex;->get(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object p3 invoke-static {p3}, Landroidx/media3/common/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object p3 check-cast p3, Landroidx/media3/datasource/cache/CachedContent; .line 408 iget-wide v3, p2, Landroidx/media3/datasource/cache/SimpleCacheSpan;->position:J iget-wide v5, p2, Landroidx/media3/datasource/cache/SimpleCacheSpan;->length:J invoke-virtual {p3, v3, v4, v5, v6}, Landroidx/media3/datasource/cache/CachedContent;->isFullyLocked(JJ)Z move-result v0 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 411 invoke-virtual {p3}, Landroidx/media3/datasource/cache/CachedContent;->getMetadata()Landroidx/media3/datasource/cache/DefaultContentMetadata; move-result-object p3 invoke-static {p3}, Landroidx/media3/datasource/cache/ContentMetadata;->getContentLength(Landroidx/media3/datasource/cache/ContentMetadata;)J move-result-wide v3 const-wide/16 v5, -0x1 cmp-long p3, v3, v5 if-eqz p3, :cond_3 .line 413 iget-wide v5, p2, Landroidx/media3/datasource/cache/SimpleCacheSpan;->position:J iget-wide v7, p2, Landroidx/media3/datasource/cache/SimpleCacheSpan;->length:J add-long/2addr v5, v7 cmp-long p3, v5, v3 if-gtz p3, :cond_2 goto :goto_0 :cond_2 move v1, v2 :goto_0 invoke-static {v1}, Landroidx/media3/common/util/Assertions;->checkState(Z)V :cond_3 iget-object p3, p0, Landroidx/media3/datasource/cache/SimpleCache;->fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; if-eqz p3, :cond_4 .line 417 invoke-virtual {p1}, Ljava/io/File;->getName()Ljava/lang/String; move-result-object v1 :try_end_2 .catchall {:try_start_2 .. :try_end_2} :catchall_0 :try_start_3 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->fileIndex:Landroidx/media3/datasource/cache/CacheFileMetadataIndex; .line 419 iget-wide v2, p2, Landroidx/media3/datasource/cache/SimpleCacheSpan;->length:J iget-wide v4, p2, Landroidx/media3/datasource/cache/SimpleCacheSpan;->lastTouchTimestamp:J invoke-virtual/range {v0 .. v5}, Landroidx/media3/datasource/cache/CacheFileMetadataIndex;->set(Ljava/lang/String;JJ)V :try_end_3 .catch Ljava/io/IOException; {:try_start_3 .. :try_end_3} :catch_0 .catchall {:try_start_3 .. :try_end_3} :catchall_0 goto :goto_1 :catch_0 move-exception p1 .line 421 :try_start_4 new-instance p2, Landroidx/media3/datasource/cache/Cache$CacheException; invoke-direct {p2, p1}, Landroidx/media3/datasource/cache/Cache$CacheException;->(Ljava/lang/Throwable;)V throw p2 .line 424 :cond_4 :goto_1 invoke-direct {p0, p2}, Landroidx/media3/datasource/cache/SimpleCache;->addSpan(Landroidx/media3/datasource/cache/SimpleCacheSpan;)V :try_end_4 .catchall {:try_start_4 .. :try_end_4} :catchall_0 :try_start_5 iget-object p1, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 426 invoke-virtual {p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->store()V :try_end_5 .catch Ljava/io/IOException; {:try_start_5 .. :try_end_5} :catch_1 .catchall {:try_start_5 .. :try_end_5} :catchall_0 .line 430 :try_start_6 invoke-virtual {p0}, Ljava/lang/Object;->notifyAll()V :try_end_6 .catchall {:try_start_6 .. :try_end_6} :catchall_0 .line 431 monitor-exit p0 return-void :catch_1 move-exception p1 .line 428 :try_start_7 new-instance p2, Landroidx/media3/datasource/cache/Cache$CacheException; invoke-direct {p2, p1}, Landroidx/media3/datasource/cache/Cache$CacheException;->(Ljava/lang/Throwable;)V throw p2 :try_end_7 .catchall {:try_start_7 .. :try_end_7} :catchall_0 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized getCacheSpace()J .locals 2 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 320 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V iget-wide v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->totalSpace:J :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 321 monitor-exit p0 return-wide v0 :catchall_0 move-exception v0 monitor-exit p0 throw v0 .end method .method public declared-synchronized getCachedBytes(Ljava/lang/String;JJ)J .locals 15 monitor-enter p0 const-wide/16 v0, -0x1 cmp-long v0, p4, v0 const-wide v1, 0x7fffffffffffffffL if-nez v0, :cond_0 move-wide v3, v1 goto :goto_0 :cond_0 add-long v3, p2, p4 :goto_0 const-wide/16 v7, 0x0 cmp-long v0, v3, v7 if-gez v0, :cond_1 move-wide v9, v1 goto :goto_1 :cond_1 move-wide v9, v3 :goto_1 move-wide/from16 v11, p2 move-wide v13, v7 :goto_2 cmp-long v0, v11, v9 if-gez v0, :cond_3 sub-long v5, v9, v11 move-object v1, p0 move-object/from16 v2, p1 move-wide v3, v11 .line 484 :try_start_0 invoke-virtual/range {v1 .. v6}, Landroidx/media3/datasource/cache/SimpleCache;->getCachedLength(Ljava/lang/String;JJ)J move-result-wide v0 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 cmp-long v2, v0, v7 if-lez v2, :cond_2 add-long/2addr v13, v0 goto :goto_3 :cond_2 neg-long v0, v0 :goto_3 add-long/2addr v11, v0 goto :goto_2 :catchall_0 move-exception v0 move-object v1, v0 monitor-exit p0 throw v1 .line 493 :cond_3 monitor-exit p0 return-wide v13 .end method .method public declared-synchronized getCachedLength(Ljava/lang/String;JJ)J .locals 2 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 465 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V const-wide/16 v0, -0x1 cmp-long v0, p4, v0 if-nez v0, :cond_0 const-wide p4, 0x7fffffffffffffffL :cond_0 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 469 invoke-virtual {v0, p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->get(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object p1 if-eqz p1, :cond_1 .line 470 invoke-virtual {p1, p2, p3, p4, p5}, Landroidx/media3/datasource/cache/CachedContent;->getCachedBytesLength(JJ)J move-result-wide p1 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 goto :goto_0 :cond_1 neg-long p1, p4 :goto_0 monitor-exit p0 return-wide p1 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized getCachedSpans(Ljava/lang/String;)Ljava/util/NavigableSet; .locals 1 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/lang/String;", ")", "Ljava/util/NavigableSet<", "Landroidx/media3/datasource/cache/CacheSpan;", ">;" } .end annotation monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 305 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 306 invoke-virtual {v0, p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->get(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object p1 if-eqz p1, :cond_1 .line 307 invoke-virtual {p1}, Landroidx/media3/datasource/cache/CachedContent;->isEmpty()Z move-result v0 if-eqz v0, :cond_0 goto :goto_0 .line 309 :cond_0 new-instance v0, Ljava/util/TreeSet; invoke-virtual {p1}, Landroidx/media3/datasource/cache/CachedContent;->getSpans()Ljava/util/TreeSet; move-result-object p1 invoke-direct {v0, p1}, Ljava/util/TreeSet;->(Ljava/util/Collection;)V goto :goto_1 .line 308 :cond_1 :goto_0 new-instance v0, Ljava/util/TreeSet; invoke-direct {v0}, Ljava/util/TreeSet;->()V :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 307 :goto_1 monitor-exit p0 return-object v0 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized getContentMetadata(Ljava/lang/String;)Landroidx/media3/datasource/cache/ContentMetadata; .locals 1 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 512 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 513 invoke-virtual {v0, p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->getContentMetadata(Ljava/lang/String;)Landroidx/media3/datasource/cache/ContentMetadata; move-result-object p1 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 monitor-exit p0 return-object p1 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized getKeys()Ljava/util/Set; .locals 2 .annotation system Ldalvik/annotation/Signature; value = { "()", "Ljava/util/Set<", "Ljava/lang/String;", ">;" } .end annotation monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 314 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 315 new-instance v0, Ljava/util/HashSet; iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; invoke-virtual {v1}, Landroidx/media3/datasource/cache/CachedContentIndex;->getKeys()Ljava/util/Set; move-result-object v1 invoke-direct {v0, v1}, Ljava/util/HashSet;->(Ljava/util/Collection;)V :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 monitor-exit p0 return-object v0 :catchall_0 move-exception v0 monitor-exit p0 throw v0 .end method .method public declared-synchronized getUid()J .locals 2 monitor-enter p0 :try_start_0 iget-wide v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->uid:J :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 255 monitor-exit p0 return-wide v0 :catchall_0 move-exception v0 monitor-exit p0 throw v0 .end method .method public declared-synchronized isCached(Ljava/lang/String;JJ)Z .locals 3 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z const/4 v1, 0x1 const/4 v2, 0x0 xor-int/2addr v0, v1 .line 458 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 459 invoke-virtual {v0, p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->get(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object p1 if-eqz p1, :cond_0 .line 460 invoke-virtual {p1, p2, p3, p4, p5}, Landroidx/media3/datasource/cache/CachedContent;->getCachedBytesLength(JJ)J move-result-wide p1 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 cmp-long p1, p1, p4 if-ltz p1, :cond_0 goto :goto_0 :cond_0 move v1, v2 :goto_0 monitor-exit p0 return v1 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized release()V .locals 4 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_1 if-eqz v0, :cond_0 .line 261 monitor-exit p0 return-void :cond_0 :try_start_1 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->listeners:Ljava/util/HashMap; .line 263 invoke-virtual {v0}, Ljava/util/HashMap;->clear()V .line 264 invoke-direct {p0}, Landroidx/media3/datasource/cache/SimpleCache;->removeStaleSpans()V :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_1 const/4 v0, 0x1 :try_start_2 iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 266 invoke-virtual {v1}, Landroidx/media3/datasource/cache/CachedContentIndex;->store()V :try_end_2 .catch Ljava/io/IOException; {:try_start_2 .. :try_end_2} :catch_0 .catchall {:try_start_2 .. :try_end_2} :catchall_0 :try_start_3 iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 270 invoke-static {v1}, Landroidx/media3/datasource/cache/SimpleCache;->unlockFolder(Ljava/io/File;)V :goto_0 iput-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z :try_end_3 .catchall {:try_start_3 .. :try_end_3} :catchall_1 goto :goto_1 :catchall_0 move-exception v1 goto :goto_2 :catch_0 move-exception v1 :try_start_4 const-string v2, "SimpleCache" const-string v3, "Storing index file failed" .line 268 invoke-static {v2, v3, v1}, Landroidx/media3/common/util/Log;->e(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V :try_end_4 .catchall {:try_start_4 .. :try_end_4} :catchall_0 :try_start_5 iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 270 invoke-static {v1}, Landroidx/media3/datasource/cache/SimpleCache;->unlockFolder(Ljava/io/File;)V :try_end_5 .catchall {:try_start_5 .. :try_end_5} :catchall_1 goto :goto_0 .line 273 :goto_1 monitor-exit p0 return-void :goto_2 :try_start_6 iget-object v2, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 270 invoke-static {v2}, Landroidx/media3/datasource/cache/SimpleCache;->unlockFolder(Ljava/io/File;)V iput-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z .line 272 throw v1 :try_end_6 .catchall {:try_start_6 .. :try_end_6} :catchall_1 :catchall_1 move-exception v0 monitor-exit p0 throw v0 .end method .method public declared-synchronized releaseHoleSpan(Landroidx/media3/datasource/cache/CacheSpan;)V .locals 3 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 435 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 436 iget-object v1, p1, Landroidx/media3/datasource/cache/CacheSpan;->key:Ljava/lang/String; invoke-virtual {v0, v1}, Landroidx/media3/datasource/cache/CachedContentIndex;->get(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object v0 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroidx/media3/datasource/cache/CachedContent; .line 437 iget-wide v1, p1, Landroidx/media3/datasource/cache/CacheSpan;->position:J invoke-virtual {v0, v1, v2}, Landroidx/media3/datasource/cache/CachedContent;->unlockRange(J)V iget-object p1, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 438 iget-object v0, v0, Landroidx/media3/datasource/cache/CachedContent;->key:Ljava/lang/String; invoke-virtual {p1, v0}, Landroidx/media3/datasource/cache/CachedContentIndex;->maybeRemove(Ljava/lang/String;)V .line 439 invoke-virtual {p0}, Ljava/lang/Object;->notifyAll()V :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 440 monitor-exit p0 return-void :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized removeListener(Ljava/lang/String;Landroidx/media3/datasource/cache/Cache$Listener;)V .locals 1 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 if-eqz v0, :cond_0 .line 292 monitor-exit p0 return-void :cond_0 :try_start_1 iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->listeners:Ljava/util/HashMap; .line 294 invoke-virtual {v0, p1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/util/ArrayList; if-eqz v0, :cond_1 .line 296 invoke-virtual {v0, p2}, Ljava/util/ArrayList;->remove(Ljava/lang/Object;)Z .line 297 invoke-virtual {v0}, Ljava/util/ArrayList;->isEmpty()Z move-result p2 if-eqz p2, :cond_1 iget-object p2, p0, Landroidx/media3/datasource/cache/SimpleCache;->listeners:Ljava/util/HashMap; .line 298 invoke-virtual {p2, p1}, Ljava/util/HashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 .line 301 :cond_1 monitor-exit p0 return-void :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized removeResource(Ljava/lang/String;)V .locals 1 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 444 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 445 invoke-virtual {p0, p1}, Landroidx/media3/datasource/cache/SimpleCache;->getCachedSpans(Ljava/lang/String;)Ljava/util/NavigableSet; move-result-object p1 invoke-interface {p1}, Ljava/util/NavigableSet;->iterator()Ljava/util/Iterator; move-result-object p1 :goto_0 invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_0 invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Landroidx/media3/datasource/cache/CacheSpan; .line 446 invoke-direct {p0, v0}, Landroidx/media3/datasource/cache/SimpleCache;->removeSpanInternal(Landroidx/media3/datasource/cache/CacheSpan;)V :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 goto :goto_0 .line 448 :cond_0 monitor-exit p0 return-void :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized removeSpan(Landroidx/media3/datasource/cache/CacheSpan;)V .locals 1 monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 452 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 453 invoke-direct {p0, p1}, Landroidx/media3/datasource/cache/SimpleCache;->removeSpanInternal(Landroidx/media3/datasource/cache/CacheSpan;)V :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 454 monitor-exit p0 return-void :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized startFile(Ljava/lang/String;JJ)Ljava/io/File; .locals 8 .annotation system Ldalvik/annotation/Throws; value = { Landroidx/media3/datasource/cache/Cache$CacheException; } .end annotation monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 371 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 372 invoke-virtual {p0}, Landroidx/media3/datasource/cache/SimpleCache;->checkInitialization()V iget-object v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 374 invoke-virtual {v0, p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->get(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object v0 .line 375 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; .line 376 invoke-virtual {v0, p2, p3, p4, p5}, Landroidx/media3/datasource/cache/CachedContent;->isFullyLocked(JJ)Z move-result v1 invoke-static {v1}, Landroidx/media3/common/util/Assertions;->checkState(Z)V iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 377 invoke-virtual {v1}, Ljava/io/File;->exists()Z move-result v1 if-nez v1, :cond_0 iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; .line 380 invoke-static {v1}, Landroidx/media3/datasource/cache/SimpleCache;->createCacheDirectories(Ljava/io/File;)V .line 381 invoke-direct {p0}, Landroidx/media3/datasource/cache/SimpleCache;->removeStaleSpans()V :cond_0 iget-object v1, p0, Landroidx/media3/datasource/cache/SimpleCache;->evictor:Landroidx/media3/datasource/cache/CacheEvictor; move-object v2, p0 move-object v3, p1 move-wide v4, p2 move-wide v6, p4 .line 383 invoke-interface/range {v1 .. v7}, Landroidx/media3/datasource/cache/CacheEvictor;->onStartFile(Landroidx/media3/datasource/cache/Cache;Ljava/lang/String;JJ)V .line 385 new-instance v2, Ljava/io/File; iget-object p1, p0, Landroidx/media3/datasource/cache/SimpleCache;->cacheDir:Ljava/io/File; iget-object p4, p0, Landroidx/media3/datasource/cache/SimpleCache;->random:Ljava/util/Random; const/16 p5, 0xa invoke-virtual {p4, p5}, Ljava/util/Random;->nextInt(I)I move-result p4 invoke-static {p4}, Ljava/lang/Integer;->toString(I)Ljava/lang/String; move-result-object p4 invoke-direct {v2, p1, p4}, Ljava/io/File;->(Ljava/io/File;Ljava/lang/String;)V .line 386 invoke-virtual {v2}, Ljava/io/File;->exists()Z move-result p1 if-nez p1, :cond_1 .line 387 invoke-static {v2}, Landroidx/media3/datasource/cache/SimpleCache;->createCacheDirectories(Ljava/io/File;)V .line 389 :cond_1 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v6 .line 390 iget v3, v0, Landroidx/media3/datasource/cache/CachedContent;->id:I move-wide v4, p2 invoke-static/range {v2 .. v7}, Landroidx/media3/datasource/cache/SimpleCacheSpan;->getCacheFile(Ljava/io/File;IJJ)Ljava/io/File; move-result-object p1 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 monitor-exit p0 return-object p1 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized startReadWrite(Ljava/lang/String;JJ)Landroidx/media3/datasource/cache/CacheSpan; .locals 1 .annotation system Ldalvik/annotation/Throws; value = { Ljava/lang/InterruptedException;, Landroidx/media3/datasource/cache/Cache$CacheException; } .end annotation monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 327 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 328 invoke-virtual {p0}, Landroidx/media3/datasource/cache/SimpleCache;->checkInitialization()V .line 331 :goto_0 invoke-virtual/range {p0 .. p5}, Landroidx/media3/datasource/cache/SimpleCache;->startReadWriteNonBlocking(Ljava/lang/String;JJ)Landroidx/media3/datasource/cache/CacheSpan; move-result-object v0 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 if-eqz v0, :cond_0 .line 333 monitor-exit p0 return-object v0 .line 340 :cond_0 :try_start_1 invoke-virtual {p0}, Ljava/lang/Object;->wait()V :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 goto :goto_0 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method .method public declared-synchronized startReadWriteNonBlocking(Ljava/lang/String;JJ)Landroidx/media3/datasource/cache/CacheSpan; .locals 2 .annotation system Ldalvik/annotation/Throws; value = { Landroidx/media3/datasource/cache/Cache$CacheException; } .end annotation monitor-enter p0 :try_start_0 iget-boolean v0, p0, Landroidx/media3/datasource/cache/SimpleCache;->released:Z xor-int/lit8 v0, v0, 0x1 .line 349 invoke-static {v0}, Landroidx/media3/common/util/Assertions;->checkState(Z)V .line 350 invoke-virtual {p0}, Landroidx/media3/datasource/cache/SimpleCache;->checkInitialization()V .line 352 invoke-direct/range {p0 .. p5}, Landroidx/media3/datasource/cache/SimpleCache;->getSpan(Ljava/lang/String;JJ)Landroidx/media3/datasource/cache/SimpleCacheSpan; move-result-object p4 .line 354 iget-boolean p5, p4, Landroidx/media3/datasource/cache/SimpleCacheSpan;->isCached:Z if-eqz p5, :cond_0 .line 356 invoke-direct {p0, p1, p4}, Landroidx/media3/datasource/cache/SimpleCache;->touchSpan(Ljava/lang/String;Landroidx/media3/datasource/cache/SimpleCacheSpan;)Landroidx/media3/datasource/cache/SimpleCacheSpan; move-result-object p1 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 monitor-exit p0 return-object p1 :cond_0 :try_start_1 iget-object p5, p0, Landroidx/media3/datasource/cache/SimpleCache;->contentIndex:Landroidx/media3/datasource/cache/CachedContentIndex; .line 359 invoke-virtual {p5, p1}, Landroidx/media3/datasource/cache/CachedContentIndex;->getOrAdd(Ljava/lang/String;)Landroidx/media3/datasource/cache/CachedContent; move-result-object p1 .line 360 iget-wide v0, p4, Landroidx/media3/datasource/cache/SimpleCacheSpan;->length:J invoke-virtual {p1, p2, p3, v0, v1}, Landroidx/media3/datasource/cache/CachedContent;->lockRange(JJ)Z move-result p1 :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 if-eqz p1, :cond_1 .line 362 monitor-exit p0 return-object p4 .line 366 :cond_1 monitor-exit p0 const/4 p0, 0x0 return-object p0 :catchall_0 move-exception p1 monitor-exit p0 throw p1 .end method