Skip to content

Commit ddf9e68

Browse files
authored
Merge pull request #149 from rosuH/dev
Lots of improvements. 🚀
2 parents f16c11a + ff9a2a4 commit ddf9e68

35 files changed

Lines changed: 1105 additions & 221 deletions

app/build.gradle.kts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ android {
1515
applicationId = "me.rosuh.easywatermark"
1616
minSdk = (Apps.minSdk)
1717
targetSdk = (Apps.targetSdk)
18-
versionCode = 20608
19-
versionName = "2.6.8"
18+
versionCode = 20700
19+
versionName = "2.7.0"
2020
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2121
setProperty("archivesBaseName", "$applicationId-v$versionName($versionCode)")
2222
}
@@ -37,6 +37,10 @@ android {
3737
"coroutines.pro", "proguard-rules.pro"
3838
)
3939
}
40+
create("benchmark") {
41+
signingConfig = signingConfigs.getByName("debug")
42+
isDebuggable = false
43+
}
4044
}
4145

4246
compileOptions {
@@ -73,11 +77,12 @@ dependencies {
7377

7478
implementation("androidx.datastore:datastore-preferences:1.0.0")
7579
implementation("com.google.dagger:hilt-android:2.40.4")
80+
implementation("androidx.asynclayoutinflater:asynclayoutinflater:1.0.0")
7681
kapt("com.google.dagger:hilt-compiler:2.40.4")
7782
implementation("com.github.bumptech.glide:glide:4.13.1")
7883
kapt("com.github.bumptech.glide:compiler:4.13.1")
79-
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.0")
80-
implementation("androidx.appcompat:appcompat:1.4.0")
84+
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.10")
85+
implementation("androidx.appcompat:appcompat:1.4.1")
8186
implementation("id.zelory:compressor:3.0.1")
8287
implementation("com.google.android.material:material:1.6.0-alpha03")
8388
implementation("androidx.fragment:fragment-ktx:1.4.0")
@@ -90,7 +95,7 @@ dependencies {
9095
implementation("androidx.viewpager2:viewpager2:1.0.0")
9196
implementation("androidx.recyclerview:recyclerview:1.2.1")
9297
implementation("androidx.constraintlayout:constraintlayout:2.1.3")
93-
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.0")
98+
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.10")
9499
implementation("androidx.exifinterface:exifinterface:1.3.3")
95100
implementation("androidx.palette:palette-ktx:1.0.0")
96101

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
1010

11+
<!-- <profileable android:shell="true"/>-->
12+
1113
<application
1214
android:name=".MyApp"
1315
android:allowBackup="true"

app/src/main/java/me/rosuh/easywatermark/MyApp.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import android.annotation.SuppressLint
44
import android.app.Application
55
import android.content.Context
66
import android.content.Intent
7-
import android.content.SharedPreferences
7+
import android.content.res.Configuration
88
import android.util.Log
99
import androidx.core.content.edit
10-
import com.google.android.material.color.DynamicColors
1110
import dagger.hilt.android.HiltAndroidApp
1211
import kotlinx.coroutines.*
1312
import me.rosuh.cmonet.CMonet
1413
import me.rosuh.easywatermark.data.repo.WaterMarkRepository
14+
import me.rosuh.easywatermark.ui.theme.ThemeManager
1515
import javax.inject.Inject
1616
import kotlin.system.exitProcess
1717

@@ -31,6 +31,11 @@ class MyApp : Application() {
3131
catchException()
3232
}
3333

34+
override fun onConfigurationChanged(newConfig: Configuration) {
35+
ThemeManager.onConfigurationChanged(newConfig)
36+
super.onConfigurationChanged(newConfig)
37+
}
38+
3439
private fun catchException() {
3540
Thread.setDefaultUncaughtExceptionHandler { t, e ->
3641
// Because intent limit data to 1mb, so that we should limit the stack track by magic number below

app/src/main/java/me/rosuh/easywatermark/data/repo/WaterMarkRepository.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,13 @@ class WaterMarkRepository @Inject constructor(
7979
}
8080

8181
private val imageListFlow: MutableStateFlow<List<ImageInfo>> =
82-
MutableStateFlow(emptyList<ImageInfo>())
82+
MutableStateFlow(emptyList())
8383

8484
val uriLivedData = imageListFlow.asLiveData()
8585

8686
val imageInfoList: List<ImageInfo>
8787
get() = uriLivedData.value ?: emptyList()
8888

89-
lateinit var text: String
90-
9189
suspend fun updateImageList(imageList: List<ImageInfo>) {
9290
imageListFlow.emit(imageList)
9391
}
@@ -174,6 +172,7 @@ class WaterMarkRepository @Inject constructor(
174172
const val SP_KEY_ENABLE_BOUNDS = "${SP_NAME}_key_enable_bounds"
175173
const val SP_KEY_ICON_URI = "${SP_NAME}_key_icon_uri"
176174
const val SP_KEY_WATERMARK_MODE = "${SP_NAME}_key_watermark_mode"
175+
const val SP_KEY_IMAGE_ROTATION = "${SP_NAME}_key_watermark_mode"
177176
const val MAX_TEXT_SIZE = 100f
178177
const val MAX_DEGREE = 360f
179178
const val MAX_HORIZON_GAP = 500

app/src/main/java/me/rosuh/easywatermark/ui/MainActivity.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class MainActivity : AppCompatActivity() {
146146

147147
override fun onWindowFocusChanged(hasFocus: Boolean) {
148148
super.onWindowFocusChanged(hasFocus)
149-
if (hasFocus){
149+
if (hasFocus) {
150150
hideSystemUI()
151151
}
152152
}
@@ -608,7 +608,13 @@ class MainActivity : AppCompatActivity() {
608608
Log.i("performFileSearch", result.exceptionOrNull()?.message ?: "No msg provided")
609609
}
610610
} else {
611-
GalleryFragment().show(supportFragmentManager, "GalleryFragment")
611+
GalleryFragment().apply {
612+
launchView.logoView.stop()
613+
doOnDismiss {
614+
launchView.logoView.start()
615+
}
616+
show(supportFragmentManager, "GalleryFragment")
617+
}
612618
}
613619
}
614620

app/src/main/java/me/rosuh/easywatermark/ui/MainViewModel.kt

Lines changed: 28 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,13 @@ import androidx.lifecycle.*
1515
import androidx.palette.graphics.Palette
1616
import dagger.hilt.android.lifecycle.HiltViewModel
1717
import id.zelory.compressor.Compressor
18-
import kotlinx.coroutines.*
19-
import kotlinx.coroutines.flow.*
18+
import kotlinx.coroutines.Dispatchers
19+
import kotlinx.coroutines.Job
20+
import kotlinx.coroutines.flow.SharingStarted
21+
import kotlinx.coroutines.flow.StateFlow
22+
import kotlinx.coroutines.flow.stateIn
23+
import kotlinx.coroutines.launch
24+
import kotlinx.coroutines.withContext
2025
import me.rosuh.easywatermark.BuildConfig
2126
import me.rosuh.easywatermark.MyApp
2227
import me.rosuh.easywatermark.R
@@ -26,15 +31,16 @@ import me.rosuh.easywatermark.data.repo.UserConfigRepository
2631
import me.rosuh.easywatermark.data.repo.WaterMarkRepository
2732
import me.rosuh.easywatermark.ui.widget.WaterMarkImageView
2833
import me.rosuh.easywatermark.utils.FileUtils.Companion.outPutFolderName
29-
import me.rosuh.easywatermark.utils.bitmap.*
34+
import me.rosuh.easywatermark.utils.bitmap.calculateInSampleSize
35+
import me.rosuh.easywatermark.utils.bitmap.decodeBitmapFromUri
36+
import me.rosuh.easywatermark.utils.bitmap.decodeSampledBitmapFromResource
3037
import me.rosuh.easywatermark.utils.ktx.applyConfig
3138
import me.rosuh.easywatermark.utils.ktx.formatDate
3239
import me.rosuh.easywatermark.utils.ktx.launch
3340
import java.io.File
3441
import java.io.FileNotFoundException
3542
import java.io.FileOutputStream
3643
import javax.inject.Inject
37-
import kotlin.math.ceil
3844

3945
@HiltViewModel
4046
class MainViewModel @Inject constructor(
@@ -82,6 +88,7 @@ class MainViewModel @Inject constructor(
8288

8389
private val tmpDrawableBounds by lazy { Rect() }
8490
private val drawableBounds by lazy { RectF() }
91+
var matrixValues = FloatArray(9)
8592
private val tmpSrcBounds by lazy { RectF() }
8693
private val tmpDstBounds by lazy { RectF() }
8794

@@ -177,24 +184,22 @@ class MainViewModel @Inject constructor(
177184
)
178185
imageInfo.width = mutableBitmap.width
179186
imageInfo.height = mutableBitmap.height
180-
if (waterMark.value == null) {
181-
return@withContext Result.failure(
182-
null,
183-
code = "-1",
184-
message = "config.value == null"
185-
)
186-
}
187+
val tmpConfig = waterMark.value ?: return@withContext Result.failure(
188+
null,
189+
code = "-1",
190+
message = "config.value == null"
191+
)
187192
imageInfo.inSample = inSample
188193
val canvas = Canvas(mutableBitmap)
189-
val tmpConfig = waterMark.value!!
190-
// generate matrxi of drawable
191-
val imageMatrix = generateMatrix(
192-
viewInfo,
193-
ceil((imageInfo.width.toDouble() / imageInfo.inSample)).toInt(),
194-
ceil((imageInfo.height.toDouble() / imageInfo.inSample)).toInt(),
195-
tmpDrawableBounds,
196-
tmpSrcBounds,
197-
tmpDstBounds
194+
// generate matrix of drawable
195+
val imageMatrix = WaterMarkImageView.adjustMatrix(
196+
Matrix(),
197+
viewInfo.width,
198+
viewInfo.height,
199+
viewInfo.paddingLeft,
200+
viewInfo.paddingTop,
201+
imageInfo.width,
202+
imageInfo.height
198203
)
199204
Log.i(
200205
"generateImage",
@@ -207,17 +212,10 @@ class MainViewModel @Inject constructor(
207212
bitmapH = ${mutableBitmap.height},
208213
""".trimIndent()
209214
)
210-
// map to drawable bounds
211-
imageMatrix.mapRect(drawableBounds, RectF(tmpDrawableBounds))
212-
drawableBounds.set(
213-
drawableBounds.left + viewInfo.paddingLeft,
214-
drawableBounds.top + viewInfo.paddingTop,
215-
drawableBounds.right + viewInfo.paddingRight,
216-
drawableBounds.bottom + viewInfo.paddingBottom,
217-
)
218215
// calculate the scale factor
219-
imageInfo.scaleX = mutableBitmap.width.toFloat() / drawableBounds.width()
220-
imageInfo.scaleY = mutableBitmap.height.toFloat() / drawableBounds.height()
216+
imageMatrix.getValues(matrixValues)
217+
imageInfo.scaleX = 1 / matrixValues[Matrix.MSCALE_X]
218+
imageInfo.scaleY = 1 / matrixValues[Matrix.MSCALE_X]
221219
val bitmapPaint = TextPaint().applyConfig(imageInfo, tmpConfig, isScale = false)
222220
val layoutPaint = Paint()
223221
layoutPaint.shader = when (waterMark.value?.markMode) {

app/src/main/java/me/rosuh/easywatermark/ui/about/AboutActivity.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@ class AboutActivity : AppCompatActivity() {
130130
}
131131

132132
binding.clDevContainer.backgroundTintList =
133-
ColorStateList.valueOf(this@AboutActivity.colorSecondlyContainer)
133+
ColorStateList.valueOf(this@AboutActivity.colorSecondaryContainer)
134134
binding.clDesignerContainer.backgroundTintList =
135-
ColorStateList.valueOf(this@AboutActivity.colorSecondlyContainer)
135+
ColorStateList.valueOf(this@AboutActivity.colorSecondaryContainer)
136136

137137
viewModel.waterMark.observe(this@AboutActivity) {
138138
switchDebug.isChecked = viewModel.waterMark.value?.enableBounds ?: false

0 commit comments

Comments
 (0)