From 18d791c83c992c69786a401cef3e2708cedaa5b4 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Wed, 9 Oct 2019 19:32:07 +0530 Subject: [PATCH 01/29] Add initial layers for clean architecture --- app/build.gradle | 41 +++--- build.gradle | 21 ++- buildSrc/build.gradle.kts | 7 + .../e/blisslauncher/buildsrc/Dependencies.kt | 127 ++++++++++++++++++ data/.gitignore | 1 + data/build.gradle | 48 +++++++ data/consumer-rules.pro | 0 data/proguard-rules.pro | 21 +++ data/src/main/AndroidManifest.xml | 2 + data/src/main/res/values/strings.xml | 3 + .../e/blisslauncher/data/ExampleUnitTest.kt | 17 +++ domain/.gitignore | 1 + domain/build.gradle | 30 +++++ domain/consumer-rules.pro | 0 domain/proguard-rules.pro | 21 +++ domain/src/main/AndroidManifest.xml | 1 + .../domain/executors/PostExecutionThread.kt | 7 + .../domain/executors/ThreadExecutor.kt | 5 + .../domain/interactors/Interactor.kt | 52 +++++++ .../e/blisslauncher/domain/ExampleUnitTest.kt | 17 +++ gradle/wrapper/gradle-wrapper.properties | 1 - settings.gradle | 2 + 22 files changed, 400 insertions(+), 25 deletions(-) create mode 100644 buildSrc/build.gradle.kts create mode 100644 buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt create mode 100644 data/.gitignore create mode 100644 data/build.gradle create mode 100644 data/consumer-rules.pro create mode 100644 data/proguard-rules.pro create mode 100644 data/src/main/AndroidManifest.xml create mode 100644 data/src/main/res/values/strings.xml create mode 100644 data/src/test/java/foundation/e/blisslauncher/data/ExampleUnitTest.kt create mode 100644 domain/.gitignore create mode 100644 domain/build.gradle create mode 100644 domain/consumer-rules.pro create mode 100644 domain/proguard-rules.pro create mode 100644 domain/src/main/AndroidManifest.xml create mode 100644 domain/src/main/java/foundation/e/blisslauncher/domain/executors/PostExecutionThread.kt create mode 100644 domain/src/main/java/foundation/e/blisslauncher/domain/executors/ThreadExecutor.kt create mode 100644 domain/src/main/java/foundation/e/blisslauncher/domain/interactors/Interactor.kt create mode 100644 domain/src/test/java/foundation/e/blisslauncher/domain/ExampleUnitTest.kt diff --git a/app/build.gradle b/app/build.gradle index 008fc0fe80..d53b6eb272 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,10 @@ +import foundation.e.blisslauncher.buildsrc.Libs +import foundation.e.blisslauncher.buildsrc.Versions + apply plugin: 'com.android.application' -apply plugin: 'io.fabric' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' +apply plugin: 'kotlin-android-extensions' // Manifest version information! def versionMajor = 1 @@ -7,11 +12,11 @@ def versionMinor = 2 def versionPatch = 4 android { - compileSdkVersion rootProject.ext.compileSdkVersion + compileSdkVersion Versions.compile_sdk defaultConfig { applicationId "foundation.e.blisslauncher" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion + minSdkVersion Versions.min_sdk + targetSdkVersion Versions.target_sdk versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 versionName "${versionMajor}.${versionMinor}.${versionPatch}" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -83,38 +88,34 @@ dependencies { apiNougatImplementation 'org.cyanogenmod:platform.sdk:6.0' apiOreoImplementation files('libs/lineage-sdk.jar') - debugImplementation 'com.crashlytics.sdk.android:crashlytics:2.9.9' - debugImplementation 'com.google.firebase:firebase-core:16.0.6' debugImplementation 'com.amitshekhar.android:debug-db:1.0.4' implementation 'org.greenrobot:eventbus:3.1.1' // Support Libs - implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibraryVersion}" - implementation "com.android.support:support-media-compat:${rootProject.ext.supportLibraryVersion}" - implementation "com.android.support:support-v4:${rootProject.ext.supportLibraryVersion}" - implementation "com.android.support:recyclerview-v7:${rootProject.ext.supportLibraryVersion}" + implementation Libs.AndroidX.appcompat + implementation Libs.AndroidX.recyclerview // Rx Java and Android - implementation "io.reactivex.rxjava2:rxandroid:${rootProject.ext.rxAndroidVersion}" - implementation "io.reactivex.rxjava2:rxjava:${rootProject.ext.rxJavaVersion}" + implementation Libs.RxJava.rxAndroid + implementation Libs.RxJava.rxJava implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1' // Retrofit - implementation 'com.squareup.retrofit2:retrofit:2.4.0' - implementation 'com.squareup.retrofit2:converter-gson:2.4.0' - implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0' + implementation Libs.Retrofit.retrofit + implementation Libs.Retrofit.gsonConverter + implementation Libs.Retrofit.retrofit_rxjava_adapter // Okhttp - implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0' + implementation Libs.OkHttp.okhttp + implementation Libs.OkHttp.loggingInterceptor // Rx Relay implementation "com.jakewharton.rxrelay2:rxrelay:${rootProject.ext.rxRelayVersion}" // Room - implementation "android.arch.persistence.room:runtime:1.1.1" - annotationProcessor "android.arch.persistence.room:compiler:1.1.1" - implementation "com.android.support:support-annotations:${rootProject.ext.supportLibraryVersion}" + implementation Libs.AndroidX.Room.runtime + annotationProcessor Libs.AndroidX.Room.compiler // Unit test dependencies testImplementation "junit:junit:${rootProject.ext.junitVersion}" @@ -138,7 +139,7 @@ dependencies { androidTestImplementation "com.android.support.test.espresso:espresso-core:${rootProject.ext.espressoVersion}" androidTestImplementation "com.android.support.test:runner:${rootProject.ext.runnerRulesVersion}" androidTestImplementation "com.android.support.test:rules:${rootProject.ext.runnerRulesVersion}" + implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' } -apply plugin: 'com.google.gms.google-services' apply plugin: 'com.getkeepsafe.dexcount' diff --git a/build.gradle b/build.gradle index 0ce6180c79..ce03f02e28 100755 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,8 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. + +import foundation.e.blisslauncher.buildsrc.Libs + buildscript { repositories { google() @@ -9,15 +12,21 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:3.5.1' - classpath 'io.fabric.tools:gradle:1.26.1' - classpath 'com.google.gms:google-services:4.2.0' - classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.8.6' + classpath Libs.androidGradlePlugin + + classpath Libs.Kotlin.gradlePlugin + classpath Libs.Kotlin.extensions + + classpath Libs.Google.fabricPlugin + classpath Libs.Google.gmsGoogleServices + + classpath Libs.dexcountGradlePlugin } } plugins { id "com.diffplug.gradle.spotless" version "3.14.0" + id 'com.github.ben-manes.versions' version "0.25.0" } allprojects { @@ -36,6 +45,10 @@ subprojects { target '**/*.java' removeUnusedImports() // removes any unused imports } + kotlin { + target "**/*.kt" + ktlint() + } } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 0000000000..445e21f767 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,7 @@ +repositories { + jcenter() +} + +plugins { + `kotlin-dsl` +} \ No newline at end of file diff --git a/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt b/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt new file mode 100644 index 0000000000..fda275f068 --- /dev/null +++ b/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt @@ -0,0 +1,127 @@ +package foundation.e.blisslauncher.buildsrc + +object Versions { + const val compile_sdk = 28 + const val min_sdk = 23 + const val target_sdk = 28 + const val android_gradle_plugin = "3.5.0" + const val dexcount_gradle_plugin = "0.8.6" + const val kotlin = "1.3.41" + const val timber = "4.7.1" + const val junit = "4.12" + const val robolectric = "4.3" + const val mockK = "1.9.3" + const val firebase_core = "17.1.0" + const val crashlytics = "2.10.1" + const val google_services = "4.3.0" + const val fabric = "1.31.0" + const val okhttp = "4.1.0" + const val retrofit = "2.6.1" + const val dagger = "2.24" + const val rxjava = "2.2.11" + const val rxandroid = "2.1.1" + const val rxkotlin = "2.4.0" + const val ktlint = "0.34.2" +} + +object Libs { + const val androidGradlePlugin = "com.android.tools.build:gradle:${Versions.android_gradle_plugin}" + const val dexcountGradlePlugin = "com.getkeepsafe.dexcount:dexcount-gradle-plugin:${Versions.dexcount_gradle_plugin}" + + const val timber = "com.jakewharton.timber:timber:${Versions.timber}" + + const val junit = "junit:junit:${Versions.junit}" + const val robolectric = "org.robolectric:robolectric:${Versions.robolectric}" + const val mockK = "io.mockk:mockk:${Versions.mockK}" + + object Google { + const val firebaseCore = "com.google.firebase:firebase-core:${Versions.firebase_core}" + const val crashlytics = "com.crashlytics.sdk.android:crashlytics:${Versions.crashlytics}" + const val gmsGoogleServices = "com.google.gms:google-services:${Versions.google_services}" + const val fabricPlugin = "io.fabric.tools:gradle:${Versions.fabric}" + } + + object Kotlin { + const val stdlib = "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${Versions.kotlin}" + const val reflect = "org.jetbrains.kotlin:kotlin-reflect:${Versions.kotlin}" + const val gradlePlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}" + const val extensions = "org.jetbrains.kotlin:kotlin-android-extensions:${Versions.kotlin}" + } + + object AndroidX { + const val appcompat = "androidx.appcompat:appcompat:1.1.0-rc01" + const val collection = "androidx.collection:collection-ktx:1.1.0" + const val palette = "androidx.palette:palette:1.0.0" + const val recyclerview = "androidx.recyclerview:recyclerview:1.1.0-beta03" + + object Navigation { + private const val version = "2.2.0-alpha01" + const val fragment = "androidx.navigation:navigation-fragment-ktx:$version" + const val ui = "androidx.navigation:navigation-ui-ktx:$version" + const val safeArgs = "androidx.navigation:navigation-safe-args-gradle-plugin:$version" + } + + object Fragment { + private const val version = "1.2.0-alpha02" + const val fragment = "androidx.fragment:fragment:$version" + const val fragmentKtx = "androidx.fragment:fragment-ktx:$version" + } + + object Test { + private const val version = "1.2.0" + const val core = "androidx.test:core:$version" + const val runner = "androidx.test:runner:$version" + const val rules = "androidx.test:rules:$version" + + const val espressoCore = "androidx.test.espresso:espresso-core:3.2.0" + } + + const val archCoreTesting = "androidx.arch.core:core-testing:2.0.1" + + const val preference = "androidx.preference:preference:1.1.0-rc01" + + const val constraintlayout = "androidx.constraintlayout:constraintlayout:2.0.0-beta2" + + const val coreKtx = "androidx.core:core-ktx:1.2.0-alpha03" + + object Lifecycle { + private const val version = "2.2.0-alpha03" + const val extensions = "androidx.lifecycle:lifecycle-extensions:$version" + const val compiler = "androidx.lifecycle:lifecycle-compiler:$version" + const val viewmodel = "androidx.lifecycle:lifecycle-viewmodel-ktx:$version" + } + + object Room { + private const val version = "2.2.0-beta01" + const val common = "androidx.room:room-common:$version" + const val runtime = "androidx.room:room-runtime:$version" + const val compiler = "androidx.room:room-compiler:$version" + const val ktx = "androidx.room:room-ktx:$version" + const val testing = "androidx.room:room-testing:$version" + } + } + + object RxJava { + const val rxJava = "io.reactivex.rxjava2:rxjava:${Versions.rxjava}" + const val rxAndroid = "io.reactivex.rxjava2:rxandroid:${Versions.rxandroid}" + const val rxKotlin = "io.reactivex.rxjava2:rxkotlin:${Versions.rxkotlin}" + } + + object Dagger { + const val dagger = "com.google.dagger:dagger:${Versions.dagger}" + const val androidSupport = "com.google.dagger:dagger-android-support:${Versions.dagger}" + const val compiler = "com.google.dagger:dagger-compiler:${Versions.dagger}" + const val androidProcessor = "com.google.dagger:dagger-android-processor:${Versions.dagger}" + } + + object Retrofit { + const val retrofit = "com.squareup.retrofit2:retrofit:${Versions.retrofit}" + const val retrofit_rxjava_adapter = "com.squareup.retrofit2:adapter-rxjava2:${Versions.retrofit}" + const val gsonConverter = "com.squareup.retrofit2:converter-gson:${Versions.retrofit}" + } + + object OkHttp { + const val okhttp = "com.squareup.okhttp3:okhttp:${Versions.okhttp}" + const val loggingInterceptor = "com.squareup.okhttp3:logging-interceptor:${Versions.okhttp}" + } +} \ No newline at end of file diff --git a/data/.gitignore b/data/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/data/.gitignore @@ -0,0 +1 @@ +/build diff --git a/data/build.gradle b/data/build.gradle new file mode 100644 index 0000000000..2e3d8bef1a --- /dev/null +++ b/data/build.gradle @@ -0,0 +1,48 @@ +import foundation.e.blisslauncher.buildsrc.Libs +import foundation.e.blisslauncher.buildsrc.Versions + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' + +android { + compileSdkVersion Versions.compile_sdk + defaultConfig { + minSdkVersion Versions.min_sdk + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles 'consumer-rules.pro' + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + testOptions { + unitTests { + includeAndroidResources = true + + all { + minHeapSize = "64m" + maxHeapSize = "128m" + } + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation Libs.Kotlin.stdlib + implementation Libs.AndroidX.appcompat + implementation Libs.AndroidX.coreKtx + + implementation Libs.AndroidX.Room.runtime + kapt Libs.AndroidX.Room.compiler + + kapt Libs.Dagger.compiler + + testImplementation Libs.junit + testImplementation Libs.robolectric + testImplementation Libs.mockK +} diff --git a/data/consumer-rules.pro b/data/consumer-rules.pro new file mode 100644 index 0000000000..e69de29bb2 diff --git a/data/proguard-rules.pro b/data/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/data/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/data/src/main/AndroidManifest.xml b/data/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..3cc832571a --- /dev/null +++ b/data/src/main/AndroidManifest.xml @@ -0,0 +1,2 @@ + diff --git a/data/src/main/res/values/strings.xml b/data/src/main/res/values/strings.xml new file mode 100644 index 0000000000..e4ffffe8b9 --- /dev/null +++ b/data/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Data + diff --git a/data/src/test/java/foundation/e/blisslauncher/data/ExampleUnitTest.kt b/data/src/test/java/foundation/e/blisslauncher/data/ExampleUnitTest.kt new file mode 100644 index 0000000000..1ed56b7767 --- /dev/null +++ b/data/src/test/java/foundation/e/blisslauncher/data/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package foundation.e.blisslauncher.data + +import org.junit.Test + +import org.junit.Assert + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + Assert.assertEquals(4, 2 + 2) + } +} diff --git a/domain/.gitignore b/domain/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/domain/.gitignore @@ -0,0 +1 @@ +/build diff --git a/domain/build.gradle b/domain/build.gradle new file mode 100644 index 0000000000..dcca293e86 --- /dev/null +++ b/domain/build.gradle @@ -0,0 +1,30 @@ +import foundation.e.blisslauncher.buildsrc.Libs +import foundation.e.blisslauncher.buildsrc.Versions + +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-kapt' + +android { + compileSdkVersion Versions.compile_sdk + + defaultConfig { + minSdkVersion Versions.min_sdk + targetSdkVersion Versions.target_sdk + } + + compileOptions { + sourceCompatibility 1.8 + targetCompatibility 1.8 + } +} + +dependencies { + implementation Libs.Kotlin.stdlib + + kapt Libs.Dagger.compiler + + implementation Libs.RxJava.rxKotlin + implementation Libs.timber + testImplementation Libs.junit +} diff --git a/domain/consumer-rules.pro b/domain/consumer-rules.pro new file mode 100644 index 0000000000..e69de29bb2 diff --git a/domain/proguard-rules.pro b/domain/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/domain/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/domain/src/main/AndroidManifest.xml b/domain/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..d405b99707 --- /dev/null +++ b/domain/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/domain/src/main/java/foundation/e/blisslauncher/domain/executors/PostExecutionThread.kt b/domain/src/main/java/foundation/e/blisslauncher/domain/executors/PostExecutionThread.kt new file mode 100644 index 0000000000..ba8ed2ca00 --- /dev/null +++ b/domain/src/main/java/foundation/e/blisslauncher/domain/executors/PostExecutionThread.kt @@ -0,0 +1,7 @@ +package foundation.e.blisslauncher.domain.executors + +import io.reactivex.Scheduler + +interface PostExecutionThread { + val scheduler: Scheduler +} \ No newline at end of file diff --git a/domain/src/main/java/foundation/e/blisslauncher/domain/executors/ThreadExecutor.kt b/domain/src/main/java/foundation/e/blisslauncher/domain/executors/ThreadExecutor.kt new file mode 100644 index 0000000000..f2b27ad31b --- /dev/null +++ b/domain/src/main/java/foundation/e/blisslauncher/domain/executors/ThreadExecutor.kt @@ -0,0 +1,5 @@ +package foundation.e.blisslauncher.domain.executors + +import java.util.concurrent.Executor + +interface ThreadExecutor : Executor \ No newline at end of file diff --git a/domain/src/main/java/foundation/e/blisslauncher/domain/interactors/Interactor.kt b/domain/src/main/java/foundation/e/blisslauncher/domain/interactors/Interactor.kt new file mode 100644 index 0000000000..144ad143f1 --- /dev/null +++ b/domain/src/main/java/foundation/e/blisslauncher/domain/interactors/Interactor.kt @@ -0,0 +1,52 @@ +package foundation.e.blisslauncher.domain.interactors + +import foundation.e.blisslauncher.domain.executors.PostExecutionThread +import foundation.e.blisslauncher.domain.executors.ThreadExecutor +import io.reactivex.Completable +import io.reactivex.Flowable +import io.reactivex.disposables.CompositeDisposable +import io.reactivex.disposables.Disposable +import io.reactivex.rxkotlin.plusAssign +import io.reactivex.schedulers.Schedulers +import timber.log.Timber + +interface Interactor { + val threadExecutor: ThreadExecutor + val postExecutionThread: PostExecutionThread +} + +abstract class FlowableInteractor : Interactor

, Disposable { + + private val disposables: CompositeDisposable = CompositeDisposable() + + protected abstract fun buildObservable(params: P? = null): Flowable + + operator fun invoke(params: P, onNext: (next: T) -> Unit = {}, onComplete: () -> Unit = {}) { + disposables += this.buildObservable(params) + .subscribeOn(Schedulers.from(threadExecutor)) + .observeOn(postExecutionThread.scheduler) + .subscribe(onNext, Timber::w, onComplete) + } + + override fun dispose() = disposables.dispose() + + override fun isDisposed(): Boolean = disposables.isDisposed +} + +abstract class CompletableInteractor : Interactor

