SDTreeFileScanner.smali
.class public Lcom/cleanmaster/service/scantree/SDTreeFileScanner;
.super Ljava/lang/Object;
.source "SDTreeFileScanner.java"
# interfaces
.implements Lcom/cleanmaster/service/scantree/interfaces/IScanner;
.implements Ljava/lang/Runnable;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;,
Lcom/cleanmaster/service/scantree/SDTreeFileScanner$a;
}
.end annotation
# static fields
.field private static g:Ljava/io/File;
# instance fields
.field private a:Ljava/util/concurrent/atomic/AtomicInteger;
.field private volatile b:Z
.field private volatile c:Z
.field private d:Lcom/cleanmaster/service/scantree/h;
.field private e:Ljava/util/concurrent/BlockingDeque;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/concurrent/BlockingDeque",
"<",
"Lcom/cleanmaster/service/scantree/i;",
">;"
}
.end annotation
.end field
.field private f:Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;
# direct methods
.method static constructor <clinit>()V
.registers 1
.prologue
.line 30
const/4 v0, 0x0
sput-object v0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->g:Ljava/io/File;
return-void
.end method
.method public constructor <init>()V
.registers 4
.prologue
const/4 v2, 0x0
const/4 v1, 0x0
.line 22
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 24
new-instance v0, Ljava/util/concurrent/atomic/AtomicInteger;
invoke-direct {v0, v1}, Ljava/util/concurrent/atomic/AtomicInteger;-><init>(I)V
iput-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->a:Ljava/util/concurrent/atomic/AtomicInteger;
.line 25
iput-boolean v1, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b:Z
.line 26
iput-boolean v1, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->c:Z
.line 27
iput-object v2, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->d:Lcom/cleanmaster/service/scantree/h;
.line 28
iput-object v2, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->e:Ljava/util/concurrent/BlockingDeque;
return-void
.end method
.method private a()V
.registers 2
.prologue
.line 76
invoke-static {}, Lcom/cleanmaster/service/scantree/c;->a()Lcom/cleanmaster/service/scantree/c;
move-result-object v0
invoke-virtual {v0, p0}, Lcom/cleanmaster/service/scantree/c;->a(Lcom/cleanmaster/service/scantree/SDTreeFileScanner;)V
.line 78
new-instance v0, Ljava/util/concurrent/LinkedBlockingDeque;
invoke-direct {v0}, Ljava/util/concurrent/LinkedBlockingDeque;-><init>()V
iput-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->e:Ljava/util/concurrent/BlockingDeque;
.line 79
sget-object v0, Lcom/cleanmaster/service/scantree/d;->a:Ljava/util/concurrent/ThreadPoolExecutor;
invoke-virtual {v0, p0}, Ljava/util/concurrent/ThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
.line 80
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->d:Lcom/cleanmaster/service/scantree/h;
invoke-direct {p0, v0}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->a(Lcom/cleanmaster/service/scantree/h;)V
.line 81
return-void
.end method
.method private a(Landroid/content/Context;Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;)V
.registers 6
.prologue
const/4 v2, 0x1
.line 60
iput-object p2, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->f:Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;
.line 62
invoke-direct {p0}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b()Lcom/cleanmaster/service/scantree/h;
move-result-object v0
iput-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->d:Lcom/cleanmaster/service/scantree/h;
.line 63
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->d:Lcom/cleanmaster/service/scantree/h;
if-nez v0, :cond_1b
.line 64
if-eqz p2, :cond_16
.line 65
const/4 v0, -0x3
const-string/jumbo v1, "\u8bbf\u95eeSD\u5361\u51fa\u9519"
invoke-interface {p2, v0, v1}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;->onError(ILjava/lang/String;)V
.line 67
:cond_16
iput-boolean v2, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b:Z
.line 68
iput-boolean v2, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->c:Z
.line 73
:goto_1a
return-void
.line 72
:cond_1b
invoke-direct {p0}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->a()V
goto :goto_1a
.end method
.method static synthetic a(Lcom/cleanmaster/service/scantree/SDTreeFileScanner;Landroid/content/Context;Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;)V
.registers 3
.prologue
.line 22
invoke-direct {p0, p1, p2}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->a(Landroid/content/Context;Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;)V
return-void
.end method
.method static synthetic a(Lcom/cleanmaster/service/scantree/SDTreeFileScanner;Lcom/cleanmaster/service/scantree/h;)V
.registers 2
.prologue
.line 22
invoke-direct {p0, p1}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b(Lcom/cleanmaster/service/scantree/h;)V
return-void
.end method
.method static synthetic a(Lcom/cleanmaster/service/scantree/SDTreeFileScanner;Lcom/cleanmaster/service/scantree/h;J)V
.registers 4
.prologue
.line 22
invoke-direct {p0, p1, p2, p3}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->a(Lcom/cleanmaster/service/scantree/h;J)V
return-void
.end method
.method private a(Lcom/cleanmaster/service/scantree/h;)V
.registers 4
.prologue
.line 109
new-instance v0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner$a;
invoke-direct {v0, p1, p0}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner$a;-><init>(Lcom/cleanmaster/service/scantree/h;Lcom/cleanmaster/service/scantree/SDTreeFileScanner;)V
.line 110
sget-object v1, Lcom/cleanmaster/service/scantree/d;->a:Ljava/util/concurrent/ThreadPoolExecutor;
invoke-virtual {v1, v0}, Ljava/util/concurrent/ThreadPoolExecutor;->execute(Ljava/lang/Runnable;)V
.line 111
return-void
.end method
.method private a(Lcom/cleanmaster/service/scantree/h;J)V
.registers 6
.prologue
.line 126
invoke-virtual {p1}, Lcom/cleanmaster/service/scantree/h;->d()Ljava/util/List;
move-result-object v0
.line 127
if-eqz v0, :cond_1a
.line 128
invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object v1
:goto_a
invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_1a
invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/cleanmaster/service/scantree/h;
.line 129
invoke-direct {p0, v0}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->a(Lcom/cleanmaster/service/scantree/h;)V
goto :goto_a
.line 132
:cond_1a
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->a:Ljava/util/concurrent/atomic/AtomicInteger;
invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->decrementAndGet()I
move-result v0
if-nez v0, :cond_25
.line 133
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b:Z
.line 135
:cond_25
invoke-direct {p0, p1, p2, p3}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b(Lcom/cleanmaster/service/scantree/h;J)V
.line 137
return-void
.end method
.method static synthetic a(Lcom/cleanmaster/service/scantree/SDTreeFileScanner;Ljava/io/File;)Z
.registers 3
.prologue
.line 22
invoke-direct {p0, p1}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b(Ljava/io/File;)Z
move-result v0
return v0
.end method
.method static synthetic a(Ljava/io/File;)Z
.registers 2
.prologue
.line 22
invoke-static {p0}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->c(Ljava/io/File;)Z
move-result v0
return v0
.end method
.method private b()Lcom/cleanmaster/service/scantree/h;
.registers 5
.annotation build Landroid/support/annotation/Nullable;
.end annotation
.prologue
.line 92
invoke-static {}, Landroid/os/Environment;->getExternalStorageDirectory()Ljava/io/File;
move-result-object v0
sput-object v0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->g:Ljava/io/File;
.line 93
sget-object v0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->g:Ljava/io/File;
invoke-virtual {v0}, Ljava/io/File;->getAbsoluteFile()Ljava/io/File;
move-result-object v0
.line 94
invoke-virtual {v0}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;
move-result-object v0
sget-object v1, Ljava/io/File;->separator:Ljava/lang/String;
invoke-virtual {v0, v1}, Ljava/lang/String;->split(Ljava/lang/String;)[Ljava/lang/String;
move-result-object v3
.line 96
if-nez v3, :cond_1a
.line 97
const/4 v1, 0x0
.line 105
:cond_19
return-object v1
.line 99
:cond_1a
const-string v0, "/"
invoke-static {v0}, Lcom/cleanmaster/service/scantree/h;->a(Ljava/lang/String;)Lcom/cleanmaster/service/scantree/h;
move-result-object v1
.line 100
const/4 v0, 0x1
:goto_21
array-length v2, v3
if-ge v0, v2, :cond_19
.line 101
aget-object v2, v3, v0
invoke-static {v2}, Lcom/cleanmaster/service/scantree/h;->a(Ljava/lang/String;)Lcom/cleanmaster/service/scantree/h;
move-result-object v2
.line 102
invoke-virtual {v1, v2}, Lcom/cleanmaster/service/scantree/h;->a(Lcom/cleanmaster/service/scantree/h;)V
.line 100
add-int/lit8 v0, v0, 0x1
move-object v1, v2
goto :goto_21
.end method
.method private b(Lcom/cleanmaster/service/scantree/h;)V
.registers 3
.prologue
.line 121
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->a:Ljava/util/concurrent/atomic/AtomicInteger;
invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->incrementAndGet()I
.line 122
return-void
.end method
.method private b(Lcom/cleanmaster/service/scantree/h;J)V
.registers 6
.prologue
.line 140
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->e:Ljava/util/concurrent/BlockingDeque;
if-nez v0, :cond_5
.line 144
:goto_4
return-void
.line 143
:cond_5
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->e:Ljava/util/concurrent/BlockingDeque;
new-instance v1, Lcom/cleanmaster/service/scantree/i;
invoke-direct {v1, p1, p2, p3}, Lcom/cleanmaster/service/scantree/i;-><init>(Lcom/cleanmaster/service/scantree/h;J)V
invoke-interface {v0, v1}, Ljava/util/concurrent/BlockingDeque;->push(Ljava/lang/Object;)V
goto :goto_4
.end method
.method private b(Ljava/io/File;)Z
.registers 7
.prologue
const/4 v0, 0x0
.line 148
invoke-virtual {p1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;
move-result-object v1
.line 149
sget-object v2, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->g:Ljava/io/File;
invoke-virtual {v2}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String;
move-result-object v2
.line 150
invoke-virtual {v2, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v3
if-eqz v3, :cond_12
.line 156
:cond_11
:goto_11
return v0
.line 152
:cond_12
invoke-virtual {v1}, Ljava/lang/String;->length()I
move-result v3
invoke-virtual {v2}, Ljava/lang/String;->length()I
move-result v4
if-le v3, v4, :cond_11
.line 155
invoke-virtual {v2}, Ljava/lang/String;->length()I
move-result v0
invoke-virtual {v1, v0}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object v0
.line 156
invoke-static {v0}, Lcom/cleanmaster/service/scantree/cloudconfig/ScanTreeConfig;->a(Ljava/lang/String;)Z
move-result v0
goto :goto_11
.end method
.method private c()Lcom/cleanmaster/service/scantree/h;
.registers 4
.prologue
.line 196
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->d:Lcom/cleanmaster/service/scantree/h;
if-nez v0, :cond_6
const/4 v0, 0x0
.line 205
:cond_5
return-object v0
.line 197
:cond_6
iget-object v1, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->d:Lcom/cleanmaster/service/scantree/h;
.line 198
invoke-virtual {v1}, Lcom/cleanmaster/service/scantree/h;->c()Lcom/cleanmaster/service/scantree/h;
move-result-object v0
move-object v2, v0
move-object v0, v1
move-object v1, v2
.line 200
:goto_f
if-eqz v1, :cond_5
.line 202
invoke-virtual {v1}, Lcom/cleanmaster/service/scantree/h;->c()Lcom/cleanmaster/service/scantree/h;
move-result-object v0
move-object v2, v0
move-object v0, v1
move-object v1, v2
.line 204
goto :goto_f
.end method
.method private c(Lcom/cleanmaster/service/scantree/h;J)V
.registers 6
.prologue
.line 209
if-eqz p1, :cond_8
const-wide/16 v0, 0x0
cmp-long v0, p2, v0
if-gtz v0, :cond_9
.line 214
:cond_8
return-void
.line 210
:cond_9
invoke-virtual {p1, p2, p3}, Lcom/cleanmaster/service/scantree/h;->a(J)V
.line 211
invoke-virtual {p1}, Lcom/cleanmaster/service/scantree/h;->c()Lcom/cleanmaster/service/scantree/h;
move-result-object v0
.line 214
:goto_10
if-eqz v0, :cond_8
.line 215
invoke-virtual {v0, p2, p3}, Lcom/cleanmaster/service/scantree/h;->a(J)V
.line 216
invoke-virtual {v0}, Lcom/cleanmaster/service/scantree/h;->c()Lcom/cleanmaster/service/scantree/h;
move-result-object v0
goto :goto_10
.end method
.method private static c(Ljava/io/File;)Z
.registers 5
.prologue
const/4 v0, 0x0
.line 160
invoke-virtual {p0}, Ljava/io/File;->getName()Ljava/lang/String;
move-result-object v1
.line 161
const-string v2, "."
invoke-virtual {v1, v2}, Ljava/lang/String;->lastIndexOf(Ljava/lang/String;)I
move-result v2
.line 162
const/4 v3, -0x1
if-ne v2, v3, :cond_f
.line 169
:cond_e
:goto_e
return v0
.line 164
:cond_f
add-int/lit8 v2, v2, 0x1
.line 165
invoke-virtual {v1}, Ljava/lang/String;->length()I
move-result v3
if-ge v2, v3, :cond_e
.line 168
invoke-virtual {v1, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object v1
invoke-static {v1}, Lcom/cleanmaster/base/util/c/a;->a(Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
.line 169
if-eqz v1, :cond_e
const/4 v0, 0x1
goto :goto_e
.end method
# virtual methods
.method public run()V
.registers 5
.prologue
.line 177
:cond_0
:try_start_0
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->e:Ljava/util/concurrent/BlockingDeque;
invoke-interface {v0}, Ljava/util/concurrent/BlockingDeque;->take()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/cleanmaster/service/scantree/i;
.line 178
invoke-virtual {v0}, Lcom/cleanmaster/service/scantree/i;->a()Lcom/cleanmaster/service/scantree/h;
move-result-object v1
.line 179
invoke-virtual {v0}, Lcom/cleanmaster/service/scantree/i;->b()J
move-result-wide v2
invoke-direct {p0, v1, v2, v3}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->c(Lcom/cleanmaster/service/scantree/h;J)V
:try_end_13
.catch Ljava/lang/InterruptedException; {:try_start_0 .. :try_end_13} :catch_37
.line 184
:goto_13
iget-boolean v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b:Z
if-eqz v0, :cond_0
.line 186
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->f:Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;
if-eqz v0, :cond_24
.line 187
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->f:Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;
invoke-direct {p0}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->c()Lcom/cleanmaster/service/scantree/h;
move-result-object v1
invoke-interface {v0, v1}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;->onFinishScan(Lcom/cleanmaster/service/scantree/h;)V
.line 189
:cond_24
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->c:Z
.line 190
iget-object v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->e:Ljava/util/concurrent/BlockingDeque;
invoke-interface {v0}, Ljava/util/concurrent/BlockingDeque;->clear()V
.line 191
invoke-static {}, Lcom/cleanmaster/service/scantree/cloudconfig/ScanTreeConfig;->d()V
.line 192
invoke-static {}, Lcom/cleanmaster/service/scantree/c;->a()Lcom/cleanmaster/service/scantree/c;
move-result-object v0
invoke-virtual {v0, p0}, Lcom/cleanmaster/service/scantree/c;->b(Lcom/cleanmaster/service/scantree/SDTreeFileScanner;)V
.line 193
return-void
.line 180
:catch_37
move-exception v0
.line 181
invoke-virtual {v0}, Ljava/lang/InterruptedException;->printStackTrace()V
goto :goto_13
.end method
.method public startScan(Landroid/content/Context;Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;)V
.registers 4
.prologue
.line 34
if-eqz p2, :cond_5
.line 35
invoke-interface {p2}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;->onStartScan()V
.line 38
:cond_5
invoke-static {}, Lcom/cleanmaster/service/scantree/cloudconfig/ScanTreeConfig;->h()Z
move-result v0
if-eqz v0, :cond_f
.line 39
invoke-direct {p0, p1, p2}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->a(Landroid/content/Context;Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;)V
.line 56
:goto_e
return-void
.line 42
:cond_f
new-instance v0, Lcom/cleanmaster/service/scantree/a;
invoke-direct {v0, p0, p1, p2}, Lcom/cleanmaster/service/scantree/a;-><init>(Lcom/cleanmaster/service/scantree/SDTreeFileScanner;Landroid/content/Context;Lcom/cleanmaster/service/scantree/SDTreeFileScanner$Callback;)V
invoke-static {v0}, Lcom/cleanmaster/service/scantree/cloudconfig/ScanTreeConfig;->a(Lcom/cleanmaster/service/scantree/cloudconfig/ScanTreeConfig$IConfigResult;)V
goto :goto_e
.end method
.method public stopScan()V
.registers 5
.prologue
.line 114
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b:Z
.line 115
iget-boolean v0, p0, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->c:Z
if-eqz v0, :cond_8
.line 117
:goto_7
return-void
.line 116
:cond_8
const/4 v0, 0x0
const-wide/16 v2, 0x0
invoke-direct {p0, v0, v2, v3}, Lcom/cleanmaster/service/scantree/SDTreeFileScanner;->b(Lcom/cleanmaster/service/scantree/h;J)V
goto :goto_7
.end method