f0.smali
.class public final Landroidx/room/f0;
.super Ljava/lang/Object;
.source "SourceFile"
# interfaces
.implements Landroidx/sqlite/db/b;
.implements Landroidx/room/d;
# instance fields
.field public final a:Landroid/content/Context;
.field public final b:Ljava/lang/String;
.field public final c:Ljava/io/File;
.field public final d:Ljava/util/concurrent/Callable;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/concurrent/Callable<",
"Ljava/io/InputStream;",
">;"
}
.end annotation
.end field
.field public final e:I
.field public final f:Landroidx/sqlite/db/b;
.field public g:Landroidx/room/c;
.field public h:Z
# virtual methods
.method public final a(Ljava/io/File;)V
.registers 12
.annotation system Ldalvik/annotation/Throws;
value = {
Ljava/io/IOException;
}
.end annotation
.line 1
iget-object v0, p0, Landroidx/room/f0;->b:Ljava/lang/String;
if-eqz v0, :cond_15
.line 2
iget-object v0, p0, Landroidx/room/f0;->a:Landroid/content/Context;
invoke-virtual {v0}, Landroid/content/Context;->getAssets()Landroid/content/res/AssetManager;
move-result-object v0
iget-object v1, p0, Landroidx/room/f0;->b:Ljava/lang/String;
invoke-virtual {v0, v1}, Landroid/content/res/AssetManager;->open(Ljava/lang/String;)Ljava/io/InputStream;
move-result-object v0
invoke-static {v0}, Ljava/nio/channels/Channels;->newChannel(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;
move-result-object v0
goto :goto_33
.line 3
:cond_15
iget-object v0, p0, Landroidx/room/f0;->c:Ljava/io/File;
if-eqz v0, :cond_25
.line 4
new-instance v0, Ljava/io/FileInputStream;
iget-object v1, p0, Landroidx/room/f0;->c:Ljava/io/File;
invoke-direct {v0, v1}, Ljava/io/FileInputStream;-><init>(Ljava/io/File;)V
invoke-virtual {v0}, Ljava/io/FileInputStream;->getChannel()Ljava/nio/channels/FileChannel;
move-result-object v0
goto :goto_33
.line 5
:cond_25
iget-object v0, p0, Landroidx/room/f0;->d:Ljava/util/concurrent/Callable;
if-eqz v0, :cond_ea
.line 6
:try_start_29
invoke-interface {v0}, Ljava/util/concurrent/Callable;->call()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/io/InputStream;
:try_end_2f
.catch Ljava/lang/Exception; {:try_start_29 .. :try_end_2f} :catch_e1
.line 7
invoke-static {v0}, Ljava/nio/channels/Channels;->newChannel(Ljava/io/InputStream;)Ljava/nio/channels/ReadableByteChannel;
move-result-object v0
.line 8
:goto_33
iget-object v1, p0, Landroidx/room/f0;->a:Landroid/content/Context;
.line 9
invoke-virtual {v1}, Landroid/content/Context;->getCacheDir()Ljava/io/File;
move-result-object v1
const-string v2, "room-copy-helper"
const-string v3, ".tmp"
.line 10
invoke-static {v2, v3, v1}, Ljava/io/File;->createTempFile(Ljava/lang/String;Ljava/lang/String;Ljava/io/File;)Ljava/io/File;
move-result-object v7
.line 11
invoke-virtual {v7}, Ljava/io/File;->deleteOnExit()V
.line 12
new-instance v1, Ljava/io/FileOutputStream;
invoke-direct {v1, v7}, Ljava/io/FileOutputStream;-><init>(Ljava/io/File;)V
invoke-virtual {v1}, Ljava/io/FileOutputStream;->getChannel()Ljava/nio/channels/FileChannel;
move-result-object v8
.line 13
:try_start_4d
sget v1, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v2, 0x17
const/4 v9, 0x0
if-le v1, v2, :cond_61
const-wide/16 v3, 0x0
const-wide v5, 0x7fffffffffffffffL
move-object v1, v8
move-object v2, v0
.line 14
invoke-virtual/range {v1 .. v6}, Ljava/nio/channels/FileChannel;->transferFrom(Ljava/nio/channels/ReadableByteChannel;JJ)J
goto :goto_77
.line 15
:cond_61
invoke-static {v0}, Ljava/nio/channels/Channels;->newInputStream(Ljava/nio/channels/ReadableByteChannel;)Ljava/io/InputStream;
move-result-object v1
.line 16
invoke-static {v8}, Ljava/nio/channels/Channels;->newOutputStream(Ljava/nio/channels/WritableByteChannel;)Ljava/io/OutputStream;
move-result-object v2
const/16 v3, 0x1000
new-array v3, v3, [B
.line 17
:goto_6d
invoke-virtual {v1, v3}, Ljava/io/InputStream;->read([B)I
move-result v4
if-lez v4, :cond_77
.line 18
invoke-virtual {v2, v3, v9, v4}, Ljava/io/OutputStream;->write([BII)V
goto :goto_6d
.line 19
:cond_77
:goto_77
invoke-virtual {v8, v9}, Ljava/nio/channels/FileChannel;->force(Z)V
:try_end_7a
.catchall {:try_start_4d .. :try_end_7a} :catchall_d9
.line 20
invoke-interface {v0}, Ljava/nio/channels/Channel;->close()V
.line 21
invoke-virtual {v8}, Ljava/nio/channels/spi/AbstractInterruptibleChannel;->close()V
.line 22
invoke-virtual {p1}, Ljava/io/File;->getParentFile()Ljava/io/File;
move-result-object v0
if-eqz v0, :cond_aa
.line 23
invoke-virtual {v0}, Ljava/io/File;->exists()Z
move-result v1
if-nez v1, :cond_aa
invoke-virtual {v0}, Ljava/io/File;->mkdirs()Z
move-result v0
if-eqz v0, :cond_93
goto :goto_aa
.line 24
:cond_93
new-instance v0, Ljava/io/IOException;
const-string v1, "Failed to create directories for "
.line 25
invoke-static {v1}, Landroid/support/v4/media/c;->c(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
.line 26
invoke-virtual {p1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;
move-result-object p1
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {v0, p1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
.line 27
:cond_aa
:goto_aa
invoke-virtual {v7, p1}, Ljava/io/File;->renameTo(Ljava/io/File;)Z
move-result v0
if-eqz v0, :cond_b1
return-void
.line 28
:cond_b1
new-instance v0, Ljava/io/IOException;
const-string v1, "Failed to move intermediate file ("
.line 29
invoke-static {v1}, Landroid/support/v4/media/c;->c(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
.line 30
invoke-virtual {v7}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string v2, ") to destination ("
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 31
invoke-virtual {p1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;
move-result-object p1
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string p1, ")."
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {v0, p1}, Ljava/io/IOException;-><init>(Ljava/lang/String;)V
throw v0
:catchall_d9
move-exception p1
.line 32
invoke-interface {v0}, Ljava/nio/channels/Channel;->close()V
.line 33
invoke-virtual {v8}, Ljava/nio/channels/spi/AbstractInterruptibleChannel;->close()V
.line 34
throw p1
:catch_e1
move-exception p1
.line 35
new-instance v0, Ljava/io/IOException;
const-string v1, "inputStreamCallable exception on call"
invoke-direct {v0, v1, p1}, Ljava/io/IOException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v0
.line 36
:cond_ea
new-instance p1, Ljava/lang/IllegalStateException;
const-string v0, "copyFromAssetPath, copyFromFile and copyFromInputStream are all null!"
invoke-direct {p1, v0}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw p1
.end method
.method public final declared-synchronized close()V
.registers 2
monitor-enter p0
.line 1
:try_start_1
iget-object v0, p0, Landroidx/room/f0;->f:Landroidx/sqlite/db/b;
invoke-interface {v0}, Landroidx/sqlite/db/b;->close()V
const/4 v0, 0x0
.line 2
iput-boolean v0, p0, Landroidx/room/f0;->h:Z
:try_end_9
.catchall {:try_start_1 .. :try_end_9} :catchall_b
.line 3
monitor-exit p0
return-void
:catchall_b
move-exception v0
monitor-exit p0
throw v0
.end method
.method public final getDatabaseName()Ljava/lang/String;
.registers 2
iget-object v0, p0, Landroidx/room/f0;->f:Landroidx/sqlite/db/b;
invoke-interface {v0}, Landroidx/sqlite/db/b;->getDatabaseName()Ljava/lang/String;
move-result-object v0
return-object v0
.end method
.method public final getDelegate()Landroidx/sqlite/db/b;
.registers 2
iget-object v0, p0, Landroidx/room/f0;->f:Landroidx/sqlite/db/b;
return-object v0
.end method
.method public final declared-synchronized getWritableDatabase()Landroidx/sqlite/db/a;
.registers 2
monitor-enter p0
.line 1
:try_start_1
iget-boolean v0, p0, Landroidx/room/f0;->h:Z
if-nez v0, :cond_b
const/4 v0, 0x1
.line 2
invoke-virtual {p0, v0}, Landroidx/room/f0;->h(Z)V
.line 3
iput-boolean v0, p0, Landroidx/room/f0;->h:Z
.line 4
:cond_b
iget-object v0, p0, Landroidx/room/f0;->f:Landroidx/sqlite/db/b;
invoke-interface {v0}, Landroidx/sqlite/db/b;->getWritableDatabase()Landroidx/sqlite/db/a;
move-result-object v0
:try_end_11
.catchall {:try_start_1 .. :try_end_11} :catchall_13
monitor-exit p0
return-object v0
:catchall_13
move-exception v0
monitor-exit p0
throw v0
.end method
.method public final h(Z)V
.registers 7
.line 1
invoke-virtual {p0}, Landroidx/room/f0;->getDatabaseName()Ljava/lang/String;
move-result-object p1
.line 2
iget-object v0, p0, Landroidx/room/f0;->a:Landroid/content/Context;
invoke-virtual {v0, p1}, Landroid/content/Context;->getDatabasePath(Ljava/lang/String;)Ljava/io/File;
move-result-object v0
.line 3
iget-object v1, p0, Landroidx/room/f0;->g:Landroidx/room/c;
if-eqz v1, :cond_15
iget-boolean v1, v1, Landroidx/room/c;->l:Z
if-eqz v1, :cond_13
goto :goto_15
:cond_13
const/4 v1, 0x0
goto :goto_16
:cond_15
:goto_15
const/4 v1, 0x1
.line 4
:goto_16
new-instance v2, Landroidx/room/util/a;
iget-object v3, p0, Landroidx/room/f0;->a:Landroid/content/Context;
invoke-virtual {v3}, Landroid/content/Context;->getFilesDir()Ljava/io/File;
move-result-object v3
invoke-direct {v2, p1, v3, v1}, Landroidx/room/util/a;-><init>(Ljava/lang/String;Ljava/io/File;Z)V
.line 5
:try_start_21
iget-object v1, v2, Landroidx/room/util/a;->b:Ljava/util/concurrent/locks/Lock;
invoke-interface {v1}, Ljava/util/concurrent/locks/Lock;->lock()V
.line 6
iget-boolean v1, v2, Landroidx/room/util/a;->c:Z
:try_end_28
.catchall {:try_start_21 .. :try_end_28} :catchall_8d
if-eqz v1, :cond_44
.line 7
:try_start_2a
new-instance v1, Ljava/io/FileOutputStream;
iget-object v3, v2, Landroidx/room/util/a;->a:Ljava/io/File;
invoke-direct {v1, v3}, Ljava/io/FileOutputStream;-><init>(Ljava/io/File;)V
invoke-virtual {v1}, Ljava/io/FileOutputStream;->getChannel()Ljava/nio/channels/FileChannel;
move-result-object v1
iput-object v1, v2, Landroidx/room/util/a;->d:Ljava/nio/channels/FileChannel;
.line 8
invoke-virtual {v1}, Ljava/nio/channels/FileChannel;->lock()Ljava/nio/channels/FileLock;
:try_end_3a
.catch Ljava/io/IOException; {:try_start_2a .. :try_end_3a} :catch_3b
.catchall {:try_start_2a .. :try_end_3a} :catchall_8d
goto :goto_44
:catch_3b
move-exception p1
.line 9
:try_start_3c
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "Unable to grab copy lock."
invoke-direct {v0, v1, p1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v0
.line 10
:cond_44
:goto_44
invoke-virtual {v0}, Ljava/io/File;->exists()Z
move-result v1
:try_end_48
.catchall {:try_start_3c .. :try_end_48} :catchall_8d
if-nez v1, :cond_5a
.line 11
:try_start_4a
invoke-virtual {p0, v0}, Landroidx/room/f0;->a(Ljava/io/File;)V
:try_end_4d
.catch Ljava/io/IOException; {:try_start_4a .. :try_end_4d} :catch_51
.catchall {:try_start_4a .. :try_end_4d} :catchall_8d
.line 12
invoke-virtual {v2}, Landroidx/room/util/a;->a()V
return-void
:catch_51
move-exception p1
.line 13
:try_start_52
new-instance v0, Ljava/lang/RuntimeException;
const-string v1, "Unable to copy database file."
invoke-direct {v0, v1, p1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v0
.line 14
:cond_5a
iget-object v1, p0, Landroidx/room/f0;->g:Landroidx/room/c;
:try_end_5c
.catchall {:try_start_52 .. :try_end_5c} :catchall_8d
if-nez v1, :cond_62
.line 15
invoke-virtual {v2}, Landroidx/room/util/a;->a()V
return-void
.line 16
:cond_62
:try_start_62
invoke-static {v0}, Landroidx/room/util/c;->b(Ljava/io/File;)I
move-result v1
:try_end_66
.catch Ljava/io/IOException; {:try_start_62 .. :try_end_66} :catch_89
.catchall {:try_start_62 .. :try_end_66} :catchall_8d
.line 17
:try_start_66
iget v3, p0, Landroidx/room/f0;->e:I
:try_end_68
.catchall {:try_start_66 .. :try_end_68} :catchall_8d
if-ne v1, v3, :cond_6e
.line 18
invoke-virtual {v2}, Landroidx/room/util/a;->a()V
return-void
.line 19
:cond_6e
:try_start_6e
iget-object v4, p0, Landroidx/room/f0;->g:Landroidx/room/c;
invoke-virtual {v4, v1, v3}, Landroidx/room/c;->a(II)Z
move-result v1
:try_end_74
.catchall {:try_start_6e .. :try_end_74} :catchall_8d
if-eqz v1, :cond_7a
.line 20
invoke-virtual {v2}, Landroidx/room/util/a;->a()V
return-void
.line 21
:cond_7a
:try_start_7a
iget-object v1, p0, Landroidx/room/f0;->a:Landroid/content/Context;
invoke-virtual {v1, p1}, Landroid/content/Context;->deleteDatabase(Ljava/lang/String;)Z
move-result p1
:try_end_80
.catchall {:try_start_7a .. :try_end_80} :catchall_8d
if-eqz p1, :cond_85
.line 22
:try_start_82
invoke-virtual {p0, v0}, Landroidx/room/f0;->a(Ljava/io/File;)V
:try_end_85
.catch Ljava/io/IOException; {:try_start_82 .. :try_end_85} :catch_85
.catchall {:try_start_82 .. :try_end_85} :catchall_8d
.line 23
:catch_85
:cond_85
invoke-virtual {v2}, Landroidx/room/util/a;->a()V
return-void
:catch_89
invoke-virtual {v2}, Landroidx/room/util/a;->a()V
return-void
:catchall_8d
move-exception p1
invoke-virtual {v2}, Landroidx/room/util/a;->a()V
.line 24
throw p1
.end method
.method public final setWriteAheadLoggingEnabled(Z)V
.registers 3
iget-object v0, p0, Landroidx/room/f0;->f:Landroidx/sqlite/db/b;
invoke-interface {v0, p1}, Landroidx/sqlite/db/b;->setWriteAheadLoggingEnabled(Z)V
return-void
.end method