, Disposable { + + private val disposables: CompositeDisposable = CompositeDisposable() + + protected abstract fun buildObservable(params: P? = null): Completable + + operator fun invoke(params: P, onComplete: () -> Unit = {}) { + disposables += this.buildObservable(params) + .subscribeOn(Schedulers.from(threadExecutor)) + .observeOn(postExecutionThread.scheduler) + .subscribe(onComplete, Timber::w) + } + + override fun dispose() = disposables.dispose() + + override fun isDisposed(): Boolean = disposables.isDisposed +} \ No newline at end of file diff --git a/domain/src/test/java/foundation/e/blisslauncher/domain/ExampleUnitTest.kt b/domain/src/test/java/foundation/e/blisslauncher/domain/ExampleUnitTest.kt new file mode 100644 index 0000000000..7c5a7b55e6 --- /dev/null +++ b/domain/src/test/java/foundation/e/blisslauncher/domain/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package foundation.e.blisslauncher.domain + +import org.junit.Test + +import org.junit.Assert.assertEquals + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3caa34f5fb..d757f3d33f 100755 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,3 @@ -#Tue Oct 29 16:08:45 IST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME diff --git a/settings.gradle b/settings.gradle index e7b4def49c..da221d9158 100755 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,3 @@ include ':app' +include ':data' +include ':domain' -- GitLab From 36808432156b1bca2eeb116faf38d49d9a2fdad9 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Wed, 9 Oct 2019 19:32:57 +0530 Subject: [PATCH 02/29] Refactor to AndroidX --- .../weather/IconSelectionPreference.java | 3 ++- .../weather/PermissionRequestActivity.java | 3 ++- .../features/weather/WeatherPreferences.java | 3 ++- .../weather/WeatherUpdateService.java | 3 ++- .../weather/IconSelectionPreference.java | 3 ++- .../weather/PermissionRequestActivity.java | 3 ++- .../features/weather/WeatherPreferences.java | 3 ++- .../weather/WeatherUpdateService.java | 3 ++- .../core/AdaptiveIconProvider.java | 3 ++- .../AdaptiveIconDrawableCompat.java | 5 +++-- .../customviews/AppWidgetResizeFrame.java | 3 ++- .../core/customviews/BlissInput.java | 4 +++- .../core/customviews/CustomAnalogClock.java | 3 ++- .../core/customviews/HorizontalPager.java | 3 ++- .../PageIndicatorLinearLayout.java | 3 ++- .../core/customviews/RoundedWidgetView.java | 3 ++- .../core/customviews/SquareFrameLayout.java | 5 +++-- .../core/customviews/SquareImageView.java | 4 +++- .../core/database/LauncherDB.java | 16 +++++++++------- .../converters/CharSequenceConverter.java | 4 ++-- .../core/database/daos/LauncherDao.java | 9 +++++---- .../core/database/daos/WidgetDao.java | 8 ++++---- .../core/database/model/LauncherItem.java | 13 +++++++------ .../core/database/model/WidgetItem.java | 5 +++-- .../e/blisslauncher/core/utils/AppUtils.java | 3 ++- .../core/utils/LongArrayMap.java | 3 ++- .../features/launcher/LauncherActivity.java | 19 ++++++++++--------- .../SearchInputDisposableObserver.java | 3 ++- .../features/shortcuts/AddItemActivity.java | 3 ++- .../suggestions/AutoCompleteAdapter.java | 5 +++-- .../features/widgets/AddedWidgetsAdapter.java | 5 +++-- .../features/widgets/WidgetPicker.java | 7 ++++--- .../features/widgets/WidgetPickerAdapter.java | 5 +++-- .../features/widgets/WidgetViewBuilder.java | 3 ++- .../features/widgets/WidgetsActivity.java | 7 ++++--- 35 files changed, 107 insertions(+), 71 deletions(-) diff --git a/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/IconSelectionPreference.java b/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/IconSelectionPreference.java index cf1120accb..57b4e882da 100644 --- a/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/IconSelectionPreference.java +++ b/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/IconSelectionPreference.java @@ -16,7 +16,6 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.preference.DialogPreference; -import android.support.annotation.NonNull; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; @@ -27,6 +26,8 @@ import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.NonNull; + import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; diff --git a/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/PermissionRequestActivity.java b/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/PermissionRequestActivity.java index 0be8d19e88..9b4637a9a7 100644 --- a/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/PermissionRequestActivity.java +++ b/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/PermissionRequestActivity.java @@ -6,7 +6,8 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.ResultReceiver; -import android.support.annotation.NonNull; + +import androidx.annotation.NonNull; public class PermissionRequestActivity extends Activity { diff --git a/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/WeatherPreferences.java b/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/WeatherPreferences.java index eaab34c8c3..460e32a583 100644 --- a/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/WeatherPreferences.java +++ b/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/WeatherPreferences.java @@ -16,11 +16,12 @@ import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; import android.provider.Settings; -import android.support.annotation.NonNull; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; +import androidx.annotation.NonNull; + import cyanogenmod.weather.CMWeatherManager; import foundation.e.blisslauncher.R; import foundation.e.blisslauncher.core.Preferences; diff --git a/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/WeatherUpdateService.java b/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/WeatherUpdateService.java index a6a6b7bbcf..92445be07d 100644 --- a/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/WeatherUpdateService.java +++ b/app/src/apiNougat/java/foundation/e/blisslauncher/features/weather/WeatherUpdateService.java @@ -22,11 +22,12 @@ import android.os.Message; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.SystemClock; -import android.support.v4.content.LocalBroadcastManager; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import java.lang.ref.WeakReference; import java.util.Date; diff --git a/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/IconSelectionPreference.java b/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/IconSelectionPreference.java index cf1120accb..57b4e882da 100644 --- a/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/IconSelectionPreference.java +++ b/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/IconSelectionPreference.java @@ -16,7 +16,6 @@ import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.preference.DialogPreference; -import android.support.annotation.NonNull; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; @@ -27,6 +26,8 @@ import android.widget.GridView; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.NonNull; + import java.util.ArrayList; import java.util.Arrays; import java.util.Locale; diff --git a/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/PermissionRequestActivity.java b/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/PermissionRequestActivity.java index 0be8d19e88..9b4637a9a7 100644 --- a/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/PermissionRequestActivity.java +++ b/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/PermissionRequestActivity.java @@ -6,7 +6,8 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.ResultReceiver; -import android.support.annotation.NonNull; + +import androidx.annotation.NonNull; public class PermissionRequestActivity extends Activity { diff --git a/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/WeatherPreferences.java b/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/WeatherPreferences.java index 75a2192c91..4b11985e79 100644 --- a/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/WeatherPreferences.java +++ b/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/WeatherPreferences.java @@ -16,11 +16,12 @@ import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.preference.SwitchPreference; import android.provider.Settings; -import android.support.annotation.NonNull; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; +import androidx.annotation.NonNull; + import foundation.e.blisslauncher.R; import foundation.e.blisslauncher.core.Preferences; import foundation.e.blisslauncher.core.utils.Constants; diff --git a/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/WeatherUpdateService.java b/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/WeatherUpdateService.java index c940d0606b..02af6ea1a7 100644 --- a/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/WeatherUpdateService.java +++ b/app/src/apiOreo/java/foundation/e/blisslauncher/features/weather/WeatherUpdateService.java @@ -22,11 +22,12 @@ import android.os.Message; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.SystemClock; -import android.support.v4.content.LocalBroadcastManager; import android.text.TextUtils; import android.util.Log; import android.widget.Toast; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import java.lang.ref.WeakReference; import java.util.Date; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/AdaptiveIconProvider.java b/app/src/main/java/foundation/e/blisslauncher/core/AdaptiveIconProvider.java index f8bc43535c..573887f2e6 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/AdaptiveIconProvider.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/AdaptiveIconProvider.java @@ -6,9 +6,10 @@ import android.content.res.AssetManager; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; -import android.support.v4.content.res.ResourcesCompat; import android.util.Log; +import androidx.core.content.res.ResourcesCompat; + import org.xmlpull.v1.XmlPullParser; import foundation.e.blisslauncher.core.customviews.AdaptiveIconDrawableCompat; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/AdaptiveIconDrawableCompat.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/AdaptiveIconDrawableCompat.java index 95601914a2..f3f6603c7c 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/AdaptiveIconDrawableCompat.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/AdaptiveIconDrawableCompat.java @@ -21,12 +21,13 @@ import android.graphics.Region; import android.graphics.Shader; import android.graphics.Shader.TileMode; import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.TypedValue; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/AppWidgetResizeFrame.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/AppWidgetResizeFrame.java index f4cfb39baa..7f34e229e0 100644 --- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/AppWidgetResizeFrame.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/AppWidgetResizeFrame.java @@ -4,10 +4,11 @@ import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetProviderInfo; import android.content.Context; import android.graphics.Rect; -import android.support.annotation.NonNull; import android.widget.FrameLayout; import android.widget.ImageView; +import androidx.annotation.NonNull; + import foundation.e.blisslauncher.R; public class AppWidgetResizeFrame extends FrameLayout { diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/BlissInput.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/BlissInput.java index 45b4b3c84b..0dbdbe7f7a 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/BlissInput.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/BlissInput.java @@ -4,7 +4,9 @@ import android.content.Context; import android.util.AttributeSet; import android.view.DragEvent; -public class BlissInput extends android.support.v7.widget.AppCompatEditText { +import androidx.appcompat.widget.AppCompatEditText; + +public class BlissInput extends AppCompatEditText { public BlissInput(Context context) { super(context); } diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/CustomAnalogClock.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/CustomAnalogClock.java index 21baa13ebd..1cb819d9d5 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/CustomAnalogClock.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/CustomAnalogClock.java @@ -5,10 +5,11 @@ import android.content.res.Resources; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.os.Handler; -import android.support.v4.content.ContextCompat; import android.util.AttributeSet; import android.view.View; +import androidx.core.content.ContextCompat; + import java.util.Calendar; import foundation.e.blisslauncher.BlissLauncher; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/HorizontalPager.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/HorizontalPager.java index 05b11708a8..b3c07c5b06 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/HorizontalPager.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/HorizontalPager.java @@ -7,7 +7,6 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.os.Parcel; import android.os.Parcelable; -import android.support.v4.view.GestureDetectorCompat; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; @@ -18,6 +17,8 @@ import android.view.ViewGroup; import android.view.ViewParent; import android.widget.Scroller; +import androidx.core.view.GestureDetectorCompat; + import java.util.ArrayList; import java.util.HashSet; import java.util.Set; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/PageIndicatorLinearLayout.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/PageIndicatorLinearLayout.java index 72f7baaf82..25514bcb93 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/PageIndicatorLinearLayout.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/PageIndicatorLinearLayout.java @@ -1,10 +1,11 @@ package foundation.e.blisslauncher.core.customviews; import android.content.Context; -import android.support.annotation.Nullable; import android.util.AttributeSet; import android.widget.LinearLayout; +import androidx.annotation.Nullable; + import foundation.e.blisslauncher.BlissLauncher; import foundation.e.blisslauncher.core.DeviceProfile; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/RoundedWidgetView.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/RoundedWidgetView.java index dcb15a6c10..101be1547f 100644 --- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/RoundedWidgetView.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/RoundedWidgetView.java @@ -5,7 +5,6 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Path; import android.graphics.Rect; -import android.support.annotation.Nullable; import android.util.Log; import android.view.MotionEvent; import android.view.View; @@ -13,6 +12,8 @@ import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; +import androidx.annotation.Nullable; + import foundation.e.blisslauncher.R; import foundation.e.blisslauncher.features.widgets.CheckLongPressHelper; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/SquareFrameLayout.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/SquareFrameLayout.java index 85cca4514a..2fbef5c3d5 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/SquareFrameLayout.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/SquareFrameLayout.java @@ -1,11 +1,12 @@ package foundation.e.blisslauncher.core.customviews; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; import android.util.AttributeSet; import android.widget.FrameLayout; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + /** * Created by falcon on 9/3/18. */ diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/SquareImageView.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/SquareImageView.java index ef576dcb26..6546426d44 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/SquareImageView.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/SquareImageView.java @@ -3,11 +3,13 @@ package foundation.e.blisslauncher.core.customviews; import android.content.Context; import android.util.AttributeSet; +import androidx.appcompat.widget.AppCompatImageView; + /** * Created by falcon on 16/2/18. */ -public class SquareImageView extends android.support.v7.widget.AppCompatImageView { +public class SquareImageView extends AppCompatImageView { public SquareImageView(Context context) { diff --git a/app/src/main/java/foundation/e/blisslauncher/core/database/LauncherDB.java b/app/src/main/java/foundation/e/blisslauncher/core/database/LauncherDB.java index 8201de4cfa..477e022ca2 100644 --- a/app/src/main/java/foundation/e/blisslauncher/core/database/LauncherDB.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/database/LauncherDB.java @@ -1,13 +1,15 @@ package foundation.e.blisslauncher.core.database; -import android.arch.persistence.db.SupportSQLiteDatabase; -import android.arch.persistence.room.Database; -import android.arch.persistence.room.Room; -import android.arch.persistence.room.RoomDatabase; -import android.arch.persistence.room.TypeConverters; -import android.arch.persistence.room.migration.Migration; + import android.content.Context; -import android.support.annotation.NonNull; + +import androidx.annotation.NonNull; +import androidx.room.Database; +import androidx.room.Room; +import androidx.room.RoomDatabase; +import androidx.room.TypeConverters; +import androidx.room.migration.Migration; +import androidx.sqlite.db.SupportSQLiteDatabase; import foundation.e.blisslauncher.core.database.converters.CharSequenceConverter; import foundation.e.blisslauncher.core.database.daos.LauncherDao; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/database/converters/CharSequenceConverter.java b/app/src/main/java/foundation/e/blisslauncher/core/database/converters/CharSequenceConverter.java index 7deffa335a..6ab349367f 100644 --- a/app/src/main/java/foundation/e/blisslauncher/core/database/converters/CharSequenceConverter.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/database/converters/CharSequenceConverter.java @@ -1,6 +1,6 @@ package foundation.e.blisslauncher.core.database.converters; -import android.arch.persistence.room.TypeConverter; +import androidx.room.TypeConverter; public class CharSequenceConverter { @@ -10,7 +10,7 @@ public class CharSequenceConverter { } @TypeConverter - public static CharSequence toCharSequence(String value){ + public static CharSequence toCharSequence(String value) { return value; } } diff --git a/app/src/main/java/foundation/e/blisslauncher/core/database/daos/LauncherDao.java b/app/src/main/java/foundation/e/blisslauncher/core/database/daos/LauncherDao.java index dbc42ae292..68a3ea5714 100644 --- a/app/src/main/java/foundation/e/blisslauncher/core/database/daos/LauncherDao.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/database/daos/LauncherDao.java @@ -1,9 +1,10 @@ package foundation.e.blisslauncher.core.database.daos; -import android.arch.persistence.room.Dao; -import android.arch.persistence.room.Insert; -import android.arch.persistence.room.OnConflictStrategy; -import android.arch.persistence.room.Query; + +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; import java.util.List; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/database/daos/WidgetDao.java b/app/src/main/java/foundation/e/blisslauncher/core/database/daos/WidgetDao.java index 171267fffa..e23172c2e4 100644 --- a/app/src/main/java/foundation/e/blisslauncher/core/database/daos/WidgetDao.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/database/daos/WidgetDao.java @@ -1,9 +1,9 @@ package foundation.e.blisslauncher.core.database.daos; -import android.arch.persistence.room.Dao; -import android.arch.persistence.room.Insert; -import android.arch.persistence.room.OnConflictStrategy; -import android.arch.persistence.room.Query; +import androidx.room.Dao; +import androidx.room.Insert; +import androidx.room.OnConflictStrategy; +import androidx.room.Query; import java.util.List; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/database/model/LauncherItem.java b/app/src/main/java/foundation/e/blisslauncher/core/database/model/LauncherItem.java index 6c0ad6159d..15860ca805 100644 --- a/app/src/main/java/foundation/e/blisslauncher/core/database/model/LauncherItem.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/database/model/LauncherItem.java @@ -1,14 +1,15 @@ package foundation.e.blisslauncher.core.database.model; -import android.arch.persistence.room.ColumnInfo; -import android.arch.persistence.room.Entity; -import android.arch.persistence.room.Ignore; -import android.arch.persistence.room.Index; -import android.arch.persistence.room.PrimaryKey; import android.content.ComponentName; import android.content.Intent; import android.graphics.drawable.Drawable; -import android.support.annotation.NonNull; + +import androidx.annotation.NonNull; +import androidx.room.ColumnInfo; +import androidx.room.Entity; +import androidx.room.Ignore; +import androidx.room.Index; +import androidx.room.PrimaryKey; import java.net.URISyntaxException; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/database/model/WidgetItem.java b/app/src/main/java/foundation/e/blisslauncher/core/database/model/WidgetItem.java index dbea107dec..28de71e054 100644 --- a/app/src/main/java/foundation/e/blisslauncher/core/database/model/WidgetItem.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/database/model/WidgetItem.java @@ -1,7 +1,8 @@ package foundation.e.blisslauncher.core.database.model; -import android.arch.persistence.room.Entity; -import android.arch.persistence.room.PrimaryKey; + +import androidx.room.Entity; +import androidx.room.PrimaryKey; @Entity(tableName = "widget_items") public class WidgetItem { diff --git a/app/src/main/java/foundation/e/blisslauncher/core/utils/AppUtils.java b/app/src/main/java/foundation/e/blisslauncher/core/utils/AppUtils.java index c7e410846e..a8b2808c9d 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/utils/AppUtils.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/utils/AppUtils.java @@ -25,9 +25,10 @@ import android.content.pm.LauncherApps; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.UserManager; -import android.support.annotation.Nullable; import android.util.Log; +import androidx.annotation.Nullable; + import java.util.LinkedHashMap; import java.util.List; import java.util.Map; diff --git a/app/src/main/java/foundation/e/blisslauncher/core/utils/LongArrayMap.java b/app/src/main/java/foundation/e/blisslauncher/core/utils/LongArrayMap.java index 63e623369b..415f07892f 100755 --- a/app/src/main/java/foundation/e/blisslauncher/core/utils/LongArrayMap.java +++ b/app/src/main/java/foundation/e/blisslauncher/core/utils/LongArrayMap.java @@ -15,9 +15,10 @@ */ package foundation.e.blisslauncher.core.utils; -import android.support.annotation.NonNull; import android.util.LongSparseArray; +import androidx.annotation.NonNull; + import java.util.Iterator; /** diff --git a/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java b/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java index cf00c23cf9..7e8172b993 100755 --- a/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java @@ -37,15 +37,6 @@ import android.os.Process; import android.os.StrictMode; import android.os.UserManager; import android.provider.Settings; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; -import android.support.v4.content.LocalBroadcastManager; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; -import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.text.Editable; import android.text.TextWatcher; import android.view.DragEvent; @@ -71,6 +62,16 @@ import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + import com.jakewharton.rxbinding2.widget.RxTextView; import java.util.ArrayList; diff --git a/app/src/main/java/foundation/e/blisslauncher/features/launcher/SearchInputDisposableObserver.java b/app/src/main/java/foundation/e/blisslauncher/features/launcher/SearchInputDisposableObserver.java index b3a0249def..0da9bf53dd 100644 --- a/app/src/main/java/foundation/e/blisslauncher/features/launcher/SearchInputDisposableObserver.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/launcher/SearchInputDisposableObserver.java @@ -1,9 +1,10 @@ package foundation.e.blisslauncher.features.launcher; -import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; +import androidx.recyclerview.widget.RecyclerView; + import java.util.ArrayList; import foundation.e.blisslauncher.R; diff --git a/app/src/main/java/foundation/e/blisslauncher/features/shortcuts/AddItemActivity.java b/app/src/main/java/foundation/e/blisslauncher/features/shortcuts/AddItemActivity.java index 4ce1da14ad..391237bbfa 100644 --- a/app/src/main/java/foundation/e/blisslauncher/features/shortcuts/AddItemActivity.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/shortcuts/AddItemActivity.java @@ -5,7 +5,8 @@ import android.content.Context; import android.content.pm.LauncherApps; import android.os.Build; import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; + +import androidx.appcompat.app.AppCompatActivity; @TargetApi(Build.VERSION_CODES.O) public class AddItemActivity extends AppCompatActivity { diff --git a/app/src/main/java/foundation/e/blisslauncher/features/suggestions/AutoCompleteAdapter.java b/app/src/main/java/foundation/e/blisslauncher/features/suggestions/AutoCompleteAdapter.java index cfd7a7eb49..69d8042109 100755 --- a/app/src/main/java/foundation/e/blisslauncher/features/suggestions/AutoCompleteAdapter.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/suggestions/AutoCompleteAdapter.java @@ -3,8 +3,6 @@ package foundation.e.blisslauncher.features.suggestions; import android.content.Context; import android.graphics.Color; import android.graphics.Typeface; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.ForegroundColorSpan; @@ -15,6 +13,9 @@ import android.view.ViewGroup; import android.view.animation.AlphaAnimation; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + import java.util.ArrayList; import java.util.List; import java.util.Locale; diff --git a/app/src/main/java/foundation/e/blisslauncher/features/widgets/AddedWidgetsAdapter.java b/app/src/main/java/foundation/e/blisslauncher/features/widgets/AddedWidgetsAdapter.java index 4849643fc5..099b1c22c0 100644 --- a/app/src/main/java/foundation/e/blisslauncher/features/widgets/AddedWidgetsAdapter.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/widgets/AddedWidgetsAdapter.java @@ -2,14 +2,15 @@ package foundation.e.blisslauncher.features.widgets; import android.appwidget.AppWidgetProviderInfo; import android.content.Context; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetPicker.java b/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetPicker.java index 9ec080d0dc..6c99bc829f 100644 --- a/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetPicker.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetPicker.java @@ -10,13 +10,14 @@ import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Parcelable; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.util.DisplayMetrics; import android.util.Log; import android.widget.Toast; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import java.text.Collator; import java.util.ArrayList; import java.util.Collections; diff --git a/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetPickerAdapter.java b/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetPickerAdapter.java index 64825076eb..50b2b7fda7 100644 --- a/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetPickerAdapter.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetPickerAdapter.java @@ -7,14 +7,15 @@ import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.UserHandle; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetViewBuilder.java b/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetViewBuilder.java index 4cfb5eb9d7..d1829fa4d3 100644 --- a/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetViewBuilder.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetViewBuilder.java @@ -4,10 +4,11 @@ import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; import android.content.Context; import android.os.Bundle; -import android.support.annotation.NonNull; import android.widget.LinearLayout; import android.widget.Toast; +import androidx.annotation.NonNull; + import foundation.e.blisslauncher.BlissLauncher; import foundation.e.blisslauncher.R; import foundation.e.blisslauncher.core.customviews.RoundedWidgetView; diff --git a/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetsActivity.java b/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetsActivity.java index 4932285c54..a0ea7d1c2d 100644 --- a/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetsActivity.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/widgets/WidgetsActivity.java @@ -6,12 +6,13 @@ import android.appwidget.AppWidgetProviderInfo; import android.content.ActivityNotFoundException; import android.content.Intent; import android.os.Bundle; -import android.support.v7.widget.DividerItemDecoration; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; import android.util.DisplayMetrics; import android.widget.Toast; +import androidx.recyclerview.widget.DividerItemDecoration; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; -- GitLab From 58bc9f2d783b103960b19416b05f33f19bd66679 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Wed, 9 Oct 2019 23:17:08 +0530 Subject: [PATCH 03/29] Fix build error because of wrong dependencies --- app/build.gradle | 37 ++++++------------- .../e/blisslauncher/BlissLauncher.java | 12 ------ .../features/launcher/LauncherActivity.java | 10 ++++- build.gradle | 20 ---------- .../e/blisslauncher/buildsrc/Dependencies.kt | 6 ++- 5 files changed, 23 insertions(+), 62 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d53b6eb272..f3581c202d 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -81,15 +81,11 @@ android { } dependencies { - implementation 'me.relex:circleindicator:1.2.2@aar' - implementation 'io.github.inflationx:calligraphy3:3.1.1' - implementation 'io.github.inflationx:viewpump:1.0.0' + implementation 'me.relex:circleindicator:2.1.4' apiNougatImplementation 'org.cyanogenmod:platform.sdk:6.0' apiOreoImplementation files('libs/lineage-sdk.jar') - debugImplementation 'com.amitshekhar.android:debug-db:1.0.4' - implementation 'org.greenrobot:eventbus:3.1.1' // Support Libs @@ -99,7 +95,7 @@ dependencies { // Rx Java and Android implementation Libs.RxJava.rxAndroid implementation Libs.RxJava.rxJava - implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1' + implementation 'com.jakewharton.rxbinding3:rxbinding:3.0.0' // Retrofit implementation Libs.Retrofit.retrofit @@ -111,34 +107,23 @@ dependencies { implementation Libs.OkHttp.loggingInterceptor // Rx Relay - implementation "com.jakewharton.rxrelay2:rxrelay:${rootProject.ext.rxRelayVersion}" + implementation "com.jakewharton.rxrelay2:rxrelay:2.1.1" // Room implementation Libs.AndroidX.Room.runtime annotationProcessor Libs.AndroidX.Room.compiler // Unit test dependencies - testImplementation "junit:junit:${rootProject.ext.junitVersion}" - testImplementation "org.robolectric:robolectric:${rootProject.ext.robolectricVersion}" - testImplementation "org.mockito:mockito-core:${rootProject.ext.mockitoVersion}" - testImplementation "org.hamcrest:hamcrest-core:${rootProject.ext.hamcrestVersion}" - testImplementation "org.hamcrest:hamcrest-library:${rootProject.ext.hamcrestVersion}" - testImplementation "org.hamcrest:hamcrest-integration:${rootProject.ext.hamcrestVersion}" + testImplementation Libs.junit + testImplementation Libs.robolectric + testImplementation "org.mockito:mockito-core:2.19.0" + testImplementation Libs.AndroidX.Test.archCoreTesting // Instrumentation tests dependencies - androidTestImplementation "junit:junit:${rootProject.ext.junitVersion}" - androidTestImplementation "org.mockito:mockito-core:${rootProject.ext.mockitoVersion}" - androidTestImplementation "org.mockito:mockito-android:${rootProject.ext.mockitoVersion}" - androidTestImplementation "com.android.support:support-annotations:${rootProject.ext.supportLibraryVersion}" - androidTestImplementation("com.android.support.test.espresso:espresso-contrib:${rootProject.ext.espressoVersion}", { - exclude group: 'com.android.support', module: 'appcompat-v7' - exclude group: 'com.android.support', module: 'support-v4' - exclude group: 'com.android.support', module: 'recyclerview-v7' - exclude group: 'com.android.support', module: 'design' - }) - androidTestImplementation "com.android.support.test.espresso:espresso-core:${rootProject.ext.espressoVersion}" - androidTestImplementation "com.android.support.test:runner:${rootProject.ext.runnerRulesVersion}" - androidTestImplementation "com.android.support.test:rules:${rootProject.ext.runnerRulesVersion}" + androidTestImplementation Libs.junit + androidTestImplementation Libs.AndroidX.Test.espressoCore + androidTestImplementation Libs.AndroidX.Test.runner + androidTestImplementation Libs.AndroidX.Test.rules implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' } diff --git a/app/src/main/java/foundation/e/blisslauncher/BlissLauncher.java b/app/src/main/java/foundation/e/blisslauncher/BlissLauncher.java index 70eb4e0a19..2f75e1d74a 100755 --- a/app/src/main/java/foundation/e/blisslauncher/BlissLauncher.java +++ b/app/src/main/java/foundation/e/blisslauncher/BlissLauncher.java @@ -8,9 +8,6 @@ import foundation.e.blisslauncher.core.DeviceProfile; import foundation.e.blisslauncher.core.IconsHandler; import foundation.e.blisslauncher.core.customviews.WidgetHost; import foundation.e.blisslauncher.features.launcher.AppProvider; -import io.github.inflationx.calligraphy3.CalligraphyConfig; -import io.github.inflationx.calligraphy3.CalligraphyInterceptor; -import io.github.inflationx.viewpump.ViewPump; public class BlissLauncher extends Application { private IconsHandler iconsPackHandler; @@ -26,15 +23,6 @@ public class BlissLauncher extends Application { @Override public void onCreate() { super.onCreate(); - - ViewPump.init(ViewPump.builder() - .addInterceptor(new CalligraphyInterceptor( - new CalligraphyConfig.Builder() - .setDefaultFontPath("Roboto-Regular.ttf") - .setFontAttrId(R.attr.fontPath) - .build())) - .build()); - sAppWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); sAppWidgetHost = new WidgetHost(getApplicationContext(), R.id.APPWIDGET_HOST_ID); diff --git a/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java b/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java index 7e8172b993..9f3601a303 100755 --- a/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java @@ -72,7 +72,7 @@ import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; -import com.jakewharton.rxbinding2.widget.RxTextView; +import com.jakewharton.rxbinding3.widget.RxTextView; import java.util.ArrayList; import java.util.Arrays; @@ -145,9 +145,12 @@ import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers; import me.relex.circleindicator.CircleIndicator; +<<<<<<< HEAD import static android.view.View.GONE; import static android.view.View.VISIBLE; +======= +>>>>>>> Fix build error because of wrong dependencies public class LauncherActivity extends AppCompatActivity implements AutoCompleteAdapter.OnSuggestionClickListener, OnSwipeDownListener { @@ -357,10 +360,13 @@ public class LauncherActivity extends AppCompatActivity implements managedProfileReceiver = ManagedProfileBroadcastReceiver.register(this); } +<<<<<<< HEAD protected void attachBaseContext(Context context) { super.attachBaseContext(ViewPumpContextWrapper.wrap(context)); } +======= +>>>>>>> Fix build error because of wrong dependencies public CompositeDisposable getCompositeDisposable() { if (mCompositeDisposable == null || mCompositeDisposable.isDisposed()) { mCompositeDisposable = new CompositeDisposable(); @@ -3308,4 +3314,4 @@ public class LauncherActivity extends AppCompatActivity implements } } -} +} \ No newline at end of file diff --git a/build.gradle b/build.gradle index ce03f02e28..99ffc54131 100755 --- a/build.gradle +++ b/build.gradle @@ -51,23 +51,3 @@ subprojects { } } } - -ext { - compileSdkVersion = 27 - minSdkVersion = 24 - targetSdkVersion = 27 - sourceCompatibilityVersion = '1.7' - targetCompatibilityVersion = '1.7' - supportLibraryVersion = '27.1.1' - junitVersion = '4.12' - mockitoVersion = '2.16.0' - hamcrestVersion = '1.3' - daggerVersion = '2.15' - archVersion = '1.1.0' - rxJavaVersion = '2.1.10' - rxAndroidVersion = '2.0.2' - rxRelayVersion = '2.0.0' - robolectricVersion = '3.7.1' - espressoVersion = '3.0.1' - runnerRulesVersion = '1.0.0' -} diff --git a/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt b/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt index fda275f068..f5f66e7ced 100644 --- a/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt +++ b/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt @@ -74,9 +74,11 @@ object Libs { const val rules = "androidx.test:rules:$version" const val espressoCore = "androidx.test.espresso:espresso-core:3.2.0" - } + const val espressoContrib = "androidx.test.espresso:espresso-contrib:3.2.0" + const val espressoIntents = "androidx.test.espresso:espresso-intents:3.2.0" + const val archCoreTesting = "androidx.arch.core:core-testing:2.0.1" - const val archCoreTesting = "androidx.arch.core:core-testing:2.0.1" + } const val preference = "androidx.preference:preference:1.1.0-rc01" -- GitLab From fcf09e2b7449d271a2a319096434eb4d3ddb87b6 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Thu, 10 Oct 2019 00:32:15 +0530 Subject: [PATCH 04/29] Change gradle settings to use AndroidX and Jetifier --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 2ce72056ac..4b862715dc 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,8 +20,8 @@ android.enableD8.desugaring=true android.enableR8=true # AndroidX -android.useAndroidX=false -android.enableJetifier=false +android.useAndroidX=true +android.enableJetifier=true # The default memory is 512m org.gradle.jvmargs=-Xmx1g -- GitLab From 790790c60f804e5137d1967dad18b02d37f53c13 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Thu, 10 Oct 2019 00:40:25 +0530 Subject: [PATCH 05/29] Ignore ktlint in .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 81de63c889..6d52bab4e8 100755 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ build/ .project lint.xml /dist +ktlint -- GitLab From 75386abc9e0fdcfc79660e8a88c22842da40e341 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Thu, 28 Nov 2019 20:24:27 +0530 Subject: [PATCH 06/29] Fix git merge issues --- .../features/launcher/LauncherActivity.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java b/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java index 9f3601a303..7d625a8483 100755 --- a/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java @@ -137,7 +137,6 @@ import foundation.e.blisslauncher.features.weather.WeatherUtils; import foundation.e.blisslauncher.features.widgets.WidgetManager; import foundation.e.blisslauncher.features.widgets.WidgetViewBuilder; import foundation.e.blisslauncher.features.widgets.WidgetsActivity; -import io.github.inflationx.viewpump.ViewPumpContextWrapper; import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; @@ -145,12 +144,9 @@ import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers; import me.relex.circleindicator.CircleIndicator; -<<<<<<< HEAD import static android.view.View.GONE; import static android.view.View.VISIBLE; -======= ->>>>>>> Fix build error because of wrong dependencies public class LauncherActivity extends AppCompatActivity implements AutoCompleteAdapter.OnSuggestionClickListener, OnSwipeDownListener { @@ -360,13 +356,6 @@ public class LauncherActivity extends AppCompatActivity implements managedProfileReceiver = ManagedProfileBroadcastReceiver.register(this); } -<<<<<<< HEAD - protected void attachBaseContext(Context context) { - super.attachBaseContext(ViewPumpContextWrapper.wrap(context)); - } - -======= ->>>>>>> Fix build error because of wrong dependencies public CompositeDisposable getCompositeDisposable() { if (mCompositeDisposable == null || mCompositeDisposable.isDisposed()) { mCompositeDisposable = new CompositeDisposable(); -- GitLab From 6ecec8e9329d70c8546a1bcb3d8cd94d202aaedd Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Tue, 17 Dec 2019 16:54:37 +0530 Subject: [PATCH 07/29] Bump version to v1.3.1 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 0a6d4663af..244d893663 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'kotlin-android' // Manifest version information! def versionMajor = 1 def versionMinor = 3 -def versionPatch = 0 +def versionPatch = 1 android { compileSdkVersion rootProject.ext.compileSdkVersion -- GitLab From 3e220b7f2a8459c0072dd190ac91d2dee2d84d6a Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Tue, 14 Jan 2020 18:39:48 +0530 Subject: [PATCH 08/29] Fix sdcard issue --- .../blisslauncher/features/launcher/AppProvider.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java b/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java index c148ade396..23676ddd78 100644 --- a/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java @@ -162,11 +162,12 @@ public class AppProvider { public void onPackagesAvailable(String[] packageNames, android.os.UserHandle user, boolean replacing) { Log.d(TAG, "onPackagesAvailable() called with: packageNames = [" + packageNames + "], user = [" + user + "], replacing = [" + replacing + "]"); - PackageAddedRemovedHandler.handleEvent(mContext, - "android.intent.action.MEDIA_MOUNTED", - null, new UserHandle(manager.getSerialNumberForUser(user), user), false - ); - + for (String packageName : packageNames) { + PackageAddedRemovedHandler.handleEvent(mContext, + "android.intent.action.MEDIA_MOUNTED", + packageName, new UserHandle(manager.getSerialNumberForUser(user), user), false + ); + } } @Override -- GitLab From 39939e76081bec72d9c855cfa6988f046de5c361 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Tue, 14 Jan 2020 19:27:07 +0530 Subject: [PATCH 09/29] Add REQUEST_DELETE_PACKAGES permission --- app/src/main/AndroidManifest.xml | 121 +++++++++++++++++++--------- app/src/main/res/values/strings.xml | 1 + 2 files changed, 83 insertions(+), 39 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4b28a9c9af..d0185de955 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,46 +9,61 @@ android:label="@string/permlab_install_shortcut" android:permissionGroup="android.permission-group.SYSTEM_TOOLS" android:protectionLevel="dangerous" /> + + android:protectionLevel="dangerous" /> + + - + + + + + + - - + + + + - - + + @@ -56,20 +71,25 @@ + - + - + - + + android:theme="@style/AppTheme" /> + + + + + + + + + + + - + + - + + + - + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 808350c978..057771f3fd 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -168,5 +168,6 @@ App isn\'t installed Page %1$d of %2$d + Show notification dots -- GitLab From 96e57d00f8467420837c779c2a947126f98980e8 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Tue, 14 Jan 2020 19:27:59 +0530 Subject: [PATCH 10/29] Remove hoko-blur project --- hoko-blur/.gitignore | 2 - hoko-blur/build.gradle | 66 ---- hoko-blur/proguard-rules.pro | 17 -- .../java/com/hoko/blur/ApplicationTest.java | 13 - hoko-blur/src/main/AndroidManifest.xml | 14 - .../src/main/java/com/hoko/blur/HokoBlur.java | 30 -- .../java/com/hoko/blur/anno/Direction.java | 19 -- .../main/java/com/hoko/blur/anno/Mode.java | 19 -- .../com/hoko/blur/anno/NotThreadSafe.java | 13 - .../main/java/com/hoko/blur/anno/Scheme.java | 20 -- .../java/com/hoko/blur/anno/ThreadSafe.java | 14 - .../java/com/hoko/blur/api/IBlurBuild.java | 48 --- .../com/hoko/blur/api/IBlurProcessor.java | 46 --- .../hoko/blur/api/IBlurResultDispatcher.java | 7 - .../java/com/hoko/blur/api/IFrameBuffer.java | 16 - .../main/java/com/hoko/blur/api/IProgram.java | 10 - .../java/com/hoko/blur/api/IRenderer.java | 11 - .../main/java/com/hoko/blur/api/ITexture.java | 19 -- .../com/hoko/blur/filter/BoxBlurFilter.java | 117 ------- .../hoko/blur/filter/GaussianBlurFilter.java | 127 -------- .../hoko/blur/filter/NativeBlurFilter.java | 40 --- .../hoko/blur/filter/OriginBlurFilter.java | 98 ------ .../com/hoko/blur/filter/StackBlurFilter.java | 277 ----------------- .../com/hoko/blur/opengl/cache/CachePool.java | 123 -------- .../blur/opengl/cache/FrameBufferCache.java | 84 ----- .../hoko/blur/opengl/cache/TextureCache.java | 69 ----- .../blur/opengl/framebuffer/FrameBuffer.java | 77 ----- .../framebuffer/FrameBufferFactory.java | 27 -- .../hoko/blur/opengl/offscreen/EglBuffer.java | 168 ---------- .../offscreen/OffScreenBlurRenderer.java | 272 ----------------- .../com/hoko/blur/opengl/program/Program.java | 85 ------ .../blur/opengl/program/ProgramFactory.java | 10 - .../blur/opengl/texture/BitmapTexture.java | 37 --- .../blur/opengl/texture/SimpleTexture.java | 26 -- .../com/hoko/blur/opengl/texture/Texture.java | 68 ----- .../blur/opengl/texture/TextureFactory.java | 23 -- .../java/com/hoko/blur/opengl/util/Size.java | 71 ----- .../hoko/blur/processor/BlurProcessor.java | 164 ---------- .../blur/processor/BlurProcessorFactory.java | 31 -- .../hoko/blur/processor/HokoBlurBuild.java | 130 -------- .../blur/processor/NativeBlurProcessor.java | 70 ----- .../blur/processor/OpenGLBlurProcessor.java | 44 --- .../blur/processor/OriginBlurProcessor.java | 51 ---- .../processor/RenderScriptBlurProcessor.java | 151 --------- .../task/AndroidBlurResultDispatcher.java | 30 -- .../com/hoko/blur/task/AsyncBlurTask.java | 59 ---- .../hoko/blur/task/BitmapAsyncBlurTask.java | 17 -- .../java/com/hoko/blur/task/BlurResult.java | 49 --- .../hoko/blur/task/BlurResultRunnable.java | 33 -- .../java/com/hoko/blur/task/BlurSubTask.java | 74 ----- .../com/hoko/blur/task/BlurTaskManager.java | 57 ---- .../com/hoko/blur/task/ViewAsyncBlurTask.java | 18 -- .../java/com/hoko/blur/util/BitmapUtil.java | 81 ----- .../java/com/hoko/blur/util/MathUtil.java | 17 -- .../com/hoko/blur/util/Preconditions.java | 36 --- .../java/com/hoko/blur/util/ShaderUtil.java | 165 ---------- .../com/hoko/blur/util/SingleMainHandler.java | 20 -- .../com/hoko/blur/view/DragBlurringView.java | 139 --------- .../hoko/blur/view/RsBlurLinearLayout.java | 116 ------- hoko-blur/src/main/jni/BlurUtil.cpp | 78 ----- hoko-blur/src/main/jni/BoxBlurFilter.cpp | 158 ---------- hoko-blur/src/main/jni/CMakeLists.txt | 23 -- hoko-blur/src/main/jni/GaussianBlurFilter.cpp | 178 ----------- hoko-blur/src/main/jni/StackBlurFilter.cpp | 288 ------------------ hoko-blur/src/main/jni/include/BlurUtil.h | 32 -- .../src/main/jni/include/BoxBlurFilter.h | 22 -- .../src/main/jni/include/GaussianBlurFilter.h | 28 -- .../src/main/jni/include/StackBlurFilter.h | 22 -- hoko-blur/src/main/res/values/strings.xml | 3 - hoko-blur/src/main/rs/BoxBlur.rs | 64 ---- hoko-blur/src/main/rs/StackBlur.rs | 69 ----- .../java/com/hoko/blur/ExampleUnitTest.java | 15 - 72 files changed, 4715 deletions(-) delete mode 100644 hoko-blur/.gitignore delete mode 100644 hoko-blur/build.gradle delete mode 100644 hoko-blur/proguard-rules.pro delete mode 100644 hoko-blur/src/androidTest/java/com/hoko/blur/ApplicationTest.java delete mode 100644 hoko-blur/src/main/AndroidManifest.xml delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/HokoBlur.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/anno/Direction.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/anno/Mode.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/anno/NotThreadSafe.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/anno/Scheme.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/anno/ThreadSafe.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/api/IBlurBuild.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/api/IBlurProcessor.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/api/IBlurResultDispatcher.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/api/IFrameBuffer.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/api/IProgram.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/api/IRenderer.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/api/ITexture.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/filter/BoxBlurFilter.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/filter/GaussianBlurFilter.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/filter/NativeBlurFilter.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/filter/OriginBlurFilter.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/filter/StackBlurFilter.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/cache/CachePool.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/cache/FrameBufferCache.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/cache/TextureCache.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/framebuffer/FrameBuffer.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/framebuffer/FrameBufferFactory.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/offscreen/EglBuffer.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/offscreen/OffScreenBlurRenderer.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/program/Program.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/program/ProgramFactory.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/texture/BitmapTexture.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/texture/SimpleTexture.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/texture/Texture.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/texture/TextureFactory.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/opengl/util/Size.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/processor/BlurProcessor.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/processor/BlurProcessorFactory.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/processor/HokoBlurBuild.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/processor/NativeBlurProcessor.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/processor/OpenGLBlurProcessor.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/processor/OriginBlurProcessor.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/processor/RenderScriptBlurProcessor.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/task/AndroidBlurResultDispatcher.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/task/AsyncBlurTask.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/task/BitmapAsyncBlurTask.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/task/BlurResult.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/task/BlurResultRunnable.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/task/BlurSubTask.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/task/BlurTaskManager.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/task/ViewAsyncBlurTask.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/util/BitmapUtil.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/util/MathUtil.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/util/Preconditions.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/util/ShaderUtil.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/util/SingleMainHandler.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/view/DragBlurringView.java delete mode 100644 hoko-blur/src/main/java/com/hoko/blur/view/RsBlurLinearLayout.java delete mode 100644 hoko-blur/src/main/jni/BlurUtil.cpp delete mode 100644 hoko-blur/src/main/jni/BoxBlurFilter.cpp delete mode 100644 hoko-blur/src/main/jni/CMakeLists.txt delete mode 100644 hoko-blur/src/main/jni/GaussianBlurFilter.cpp delete mode 100644 hoko-blur/src/main/jni/StackBlurFilter.cpp delete mode 100644 hoko-blur/src/main/jni/include/BlurUtil.h delete mode 100644 hoko-blur/src/main/jni/include/BoxBlurFilter.h delete mode 100644 hoko-blur/src/main/jni/include/GaussianBlurFilter.h delete mode 100644 hoko-blur/src/main/jni/include/StackBlurFilter.h delete mode 100644 hoko-blur/src/main/res/values/strings.xml delete mode 100644 hoko-blur/src/main/rs/BoxBlur.rs delete mode 100644 hoko-blur/src/main/rs/StackBlur.rs delete mode 100644 hoko-blur/src/test/java/com/hoko/blur/ExampleUnitTest.java diff --git a/hoko-blur/.gitignore b/hoko-blur/.gitignore deleted file mode 100644 index c591fdeb45..0000000000 --- a/hoko-blur/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build -.cxx \ No newline at end of file diff --git a/hoko-blur/build.gradle b/hoko-blur/build.gradle deleted file mode 100644 index c3333b5fc9..0000000000 --- a/hoko-blur/build.gradle +++ /dev/null @@ -1,66 +0,0 @@ -apply plugin: 'com.android.library' - -def isReleaseBuildType = false -gradle.startParameter.taskNames.each({ - String taskNameL = it.toLowerCase() - if (taskNameL.contains("release")) { - isReleaseBuildType = true - } - if (taskNameL.equalsIgnoreCase('uploadArchives')) { - isReleaseBuildType = true - } -}) - -android { - compileSdkVersion rootProject.ext.compileSdkVersion - - defaultConfig { - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - - renderscriptTargetApi 27 - renderscriptSupportModeEnabled true - - externalNativeBuild { - cmake { - arguments '-DANDROID_PLATFORM=android-13', '-DANDROID_TOOLCHAIN=clang' - cppFlags "-std=c++11 -frtti -fexceptions" - } - } - externalNativeBuild.cmake.abiFilters = isReleaseBuildType ? ['armeabi-v7a', 'arm64-v8a'] : ['armeabi-v7a', 'arm64-v8a', 'x86'] - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - - debug { - jniDebuggable true - } - } - - lintOptions { - abortOnError false - } - - externalNativeBuild { - cmake { - path 'src/main/jni/CMakeLists.txt' - } - } -} - -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - testImplementation 'junit:junit:4.12' - implementation "com.android.support:support-annotations:${rootProject.ext.supportLibraryVersion}" -} \ No newline at end of file diff --git a/hoko-blur/proguard-rules.pro b/hoko-blur/proguard-rules.pro deleted file mode 100644 index a6e4c0bc69..0000000000 --- a/hoko-blur/proguard-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /Users/yuxfzju/Library/Android/sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript helper -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/hoko-blur/src/androidTest/java/com/hoko/blur/ApplicationTest.java b/hoko-blur/src/androidTest/java/com/hoko/blur/ApplicationTest.java deleted file mode 100644 index f1b8f139f5..0000000000 --- a/hoko-blur/src/androidTest/java/com/hoko/blur/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.hoko.blur; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/hoko-blur/src/main/AndroidManifest.xml b/hoko-blur/src/main/AndroidManifest.xml deleted file mode 100644 index d6d463e2ee..0000000000 --- a/hoko-blur/src/main/AndroidManifest.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - diff --git a/hoko-blur/src/main/java/com/hoko/blur/HokoBlur.java b/hoko-blur/src/main/java/com/hoko/blur/HokoBlur.java deleted file mode 100644 index 6a1521bb5d..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/HokoBlur.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.hoko.blur; - -import android.content.Context; - -import com.hoko.blur.api.IBlurBuild; -import com.hoko.blur.processor.HokoBlurBuild; - -/** - * Created by yuxfzju on 16/9/7. - */ -public final class HokoBlur { - - public static final int MODE_BOX = 0; - public static final int MODE_GAUSSIAN = 1; - public static final int MODE_STACK = 2; - - public static final int SCHEME_RENDER_SCRIPT = 1001; - public static final int SCHEME_OPENGL = 1002; - public static final int SCHEME_NATIVE = 1003; - public static final int SCHEME_JAVA = 1004; - - public static final int HORIZONTAL = 0; - public static final int VERTICAL = 1; - public static final int BOTH = 2; - - public static IBlurBuild with(Context context) { - return new HokoBlurBuild(context.getApplicationContext()); - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/anno/Direction.java b/hoko-blur/src/main/java/com/hoko/blur/anno/Direction.java deleted file mode 100644 index 1b2068a71d..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/anno/Direction.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.hoko.blur.anno; - -import android.support.annotation.IntDef; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -import static com.hoko.blur.HokoBlur.BOTH; -import static com.hoko.blur.HokoBlur.HORIZONTAL; -import static com.hoko.blur.HokoBlur.VERTICAL; - -/** - * Created by yuxfzju on 2017/2/20. - */ - -@IntDef({HORIZONTAL, VERTICAL, BOTH}) -@Retention(RetentionPolicy.SOURCE) -public @interface Direction { -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/anno/Mode.java b/hoko-blur/src/main/java/com/hoko/blur/anno/Mode.java deleted file mode 100644 index 882ed4dd7f..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/anno/Mode.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.hoko.blur.anno; - -import android.support.annotation.IntDef; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -import static com.hoko.blur.HokoBlur.MODE_BOX; -import static com.hoko.blur.HokoBlur.MODE_GAUSSIAN; -import static com.hoko.blur.HokoBlur.MODE_STACK; - -/** - * Created by yuxfzju on 2017/2/9. - */ - -@IntDef({MODE_BOX, MODE_GAUSSIAN, MODE_STACK}) -@Retention(RetentionPolicy.SOURCE) -public @interface Mode { -} \ No newline at end of file diff --git a/hoko-blur/src/main/java/com/hoko/blur/anno/NotThreadSafe.java b/hoko-blur/src/main/java/com/hoko/blur/anno/NotThreadSafe.java deleted file mode 100644 index fb4ad0819f..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/anno/NotThreadSafe.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.hoko.blur.anno; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Documented -@Target(ElementType.TYPE) -@Retention(RetentionPolicy.CLASS) -public @interface NotThreadSafe { -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/anno/Scheme.java b/hoko-blur/src/main/java/com/hoko/blur/anno/Scheme.java deleted file mode 100644 index 75bea1a98d..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/anno/Scheme.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hoko.blur.anno; - -import android.support.annotation.IntDef; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - -import static com.hoko.blur.HokoBlur.SCHEME_JAVA; -import static com.hoko.blur.HokoBlur.SCHEME_NATIVE; -import static com.hoko.blur.HokoBlur.SCHEME_OPENGL; -import static com.hoko.blur.HokoBlur.SCHEME_RENDER_SCRIPT; - -/** - * Created by yuxfzju on 2017/2/9. - */ - -@IntDef({SCHEME_RENDER_SCRIPT, SCHEME_OPENGL, SCHEME_NATIVE, SCHEME_JAVA}) -@Retention(RetentionPolicy.SOURCE) -public @interface Scheme { -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/anno/ThreadSafe.java b/hoko-blur/src/main/java/com/hoko/blur/anno/ThreadSafe.java deleted file mode 100644 index f5db51bcb0..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/anno/ThreadSafe.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.hoko.blur.anno; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Documented -@Target({ElementType.TYPE}) -@Retention(RetentionPolicy.CLASS) -public @interface ThreadSafe { -} - diff --git a/hoko-blur/src/main/java/com/hoko/blur/api/IBlurBuild.java b/hoko-blur/src/main/java/com/hoko/blur/api/IBlurBuild.java deleted file mode 100644 index 8e3a8b2506..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/api/IBlurBuild.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.hoko.blur.api; - -import android.content.Context; -import android.graphics.Bitmap; -import android.view.View; - -import com.hoko.blur.anno.Mode; -import com.hoko.blur.anno.Scheme; -import com.hoko.blur.processor.BlurProcessor; -import com.hoko.blur.task.AsyncBlurTask; - -import java.util.concurrent.Future; - -public interface IBlurBuild { - IBlurBuild context(Context context); - - IBlurBuild mode(@Mode int mode); - - IBlurBuild scheme(@Scheme int scheme); - - IBlurBuild radius(int radius); - - IBlurBuild sampleFactor(float sampleFactor); - - IBlurBuild forceCopy(boolean isForceCopy); - - IBlurBuild needUpscale(boolean needUpscale); - - IBlurBuild translateX(int translateX); - - IBlurBuild translateY(int translateY); - - IBlurBuild dispatcher(IBlurResultDispatcher dispatcher); - - /** - * Get different types of Blur Processors - */ - BlurProcessor processor(); - - Bitmap blur(Bitmap bitmap); - - Bitmap blur(View view); - - Future asyncBlur(Bitmap bitmap, AsyncBlurTask.Callback callback); - - Future asyncBlur(View view, AsyncBlurTask.Callback callback); - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/api/IBlurProcessor.java b/hoko-blur/src/main/java/com/hoko/blur/api/IBlurProcessor.java deleted file mode 100644 index d3c19f8e18..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/api/IBlurProcessor.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.hoko.blur.api; - -import android.graphics.Bitmap; -import android.view.View; - -import com.hoko.blur.task.AsyncBlurTask; - -import java.util.concurrent.Future; - -/** - * Created by yuxfzju on 16/9/8. - */ -public interface IBlurProcessor { - /** - * apply the blur effect to a bitmap - * - * @param bitmap the original bitmap - * @return the blurred bitmap - */ - Bitmap blur(Bitmap bitmap); - - /** - * apply the blur effect to a view - * - * @param view the original view - * @return the bitmap of the blurred view - */ - Bitmap blur(View view); - - /** - * Asynchronously apply the blur effect to a bitmap - * - * @param bitmap the original bitmap - * @param callback task callback - */ - Future asyncBlur(Bitmap bitmap, AsyncBlurTask.Callback callback); - - /** - * Asynchronously apply the blur effect to a view - * - * @param view the original view - * @param callback task callback - */ - Future asyncBlur(View view, AsyncBlurTask.Callback callback); - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/api/IBlurResultDispatcher.java b/hoko-blur/src/main/java/com/hoko/blur/api/IBlurResultDispatcher.java deleted file mode 100644 index 7acd517f5a..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/api/IBlurResultDispatcher.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.hoko.blur.api; - -import com.hoko.blur.task.BlurResultRunnable; - -public interface IBlurResultDispatcher { - void dispatch(BlurResultRunnable result); -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/api/IFrameBuffer.java b/hoko-blur/src/main/java/com/hoko/blur/api/IFrameBuffer.java deleted file mode 100644 index 0c5dda1c10..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/api/IFrameBuffer.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.hoko.blur.api; - -/** - * Created by yuxfzju on 2017/1/22. - */ - -public interface IFrameBuffer { - - void create(); - - void bindTexture(ITexture texture); - - void bindSelf(); - - void delete(); -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/api/IProgram.java b/hoko-blur/src/main/java/com/hoko/blur/api/IProgram.java deleted file mode 100644 index 8830e5167f..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/api/IProgram.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.hoko.blur.api; - -public interface IProgram { - - void create(String vertexShaderCode, String fragmentShaderCode); - - void delete(); - - int id(); -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/api/IRenderer.java b/hoko-blur/src/main/java/com/hoko/blur/api/IRenderer.java deleted file mode 100644 index eb696f914a..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/api/IRenderer.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.hoko.blur.api; - - -/** - * Created by yuxfzju on 2017/2/10. - */ -public interface IRenderer { - - void onDrawFrame(T t); - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/api/ITexture.java b/hoko-blur/src/main/java/com/hoko/blur/api/ITexture.java deleted file mode 100644 index 3eefd38459..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/api/ITexture.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.hoko.blur.api; - -/** - * Created by yuxfzju on 17/1/20. - */ - -public interface ITexture { - - void create(); - - void delete(); - - int id(); - - int width(); - - int height(); - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/filter/BoxBlurFilter.java b/hoko-blur/src/main/java/com/hoko/blur/filter/BoxBlurFilter.java deleted file mode 100644 index 081fda36d3..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/filter/BoxBlurFilter.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.hoko.blur.filter; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.anno.Direction; - -import static com.hoko.blur.util.MathUtil.clamp; - -/** - * Created by yuxfzju on 2016/7/24. - */ -final class BoxBlurFilter { - - static void doBlur(int[] in, int width, int height, int radius, @Direction int round) { - int[] result = new int[width * height]; - - if (round == HokoBlur.HORIZONTAL) { - boxBlurHorizontal(in, result, width, height, radius); - System.arraycopy(result, 0, in, 0, result.length); - } else if (round == HokoBlur.VERTICAL) { - boxBlurVertical(in, result, width, height, radius); - System.arraycopy(result, 0, in, 0, result.length); - - } else { - boxBlurHorizontal(in, result, width, height, radius); - boxBlurVertical(result, in, width, height, radius); - - } - } - - private static void boxBlurHorizontal(int[] in, int[] out, int width, int height, int radius) { - int widthMinus1 = width - 1; - int tableSize = 2 * radius + 1; - int[] divide = new int[256 * tableSize]; - - // construct a query table from 0 to 255 - for (int i = 0; i < 256 * tableSize; i++) - divide[i] = i / tableSize; - - int inIndex = 0; - - // - for (int y = 0; y < height; y++) { - int ta = 0, tr = 0, tg = 0, tb = 0; // ARGB - - for (int i = -radius; i <= radius; i++) { - int rgb = in[inIndex + clamp(i, 0, width - 1)]; - ta += (rgb >> 24) & 0xff; - tr += (rgb >> 16) & 0xff; - tg += (rgb >> 8) & 0xff; - tb += rgb & 0xff; - } - - int baseIndex = y * width; - for (int x = 0; x < width; x++) { - out[baseIndex + x] = (divide[ta] << 24) | (divide[tr] << 16) | (divide[tg] << 8) | divide[tb]; - - int i1 = x + radius + 1; - if (i1 > widthMinus1) - i1 = widthMinus1; - int i2 = x - radius; - if (i2 < 0) - i2 = 0; - int rgb1 = in[inIndex + i1]; - int rgb2 = in[inIndex + i2]; - - ta += ((rgb1 >> 24) & 0xff) - ((rgb2 >> 24) & 0xff); - tr += ((rgb1 & 0xff0000) - (rgb2 & 0xff0000)) >> 16; - tg += ((rgb1 & 0xff00) - (rgb2 & 0xff00)) >> 8; - tb += (rgb1 & 0xff) - (rgb2 & 0xff); -// outIndex += height; - } - inIndex += width; - } - } - - private static void boxBlurVertical(int[] in, int[] out, int width, int height, int radius) { - int heightMinus1 = height - 1; - int tableSize = 2 * radius + 1; - int[] divide = new int[256 * tableSize]; - - // construct a query table from 0 to 255 - for (int i = 0; i < 256 * tableSize; i++) - divide[i] = i / tableSize; - - for (int x = 0; x < width; x++) { - int ta = 0, tr = 0, tg = 0, tb = 0; // ARGB - - for (int i = -radius; i <= radius; i++) { - int rgb = in[x + clamp(i, 0, height - 1) * width]; - ta += (rgb >> 24) & 0xff; - tr += (rgb >> 16) & 0xff; - tg += (rgb >> 8) & 0xff; - tb += rgb & 0xff; - } - - for (int y = 0; y < height; y++) { // Sliding window computation - out[y * width + x] = (divide[ta] << 24) | (divide[tr] << 16) | (divide[tg] << 8) | divide[tb]; - - int i1 = y + radius + 1; - if (i1 > heightMinus1) - i1 = heightMinus1; - int i2 = y - radius; - if (i2 < 0) - i2 = 0; - int rgb1 = in[x + i1 * width]; - int rgb2 = in[x + i2 * width]; - - ta += ((rgb1 >> 24) & 0xff) - ((rgb2 >> 24) & 0xff); - tr += ((rgb1 & 0xff0000) - (rgb2 & 0xff0000)) >> 16; - tg += ((rgb1 & 0xff00) - (rgb2 & 0xff00)) >> 8; - tb += (rgb1 & 0xff) - (rgb2 & 0xff); - } - } - } - - -} \ No newline at end of file diff --git a/hoko-blur/src/main/java/com/hoko/blur/filter/GaussianBlurFilter.java b/hoko-blur/src/main/java/com/hoko/blur/filter/GaussianBlurFilter.java deleted file mode 100644 index c418478643..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/filter/GaussianBlurFilter.java +++ /dev/null @@ -1,127 +0,0 @@ -package com.hoko.blur.filter; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.anno.Direction; - -import static com.hoko.blur.util.MathUtil.clamp; - -/** - * Created by yuxfzju on 16/9/10. - */ -final class GaussianBlurFilter { - - - static void doBlur(int[] in, int width, int height, int radius, @Direction int direction) { - - int[] result = new int[width * height]; - float[] kernel = makeKernel(radius); - - if (direction == HokoBlur.HORIZONTAL) { - gaussianBlurHorizontal(kernel, in, result, width, height); - System.arraycopy(result, 0, in, 0, result.length); - } else if (direction == HokoBlur.VERTICAL) { - gaussianBlurVertical(kernel, in, result, width, height); - System.arraycopy(result, 0, in, 0, result.length); - - } else { - gaussianBlurHorizontal(kernel, in, result, width, height); - gaussianBlurVertical(kernel, result, in, width, height); - } - - - } - - private static void gaussianBlurHorizontal(float[] kernel, int[] inPixels, int[] outPixels, int width, int height) { - int cols = kernel.length; - int cols2 = cols / 2; - - for (int y = 0; y < height; y++) { - int ioffset = y * width; - for (int x = 0; x < width; x++) { - float r = 0, g = 0, b = 0; - int moffset = cols2; - for (int col = -cols2; col <= cols2; col++) { - float f = kernel[moffset + col]; - - if (f != 0) { - int ix = x + col; - if (ix < 0) { - ix = 0; - } else if (ix >= width) { - ix = width - 1; - } - int rgb = inPixels[ioffset + ix]; - r += f * ((rgb >> 16) & 0xff); - g += f * ((rgb >> 8) & 0xff); - b += f * (rgb & 0xff); - } - } - int outIndex = ioffset + x; - int ia = (inPixels[outIndex] >> 24) & 0xff; - int ir = clamp((int) (r + 0.5), 0, 255); - int ig = clamp((int) (g + 0.5), 0, 255); - int ib = clamp((int) (b + 0.5), 0, 255); - outPixels[outIndex] = (ia << 24) | (ir << 16) | (ig << 8) | ib; - } - } - } - - private static void gaussianBlurVertical(float[] kernel, int[] inPixels, int[] outPixels, int width, int height) { - int cols = kernel.length; - int cols2 = cols / 2; - for (int x = 0; x < width; x++) { - int ioffset = x; - for (int y = 0; y < height; y++) { - float r = 0, g = 0, b = 0; - int moffset = cols2; - for (int col = -cols2; col <= cols2; col++) { - float f = kernel[moffset + col]; - - if (f != 0) { - int iy = y + col; - if (iy < 0) { - iy = 0; - } else if (iy >= height) { - iy = height - 1; - } - int rgb = inPixels[ioffset + iy * width]; - r += f * ((rgb >> 16) & 0xff); - g += f * ((rgb >> 8) & 0xff); - b += f * (rgb & 0xff); - } - } - int outIndex = ioffset + y * width; - int ia = (inPixels[outIndex] >> 24) & 0xff; - int ir = clamp((int) (r + 0.5), 0, 255); - int ig = clamp((int) (g + 0.5), 0, 255); - int ib = clamp((int) (b + 0.5), 0, 255); - outPixels[outIndex] = (ia << 24) | (ir << 16) | (ig << 8) | ib; - } - } -// - } - - /** - * Make a Gaussian blur kernel. - */ - private static float[] makeKernel(int r) { - int rows = r * 2 + 1; - float[] matrix = new float[rows]; - float sigma = (r + 1) / 2.0f; - float sigma22 = 2 * sigma * sigma; - float total = 0; - int index = 0; - for (int row = -r; row <= r; row++) { - matrix[index] = (float) (Math.exp(-1 * (row * row) / sigma22) / sigma); - - total += matrix[index]; - index++; - } - for (int i = 0; i < rows; i++) - matrix[i] /= total; - - return matrix; - } - - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/filter/NativeBlurFilter.java b/hoko-blur/src/main/java/com/hoko/blur/filter/NativeBlurFilter.java deleted file mode 100644 index 172f814158..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/filter/NativeBlurFilter.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.hoko.blur.filter; - -import android.graphics.Bitmap; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.anno.Direction; -import com.hoko.blur.anno.Mode; - -/** - * Created by yuxfzju on 2017/2/18. - */ - -public class NativeBlurFilter { - - public static void doBlur(@Mode int mode, Bitmap bitmap, int radius, int cores, int index, @Direction int direction) { - switch (mode) { - case HokoBlur.MODE_BOX: - nativeBoxBlur(bitmap, radius, cores, index, direction); - break; - case HokoBlur.MODE_STACK: - nativeStackBlur(bitmap, radius, cores, index, direction); - break; - case HokoBlur.MODE_GAUSSIAN: - nativeGaussianBlur(bitmap, radius, cores, index, direction); - break; - } - } - - public static void doFullBlur(@Mode int mode, Bitmap bitmap, int radius) { - doBlur(mode, bitmap, radius, 1, 0, HokoBlur.HORIZONTAL); - doBlur(mode, bitmap, radius, 1, 0, HokoBlur.VERTICAL); - } - - private static native void nativeBoxBlur(Bitmap bitmap, int radius, int cores, int index, int direction); - - private static native void nativeStackBlur(Bitmap bitmap, int radius, int cores, int index, int direction); - - private static native void nativeGaussianBlur(Bitmap bitmap, int radius, int cores, int index, int direction); - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/filter/OriginBlurFilter.java b/hoko-blur/src/main/java/com/hoko/blur/filter/OriginBlurFilter.java deleted file mode 100644 index d0ffbb60af..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/filter/OriginBlurFilter.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.hoko.blur.filter; - -import android.graphics.Bitmap; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.anno.Direction; -import com.hoko.blur.anno.Mode; - -import static com.hoko.blur.util.BitmapUtil.replaceBitmap; - -/** - * Created by yuxfzju on 2017/2/19. - */ - -public final class OriginBlurFilter { - - public static void doBlur(@Mode int mode, Bitmap bitmap, int radius, int cores, int index, @Direction int direction) { - - int w = bitmap.getWidth(); - int h = bitmap.getHeight(); - - int x = 0; - int y = 0; - int deltaX = 0; - int deltaY = 0; - - if (direction == HokoBlur.HORIZONTAL) { - deltaY = h / cores; - y = index * deltaY; - - if (index == cores - 1) { - deltaY = h - (cores - 1) * deltaY; - } - - deltaX = w; - } else if (direction == HokoBlur.VERTICAL) { - deltaX = w / cores; - x = index * deltaX; - - if (index == cores - 1) { - deltaX = w - (cores - 1) * deltaX; - } - - deltaY = h; - } - - - final int[] pixels = new int[deltaX * deltaY]; - bitmap.getPixels(pixels, 0, deltaX, x, y, deltaX, deltaY); - - switch (mode) { - case HokoBlur.MODE_BOX: - BoxBlurFilter.doBlur(pixels, deltaX, deltaY, radius, direction); - break; - - case HokoBlur.MODE_GAUSSIAN: - GaussianBlurFilter.doBlur(pixels, deltaX, deltaY, radius, direction); - break; - - case HokoBlur.MODE_STACK: - StackBlurFilter.doBlur(pixels, deltaX, deltaY, radius, direction); - break; - } - if (bitmap.isMutable()) { - bitmap.setPixels(pixels, 0, deltaX, x, y, deltaX, deltaY); - } else { - replaceBitmap(bitmap, pixels, x, y, deltaX, deltaY); - } - - } - - public static void doFullBlur(@Mode int mode, Bitmap bitmap, int radius) { - int w = bitmap.getWidth(); - int h = bitmap.getHeight(); - - final int[] pixels = new int[w * h]; - bitmap.getPixels(pixels, 0, w, 0, 0, w, h); - - switch (mode) { - case HokoBlur.MODE_BOX: - BoxBlurFilter.doBlur(pixels, w, h, radius, HokoBlur.BOTH); - break; - - case HokoBlur.MODE_GAUSSIAN: - GaussianBlurFilter.doBlur(pixels, w, h, radius, HokoBlur.BOTH); - break; - - case HokoBlur.MODE_STACK: - StackBlurFilter.doBlur(pixels, w, h, radius, HokoBlur.BOTH); - break; - } - if (bitmap.isMutable()) { - bitmap.setPixels(pixels, 0, w, 0, 0, w, h); - } else { - replaceBitmap(bitmap, pixels, 0, 0, w, h); - } - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/filter/StackBlurFilter.java b/hoko-blur/src/main/java/com/hoko/blur/filter/StackBlurFilter.java deleted file mode 100644 index 96ff82482f..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/filter/StackBlurFilter.java +++ /dev/null @@ -1,277 +0,0 @@ -package com.hoko.blur.filter; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.anno.Direction; - -/** - * Stack HokoBlur v1.0 from - * http://www.quasimondo.com/StackBlurForCanvas/StackBlurDemo.html - *

