From 31cee5b0f521c50b13186465d2199d2cdb62e484 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Sat, 25 Jul 2026 19:02:09 +0800 Subject: [PATCH] =?UTF-8?q?refactor(download):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=A8=A1=E5=9D=97=E4=BB=A3=E7=A0=81=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=92=8C=E9=80=BB=E8=BE=91=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 格式化 ChildHandleDialog 类代码缩进和空行 - 优化 ChildHandleDialog 中的 onClick 方法使用 if-else 替代 switch - 格式化 M3U8LiveDLoadActivity 类代码缩进和空行 - 优化 M3U8LiveDLoadActivity 中的菜单点击事件处理逻辑 - 格式化 M3U8VodDLoadActivity 类代码缩进和空行 - 添加必要的 import 语句和空行分隔 - 统一代码风格和提高可读性 --- AppFrame/build.gradle | 107 ++-- Aria/build.gradle | 62 +- AriaAnnotations/build.gradle | 12 +- AriaCompiler/build.gradle | 22 +- FtpComponent/build.gradle | 58 +- HttpComponent/build.gradle | 55 +- HttpComponent/src/main/AndroidManifest.xml | 3 +- M3U8Component/build.gradle | 59 +- M3U8Component/src/main/AndroidManifest.xml | 3 +- PublicComponent/build.gradle | 58 +- SFtpComponent/build.gradle | 61 +- SFtpComponent/src/main/AndroidManifest.xml | 3 +- app/build.gradle | 37 +- app/src/main/AndroidManifest.xml | 127 ++-- .../com/arialyy/simple/DbTestActivity.java | 102 ++-- .../simple/core/download/DownloadDialog.java | 162 ++--- .../core/download/DownloadDialogFragment.java | 202 ++++--- .../core/download/DownloadPopupWindow.java | 49 +- .../download/HighestPriorityActivity.java | 353 +++++------ .../core/download/SingleTaskActivity.java | 480 +++++++-------- .../download/group/ChildHandleDialog.java | 245 ++++---- .../download/m3u8/M3U8LiveDLoadActivity.java | 397 +++++++------ .../download/m3u8/M3U8VodDLoadActivity.java | 562 +++++++++--------- .../download/mutil/MultiTaskListActivity.java | 233 ++++---- .../simple/core/test/AnyRunActivity.java | 107 ++-- .../arialyy/simple/widget/ProgressLayout.java | 416 ++++++------- build.gradle | 6 +- gradle/mavenCentral-release.gradle | 69 ++- 28 files changed, 2109 insertions(+), 1941 deletions(-) diff --git a/AppFrame/build.gradle b/AppFrame/build.gradle index c6be7353..0069327e 100644 --- a/AppFrame/build.gradle +++ b/AppFrame/build.gradle @@ -1,57 +1,76 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-kapt' +plugins { + id 'com.android.library' + id 'org.jetbrains.kotlin.android' + id 'kotlin-kapt' +} android { - compileSdkVersion rootProject.ext.compileSdkVersion - buildToolsVersion rootProject.ext.buildToolsVersion + namespace "com.lyy.frame" - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - buildTypes { - debug{ - debuggable true + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + + lintOptions { + abortOnError false + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + buildFeatures { + dataBinding true + } + + buildTypes { + debug { + debuggable true + } + + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } } - } - dataBinding { - enabled = true - } - lintOptions { - abortOnError false - } } dependencies { - api fileTree(dir: 'libs', include: ['*.jar']) - androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { - exclude group: 'com.android.support', module: 'support-annotations' - }) - testImplementation 'junit:junit:4.12' - api "androidx.appcompat:appcompat:${rootProject.ext.XAppcompatVersion}" - api 'com.google.code.gson:gson:2.8.2' - api 'io.reactivex:rxandroid:1.2.0' - api 'io.reactivex:rxjava:1.1.5' - implementation 'com.squareup.okhttp3:okhttp:3.10.0' - implementation 'com.squareup.retrofit2:retrofit:2.1.0' - implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0' - implementation 'com.squareup.retrofit2:converter-gson:2.1.0' - implementation 'com.squareup.okhttp3:logging-interceptor:3.2.0' - implementation 'com.github.franmontiel:PersistentCookieJar:v1.0.1' - implementation 'androidx.multidex:multidex:2.0.1' + api fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { + exclude group: 'com.android.support', module: 'support-annotations' + }) + testImplementation 'junit:junit:4.12' - api 'androidx.lifecycle:lifecycle-runtime:2.0.0' - api 'androidx.lifecycle:lifecycle-extensions:2.0.0' - kapt 'androidx.lifecycle:lifecycle-compiler:2.0.0' + api "androidx.appcompat:appcompat:${rootProject.ext.XAppcompatVersion}" + api 'com.google.code.gson:gson:2.8.2' + api 'io.reactivex:rxandroid:1.2.0' + api 'io.reactivex:rxjava:1.1.5' + + implementation 'com.squareup.okhttp3:okhttp:3.10.0' + implementation 'com.squareup.retrofit2:retrofit:2.1.0' + implementation 'com.squareup.retrofit2:adapter-rxjava:2.1.0' + implementation 'com.squareup.retrofit2:converter-gson:2.1.0' + implementation 'com.squareup.okhttp3:logging-interceptor:3.2.0' + implementation 'com.github.franmontiel:PersistentCookieJar:v1.0.1' + implementation 'androidx.multidex:multidex:2.0.1' + + api 'androidx.lifecycle:lifecycle-runtime:2.0.0' + api 'androidx.lifecycle:lifecycle-extensions:2.0.0' + kapt 'androidx.lifecycle:lifecycle-compiler:2.0.0' } diff --git a/Aria/build.gradle b/Aria/build.gradle index c795d6b6..2d1e3ed3 100644 --- a/Aria/build.gradle +++ b/Aria/build.gradle @@ -1,39 +1,51 @@ apply plugin: 'com.android.library' android { - compileSdkVersion rootProject.ext.compileSdkVersion - buildToolsVersion rootProject.ext.buildToolsVersion + namespace "com.arialyy.aria" - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode rootProject.ext.versionCode - versionName rootProject.ext.versionName - } - buildTypes { - debug{ - debuggable true + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion + + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode rootProject.ext.versionCode + versionName rootProject.ext.versionName } - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + + lintOptions { + abortOnError false } - } - lintOptions { - abortOnError false - } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + buildTypes { + debug { + debuggable true + } + + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + } + dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.12' + implementation fileTree(include: ['*.jar'], dir: 'libs') + testImplementation 'junit:junit:4.12' // implementation "androidx.appcompat:appcompat:${rootProject.ext.XAppcompatVersion}" - api project(path: ':AriaAnnotations') - api project(path: ':PublicComponent') - api project(path: ':HttpComponent') + api project(path: ':AriaAnnotations') + api project(path: ':PublicComponent') + api project(path: ':HttpComponent') } //apply from: 'bintray-release.gradle' -ext{ - PUBLISH_ARTIFACT_ID = 'core' +ext { + PUBLISH_ARTIFACT_ID = 'core' } apply from: '../gradle/mavenCentral-release.gradle' \ No newline at end of file diff --git a/AriaAnnotations/build.gradle b/AriaAnnotations/build.gradle index a77f0adb..11f36045 100644 --- a/AriaAnnotations/build.gradle +++ b/AriaAnnotations/build.gradle @@ -1,19 +1,19 @@ apply plugin: 'java' tasks.withType(JavaCompile) { - options.encoding = "UTF-8" + options.encoding = "UTF-8" } -sourceCompatibility = JavaVersion.VERSION_1_7 -targetCompatibility = JavaVersion.VERSION_1_7 +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) } //apply from: 'bintray-release.gradle' -ext{ - PUBLISH_ARTIFACT_ID = 'annotations' +ext { + PUBLISH_ARTIFACT_ID = 'annotations' } apply from: '../gradle/mavenCentral-release.gradle' \ No newline at end of file diff --git a/AriaCompiler/build.gradle b/AriaCompiler/build.gradle index 7ad5069d..cb85af26 100644 --- a/AriaCompiler/build.gradle +++ b/AriaCompiler/build.gradle @@ -1,22 +1,22 @@ apply plugin: 'java' tasks.withType(JavaCompile) { - options.encoding = "UTF-8" + options.encoding = "UTF-8" } -sourceCompatibility = JavaVersion.VERSION_1_7 -targetCompatibility = JavaVersion.VERSION_1_7 +sourceCompatibility = JavaVersion.VERSION_1_8 +targetCompatibility = JavaVersion.VERSION_1_8 dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'com.google.auto:auto-common:0.10' - implementation 'com.google.auto.service:auto-service:1.0-rc6' - annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6' - implementation 'com.squareup:javapoet:1.9.0' - implementation project(':AriaAnnotations') + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.google.auto:auto-common:0.10' + implementation 'com.google.auto.service:auto-service:1.0-rc6' + annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6' + implementation 'com.squareup:javapoet:1.9.0' + implementation project(':AriaAnnotations') } //apply from: 'bintray-release.gradle' -ext{ - PUBLISH_ARTIFACT_ID = 'compiler' +ext { + PUBLISH_ARTIFACT_ID = 'compiler' } apply from: '../gradle/mavenCentral-release.gradle' \ No newline at end of file diff --git a/FtpComponent/build.gradle b/FtpComponent/build.gradle index 701738be..de58fb9a 100644 --- a/FtpComponent/build.gradle +++ b/FtpComponent/build.gradle @@ -1,42 +1,50 @@ apply plugin: 'com.android.library' android { - compileSdkVersion rootProject.ext.compileSdkVersion - buildToolsVersion rootProject.ext.buildToolsVersion + namespace "com.example.ariaftpcomponent" - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode rootProject.ext.versionCode - versionName rootProject.ext.versionName + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles 'consumer-rules.pro' - } + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode rootProject.ext.versionCode + versionName rootProject.ext.versionName - buildTypes { - debug{ - debuggable true + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles 'consumer-rules.pro' } - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } + lintOptions { + abortOnError false + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + buildTypes { + debug { + debuggable true + } + + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation project(path: ':PublicComponent') + implementation project(path: ':PublicComponent') } //apply from: 'bintray-release.gradle' -ext{ - PUBLISH_ARTIFACT_ID = 'ftp' +ext { + PUBLISH_ARTIFACT_ID = 'ftp' } apply from: '../gradle/mavenCentral-release.gradle' \ No newline at end of file diff --git a/HttpComponent/build.gradle b/HttpComponent/build.gradle index d9e3222d..5603dc74 100644 --- a/HttpComponent/build.gradle +++ b/HttpComponent/build.gradle @@ -1,41 +1,50 @@ apply plugin: 'com.android.library' android { - compileSdkVersion rootProject.ext.compileSdkVersion - buildToolsVersion rootProject.ext.buildToolsVersion + namespace "com.arialyy.aria.http" - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode rootProject.ext.versionCode - versionName rootProject.ext.versionName + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion - consumerProguardFiles 'consumer-rules.pro' - } + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode rootProject.ext.versionCode + versionName rootProject.ext.versionName - buildTypes { - debug{ - debuggable true + consumerProguardFiles 'consumer-rules.pro' } - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + + lintOptions { + abortOnError false + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + buildTypes { + debug { + debuggable true + } + + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } } - } - lintOptions { - abortOnError false - } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation project(path: ':PublicComponent') + implementation project(path: ':PublicComponent') } //apply from: 'bintray-release.gradle' -ext{ - PUBLISH_ARTIFACT_ID = 'http' +ext { + PUBLISH_ARTIFACT_ID = 'http' } apply from: '../gradle/mavenCentral-release.gradle' \ No newline at end of file diff --git a/HttpComponent/src/main/AndroidManifest.xml b/HttpComponent/src/main/AndroidManifest.xml index bb0d2bdf..a10b36fe 100644 --- a/HttpComponent/src/main/AndroidManifest.xml +++ b/HttpComponent/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/M3U8Component/build.gradle b/M3U8Component/build.gradle index 834a5421..b7a59f2a 100644 --- a/M3U8Component/build.gradle +++ b/M3U8Component/build.gradle @@ -1,43 +1,52 @@ apply plugin: 'com.android.library' android { - compileSdkVersion rootProject.ext.compileSdkVersion - buildToolsVersion rootProject.ext.buildToolsVersion + namespace "com.arialyy.aria.m3u8" - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode rootProject.ext.versionCode - versionName rootProject.ext.versionName + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles 'consumer-rules.pro' - } + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode rootProject.ext.versionCode + versionName rootProject.ext.versionName - buildTypes { - debug{ - debuggable true + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles 'consumer-rules.pro' } - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + + lintOptions { + abortOnError false + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + buildTypes { + debug { + debuggable true + } + + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } } - } - lintOptions { - abortOnError false - } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation project(path: ':HttpComponent') - implementation project(path: ':PublicComponent') + implementation project(path: ':HttpComponent') + implementation project(path: ':PublicComponent') } //apply from: 'bintray-release.gradle' -ext{ - PUBLISH_ARTIFACT_ID = 'm3u8' +ext { + PUBLISH_ARTIFACT_ID = 'm3u8' } apply from: '../gradle/mavenCentral-release.gradle' \ No newline at end of file diff --git a/M3U8Component/src/main/AndroidManifest.xml b/M3U8Component/src/main/AndroidManifest.xml index d1b50eee..f4f6bbdf 100644 --- a/M3U8Component/src/main/AndroidManifest.xml +++ b/M3U8Component/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/PublicComponent/build.gradle b/PublicComponent/build.gradle index bcf9571f..5a46202e 100644 --- a/PublicComponent/build.gradle +++ b/PublicComponent/build.gradle @@ -1,42 +1,50 @@ apply plugin: 'com.android.library' android { - compileSdkVersion rootProject.ext.compileSdkVersion - buildToolsVersion rootProject.ext.buildToolsVersion + namespace "com.arialyy.aria.publiccomponent" - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode rootProject.ext.versionCode - versionName rootProject.ext.versionName + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles 'consumer-rules.pro' - } + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode rootProject.ext.versionCode + versionName rootProject.ext.versionName - buildTypes { - debug{ - debuggable true + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles 'consumer-rules.pro' } - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - } - } - lintOptions { - abortOnError false - } + lintOptions { + abortOnError false + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + buildTypes { + debug { + debuggable true + } + + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - testImplementation 'junit:junit:4.12' + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation 'junit:junit:4.12' } //apply from: 'bintray-release.gradle' -ext{ - PUBLISH_ARTIFACT_ID = 'public' +ext { + PUBLISH_ARTIFACT_ID = 'public' } apply from: '../gradle/mavenCentral-release.gradle' \ No newline at end of file diff --git a/SFtpComponent/build.gradle b/SFtpComponent/build.gradle index 66af9f6e..e57efbb4 100644 --- a/SFtpComponent/build.gradle +++ b/SFtpComponent/build.gradle @@ -1,44 +1,53 @@ apply plugin: 'com.android.library' android { - compileSdkVersion rootProject.ext.compileSdkVersion - buildToolsVersion rootProject.ext.buildToolsVersion + namespace "com.arialyy.aria.sftp" - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode rootProject.ext.versionCode - versionName rootProject.ext.versionName + compileSdkVersion rootProject.ext.compileSdkVersion + buildToolsVersion rootProject.ext.buildToolsVersion - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles 'consumer-rules.pro' - } + defaultConfig { + minSdkVersion rootProject.ext.minSdkVersion + targetSdkVersion rootProject.ext.targetSdkVersion + versionCode rootProject.ext.versionCode + versionName rootProject.ext.versionName - buildTypes { - debug{ - debuggable true + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles 'consumer-rules.pro' } - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + + lintOptions { + abortOnError false + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + buildTypes { + debug { + debuggable true + } + + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } } - } - lintOptions { - abortOnError false - } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) - api "com.jcraft:jsch:0.1.55" - api "com.jcraft:jzlib:1.1.3" - implementation project(path: ':PublicComponent') + api "com.jcraft:jsch:0.1.55" + api "com.jcraft:jzlib:1.1.3" + implementation project(path: ':PublicComponent') } //apply from: 'bintray-release.gradle' -ext{ - PUBLISH_ARTIFACT_ID = 'sftp' +ext { + PUBLISH_ARTIFACT_ID = 'sftp' } apply from: '../gradle/mavenCentral-release.gradle' \ No newline at end of file diff --git a/SFtpComponent/src/main/AndroidManifest.xml b/SFtpComponent/src/main/AndroidManifest.xml index 02ef15d0..828bbed1 100644 --- a/SFtpComponent/src/main/AndroidManifest.xml +++ b/SFtpComponent/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/app/build.gradle b/app/build.gradle index cf5939a6..b76b57e7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,13 +5,17 @@ plugins { } android { + namespace "com.arialyy.simple" + compileSdkVersion rootProject.ext.compileSdkVersion buildToolsVersion rootProject.ext.buildToolsVersion defaultConfig { applicationId "com.arialyy.simple" + minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion + versionCode 1 versionName "1.0" multiDexEnabled true @@ -20,6 +24,25 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } + + lintOptions { + abortOnError false + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + buildFeatures { + dataBinding true + buildConfig true + } + signingConfigs { release { storeFile file("lyy.keystore") @@ -35,6 +58,7 @@ android { debuggable true minifyEnabled false //混淆 } + release { zipAlignEnabled true minifyEnabled true @@ -43,18 +67,11 @@ android { } } - dataBinding { - enabled = true - } - packagingOptions { exclude 'META-INF/services/javax.annotation.processing.Processor' merge 'META-INF/services/com.arialyy.aria.core.inf.IUtil' } - lintOptions { - abortOnError false - } } dependencies { @@ -65,16 +82,18 @@ dependencies { androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0' + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7' + implementation 'androidx.cardview:cardview:1.0.0' implementation 'com.google.android.material:material:1.0.0' implementation "org.jetbrains.kotlin:kotlin-stdlib:${rootProject.ext.kotlin_version}" api 'com.github.PhilJay:MPAndroidChart:v3.0.3' - debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4' + implementation 'com.github.bumptech.glide:glide:3.7.0' implementation 'com.pddstudio:highlightjs-android:1.5.0' implementation 'org.greenrobot:eventbus:3.1.1' - implementation project(':AppFrame') + implementation project(':AppFrame') // aria kapt project(':AriaCompiler') implementation project(':Aria') diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c7abf97c..11226f4c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,72 +1,77 @@ + package="com.arialyy.simple" + android:sharedUserId="com.arialyy"> - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - + + + - - - - - + + + + + + + + + + + + + + + + + + + - + + + + + + + diff --git a/app/src/main/java/com/arialyy/simple/DbTestActivity.java b/app/src/main/java/com/arialyy/simple/DbTestActivity.java index 8815192a..200179b2 100644 --- a/app/src/main/java/com/arialyy/simple/DbTestActivity.java +++ b/app/src/main/java/com/arialyy/simple/DbTestActivity.java @@ -3,69 +3,69 @@ package com.arialyy.simple; import android.os.Bundle; import android.util.Log; import android.view.View; + import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.download.DTaskWrapper; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.orm.DbEntity; import com.arialyy.simple.base.BaseActivity; import com.arialyy.simple.databinding.ActivityDbTestBinding; + import java.util.ArrayList; import java.util.List; import java.util.UUID; public class DbTestActivity extends BaseActivity { - @Override - protected int setLayoutId() { - return R.layout.activity_db_test; - } - - @Override - protected void init(Bundle savedInstanceState) { - super.init(savedInstanceState); - } - - public void onClick(View view) { - switch (view.getId()) { - case R.id.insert: - insertManyRecord(10000); - break; - case R.id.search: - break; - case R.id.search_all: - searchAll(); - break; - } - } - - private void searchAll() { - long startT = System.currentTimeMillis(); - //List data = DownloadEntity.findRelationData(DownloadEntity.class); - - long endT = System.currentTimeMillis(); - Log.d(TAG, "search_time=" + (endT - startT)); - } - - private void insertManyRecord(int len) { - long startT = System.currentTimeMillis(); - List datas = new ArrayList<>(); - for (int i = 0; i < len; i++) { - String key = UUID.randomUUID().toString(); - String url = "https://blog.csdn.net/carefree31441/article/details/3998553"; - - DownloadEntity entity = new DownloadEntity(); - entity.setUrl(url); - entity.setFileName("ssssssssssssssssss"); - entity.setFilePath(key); - - DTaskWrapper dte = new DTaskWrapper(entity); - - datas.add(entity); + @Override + protected int setLayoutId() { + return R.layout.activity_db_test; } - //AbsEntity.insertManyData(DownloadEntity.class, datas); - AbsEntity.saveAll(datas); - long endT = System.currentTimeMillis(); + @Override + protected void init(Bundle savedInstanceState) { + super.init(savedInstanceState); + } - Log.d(TAG, "insert_time=" + (endT - startT)); - } + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.insert) { + insertManyRecord(10000); + } else if (id == R.id.search) { + + } else if (id == R.id.search_all) { + searchAll(); + } + } + + private void searchAll() { + long startT = System.currentTimeMillis(); + //List data = DownloadEntity.findRelationData(DownloadEntity.class); + + long endT = System.currentTimeMillis(); + Log.d(TAG, "search_time=" + (endT - startT)); + } + + private void insertManyRecord(int len) { + long startT = System.currentTimeMillis(); + List datas = new ArrayList<>(); + for (int i = 0; i < len; i++) { + String key = UUID.randomUUID().toString(); + String url = "https://blog.csdn.net/carefree31441/article/details/3998553"; + + DownloadEntity entity = new DownloadEntity(); + entity.setUrl(url); + entity.setFileName("ssssssssssssssssss"); + entity.setFilePath(key); + + DTaskWrapper dte = new DTaskWrapper(entity); + + datas.add(entity); + } + + //AbsEntity.insertManyData(DownloadEntity.class, datas); + AbsEntity.saveAll(datas); + long endT = System.currentTimeMillis(); + + Log.d(TAG, "insert_time=" + (endT - startT)); + } } diff --git a/app/src/main/java/com/arialyy/simple/core/download/DownloadDialog.java b/app/src/main/java/com/arialyy/simple/core/download/DownloadDialog.java index de3c5d70..2c3b19ec 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/DownloadDialog.java +++ b/app/src/main/java/com/arialyy/simple/core/download/DownloadDialog.java @@ -21,6 +21,7 @@ import android.os.Environment; import android.view.View; import android.widget.Button; import android.widget.TextView; + import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; @@ -34,95 +35,98 @@ import com.arialyy.simple.widget.HorizontalProgressBarWithNumber; * Created by AriaL on 2017/1/2. */ public class DownloadDialog extends AbsDialog implements View.OnClickListener { - private HorizontalProgressBarWithNumber mPb; - private Button mStart; - private Button mCancel; - private TextView mSize; - private TextView mSpeed; - private long mTaskId = -1; + private HorizontalProgressBarWithNumber mPb; + private Button mStart; + private Button mCancel; + private TextView mSize; + private TextView mSpeed; + private long mTaskId = -1; - private static final String DOWNLOAD_URL = - "http://sdkdown.muzhiwan.com/openfile/2019/07/12/com.nswj.acing.mzw_5d283abee9a3c.apk"; + private static final String DOWNLOAD_URL = + "http://sdkdown.muzhiwan.com/openfile/2019/07/12/com.nswj.acing.mzw_5d283abee9a3c.apk"; - public DownloadDialog(Context context) { - super(context); - init(); - } - - @Override protected int setLayoutId() { - return R.layout.dialog_download; - } - - private void init() { - Aria.download(this).register(); - mPb = findViewById(R.id.progressBar); - mStart = findViewById(R.id.start); - mCancel = findViewById(R.id.cancel); - mSize = findViewById(R.id.size); - mSpeed = findViewById(R.id.speed); - DownloadEntity entity = Aria.download(this).getFirstDownloadEntity(DOWNLOAD_URL); - if (entity != null) { - mSize.setText(CommonUtil.formatFileSize(entity.getFileSize())); - int p = (int) (entity.getCurrentProgress() * 100 / entity.getFileSize()); - mPb.setProgress(p); - int state = entity.getState(); - mTaskId = entity.getId(); + public DownloadDialog(Context context) { + super(context); + init(); } - mStart.setOnClickListener(this); - mCancel.setOnClickListener(this); - } - @Override - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - if (mTaskId == -1) { - mTaskId = Aria.download(this) - .load(DOWNLOAD_URL) - .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/女神危机.apk") - .create(); - mStart.setText(getContext().getString(R.string.stop)); - break; + @Override + protected int setLayoutId() { + return R.layout.dialog_download; + } + + private void init() { + Aria.download(this).register(); + mPb = findViewById(R.id.progressBar); + mStart = findViewById(R.id.start); + mCancel = findViewById(R.id.cancel); + mSize = findViewById(R.id.size); + mSpeed = findViewById(R.id.speed); + DownloadEntity entity = Aria.download(this).getFirstDownloadEntity(DOWNLOAD_URL); + if (entity != null) { + mSize.setText(CommonUtil.formatFileSize(entity.getFileSize())); + int p = (int) (entity.getCurrentProgress() * 100 / entity.getFileSize()); + mPb.setProgress(p); + int state = entity.getState(); + mTaskId = entity.getId(); } - if (Aria.download(this).load(mTaskId).isRunning()) { - Aria.download(this).load(mTaskId).stop(); - mStart.setText(getContext().getString(R.string.resume)); - } else { - Aria.download(this).load(mTaskId).resume(); - mStart.setText(getContext().getString(R.string.stop)); + mStart.setOnClickListener(this); + mCancel.setOnClickListener(this); + } + + @Override + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.start) { + if (mTaskId == -1) { + mTaskId = Aria.download(this) + .load(DOWNLOAD_URL) + .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/女神危机.apk") + .create(); + mStart.setText(getContext().getString(R.string.stop)); + return; + } + if (Aria.download(this).load(mTaskId).isRunning()) { + Aria.download(this).load(mTaskId).stop(); + mStart.setText(getContext().getString(R.string.resume)); + } else { + Aria.download(this).load(mTaskId).resume(); + mStart.setText(getContext().getString(R.string.stop)); + } + } else if (id == R.id.cancel) { + Aria.download(this).load(mTaskId).cancel(); + mTaskId = -1; + mStart.setText(getContext().getString(R.string.start)); } - break; - - case R.id.cancel: - Aria.download(this).load(mTaskId).cancel(); - mTaskId = -1; - mStart.setText(getContext().getString(R.string.start)); - break; } - } - @Download.onTaskPre public void onTaskPre(DownloadTask task) { - mSize.setText(CommonUtil.formatFileSize(task.getFileSize())); - } - - @Download.onTaskStop public void onTaskStop(DownloadTask task) { - mSpeed.setText(task.getConvertSpeed()); - } - - @Download.onTaskCancel public void onTaskCancel(DownloadTask task) { - mPb.setProgress(0); - mSpeed.setText(task.getConvertSpeed()); - } - - @Download.onTaskRunning public void onTaskRunning(DownloadTask task) { - if (task.getKey().equals(DOWNLOAD_URL)) { - mPb.setProgress(task.getPercent()); - mSpeed.setText(task.getConvertSpeed()); + @Download.onTaskPre + public void onTaskPre(DownloadTask task) { + mSize.setText(CommonUtil.formatFileSize(task.getFileSize())); } - } - @Override protected void dataCallback(int result, Object obj) { + @Download.onTaskStop + public void onTaskStop(DownloadTask task) { + mSpeed.setText(task.getConvertSpeed()); + } - } + @Download.onTaskCancel + public void onTaskCancel(DownloadTask task) { + mPb.setProgress(0); + mSpeed.setText(task.getConvertSpeed()); + } + + @Download.onTaskRunning + public void onTaskRunning(DownloadTask task) { + if (task.getKey().equals(DOWNLOAD_URL)) { + mPb.setProgress(task.getPercent()); + mSpeed.setText(task.getConvertSpeed()); + } + } + + @Override + protected void dataCallback(int result, Object obj) { + + } } diff --git a/app/src/main/java/com/arialyy/simple/core/download/DownloadDialogFragment.java b/app/src/main/java/com/arialyy/simple/core/download/DownloadDialogFragment.java index 2929a91f..37a11e5d 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/DownloadDialogFragment.java +++ b/app/src/main/java/com/arialyy/simple/core/download/DownloadDialogFragment.java @@ -5,6 +5,7 @@ import android.os.Bundle; import android.os.Environment; import android.view.View; import android.widget.Toast; + import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; @@ -19,110 +20,119 @@ import com.arialyy.simple.util.AppUtil; /** * Created by lyy on 2017/8/8. */ -@SuppressLint("ValidFragment") public class DownloadDialogFragment - extends BaseDialog implements View.OnClickListener { +@SuppressLint("ValidFragment") +public class DownloadDialogFragment + extends BaseDialog implements View.OnClickListener { - private DownloadEntity mEntity; + private DownloadEntity mEntity; - private static final String DOWNLOAD_URL = - "http://res3.d.cn/android/new/game/2/78702/fzjh_1499390260312.apk?f=web_1"; + private static final String DOWNLOAD_URL = + "http://res3.d.cn/android/new/game/2/78702/fzjh_1499390260312.apk?f=web_1"; - protected DownloadDialogFragment(Object obj) { - super(obj); - } - - @Override protected void init(Bundle savedInstanceState) { - super.init(savedInstanceState); - Aria.download(this).register(); - mEntity = Aria.download(this).getFirstDownloadEntity(DOWNLOAD_URL); - if (mEntity != null) { - if (mEntity.getState() == IEntity.STATE_RUNNING) { - getBinding().setStateStr(getString(R.string.stop)); - } else { - getBinding().setStateStr(getString(R.string.resume)); - } - - getBinding().setFileSize(CommonUtil.formatFileSize(mEntity.getFileSize())); - getBinding().setProgress((int) (mEntity.getCurrentProgress() * 100 / mEntity.getFileSize())); + protected DownloadDialogFragment(Object obj) { + super(obj); } - mRootView.findViewById(R.id.start).setOnClickListener(this); - mRootView.findViewById(R.id.cancel).setOnClickListener(this); - } - @Override protected int setLayoutId() { - return R.layout.dialog_fragment_download; - } + @Override + protected void init(Bundle savedInstanceState) { + super.init(savedInstanceState); + Aria.download(this).register(); + mEntity = Aria.download(this).getFirstDownloadEntity(DOWNLOAD_URL); + if (mEntity != null) { + if (mEntity.getState() == IEntity.STATE_RUNNING) { + getBinding().setStateStr(getString(R.string.stop)); + } else { + getBinding().setStateStr(getString(R.string.resume)); + } - @Override public void onDestroy() { - super.onDestroy(); - Aria.download(this).unRegister(); - } - - @Download.onPre(DOWNLOAD_URL) protected void onPre(DownloadTask task) { - } - - @Download.onTaskStart(DOWNLOAD_URL) void taskStart(DownloadTask task) { - getBinding().setFileSize(task.getConvertFileSize()); - } - - @Download.onTaskRunning(DOWNLOAD_URL) protected void running(DownloadTask task) { - long len = task.getFileSize(); - if (len == 0) { - getBinding().setProgress(0); - } else { - getBinding().setProgress(task.getPercent()); - } - getBinding().setSpeed(task.getConvertSpeed()); - } - - @Download.onTaskResume(DOWNLOAD_URL) void taskResume(DownloadTask task) { - } - - @Download.onTaskStop(DOWNLOAD_URL) void taskStop(DownloadTask task) { - getBinding().setSpeed(""); - } - - @Download.onTaskCancel(DOWNLOAD_URL) void taskCancel(DownloadTask task) { - getBinding().setProgress(0); - Toast.makeText(getContext(), "取消下载", Toast.LENGTH_SHORT).show(); - getBinding().setSpeed(""); - } - - @Download.onTaskFail(DOWNLOAD_URL) void taskFail(DownloadTask task) { - Toast.makeText(getContext(), "下载失败", Toast.LENGTH_SHORT).show(); - } - - @Download.onTaskComplete(DOWNLOAD_URL) void taskComplete(DownloadTask task) { - getBinding().setProgress(100); - Toast.makeText(getContext(), "下载完成", Toast.LENGTH_SHORT).show(); - getBinding().setSpeed(""); - } - - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - if (!AppUtil.chekEntityValid(mEntity)) { - Aria.download(this) - .load(DOWNLOAD_URL) - .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/放置江湖.apk") - .create(); - getBinding().setStateStr(getString(R.string.stop)); - break; + getBinding().setFileSize(CommonUtil.formatFileSize(mEntity.getFileSize())); + getBinding().setProgress((int) (mEntity.getCurrentProgress() * 100 / mEntity.getFileSize())); } - if (Aria.download(this).load(mEntity.getId()).isRunning()) { - Aria.download(this).load(mEntity.getId()).stop(); - getBinding().setStateStr(getString(R.string.resume)); + mRootView.findViewById(R.id.start).setOnClickListener(this); + mRootView.findViewById(R.id.cancel).setOnClickListener(this); + } + + @Override + protected int setLayoutId() { + return R.layout.dialog_fragment_download; + } + + @Override + public void onDestroy() { + super.onDestroy(); + Aria.download(this).unRegister(); + } + + @Download.onPre(DOWNLOAD_URL) + protected void onPre(DownloadTask task) { + } + + @Download.onTaskStart(DOWNLOAD_URL) + void taskStart(DownloadTask task) { + getBinding().setFileSize(task.getConvertFileSize()); + } + + @Download.onTaskRunning(DOWNLOAD_URL) + protected void running(DownloadTask task) { + long len = task.getFileSize(); + if (len == 0) { + getBinding().setProgress(0); } else { - Aria.download(this).load(mEntity.getId()).resume(); - getBinding().setStateStr(getString(R.string.stop)); + getBinding().setProgress(task.getPercent()); + } + getBinding().setSpeed(task.getConvertSpeed()); + } + + @Download.onTaskResume(DOWNLOAD_URL) + void taskResume(DownloadTask task) { + } + + @Download.onTaskStop(DOWNLOAD_URL) + void taskStop(DownloadTask task) { + getBinding().setSpeed(""); + } + + @Download.onTaskCancel(DOWNLOAD_URL) + void taskCancel(DownloadTask task) { + getBinding().setProgress(0); + Toast.makeText(getContext(), "取消下载", Toast.LENGTH_SHORT).show(); + getBinding().setSpeed(""); + } + + @Download.onTaskFail(DOWNLOAD_URL) + void taskFail(DownloadTask task) { + Toast.makeText(getContext(), "下载失败", Toast.LENGTH_SHORT).show(); + } + + @Download.onTaskComplete(DOWNLOAD_URL) + void taskComplete(DownloadTask task) { + getBinding().setProgress(100); + Toast.makeText(getContext(), "下载完成", Toast.LENGTH_SHORT).show(); + getBinding().setSpeed(""); + } + + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.start) { + if (!AppUtil.chekEntityValid(mEntity)) { + Aria.download(this) + .load(DOWNLOAD_URL) + .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/放置江湖.apk") + .create(); + getBinding().setStateStr(getString(R.string.stop)); + return; + } + if (Aria.download(this).load(mEntity.getId()).isRunning()) { + Aria.download(this).load(mEntity.getId()).stop(); + getBinding().setStateStr(getString(R.string.resume)); + } else { + Aria.download(this).load(mEntity.getId()).resume(); + getBinding().setStateStr(getString(R.string.stop)); + } + } else if (id == R.id.cancel) { + if (AppUtil.chekEntityValid(mEntity)) { + Aria.download(this).load(mEntity.getId()).cancel(); + } } - break; - - case R.id.cancel: - if (AppUtil.chekEntityValid(mEntity)) { - Aria.download(this).load(mEntity.getId()).cancel(); - } - break; } - } } diff --git a/app/src/main/java/com/arialyy/simple/core/download/DownloadPopupWindow.java b/app/src/main/java/com/arialyy/simple/core/download/DownloadPopupWindow.java index 4c7e2bd6..fc37343e 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/DownloadPopupWindow.java +++ b/app/src/main/java/com/arialyy/simple/core/download/DownloadPopupWindow.java @@ -23,6 +23,7 @@ import android.os.Environment; import android.view.View; import android.widget.Button; import android.widget.TextView; + import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; @@ -84,32 +85,28 @@ public class DownloadPopupWindow extends AbsPopupWindow implements View.OnClickL @Override public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - if (mTaskId != -1) { - Aria.download(this) - .load(DOWNLOAD_URL) - .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/消消乐.apk") - .create(); - mStart.setText(getContext().getString(R.string.stop)); - break; - } - if (Aria.download(this).load(mTaskId).isRunning()) { - Aria.download(this).load(mTaskId).stop(); - mStart.setText(getContext().getString(R.string.resume)); - } else { - Aria.download(this).load(mTaskId).resume(); - mStart.setText(getContext().getString(R.string.stop)); - } - break; - - case R.id.cancel: - - Aria.download(this).load(mTaskId).cancel(); - mStart.setText(getContext().getResources().getString(R.string.start)); - mTaskId = -1; - break; - } + int id = view.getId(); + if (id == R.id.start) { + if (mTaskId != -1) { + Aria.download(this) + .load(DOWNLOAD_URL) + .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/消消乐.apk") + .create(); + mStart.setText(getContext().getString(R.string.stop)); + return; + } + if (Aria.download(this).load(mTaskId).isRunning()) { + Aria.download(this).load(mTaskId).stop(); + mStart.setText(getContext().getString(R.string.resume)); + } else { + Aria.download(this).load(mTaskId).resume(); + mStart.setText(getContext().getString(R.string.stop)); + } + } else if (id == R.id.cancel) { + Aria.download(this).load(mTaskId).cancel(); + mStart.setText(getContext().getResources().getString(R.string.start)); + mTaskId = -1; + } } @Override protected void dataCallback(int result, Object obj) { diff --git a/app/src/main/java/com/arialyy/simple/core/download/HighestPriorityActivity.java b/app/src/main/java/com/arialyy/simple/core/download/HighestPriorityActivity.java index a20803b2..78bf96c3 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/HighestPriorityActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/HighestPriorityActivity.java @@ -21,8 +21,10 @@ import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.TextView; + import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; + import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.common.AbsEntity; @@ -36,6 +38,7 @@ import com.arialyy.simple.core.download.mutil.DownloadAdapter; import com.arialyy.simple.databinding.ActivityHighestPriorityBinding; import com.arialyy.simple.util.AppUtil; import com.arialyy.simple.widget.HorizontalProgressBarWithNumber; + import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -46,204 +49,212 @@ import java.util.Set; * 最高优先级任务Demo */ public class HighestPriorityActivity extends BaseActivity { - private HorizontalProgressBarWithNumber mPb; - private Button mStart; - private Button mStop; - private Button mCancel; - private TextView mSize; - private TextView mSpeed; - private RecyclerView mList; - private DownloadEntity mEntity; + private HorizontalProgressBarWithNumber mPb; + private Button mStart; + private Button mStop; + private Button mCancel; + private TextView mSize; + private TextView mSpeed; + private RecyclerView mList; + private DownloadEntity mEntity; - private String mTaskName = "光明大陆"; - private static final String DOWNLOAD_URL = - "https://res5.d.cn/6f78ee3bcfdd033e64892a8553a95814cf5b4a62b12a76d9eb2a694905f0dc30fa5c7f728806a4ee0b3479e7b26a38707dac92b136add91191ac1219aadb4a3aa70bfa6d06d2d8db.apk"; - private DownloadAdapter mAdapter; - private List mData = new ArrayList<>(); - private Set mRecord = new HashSet<>(); + private String mTaskName = "光明大陆"; + private static final String DOWNLOAD_URL = + "https://res5.d.cn/6f78ee3bcfdd033e64892a8553a95814cf5b4a62b12a76d9eb2a694905f0dc30fa5c7f728806a4ee0b3479e7b26a38707dac92b136add91191ac1219aadb4a3aa70bfa6d06d2d8db.apk"; + private DownloadAdapter mAdapter; + private List mData = new ArrayList<>(); + private Set mRecord = new HashSet<>(); - @Override protected int setLayoutId() { - return R.layout.activity_highest_priority; - } - - @Override protected void init(Bundle savedInstanceState) { - super.init(savedInstanceState); - mPb = findViewById(R.id.progressBar); - mStart = findViewById(R.id.start); - mStop = findViewById(R.id.stop); - mCancel = findViewById(R.id.cancel); - mSize = findViewById(R.id.size); - mSpeed = findViewById(R.id.speed); - mList = findViewById(R.id.list); - - setTitle("最高优先级任务"); - getBinding().setTaskName("任务名:" + mTaskName + " (最高优先级任务)"); - initWidget(); - Aria.download(this).register(); - } - - private void initWidget() { - mEntity = Aria.download(this).getFirstDownloadEntity(DOWNLOAD_URL); - - if (mEntity != null) { - mPb.setProgress(mEntity.getPercent()); - if (mEntity.getState() == IEntity.STATE_STOP) { - mStart.setText("恢复"); - mStart.setTextColor(getResources().getColor(android.R.color.holo_blue_light)); - setBtState(true); - } else if (mEntity.getState() == IEntity.STATE_RUNNING) { - setBtState(false); - } - mSize.setText(mEntity.getConvertFileSize()); + @Override + protected int setLayoutId() { + return R.layout.activity_highest_priority; } - List temp = Aria.download(this).getTaskList(); - if (temp != null && !temp.isEmpty()) { - for (DownloadEntity entity : temp) { - if (entity.getUrl().equals(DOWNLOAD_URL)) continue; - mData.add(entity); - mRecord.add(entity.getUrl()); - } + @Override + protected void init(Bundle savedInstanceState) { + super.init(savedInstanceState); + mPb = findViewById(R.id.progressBar); + mStart = findViewById(R.id.start); + mStop = findViewById(R.id.stop); + mCancel = findViewById(R.id.cancel); + mSize = findViewById(R.id.size); + mSpeed = findViewById(R.id.speed); + mList = findViewById(R.id.list); + + setTitle("最高优先级任务"); + getBinding().setTaskName("任务名:" + mTaskName + " (最高优先级任务)"); + initWidget(); + Aria.download(this).register(); } - mAdapter = new DownloadAdapter(this, mData); - mList.setLayoutManager(new LinearLayoutManager(this)); - mList.setAdapter(mAdapter); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_highest_priority, menu); - return super.onCreateOptionsMenu(menu); - } + private void initWidget() { + mEntity = Aria.download(this).getFirstDownloadEntity(DOWNLOAD_URL); - @Override public boolean onMenuItemClick(MenuItem item) { - switch (item.getItemId()) { - case R.id.add_task: - List temp = getModule(DownloadModule.class).getHighestTestList(); - for (DownloadEntity entity : temp) { - String url = entity.getUrl(); - if (mRecord.contains(url)) { - continue; - } - mAdapter.addDownloadEntity(entity); - mRecord.add(url); + if (mEntity != null) { + mPb.setProgress(mEntity.getPercent()); + if (mEntity.getState() == IEntity.STATE_STOP) { + mStart.setText("恢复"); + mStart.setTextColor(getResources().getColor(android.R.color.holo_blue_light)); + setBtState(true); + } else if (mEntity.getState() == IEntity.STATE_RUNNING) { + setBtState(false); + } + mSize.setText(mEntity.getConvertFileSize()); } - mAdapter.notifyDataSetChanged(); - break; - case R.id.help: - String title = "最高优先级任务介绍"; - String msg = " 将任务设置为最高优先级任务,最高优先级任务有以下特点:\n" - + " 1、在下载队列中,有且只有一个最高优先级任务\n" - + " 2、最高优先级任务会一直存在,直到用户手动暂停或任务完成\n" - + " 3、任务调度器不会暂停最高优先级任务\n" - + " 4、用户手动暂停或任务完成后,第二次重新执行该任务,该命令将失效\n" - + " 5、如果下载队列中已经满了,则会停止队尾的任务,当高优先级任务完成后,该队尾任务将自动执行\n" - + " 6、把任务设置为最高优先级任务后,将自动执行任务,不需要重新调用start()启动任务"; - showMsgDialog(title, msg); - break; - } - return true; - } - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - if (AppUtil.chekEntityValid(mEntity)) { - String text = ((TextView) view).getText().toString(); - if (text.equals("重新开始?") || text.equals("开始")) { - } else { - Aria.download(this).load(mEntity.getId()).resume(); - } + List temp = Aria.download(this).getTaskList(); + if (temp != null && !temp.isEmpty()) { + for (DownloadEntity entity : temp) { + if (entity.getUrl().equals(DOWNLOAD_URL)) continue; + mData.add(entity); + mRecord.add(entity.getUrl()); + } } - ((TextView) view).setText(getString(R.string.stop)); - break; - case R.id.stop: - if (AppUtil.chekEntityValid(mEntity)) { - Aria.download(this).load(mEntity.getId()).stop(); + mAdapter = new DownloadAdapter(this, mData); + mList.setLayoutManager(new LinearLayoutManager(this)); + mList.setAdapter(mAdapter); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_highest_priority, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + int itemId = item.getItemId(); + if (itemId == R.id.add_task) { + List temp = getModule(DownloadModule.class).getHighestTestList(); + for (DownloadEntity entity : temp) { + String url = entity.getUrl(); + if (mRecord.contains(url)) { + continue; + } + mAdapter.addDownloadEntity(entity); + mRecord.add(url); + } + mAdapter.notifyDataSetChanged(); + } else if (itemId == R.id.help) { + String title = "最高优先级任务介绍"; + String msg = " 将任务设置为最高优先级任务,最高优先级任务有以下特点:\n" + + " 1、在下载队列中,有且只有一个最高优先级任务\n" + + " 2、最高优先级任务会一直存在,直到用户手动暂停或任务完成\n" + + " 3、任务调度器不会暂停最高优先级任务\n" + + " 4、用户手动暂停或任务完成后,第二次重新执行该任务,该命令将失效\n" + + " 5、如果下载队列中已经满了,则会停止队尾的任务,当高优先级任务完成后,该队尾任务将自动执行\n" + + " 6、把任务设置为最高优先级任务后,将自动执行任务,不需要重新调用start()启动任务"; + showMsgDialog(title, msg); } - ((TextView) view).setText(getString(R.string.resume)); - break; - case R.id.cancel: - if (AppUtil.chekEntityValid(mEntity)) { - Aria.download(this).load(mEntity.getId()).cancel(); + return true; + } + + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.start) { + if (AppUtil.chekEntityValid(mEntity)) { + String text = ((TextView) view).getText().toString(); + if (text.equals("重新开始?") || text.equals("开始")) { + } else { + Aria.download(this).load(mEntity.getId()).resume(); + } + } + ((TextView) view).setText(getString(R.string.stop)); + } else if (id == R.id.stop) { + if (AppUtil.chekEntityValid(mEntity)) { + Aria.download(this).load(mEntity.getId()).stop(); + } + ((TextView) view).setText(getString(R.string.resume)); + } else if (id == R.id.cancel) { + if (AppUtil.chekEntityValid(mEntity)) { + Aria.download(this).load(mEntity.getId()).cancel(); + } } - break; } - } - /** - * 设置start 和 stop 按钮状态 - */ - private void setBtState(boolean state) { - mStart.setEnabled(state); - mStop.setEnabled(!state); - } - - @Download.onPre public void onPre(DownloadTask task) { - mAdapter.updateState(task.getDownloadEntity()); - } - - @Download.onTaskPre public void onTaskPre(DownloadTask task) { - if (task.getKey().equals(DOWNLOAD_URL)) { - mSize.setText(task.getConvertFileSize()); + /** + * 设置start 和 stop 按钮状态 + */ + private void setBtState(boolean state) { + mStart.setEnabled(state); + mStop.setEnabled(!state); } - mAdapter.updateState(task.getDownloadEntity()); - } - @Download.onTaskStart public void onTaskStart(DownloadTask task) { - if (task.getKey().equals(DOWNLOAD_URL)) { - setBtState(false); + @Download.onPre + public void onPre(DownloadTask task) { + mAdapter.updateState(task.getDownloadEntity()); } - mAdapter.updateState(task.getDownloadEntity()); - } - @Download.onTaskResume public void onTaskResume(DownloadTask task) { - if (task.getKey().equals(DOWNLOAD_URL)) { - setBtState(false); + @Download.onTaskPre + public void onTaskPre(DownloadTask task) { + if (task.getKey().equals(DOWNLOAD_URL)) { + mSize.setText(task.getConvertFileSize()); + } + mAdapter.updateState(task.getDownloadEntity()); } - mAdapter.updateState(task.getDownloadEntity()); - } - @Download.onTaskStop public void onTaskStop(DownloadTask task) { - if (task.getKey().equals(DOWNLOAD_URL)) { - setBtState(true); - mStart.setText("恢复"); - mStart.setTextColor(getResources().getColor(android.R.color.holo_blue_light)); + @Download.onTaskStart + public void onTaskStart(DownloadTask task) { + if (task.getKey().equals(DOWNLOAD_URL)) { + setBtState(false); + } + mAdapter.updateState(task.getDownloadEntity()); } - mAdapter.updateState(task.getDownloadEntity()); - } - @Download.onTaskCancel public void onTaskCancel(DownloadTask task) { - if (task.getKey().equals(DOWNLOAD_URL)) { - setBtState(true); - mStart.setText("开始"); - mPb.setProgress(0); + @Download.onTaskResume + public void onTaskResume(DownloadTask task) { + if (task.getKey().equals(DOWNLOAD_URL)) { + setBtState(false); + } + mAdapter.updateState(task.getDownloadEntity()); } - mAdapter.updateState(task.getDownloadEntity()); - } - @Download.onTaskFail public void onTaskFail(DownloadTask task) { - if (task.getKey().equals(DOWNLOAD_URL)) { - setBtState(true); - } else { - L.d(TAG, "download fail【" + task.getKey() + "】"); + @Download.onTaskStop + public void onTaskStop(DownloadTask task) { + if (task.getKey().equals(DOWNLOAD_URL)) { + setBtState(true); + mStart.setText("恢复"); + mStart.setTextColor(getResources().getColor(android.R.color.holo_blue_light)); + } + mAdapter.updateState(task.getDownloadEntity()); } - } - @Download.onTaskComplete public void onTaskComplete(DownloadTask task) { - if (task.getKey().equals(DOWNLOAD_URL)) { - setBtState(true); - mStart.setText("重新开始"); - mStart.setTextColor(getResources().getColor(android.R.color.holo_green_light)); - mPb.setProgress(100); + @Download.onTaskCancel + public void onTaskCancel(DownloadTask task) { + if (task.getKey().equals(DOWNLOAD_URL)) { + setBtState(true); + mStart.setText("开始"); + mPb.setProgress(0); + } + mAdapter.updateState(task.getDownloadEntity()); } - mAdapter.updateState(task.getDownloadEntity()); - } - @Download.onTaskRunning public void onTaskRunning(DownloadTask task) { - if (task.getKey().equals(DOWNLOAD_URL)) { - mPb.setProgress(task.getPercent()); - mSpeed.setText(task.getConvertSpeed()); + @Download.onTaskFail + public void onTaskFail(DownloadTask task) { + if (task.getKey().equals(DOWNLOAD_URL)) { + setBtState(true); + } else { + L.d(TAG, "download fail【" + task.getKey() + "】"); + } + } + + @Download.onTaskComplete + public void onTaskComplete(DownloadTask task) { + if (task.getKey().equals(DOWNLOAD_URL)) { + setBtState(true); + mStart.setText("重新开始"); + mStart.setTextColor(getResources().getColor(android.R.color.holo_green_light)); + mPb.setProgress(100); + } + mAdapter.updateState(task.getDownloadEntity()); + } + + @Download.onTaskRunning + public void onTaskRunning(DownloadTask task) { + if (task.getKey().equals(DOWNLOAD_URL)) { + mPb.setProgress(task.getPercent()); + mSpeed.setText(task.getConvertSpeed()); + } + mAdapter.setProgress(task.getDownloadEntity()); } - mAdapter.setProgress(task.getDownloadEntity()); - } } diff --git a/app/src/main/java/com/arialyy/simple/core/download/SingleTaskActivity.java b/app/src/main/java/com/arialyy/simple/core/download/SingleTaskActivity.java index 430e7ca5..158d8f66 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/SingleTaskActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/SingleTaskActivity.java @@ -26,293 +26,293 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.widget.Toast; + import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; + import com.arialyy.annotations.Download; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.common.HttpOption; import com.arialyy.aria.core.download.DownloadEntity; -import com.arialyy.aria.core.download.DownloadTaskListener; -import com.arialyy.aria.core.download.target.HttpNormalTarget; import com.arialyy.aria.core.listener.ISchedulers; import com.arialyy.aria.core.processor.IHttpFileLenAdapter; -import com.arialyy.aria.core.scheduler.NormalTaskListenerInterface; import com.arialyy.aria.core.task.DownloadTask; import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.CommonUtil; -import com.arialyy.aria.util.FileUtil; import com.arialyy.frame.util.show.T; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; import com.arialyy.simple.databinding.ActivitySingleBinding; import com.arialyy.simple.widget.ProgressLayout; + import java.io.File; import java.util.List; import java.util.Map; public class SingleTaskActivity extends BaseActivity { - private String mUrl; - private String mFilePath; - private HttpDownloadModule mModule; - private long mTaskId = -1; + private String mUrl; + private String mFilePath; + private HttpDownloadModule mModule; + private long mTaskId = -1; - BroadcastReceiver receiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals(ISchedulers.ARIA_TASK_INFO_ACTION)) { - ALog.d(TAG, "state = " + intent.getIntExtra(ISchedulers.TASK_STATE, -1)); - ALog.d(TAG, "type = " + intent.getIntExtra(ISchedulers.TASK_TYPE, -1)); - ALog.d(TAG, "speed = " + intent.getLongExtra(ISchedulers.TASK_SPEED, -1)); - ALog.d(TAG, "percent = " + intent.getIntExtra(ISchedulers.TASK_PERCENT, -1)); - ALog.d(TAG, "entity = " + intent.getParcelableExtra(ISchedulers.TASK_ENTITY).toString()); - } - } - }; - - @Override - protected void onResume() { - super.onResume(); - //registerReceiver(receiver, new IntentFilter(ISchedulers.ARIA_TASK_INFO_ACTION)); - } - - @Override - protected void onDestroy() { - super.onDestroy(); - //unregisterReceiver(receiver); - Aria.download(this).unRegister(); - } - - @Override - protected void init(Bundle savedInstanceState) { - super.init(savedInstanceState); - setTitle("单任务下载"); - Aria.download(this).register(); - mModule = ViewModelProviders.of(this).get(HttpDownloadModule.class); - mModule.getHttpDownloadInfo(this).observe(this, new Observer() { - - @Override public void onChanged(@Nullable DownloadEntity entity) { - if (entity == null) { - return; + BroadcastReceiver receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(ISchedulers.ARIA_TASK_INFO_ACTION)) { + ALog.d(TAG, "state = " + intent.getIntExtra(ISchedulers.TASK_STATE, -1)); + ALog.d(TAG, "type = " + intent.getIntExtra(ISchedulers.TASK_TYPE, -1)); + ALog.d(TAG, "speed = " + intent.getLongExtra(ISchedulers.TASK_SPEED, -1)); + ALog.d(TAG, "percent = " + intent.getIntExtra(ISchedulers.TASK_PERCENT, -1)); + ALog.d(TAG, "entity = " + intent.getParcelableExtra(ISchedulers.TASK_ENTITY).toString()); + } } - mTaskId = entity.getId(); - mUrl = entity.getUrl(); - mFilePath = entity.getFilePath(); - getBinding().pl.setInfo(entity); - } - }); - getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { - @Override public void create(View v, AbsEntity entity) { - startD(); - } + }; - @Override public void stop(View v, AbsEntity entity) { - Aria.download(this) - .load(mTaskId) - .stop(); - } - - @Override public void resume(View v, AbsEntity entity) { - Aria.download(this).load(mTaskId) - //.updateUrl(mUrl) - .resume(); - } - - @Override public void cancel(View v, AbsEntity entity) { - Aria.download(this).load(mTaskId).cancel(false); - // //1. 删除本地文件目录 - // File localDirFile = new File(mFilePath); - // if (localDirFile.exists()) { - // FileUtil.deleteDir(localDirFile.getParentFile()); - // } - // - // //2. 删除记录 - // HttpNormalTarget target = Aria.download(SingleTaskActivity.this).load(mTaskId); - // if (target != null) { - // // target.cancel(); - // target.removeRecord(); - // } - // - // List notCompleteTask = Aria.download(SingleTaskActivity.this).getAllNotCompleteTask(); - // if (notCompleteTask == null){ - // Log.d(TAG, "未完成的任务数:0"); - // return; - // } - // Log.d(TAG, "未完成的任务数:" + notCompleteTask.size()); - } - }); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_single_task_activity, menu); - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - int speed = -1; - String msg = ""; - switch (item.getItemId()) { - case R.id.help: - msg = "一些小知识点:\n" - + "1、你可以在注解中增加链接,用于指定被注解的方法只能被特定的下载任务回调,以防止progress乱跳\n" - + "2、当遇到网络慢的情况时,你可以先使用onPre()更新UI界面,待连接成功时,再在onTaskPre()获取完整的task数据,然后给UI界面设置正确的数据\n" - + "3、你可以在界面初始化时通过Aria.download(this).load(URL).getPercent()等方法快速获取相关任务的一些数据"; - showMsgDialog("tip", msg); - break; - case R.id.speed_0: - speed = 0; - break; - case R.id.speed_128: - speed = 128; - break; - case R.id.speed_256: - speed = 256; - break; - case R.id.speed_512: - speed = 512; - break; - case R.id.speed_1m: - speed = 1024; - break; + @Override + protected void onResume() { + super.onResume(); + //registerReceiver(receiver, new IntentFilter(ISchedulers.ARIA_TASK_INFO_ACTION)); } - if (speed > -1) { - msg = item.getTitle().toString(); - T.showShort(this, msg); - Aria.get(this).getDownloadConfig().setMaxSpeed(speed); + + @Override + protected void onDestroy() { + super.onDestroy(); + //unregisterReceiver(receiver); + Aria.download(this).unRegister(); } - return true; - } - @Download.onWait - public void onWait(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - Log.d(TAG, "wait ==> " + task.getDownloadEntity().getFileName()); - getBinding().pl.setInfo(task.getEntity()); + @Override + protected void init(Bundle savedInstanceState) { + super.init(savedInstanceState); + setTitle("单任务下载"); + Aria.download(this).register(); + mModule = ViewModelProviders.of(this).get(HttpDownloadModule.class); + mModule.getHttpDownloadInfo(this).observe(this, new Observer() { + + @Override + public void onChanged(@Nullable DownloadEntity entity) { + if (entity == null) { + return; + } + mTaskId = entity.getId(); + mUrl = entity.getUrl(); + mFilePath = entity.getFilePath(); + getBinding().pl.setInfo(entity); + } + }); + getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { + @Override + public void create(View v, AbsEntity entity) { + startD(); + } + + @Override + public void stop(View v, AbsEntity entity) { + Aria.download(this) + .load(mTaskId) + .stop(); + } + + @Override + public void resume(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId) + //.updateUrl(mUrl) + .resume(); + } + + @Override + public void cancel(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).cancel(false); + // //1. 删除本地文件目录 + // File localDirFile = new File(mFilePath); + // if (localDirFile.exists()) { + // FileUtil.deleteDir(localDirFile.getParentFile()); + // } + // + // //2. 删除记录 + // HttpNormalTarget target = Aria.download(SingleTaskActivity.this).load(mTaskId); + // if (target != null) { + // // target.cancel(); + // target.removeRecord(); + // } + // + // List notCompleteTask = Aria.download(SingleTaskActivity.this).getAllNotCompleteTask(); + // if (notCompleteTask == null){ + // Log.d(TAG, "未完成的任务数:0"); + // return; + // } + // Log.d(TAG, "未完成的任务数:" + notCompleteTask.size()); + } + }); } - } - @Download.onPre - public void onPre(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - getBinding().pl.setInfo(task.getEntity()); + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_single_task_activity, menu); + return super.onCreateOptionsMenu(menu); } - } - //@Override public void onTaskPre(DownloadTask task) { - // - //} - - @Download.onTaskStart - public void onTaskStart(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - getBinding().pl.setInfo(task.getEntity()); - ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + @Override + public boolean onMenuItemClick(MenuItem item) { + int speed = -1; + String msg = ""; + int itemId = item.getItemId(); + if (itemId == R.id.help) { + msg = "一些小知识点:\n" + + "1、你可以在注解中增加链接,用于指定被注解的方法只能被特定的下载任务回调,以防止progress乱跳\n" + + "2、当遇到网络慢的情况时,你可以先使用onPre()更新UI界面,待连接成功时,再在onTaskPre()获取完整的task数据,然后给UI界面设置正确的数据\n" + + "3、你可以在界面初始化时通过Aria.download(this).load(URL).getPercent()等方法快速获取相关任务的一些数据"; + showMsgDialog("tip", msg); + } else if (itemId == R.id.speed_0) { + speed = 0; + } else if (itemId == R.id.speed_128) { + speed = 128; + } else if (itemId == R.id.speed_256) { + speed = 256; + } else if (itemId == R.id.speed_512) { + speed = 512; + } else if (itemId == R.id.speed_1m) { + speed = 1024; + } + if (speed > -1) { + msg = item.getTitle().toString(); + T.showShort(this, msg); + Aria.get(this).getDownloadConfig().setMaxSpeed(speed); + } + return true; } - } - @Download.onTaskRunning - public void onTaskRunning(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - //ALog.d(TAG, "isRunning" + "; state = " + task.getEntity().getState()); - getBinding().pl.setInfo(task.getEntity()); + @Download.onWait + public void onWait(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Log.d(TAG, "wait ==> " + task.getDownloadEntity().getFileName()); + getBinding().pl.setInfo(task.getEntity()); + } } - } - //@Override public void onNoSupportBreakPoint(DownloadTask task) { - // - //} - - @Download.onTaskResume - public void onTaskResume(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "resume"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onPre + public void onPre(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskStop - public void onTaskStop(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "stop"); - getBinding().pl.setInfo(task.getEntity()); + //@Override public void onTaskPre(DownloadTask task) { + // + //} + + @Download.onTaskStart + public void onTaskStart(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + } } - } - @Download.onTaskCancel - public void onTaskCancel(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - mTaskId = -1; - Log.d(TAG, "cancel"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskRunning + public void onTaskRunning(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + //ALog.d(TAG, "isRunning" + "; state = " + task.getEntity().getState()); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskFail - public void onTaskFail(DownloadTask task, Exception e) { - ALog.d(TAG, "下载失败"); - Toast.makeText(SingleTaskActivity.this, getString(R.string.download_fail), Toast.LENGTH_SHORT) - .show(); - if (task != null && task.getKey().equals(mUrl)) { - getBinding().pl.setInfo(task.getEntity()); + //@Override public void onNoSupportBreakPoint(DownloadTask task) { + // + //} + + @Download.onTaskResume + public void onTaskResume(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "resume"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskComplete - public void onTaskComplete(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - Toast.makeText(SingleTaskActivity.this, getString(R.string.download_success), - Toast.LENGTH_SHORT).show(); - ALog.d(TAG, "文件md5: e088677570afe2e9f847cc8159b932dd"); - ALog.d(TAG, "下载完成的文件md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); - getBinding().pl.setInfo(task.getEntity()); - getBinding().pl.setProgress(100); + @Download.onTaskStop + public void onTaskStop(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Override - protected int setLayoutId() { - return R.layout.activity_single; - } - - private void startD() { - HttpOption option = new HttpOption(); - option.useServerFileName(true); - option.addHeader("1", "@") - .useServerFileName(true) - .setFileLenAdapter(new FileLenAdapter()); - //option.setRequestType(RequestEnum.POST); - mTaskId = Aria.download(SingleTaskActivity.this) - .load(mUrl) - .setFilePath(mFilePath, true) - .option(option) - .ignoreCheckPermissions() - .create(); - } - - @Override - protected void onStop() { - super.onStop(); - //Aria.download(this).unRegister(); - } - - @Override public boolean dispatchTouchEvent(MotionEvent ev) { - return super.dispatchTouchEvent(ev); - } - - static class FileLenAdapter implements IHttpFileLenAdapter { - @Override public long handleFileLen(Map> headers) { - - List sLength = headers.get("Content-Length"); - if (sLength == null || sLength.isEmpty()) { - return -1; - } - String temp = sLength.get(0); - - return Long.parseLong(temp); + @Download.onTaskCancel + public void onTaskCancel(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + mTaskId = -1; + Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); + } + } + + @Download.onTaskFail + public void onTaskFail(DownloadTask task, Exception e) { + ALog.d(TAG, "下载失败"); + Toast.makeText(SingleTaskActivity.this, getString(R.string.download_fail), Toast.LENGTH_SHORT) + .show(); + if (task != null && task.getKey().equals(mUrl)) { + getBinding().pl.setInfo(task.getEntity()); + } + } + + @Download.onTaskComplete + public void onTaskComplete(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Toast.makeText(SingleTaskActivity.this, getString(R.string.download_success), + Toast.LENGTH_SHORT).show(); + ALog.d(TAG, "文件md5: e088677570afe2e9f847cc8159b932dd"); + ALog.d(TAG, "下载完成的文件md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); + getBinding().pl.setProgress(100); + } + } + + @Override + protected int setLayoutId() { + return R.layout.activity_single; + } + + private void startD() { + HttpOption option = new HttpOption(); + option.useServerFileName(true); + option.addHeader("1", "@") + .useServerFileName(true) + .setFileLenAdapter(new FileLenAdapter()); + //option.setRequestType(RequestEnum.POST); + mTaskId = Aria.download(SingleTaskActivity.this) + .load(mUrl) + .setFilePath(mFilePath, true) + .option(option) + .ignoreCheckPermissions() + .create(); + } + + @Override + protected void onStop() { + super.onStop(); + //Aria.download(this).unRegister(); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + return super.dispatchTouchEvent(ev); + } + + static class FileLenAdapter implements IHttpFileLenAdapter { + @Override + public long handleFileLen(Map> headers) { + + List sLength = headers.get("Content-Length"); + if (sLength == null || sLength.isEmpty()) { + return -1; + } + String temp = sLength.get(0); + + return Long.parseLong(temp); + } } - } } \ No newline at end of file diff --git a/app/src/main/java/com/arialyy/simple/core/download/group/ChildHandleDialog.java b/app/src/main/java/com/arialyy/simple/core/download/group/ChildHandleDialog.java index 944df089..e2e57cc8 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/group/ChildHandleDialog.java +++ b/app/src/main/java/com/arialyy/simple/core/download/group/ChildHandleDialog.java @@ -24,6 +24,7 @@ import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.TextView; + import com.arialyy.annotations.DownloadGroup; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.download.DownloadEntity; @@ -33,130 +34,140 @@ import com.arialyy.simple.R; import com.arialyy.simple.base.BaseDialog; import com.arialyy.simple.databinding.DialogSubTaskHandlerBinding; import com.arialyy.simple.widget.HorizontalProgressBarWithNumber; + import java.util.List; /** * Created by lyy on 2017/9/5. */ -@SuppressLint("ValidFragment") public class ChildHandleDialog - extends BaseDialog implements View.OnClickListener { - TextView mSub; - TextView mGroup; - HorizontalProgressBarWithNumber mPb; - private String mGroupHash; - private String mChildName; - private List mUrls; - private DownloadEntity mChildEntity; +@SuppressLint("ValidFragment") +public class ChildHandleDialog + extends BaseDialog implements View.OnClickListener { + TextView mSub; + TextView mGroup; + HorizontalProgressBarWithNumber mPb; + private String mGroupHash; + private String mChildName; + private List mUrls; + private DownloadEntity mChildEntity; - public ChildHandleDialog(Context context, List urls, DownloadEntity childEntity) { - super(context); - setStyle(STYLE_NO_TITLE, R.style.Theme_Light_Dialog); - mChildEntity = childEntity; - mGroupHash = "任务组测试"; - mUrls = urls; - mChildName = childEntity.getFileName(); - } - - @Override protected void init(Bundle savedInstanceState) { - super.init(savedInstanceState); - Aria.download(getContext()).register(); - initWidget(); - } - - @Override public void onDestroy() { - super.onDestroy(); - Aria.download(getContext()).unRegister(); - } - - private void initWidget() { - mSub = findViewById(R.id.sub_task); - mGroup = findViewById(R.id.task_group); - mPb = findViewById(R.id.pb); - - findViewById(R.id.stop).setOnClickListener(this); - findViewById(R.id.start).setOnClickListener(this); - //findViewById(R.id.cancel).setOnClickListener(this); - mGroup.setText("任务组:" + mGroupHash); - mSub.setText("子任务:" + mChildName); - mPb.setProgress((int) (mChildEntity.getCurrentProgress() * 100 / mChildEntity.getFileSize())); - - Window window = getDialog().getWindow(); - window.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); - WindowManager.LayoutParams p = window.getAttributes(); - p.width = ViewGroup.LayoutParams.MATCH_PARENT; - window.setAttributes(p); - window.setWindowAnimations(R.style.dialogStyle); - } - - @DownloadGroup.onSubTaskRunning void onSubTaskRunning(DownloadGroupTask groupTask, - DownloadEntity subEntity) { - if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; - mPb.setProgress(subEntity.getPercent()); - } - - @DownloadGroup.onSubTaskPre void onSubTaskPre(DownloadGroupTask groupTask, - DownloadEntity subEntity) { - if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; - L.d(TAG, subEntity.getPercent() + ""); - } - - @DownloadGroup.onSubTaskStop void onSubTaskStop(DownloadGroupTask groupTask, - DownloadEntity subEntity) { - if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; - mSub.setText("子任务:" + mChildName + ",状态:任务停止"); - } - - @DownloadGroup.onSubTaskStart void onSubTaskStart(DownloadGroupTask groupTask, - DownloadEntity subEntity) { - if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; - mSub.setText("子任务:" + mChildName + ",状态:下载中"); - } - - //@DownloadGroup.onSubTaskCancel void onSubTaskCancel(DownloadGroupTask groupTask, - // DownloadEntity subEntity) { - // Log.d(TAG, "new Size: " + groupTask.getConvertFileSize()); - // mSub.setText("子任务:" + mChildName + ",状态:取消下载"); - //} - - @DownloadGroup.onSubTaskComplete void onSubTaskComplete(DownloadGroupTask groupTask, - DownloadEntity subEntity) { - if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; - mSub.setText("子任务:" + mChildName + ",状态:任务完成"); - mPb.setProgress(100); - } - - @DownloadGroup.onSubTaskFail void onSubTaskFail(DownloadGroupTask groupTask, - DownloadEntity subEntity) { - if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; - L.d(TAG, subEntity.getPercent() + ""); - } - - @Override protected int setLayoutId() { - return R.layout.dialog_sub_task_handler; - } - - @Override - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - Aria.download(getContext()) - .loadGroup(mUrls) - .getSubTaskManager() - .startSubTask(mChildEntity.getUrl()); - break; - case R.id.stop: - Aria.download(getContext()) - .loadGroup(mUrls) - .getSubTaskManager() - .stopSubTask(mChildEntity.getUrl()); - break; - //case R.id.cancel: - // Aria.download(this).load(mUrls).getSubTaskManager().cancelSubTask(mChildEntity.getUrl()); - // break; + public ChildHandleDialog(Context context, List urls, DownloadEntity childEntity) { + super(context); + setStyle(STYLE_NO_TITLE, R.style.Theme_Light_Dialog); + mChildEntity = childEntity; + mGroupHash = "任务组测试"; + mUrls = urls; + mChildName = childEntity.getFileName(); } - } - @Override protected void dataCallback(int result, Object obj) { + @Override + protected void init(Bundle savedInstanceState) { + super.init(savedInstanceState); + Aria.download(getContext()).register(); + initWidget(); + } - } + @Override + public void onDestroy() { + super.onDestroy(); + Aria.download(getContext()).unRegister(); + } + + private void initWidget() { + mSub = findViewById(R.id.sub_task); + mGroup = findViewById(R.id.task_group); + mPb = findViewById(R.id.pb); + + findViewById(R.id.stop).setOnClickListener(this); + findViewById(R.id.start).setOnClickListener(this); + //findViewById(R.id.cancel).setOnClickListener(this); + mGroup.setText("任务组:" + mGroupHash); + mSub.setText("子任务:" + mChildName); + mPb.setProgress((int) (mChildEntity.getCurrentProgress() * 100 / mChildEntity.getFileSize())); + + Window window = getDialog().getWindow(); + window.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM); + WindowManager.LayoutParams p = window.getAttributes(); + p.width = ViewGroup.LayoutParams.MATCH_PARENT; + window.setAttributes(p); + window.setWindowAnimations(R.style.dialogStyle); + } + + @DownloadGroup.onSubTaskRunning + void onSubTaskRunning(DownloadGroupTask groupTask, + DownloadEntity subEntity) { + if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; + mPb.setProgress(subEntity.getPercent()); + } + + @DownloadGroup.onSubTaskPre + void onSubTaskPre(DownloadGroupTask groupTask, + DownloadEntity subEntity) { + if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; + L.d(TAG, subEntity.getPercent() + ""); + } + + @DownloadGroup.onSubTaskStop + void onSubTaskStop(DownloadGroupTask groupTask, + DownloadEntity subEntity) { + if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; + mSub.setText("子任务:" + mChildName + ",状态:任务停止"); + } + + @DownloadGroup.onSubTaskStart + void onSubTaskStart(DownloadGroupTask groupTask, + DownloadEntity subEntity) { + if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; + mSub.setText("子任务:" + mChildName + ",状态:下载中"); + } + + //@DownloadGroup.onSubTaskCancel void onSubTaskCancel(DownloadGroupTask groupTask, + // DownloadEntity subEntity) { + // Log.d(TAG, "new Size: " + groupTask.getConvertFileSize()); + // mSub.setText("子任务:" + mChildName + ",状态:取消下载"); + //} + + @DownloadGroup.onSubTaskComplete + void onSubTaskComplete(DownloadGroupTask groupTask, + DownloadEntity subEntity) { + if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; + mSub.setText("子任务:" + mChildName + ",状态:任务完成"); + mPb.setProgress(100); + } + + @DownloadGroup.onSubTaskFail + void onSubTaskFail(DownloadGroupTask groupTask, + DownloadEntity subEntity) { + if (!subEntity.getUrl().equals(mChildEntity.getUrl())) return; + L.d(TAG, subEntity.getPercent() + ""); + } + + @Override + protected int setLayoutId() { + return R.layout.dialog_sub_task_handler; + } + + @Override + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.start) { + Aria.download(getContext()) + .loadGroup(mUrls) + .getSubTaskManager() + .startSubTask(mChildEntity.getUrl()); + } else if (id == R.id.stop) { + Aria.download(getContext()) + .loadGroup(mUrls) + .getSubTaskManager() + .stopSubTask(mChildEntity.getUrl()); + //case R.id.cancel: + // Aria.download(this).load(mUrls).getSubTaskManager().cancelSubTask(mChildEntity.getUrl()); + // break; + } + } + + @Override + protected void dataCallback(int result, Object obj) { + + } } diff --git a/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8LiveDLoadActivity.java b/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8LiveDLoadActivity.java index 256f946e..9058dd71 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8LiveDLoadActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8LiveDLoadActivity.java @@ -22,9 +22,11 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Toast; + import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; + import com.arialyy.annotations.Download; import com.arialyy.annotations.M3U8; import com.arialyy.aria.core.Aria; @@ -43,233 +45,236 @@ import com.arialyy.simple.common.ModifyPathDialog; import com.arialyy.simple.common.ModifyUrlDialog; import com.arialyy.simple.databinding.ActivityM3u8LiveBinding; import com.arialyy.simple.widget.ProgressLayout; + import java.io.File; public class M3U8LiveDLoadActivity extends BaseActivity { - private String mUrl; - private String mFilePath; - private M3U8LiveModule mModule; - private long mTaskId; + private String mUrl; + private String mFilePath; + private M3U8LiveModule mModule; + private long mTaskId; - @Override - protected void init(Bundle savedInstanceState) { - super.init(savedInstanceState); - setTitle(getString(R.string.m3u8_live)); - Aria.download(this).register(); - mModule = ViewModelProviders.of(this).get(M3U8LiveModule.class); - mModule.getHttpDownloadInfo(this).observe(this, new Observer() { + @Override + protected void init(Bundle savedInstanceState) { + super.init(savedInstanceState); + setTitle(getString(R.string.m3u8_live)); + Aria.download(this).register(); + mModule = ViewModelProviders.of(this).get(M3U8LiveModule.class); + mModule.getHttpDownloadInfo(this).observe(this, new Observer() { - @Override public void onChanged(@Nullable DownloadEntity entity) { - if (entity == null) { - return; + @Override + public void onChanged(@Nullable DownloadEntity entity) { + if (entity == null) { + return; + } + mTaskId = entity.getId(); + mUrl = entity.getUrl(); + mFilePath = entity.getFilePath(); + getBinding().pl.setInfo(entity); + } + }); + getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { + @Override + public void create(View v, AbsEntity entity) { + startD(); + } + + @Override + public void stop(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).stop(); + } + + @Override + public void resume(View v, AbsEntity entity) { + ALog.d(TAG, "m3u8 live 不支持恢复"); + } + + @Override + public void cancel(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).cancel(true); + mTaskId = -1; + } + }); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_single_task_activity, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + int speed = -1; + String msg = ""; + int itemId = item.getItemId(); + if (itemId == R.id.help) { + msg = "一些小知识点:\n" + + "1、你可以在注解中增加链接,用于指定被注解的方法只能被特定的下载任务回调,以防止progress乱跳\n" + + "2、当遇到网络慢的情况时,你可以先使用onPre()更新UI界面,待连接成功时,再在onTaskPre()获取完整的task数据,然后给UI界面设置正确的数据\n" + + "3、你可以在界面初始化时通过Aria.download(this).load(URL).getPercent()等方法快速获取相关任务的一些数据"; + showMsgDialog("tip", msg); + } else if (itemId == R.id.speed_0) { + speed = 0; + } else if (itemId == R.id.speed_128) { + speed = 128; + } else if (itemId == R.id.speed_256) { + speed = 256; + } else if (itemId == R.id.speed_512) { + speed = 512; + } else if (itemId == R.id.speed_1m) { + speed = 1024; } - mTaskId = entity.getId(); - mUrl = entity.getUrl(); - mFilePath = entity.getFilePath(); - getBinding().pl.setInfo(entity); - } - }); - getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { - @Override public void create(View v, AbsEntity entity) { - startD(); - } - - @Override public void stop(View v, AbsEntity entity) { - Aria.download(this).load(mTaskId).stop(); - } - - @Override public void resume(View v, AbsEntity entity) { - ALog.d(TAG, "m3u8 live 不支持恢复"); - } - - @Override public void cancel(View v, AbsEntity entity) { - Aria.download(this).load(mTaskId).cancel(true); - mTaskId = -1; - } - }); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_single_task_activity, menu); - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - int speed = -1; - String msg = ""; - switch (item.getItemId()) { - case R.id.help: - msg = "一些小知识点:\n" - + "1、你可以在注解中增加链接,用于指定被注解的方法只能被特定的下载任务回调,以防止progress乱跳\n" - + "2、当遇到网络慢的情况时,你可以先使用onPre()更新UI界面,待连接成功时,再在onTaskPre()获取完整的task数据,然后给UI界面设置正确的数据\n" - + "3、你可以在界面初始化时通过Aria.download(this).load(URL).getPercent()等方法快速获取相关任务的一些数据"; - showMsgDialog("tip", msg); - break; - case R.id.speed_0: - speed = 0; - break; - case R.id.speed_128: - speed = 128; - break; - case R.id.speed_256: - speed = 256; - break; - case R.id.speed_512: - speed = 512; - break; - case R.id.speed_1m: - speed = 1024; - break; + if (speed > -1) { + msg = item.getTitle().toString(); + Aria.download(this).setMaxSpeed(speed); + T.showShort(this, msg); + } + return true; } - if (speed > -1) { - msg = item.getTitle().toString(); - Aria.download(this).setMaxSpeed(speed); - T.showShort(this, msg); + + @M3U8.onPeerStart + void onPeerStart(String m3u8Url, String peerPath, int peerIndex) { + //ALog.d(TAG, "peer create, path: " + peerPath + ", index: " + peerIndex); } - return true; - } - @M3U8.onPeerStart - void onPeerStart(String m3u8Url, String peerPath, int peerIndex) { - //ALog.d(TAG, "peer create, path: " + peerPath + ", index: " + peerIndex); - } - - @M3U8.onPeerComplete - void onPeerComplete(String m3u8Url, String peerPath, int peerIndex) { - //ALog.d(TAG, "peer complete, path: " + peerPath + ", index: " + peerIndex); - //mVideoFragment.addPlayer(peerIndex, peerPath); - } - - @M3U8.onPeerFail - void onPeerFail(String m3u8Url, String peerPath, int peerIndex) { - //ALog.d(TAG, "peer fail, path: " + peerPath + ", index: " + peerIndex); - } - - @Download.onWait - void onWait(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - Log.d(TAG, "wait ==> " + task.getDownloadEntity().getFileName()); + @M3U8.onPeerComplete + void onPeerComplete(String m3u8Url, String peerPath, int peerIndex) { + //ALog.d(TAG, "peer complete, path: " + peerPath + ", index: " + peerIndex); + //mVideoFragment.addPlayer(peerIndex, peerPath); } - } - @Download.onPre - protected void onPre(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "pre"); - getBinding().pl.setInfo(task.getEntity()); + @M3U8.onPeerFail + void onPeerFail(String m3u8Url, String peerPath, int peerIndex) { + //ALog.d(TAG, "peer fail, path: " + peerPath + ", index: " + peerIndex); } - } - @Download.onTaskStart - void taskStart(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); - getBinding().pl.setInfo(task.getEntity()); + @Download.onWait + void onWait(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Log.d(TAG, "wait ==> " + task.getDownloadEntity().getFileName()); + } } - } - @Download.onTaskRunning - protected void running(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, - "m3u8 void running, p = " + task.getPercent() + ", speed = " + task.getConvertSpeed()); - getBinding().pl.setInfo(task.getEntity()); + @Download.onPre + protected void onPre(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "pre"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskResume - void taskResume(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "m3u8 vod resume"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskStart + void taskStart(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskStop - void taskStop(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "stop"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskRunning + protected void running(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, + "m3u8 void running, p = " + task.getPercent() + ", speed = " + task.getConvertSpeed()); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskCancel - void taskCancel(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - Log.d(TAG, "cancel"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskResume + void taskResume(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "m3u8 vod resume"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskFail - void taskFail(DownloadTask task, Exception e) { - if (task.getKey().equals(mUrl)) { - Toast.makeText(this, getString(R.string.download_fail), - Toast.LENGTH_SHORT) - .show(); - Log.d(TAG, "fail"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskStop + void taskStop(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskComplete - void taskComplete(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - Toast.makeText(this, getString(R.string.download_success), - Toast.LENGTH_SHORT).show(); - ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskCancel + void taskCancel(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Override - protected int setLayoutId() { - return R.layout.activity_m3u8_live; - } - - private void startD() { - mTaskId = Aria.download(M3U8LiveDLoadActivity.this) - .load(mUrl) - .setFilePath(mFilePath) - .ignoreFilePathOccupy() - .m3u8LiveOption(getLiveoption()) - .create(); - } - - private M3U8LiveOption getLiveoption() { - M3U8LiveOption option = new M3U8LiveOption(); - option - //.generateIndexFile() - .setLiveTsUrlConvert(new LiveTsUrlConverter()); - //.setBandWidthUrlConverter(new BandWidthUrlConverter(mUrl)); - return option; - } - - @Override protected void dataCallback(int result, Object data) { - super.dataCallback(result, data); - if (result == ModifyUrlDialog.MODIFY_URL_DIALOG_RESULT) { - mModule.uploadUrl(this, String.valueOf(data)); - } else if (result == ModifyPathDialog.MODIFY_PATH_RESULT) { - mModule.updateFilePath(this, String.valueOf(data)); + @Download.onTaskFail + void taskFail(DownloadTask task, Exception e) { + if (task.getKey().equals(mUrl)) { + Toast.makeText(this, getString(R.string.download_fail), + Toast.LENGTH_SHORT) + .show(); + Log.d(TAG, "fail"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - static class LiveTsUrlConverter implements ILiveTsUrlConverter { - @Override public String convert(String m3u8Url, String tsUrl) { - int index = m3u8Url.lastIndexOf("/"); - String parentUrl = m3u8Url.substring(0, index + 1); - return parentUrl + tsUrl; + @Download.onTaskComplete + void taskComplete(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Toast.makeText(this, getString(R.string.download_success), + Toast.LENGTH_SHORT).show(); + ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); + } } - } - static class BandWidthUrlConverter implements IBandWidthUrlConverter { - - @Override public String convert(String m3u8Url, String bandWidthUrl) { - int peerIndex = m3u8Url.lastIndexOf("/"); - return m3u8Url.substring(0, peerIndex + 1) + bandWidthUrl; + @Override + protected int setLayoutId() { + return R.layout.activity_m3u8_live; + } + + private void startD() { + mTaskId = Aria.download(M3U8LiveDLoadActivity.this) + .load(mUrl) + .setFilePath(mFilePath) + .ignoreFilePathOccupy() + .m3u8LiveOption(getLiveoption()) + .create(); + } + + private M3U8LiveOption getLiveoption() { + M3U8LiveOption option = new M3U8LiveOption(); + option + //.generateIndexFile() + .setLiveTsUrlConvert(new LiveTsUrlConverter()); + //.setBandWidthUrlConverter(new BandWidthUrlConverter(mUrl)); + return option; + } + + @Override + protected void dataCallback(int result, Object data) { + super.dataCallback(result, data); + if (result == ModifyUrlDialog.MODIFY_URL_DIALOG_RESULT) { + mModule.uploadUrl(this, String.valueOf(data)); + } else if (result == ModifyPathDialog.MODIFY_PATH_RESULT) { + mModule.updateFilePath(this, String.valueOf(data)); + } + } + + static class LiveTsUrlConverter implements ILiveTsUrlConverter { + @Override + public String convert(String m3u8Url, String tsUrl) { + int index = m3u8Url.lastIndexOf("/"); + String parentUrl = m3u8Url.substring(0, index + 1); + return parentUrl + tsUrl; + } + } + + static class BandWidthUrlConverter implements IBandWidthUrlConverter { + + @Override + public String convert(String m3u8Url, String bandWidthUrl) { + int peerIndex = m3u8Url.lastIndexOf("/"); + return m3u8Url.substring(0, peerIndex + 1) + bandWidthUrl; + } } - } } \ No newline at end of file diff --git a/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8VodDLoadActivity.java b/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8VodDLoadActivity.java index 55096d12..93b51d68 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8VodDLoadActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/m3u8/M3U8VodDLoadActivity.java @@ -24,14 +24,15 @@ import android.view.MenuItem; import android.view.View; import android.widget.SeekBar; import android.widget.Toast; + import androidx.annotation.Nullable; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; + import com.arialyy.annotations.Download; import com.arialyy.annotations.M3U8; import com.arialyy.aria.core.Aria; import com.arialyy.aria.core.common.AbsEntity; -import com.arialyy.aria.core.common.HttpOption; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.download.M3U8Entity; import com.arialyy.aria.core.download.m3u8.M3U8VodOption; @@ -50,325 +51,334 @@ import com.arialyy.simple.common.ModifyUrlDialog; import com.arialyy.simple.databinding.ActivityM3u8VodBinding; import com.arialyy.simple.to.PeerIndex; import com.arialyy.simple.widget.ProgressLayout; -import java.io.File; -import java.util.ArrayList; -import java.util.List; + import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import java.io.File; +import java.util.List; + public class M3U8VodDLoadActivity extends BaseActivity { - private String mUrl; - private String mFilePath; - private M3U8VodModule mModule; - private VideoPlayerFragment mVideoFragment; - private long mTaskId; + private String mUrl; + private String mFilePath; + private M3U8VodModule mModule; + private VideoPlayerFragment mVideoFragment; + private long mTaskId; - @Override - protected void init(Bundle savedInstanceState) { - super.init(savedInstanceState); - setTitle(getString(R.string.m3u8_file)); - Aria.download(this).register(); - mModule = ViewModelProviders.of(this).get(M3U8VodModule.class); - mModule.getHttpDownloadInfo(this).observe(this, new Observer() { + @Override + protected void init(Bundle savedInstanceState) { + super.init(savedInstanceState); + setTitle(getString(R.string.m3u8_file)); + Aria.download(this).register(); + mModule = ViewModelProviders.of(this).get(M3U8VodModule.class); + mModule.getHttpDownloadInfo(this).observe(this, new Observer() { - @Override public void onChanged(@Nullable DownloadEntity entity) { - if (entity == null) { - return; + @Override + public void onChanged(@Nullable DownloadEntity entity) { + if (entity == null) { + return; + } + if (entity.getM3U8Entity() != null) { + getBinding().seekBar.setMax(entity.getM3U8Entity().getPeerNum()); + } + mTaskId = entity.getId(); + mUrl = entity.getUrl(); + mFilePath = entity.getFilePath(); + getBinding().pl.setInfo(entity); + //mVideoFragment = new VideoPlayerFragment(0, entity); + //FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + //ft.add(R.id.video_content, mVideoFragment); + //ft.commit(); + } + }); + getBinding().seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + Aria.download(this).load(mTaskId).m3u8VodOption().jumPeerIndex(seekBar.getProgress()); + } + }); + getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { + @Override + public void create(View v, AbsEntity entity) { + startD(); + } + + @Override + public void stop(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).stop(); + } + + @Override + public void resume(View v, AbsEntity entity) { + Aria.download(this) + .load(mTaskId) + .m3u8VodOption(getM3U8Option()) + .resume(); + } + + @Override + public void cancel(View v, AbsEntity entity) { + Aria.download(this).load(mTaskId).cancel(true); + mTaskId = -1; + } + }); + } + + public void chooseUrl() { + ModifyUrlDialog dialog = + new ModifyUrlDialog(this, getString(R.string.modify_url_dialog_title), mUrl); + dialog.show(getSupportFragmentManager(), "ModifyUrlDialog"); + } + + public void chooseFilePath() { + ModifyPathDialog dialog = + new ModifyPathDialog(this, getString(R.string.modify_file_path), mFilePath); + dialog.show(getSupportFragmentManager(), "ModifyPathDialog"); + } + + @Override + protected void onStart() { + super.onStart(); + EventBus.getDefault().register(this); + } + + @Override + protected void onStop() { + super.onStop(); + EventBus.getDefault().unregister(this); + } + + @Subscribe(threadMode = ThreadMode.MAIN) + public void jumpIndex(PeerIndex index) { + Aria.download(this).load(mTaskId).m3u8VodOption().jumPeerIndex(index.index); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_single_task_activity, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onMenuItemClick(MenuItem item) { + int speed = -1; + String msg = ""; + int itemId = item.getItemId(); + if (itemId == R.id.help) { + msg = "一些小知识点:\n" + + "1、你可以在注解中增加链接,用于指定被注解的方法只能被特定的下载任务回调,以防止progress乱跳\n" + + "2、当遇到网络慢的情况时,你可以先使用onPre()更新UI界面,待连接成功时,再在onTaskPre()获取完整的task数据,然后给UI界面设置正确的数据\n" + + "3、你可以在界面初始化时通过Aria.download(this).load(URL).getPercent()等方法快速获取相关任务的一些数据"; + showMsgDialog("tip", msg); + } else if (itemId == R.id.speed_0) { + speed = 0; + } else if (itemId == R.id.speed_128) { + speed = 128; + } else if (itemId == R.id.speed_256) { + speed = 256; + } else if (itemId == R.id.speed_512) { + speed = 512; + } else if (itemId == R.id.speed_1m) { + speed = 1024; } - if (entity.getM3U8Entity() != null) { - getBinding().seekBar.setMax(entity.getM3U8Entity().getPeerNum()); + if (speed > -1) { + msg = item.getTitle().toString(); + Aria.download(this).setMaxSpeed(speed); + T.showShort(this, msg); } - mTaskId = entity.getId(); - mUrl = entity.getUrl(); - mFilePath = entity.getFilePath(); - getBinding().pl.setInfo(entity); - //mVideoFragment = new VideoPlayerFragment(0, entity); - //FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - //ft.add(R.id.video_content, mVideoFragment); - //ft.commit(); - } - }); - getBinding().seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { - - } - - @Override public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override public void onStopTrackingTouch(SeekBar seekBar) { - Aria.download(this).load(mTaskId).m3u8VodOption().jumPeerIndex(seekBar.getProgress()); - } - }); - getBinding().pl.setBtListener(new ProgressLayout.OnProgressLayoutBtListener() { - @Override public void create(View v, AbsEntity entity) { - startD(); - } - - @Override public void stop(View v, AbsEntity entity) { - Aria.download(this).load(mTaskId).stop(); - } - - @Override public void resume(View v, AbsEntity entity) { - Aria.download(this) - .load(mTaskId) - .m3u8VodOption(getM3U8Option()) - .resume(); - } - - @Override public void cancel(View v, AbsEntity entity) { - Aria.download(this).load(mTaskId).cancel(true); - mTaskId = -1; - } - }); - } - - public void chooseUrl() { - ModifyUrlDialog dialog = - new ModifyUrlDialog(this, getString(R.string.modify_url_dialog_title), mUrl); - dialog.show(getSupportFragmentManager(), "ModifyUrlDialog"); - } - - public void chooseFilePath() { - ModifyPathDialog dialog = - new ModifyPathDialog(this, getString(R.string.modify_file_path), mFilePath); - dialog.show(getSupportFragmentManager(), "ModifyPathDialog"); - } - - @Override protected void onStart() { - super.onStart(); - EventBus.getDefault().register(this); - } - - @Override protected void onStop() { - super.onStop(); - EventBus.getDefault().unregister(this); - } - - @Subscribe(threadMode = ThreadMode.MAIN) - public void jumpIndex(PeerIndex index) { - Aria.download(this).load(mTaskId).m3u8VodOption().jumPeerIndex(index.index); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_single_task_activity, menu); - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onMenuItemClick(MenuItem item) { - int speed = -1; - String msg = ""; - switch (item.getItemId()) { - case R.id.help: - msg = "一些小知识点:\n" - + "1、你可以在注解中增加链接,用于指定被注解的方法只能被特定的下载任务回调,以防止progress乱跳\n" - + "2、当遇到网络慢的情况时,你可以先使用onPre()更新UI界面,待连接成功时,再在onTaskPre()获取完整的task数据,然后给UI界面设置正确的数据\n" - + "3、你可以在界面初始化时通过Aria.download(this).load(URL).getPercent()等方法快速获取相关任务的一些数据"; - showMsgDialog("tip", msg); - break; - case R.id.speed_0: - speed = 0; - break; - case R.id.speed_128: - speed = 128; - break; - case R.id.speed_256: - speed = 256; - break; - case R.id.speed_512: - speed = 512; - break; - case R.id.speed_1m: - speed = 1024; - break; + return true; } - if (speed > -1) { - msg = item.getTitle().toString(); - Aria.download(this).setMaxSpeed(speed); - T.showShort(this, msg); + + @M3U8.onPeerStart + void onPeerStart(String m3u8Url, String peerPath, int peerIndex) { + //ALog.d(TAG, "peer create, path: " + peerPath + ", index: " + peerIndex); } - return true; - } - @M3U8.onPeerStart - void onPeerStart(String m3u8Url, String peerPath, int peerIndex) { - //ALog.d(TAG, "peer create, path: " + peerPath + ", index: " + peerIndex); - } - - @M3U8.onPeerComplete - void onPeerComplete(String m3u8Url, String peerPath, int peerIndex) { - //ALog.d(TAG, "peer complete, path: " + peerPath + ", index: " + peerIndex); - //mVideoFragment.addPlayer(peerIndex, peerPath); - } - - @M3U8.onPeerFail - void onPeerFail(String m3u8Url, String peerPath, int peerIndex) { - //ALog.d(TAG, "peer fail, path: " + peerPath + ", index: " + peerIndex); - } - - @Download.onWait - void onWait(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - Log.d(TAG, "wait ==> " + task.getDownloadEntity().getFileName()); + @M3U8.onPeerComplete + void onPeerComplete(String m3u8Url, String peerPath, int peerIndex) { + //ALog.d(TAG, "peer complete, path: " + peerPath + ", index: " + peerIndex); + //mVideoFragment.addPlayer(peerIndex, peerPath); } - } - @Download.onPre - protected void onPre(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "pre"); - getBinding().pl.setInfo(task.getEntity()); + @M3U8.onPeerFail + void onPeerFail(String m3u8Url, String peerPath, int peerIndex) { + //ALog.d(TAG, "peer fail, path: " + peerPath + ", index: " + peerIndex); } - } - @Download.onTaskStart - void taskStart(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); - getBinding().seekBar.setMax(task.getEntity().getM3U8Entity().getPeerNum()); - getBinding().pl.setInfo(task.getEntity()); + @Download.onWait + void onWait(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Log.d(TAG, "wait ==> " + task.getDownloadEntity().getFileName()); + } } - } - @Download.onTaskRunning - protected void running(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, - "m3u8 void running, p = " + task.getPercent() + ", speed = " + task.getConvertSpeed()); - getBinding().pl.setInfo(task.getEntity()); + @Download.onPre + protected void onPre(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "pre"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskResume - void taskResume(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "m3u8 vod resume"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskStart + void taskStart(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "isComplete = " + task.isComplete() + ", state = " + task.getState()); + getBinding().seekBar.setMax(task.getEntity().getM3U8Entity().getPeerNum()); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskStop - void taskStop(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - ALog.d(TAG, "stop"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskRunning + protected void running(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, + "m3u8 void running, p = " + task.getPercent() + ", speed = " + task.getConvertSpeed()); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskCancel - void taskCancel(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - Log.d(TAG, "cancel"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskResume + void taskResume(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "m3u8 vod resume"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskFail - void taskFail(DownloadTask task, Exception e) { - if (task != null && task.getKey().equals(mUrl)) { - Toast.makeText(M3U8VodDLoadActivity.this, getString(R.string.download_fail), - Toast.LENGTH_SHORT) - .show(); - Log.d(TAG, "fail"); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskStop + void taskStop(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + ALog.d(TAG, "stop"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Download.onTaskComplete - void taskComplete(DownloadTask task) { - if (task.getKey().equals(mUrl)) { - Toast.makeText(M3U8VodDLoadActivity.this, getString(R.string.download_success), - Toast.LENGTH_SHORT).show(); - ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); - getBinding().pl.setInfo(task.getEntity()); + @Download.onTaskCancel + void taskCancel(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Log.d(TAG, "cancel"); + getBinding().pl.setInfo(task.getEntity()); + } } - } - @Override - protected int setLayoutId() { - return R.layout.activity_m3u8_vod; - } + @Download.onTaskFail + void taskFail(DownloadTask task, Exception e) { + if (task != null && task.getKey().equals(mUrl)) { + Toast.makeText(M3U8VodDLoadActivity.this, getString(R.string.download_fail), + Toast.LENGTH_SHORT) + .show(); + Log.d(TAG, "fail"); + getBinding().pl.setInfo(task.getEntity()); + } + } - private void startD() { - mTaskId = Aria.download(M3U8VodDLoadActivity.this) - .load(mUrl) - .setFilePath(mFilePath) - .ignoreFilePathOccupy() - .m3u8VodOption(getM3U8Option()) - .create(); - } + @Download.onTaskComplete + void taskComplete(DownloadTask task) { + if (task.getKey().equals(mUrl)) { + Toast.makeText(M3U8VodDLoadActivity.this, getString(R.string.download_success), + Toast.LENGTH_SHORT).show(); + ALog.d(TAG, "md5: " + CommonUtil.getFileMD5(new File(task.getFilePath()))); + getBinding().pl.setInfo(task.getEntity()); + } + } - private M3U8VodOption getM3U8Option() { - M3U8VodOption option = new M3U8VodOption(); - //option.setBandWidth(200000); + @Override + protected int setLayoutId() { + return R.layout.activity_m3u8_vod; + } + + private void startD() { + mTaskId = Aria.download(M3U8VodDLoadActivity.this) + .load(mUrl) + .setFilePath(mFilePath) + .ignoreFilePathOccupy() + .m3u8VodOption(getM3U8Option()) + .create(); + } + + private M3U8VodOption getM3U8Option() { + M3U8VodOption option = new M3U8VodOption(); + //option.setBandWidth(200000); //.generateIndexFile() //.merge(true) //.setVodTsUrlConvert(new VodTsUrlConverter()); - //.setMergeHandler(new TsMergeHandler()); - option.setUseDefConvert(true); - option.generateIndexFile(); - //option.setKeyUrlConverter(new KeyUrlConverter()); - //option.setVodTsUrlConvert(new VodTsUrlConverter()); - option.setBandWidthUrlConverter(new BandWidthUrlConverter()); - //option.setUseDefConvert(true); - return option; - } - - @Override protected void dataCallback(int result, Object data) { - super.dataCallback(result, data); - if (result == ModifyUrlDialog.MODIFY_URL_DIALOG_RESULT) { - mModule.uploadUrl(this, String.valueOf(data)); - } else if (result == ModifyPathDialog.MODIFY_PATH_RESULT) { - mModule.updateFilePath(this, String.valueOf(data)); + //.setMergeHandler(new TsMergeHandler()); + option.setUseDefConvert(true); + option.generateIndexFile(); + //option.setKeyUrlConverter(new KeyUrlConverter()); + //option.setVodTsUrlConvert(new VodTsUrlConverter()); + option.setBandWidthUrlConverter(new BandWidthUrlConverter()); + //option.setUseDefConvert(true); + return option; } - } - static class VodTsUrlConverter implements IVodTsUrlConverter { - @Override public List convert(String m3u8Url, List tsUrls) { - Uri uri = Uri.parse(m3u8Url); - //String parentUrl = "http://devimages.apple.com/iphone/samples/bipbop/gear1/"; - //String parentUrl = "http://youku.cdn7-okzy.com/20200123/16815_fbe419ed/1000k/hls/"; - //String parentUrl = "http://" + uri.getHost() + "/gear1/"; - //int index = m3u8Url.lastIndexOf("/"); - //String parentUrl = m3u8Url.substring(0, index + 1); - //String parentUrl = "https://v1.szjal.cn/20190819/Ql6UD1od/"; - //String parentUrl = "http://" + uri.getHost() + "/"; - //List newUrls = new ArrayList<>(); - //for (String url : tsUrls) { - // newUrls.add(parentUrl + url); - //} - - //return newUrls; - return tsUrls; + @Override + protected void dataCallback(int result, Object data) { + super.dataCallback(result, data); + if (result == ModifyUrlDialog.MODIFY_URL_DIALOG_RESULT) { + mModule.uploadUrl(this, String.valueOf(data)); + } else if (result == ModifyPathDialog.MODIFY_PATH_RESULT) { + mModule.updateFilePath(this, String.valueOf(data)); + } } - } - static class TsMergeHandler implements ITsMergeHandler { - public boolean merge(@Nullable M3U8Entity m3U8Entity, List tsPath) { - ALog.d("TsMergeHandler", "合并TS...."); - return false; + static class VodTsUrlConverter implements IVodTsUrlConverter { + @Override + public List convert(String m3u8Url, List tsUrls) { + Uri uri = Uri.parse(m3u8Url); + //String parentUrl = "http://devimages.apple.com/iphone/samples/bipbop/gear1/"; + //String parentUrl = "http://youku.cdn7-okzy.com/20200123/16815_fbe419ed/1000k/hls/"; + //String parentUrl = "http://" + uri.getHost() + "/gear1/"; + //int index = m3u8Url.lastIndexOf("/"); + //String parentUrl = m3u8Url.substring(0, index + 1); + //String parentUrl = "https://v1.szjal.cn/20190819/Ql6UD1od/"; + //String parentUrl = "http://" + uri.getHost() + "/"; + //List newUrls = new ArrayList<>(); + //for (String url : tsUrls) { + // newUrls.add(parentUrl + url); + //} + + //return newUrls; + return tsUrls; + } } - } - static class BandWidthUrlConverter implements IBandWidthUrlConverter { - - - @Override public String convert(String m3u8Url, String bandWidthUrl) { - int index = m3u8Url.lastIndexOf("/"); - return m3u8Url.substring(0, index + 1) + bandWidthUrl; + static class TsMergeHandler implements ITsMergeHandler { + public boolean merge(@Nullable M3U8Entity m3U8Entity, List tsPath) { + ALog.d("TsMergeHandler", "合并TS...."); + return false; + } } - } - static class KeyUrlConverter implements IKeyUrlConverter { + static class BandWidthUrlConverter implements IBandWidthUrlConverter { - @Override public String convert(String m3u8Url, String tsListUrl, String keyUrl) { - ALog.d("TAG", "convertUrl...."); - return null; + + @Override + public String convert(String m3u8Url, String bandWidthUrl) { + int index = m3u8Url.lastIndexOf("/"); + return m3u8Url.substring(0, index + 1) + bandWidthUrl; + } + } + + static class KeyUrlConverter implements IKeyUrlConverter { + + @Override + public String convert(String m3u8Url, String tsListUrl, String keyUrl) { + ALog.d("TAG", "convertUrl...."); + return null; + } } - } } \ No newline at end of file diff --git a/app/src/main/java/com/arialyy/simple/core/download/mutil/MultiTaskListActivity.java b/app/src/main/java/com/arialyy/simple/core/download/mutil/MultiTaskListActivity.java index 471e3167..011febf2 100644 --- a/app/src/main/java/com/arialyy/simple/core/download/mutil/MultiTaskListActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/download/mutil/MultiTaskListActivity.java @@ -20,9 +20,11 @@ import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; + import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; + import com.arialyy.annotations.Download; import com.arialyy.annotations.DownloadGroup; import com.arialyy.aria.core.Aria; @@ -35,6 +37,7 @@ import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; import com.arialyy.simple.core.download.DownloadModule; import com.arialyy.simple.databinding.ActivityMultiBinding; + import java.io.File; import java.util.ArrayList; import java.util.List; @@ -43,123 +46,137 @@ import java.util.List; * Created by Lyy on 2016/9/27. */ public class MultiTaskListActivity extends BaseActivity { - RecyclerView mList; - Toolbar mBar; - private FileListAdapter mAdapter; - List mData = new ArrayList<>(); + RecyclerView mList; + Toolbar mBar; + private FileListAdapter mAdapter; + List mData = new ArrayList<>(); - @Override protected int setLayoutId() { - return R.layout.activity_multi; - } + @Override + protected int setLayoutId() { + return R.layout.activity_multi; + } - @Override protected void init(Bundle savedInstanceState) { - super.init(savedInstanceState); - Aria.download(this).register(); - setTitle("多任务下载"); - mData.addAll(getModule(DownloadModule.class).createGroupTestList()); - mData.addAll(getModule(DownloadModule.class).createMultiTestList()); - mData.addAll(getModule(DownloadModule.class).createM3u8TestList()); - mAdapter = new FileListAdapter(this, mData); - mList = getBinding().list; - mBar = findViewById(R.id.toolbar); - mList.setLayoutManager(new LinearLayoutManager(this)); - mList.setAdapter(mAdapter); - } + @Override + protected void init(Bundle savedInstanceState) { + super.init(savedInstanceState); + Aria.download(this).register(); + setTitle("多任务下载"); + mData.addAll(getModule(DownloadModule.class).createGroupTestList()); + mData.addAll(getModule(DownloadModule.class).createMultiTestList()); + mData.addAll(getModule(DownloadModule.class).createM3u8TestList()); + mAdapter = new FileListAdapter(this, mData); + mList = getBinding().list; + mBar = findViewById(R.id.toolbar); + mList.setLayoutManager(new LinearLayoutManager(this)); + mList.setAdapter(mAdapter); + } - public void onClick(View view) { - switch (view.getId()) { - case R.id.num: - DownloadNumDialog dialog = new DownloadNumDialog(this); - dialog.show(getSupportFragmentManager(), "download_num"); - break; - case R.id.stop_all: - //Aria.download(this).stopAllTask(); - List list = Aria.download(this).getTotalTaskList(); - for (AbsEntity entity : list){ - Aria.download(this).load(entity.getId()).cancel(true); + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.num) { + DownloadNumDialog dialog = new DownloadNumDialog(this); + dialog.show(getSupportFragmentManager(), "download_num"); + } else if (id == R.id.stop_all) {//Aria.download(this).stopAllTask(); + List list = Aria.download(this).getTotalTaskList(); + for (AbsEntity entity : list) { + Aria.download(this).load(entity.getId()).cancel(true); + } + //Aria.download(this).removeAllTask(false); + } else if (id == R.id.turn) { + startActivity(new Intent(this, MultiDownloadActivity.class)); } - //Aria.download(this).removeAllTask(false); - break; - case R.id.turn: - startActivity(new Intent(this, MultiDownloadActivity.class)); - break; } - } - @Download.onWait void taskWait(DownloadTask task) { - Log.d(TAG, "wait ==> " + task.getDownloadEntity().getFileName()); - } - - @Download.onTaskStart void taskStart(DownloadTask task) { - mAdapter.updateBtState(task.getKey(), false); - } - - @Download.onTaskResume void taskResume(DownloadTask task) { - mAdapter.updateBtState(task.getKey(), false); - } - - @Download.onTaskStop void taskStop(DownloadTask task) { - mAdapter.updateBtState(task.getKey(), true); - } - - @Download.onTaskCancel void taskCancel(DownloadTask task) { - mAdapter.updateBtState(task.getKey(), true); - } - - @Download.onTaskFail void taskFail(DownloadTask task) { - if (task == null || task.getEntity() == null){ - return; + @Download.onWait + void taskWait(DownloadTask task) { + Log.d(TAG, "wait ==> " + task.getDownloadEntity().getFileName()); } - mAdapter.updateBtState(task.getKey(), true); - } - @Download.onTaskComplete void taskComplete(DownloadTask task) { - Log.d(TAG, FileUtil.getFileMD5(new File(task.getFilePath()))); - } - - //############################### 任务组 ############################## - @DownloadGroup.onTaskComplete void groupTaskComplete(DownloadGroupTask task) { - mAdapter.updateBtState(task.getKey(), true); - } - - @DownloadGroup.onTaskStart void groupTaskStart(DownloadGroupTask task) { - mAdapter.updateBtState(task.getKey(), false); - } - - @DownloadGroup.onTaskResume void groupTaskResume(DownloadGroupTask task) { - mAdapter.updateBtState(task.getKey(), false); - } - - @DownloadGroup.onWait void groupTaskWait(DownloadGroupTask task) { - ALog.d(TAG, String.format("group【%s】wait---", task.getTaskName())); - mAdapter.updateBtState(task.getKey(), true); - } - - @DownloadGroup.onTaskStop void groupTaskStop(DownloadGroupTask task) { - mAdapter.updateBtState(task.getKey(), true); - Log.d(TAG, String.format("group【%s】stop", task.getTaskName())); - } - - @DownloadGroup.onTaskCancel void groupTaskCancel(DownloadGroupTask task) { - mAdapter.updateBtState(task.getKey(), true); - } - - @DownloadGroup.onTaskFail void groupTaskFail(DownloadGroupTask task) { - if (task == null) { - return; + @Download.onTaskStart + void taskStart(DownloadTask task) { + mAdapter.updateBtState(task.getKey(), false); } - mAdapter.updateBtState(task.getKey(), true); - Log.d(TAG, String.format("group【%s】fail", task.getTaskName())); - } - @DownloadGroup.onTaskComplete void taskComplete(DownloadGroupTask task) { - mAdapter.updateBtState(task.getKey(), true); - } - - @Override protected void dataCallback(int result, Object data) { - super.dataCallback(result, data); - if (result == DownloadNumDialog.RESULT_CODE) { - Aria.get(this).getDownloadConfig().setMaxTaskNum(Integer.parseInt(data + "")); + @Download.onTaskResume + void taskResume(DownloadTask task) { + mAdapter.updateBtState(task.getKey(), false); + } + + @Download.onTaskStop + void taskStop(DownloadTask task) { + mAdapter.updateBtState(task.getKey(), true); + } + + @Download.onTaskCancel + void taskCancel(DownloadTask task) { + mAdapter.updateBtState(task.getKey(), true); + } + + @Download.onTaskFail + void taskFail(DownloadTask task) { + if (task == null || task.getEntity() == null) { + return; + } + mAdapter.updateBtState(task.getKey(), true); + } + + @Download.onTaskComplete + void taskComplete(DownloadTask task) { + Log.d(TAG, FileUtil.getFileMD5(new File(task.getFilePath()))); + } + + //############################### 任务组 ############################## + @DownloadGroup.onTaskComplete + void groupTaskComplete(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), true); + } + + @DownloadGroup.onTaskStart + void groupTaskStart(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), false); + } + + @DownloadGroup.onTaskResume + void groupTaskResume(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), false); + } + + @DownloadGroup.onWait + void groupTaskWait(DownloadGroupTask task) { + ALog.d(TAG, String.format("group【%s】wait---", task.getTaskName())); + mAdapter.updateBtState(task.getKey(), true); + } + + @DownloadGroup.onTaskStop + void groupTaskStop(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), true); + Log.d(TAG, String.format("group【%s】stop", task.getTaskName())); + } + + @DownloadGroup.onTaskCancel + void groupTaskCancel(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), true); + } + + @DownloadGroup.onTaskFail + void groupTaskFail(DownloadGroupTask task) { + if (task == null) { + return; + } + mAdapter.updateBtState(task.getKey(), true); + Log.d(TAG, String.format("group【%s】fail", task.getTaskName())); + } + + @DownloadGroup.onTaskComplete + void taskComplete(DownloadGroupTask task) { + mAdapter.updateBtState(task.getKey(), true); + } + + @Override + protected void dataCallback(int result, Object data) { + super.dataCallback(result, data); + if (result == DownloadNumDialog.RESULT_CODE) { + Aria.get(this).getDownloadConfig().setMaxTaskNum(Integer.parseInt(data + "")); + } } - } } \ No newline at end of file diff --git a/app/src/main/java/com/arialyy/simple/core/test/AnyRunActivity.java b/app/src/main/java/com/arialyy/simple/core/test/AnyRunActivity.java index 1333f538..5b0309bb 100644 --- a/app/src/main/java/com/arialyy/simple/core/test/AnyRunActivity.java +++ b/app/src/main/java/com/arialyy/simple/core/test/AnyRunActivity.java @@ -2,8 +2,8 @@ package com.arialyy.simple.core.test; import android.os.Bundle; import android.view.View; + import com.arialyy.aria.core.Aria; -import com.arialyy.aria.core.download.DTaskWrapper; import com.arialyy.simple.R; import com.arialyy.simple.base.BaseActivity; import com.arialyy.simple.databinding.ActivityTestBinding; @@ -14,60 +14,59 @@ import com.arialyy.simple.modlue.AnyRunnModule; */ public class AnyRunActivity extends BaseActivity { - AnyRunnModule module; - String[] urls; - int index = 0; - //String URL = "http://static.gaoshouyou.com/d/12/0d/7f120f50c80d2e7b8c4ba24ece4f9cdd.apk"; - //String URL = "http://58.213.157.242:8081/sims_file/rest/v1/file/mshd_touchscreen_ms/guideFile/41c33556-dc4a-4d78-bb76-b9f627f94448.mp4/%E5%85%AB%E5%8D%A6%E6%B4%B2%E5%8D%97%E4%BA%AC%E5%86%9C%E4%B8%9A%E5%98%89%E5%B9%B4%E5%8D%8E0511.mp4"; - //String URL = "http://d1.showself.com/download/showself_android-s236279_release.apk"; - //String URL = "http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; - //private final String URL = "ftp://192.168.29.140:21/download/AriaPrj.rar"; - //String URL = "https://dl.genymotion.com/releases/genymotion-2.12.1/genymotion-2.12.1-vbox.exe"; - //String URL = "ftp://192.168.29.140:21/download/SDK_Demo-release.apk"; - //String URL = "ftps://192.168.29.140:990/download/SDK_Demo-release.apk"; - //String URL = "http://d.quanscreen.com/k/down/resourceDownLoad?resourceId=1994&clientId=A000011106034058176"; - //String URL = "ftp://z:z@dygod18.com:21211/[电影天堂www.dy2018.com]猩球崛起3:终极之战BD国英双语中英双字.mkv"; - //String URL = "https://app-dl.byfen.com//app//201810//ef0400d637e768e9c630b4d38633ee06.zip"; - String URL = "ftps://9.9.9.59:990/download/SDK_Demo-release.apk"; - //private String URL = "https://www.bilibili.com/bangumi/play/ep77693"; - //private String URL = "http://cn-hbsjz-cmcc-v-03.acgvideo.com/upgcxcode/63/82/5108263/5108263-1-80.flv?expires=1530178500&platform=pc&ssig=vr7gLl0duyqWqSMnIpzaDA&oi=3746029570&nfa=BpfiWF+i4mNW8KzjZFHzBQ==&dynamic=1&hfa=2030547937&hfb=Yjk5ZmZjM2M1YzY4ZjAwYTMzMTIzYmIyNWY4ODJkNWI=&trid=3476be01a9254115b15f8cc7198600fe&nfc=1"; + AnyRunnModule module; + String[] urls; + int index = 0; + //String URL = "http://static.gaoshouyou.com/d/12/0d/7f120f50c80d2e7b8c4ba24ece4f9cdd.apk"; + //String URL = "http://58.213.157.242:8081/sims_file/rest/v1/file/mshd_touchscreen_ms/guideFile/41c33556-dc4a-4d78-bb76-b9f627f94448.mp4/%E5%85%AB%E5%8D%A6%E6%B4%B2%E5%8D%97%E4%BA%AC%E5%86%9C%E4%B8%9A%E5%98%89%E5%B9%B4%E5%8D%8E0511.mp4"; + //String URL = "http://d1.showself.com/download/showself_android-s236279_release.apk"; + //String URL = "http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; + //private final String URL = "ftp://192.168.29.140:21/download/AriaPrj.rar"; + //String URL = "https://dl.genymotion.com/releases/genymotion-2.12.1/genymotion-2.12.1-vbox.exe"; + //String URL = "ftp://192.168.29.140:21/download/SDK_Demo-release.apk"; + //String URL = "ftps://192.168.29.140:990/download/SDK_Demo-release.apk"; + //String URL = "http://d.quanscreen.com/k/down/resourceDownLoad?resourceId=1994&clientId=A000011106034058176"; + //String URL = "ftp://z:z@dygod18.com:21211/[电影天堂www.dy2018.com]猩球崛起3:终极之战BD国英双语中英双字.mkv"; + //String URL = "https://app-dl.byfen.com//app//201810//ef0400d637e768e9c630b4d38633ee06.zip"; + String URL = "ftps://9.9.9.59:990/download/SDK_Demo-release.apk"; + //private String URL = "https://www.bilibili.com/bangumi/play/ep77693"; + //private String URL = "http://cn-hbsjz-cmcc-v-03.acgvideo.com/upgcxcode/63/82/5108263/5108263-1-80.flv?expires=1530178500&platform=pc&ssig=vr7gLl0duyqWqSMnIpzaDA&oi=3746029570&nfa=BpfiWF+i4mNW8KzjZFHzBQ==&dynamic=1&hfa=2030547937&hfb=Yjk5ZmZjM2M1YzY4ZjAwYTMzMTIzYmIyNWY4ODJkNWI=&trid=3476be01a9254115b15f8cc7198600fe&nfc=1"; - @Override protected int setLayoutId() { - return R.layout.activity_test; - } - - @Override protected void init(Bundle savedInstanceState) { - super.init(savedInstanceState); - Aria.init(this); - mBar.setVisibility(View.GONE); - module = new AnyRunnModule(this); - urls = getResources().getStringArray(R.array.group_urls); - } - - public void onClick(View view) { - switch (view.getId()) { - case R.id.start: - //module.create(URL); - module.startFtp(URL); - break; - case R.id.stop: - module.stop(URL); - break; - case R.id.cancel: - module.cancel(URL); - //String newUrl = "ftp://192.168.29.140:21/download/11SDK_Demo-release.apk"; - //Aria.download(this) - // .loadFtp(URL) - // .updateUrl(newUrl) - // .login("lao", "123456") - // .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/") - // .create(); - break; + @Override + protected int setLayoutId() { + return R.layout.activity_test; } - } - @Override protected void onDestroy() { - super.onDestroy(); - module.unRegister(); - } + @Override + protected void init(Bundle savedInstanceState) { + super.init(savedInstanceState); + Aria.init(this); + mBar.setVisibility(View.GONE); + module = new AnyRunnModule(this); + urls = getResources().getStringArray(R.array.group_urls); + } + + public void onClick(View view) { + int id = view.getId(); + if (id == R.id.start) {//module.create(URL); + module.startFtp(URL); + } else if (id == R.id.stop) { + module.stop(URL); + } else if (id == R.id.cancel) { + module.cancel(URL); + //String newUrl = "ftp://192.168.29.140:21/download/11SDK_Demo-release.apk"; + //Aria.download(this) + // .loadFtp(URL) + // .updateUrl(newUrl) + // .login("lao", "123456") + // .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/") + // .create(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + module.unRegister(); + } } diff --git a/app/src/main/java/com/arialyy/simple/widget/ProgressLayout.java b/app/src/main/java/com/arialyy/simple/widget/ProgressLayout.java index 64aa49a9..b276baae 100644 --- a/app/src/main/java/com/arialyy/simple/widget/ProgressLayout.java +++ b/app/src/main/java/com/arialyy/simple/widget/ProgressLayout.java @@ -22,7 +22,9 @@ import android.view.View; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; + import androidx.appcompat.widget.AppCompatImageButton; + import com.arialyy.aria.core.common.AbsEntity; import com.arialyy.aria.core.common.AbsGroupEntity; import com.arialyy.aria.core.common.AbsNormalEntity; @@ -30,238 +32,238 @@ import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.util.ALog; import com.arialyy.aria.util.CommonUtil; import com.arialyy.simple.R; + import java.math.BigDecimal; /** * 统一的进度布局 */ public class ProgressLayout extends RelativeLayout implements View.OnClickListener { - private final String TAG = "ProgressLayout"; - private TextView speedOrState, fileName, leftTime, fileSize; - private HorizontalProgressBarWithNumber pb; - private AppCompatImageButton delBt; - private Button handleBt; - private OnProgressLayoutBtListener listener; - private AbsEntity entity; - private int currentState; + private final String TAG = "ProgressLayout"; + private TextView speedOrState, fileName, leftTime, fileSize; + private HorizontalProgressBarWithNumber pb; + private AppCompatImageButton delBt; + private Button handleBt; + private OnProgressLayoutBtListener listener; + private AbsEntity entity; + private int currentState; - public interface OnProgressLayoutBtListener { - /** - * 处理创建操作 - */ - void create(View v, AbsEntity entity); + public interface OnProgressLayoutBtListener { + /** + * 处理创建操作 + */ + void create(View v, AbsEntity entity); - /** - * 处理任务暂停的操作 - */ - void stop(View v, AbsEntity entity); + /** + * 处理任务暂停的操作 + */ + void stop(View v, AbsEntity entity); - /** - * 处理恢复任务的操作 - */ - void resume(View v, AbsEntity entity); + /** + * 处理恢复任务的操作 + */ + void resume(View v, AbsEntity entity); - /** - * 处理任务删除的操作 - */ - void cancel(View v, AbsEntity entity); - } - - public ProgressLayout(Context context) { - this(context, null); - } - - public ProgressLayout(Context context, AttributeSet attrs) { - this(context, attrs, -1); - } - - public ProgressLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(context, attrs); - } - - private void init(Context context, AttributeSet attrs) { - LayoutInflater.from(context).inflate(R.layout.layout_progress_content, this, true); - speedOrState = findViewById(R.id.speed_or_state); - fileName = findViewById(R.id.file_name); - leftTime = findViewById(R.id.left_time); - fileSize = findViewById(R.id.file_size); - pb = findViewById(R.id.pb); - delBt = findViewById(R.id.del_bt); - handleBt = findViewById(R.id.handle_bt); - delBt.setOnClickListener(this); - handleBt.setOnClickListener(this); - } - - public void setBtListener(OnProgressLayoutBtListener listener) { - this.listener = listener; - } - - @Override public void onClick(View v) { - if (listener == null) { - ALog.e(TAG, "没有设置OnProgressLayoutBtListener"); - return; - } - if (entity == null) { - ALog.d(TAG, "entity 为空,请设置信息"); - return; + /** + * 处理任务删除的操作 + */ + void cancel(View v, AbsEntity entity); } - switch (v.getId()) { - case R.id.del_bt: - listener.cancel(v, entity); - initState(); - break; - case R.id.handle_bt: - handleTask(v); - break; + public ProgressLayout(Context context) { + this(context, null); } - } - private void initState() { - fileName.setText("-"); - leftTime.setText(""); - speedOrState.setText(""); - fileSize.setText("-/-"); - pb.setProgress(0); - } + public ProgressLayout(Context context, AttributeSet attrs) { + this(context, attrs, -1); + } - private void handleTask(View v) { - switch (entity.getState()) { - case IEntity.STATE_OTHER: - case IEntity.STATE_FAIL: - case IEntity.STATE_STOP: - listener.resume(v, entity); - break; - case IEntity.STATE_COMPLETE: - case IEntity.STATE_WAIT: - if (entity.getId() != -1) { - listener.resume(v, entity); - } else { - listener.create(v, entity); + public ProgressLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) { + LayoutInflater.from(context).inflate(R.layout.layout_progress_content, this, true); + speedOrState = findViewById(R.id.speed_or_state); + fileName = findViewById(R.id.file_name); + leftTime = findViewById(R.id.left_time); + fileSize = findViewById(R.id.file_size); + pb = findViewById(R.id.pb); + delBt = findViewById(R.id.del_bt); + handleBt = findViewById(R.id.handle_bt); + delBt.setOnClickListener(this); + handleBt.setOnClickListener(this); + } + + public void setBtListener(OnProgressLayoutBtListener listener) { + this.listener = listener; + } + + @Override + public void onClick(View v) { + if (listener == null) { + ALog.e(TAG, "没有设置OnProgressLayoutBtListener"); + return; + } + if (entity == null) { + ALog.d(TAG, "entity 为空,请设置信息"); + return; } - break; - case IEntity.STATE_PRE: - case IEntity.STATE_POST_PRE: - case IEntity.STATE_RUNNING: - listener.stop(v, entity); - break; - default: - listener.create(v, entity); - break; - } - } - public void setInfo(AbsEntity entity) { - this.entity = entity; - this.currentState = entity.getState(); - if (entity instanceof AbsNormalEntity) { - AbsNormalEntity normalEntity = (AbsNormalEntity) entity; - //ALog.d(TAG, "fileName = " + ((AbsNormalEntity) entity).getFileName()); - fileName.setText(normalEntity.getFileName()); - } else if (entity instanceof AbsGroupEntity) { - AbsGroupEntity groupEntity = (AbsGroupEntity) entity; - fileName.setText( - groupEntity.getAlias() == null ? groupEntity.getKey() : groupEntity.getAlias()); + int id = v.getId(); + if (id == R.id.del_bt) { + listener.cancel(v, entity); + initState(); + } else if (id == R.id.handle_bt) { + handleTask(v); + } } - String str = - formatFileSize(entity.getCurrentProgress()) + "/" + formatFileSize(entity.getFileSize()); - fileSize.setText(str); - leftTime.setText(CommonUtil.formatTime(entity.getTimeLeft())); - String btStr = getResources().getString(R.string.start); - String stateStr = ""; - switch (entity.getState()) { - case IEntity.STATE_WAIT: - btStr = getResources().getString(R.string.start); - stateStr = getResources().getString(R.string.waiting); - break; - case IEntity.STATE_OTHER: - case IEntity.STATE_FAIL: - btStr = getResources().getString(R.string.start); - stateStr = getResources().getString(R.string.state_error); - break; - case IEntity.STATE_STOP: - btStr = getResources().getString(R.string.resume); - stateStr = getResources().getString(R.string.stopped); - break; - case IEntity.STATE_PRE: - case IEntity.STATE_POST_PRE: - case IEntity.STATE_RUNNING: - btStr = getResources().getString(R.string.stop); - stateStr = entity.getConvertSpeed(); - leftTime.setText(CommonUtil.formatTime(entity.getTimeLeft())); - break; - case IEntity.STATE_COMPLETE: - btStr = getResources().getString(R.string.re_start); - stateStr = getResources().getString(R.string.completed); - break; - case IEntity.STATE_CANCEL: - initState(); - break; - default: - btStr = getResources().getString(R.string.start); - stateStr = ""; + private void initState() { + fileName.setText("-"); leftTime.setText(""); - } - this.handleBt.setText(btStr); - this.speedOrState.setText(stateStr); - if (entity.getState() != IEntity.STATE_CANCEL){ - this.pb.setProgress(entity.getPercent()); - } - } - - public void setFileName(Character fileName) { - this.fileName.setText(fileName); - } - - public void setLeftTime(Character leftTime) { - this.leftTime.setText(leftTime); - } - - public void setFileSize(Character fileSize) { - this.fileSize.setText(fileSize); - } - - public void setProgress(int progress) { - this.pb.setProgress(progress); - } - - public void setSpeed(Character speed) { - this.speedOrState.setText(speed); - } - - public void setState(Character state) { - this.speedOrState.setText(state); - } - - public String formatFileSize(double size) { - if (size < 0) { - return "0k"; - } - double kiloByte = size / 1024; - if (kiloByte < 1) { - return size + "b"; + speedOrState.setText(""); + fileSize.setText("-/-"); + pb.setProgress(0); } - double megaByte = kiloByte / 1024; - if (megaByte < 1) { - BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); - return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "k"; + private void handleTask(View v) { + switch (entity.getState()) { + case IEntity.STATE_OTHER: + case IEntity.STATE_FAIL: + case IEntity.STATE_STOP: + listener.resume(v, entity); + break; + case IEntity.STATE_COMPLETE: + case IEntity.STATE_WAIT: + if (entity.getId() != -1) { + listener.resume(v, entity); + } else { + listener.create(v, entity); + } + break; + case IEntity.STATE_PRE: + case IEntity.STATE_POST_PRE: + case IEntity.STATE_RUNNING: + listener.stop(v, entity); + break; + default: + listener.create(v, entity); + break; + } } - double gigaByte = megaByte / 1024; - if (gigaByte < 1) { - BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); - return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "m"; + public void setInfo(AbsEntity entity) { + this.entity = entity; + this.currentState = entity.getState(); + if (entity instanceof AbsNormalEntity) { + AbsNormalEntity normalEntity = (AbsNormalEntity) entity; + //ALog.d(TAG, "fileName = " + ((AbsNormalEntity) entity).getFileName()); + fileName.setText(normalEntity.getFileName()); + } else if (entity instanceof AbsGroupEntity) { + AbsGroupEntity groupEntity = (AbsGroupEntity) entity; + fileName.setText( + groupEntity.getAlias() == null ? groupEntity.getKey() : groupEntity.getAlias()); + } + + String str = + formatFileSize(entity.getCurrentProgress()) + "/" + formatFileSize(entity.getFileSize()); + fileSize.setText(str); + leftTime.setText(CommonUtil.formatTime(entity.getTimeLeft())); + String btStr = getResources().getString(R.string.start); + String stateStr = ""; + switch (entity.getState()) { + case IEntity.STATE_WAIT: + btStr = getResources().getString(R.string.start); + stateStr = getResources().getString(R.string.waiting); + break; + case IEntity.STATE_OTHER: + case IEntity.STATE_FAIL: + btStr = getResources().getString(R.string.start); + stateStr = getResources().getString(R.string.state_error); + break; + case IEntity.STATE_STOP: + btStr = getResources().getString(R.string.resume); + stateStr = getResources().getString(R.string.stopped); + break; + case IEntity.STATE_PRE: + case IEntity.STATE_POST_PRE: + case IEntity.STATE_RUNNING: + btStr = getResources().getString(R.string.stop); + stateStr = entity.getConvertSpeed(); + leftTime.setText(CommonUtil.formatTime(entity.getTimeLeft())); + break; + case IEntity.STATE_COMPLETE: + btStr = getResources().getString(R.string.re_start); + stateStr = getResources().getString(R.string.completed); + break; + case IEntity.STATE_CANCEL: + initState(); + break; + default: + btStr = getResources().getString(R.string.start); + stateStr = ""; + leftTime.setText(""); + } + this.handleBt.setText(btStr); + this.speedOrState.setText(stateStr); + if (entity.getState() != IEntity.STATE_CANCEL) { + this.pb.setProgress(entity.getPercent()); + } } - double teraBytes = gigaByte / 1024; - if (teraBytes < 1) { - BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); - return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "g"; + public void setFileName(Character fileName) { + this.fileName.setText(fileName); + } + + public void setLeftTime(Character leftTime) { + this.leftTime.setText(leftTime); + } + + public void setFileSize(Character fileSize) { + this.fileSize.setText(fileSize); + } + + public void setProgress(int progress) { + this.pb.setProgress(progress); + } + + public void setSpeed(Character speed) { + this.speedOrState.setText(speed); + } + + public void setState(Character state) { + this.speedOrState.setText(state); + } + + public String formatFileSize(double size) { + if (size < 0) { + return "0k"; + } + double kiloByte = size / 1024; + if (kiloByte < 1) { + return size + "b"; + } + + double megaByte = kiloByte / 1024; + if (megaByte < 1) { + BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); + return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "k"; + } + + double gigaByte = megaByte / 1024; + if (gigaByte < 1) { + BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); + return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "m"; + } + + double teraBytes = gigaByte / 1024; + if (teraBytes < 1) { + BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); + return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "g"; + } + BigDecimal result4 = new BigDecimal(teraBytes); + return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "t"; } - BigDecimal result4 = new BigDecimal(teraBytes); - return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "t"; - } } diff --git a/build.gradle b/build.gradle index c1bb7403..049b9fe4 100644 --- a/build.gradle +++ b/build.gradle @@ -81,10 +81,10 @@ ext { mavenCentralDeveloperConnection = 'scm:git:ssh://github.com/AriaLyy/Aria.git' mavenCentralTreeURL = 'https://github.com/AriaLyy/KeepassA/tree/master' - compileSdkVersion = 28 + compileSdkVersion = 36 supportLibVersion = "27.1.1" - buildToolsVersion = "29.0.2" - targetSdkVersion = 28 + buildToolsVersion = "36.0.0" + targetSdkVersion = 36 lifecycleVersion = "1.1.1" minSdkVersion = 15 diff --git a/gradle/mavenCentral-release.gradle b/gradle/mavenCentral-release.gradle index dda48548..ea941573 100644 --- a/gradle/mavenCentral-release.gradle +++ b/gradle/mavenCentral-release.gradle @@ -82,17 +82,20 @@ afterEvaluate { project -> release(MavenPublication) { // groupId 等信息 groupId PUBLISH_GROUP_ID - artifactId PUBLISH_ARTIFACT_ID + artifactId project.PUBLISH_ARTIFACT_ID version PUBLISH_VERSION if (isAndroidProject) { // 移除R文件,移除BuildConfig文件 - generateReleaseBuildConfig.enabled = false - generateDebugBuildConfig.enabled = false - generateReleaseResValues.enabled = false - generateDebugResValues.enabled = false + project.tasks.findByName('generateReleaseBuildConfig')?.enabled = false + project.tasks.findByName('generateDebugBuildConfig')?.enabled = false + project.tasks.findByName('generateReleaseResValues')?.enabled = false + project.tasks.findByName('generateDebugResValues')?.enabled = false // 使用了这个组件,就不需要自己aar、pom.withxml了 - from components.release + def releaseComponent = project.components.findByName('release') + if (releaseComponent != null) { + from releaseComponent + } def variants = project.android.libraryVariants.findAll { it.buildType.name.equalsIgnoreCase('debug') @@ -102,15 +105,15 @@ afterEvaluate { project -> def getAndroidJar = "${getAndroidSdkDirectory}/platforms/${project.android.compileSdkVersion}/android.jar" - task androidJavadocs(type: Javadoc, dependsOn: assembleDebug) { + def androidJavadocs = project.task("androidJavadocs", type: Javadoc, dependsOn: 'assembleDebug') { println("开始打包aar") source = variants.collect { it.getJavaCompileProvider().get().source } - classpath = files( + classpath = project.files( getAndroidJar, project.file("build/intermediates/classes/debug") ) doFirst { - classpath += files(variants.collect { it.javaCompile.classpath.files }) + classpath += project.files(variants.collect { it.javaCompile.classpath.files }) } options { links("http://docs.oracle.com/javase/7/docs/api/") @@ -125,30 +128,31 @@ afterEvaluate { project -> exclude "**/BuildConfig.class" } - def cleanJavadocTask = task("cleanJavadocTask", type: Delete) { + def cleanJavadocTask = project.task("cleanJavadocTask", type: Delete) { delete androidJavadocs.destinationDir - } as Task + } project.clean.dependsOn(cleanJavadocTask) - task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { - classifier = 'javadoc' - from androidJavadocs.destinationDir - baseName "${JAR_PREFIX}${project.name}" + def androidJavadocsJar = project.task("androidJavadocsJar", type: Jar, dependsOn: androidJavadocs) { + archiveClassifier = 'javadoc' + archiveBaseName = "${JAR_PREFIX}${project.name}" } - task androidSourcesJar(type: Jar) { - classifier = 'sources' + def androidSourcesJar = project.task("androidSourcesJar", type: Jar) { + archiveClassifier = 'sources' from project.android.sourceSets.main.java.source - baseName "${JAR_PREFIX}${project.name}" + archiveBaseName = "${JAR_PREFIX}${project.name}" exclude "**/R.class" exclude "**/BuildConfig.class" } - task androidLibraryJar(type: Jar, dependsOn: compileDebugJavaWithJavac - /* == variant.javaCompile */) { + def compileDebugJavaWithJavac = project.tasks.findByName('compileDebugJavaWithJavac') + def androidLibraryJar = project.task("androidLibraryJar", type: Jar, dependsOn: 'compileDebugJavaWithJavac') { // java 编译后的 class文件, build/intermediates/classes/debug/ - from compileDebugJavaWithJavac.destinationDir + if (compileDebugJavaWithJavac != null) { + from compileDebugJavaWithJavac.destinationDir + } // kotlin 编译后的 class文件 from 'build/tmp/kotlin-classes/debug/' // 指定需要被打包成 jar 的文件夹 @@ -156,7 +160,7 @@ afterEvaluate { project -> exclude '**/R.class' exclude '**/R$*.class' exclude "**/BuildConfig.class" - baseName "${JAR_PREFIX}${project.name}-cache" + archiveBaseName = "${JAR_PREFIX}${project.name}-cache" } artifact androidLibraryJar @@ -164,16 +168,19 @@ afterEvaluate { project -> artifact androidJavadocsJar } else if (project.plugins.hasPlugin('java')) { - from components.java - - task sourcesJar(type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allSource + def javaComponent = project.components.findByName('java') + if (javaComponent != null) { + from javaComponent } - task javadocsJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir + def sourcesJar = project.task("sourcesJar", type: Jar, dependsOn: 'classes') { + archiveClassifier = 'sources' + from project.sourceSets.main.allSource + } + + def javadocsJar = project.task("javadocsJar", type: Jar, dependsOn: 'javadoc') { + archiveClassifier = 'javadoc' + from project.javadoc.destinationDir } artifact sourcesJar @@ -181,7 +188,7 @@ afterEvaluate { project -> } pom { - name = PUBLISH_ARTIFACT_ID + name = project.PUBLISH_ARTIFACT_ID description = rootProject.ext.desc url = rootProject.ext.website licenses {