- * Java Author: Mario Klingemann mario@quasimondo.com - * http://incubator.quasimondo.com - * created Feburary 29, 2004 - * Android port : Yahel Bouaziz yahel@kayenko.com - * http://www.kayenko.com - * ported april 5th, 2012 - *

- * This is a compromise between Gaussian HokoBlur and Box blur - * It creates much better looking blurs than Box HokoBlur, but is - * 7x faster than my Gaussian HokoBlur implementation. - *

- * I called it Stack HokoBlur because this describes best how this - * filter works internally: it creates a kind of moving stack - * of colors whilst scanning through the image. Thereby it - * just has to add one new block of color to the right side - * of the stack and remove the leftmost color. The remaining - * colors on the topmost layer of the stack are either added on - * or reduced by one, depending on if they are on the right or - * on the left side of the stack. - *

- * If you are using this algorithm in your code please add - * the following line: - *

- * Stack HokoBlur Algorithm by Mario Klingemann mario@quasimondo.com - **/ -final class StackBlurFilter { - - public static void doBlur(int[] pix, int w, int h, int radius, @Direction int direction) { - - if (direction == HokoBlur.HORIZONTAL) { - doHorizontalBlur(pix, w, h, radius); - } else if (direction == HokoBlur.VERTICAL) { - doVerticalBlur(pix, w, h, radius); - } else { - doHorizontalBlur(pix, w, h, radius); - doVerticalBlur(pix, w, h, radius); - } - - } - - private static void doHorizontalBlur(int[] pix, int w, int h, int radius) { - int wm = w - 1; - int hm = h - 1; - int wh = w * h; - int div = radius + radius + 1; - - int[] r = new int[wh]; - int[] g = new int[wh]; - int[] b = new int[wh]; - int rsum, gsum, bsum, x, y, i, p, yp, yi, yw; - int[] vmin = new int[Math.max(w, h)]; - - int divsum = (div + 1) >> 1; - divsum *= divsum; - int[] dv = new int[256 * divsum]; - for (i = 0; i < 256 * divsum; i++) { - dv[i] = (i / divsum); - } - - yw = yi = 0; - - int[][] stack = new int[div][3]; - int stackpointer; - int stackstart; - int[] sir; - int rbs; - int r1 = radius + 1; - int routsum, goutsum, boutsum; - int rinsum, ginsum, binsum; - - - for (y = 0; y < h; y++) { - rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; - for (i = -radius; i <= radius; i++) { - p = pix[yi + Math.min(wm, Math.max(i, 0))]; - sir = stack[i + radius]; - sir[0] = (p & 0xff0000) >> 16; - sir[1] = (p & 0x00ff00) >> 8; - sir[2] = (p & 0x0000ff); - rbs = r1 - Math.abs(i); - rsum += sir[0] * rbs; - gsum += sir[1] * rbs; - bsum += sir[2] * rbs; - if (i > 0) { - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - } else { - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - } - } - stackpointer = radius; - - for (x = 0; x < w; x++) { - - r[yi] = dv[rsum]; - g[yi] = dv[gsum]; - b[yi] = dv[bsum]; - - pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum]; - - rsum -= routsum; - gsum -= goutsum; - bsum -= boutsum; - - stackstart = stackpointer - radius + div; - sir = stack[stackstart % div]; - - routsum -= sir[0]; - goutsum -= sir[1]; - boutsum -= sir[2]; - - if (y == 0) { - vmin[x] = Math.min(x + radius + 1, wm); - } - p = pix[yw + vmin[x]]; - - sir[0] = (p & 0xff0000) >> 16; - sir[1] = (p & 0x00ff00) >> 8; - sir[2] = (p & 0x0000ff); - - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - - rsum += rinsum; - gsum += ginsum; - bsum += binsum; - - stackpointer = (stackpointer + 1) % div; - sir = stack[(stackpointer) % div]; - - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - - rinsum -= sir[0]; - ginsum -= sir[1]; - binsum -= sir[2]; - - yi++; - } - yw += w; - } - } - - private static void doVerticalBlur(int[] pix, int w, int h, int radius) { - int wm = w - 1; - int hm = h - 1; - int wh = w * h; - int div = radius + radius + 1; - - int[] r = new int[wh]; - int[] g = new int[wh]; - int[] b = new int[wh]; - int rsum, gsum, bsum, x, y, i, p, yp, yi, yw; - int[] vmin = new int[Math.max(w, h)]; - - int divsum = (div + 1) >> 1; - divsum *= divsum; - int[] dv = new int[256 * divsum]; - for (i = 0; i < 256 * divsum; i++) { - dv[i] = (i / divsum); - } - - yw = yi = 0; - - int[][] stack = new int[div][3]; - int stackpointer; - int stackstart; - int[] sir; - int rbs; - int r1 = radius + 1; - int routsum, goutsum, boutsum; - int rinsum, ginsum, binsum; - - for (i = 0; i < wh; i++) { - - r[i] = (pix[i] & 0xff0000) >> 16; - g[i] = (pix[i] & 0x00ff00) >> 8; - b[i] = (pix[i] & 0x0000ff); - } - - for (x = 0; x < w; x++) { - rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; - yp = -radius * w; - for (i = -radius; i <= radius; i++) { - yi = Math.max(0, yp) + x; - - sir = stack[i + radius]; - - sir[0] = r[yi]; - sir[1] = g[yi]; - sir[2] = b[yi]; - - rbs = r1 - Math.abs(i); - - rsum += r[yi] * rbs; - gsum += g[yi] * rbs; - bsum += b[yi] * rbs; - - if (i > 0) { - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - } else { - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - } - - if (i < hm) { - yp += w; - } - } - yi = x; - stackpointer = radius; - for (y = 0; y < h; y++) { - // Preserve alpha channel: ( 0xff000000 & pix[yi] ) - pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum]; - - rsum -= routsum; - gsum -= goutsum; - bsum -= boutsum; - - stackstart = stackpointer - radius + div; - sir = stack[stackstart % div]; - - routsum -= sir[0]; - goutsum -= sir[1]; - boutsum -= sir[2]; - - if (x == 0) { - vmin[y] = Math.min(y + r1, hm) * w; - } - p = x + vmin[y]; - - sir[0] = r[p]; - sir[1] = g[p]; - sir[2] = b[p]; - - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - - rsum += rinsum; - gsum += ginsum; - bsum += binsum; - - stackpointer = (stackpointer + 1) % div; - sir = stack[stackpointer]; - - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - - rinsum -= sir[0]; - ginsum -= sir[1]; - binsum -= sir[2]; - - yi += w; - } - } - } -} - diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/cache/CachePool.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/cache/CachePool.java deleted file mode 100644 index cd5dd3c617..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/cache/CachePool.java +++ /dev/null @@ -1,123 +0,0 @@ -package com.hoko.blur.opengl.cache; - -import com.hoko.blur.util.Preconditions; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -/** - * Created by yuxfzju on 2017/1/21. - */ - -public abstract class CachePool { - - private static final int MAX_SIZE = 1024; - - private int mMaxSize; - - private List mInternalCache; - - public CachePool() { - this(MAX_SIZE); - } - - public CachePool(int maxSize) { - Preconditions.checkArgument(maxSize > 0, "maxSize <= 0"); - mMaxSize = maxSize; - mInternalCache = new LinkedList<>(); - } - - public final V get(K key) { - Preconditions.checkNotNull(key, "size == null"); - V listValue = remove(key); - if (listValue != null) { - return listValue; - } - - //listValue is null - return create(key); - } - - public final void put(V v) { - Preconditions.checkNotNull(v, "value == null"); - try { - if (!mInternalCache.contains(v)) { - synchronized (this) { - if (!mInternalCache.contains(v)) { - mInternalCache.add(v); - } - } - } - } finally { - trimToSize(mMaxSize); - } - - } - - private V remove(K key) { - Preconditions.checkNotNull(key, "key == null"); - - V previous = null; - synchronized (this) { - Iterator it = mInternalCache.iterator(); - while(it.hasNext()) { - V value = it.next(); - if (checkHit(key, value)) { - it.remove(); - previous = value; - break; - } - } - } - - return previous; - } - - public void delete(K key) { - Preconditions.checkNotNull(key, "key == null"); - V removed = remove(key); - if (removed != null) { - entryDeleted(removed); - } - } - - protected V create(K key) { - return null; - } - - protected void entryDeleted(V v) { - - } - - protected abstract boolean checkHit(K key, V value); - - private void trimToSize(int maxSize) { - List removedCollection = new ArrayList<>(); - synchronized (this) { - while (mInternalCache.size() > maxSize && !mInternalCache.isEmpty()) { - V removed = mInternalCache.remove(0); - if (removed != null) { - removedCollection.add(removed); - } - } - } - - for(V removed : removedCollection) { - if (removed != null) { - entryDeleted(removed); - } - } - - } - - public synchronized final int maxSize() { - return mMaxSize; - } - - public final void evictAll() { - trimToSize(-1); - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/cache/FrameBufferCache.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/cache/FrameBufferCache.java deleted file mode 100644 index 9183744432..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/cache/FrameBufferCache.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.hoko.blur.opengl.cache; - -import com.hoko.blur.api.IFrameBuffer; -import com.hoko.blur.opengl.framebuffer.FrameBufferFactory; - -/** - * Created by yuxfzju on 2017/1/21. - */ - -public class FrameBufferCache { - - private static class FrameBufferCacheHolder { - private static final FrameBufferCache INSTANCE = new FrameBufferCache(); - } - - private CachePool mCache; - - private volatile IFrameBuffer sDisplayFrameBuffer; - - private FrameBufferCache() { - mCache = new CachePool() { - @Override - protected IFrameBuffer create(Object key) { - return FrameBufferFactory.create(); - } - - @Override - protected boolean checkHit(Object key, IFrameBuffer frameBuffer) { - return true; - } - - @Override - protected void entryDeleted(IFrameBuffer frameBuffer) { - if (frameBuffer != null) { - frameBuffer.delete(); - } - } - }; - - } - - public static FrameBufferCache getInstance() { - return FrameBufferCacheHolder.INSTANCE; - } - - public IFrameBuffer getFrameBuffer() { - if (mCache != null) { - return mCache.get(new Object()); - } - return null; - } - - public IFrameBuffer getDisplayFrameBuffer() { - if (sDisplayFrameBuffer == null) { - synchronized (this) { - if (sDisplayFrameBuffer == null) { - sDisplayFrameBuffer = FrameBufferFactory.getDisplayFrameBuffer(); - } - } - } - - return sDisplayFrameBuffer; - } - - public void recycleFrameBuffer(IFrameBuffer frameBuffer) { - if (frameBuffer != null) { - mCache.put(frameBuffer); - } - } - - public void deleteFrameBuffers() { - if (mCache != null) { - mCache.evictAll(); - } - - synchronized (this) { - if (sDisplayFrameBuffer != null) { - sDisplayFrameBuffer.delete(); - sDisplayFrameBuffer = null; - } - } - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/cache/TextureCache.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/cache/TextureCache.java deleted file mode 100644 index 8dad160cde..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/cache/TextureCache.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.hoko.blur.opengl.cache; - -import com.hoko.blur.api.ITexture; -import com.hoko.blur.opengl.texture.TextureFactory; -import com.hoko.blur.opengl.util.Size; - -/** - * Created by yuxfzju on 17/1/20. - */ - -public class TextureCache { - - private static class TextureCacheHolder { - private static final TextureCache INSTANCE = new TextureCache(); - } - - private CachePool mCache; - - private TextureCache() { - mCache = new CachePool() { - - @Override - protected ITexture create(Size size) { - if (size == null) { - return null; - } - return TextureFactory.create(size.width(), size.height()); - } - - - @Override - protected void entryDeleted(ITexture texture) { - if (texture != null) { - texture.delete(); - } - } - - @Override - protected boolean checkHit(Size size, ITexture texture) { - return size != null && texture != null && size.width() == texture.width() && size.height() == texture.height(); - } - }; - } - - public static TextureCache getInstance() { - return TextureCacheHolder.INSTANCE; - } - - public ITexture getTexture(int width, int height) { - - if (mCache != null) { - return mCache.get(new Size(width, height)); - } - - return null; - } - - public void recycleTexture(ITexture texture) { - if (texture != null) { - mCache.put(texture); - } - } - - public void deleteTextures() { - if (mCache != null) { - mCache.evictAll(); - } - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/framebuffer/FrameBuffer.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/framebuffer/FrameBuffer.java deleted file mode 100644 index cd3ec710dc..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/framebuffer/FrameBuffer.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.hoko.blur.opengl.framebuffer; - -import android.opengl.GLES20; - -import com.hoko.blur.api.IFrameBuffer; -import com.hoko.blur.api.ITexture; - -/** - * Created by yuxfzju on 2017/1/22. - */ - -class FrameBuffer implements IFrameBuffer { - - private int mFrameBufferId; - - private ITexture mTexture; - - FrameBuffer() { - create(); - } - - FrameBuffer(int id) { - mFrameBufferId = id; - } - - public int id() { - return mFrameBufferId; - } - - public void id(int frameBufferId) { - mFrameBufferId = frameBufferId; - } - - @Override - public void create() { - final int[] frameBufferIds = new int[1]; - - GLES20.glGenFramebuffers(1, frameBufferIds, 0); - - mFrameBufferId = frameBufferIds[0]; - } - - @Override - public void bindTexture(ITexture texture) { - if (texture == null) { - return; - } - mTexture = texture; - - if (texture.id() != 0) { - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBufferId); - - GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, - GLES20.GL_TEXTURE_2D, texture.id(), 0); - } - - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); - } - - public ITexture bindTexture() { - return mTexture; - } - - @Override - public void bindSelf() { - if (mFrameBufferId != 0) { - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, mFrameBufferId); - } - } - - @Override - public void delete() { - if (mFrameBufferId != 0) { - GLES20.glDeleteFramebuffers(1, new int[]{mFrameBufferId}, 0); - } - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/framebuffer/FrameBufferFactory.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/framebuffer/FrameBufferFactory.java deleted file mode 100644 index f314351b07..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/framebuffer/FrameBufferFactory.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.hoko.blur.opengl.framebuffer; - -import android.opengl.GLES20; - -import com.hoko.blur.api.IFrameBuffer; - -/** - * Created by yuxfzju on 2017/1/22. - */ - -public class FrameBufferFactory { - - public static IFrameBuffer create() { - return new FrameBuffer(); - } - - public static IFrameBuffer create(int id) { - return new FrameBuffer(id); - } - - public static IFrameBuffer getDisplayFrameBuffer() { - // Get the bound FBO (On Screen) - final int[] displayFbo = new int[1]; - GLES20.glGetIntegerv(GLES20.GL_FRAMEBUFFER_BINDING, displayFbo, 0); - return create(displayFbo[0]); - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/offscreen/EglBuffer.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/offscreen/EglBuffer.java deleted file mode 100644 index b5035dac53..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/offscreen/EglBuffer.java +++ /dev/null @@ -1,168 +0,0 @@ -package com.hoko.blur.opengl.offscreen; - -import android.graphics.Bitmap; -import android.opengl.GLES20; -import android.util.Log; - -import com.hoko.blur.anno.Mode; - -import java.nio.IntBuffer; - -import javax.microedition.khronos.egl.EGL10; -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.egl.EGLContext; -import javax.microedition.khronos.egl.EGLDisplay; -import javax.microedition.khronos.egl.EGLSurface; - -import static javax.microedition.khronos.opengles.GL10.GL_RGBA; -import static javax.microedition.khronos.opengles.GL10.GL_UNSIGNED_BYTE; - -/** - * Created by yuxfzju on 16/8/29. - */ -public class EglBuffer { - private static final String TAG = EglBuffer.class.getSimpleName(); - - private EGL10 mEgl; - - private EGLDisplay mEGLDisplay = EGL10.EGL_NO_DISPLAY; - - private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098; - - private static final int EGL_OPENGL_ES2_BIT = 4; - - private EGLConfig[] mEglConfigs = new EGLConfig[1]; - private int[] mContextAttrs = new int[]{ - EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE - }; - - - //EGLContext、EGLSurface and Renderer are bound to current thread. - // So here use the ThreadLocal to implement Thread isolation. - private ThreadLocal mThreadRenderer = new ThreadLocal<>(); - - private ThreadLocal mThreadEGLContext = new ThreadLocal<>(); - - public EglBuffer() { - initGL(); - } - - private void initGL() { - - int[] configAttribs = { - EGL10.EGL_BUFFER_SIZE, 32, - EGL10.EGL_ALPHA_SIZE, 8, - EGL10.EGL_BLUE_SIZE, 8, - EGL10.EGL_GREEN_SIZE, 8, - EGL10.EGL_RED_SIZE, 8, - EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT, - EGL10.EGL_NONE - }; - - mEgl = (EGL10) EGLContext.getEGL(); - mEGLDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); - mEgl.eglInitialize(mEGLDisplay, new int[2]); - mEgl.eglChooseConfig(mEGLDisplay, configAttribs, mEglConfigs, 1, new int[1]); - } - - private EGLSurface createSurface(int width, int height) { - int[] surfaceAttrs = { - EGL10.EGL_WIDTH, width, - EGL10.EGL_HEIGHT, height, - EGL10.EGL_NONE - }; - - EGLSurface eglSurface = mEgl.eglCreatePbufferSurface(mEGLDisplay, mEglConfigs[0], surfaceAttrs); - - mEgl.eglMakeCurrent(mEGLDisplay, eglSurface, eglSurface, getEGLContext()); - - return eglSurface; - - } - - - public Bitmap getBlurBitmap(Bitmap bitmap) { - final int w = bitmap.getWidth(); - final int h = bitmap.getHeight(); - - try { - EGLSurface eglSurface = createSurface(w, h); - if (eglSurface == null) { - Log.e(TAG, "Create surface error"); - return bitmap; - } - - OffScreenBlurRenderer renderer = getRenderer(); - if (renderer != null) { - renderer.onDrawFrame(bitmap); - mEgl.eglSwapBuffers(mEGLDisplay, eglSurface); - } else { - Log.e(TAG, "Renderer is unavailable"); - return bitmap; - } - convertToBitmap(bitmap); - } catch (Throwable t) { - Log.e(TAG, "Blur the bitmap error", t); - } finally { - unbindEglCurrent(); - } - - return bitmap; - - } - - private void convertToBitmap(Bitmap bitmap) { - final int w = bitmap.getWidth(); - final int h = bitmap.getHeight(); - - IntBuffer ib = IntBuffer.allocate(w * h); - GLES20.glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, ib); - int[] ia = ib.array(); - - bitmap.copyPixelsFromBuffer(IntBuffer.wrap(ia)); - } - - /** - * When the current thread finish renderring and reading pixels, the EGLContext should be unbound. - * Then the EGLContext could be reused for other threads. Make it possible to share the EGLContext - * To bind the EGLContext to current Thread, just call eglMakeCurrent() - */ - private void unbindEglCurrent() { - mEgl.eglMakeCurrent(mEGLDisplay, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_CONTEXT); - - } - - private OffScreenBlurRenderer getRenderer() { - OffScreenBlurRenderer renderer = mThreadRenderer.get(); - if (renderer == null) { - renderer = new OffScreenBlurRenderer(); - mThreadRenderer.set(renderer); - } - - return renderer; - } - - private EGLContext getEGLContext() { - EGLContext eglContext = mThreadEGLContext.get(); - if (eglContext == null) { - eglContext = mEgl.eglCreateContext(mEGLDisplay, mEglConfigs[0], EGL10.EGL_NO_CONTEXT, mContextAttrs); - mThreadEGLContext.set(eglContext); - } - - return eglContext; - } - - public void setBlurRadius(int radius) { - getRenderer().setBlurRadius(radius); - } - - public void setBlurMode(@Mode int mode) { - getRenderer().setBlurMode(mode); - } - - public void free() { - getRenderer().free(); - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/offscreen/OffScreenBlurRenderer.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/offscreen/OffScreenBlurRenderer.java deleted file mode 100644 index f00cb1cff8..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/offscreen/OffScreenBlurRenderer.java +++ /dev/null @@ -1,272 +0,0 @@ -package com.hoko.blur.opengl.offscreen; - -import android.graphics.Bitmap; -import android.opengl.GLES20; - -import com.hoko.blur.anno.Mode; -import com.hoko.blur.anno.NotThreadSafe; -import com.hoko.blur.api.IFrameBuffer; -import com.hoko.blur.api.IProgram; -import com.hoko.blur.api.IRenderer; -import com.hoko.blur.api.ITexture; -import com.hoko.blur.opengl.cache.FrameBufferCache; -import com.hoko.blur.opengl.program.ProgramFactory; -import com.hoko.blur.opengl.texture.TextureFactory; -import com.hoko.blur.util.ShaderUtil; - -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; -import java.nio.ShortBuffer; - -import javax.microedition.khronos.egl.EGL10; -import javax.microedition.khronos.egl.EGLContext; - -/** - * Created by yuxfzju on 16/8/10. - */ - -@NotThreadSafe -public class OffScreenBlurRenderer implements IRenderer { - private final static String TAG = OffScreenBlurRenderer.class.getSimpleName(); - - private static final String vertexShaderCode = - "attribute vec2 aTexCoord; \n" + - "attribute vec4 aPosition; \n" + - "varying vec2 vTexCoord; \n" + - "void main() { \n" + - " gl_Position = aPosition; \n" + - " vTexCoord = aTexCoord; \n" + - "} \n"; - - private static final int COORDS_PER_VERTEX = 3; - private static final int VERTEX_STRIDE = COORDS_PER_VERTEX * 4; - - private static final float[] squareCoords = { - -1f, 1f, 0.0f, // top left - -1f, -1f, 0.0f, // bottom left - 1f, -1f, 0.0f, // bottom right - 1f, 1f, 0.0f // top right - }; - - private static final float[] mTexHorizontalCoords = { - 1.0f, 1.0f, - 1.0f, 0.0f, - 0.0f, 0.0f, - 0.0f, 1.0f - }; - - private static final short[] drawOrder = {0, 1, 2, 0, 2, 3}; - - private FloatBuffer mVertexBuffer; - private ShortBuffer mDrawListBuffer; - private FloatBuffer mTexCoordBuffer; - - private IProgram mProgram; - - private int mRadius; - @Mode - private int mMode; - - private volatile boolean mNeedRelink; - - public OffScreenBlurRenderer() { - - ByteBuffer bb = ByteBuffer.allocateDirect(squareCoords.length * 4); - bb.order(ByteOrder.nativeOrder()); - mVertexBuffer = bb.asFloatBuffer(); - mVertexBuffer.put(squareCoords); - mVertexBuffer.position(0); - - ByteBuffer dlb = ByteBuffer.allocateDirect(drawOrder.length * 2); - dlb.order(ByteOrder.nativeOrder()); - mDrawListBuffer = dlb.asShortBuffer(); - mDrawListBuffer.put(drawOrder); - mDrawListBuffer.position(0); - - ByteBuffer tcb = ByteBuffer.allocateDirect(mTexHorizontalCoords.length * 4); - tcb.order(ByteOrder.nativeOrder()); - mTexCoordBuffer = tcb.asFloatBuffer(); - mTexCoordBuffer.put(mTexHorizontalCoords); - mTexCoordBuffer.position(0); - - - } - - @Override - public void onDrawFrame(Bitmap bitmap) { - if (bitmap == null || bitmap.isRecycled()) { - return; - } - - if (bitmap.getWidth() == 0 || bitmap.getHeight() == 0) { - return; - } - - BlurContext blurContext = null; - try { - blurContext = prepare(bitmap); - draw(blurContext); - } finally { - onPostBlur(blurContext); - } - } - - - private BlurContext prepare(Bitmap bitmap) { - EGLContext context = ((EGL10) EGLContext.getEGL()).eglGetCurrentContext(); - if (context.equals(EGL10.EGL_NO_CONTEXT)) { - throw new IllegalStateException("This thread has no EGLContext."); - } - - if (mNeedRelink || mProgram == null) { - deletePrograms(); - mProgram = ProgramFactory.create(vertexShaderCode, ShaderUtil.getFragmentShaderCode(mMode)); - mNeedRelink = false; - } - - if (mProgram.id() == 0) { - throw new IllegalStateException("Failed to create program."); - } - - int w = bitmap.getWidth(); - int h = bitmap.getHeight(); - - GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); - GLES20.glViewport(0, 0, w, h); - - return new BlurContext(bitmap); - - } - - - private void draw(BlurContext blurContext) { - drawOneDimenBlur(blurContext, true); - drawOneDimenBlur(blurContext, false); - - } - - private void drawOneDimenBlur(BlurContext blurContext, boolean isHorizontal) { - try { - GLES20.glUseProgram(mProgram.id()); - - int positionId = GLES20.glGetAttribLocation(mProgram.id(), "aPosition"); - GLES20.glEnableVertexAttribArray(positionId); - GLES20.glVertexAttribPointer(positionId, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, VERTEX_STRIDE, mVertexBuffer); - - int texCoordId = GLES20.glGetAttribLocation(mProgram.id(), "aTexCoord"); - GLES20.glEnableVertexAttribArray(texCoordId); - GLES20.glVertexAttribPointer(texCoordId, 2, GLES20.GL_FLOAT, false, 0, mTexCoordBuffer); - - if (isHorizontal) { - blurContext.getBlurFrameBuffer().bindSelf(); - } - - int textureUniformId = GLES20.glGetUniformLocation(mProgram.id(), "uTexture"); - GLES20.glActiveTexture(GLES20.GL_TEXTURE0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, isHorizontal ? blurContext.getInputTexture().id() : blurContext.getHorizontalTexture().id()); - GLES20.glUniform1i(textureUniformId, 0); - - int radiusId = GLES20.glGetUniformLocation(mProgram.id(), "uRadius"); - int widthOffsetId = GLES20.glGetUniformLocation(mProgram.id(), "uWidthOffset"); - int heightOffsetId = GLES20.glGetUniformLocation(mProgram.id(), "uHeightOffset"); - GLES20.glUniform1i(radiusId, mRadius); - GLES20.glUniform1f(widthOffsetId, isHorizontal ? 0 : 1f / blurContext.getBitmap().getWidth()); - GLES20.glUniform1f(heightOffsetId, isHorizontal ? 1f / blurContext.getBitmap().getHeight() : 0); - - GLES20.glDrawElements(GLES20.GL_TRIANGLES, drawOrder.length, GLES20.GL_UNSIGNED_SHORT, mDrawListBuffer); - - if (!isHorizontal) { - GLES20.glDisableVertexAttribArray(positionId); - GLES20.glDisableVertexAttribArray(texCoordId); - } - } finally { - resetAllBuffer(); - } - - } - - private void resetAllBuffer() { - GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0); - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); - GLES20.glUseProgram(0); - mVertexBuffer.rewind(); - mTexCoordBuffer.rewind(); - mDrawListBuffer.rewind(); - } - - private void onPostBlur(BlurContext blurContext) { - if (blurContext != null) { - blurContext.finish(); - } - } - - - private void deletePrograms() { - if (mProgram != null) { - mProgram.delete(); - } - } - - public void free() { - mNeedRelink = true; - deletePrograms(); - } - - void setBlurMode(@Mode int mode) { - mNeedRelink = true; - mMode = mode; - } - - void setBlurRadius(int radius) { - mRadius = radius; - } - - private static class BlurContext { - private ITexture inputTexture; - private ITexture horizontalTexture; - private IFrameBuffer blurFrameBuffer; - private Bitmap bitmap; - - private BlurContext(Bitmap bitmap) { - //todo Textures share problem is not solved. Here create a new texture directly, not get from the texture cache - //It doesn't affect performance seriously. - this.bitmap = bitmap; - inputTexture = TextureFactory.create(bitmap); - horizontalTexture = TextureFactory.create(bitmap.getWidth(), bitmap.getHeight()); - blurFrameBuffer = FrameBufferCache.getInstance().getFrameBuffer(); - if (blurFrameBuffer != null) { - blurFrameBuffer.bindTexture(horizontalTexture); - } else { - throw new IllegalStateException("Failed to create framebuffer."); - } - } - - private ITexture getInputTexture() { - return inputTexture; - } - - private ITexture getHorizontalTexture() { - return horizontalTexture; - } - - private IFrameBuffer getBlurFrameBuffer() { - return blurFrameBuffer; - } - - private Bitmap getBitmap() { - return bitmap; - } - - private void finish() { - if (inputTexture != null) { - inputTexture.delete(); - } - if (horizontalTexture != null) { - horizontalTexture.delete(); - } - FrameBufferCache.getInstance().recycleFrameBuffer(blurFrameBuffer); - } - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/program/Program.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/program/Program.java deleted file mode 100644 index f520563386..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/program/Program.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.hoko.blur.opengl.program; - -import android.opengl.GLES20; -import android.util.Log; - -import com.hoko.blur.api.IProgram; - -import static com.hoko.blur.util.ShaderUtil.checkGLError; - -public class Program implements IProgram { - - private static final String TAG = Program.class.getSimpleName(); - - private int id; - - Program(String vertexShaderCode, String fragmentShaderCode) { - create(vertexShaderCode, fragmentShaderCode); - } - - @Override - public void create(String vertexShaderCode, String fragmentShaderCode) { - - int vertexShader = 0; - int fragmentShader = 0; - try { - vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode); - fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode); - - if (vertexShader == 0 || fragmentShader == 0) { - return; - } - - id = GLES20.glCreateProgram(); - if (id != 0) { - GLES20.glAttachShader(id, vertexShader); - GLES20.glAttachShader(id, fragmentShader); - GLES20.glLinkProgram(id); - checkGLError("Attach Shader"); - final int[] linkStatus = new int[1]; - GLES20.glGetProgramiv(id, GLES20.GL_LINK_STATUS, linkStatus, 0); - if (linkStatus[0] != 1) { - Log.e(TAG, "Failed to link program"); - GLES20.glDeleteProgram(id); - id = 0; - } -// - } - } finally { - GLES20.glDetachShader(id, vertexShader); - GLES20.glDetachShader(id, fragmentShader); - GLES20.glDeleteShader(vertexShader); - GLES20.glDeleteShader(fragmentShader); - } - } - - @Override - public void delete() { - if (id != 0) { - GLES20.glUseProgram(0); - GLES20.glDeleteProgram(id); - } - } - - private int loadShader(int type, String shaderCode) { - int shader = GLES20.glCreateShader(type); - if (shader != 0) { - GLES20.glShaderSource(shader, shaderCode); - GLES20.glCompileShader(shader); - - final int[] compiled = new int[1]; - GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0); - if (compiled[0] == 0) { - Log.e(TAG, "Failed to compile the shader"); - GLES20.glDeleteShader(shader); - shader = 0; - } - } - return shader; - } - - @Override - public int id() { - return id; - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/program/ProgramFactory.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/program/ProgramFactory.java deleted file mode 100644 index cc25e67d09..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/program/ProgramFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.hoko.blur.opengl.program; - -import com.hoko.blur.api.IProgram; - -public class ProgramFactory { - - public static IProgram create(String vertexShaderCode, String fragmentShaderCode) { - return new Program(vertexShaderCode, fragmentShaderCode); - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/BitmapTexture.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/BitmapTexture.java deleted file mode 100644 index 44d51b481b..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/BitmapTexture.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.hoko.blur.opengl.texture; - -import android.graphics.Bitmap; -import android.opengl.GLES20; -import android.opengl.GLUtils; - - -import java.lang.ref.WeakReference; - -/** - * Created by yuxfzju on 2017/1/24. - */ - -public class BitmapTexture extends Texture { - - private WeakReference mBitmapWeakRef; - - BitmapTexture(Bitmap bitmap) { - super(bitmap.getWidth(), bitmap.getHeight()); - mBitmapWeakRef = new WeakReference<>(bitmap); - create(); - - } - - @Override - protected void onTextureCreated() { - if (width() != 0 && height() != 0 && mBitmapWeakRef != null) { - Bitmap bitmap = mBitmapWeakRef.get(); - - if (bitmap != null && !bitmap.isRecycled()) { - GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); - } - - } - - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/SimpleTexture.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/SimpleTexture.java deleted file mode 100644 index 357accf874..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/SimpleTexture.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.hoko.blur.opengl.texture; - -import android.opengl.GLES20; - -import com.hoko.blur.util.Preconditions; - -import java.nio.Buffer; - -/** - * Created by yuxfzju on 17/1/20. - */ - -class SimpleTexture extends Texture { - - SimpleTexture(int width, int height) { - super(width, height); - create(); - } - - @Override - protected void onTextureCreated() { - Preconditions.checkArgument(width() > 0 && height() > 0, "width > 0 and height > 0"); - GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, width(), height(), 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, (Buffer) null); - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/Texture.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/Texture.java deleted file mode 100644 index 8b1d7e13a3..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/Texture.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.hoko.blur.opengl.texture; - -import android.opengl.GLES20; - -import com.hoko.blur.api.ITexture; - -/** - * Created by yuxfzju on 17/1/20. - */ - -public abstract class Texture implements ITexture { - - private int mTextureId; - - private int mWidth; - - private int mHeight; - - public Texture(int width, int height) { - this.mWidth = width; - this.mHeight = height; - } - - @Override - public void create() { - - final int[] textureIds = new int[1]; - - GLES20.glGenTextures(1, textureIds, 0); - - mTextureId = textureIds[0]; - - if (mTextureId != 0) { - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureId); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); - GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST); - onTextureCreated(); - } - - GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); - } - - protected abstract void onTextureCreated(); - - @Override - public void delete() { - if (mTextureId != 0) { - GLES20.glDeleteTextures(1, new int[]{mTextureId}, 0); - } - } - - @Override - public int id() { - return mTextureId; - } - - @Override - public int width() { - return mWidth; - } - - @Override - public int height() { - return mHeight; - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/TextureFactory.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/TextureFactory.java deleted file mode 100644 index ffa66b2c4b..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/texture/TextureFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.hoko.blur.opengl.texture; - -import android.graphics.Bitmap; - -import com.hoko.blur.util.Preconditions; - -/** - * Created by yuxfzju on 17/1/20. - */ - -public class TextureFactory { - public static Texture create(int width, int height) { - Preconditions.checkArgument(width > 0 && height > 0, "width > 0 and height > 0"); - - return new SimpleTexture(width, height); - } - - public static Texture create(Bitmap bitmap) { - Preconditions.checkNotNull(bitmap, "bitmap == null"); - Preconditions.checkArgument(!bitmap.isRecycled(), "bitmap is recycled"); - return new BitmapTexture(bitmap); - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/opengl/util/Size.java b/hoko-blur/src/main/java/com/hoko/blur/opengl/util/Size.java deleted file mode 100644 index 807e79be23..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/opengl/util/Size.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.hoko.blur.opengl.util; - -/** - * Created by yuxfzju on 2017/1/22. - */ - -public final class Size { - - private int mWidth; - - private int mHeight; - - public Size(int width, int height) { - mWidth = width; - - mHeight = height; - } - - public Size(Size size) { - if (size == null) { - throw new IllegalArgumentException("size is null"); - } - - mWidth = size.width(); - - mHeight = size.height(); - } - - public int width() { - return mWidth; - } - - public void width(int mWidth) { - this.mWidth = mWidth; - } - - public int height() { - return mHeight; - } - - public void height(int mHeight) { - this.mHeight = mHeight; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - - if (obj == this) { - return true; - } - - if (obj instanceof Size) { - Size size = (Size) obj; - return width() == size.width() && height() == size.height(); - } - return false; - } - - @Override - public int hashCode() { - return mHeight ^ ((mWidth << (Integer.SIZE / 2)) | (mWidth >>> (Integer.SIZE / 2))); - } - - @Override - public String toString() { - return mWidth + "x" + mHeight; - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/processor/BlurProcessor.java b/hoko-blur/src/main/java/com/hoko/blur/processor/BlurProcessor.java deleted file mode 100644 index ef00fb2cf9..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/processor/BlurProcessor.java +++ /dev/null @@ -1,164 +0,0 @@ -package com.hoko.blur.processor; - -import android.graphics.Bitmap; -import android.view.View; - -import com.hoko.blur.anno.Mode; -import com.hoko.blur.anno.Scheme; -import com.hoko.blur.api.IBlurProcessor; -import com.hoko.blur.api.IBlurResultDispatcher; -import com.hoko.blur.task.AsyncBlurTask; -import com.hoko.blur.task.BitmapAsyncBlurTask; -import com.hoko.blur.task.BlurTaskManager; -import com.hoko.blur.task.ViewAsyncBlurTask; -import com.hoko.blur.util.BitmapUtil; -import com.hoko.blur.util.Preconditions; - -import java.util.concurrent.Future; - -/** - * Created by yuxfzju on 16/9/8. - */ -public abstract class BlurProcessor implements IBlurProcessor { - - int mRadius; - - @Mode - int mMode; - - @Scheme - private int mScheme; - - private float mSampleFactor; - - private boolean mIsForceCopy; - - private boolean mNeedUpscale; - - private int mTranslateX; - private int mTranslateY; - - private IBlurResultDispatcher mDispatcher; - - public BlurProcessor(HokoBlurBuild builder) { - mMode = builder.mMode; - mScheme = builder.mScheme; - mRadius = builder.mRadius; - mSampleFactor = builder.mSampleFactor; - mIsForceCopy = builder.mIsForceCopy; - mNeedUpscale = builder.mNeedUpscale; - mTranslateX = builder.mTranslateX; - mTranslateY = builder.mTranslateY; - mDispatcher = builder.mDispatcher; - } - - public void mode(@Mode int mode) { - mMode = mode; - } - - public void radius(int radius) { - mRadius = radius; - } - - public void sampleFactor(float factor) { - mSampleFactor = factor; - } - - @Mode - public int mode() { - return mMode; - } - - public int radius() { - return mRadius; - } - - public float sampleFactor() { - return mSampleFactor; - } - - @Scheme - public int scheme() { - return mScheme; - } - - public boolean forceCopy() { - return mIsForceCopy; - } - - public boolean needUpscale() { - return mNeedUpscale; - } - - - public int translateX() { - return mTranslateX; - } - - public int translateY() { - return mTranslateY; - } - - @Override - public Bitmap blur(Bitmap bitmap) { - return doBlur(bitmap, true); - } - - private Bitmap doBlur(Bitmap bitmap, boolean concurrent) { - Preconditions.checkNotNull(bitmap, "bitmap == null"); - Preconditions.checkArgument(!bitmap.isRecycled(), "You must input an unrecycled bitmap !"); - - if (mRadius <= 0) { - mRadius = 1; - } - - if (mSampleFactor < 1.0f) { - mSampleFactor = 1.0f; - } - - Bitmap inBitmap = null; - - if (mIsForceCopy) { - inBitmap = bitmap.copy(bitmap.getConfig(), true); - } else { - inBitmap = bitmap; - } - - Bitmap transInBitmap = BitmapUtil.transformBitmap(inBitmap, translateX(), translateY()); - - Bitmap scaledInBitmap = BitmapUtil.getScaledBitmap(transInBitmap, sampleFactor()); - - Bitmap scaledOutBitmap = doInnerBlur(scaledInBitmap, concurrent); - - return mNeedUpscale ? BitmapUtil.getScaledBitmap(scaledOutBitmap, 1f / sampleFactor()) : scaledOutBitmap; - } - - - protected abstract Bitmap doInnerBlur(Bitmap scaledBitmap, boolean concurrent); - - @Override - public Bitmap blur(View view) { - Preconditions.checkNotNull(view, "You must input a view !"); - - Bitmap viewBitmap = BitmapUtil.getViewBitmap(view, translateX(), translateY(), sampleFactor()); - - Bitmap scaledOutBitmap = doInnerBlur(viewBitmap, true); - - return mNeedUpscale ? BitmapUtil.getScaledBitmap(scaledOutBitmap, 1f / sampleFactor()) : scaledOutBitmap; - } - - @Override - public Future asyncBlur(Bitmap bitmap, AsyncBlurTask.Callback callback) { - return BlurTaskManager.getInstance().submit(new BitmapAsyncBlurTask(this, bitmap, callback, mDispatcher)); - } - - @Override - public Future asyncBlur(View view, AsyncBlurTask.Callback callback) { - return BlurTaskManager.getInstance().submit(new ViewAsyncBlurTask(this, view, callback, mDispatcher)); - } - - protected void free() { - - } - -} \ No newline at end of file diff --git a/hoko-blur/src/main/java/com/hoko/blur/processor/BlurProcessorFactory.java b/hoko-blur/src/main/java/com/hoko/blur/processor/BlurProcessorFactory.java deleted file mode 100644 index d3e10e6ade..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/processor/BlurProcessorFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.hoko.blur.processor; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.anno.Scheme; - -class BlurProcessorFactory { - - static BlurProcessor getBlurProcessor(@Scheme int scheme, HokoBlurBuild builder) { - - BlurProcessor blurProcessor = null; - - switch (scheme) { - case HokoBlur.SCHEME_RENDER_SCRIPT: - blurProcessor = new RenderScriptBlurProcessor(builder); - break; - case HokoBlur.SCHEME_OPENGL: - blurProcessor = new OpenGLBlurProcessor(builder); - break; - case HokoBlur.SCHEME_NATIVE: - blurProcessor = new NativeBlurProcessor(builder); - break; - case HokoBlur.SCHEME_JAVA: - blurProcessor = new OriginBlurProcessor(builder); - break; - default: - throw new IllegalArgumentException("Unsupported blur scheme!"); - } - - return blurProcessor; - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/processor/HokoBlurBuild.java b/hoko-blur/src/main/java/com/hoko/blur/processor/HokoBlurBuild.java deleted file mode 100644 index 93abcb13c0..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/processor/HokoBlurBuild.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.hoko.blur.processor; - -import android.content.Context; -import android.graphics.Bitmap; -import android.view.View; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.anno.Mode; -import com.hoko.blur.anno.Scheme; -import com.hoko.blur.api.IBlurBuild; -import com.hoko.blur.api.IBlurResultDispatcher; -import com.hoko.blur.task.AsyncBlurTask; - -import java.util.concurrent.Future; - -import static com.hoko.blur.task.AndroidBlurResultDispatcher.MAIN_THREAD_DISPATCHER; - -public class HokoBlurBuild implements IBlurBuild { - - @Mode - int mMode = HokoBlur.MODE_STACK; - @Scheme - int mScheme = HokoBlur.SCHEME_NATIVE; - int mRadius = 5; - float mSampleFactor = 5.0f; - boolean mIsForceCopy = false; - boolean mNeedUpscale = true; - - int mTranslateX = 0; - int mTranslateY = 0; - - IBlurResultDispatcher mDispatcher = MAIN_THREAD_DISPATCHER; - - Context mCtx; - - public HokoBlurBuild(Context context) { - this.mCtx = context; - } - - - @Override - public IBlurBuild context(Context context) { - this.mCtx = context; - return this; - } - - @Override - public IBlurBuild mode(int mode) { - this.mMode = mode; - return this; - } - - @Override - public IBlurBuild scheme(int scheme) { - this.mScheme = scheme; - return this; - } - - @Override - public IBlurBuild radius(int radius) { - this.mRadius = radius; - return this; - } - - @Override - public IBlurBuild sampleFactor(float sampleFactor) { - this.mSampleFactor = sampleFactor; - return this; - } - - @Override - public IBlurBuild forceCopy(boolean isForceCopy) { - this.mIsForceCopy = isForceCopy; - return this; - } - - @Override - public IBlurBuild needUpscale(boolean needUpscale) { - this.mNeedUpscale = needUpscale; - return this; - } - - @Override - public IBlurBuild translateX(int translateX) { - this.mTranslateX = translateX; - return this; - } - - @Override - public IBlurBuild translateY(int translateY) { - this.mTranslateY = translateY; - return this; - } - - @Override - public IBlurBuild dispatcher(IBlurResultDispatcher dispatcher) { - mDispatcher = dispatcher; - return this; - } - - @Override - public BlurProcessor processor() { - return BlurProcessorFactory.getBlurProcessor(mScheme, this); - } - - @Override - public Bitmap blur(Bitmap bitmap) { - BlurProcessor processor = processor(); - return processor.blur(bitmap); - } - - @Override - public Bitmap blur(View view) { - BlurProcessor processor = processor(); - return processor.blur(view); - } - - @Override - public Future asyncBlur(Bitmap bitmap, AsyncBlurTask.Callback callback) { - BlurProcessor processor = processor(); - return processor.asyncBlur(bitmap, callback); - } - - @Override - public Future asyncBlur(View view, AsyncBlurTask.Callback callback) { - BlurProcessor processor = processor(); - return processor.asyncBlur(view, callback); - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/processor/NativeBlurProcessor.java b/hoko-blur/src/main/java/com/hoko/blur/processor/NativeBlurProcessor.java deleted file mode 100644 index 0d493f0747..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/processor/NativeBlurProcessor.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.hoko.blur.processor; - -import android.graphics.Bitmap; -import android.util.Log; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.filter.NativeBlurFilter; -import com.hoko.blur.task.BlurSubTask; -import com.hoko.blur.task.BlurTaskManager; -import com.hoko.blur.util.Preconditions; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by yuxfzju on 16/9/7. - */ -class NativeBlurProcessor extends BlurProcessor { - private static final String TAG = NativeBlurProcessor.class.getSimpleName(); - private static boolean LIB_LOADED; - - NativeBlurProcessor(HokoBlurBuild builder) { - super(builder); - } - - @Override - protected Bitmap doInnerBlur(Bitmap scaledInBitmap, boolean concurrent) { - Preconditions.checkNotNull(scaledInBitmap, "scaledInBitmap == null"); - - if (!LIB_LOADED) { - Log.e(TAG, "Native blur library is not loaded"); - return scaledInBitmap; - } - - try { - if (concurrent) { - int cores = BlurTaskManager.getWorkersNum(); - List hTasks = new ArrayList<>(cores); - List vTasks = new ArrayList<>(cores); - - for (int i = 0; i < cores; i++) { - hTasks.add(new BlurSubTask(HokoBlur.SCHEME_NATIVE, mMode, scaledInBitmap, mRadius, cores, i, HokoBlur.HORIZONTAL)); - vTasks.add(new BlurSubTask(HokoBlur.SCHEME_NATIVE, mMode, scaledInBitmap, mRadius, cores, i, HokoBlur.VERTICAL)); - } - - BlurTaskManager.getInstance().invokeAll(hTasks); - BlurTaskManager.getInstance().invokeAll(vTasks); - } else { - NativeBlurFilter.doFullBlur(mMode, scaledInBitmap, mRadius); - } - } catch (Throwable e) { - Log.e(TAG, "Blur the bitmap error", e); - } - - return scaledInBitmap; - } - - - static { - try { - System.loadLibrary("hoko_blur"); - LIB_LOADED = true; - } catch (Throwable t) { - LIB_LOADED = false; - Log.e(TAG, "Failed to load the hoko blur native library", t); - } - } - - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/processor/OpenGLBlurProcessor.java b/hoko-blur/src/main/java/com/hoko/blur/processor/OpenGLBlurProcessor.java deleted file mode 100644 index 9b6d612b74..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/processor/OpenGLBlurProcessor.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.hoko.blur.processor; - -import android.graphics.Bitmap; - -import com.hoko.blur.opengl.offscreen.EglBuffer; -import com.hoko.blur.util.Preconditions; - - -/** - * Created by yuxfzju on 16/9/7. - */ -class OpenGLBlurProcessor extends BlurProcessor { - private static final String TAG = OpenGLBlurProcessor.class.getSimpleName(); - - private final EglBuffer mEglBuffer; - - OpenGLBlurProcessor(HokoBlurBuild builder) { - super(builder); - mEglBuffer = new EglBuffer(); - - } - - @Override - protected Bitmap doInnerBlur(Bitmap scaledInBitmap, boolean concurrent) { - Preconditions.checkNotNull(scaledInBitmap, "scaledInBitmap == null"); - Preconditions.checkArgument(!scaledInBitmap.isRecycled(), "You must input an unrecycled bitmap !"); - - // TODO: 2017/2/20 opengl process parallel - mEglBuffer.setBlurRadius(mRadius); - mEglBuffer.setBlurMode(mMode); - return mEglBuffer.getBlurBitmap(scaledInBitmap); - } - - @Override - protected void free() { - mEglBuffer.free(); - } - - @Override - protected void finalize() throws Throwable { - free(); - super.finalize(); - } -} \ No newline at end of file diff --git a/hoko-blur/src/main/java/com/hoko/blur/processor/OriginBlurProcessor.java b/hoko-blur/src/main/java/com/hoko/blur/processor/OriginBlurProcessor.java deleted file mode 100644 index 1beb67cac6..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/processor/OriginBlurProcessor.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.hoko.blur.processor; - -import android.graphics.Bitmap; -import android.util.Log; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.filter.OriginBlurFilter; -import com.hoko.blur.task.BlurSubTask; -import com.hoko.blur.task.BlurTaskManager; -import com.hoko.blur.util.Preconditions; - -import java.util.ArrayList; -import java.util.List; - -/** - * Created by yuxfzju on 16/9/7. - */ -class OriginBlurProcessor extends BlurProcessor { - private static final String TAG = OriginBlurProcessor.class.getSimpleName(); - - OriginBlurProcessor(HokoBlurBuild builder) { - super(builder); - } - - @Override - protected Bitmap doInnerBlur(Bitmap scaledInBitmap, boolean concurrent) { - Preconditions.checkNotNull(scaledInBitmap, "scaledInBitmap == null"); - try { - if (concurrent) { - int cores = BlurTaskManager.getWorkersNum(); - List hTasks = new ArrayList<>(cores); - List vTasks = new ArrayList<>(cores); - - for (int i = 0; i < cores; i++) { - hTasks.add(new BlurSubTask(HokoBlur.SCHEME_JAVA, mMode, scaledInBitmap, mRadius, cores, i, HokoBlur.HORIZONTAL)); - vTasks.add(new BlurSubTask(HokoBlur.SCHEME_JAVA, mMode, scaledInBitmap, mRadius, cores, i, HokoBlur.VERTICAL)); - } - - BlurTaskManager.getInstance().invokeAll(hTasks); - BlurTaskManager.getInstance().invokeAll(vTasks); - } else { - OriginBlurFilter.doFullBlur(mMode, scaledInBitmap, mRadius); - } - } catch (Throwable e) { - Log.e(TAG, "Blur the bitmap error", e); - } - return scaledInBitmap; - } - -} - diff --git a/hoko-blur/src/main/java/com/hoko/blur/processor/RenderScriptBlurProcessor.java b/hoko-blur/src/main/java/com/hoko/blur/processor/RenderScriptBlurProcessor.java deleted file mode 100644 index efe183aa3a..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/processor/RenderScriptBlurProcessor.java +++ /dev/null @@ -1,151 +0,0 @@ -package com.hoko.blur.processor; - -import android.content.Context; -import android.graphics.Bitmap; -import android.support.v8.renderscript.Allocation; -import android.support.v8.renderscript.Element; -import android.support.v8.renderscript.RSRuntimeException; -import android.support.v8.renderscript.RenderScript; -import android.support.v8.renderscript.ScriptIntrinsicBlur; -import android.util.Log; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.renderscript.ScriptC_BoxBlur; -import com.hoko.blur.renderscript.ScriptC_StackBlur; -import com.hoko.blur.util.MathUtil; -import com.hoko.blur.util.Preconditions; - -/** - * Created by yuxfzju on 16/9/7. - */ -class RenderScriptBlurProcessor extends BlurProcessor { - private static final String TAG = RenderScriptBlurProcessor.class.getSimpleName(); - - private RenderScript mRenderScript; - private ScriptIntrinsicBlur mGaussianBlurScript; - private ScriptC_BoxBlur mBoxBlurScript; - private ScriptC_StackBlur mStackBlurScript; - - private static final int RS_MAX_RADIUS = 25; - - private volatile boolean rsRuntimeInited = false; - - RenderScriptBlurProcessor(HokoBlurBuild builder) { - super(builder); - init(builder.mCtx); - } - - private void init(Context context) { - Preconditions.checkNotNull(context, "Please set context for renderscript scheme, forget to set context for builder?"); - - try { - mRenderScript = RenderScript.create(context.getApplicationContext()); - mGaussianBlurScript = ScriptIntrinsicBlur.create(mRenderScript, Element.U8_4(mRenderScript)); - mBoxBlurScript = new ScriptC_BoxBlur(mRenderScript); - mStackBlurScript = new ScriptC_StackBlur(mRenderScript); - rsRuntimeInited = true; - } catch (RSRuntimeException e) { - Log.e(TAG, "Failed to init RenderScript runtime", e); - rsRuntimeInited = false; - } - - } - - - /** - * RenderScript built-in parallel implementation - * - * @param bitmap - * @param concurrent - * @return - */ - @Override - protected Bitmap doInnerBlur(Bitmap bitmap, boolean concurrent) { - Preconditions.checkNotNull(bitmap, "scaledInBitmap == null"); - - if (!rsRuntimeInited) { - Log.e(TAG, "RenderScript Runtime is not initialized"); - return bitmap; - } - - - Allocation allocationIn = Allocation.createFromBitmap(mRenderScript, bitmap); - Allocation allocationOut = Allocation.createFromBitmap(mRenderScript, Bitmap.createBitmap(bitmap)); - try { - switch (mMode) { - case HokoBlur.MODE_BOX: - doBoxBlur(bitmap, allocationIn, allocationOut); - allocationIn.copyTo(bitmap); - - break; - case HokoBlur.MODE_STACK: - doStackBlur(bitmap, allocationIn, allocationOut); - allocationIn.copyTo(bitmap); - - break; - case HokoBlur.MODE_GAUSSIAN: - doGaussianBlur(allocationIn, allocationOut); - allocationOut.copyTo(bitmap); - - break; - } - - } catch (Throwable e) { - Log.e(TAG, "Blur the bitmap error", e); - } finally { - allocationIn.destroy(); - allocationOut.destroy(); - } - - return bitmap; - } - - - private void doBoxBlur(Bitmap input, Allocation in, Allocation out) { - if (mBoxBlurScript == null) { - throw new IllegalStateException("The blur script is unavailable"); - } - - mBoxBlurScript.set_input(in); - mBoxBlurScript.set_output(out); - mBoxBlurScript.set_width(input.getWidth()); - mBoxBlurScript.set_height(input.getHeight()); - mBoxBlurScript.set_radius(mRadius); - mBoxBlurScript.forEach_boxblur_h(in); - - mBoxBlurScript.set_input(out); - mBoxBlurScript.set_output(in); - mBoxBlurScript.forEach_boxblur_v(out); - - } - - private void doGaussianBlur(Allocation in, Allocation out) { - if (mGaussianBlurScript == null) { - throw new IllegalStateException("The blur script is unavailable"); - } - // RenderScript won't work, if too large blur radius - mRadius = MathUtil.clamp(mRadius, 0, RS_MAX_RADIUS); - mGaussianBlurScript.setRadius(mRadius); -// mAllocationIn.copyFrom(input); - mGaussianBlurScript.setInput(in); - mGaussianBlurScript.forEach(out); - } - - private void doStackBlur(Bitmap input, Allocation in, Allocation out) { - if (mStackBlurScript == null) { - throw new IllegalStateException("The blur script is unavailable"); - } - - mStackBlurScript.set_input(in); - mStackBlurScript.set_output(out); - mStackBlurScript.set_width(input.getWidth()); - mStackBlurScript.set_height(input.getHeight()); - mStackBlurScript.set_radius(mRadius); - mStackBlurScript.forEach_stackblur_v(in); - - mStackBlurScript.set_input(out); - mStackBlurScript.set_output(in); - mStackBlurScript.forEach_stackblur_h(out); - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/task/AndroidBlurResultDispatcher.java b/hoko-blur/src/main/java/com/hoko/blur/task/AndroidBlurResultDispatcher.java deleted file mode 100644 index cc2c9dcbb3..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/task/AndroidBlurResultDispatcher.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.hoko.blur.task; - -import com.hoko.blur.api.IBlurResultDispatcher; -import com.hoko.blur.util.SingleMainHandler; - -import java.util.concurrent.Executor; - -/** - * Created by yuxfzju on 2017/2/7. - */ - -public class AndroidBlurResultDispatcher implements IBlurResultDispatcher { - - public static final IBlurResultDispatcher MAIN_THREAD_DISPATCHER = new AndroidBlurResultDispatcher(SingleMainHandler.get()); - - private Executor mResultPoster; - - public AndroidBlurResultDispatcher(final android.os.Handler handler) { - mResultPoster = command -> { - if (handler != null) { - handler.post(command); - } - }; - } - - @Override - public void dispatch(BlurResultRunnable runnable) { - mResultPoster.execute(runnable); - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/task/AsyncBlurTask.java b/hoko-blur/src/main/java/com/hoko/blur/task/AsyncBlurTask.java deleted file mode 100644 index 659846c5bc..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/task/AsyncBlurTask.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.hoko.blur.task; - -import android.graphics.Bitmap; - -import com.hoko.blur.api.IBlurProcessor; -import com.hoko.blur.api.IBlurResultDispatcher; -import com.hoko.blur.util.Preconditions; - -/** - * a wrapper class for async blur task - * Created by yuxfzju on 2017/2/6. - */ - -public abstract class AsyncBlurTask implements Runnable { - private Callback mCallback; - - IBlurProcessor mProcessor; - - private T mTarget; - - private IBlurResultDispatcher mResultDispatcher; - - public AsyncBlurTask(IBlurProcessor processor, T target, Callback callback, IBlurResultDispatcher dispatcher) { - mProcessor = processor; - mTarget = target; - mCallback = callback; - mResultDispatcher = dispatcher; - } - - @Override - public void run() { - BlurResult result = new BlurResult(mCallback); - try { - if (mProcessor == null) { - result.setSuccess(false); - return; - } - - result.setBitmap(makeBlur(mTarget)); - result.setSuccess(true); - } catch (Throwable e) { - e.printStackTrace(); - result.setSuccess(false); - result.setError(e); - } finally { - Preconditions.checkNotNull(mResultDispatcher, "dispatcher == null"); - mResultDispatcher.dispatch(BlurResultRunnable.of(result)); - } - - } - - protected abstract Bitmap makeBlur(T target); - - public interface Callback { - void onBlurSuccess(Bitmap bitmap); - - void onBlurFailed(Throwable error); - } -} \ No newline at end of file diff --git a/hoko-blur/src/main/java/com/hoko/blur/task/BitmapAsyncBlurTask.java b/hoko-blur/src/main/java/com/hoko/blur/task/BitmapAsyncBlurTask.java deleted file mode 100644 index 1e633aeae2..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/task/BitmapAsyncBlurTask.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hoko.blur.task; - -import android.graphics.Bitmap; - -import com.hoko.blur.api.IBlurProcessor; -import com.hoko.blur.api.IBlurResultDispatcher; - -public class BitmapAsyncBlurTask extends AsyncBlurTask { - public BitmapAsyncBlurTask(IBlurProcessor processor, Bitmap bitmap, Callback callback, IBlurResultDispatcher dispatcher) { - super(processor, bitmap, callback, dispatcher); - } - - @Override - protected Bitmap makeBlur(Bitmap target) { - return mProcessor.blur(target); - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/task/BlurResult.java b/hoko-blur/src/main/java/com/hoko/blur/task/BlurResult.java deleted file mode 100644 index 98b7547413..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/task/BlurResult.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.hoko.blur.task; - -import android.graphics.Bitmap; - -/** - * Created by yuxfzju on 2017/2/7. - */ - -public class BlurResult { - private boolean success; - - private Bitmap bitmap; - - private AsyncBlurTask.Callback callback; - - private Throwable e; - - public BlurResult(AsyncBlurTask.Callback callback) { - this.callback = callback; - } - - public boolean isSuccess() { - return success; - } - - public void setSuccess(boolean success) { - this.success = success; - } - - public Bitmap getBitmap() { - return bitmap; - } - - public void setBitmap(Bitmap bitmap) { - this.bitmap = bitmap; - } - - public AsyncBlurTask.Callback getCallback() { - return callback; - } - - public Throwable getError() { - return e; - } - - public void setError(Throwable e) { - this.e = e; - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/task/BlurResultRunnable.java b/hoko-blur/src/main/java/com/hoko/blur/task/BlurResultRunnable.java deleted file mode 100644 index 1e888fa7db..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/task/BlurResultRunnable.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.hoko.blur.task; - -/** - * Created by yuxfzju on 2017/2/7. - */ - -public class BlurResultRunnable implements Runnable { - - private BlurResult mResult; - - private BlurResultRunnable(BlurResult result) { - mResult = result; - } - - public static BlurResultRunnable of(BlurResult result) { - return new BlurResultRunnable(result); - } - - @Override - public void run() { - if (mResult != null) { - if (mResult.isSuccess()) { - if (mResult.getCallback() != null) { - mResult.getCallback().onBlurSuccess(mResult.getBitmap()); - } - } else { - if (mResult.getCallback() != null) { - mResult.getCallback().onBlurFailed(mResult.getError()); - } - } - } - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/task/BlurSubTask.java b/hoko-blur/src/main/java/com/hoko/blur/task/BlurSubTask.java deleted file mode 100644 index 8be0f8cf5f..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/task/BlurSubTask.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.hoko.blur.task; - -import android.graphics.Bitmap; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.anno.Direction; -import com.hoko.blur.anno.Mode; -import com.hoko.blur.anno.Scheme; -import com.hoko.blur.filter.NativeBlurFilter; -import com.hoko.blur.filter.OriginBlurFilter; -import com.hoko.blur.util.Preconditions; - -import java.util.concurrent.Callable; - -/** - * Every bitmap blur sub task only process a partition of bitmap. - * Just blur a bitmap in parallel - *

- * Created by yuxfzju on 2017/2/17. - */ - -public class BlurSubTask implements Callable { - - @Scheme - private final int mScheme; - @Mode - private final int mMode; - private final Bitmap mBitmapOut; - private final int mRadius; - private final int mIndex; - private final int mCores; - - @Direction - private final int mDirection; - - public BlurSubTask(@Scheme int scheme, @Mode int mode, Bitmap bitmapOut, int radius, int cores, int index, @Direction int direction) { - mScheme = scheme; - mMode = mode; - mBitmapOut = bitmapOut; - mRadius = radius; - mIndex = index; - mCores = cores; - mDirection = direction; - } - - @Override - public Void call() { - Preconditions.checkNotNull(mBitmapOut, "mBitmapOut == null"); - Preconditions.checkArgument(!mBitmapOut.isRecycled(), "You must input an unrecycled bitmap !"); - Preconditions.checkArgument(mCores > 0, "mCores < 0"); - - applyPixelsBlur(); - - return null; - } - - private void applyPixelsBlur() { - switch (mScheme) { - case HokoBlur.SCHEME_NATIVE: - NativeBlurFilter.doBlur(mMode, mBitmapOut, mRadius, mCores, mIndex, mDirection); - break; - case HokoBlur.SCHEME_JAVA: - OriginBlurFilter.doBlur(mMode, mBitmapOut, mRadius, mCores, mIndex, mDirection); - break; - case HokoBlur.SCHEME_OPENGL: - throw new UnsupportedOperationException("Blur in parallel not supported !"); - case HokoBlur.SCHEME_RENDER_SCRIPT: - //RenderScript support built-in parallel computation - break; - default: - break; - } - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/task/BlurTaskManager.java b/hoko-blur/src/main/java/com/hoko/blur/task/BlurTaskManager.java deleted file mode 100644 index 1b1ce9e972..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/task/BlurTaskManager.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.hoko.blur.task; - -import android.util.Log; - -import com.hoko.blur.util.Preconditions; - -import java.util.Collection; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; - -/** - * Created by yuxfzju on 2017/2/7. - */ - -public final class BlurTaskManager { - private static final String TAG = BlurTaskManager.class.getSimpleName(); - - //Threads count is a half of cpu cores - private static final int EXECUTOR_THREADS = Runtime.getRuntime().availableProcessors() <= 3 ? - 1 : Runtime.getRuntime().availableProcessors() / 2; - - private static final ExecutorService ASYNC_BLUR_EXECUTOR = Executors.newFixedThreadPool(EXECUTOR_THREADS); - - private static final ExecutorService CONCURRENT_BLUR_EXECUTOR = Executors.newFixedThreadPool(EXECUTOR_THREADS); - - private static class BlurTaskManagerHolder { - private static final BlurTaskManager INSTANCE = new BlurTaskManager(); - } - - private BlurTaskManager() { - } - - public static BlurTaskManager getInstance() { - return BlurTaskManagerHolder.INSTANCE; - } - - public Future submit(AsyncBlurTask task) { - Preconditions.checkNotNull(task, "task == null"); - return ASYNC_BLUR_EXECUTOR.submit(task); - } - - public void invokeAll(Collection tasks) { - Preconditions.checkNotNull(tasks, "tasks == null"); - if (tasks.size() > 0) { - try { - CONCURRENT_BLUR_EXECUTOR.invokeAll(tasks); - } catch (InterruptedException e) { - Log.e(TAG, "invoke blur sub tasks error", e); - } - } - } - - public static int getWorkersNum() { - return EXECUTOR_THREADS; - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/task/ViewAsyncBlurTask.java b/hoko-blur/src/main/java/com/hoko/blur/task/ViewAsyncBlurTask.java deleted file mode 100644 index 701143824e..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/task/ViewAsyncBlurTask.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.hoko.blur.task; - -import android.graphics.Bitmap; -import android.view.View; - -import com.hoko.blur.api.IBlurProcessor; -import com.hoko.blur.api.IBlurResultDispatcher; - -public class ViewAsyncBlurTask extends AsyncBlurTask { - public ViewAsyncBlurTask(IBlurProcessor processor, View target, Callback callback, IBlurResultDispatcher dispatcher) { - super(processor, target, callback, dispatcher); - } - - @Override - protected Bitmap makeBlur(View target) { - return mProcessor.blur(target); - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/util/BitmapUtil.java b/hoko-blur/src/main/java/com/hoko/blur/util/BitmapUtil.java deleted file mode 100644 index fd4c5fea32..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/util/BitmapUtil.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.hoko.blur.util; - -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Matrix; -import android.graphics.drawable.ColorDrawable; -import android.view.View; - -/** - * Created by yuxfzju on 16/9/12. - */ -public class BitmapUtil { - public static Bitmap getScaledBitmap(Bitmap bitmap, float factor) { - if (bitmap == null) { - return null; - } - - if (factor == 1.0f) { - return bitmap; - } - - final int width = bitmap.getWidth(); - final int height = bitmap.getHeight(); - - final float ratio = 1f / factor; - - Matrix matrix = new Matrix(); - matrix.postScale(ratio, ratio); - return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); - } - - /** - * get bitmap from a view - */ - public static Bitmap getViewBitmap(View view, int translateX, int translateY, float sampleFactor) { - final float scale = 1.0f / sampleFactor; - - final int width = view.getWidth(); - final int height = view.getHeight(); - - final int downScaledWidth = (int) ((width - translateX) * scale); - final int downScaledHeight = (int) ((height - translateY) * scale); - - Bitmap bitmap = Bitmap.createBitmap(downScaledWidth, downScaledHeight, Bitmap.Config.ARGB_8888); - - if (view.getBackground() != null && view.getBackground() instanceof ColorDrawable) { - bitmap.eraseColor(((ColorDrawable) view.getBackground()).getColor()); - } else { - bitmap.eraseColor(Color.parseColor("#f6f6f6")); - } - - Canvas canvas = new Canvas(bitmap); - canvas.translate( - -(int) (translateX * scale), -(int) (translateY * scale) - ); - if (sampleFactor > 1.0f) { - canvas.scale(scale, scale); - } - - view.draw(canvas); - - return bitmap; - } - - public static Bitmap transformBitmap(Bitmap bitmap, int translateX, int translateY) { - - if (translateX == 0 && translateY == 0) { - return bitmap; - } - - return Bitmap.createBitmap(bitmap, translateX, translateY, bitmap.getWidth() - translateX, bitmap.getHeight() - translateY); - } - - - public static synchronized native void replaceBitmap(Bitmap bitmap, int[] pixels, int x, int y, int deltaX, int deltaY); - - static { - System.loadLibrary("hoko_blur"); - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/util/MathUtil.java b/hoko-blur/src/main/java/com/hoko/blur/util/MathUtil.java deleted file mode 100644 index 4bb85eaf03..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/util/MathUtil.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.hoko.blur.util; - -/** - * Created by yuxfzju on 2017/2/3. - */ - -public class MathUtil { - public static int clamp(int i, int minValue, int maxValue) { - if (i < minValue) { - return minValue; - } else if (i > maxValue) { - return maxValue; - } else { - return i; - } - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/util/Preconditions.java b/hoko-blur/src/main/java/com/hoko/blur/util/Preconditions.java deleted file mode 100644 index 7ff0ee2de3..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/util/Preconditions.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.hoko.blur.util; - -import android.support.annotation.Nullable; - -public class Preconditions { - /** - * Ensures that an object reference passed as a parameter to the calling method is not null. - * - * @param reference an object reference - * @param errorMessage the exception message to use if the check fails; will be converted to a - * string using {@link String#valueOf(Object)} - * @return the non-null reference that was validated - * @throws NullPointerException if {@code reference} is null - */ - public static T checkNotNull(T reference, @Nullable Object errorMessage) { - if (reference == null) { - throw new NullPointerException(String.valueOf(errorMessage)); - } - return reference; - } - - /** - * Ensures the truth of an expression involving one or more parameters to the calling method. - * - * @param expression a boolean expression - * @param errorMessage the exception message to use if the check fails; will be converted to a - * string using {@link String#valueOf(Object)} - * @throws IllegalArgumentException if {@code expression} is false - */ - public static void checkArgument(boolean expression, @Nullable Object errorMessage) { - if (!expression) { - throw new IllegalArgumentException(String.valueOf(errorMessage)); - } - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/util/ShaderUtil.java b/hoko-blur/src/main/java/com/hoko/blur/util/ShaderUtil.java deleted file mode 100644 index d349fb9402..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/util/ShaderUtil.java +++ /dev/null @@ -1,165 +0,0 @@ -package com.hoko.blur.util; - -import android.opengl.GLES20; -import android.util.Log; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.anno.Mode; - -/** - * Created by yuxfzju on 16/9/4. - */ -public class ShaderUtil { - - private static final String TAG = ShaderUtil.class.getSimpleName(); - - public static String getVertexCode() { - StringBuilder sb = new StringBuilder(); - - sb.append("uniform mat4 uMVPMatrix; \n") - .append("uniform mat4 uTexMatrix; \n") - .append("attribute vec2 aTexCoord; \n") - .append("attribute vec3 aPosition; \n") - .append("varying vec2 vTexCoord; \n") - .append("void main() { \n") - .append(" gl_Position = uMVPMatrix * vec4(aPosition, 1); \n") - .append(" vTexCoord = (uTexMatrix * vec4(aTexCoord, 1, 1)).st;\n") - .append("} \n"); - - return sb.toString(); - - } - - /** - * return true if no GL Error - */ - public static boolean checkGLError(String msg) { - int error = GLES20.glGetError(); - if (error != 0) { - Log.e(TAG, "checkGLError: error=" + error + ", msg=" + msg); - } - - return error == 0; - } - - public static String getFragmentShaderCode(@Mode int mode) { - - StringBuilder sb = new StringBuilder(); - sb.append(" \n") - .append("precision mediump float; \n") - .append("varying vec2 vTexCoord; \n") - .append("uniform sampler2D uTexture; \n") - .append("uniform int uRadius; \n") - .append("uniform float uWidthOffset; \n") - .append("uniform float uHeightOffset; \n") - .append("mediump float getGaussWeight(mediump float currentPos, mediump float sigma) \n") - .append("{ \n") - .append(" return 1.0 / sigma * exp(-(currentPos * currentPos) / (2.0 * sigma * sigma)); \n") - .append("} \n") - .append("void main() { \n"); - - if (mode == HokoBlur.MODE_BOX) { - sb.append(ShaderUtil.getBoxSampleCode()); - } else if (mode == HokoBlur.MODE_GAUSSIAN) { - sb.append(ShaderUtil.getGaussianSampleCode()); - } else if (mode == HokoBlur.MODE_STACK) { - sb.append(ShaderUtil.getStackSampleCode()); - } - sb.append("} \n"); - - return sb.toString(); - } - - - /** - * If set kernel weight array in advance, the GPU registers have no enough space. - * So compute the weight in the code directly. - */ - private static String getGaussianSampleCode() { - - StringBuilder sb = new StringBuilder(); - - sb.append(" int diameter = 2 * uRadius + 1; \n") - .append(" vec4 sampleTex = vec4(0, 0, 0, 0);\n") - .append(" vec3 col = vec3(0, 0, 0); \n") - .append(" float weightSum = 0.0; \n") - .append(" for(int i = 0; i < diameter; i++) {\n") - .append(" vec2 offset = vec2(float(i - uRadius) * uWidthOffset, float(i - uRadius) * uHeightOffset); \n") - .append(" sampleTex = vec4(texture2D(uTexture, vTexCoord.st+offset));\n") - .append(" float index = float(i); \n") - .append(" float gaussWeight = getGaussWeight(index - float(diameter - 1)/2.0,") - .append(" (float(diameter - 1)/2.0 + 1.0) / 2.0); \n") - .append(" col += sampleTex.rgb * gaussWeight; \n") - .append(" weightSum += gaussWeight;\n") - .append(" } \n") - .append(" gl_FragColor = vec4(col / weightSum, sampleTex.a); \n"); - - return sb.toString(); - } - - /** - * If set kernel weight array in advance, the GPU registers have no enough space. - * So compute the weight in the code directly. - */ - private static String getBoxSampleCode() { - StringBuilder sb = new StringBuilder(); - - sb.append(" int diameter = 2 * uRadius + 1; \n") - .append(" vec4 sampleTex = vec4(0, 0, 0, 0);\n") - .append(" vec3 col = vec3(0, 0, 0); \n") - .append(" float weightSum = 0.0; \n") - .append(" for(int i = 0; i < diameter; i++) {\n") - .append(" vec2 offset = vec2(float(i - uRadius) * uWidthOffset, float(i - uRadius) * uHeightOffset); \n") - .append(" sampleTex = vec4(texture2D(uTexture, vTexCoord.st+offset));\n") - .append(" float index = float(i); \n") - .append(" float boxWeight = float(1.0) / float(diameter); \n") - .append(" col += sampleTex.rgb * boxWeight; \n") - .append(" weightSum += boxWeight;\n") - .append(" } \n") - .append(" gl_FragColor = vec4(col / weightSum, sampleTex.a); \n"); - return sb.toString(); - } - - /** - * If set kernel weight array in advance, the GPU registers have no enough space. - * So compute the weight in the code directly. - */ - private static String getStackSampleCode() { - StringBuilder sb = new StringBuilder(); - - sb.append("int diameter = 2 * uRadius + 1; \n") - .append(" vec4 sampleTex = vec4(0, 0, 0, 0);\n") - .append(" vec3 col = vec3(0, 0, 0); \n") - .append(" float weightSum = 0.0; \n") - .append(" for(int i = 0; i < diameter; i++) {\n") - .append(" vec2 offset = vec2(float(i - uRadius) * uWidthOffset, float(i - uRadius) * uHeightOffset); \n") - .append(" sampleTex = vec4(texture2D(uTexture, vTexCoord.st+offset));\n") - .append(" float index = float(i); \n") - .append(" float boxWeight = float(uRadius) + 1.0 - abs(index - float(uRadius)); \n") - .append(" col += sampleTex.rgb * boxWeight; \n") - .append(" weightSum += boxWeight;\n") - .append(" } \n") - .append(" gl_FragColor = vec4(col / weightSum, sampleTex.a); \n"); - - return sb.toString(); - } - - /** - * copy the texture - */ - public static String getCopyFragmentCode() { - StringBuilder sb = new StringBuilder(); - sb.append(" \n") - .append("precision mediump float;") - .append("varying vec2 vTexCoord; \n") - .append("uniform sampler2D uTexture; \n") - .append("uniform lowp float mixPercent; \n") - .append("uniform vec4 vMixColor; \n") - .append("void main() { \n") - .append(" vec4 col = vec4(texture2D(uTexture, vTexCoord.st));\n") - .append(" gl_FragColor = vec4(mix(col.rgb, vMixColor.rgb, vMixColor.a * mixPercent), col.a); \n") - .append("} \n"); - return sb.toString(); - } - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/util/SingleMainHandler.java b/hoko-blur/src/main/java/com/hoko/blur/util/SingleMainHandler.java deleted file mode 100644 index 2e4cc8efd9..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/util/SingleMainHandler.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.hoko.blur.util; - - -import android.os.Handler; -import android.os.Looper; - -/** - * Created by yuxfzju on 2017/2/7. - */ - -public class SingleMainHandler { - - private static class MainHandlerHolder { - private static Handler sMainHandler = new Handler(Looper.getMainLooper()); - } - - public static Handler get() { - return MainHandlerHolder.sMainHandler; - } -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/view/DragBlurringView.java b/hoko-blur/src/main/java/com/hoko/blur/view/DragBlurringView.java deleted file mode 100644 index 4d51c7a410..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/view/DragBlurringView.java +++ /dev/null @@ -1,139 +0,0 @@ -package com.hoko.blur.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.drawable.ColorDrawable; -import android.util.AttributeSet; -import android.view.MotionEvent; -import android.view.View; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.api.IBlurProcessor; - - -/** - * Created by yuxfzju on 16/8/20. - */ -public class DragBlurringView extends View { - - private static final int DOWNSAMPLE_FACTOR = 5; - - private float mOldX; - private float mOldY; - - private View mBlurredView; - - private Bitmap mToBlurBitmap; - private Canvas mBlurringCanvas; - private IBlurProcessor mProcessor; - - public DragBlurringView(Context context) { - super(context); - init(); - - } - - public DragBlurringView(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - - private void init() { - mProcessor = HokoBlur.with(getContext()) - .scheme(HokoBlur.SCHEME_NATIVE) - .mode(HokoBlur.MODE_GAUSSIAN) - .radius(5) - .sampleFactor(1.0f) - .processor(); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - if (mBlurredView != null) { - - if (prepare()) { - - if (mBlurredView.getBackground() != null && mBlurredView.getBackground() instanceof ColorDrawable) { - mToBlurBitmap.eraseColor(((ColorDrawable) mBlurredView.getBackground()).getColor()); - } else { - mToBlurBitmap.eraseColor(Color.TRANSPARENT); - } - - mBlurredView.draw(mBlurringCanvas); - Bitmap blurredBitmap = mProcessor.blur(mToBlurBitmap); - - canvas.save(); - canvas.translate(mBlurredView.getX() - getX(), mBlurredView.getY() - getY()); - canvas.scale(DOWNSAMPLE_FACTOR, DOWNSAMPLE_FACTOR); - canvas.drawBitmap(blurredBitmap, 0, 0, null); - canvas.restore(); - } - - } - - } - - private boolean prepare() { - final int width = mBlurredView.getWidth(); - final int height = mBlurredView.getHeight(); - - if (mBlurringCanvas == null) { - - int scaledWidth = width / DOWNSAMPLE_FACTOR; - int scaleHeight = height / DOWNSAMPLE_FACTOR; - - if (mToBlurBitmap == null) { - mToBlurBitmap = Bitmap.createBitmap(scaledWidth, scaleHeight, Bitmap.Config.ARGB_8888); - } - - if (mToBlurBitmap == null) { - return false; - } - - mBlurringCanvas = new Canvas(mToBlurBitmap); - mBlurringCanvas.scale(1.0f / DOWNSAMPLE_FACTOR, 1.0f / DOWNSAMPLE_FACTOR); - } - - return true; - } - - - public void setBlurredView(View blurredView) { - mBlurredView = blurredView; - } - - @Override - public boolean onTouchEvent(MotionEvent event) { - switch (event.getActionMasked()) { - case MotionEvent.ACTION_DOWN: - mOldX = event.getRawX(); - mOldY = event.getRawY(); - return true; - - case MotionEvent.ACTION_MOVE: - float dx = event.getRawX() - mOldX; - float dy = event.getRawY() - mOldY; - offsetLeftAndRight((int) dx); - offsetTopAndBottom((int) dy); - mOldX = event.getRawX(); - mOldY = event.getRawY(); - invalidate(); - break; - - case MotionEvent.ACTION_CANCEL: - case MotionEvent.ACTION_UP: - break; - - } - - - return super.onTouchEvent(event); - } - - -} diff --git a/hoko-blur/src/main/java/com/hoko/blur/view/RsBlurLinearLayout.java b/hoko-blur/src/main/java/com/hoko/blur/view/RsBlurLinearLayout.java deleted file mode 100644 index 41398b5eb6..0000000000 --- a/hoko-blur/src/main/java/com/hoko/blur/view/RsBlurLinearLayout.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.hoko.blur.view; - -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Matrix; -import android.util.AttributeSet; -import android.view.View; -import android.view.ViewTreeObserver; -import android.widget.LinearLayout; - -import com.hoko.blur.HokoBlur; -import com.hoko.blur.processor.BlurProcessor; - -/** - * Created by yuxfzju on 16/9/18. - */ -public class RsBlurLinearLayout extends LinearLayout { - - private static final int DEFAULT_BLUR_RADIUS = 5; - - private static final float DEFAULT_BITMAP_SAMPLE_FACTOR = 5.0f; - - private int[] mLocationInWindow; - - private BlurProcessor mProcessor; - - private Bitmap mBitmap; - - private Canvas mCanvas; - - private final ViewTreeObserver.OnPreDrawListener mOnPreDrawListener = () -> { - if (getVisibility() == View.VISIBLE) { - prepare(); - } - return true; - }; - - public RsBlurLinearLayout(Context context) { - super(context); - init(); - } - - public RsBlurLinearLayout(Context context, AttributeSet attrs) { - super(context, attrs); - init(); - } - - public RsBlurLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - init(); - } - - private void init() { - mCanvas = new Canvas(); - mLocationInWindow = new int[2]; - mProcessor = HokoBlur.with(getContext()).scheme(HokoBlur.SCHEME_RENDER_SCRIPT).sampleFactor(DEFAULT_BITMAP_SAMPLE_FACTOR).processor(); - setBlurRadius(DEFAULT_BLUR_RADIUS); - - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - getViewTreeObserver().addOnPreDrawListener(mOnPreDrawListener); - } - - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - getViewTreeObserver().removeOnPreDrawListener(mOnPreDrawListener); - } - - @Override - protected void dispatchDraw(Canvas canvas) { - if (mCanvas == canvas) { - mBitmap = mProcessor.blur(mBitmap); - } else { - if (mBitmap != null) { - canvas.drawBitmap(mBitmap, new Matrix(), null); - } - super.dispatchDraw(canvas); - } - } - - public void setBlurRadius(int radius) { - mProcessor.radius(radius); - invalidate(); - } - - public void setSampleFactor(float factor) { - mProcessor.sampleFactor(factor); - invalidate(); - } - - private void prepare() { - int width = getWidth(); - int height = getHeight(); - - width = Math.max(width, 1); - height = Math.max(height, 1); - - if (mBitmap == null || mBitmap.getWidth() != width || mBitmap.getHeight() != height) { - mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - } - - getLocationInWindow(mLocationInWindow); - mCanvas.restoreToCount(1); - mCanvas.setBitmap(mBitmap); - mCanvas.setMatrix(new Matrix()); - mCanvas.translate(-mLocationInWindow[0], -mLocationInWindow[1]); - mCanvas.save(); - getRootView().draw(mCanvas); - } - -} \ No newline at end of file diff --git a/hoko-blur/src/main/jni/BlurUtil.cpp b/hoko-blur/src/main/jni/BlurUtil.cpp deleted file mode 100644 index b62bd4e593..0000000000 --- a/hoko-blur/src/main/jni/BlurUtil.cpp +++ /dev/null @@ -1,78 +0,0 @@ -// -// Created by yuxfzju on 2017/2/14. -// - -#include "include/BlurUtil.h" - -#ifdef __cplusplus -extern "C" { -#endif - -jint clamp(jint i, jint minValue, jint maxValue) { - if (i < minValue) { - return minValue; - } else if (i > maxValue) { - return maxValue; - } else { - return i; - } -} - - -JNIEXPORT void JNICALL -Java_com_hoko_blur_util_BitmapUtil_replaceBitmap(JNIEnv *env, jclass type, jobject jbitmap, - jintArray j_inArray, jint j_x, jint j_y, - jint j_deltaW, jint j_deltaH) { - - if (jbitmap == nullptr) { - return; - } - - AndroidBitmapInfo bmpInfo = {0}; - if (AndroidBitmap_getInfo(env, jbitmap, &bmpInfo) < 0) { - return; - } - - int *pixels = nullptr; - if (AndroidBitmap_lockPixels(env, jbitmap, (void **) &pixels) < 0) { - return; - } - - - jint *c_inArray; - c_inArray = env->GetIntArrayElements(j_inArray, nullptr); - - int w = bmpInfo.width; - int h = bmpInfo.height; - - for (int i = j_x; i < j_x + j_deltaW; i++) { - for (int j = j_y; j < j_y + j_deltaH; j++) { - jint argb = c_inArray[i - j_x + (j - j_y) * j_deltaW]; - jint a = ((argb >> 24) & 0xff) << 24; - jint r = (argb >> 16) & 0xff; - jint g = ((argb >> 8) & 0xff) << 8; - jint b = (argb & 0xff) << 16; - pixels[i + j * w] = a + r + g + b; - } - } -// for(int i = j_y * w; i < w * (j_y + j_deltaH); i ++) { -// jint argb = c_inArray[i]; -// jint a = ((argb >> 24) & 0xff) << 24; -// jint r = (argb >> 16) & 0xff; -// jint g = ((argb >> 8) & 0xff) << 8; -// jint b = (argb & 0xff) << 16; -// -// pixels[i] = a + r + g + b; -// -// } -// __android_log_print(ANDROID_LOG_ERROR, "unlockPixels", "unlockPixels"); - - AndroidBitmap_unlockPixels(env, jbitmap); - - env->ReleaseIntArrayElements(j_inArray, c_inArray, 0); - -} - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/hoko-blur/src/main/jni/BoxBlurFilter.cpp b/hoko-blur/src/main/jni/BoxBlurFilter.cpp deleted file mode 100644 index 17dd48df49..0000000000 --- a/hoko-blur/src/main/jni/BoxBlurFilter.cpp +++ /dev/null @@ -1,158 +0,0 @@ -// -// Created by yuxfzju on 16/7/28. -// - -#include "include/BoxBlurFilter.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void boxBlurHorizontal(jint *in, jint *out, jint width, jint height, jint radius, jint startX, - jint startY, jint deltaX, jint deltaY) { - jint widthMinus1 = width - 1; - jint tableSize = 2 * radius + 1; - jint divide[256 * tableSize]; - - for (jint i = 0; i < 256 * tableSize; i++) - divide[i] = i / tableSize; - - for (jint y = startY; y < startY + deltaY; y++) { - jint ta = 0, tr = 0, tg = 0, tb = 0; - - for (jint i = -radius; i <= radius; i++) { - jint rgb = in[y * width + - clamp(i, startX, startX + deltaX - 1)]; - ta += (rgb >> 24) & 0xff; - tr += (rgb >> 16) & 0xff; - tg += (rgb >> 8) & 0xff; - tb += rgb & 0xff; - } - - jint baseIndex = y * width; - - for (jint x = startX; x < startX + deltaX; x++) { - - jint i1 = x + radius + 1; - if (i1 > startX + deltaX - 1) - i1 = startX + deltaX - 1; - jint i2 = x - radius; - if (i2 < startX) - i2 = startX; - jint rgb1 = in[baseIndex + i1]; - jint rgb2 = in[baseIndex + i2]; - - ta += ((rgb1 >> 24) & 0xff) - ((rgb2 >> 24) & 0xff); - tr += ((rgb1 & 0xff0000) - (rgb2 & 0xff0000)) >> 16; - tg += ((rgb1 & 0xff00) - (rgb2 & 0xff00)) >> 8; - tb += (rgb1 & 0xff) - (rgb2 & 0xff); - - out[baseIndex + x] = (divide[ta] << 24) | (divide[tr] << 16) | (divide[tg] << 8) | - divide[tb]; - } - } -} - - -void boxBlurVertical(jint *in, jint *out, jint width, jint height, jint radius, jint startX, jint startY, - jint deltaX, jint deltaY) { - jint heightMinus1 = height - 1; - jint tableSize = 2 * radius + 1; - jint divide[256 * tableSize]; - - for (jint i = 0; i < 256 * tableSize; i++) - divide[i] = i / tableSize; - - for (jint x = startX; x < startX + deltaX; x++) { - jint ta = 0, tr = 0, tg = 0, tb = 0; - - for (jint i = -radius; i <= radius; i++) { - jint rgb = in[x + clamp(i, startY, startY + deltaY - 1) * width]; - ta += (rgb >> 24) & 0xff; - tr += (rgb >> 16) & 0xff; - tg += (rgb >> 8) & 0xff; - tb += rgb & 0xff; - } - - for (jint y = startY; y < startY + deltaY; y++) { - out[y * width + x] = (divide[ta] << 24) | (divide[tr] << 16) | (divide[tg] << 8) | - divide[tb]; - - jint i1 = y + radius + 1; - if (i1 > startY + deltaY - 1) - i1 = startY + deltaY - 1; - jint i2 = y - radius; - if (i2 < startY) - i2 = startY; - jint rgb1 = in[x + i1 * width]; - jint rgb2 = in[x + i2 * width]; - - ta += ((rgb1 >> 24) & 0xff) - ((rgb2 >> 24) & 0xff); - tr += ((rgb1 & 0xff0000) - (rgb2 & 0xff0000)) >> 16; - tg += ((rgb1 & 0xff00) - (rgb2 & 0xff00)) >> 8; - tb += (rgb1 & 0xff) - (rgb2 & 0xff); - } - } -} - - -JNIEXPORT void JNICALL -Java_com_hoko_blur_filter_NativeBlurFilter_nativeBoxBlur(JNIEnv *env, jclass type, - jobject jbitmap, jint j_radius, - jint j_cores, jint j_index, - jint j_direction) { - - if (jbitmap == nullptr) { - return; - } - - AndroidBitmapInfo bmpInfo = {0}; - if (AndroidBitmap_getInfo(env, jbitmap, &bmpInfo) < 0) { - return; - } - - int *pixels = nullptr; - if (AndroidBitmap_lockPixels(env, jbitmap, (void **) &pixels) < 0) { - return; - } - - int w = bmpInfo.width; - int h = bmpInfo.height; - - jint *copy = nullptr; - copy = (jint *) malloc(sizeof(jint) * w * h); - - for (int i = 0; i < w * h; i++) { - copy[i] = pixels[i]; - } - - if (j_direction == HORIZONTAL) { - int deltaY = h / j_cores; - int startY = j_index * deltaY; - - if (j_index == j_cores - 1) { - deltaY = h - (j_cores - 1) * deltaY; - } - - boxBlurHorizontal(copy, pixels, w, h, j_radius, 0, startY, w, deltaY); - - } else if (j_direction == VERTICAL) { - int deltaX = w / j_cores; - int startX = j_index * deltaX; - - if (j_index == j_cores - 1) { - deltaX = w - (j_cores - 1) * (w / j_cores); - } - - boxBlurVertical(copy, pixels, w, h, j_radius, startX, 0, deltaX, h); - } - - AndroidBitmap_unlockPixels(env, jbitmap); - - free(copy); - -} - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/hoko-blur/src/main/jni/CMakeLists.txt b/hoko-blur/src/main/jni/CMakeLists.txt deleted file mode 100644 index 3ca5d11f36..0000000000 --- a/hoko-blur/src/main/jni/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -cmake_minimum_required(VERSION 3.6) -project(Hoko_blur) - -set(CMAKE_CXX_STANDARD 11) - -include_directories( - ${CMAKE_SOURCE_DIR}/include -) - -add_compile_options(-fPIC) - -aux_source_directory(. SOURCE_FILES) - -set(BLUR_LIB_NAME hoko_blur) - -add_library(${BLUR_LIB_NAME} SHARED ${SOURCE_FILES}) - -find_library(log-lib log) -target_link_libraries(${BLUR_LIB_NAME} ${log-lib}) - -find_library(graphics-lib jnigraphics) -target_link_libraries(${BLUR_LIB_NAME} ${graphics-lib}) - diff --git a/hoko-blur/src/main/jni/GaussianBlurFilter.cpp b/hoko-blur/src/main/jni/GaussianBlurFilter.cpp deleted file mode 100644 index f9a3f58688..0000000000 --- a/hoko-blur/src/main/jni/GaussianBlurFilter.cpp +++ /dev/null @@ -1,178 +0,0 @@ -// -// Created by yuxfzju on 16/9/10. -// - -#include "include/GaussianBlurFilter.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void gaussianBlurHorizontal(float *kernel, jint *inPixels, jint *outPixels, jint width, jint height, - jint radius, - jint startX, jint startY, jint deltaX, jint deltaY) { - jint cols = 2 * radius + 1; - jint cols2 = cols / 2; - jint x, y, col; - - jint endY = startY + deltaY; - jint endX = startX + deltaX; - - for (y = startY; y < endY; y++) { - jint ioffset = y * width; - for (x = startX; x < endX; x++) { - float r = 0, g = 0, b = 0; - int moffset = cols2; - for (col = -cols2; col <= cols2; col++) { - float f = kernel[moffset + col]; - - if (f != 0) { - jint ix = x + col; - if (ix < startX) { - ix = startX; - } else if (ix >= endX) { - ix = endX - 1; - } - jint rgb = inPixels[ioffset + ix]; - r += f * ((rgb >> 16) & 0xff); - g += f * ((rgb >> 8) & 0xff); - b += f * (rgb & 0xff); - } - } - - jint outIndex = ioffset + x; - jint ia = (inPixels[ioffset + x] >> 24) & 0xff; - jint ir = clamp((jint) (r + 0.5), 0, 255); - jint ig = clamp((jint) (g + 0.5), 0, 255); - jint ib = clamp((jint) (b + 0.5), 0, 255); - outPixels[outIndex] = (ia << 24) | (ir << 16) | (ig << 8) | ib; - } - } -} - -void gaussianBlurVertical(float *kernel, jint *inPixels, jint *outPixels, jint width, jint height, - jint radius, - jint startX, jint startY, jint deltaX, jint deltaY) { - jint cols = 2 * radius + 1; - jint cols2 = cols / 2; - jint x, y, col; - - jint endY = startY + deltaY; - jint endX = startX + deltaX; - - for (x = startX; x < endX; x++) { - jint ioffset = x; - for (y = startY; y < endY; y++) { - float r = 0, g = 0, b = 0; - int moffset = cols2; - for (col = -cols2; col <= cols2; col++) { - float f = kernel[moffset + col]; - - if (f != 0) { - jint iy = y + col; - if (iy < startY) { - iy = startY; - } else if (iy >= endY) { - iy = endY - 1; - } - jint rgb = inPixels[ioffset + iy * width]; - r += f * ((rgb >> 16) & 0xff); - g += f * ((rgb >> 8) & 0xff); - b += f * (rgb & 0xff); - } - } - jint outIndex = ioffset + y * width; - jint ia = (inPixels[ioffset + x] >> 24) & 0xff; - jint ir = clamp((jint) (r + 0.5), 0, 255); - jint ig = clamp((jint) (g + 0.5), 0, 255); - jint ib = clamp((jint) (b + 0.5), 0, 255); - outPixels[outIndex] = (ia << 24) | (ir << 16) | (ig << 8) | ib; - } - } -} - -float *makeKernel(jint r) { - jint i, row; - jint rows = r * 2 + 1; - float *matrix = (float *) malloc(sizeof(float) * rows); - float sigma = (r + 1) / 2.0f; - float sigma22 = 2 * sigma * sigma; - float total = 0; - jint index = 0; - for (row = -r; row <= r; row++) { - matrix[index] = exp(-1 * (row * row) / sigma22) / sigma; - total += matrix[index]; - index++; - } - for (i = 0; i < rows; i++) { - matrix[i] /= total; - } - - return matrix; -} - - -void JNICALL Java_com_hoko_blur_filter_NativeBlurFilter_nativeGaussianBlur(JNIEnv *env, jclass type, - jobject jbitmap, - jint j_radius, - jint j_cores, - jint j_index, - jint j_direction) { - - if (jbitmap == nullptr) { - return; - } - - AndroidBitmapInfo bmpInfo = {0}; - if (AndroidBitmap_getInfo(env, jbitmap, &bmpInfo) < 0) { - return; - } - - int *pixels = nullptr; - if (AndroidBitmap_lockPixels(env, jbitmap, (void **) &pixels) < 0) { - return; - } - - int w = bmpInfo.width; - int h = bmpInfo.height; - - float *kernel = nullptr; - kernel = makeKernel(j_radius); - - jint *copy = nullptr; - copy = (jint *) malloc(sizeof(jint) * w * h); - - for (int i = 0; i < w * h; i++) { - copy[i] = pixels[i]; - } - - if (j_direction == HORIZONTAL) { - int deltaY = h / j_cores; - int startY = j_index * deltaY; - - if (j_index == j_cores - 1) { - deltaY = h - (j_cores - 1) * deltaY; - } - - gaussianBlurHorizontal(kernel, copy, pixels, w, h, j_radius, 0, startY, w, deltaY); - - } else if (j_direction == VERTICAL) { - int deltaX = w / j_cores; - int startX = j_index * deltaX; - - if (j_index == j_cores - 1) { - deltaX = w - (j_cores - 1) * (w / j_cores); - } - - gaussianBlurVertical(kernel, copy, pixels, w, h, j_radius, startX, 0, deltaX, h); - } - - AndroidBitmap_unlockPixels(env, jbitmap); - - free(copy); - free(kernel); -} - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/hoko-blur/src/main/jni/StackBlurFilter.cpp b/hoko-blur/src/main/jni/StackBlurFilter.cpp deleted file mode 100644 index 16c7c24d21..0000000000 --- a/hoko-blur/src/main/jni/StackBlurFilter.cpp +++ /dev/null @@ -1,288 +0,0 @@ -// -// Created by yuxfzju on 16/7/28. -// - -#include "include/StackBlurFilter.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define max(a, b) ((a)>(b)?(a):(b)) -#define min(a, b) ((a)<(b)?(a):(b)) - -void doHorizontalBlur(jint *pix, jint w, jint h, jint radius, jint startX, jint startY, jint deltaX, - jint deltaY) { - - jint wm = w - 1; - jint div = radius + radius + 1; - - jint rsum, gsum, bsum, x, y, i, p, yi; - jint *vmin; - - vmin = (jint *) malloc(sizeof(jint) * max(w, h)); - - jint divsum = (div + 1) >> 1; - divsum *= divsum; - - short *dv; - dv = (short *) malloc(sizeof(short) * 256 * divsum); - - for (i = 0; i < 256 * divsum; i++) { - dv[i] = (short) (i / divsum); - } - - jint (*stack)[3]; - stack = (jint(*)[3]) malloc(sizeof(jint) * div * 3); - - jint stackpointer; - jint stackstart; - jint *sir; - jint rbs; - jint r1 = radius + 1; - jint routsum, goutsum, boutsum; - jint rinsum, ginsum, binsum; - jint baseIndex; - jint endX = startX + deltaX; - jint endY = startY + deltaY; - - for (y = startY; y < endY; y++) { - rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; - baseIndex = y * w; - - for (i = -radius; i <= radius; i++) { - p = pix[baseIndex + min(wm, max(startX, i + startX))]; - sir = stack[i + radius]; - sir[0] = (p & 0xff0000) >> 16; - sir[1] = (p & 0x00ff00) >> 8; - sir[2] = (p & 0x0000ff); - rbs = r1 - abs(i); - rsum += sir[0] * rbs; - gsum += sir[1] * rbs; - bsum += sir[2] * rbs; - if (i > 0) { - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - } else { - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - } - } - stackpointer = radius; - - yi = baseIndex + startX; - for (x = startX; x < endX; x++) { - - pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum]; - - rsum -= routsum; - gsum -= goutsum; - bsum -= boutsum; - - stackstart = stackpointer - radius + div; - sir = stack[stackstart % div]; - - routsum -= sir[0]; - goutsum -= sir[1]; - boutsum -= sir[2]; - - vmin[x] = min(x + radius + 1, wm); - p = pix[baseIndex + vmin[x]]; - - sir[0] = (p & 0xff0000) >> 16; - sir[1] = (p & 0x00ff00) >> 8; - sir[2] = (p & 0x0000ff); - - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - - rsum += rinsum; - gsum += ginsum; - bsum += binsum; - - stackpointer = (stackpointer + 1) % div; - sir = stack[(stackpointer) % div]; - - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - - rinsum -= sir[0]; - ginsum -= sir[1]; - binsum -= sir[2]; - - yi++; - } - } - - - free(dv); - free(stack); -} - - -void doVerticalBlur(jint *pix, jint w, jint h, jint radius, jint startX, jint startY, jint deltaX, - jint deltaY) { - - jint hm = h - 1; - jint hmw = hm * w; - jint div = radius + radius + 1; - - jint rsum, gsum, bsum, x, y, i, p, yi; - jint *vmin; - - vmin = (jint *) malloc(sizeof(jint) * max(w, h)); - - jint divsum = (div + 1) >> 1; - divsum *= divsum; - - short *dv; - dv = (short *) malloc(sizeof(short) * 256 * divsum); - - for (i = 0; i < 256 * divsum; i++) { - dv[i] = (short) (i / divsum); - } - - jint (*stack)[3]; - stack = (jint(*)[3]) malloc(sizeof(jint) * div * 3); - - jint stackpointer; - jint stackstart; - jint *sir; - jint rbs; - jint r1 = radius + 1; - jint routsum, goutsum, boutsum; - jint rinsum, ginsum, binsum; - jint endX = startX + deltaX; - jint endY = startY + deltaY; - - jint baseIndex = startY * w; - - for (x = startX; x < endX; x++) { - rinsum = ginsum = binsum = routsum = goutsum = boutsum = rsum = gsum = bsum = 0; - for (i = -radius; i <= radius; i++) { - p = pix[min(hmw, max(baseIndex + i * w, baseIndex)) + x]; - sir = stack[i + radius]; - sir[0] = (p & 0xff0000) >> 16; - sir[1] = (p & 0x00ff00) >> 8; - sir[2] = (p & 0x0000ff); - rbs = r1 - abs(i); - rsum += sir[0] * rbs; - gsum += sir[1] * rbs; - bsum += sir[2] * rbs; - if (i > 0) { - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - } else { - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - } - } - stackpointer = radius; - - yi = baseIndex + x; - for (y = startY; y < endY; y++) { - - pix[yi] = (0xff000000 & pix[yi]) | (dv[rsum] << 16) | (dv[gsum] << 8) | dv[bsum]; - - rsum -= routsum; - gsum -= goutsum; - bsum -= boutsum; - - stackstart = stackpointer - radius + div; - sir = stack[stackstart % div]; - - routsum -= sir[0]; - goutsum -= sir[1]; - boutsum -= sir[2]; - - vmin[y] = min(y + radius + 1, hm); - p = pix[vmin[y] * w + x]; - - sir[0] = (p & 0xff0000) >> 16; - sir[1] = (p & 0x00ff00) >> 8; - sir[2] = (p & 0x0000ff); - - rinsum += sir[0]; - ginsum += sir[1]; - binsum += sir[2]; - - rsum += rinsum; - gsum += ginsum; - bsum += binsum; - - stackpointer = (stackpointer + 1) % div; - sir = stack[(stackpointer) % div]; - - routsum += sir[0]; - goutsum += sir[1]; - boutsum += sir[2]; - - rinsum -= sir[0]; - ginsum -= sir[1]; - binsum -= sir[2]; - - yi += w; - } - } - - free(dv); - free(stack); -} - -JNIEXPORT void JNICALL -Java_com_hoko_blur_filter_NativeBlurFilter_nativeStackBlur(JNIEnv *env, jclass type, - jobject jbitmap, jint j_radius, - jint j_cores, jint j_index, - jint j_direction) { - - if (jbitmap == nullptr) { - return; - } - - AndroidBitmapInfo bmpInfo = {0}; - if (AndroidBitmap_getInfo(env, jbitmap, &bmpInfo) < 0) { - return; - } - - int *pixels = nullptr; - if (AndroidBitmap_lockPixels(env, jbitmap, (void **) &pixels) < 0) { - return; - } - - int w = bmpInfo.width; - int h = bmpInfo.height; - - if (j_direction == HORIZONTAL) { - int deltaY = h / j_cores; - int startY = j_index * deltaY; - - if (j_index == j_cores - 1) { - deltaY = h - (j_cores - 1) * deltaY; - } - - doHorizontalBlur(pixels, w, h, j_radius, 0, startY, w, deltaY); - - } else if (j_direction == VERTICAL) { - int deltaX = w / j_cores; - int startX = j_index * deltaX; - - if (j_index == j_cores - 1) { - deltaX = w - (j_cores - 1) * (w / j_cores); - } - - doVerticalBlur(pixels, w, h, j_radius, startX, 0, deltaX, h); - } - - AndroidBitmap_unlockPixels(env, jbitmap); - -} - -#ifdef __cplusplus -} -#endif \ No newline at end of file diff --git a/hoko-blur/src/main/jni/include/BlurUtil.h b/hoko-blur/src/main/jni/include/BlurUtil.h deleted file mode 100644 index 7a832fd379..0000000000 --- a/hoko-blur/src/main/jni/include/BlurUtil.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// Created by yuxfzju on 2017/2/14. -// - -#ifndef HOKO_BLUR_BITMAPREPLACE_H -#define HOKO_BLUR_BITMAPREPLACE_H - -#include -#include "android/bitmap.h" -#include "android/log.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum Direction { - HORIZONTAL, - VERTICAL, - BOTH -}; - -jint clamp(jint i, jint minValue, jint maxValue); - -JNIEXPORT void JNICALL -Java_com_hoko_blur_util_BitmapUtil_replaceBitmap(JNIEnv *env, jclass type, jobject bitmap, - jintArray j_inArray, jint, jint, jint, jint); - -#ifdef __cplusplus -} -#endif - -#endif //HOKO_BLUR_BITMAPREPLACE_H diff --git a/hoko-blur/src/main/jni/include/BoxBlurFilter.h b/hoko-blur/src/main/jni/include/BoxBlurFilter.h deleted file mode 100644 index 87d2d93a7a..0000000000 --- a/hoko-blur/src/main/jni/include/BoxBlurFilter.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef HOKO_BLUR_BOXBLURFILTER_H -#define HOKO_BLUR_BOXBLURFILTER_H - -#include -#include -#include -#include -#include -#include -#include "BlurUtil.h" - -#ifdef __cplusplus -extern "C" { -#endif - -JNIEXPORT void JNICALL Java_com_hoko_blur_filter_NativeBlurFilter_nativeBoxBlur - (JNIEnv *, jclass, jobject, jint, jint, jint, jint); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/hoko-blur/src/main/jni/include/GaussianBlurFilter.h b/hoko-blur/src/main/jni/include/GaussianBlurFilter.h deleted file mode 100644 index fcdf19169c..0000000000 --- a/hoko-blur/src/main/jni/include/GaussianBlurFilter.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// Created by yuxfzju on 16/9/10. -// - -#ifndef HOKO_BLUR_GAUSSIANBLURFILTER_H -#define HOKO_BLUR_GAUSSIANBLURFILTER_H - - -#include -#include -#include -#include "math.h" -#include "BlurUtil.h" -#include -#include - - -#ifdef __cplusplus -extern "C" { -#endif - -JNIEXPORT void JNICALL Java_com_hoko_blur_filter_NativeBlurFilter_nativeGaussianBlur - (JNIEnv *, jclass, jobject, jint, jint, jint, jint); - -#ifdef __cplusplus -} -#endif -#endif //HOKO_BLUR_GAUSSIANBLURFILTER_H diff --git a/hoko-blur/src/main/jni/include/StackBlurFilter.h b/hoko-blur/src/main/jni/include/StackBlurFilter.h deleted file mode 100644 index 1616c6d027..0000000000 --- a/hoko-blur/src/main/jni/include/StackBlurFilter.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef HOKO_BLUR_STACKBLURFILTER_H -#define HOKO_BLUR_STACKBLURFILTER_H - -#include -#include -#include -#include -#include "BlurUtil.h" -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -JNIEXPORT void JNICALL Java_com_hoko_blur_filter_NativeBlurFilter_nativeStackBlur - (JNIEnv *, jclass, jobject, jint, jint, jint, jint); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/hoko-blur/src/main/res/values/strings.xml b/hoko-blur/src/main/res/values/strings.xml deleted file mode 100644 index bb14642b6d..0000000000 --- a/hoko-blur/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Hoko Blur Library - diff --git a/hoko-blur/src/main/rs/BoxBlur.rs b/hoko-blur/src/main/rs/BoxBlur.rs deleted file mode 100644 index 9f4510bb44..0000000000 --- a/hoko-blur/src/main/rs/BoxBlur.rs +++ /dev/null @@ -1,64 +0,0 @@ -#pragma version(1) - -#pragma rs java_package_name(com.hoko.blur.renderscript) - -#pragma rs_fp_relaxed - -rs_allocation input; -rs_allocation output; -int width; -int height; -int radius; - - -void __attribute__((kernel)) boxblur_h(uchar4 in, uint32_t x, uint32_t y) { - - float4 sum = 0; - uchar4 result; - int count = 0; - int kernel = (2 * radius + 1); - - uchar4 center = rsGetElementAt_uchar4(input, x, y); - - for (int j = -radius; j <= radius; j++) { - if (x >= 0 && x < width && y + j >= 0 && y + j < height) { - uchar4 temp = rsGetElementAt_uchar4(input, x, y + j); - sum += rsUnpackColor8888(temp); - count++; - } - } - - - sum = sum / count; - result = rsPackColorTo8888(sum); - result.a = center.a; - rsSetElementAt_uchar4(output, result, x, y); - -} - - -void __attribute__((kernel)) boxblur_v(uchar4 in, uint32_t x, uint32_t y) { - - float4 sum = 0; - uchar4 result; - int count = 0; - int kernel = (2 * radius + 1); - - uchar4 center = rsGetElementAt_uchar4(input, x, y); - - for (int i = -radius; i <= radius; i++) { - if (x + i >= 0 && x + i < width && y >= 0 && y < height) { - uchar4 temp = rsGetElementAt_uchar4(input, x + i, y); - sum += rsUnpackColor8888(temp); - count++; - - } - } - - - sum = sum / count; - result = rsPackColorTo8888(sum); - result.a = center.a; - rsSetElementAt_uchar4(output, result, x, y); - -} diff --git a/hoko-blur/src/main/rs/StackBlur.rs b/hoko-blur/src/main/rs/StackBlur.rs deleted file mode 100644 index 133d5b00a7..0000000000 --- a/hoko-blur/src/main/rs/StackBlur.rs +++ /dev/null @@ -1,69 +0,0 @@ -#pragma version(1) - -#pragma rs java_package_name(com.hoko.blur.renderscript) - -#pragma rs_fp_relaxed - -rs_allocation input; -rs_allocation output; - -int width; -int height; - -int radius; - - -void __attribute__((kernel)) stackblur_h(uchar4 in, uint32_t x, uint32_t y) { - - float4 sum = 0; - uchar4 result; - int count = 0; - int kernel = (2 * radius + 1); - int weightSum = 0; - - uchar4 center = rsGetElementAt_uchar4(input, x, y); - - for (int i = -radius; i <= radius; i++) { - if (x + i >= 0 && x + i < width) { - uchar4 temp = rsGetElementAt_uchar4(input, x + i, y); - int weight = radius + 1 - abs(i); - sum += rsUnpackColor8888(temp) * weight; - weightSum += weight; - } - - } - - sum = sum / weightSum; - result = rsPackColorTo8888(sum); - result.a = center.a; - rsSetElementAt_uchar4(output, result, x, y); - -} - -void __attribute__((kernel)) stackblur_v(uchar4 in, uint32_t x, uint32_t y) { - - float4 sum = 0; - uchar4 result; - int count = 0; - int kernel = (2 * radius + 1); - int weightSum = 0; - - uchar4 center = rsGetElementAt_uchar4(input, x, y); - - for (int j = -radius; j <= radius; j++) { - if (y + j >= 0 && y + j < height) { - uchar4 temp = rsGetElementAt_uchar4(input, x, y + j); - int weight = radius + 1 - abs(j); - sum += rsUnpackColor8888(temp) * weight; - weightSum += weight; - } - } - - sum = sum / weightSum; - result = rsPackColorTo8888(sum); - result.a = center.a; - rsSetElementAt_uchar4(output, result, x, y); - -} - - diff --git a/hoko-blur/src/test/java/com/hoko/blur/ExampleUnitTest.java b/hoko-blur/src/test/java/com/hoko/blur/ExampleUnitTest.java deleted file mode 100644 index a955fa3f00..0000000000 --- a/hoko-blur/src/test/java/com/hoko/blur/ExampleUnitTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.hoko.blur; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -/** - * To work on unit tests, switch the Test Artifact in the Build Variants view. - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file -- GitLab From f53ba85a952af8f771e77cfb16d14dcaee34b3c3 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Tue, 14 Jan 2020 19:28:44 +0530 Subject: [PATCH 11/29] Change minSdk from 23 to 24 --- .../java/foundation/e/blisslauncher/buildsrc/Dependencies.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt b/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt index f5f66e7ced..d7f98933d3 100644 --- a/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt +++ b/buildSrc/src/main/java/foundation/e/blisslauncher/buildsrc/Dependencies.kt @@ -2,7 +2,7 @@ package foundation.e.blisslauncher.buildsrc object Versions { const val compile_sdk = 28 - const val min_sdk = 23 + const val min_sdk = 24 const val target_sdk = 28 const val android_gradle_plugin = "3.5.0" const val dexcount_gradle_plugin = "0.8.6" -- GitLab From dadc128618bc56559717e8b8f6bc1b56c59091e3 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Tue, 18 Feb 2020 14:13:50 +0530 Subject: [PATCH 12/29] Disable PdfViewer package in Launcher --- .../e/blisslauncher/features/launcher/AppProvider.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java b/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java index fe221fcab4..79e9304553 100644 --- a/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java +++ b/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java @@ -80,6 +80,7 @@ public class AppProvider { private static final String MICROG_PACKAGE = "com.google.android.gms"; private static final String MUPDF_PACKAGE = "com.artifex.mupdf.mini.app"; + private static final String PDF_VIEWER_PACKAGE = "com.gsnathan.pdfviewer"; private static final String OPENKEYCHAIN_PACKAGE = "org.sufficientlysecure.keychain"; private static final String LIBREOFFICE_PACKAGE = "org.documentfoundation.libreoffice"; @@ -90,6 +91,7 @@ public class AppProvider { static { DISABLED_PACKAGES.add(MICROG_PACKAGE); DISABLED_PACKAGES.add(MUPDF_PACKAGE); + DISABLED_PACKAGES.add(PDF_VIEWER_PACKAGE); DISABLED_PACKAGES.add(OPENKEYCHAIN_PACKAGE); DISABLED_PACKAGES.add(LIBREOFFICE_PACKAGE); } -- GitLab From dadd54697b65e5c507121ff1acf252da654976b5 Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Thu, 20 Feb 2020 18:01:14 +0530 Subject: [PATCH 13/29] Bump version to v1.3.2 --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index babdb775f4..bd0fba222b 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,7 +9,7 @@ apply plugin: 'kotlin-android-extensions' // Manifest version information! def versionMajor = 1 def versionMinor = 3 -def versionPatch = 1 +def versionPatch = 2 android { compileSdkVersion Versions.compile_sdk -- GitLab From 323b4f5d64d4aad490b9605066c4391d2b6b9e55 Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Thu, 5 Mar 2020 08:52:53 +0000 Subject: [PATCH 14/29] Added translation using Weblate (French) --- app/src/main/res/values-fr/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-fr/strings.xml diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/app/src/main/res/values-fr/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file -- GitLab From 179a2257b1d5604f3ce73557ba3169dced41526b Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Thu, 5 Mar 2020 08:53:55 +0000 Subject: [PATCH 15/29] Translated using Weblate (French) Currently translated at 18.1% (23 of 127 strings) Translation: /e//BlissLauncher Translate-URL: https://i18n.e.foundation/projects/e/blisslauncher/fr/ --- app/src/main/res/values-fr/strings.xml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index a6b3daec93..3c966be5c1 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,2 +1,24 @@ - \ No newline at end of file + + Averses de neige + Averses + Averses + Pluie verglaçante + Bruine + Bruine verglaçante + Neige et neige fondue mélangées + Pluie et neige fondue + Pluie et neige mêlées + Orages + Orages violents + Ouragan + Tempête tropicale + Tornade + Annuler + Inconnu + Activer l\'accès aux application pour pouvoir afficher les suggestions d\'application. + Suggestions d\'application + Sans titre + Rechercher + BlissLauncher + \ No newline at end of file -- GitLab From cb3853b4721b06577dd3634c8ae0345e778a5601 Mon Sep 17 00:00:00 2001 From: Manoj Nair Date: Thu, 5 Mar 2020 10:11:11 +0000 Subject: [PATCH 16/29] Translated using Weblate (French) Currently translated at 18.9% (24 of 127 strings) Translation: /e//BlissLauncher Translate-URL: https://i18n.e.foundation/projects/e/blisslauncher/fr/ --- app/src/main/res/values-fr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 3c966be5c1..42fd5a66f8 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -21,4 +21,5 @@ Sans titre Rechercher BlissLauncher + Légères averses de neige \ No newline at end of file -- GitLab From 0965165be36c11974422988a0c74aea8c681b997 Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Thu, 5 Mar 2020 15:15:42 +0000 Subject: [PATCH 17/29] Added translation using Weblate (Polish) --- app/src/main/res/values-pl/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-pl/strings.xml diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/app/src/main/res/values-pl/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file -- GitLab From 970b9b60a456532426501d32f5b7b0fac0129e0d Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Thu, 5 Mar 2020 15:19:05 +0000 Subject: [PATCH 18/29] Added translation using Weblate (German) --- app/src/main/res/values-de/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-de/strings.xml diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/app/src/main/res/values-de/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file -- GitLab From bb3186e4286e183e7b56b3717bca8a4584cc7eae Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Thu, 5 Mar 2020 15:19:06 +0000 Subject: [PATCH 19/29] Added translation using Weblate (Spanish) --- app/src/main/res/values-es/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-es/strings.xml diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/app/src/main/res/values-es/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file -- GitLab From d5c0e76ebd445d4f4b2dbf0f8a2a79dc802a4c6b Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Thu, 5 Mar 2020 15:19:07 +0000 Subject: [PATCH 20/29] Added translation using Weblate (Dutch) --- app/src/main/res/values-nl/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-nl/strings.xml diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/app/src/main/res/values-nl/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file -- GitLab From fd23ff606151f78cb4e161c19d215a4c20e07ed8 Mon Sep 17 00:00:00 2001 From: Manoj Nair Date: Thu, 5 Mar 2020 10:22:46 +0000 Subject: [PATCH 21/29] Translated using Weblate (French) Currently translated at 45.7% (58 of 127 strings) Translation: /e//BlissLauncher Translate-URL: https://i18n.e.foundation/projects/e/blisslauncher/fr/ --- app/src/main/res/values-fr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 42fd5a66f8..bb41ac6e7a 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -22,4 +22,5 @@ Rechercher BlissLauncher Légères averses de neige + Rafales de neige \ No newline at end of file -- GitLab From 35d5ed68834788f18593dd7b0e4244524c34db22 Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Thu, 5 Mar 2020 14:59:53 +0000 Subject: [PATCH 22/29] Translated using Weblate (French) Currently translated at 45.7% (58 of 127 strings) Translation: /e//BlissLauncher Translate-URL: https://i18n.e.foundation/projects/e/blisslauncher/fr/ --- app/src/main/res/values-fr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index bb41ac6e7a..9abcdaf9e4 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -23,4 +23,5 @@ BlissLauncher Légères averses de neige Rafales de neige + Neige \ No newline at end of file -- GitLab From 2a4b2cf41fb359967624bd0f32a0a082e0baaf67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Duval?= Date: Thu, 5 Mar 2020 15:20:03 +0000 Subject: [PATCH 23/29] Translated using Weblate (French) Currently translated at 45.7% (58 of 127 strings) Translation: /e//BlissLauncher Translate-URL: https://i18n.e.foundation/projects/e/blisslauncher/fr/ --- app/src/main/res/values-fr/strings.xml | 99 ++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9abcdaf9e4..d2b619c4e1 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -24,4 +24,103 @@ Légères averses de neige Rafales de neige Neige + Ajouter à l\'écran d\'accueil + Ajouter automatiquement + Autorise une app à supprimer des raccourcis sans l\'intervention de l\'utilisateur + Donne la permission à une app d\'ajouter un raccourci sans l\'intervention de l\'utilisateur. + racourcis de désinstallation + raccourcis d\'installation + Image du jeu d\'icones + Images de la situation météo + Icone de configuration de la Météo + 42° / 28° + 36° + Appuyer pour configurer la météo + Météo + Accéder à davantage… + Monochrome + En couleurs + Jeu d\'icones + Sélectionner l\'emplacement + Afficher un résumé météo quand le widget est minimisé + Montrer lors de la minimisation + Sélectionner pour basculer des icones par défaut (Couleurs) aux icones alternatives (Blanches) + Utiliser les icones en couleurs + Emplacement en cours de vérification + Inverser basses et hautes températures + Activer + La géolocalisation est désactivée. +\n +\nActivez la géolocalisation pour utiliser le widget Météo. + Impossible de trouver l\'emplacement ! + Utiliser le système métrique (°C) + Intervalle de mise à jour + Afficher l\'heure + Montrer l\'emplacement + Emplacement + Ville, Etat/Pays + Saisir l\'emplacement + Géolocalisation en utilisant le réseau + Utiliser une localisation personnalisée + Service Météo + Afficher la Météo + Activé + Affichage + Panneau Météo + Général + 8 heures + 6 heures + 4 heures + 2 heures + 60 minutes + 30 minutes + Manuellement + Toucher pour sélectionner + Aucun service météo sélectionné + %s actuellement injoignable + Maintenant + Mise à jour + Appuyer pour rafraîchir + Aucunes données + NO + O + SO + S + SE + E + NE + N + mph + km/h + Averses orageuses isolées + Averses de neige + Averses orageuses + Partiellement couvert + Fortes chûtes de neige + Averses de neiges éparses + Fortes chutes de neige + Averses isolées + Orages isolés + Orages isolés + Orages isolés + Chaud + Giboulées + Beau temps + Beau temps + Ensoleillé + Clair + Nuages éparses + Partiellement nuageux + Jour + Nuit + Couvert + Froid + Venteux + Venteux + Fumée + Brumeux + Brouillard + Beau temps + Poussières + Grêle \ No newline at end of file -- GitLab From 2f38553f10310c26da22e2a0ee79199b0e9bf759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20Duval?= Date: Thu, 5 Mar 2020 16:01:42 +0000 Subject: [PATCH 24/29] Translated using Weblate (French) Currently translated at 45.7% (58 of 127 strings) Translation: /e//BlissLauncher Translate-URL: https://i18n.e.foundation/projects/e/blisslauncher/fr/ --- app/src/main/res/values-fr/strings.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d2b619c4e1..c6c405bdba 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -123,4 +123,8 @@ Beau temps Poussières Grêle + Afficher les bulles de notification + Page %1$d sur %2$d + L\'app n\'est pas installée + Appuyer pour configurer les suggestions d\'applications \ No newline at end of file -- GitLab From 29f9f6fc68dce9d2e9d0981dffd04a4b9f1601e8 Mon Sep 17 00:00:00 2001 From: Manoj Nair Date: Thu, 12 Mar 2020 14:59:35 +0000 Subject: [PATCH 25/29] Added translation using Weblate (Italian) --- app/src/main/res/values-it/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-it/strings.xml diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/app/src/main/res/values-it/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file -- GitLab From 98843e57706651ef596021d6b91cbaa1a8b53ff6 Mon Sep 17 00:00:00 2001 From: Manoj Nair Date: Sun, 15 Mar 2020 10:39:31 +0000 Subject: [PATCH 26/29] Added translation using Weblate (Romanian) --- app/src/main/res/values-ro/strings.xml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 app/src/main/res/values-ro/strings.xml diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/app/src/main/res/values-ro/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file -- GitLab From bd427f8f2f09e8a9b26b6d010ddcf940c516ffeb Mon Sep 17 00:00:00 2001 From: Amit Kumar Date: Thu, 19 Mar 2020 10:14:41 +0530 Subject: [PATCH 27/29] Don't add pending item for disabled packages --- .idea/codeStyles/Project.xml | 3 --- .../e/blisslauncher/features/launcher/AppProvider.java | 3 ++- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 2e191f6759..41d41678a2 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,8 +1,5 @@ - -