Skip to content

Commit d03444d

Browse files
authored
Merge pull request #144 from rosuH/dev
v2.6.6
2 parents 0b2acb1 + 19645a7 commit d03444d

37 files changed

Lines changed: 179 additions & 67 deletions

File tree

app/build.gradle.kts

Lines changed: 6 additions & 6 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 = 20605
19-
versionName = "2.6.5"
18+
versionCode = 20606
19+
versionName = "2.6.6"
2020
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2121
setProperty("archivesBaseName", "$applicationId-v$versionName($versionCode)")
2222
}
@@ -72,12 +72,12 @@ dependencies {
7272
implementation("androidx.datastore:datastore-preferences:1.0.0")
7373
implementation("com.google.dagger:hilt-android:2.40.4")
7474
kapt("com.google.dagger:hilt-compiler:2.40.4")
75-
implementation("com.github.bumptech.glide:glide:4.12.0")
76-
kapt("com.github.bumptech.glide:compiler:4.12.0")
75+
implementation("com.github.bumptech.glide:glide:4.13.1")
76+
kapt("com.github.bumptech.glide:compiler:4.13.1")
7777
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.0")
7878
implementation("androidx.appcompat:appcompat:1.4.0")
7979
implementation("id.zelory:compressor:3.0.1")
80-
implementation("com.google.android.material:material:1.6.0-alpha01")
80+
implementation("com.google.android.material:material:1.6.0-alpha03")
8181
implementation("androidx.fragment:fragment-ktx:1.4.0")
8282
implementation("androidx.activity:activity-ktx:1.4.0")
8383
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1")
@@ -87,7 +87,7 @@ dependencies {
8787
implementation("com.github.skydoves:colorpickerview:2.2.3")
8888
implementation("androidx.viewpager2:viewpager2:1.0.0")
8989
implementation("androidx.recyclerview:recyclerview:1.2.1")
90-
implementation("androidx.constraintlayout:constraintlayout:2.1.2")
90+
implementation("androidx.constraintlayout:constraintlayout:2.1.3")
9191
implementation("org.jetbrains.kotlin:kotlin-stdlib:1.6.0")
9292
implementation("androidx.exifinterface:exifinterface:1.3.3")
9393
implementation("androidx.palette:palette-ktx:1.0.0")

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

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ import android.content.Intent
77
import android.content.Intent.ACTION_SEND
88
import android.content.pm.PackageManager
99
import android.content.res.ColorStateList
10+
import android.content.res.Configuration
1011
import android.graphics.Color
1112
import android.graphics.drawable.ColorDrawable
1213
import android.net.Uri
1314
import android.os.Build
1415
import android.os.Bundle
1516
import android.util.Log
1617
import android.view.*
18+
import android.view.View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
1719
import android.widget.Toast
1820
import androidx.activity.result.ActivityResultLauncher
1921
import androidx.activity.viewModels
@@ -48,7 +50,6 @@ import kotlin.collections.ArrayList
4850
@AndroidEntryPoint
4951
class MainActivity : AppCompatActivity() {
5052

51-
private lateinit var pickImageLauncher: ActivityResultLauncher<String>
5253
private lateinit var pickIconLauncher: ActivityResultLauncher<String>
5354
private val viewModel: MainViewModel by viewModels()
5455

@@ -143,6 +144,15 @@ class MainActivity : AppCompatActivity() {
143144
SaveImageBSDialogFragment.safetyHide(this@MainActivity.supportFragmentManager)
144145
}
145146

147+
override fun onWindowFocusChanged(hasFocus: Boolean) {
148+
super.onWindowFocusChanged(hasFocus)
149+
if (hasFocus){
150+
hideSystemUI()
151+
} else {
152+
showSystemUI()
153+
}
154+
}
155+
146156
private fun hideSystemUI() {
147157
// Enables regular immersive mode.
148158
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
@@ -185,10 +195,6 @@ class MainActivity : AppCompatActivity() {
185195
}
186196

187197
private fun registerResultCallback() {
188-
pickImageLauncher =
189-
registerForActivityResult(MultiPickContract()) { uri: List<Uri?>? ->
190-
handleActivityResult(REQ_CODE_PICK_IMAGE, uri)
191-
}
192198
pickIconLauncher =
193199
registerForActivityResult(PickImageContract()) { uri: Uri? ->
194200
handleActivityResult(REQ_PICK_ICON, listOf(uri))
@@ -250,6 +256,7 @@ class MainActivity : AppCompatActivity() {
250256
if (it == null) {
251257
return@observe
252258
}
259+
Log.i("initObserver", "$it")
253260
launchView.post {
254261
launchView.ivPhoto.config = it
255262
}
@@ -308,9 +315,12 @@ class MainActivity : AppCompatActivity() {
308315
((launchView.ivPhoto.background as? ColorDrawable)?.color ?: Color.BLACK).toColor(
309316
bgColor
310317
) {
311-
launchView.rvPanel.setBackgroundColor(it.animatedValue as Int)
312-
launchView.setBackgroundColor(it.animatedValue as Int)
313-
setStatusBarColor(it.animatedValue as Int)
318+
val c = it.animatedValue as Int
319+
if (launchView.isEdit()) {
320+
launchView.rvPanel.setBackgroundColor(it.animatedValue as Int)
321+
setActivityBackground(c)
322+
setStatusBarColor(c, isInEditMode = true)
323+
}
314324
}
315325
funcAdapter.textColor.toColor(titleTextColor) {
316326
val c = it.animatedValue as Int
@@ -334,6 +344,8 @@ class MainActivity : AppCompatActivity() {
334344

335345
@SuppressLint("ClickableViewAccessibility")
336346
private fun initView() {
347+
setActivityBackground(ContextCompat.getColor(this, R.color.md_theme_dark_background))
348+
setStatusBarColor(ContextCompat.getColor(this, R.color.md_theme_dark_background), false)
337349
// prepare MotionLayout
338350
launchView.setListener {
339351
onModeChange { _, newMode ->
@@ -538,9 +550,25 @@ class MainActivity : AppCompatActivity() {
538550
}
539551
}
540552

541-
private fun setStatusBarColor(color: Int) {
553+
private fun setStatusBarColor(color: Int, isInEditMode: Boolean) {
542554
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
543555
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
556+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
557+
val systemUiAppearance = if (isInEditMode && this.isNight()) {
558+
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
559+
} else {
560+
0
561+
}
562+
window.insetsController?.setSystemBarsAppearance(systemUiAppearance,
563+
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS)
564+
} else {
565+
val systemUiVisibilityFlags = if (!isInEditMode && !this.isNight()) {
566+
window.decorView.systemUiVisibility or SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
567+
} else {
568+
window.decorView.systemUiVisibility and SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
569+
}
570+
window.decorView.systemUiVisibility = systemUiVisibilityFlags
571+
}
544572
window.statusBarColor = color
545573
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
546574
window.findViewById<View>(android.R.id.content)?.foreground = null
@@ -583,9 +611,6 @@ class MainActivity : AppCompatActivity() {
583611
val mime = "image/*"
584612
val result = kotlin.runCatching {
585613
when (requestCode) {
586-
REQ_CODE_PICK_IMAGE -> {
587-
pickImageLauncher.launch(mime)
588-
}
589614
REQ_PICK_ICON -> {
590615
pickIconLauncher.launch(mime)
591616
}
@@ -698,15 +723,19 @@ class MainActivity : AppCompatActivity() {
698723
launchView.ivPhoto.reset()
699724
bgTransformAnimator?.cancel()
700725
(launchView.background as? ColorDrawable?)?.color?.toColor(
701-
this.colorBackground
726+
ContextCompat.getColor(this, R.color.md_theme_dark_background)
702727
) {
703728
val c = it.animatedValue as Int
704-
setStatusBarColor(c)
705-
launchView.setBackgroundColor(c)
729+
setActivityBackground(c)
730+
setStatusBarColor(c, isInEditMode = false)
706731
}
707732
hideDetailPanel()
708733
}
709734

735+
private fun setActivityBackground(color: Int){
736+
(launchView.parent as? View?)?.setBackgroundColor(color)
737+
}
738+
710739
private fun selectTab(index: Int) {
711740
launchView.tabLayout.getTabAt(index).let {
712741
launchView.tabLayout.selectTab(it)

app/src/main/java/me/rosuh/easywatermark/ui/dialog/GalleryFragment.kt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,39 @@ package me.rosuh.easywatermark.ui.dialog
22

33
import android.app.Dialog
44
import android.content.DialogInterface
5+
import android.net.Uri
56
import android.os.Bundle
67
import android.view.LayoutInflater
78
import android.view.ViewGroup
9+
import android.widget.Toast
10+
import androidx.activity.result.ActivityResultLauncher
11+
import androidx.core.content.ContextCompat
812
import androidx.recyclerview.widget.GridLayoutManager
913
import com.google.android.material.bottomsheet.BottomSheetBehavior
1014
import com.google.android.material.bottomsheet.BottomSheetDialog
1115
import me.rosuh.easywatermark.R
16+
import me.rosuh.easywatermark.data.repo.WaterMarkRepository
1217
import me.rosuh.easywatermark.databinding.FragmentGalleryBinding
18+
import me.rosuh.easywatermark.ui.MainActivity
1319
import me.rosuh.easywatermark.ui.adapter.GalleryAdapter
1420
import me.rosuh.easywatermark.ui.base.BaseBindBSDFragment
21+
import me.rosuh.easywatermark.utils.FileUtils
22+
import me.rosuh.easywatermark.utils.MultiPickContract
23+
import me.rosuh.easywatermark.utils.ktx.colorOnSurface
1524

1625

1726
class GalleryFragment : BaseBindBSDFragment<FragmentGalleryBinding>() {
1827

1928
private val galleryAdapter by lazy { GalleryAdapter() }
2029

30+
private lateinit var pickImageLauncher: ActivityResultLauncher<String>
31+
2132
override fun onCreate(savedInstanceState: Bundle?) {
2233
super.onCreate(savedInstanceState)
34+
pickImageLauncher =
35+
registerForActivityResult(MultiPickContract()) { uri: List<Uri?>? ->
36+
handleActivityResult(uri)
37+
}
2338
shareViewModel.query(requireContext().contentResolver)
2439
}
2540

@@ -57,6 +72,23 @@ class GalleryFragment : BaseBindBSDFragment<FragmentGalleryBinding>() {
5772
setHasFixedSize(true)
5873
}
5974

75+
// rootView.ivSysImage.apply {
76+
// setOnClickListener {
77+
// val mime = "image/*"
78+
// pickImageLauncher.launch(mime)
79+
// }
80+
// }
81+
rootView.topAppBar.setOnMenuItemClickListener {
82+
when (it.itemId) {
83+
R.id.iv_sys_image -> {
84+
val mime = "image/*"
85+
pickImageLauncher.launch(mime)
86+
return@setOnMenuItemClickListener true
87+
}
88+
}
89+
return@setOnMenuItemClickListener false
90+
}
91+
6092
shareViewModel.galleryPickedImageList.observe(this) {
6193
galleryAdapter.submitList(it)
6294
}
@@ -77,4 +109,28 @@ class GalleryFragment : BaseBindBSDFragment<FragmentGalleryBinding>() {
77109
super.onDismiss(dialog)
78110
shareViewModel.resetGalleryData()
79111
}
112+
113+
private fun handleActivityResult(list: List<Uri?>?) {
114+
val finalList = list?.filterNotNull()?.filter {
115+
FileUtils.isImage(requireContext().contentResolver, it)
116+
} ?: emptyList()
117+
if (finalList.isEmpty()) {
118+
Toast.makeText(
119+
requireContext(),
120+
getString(R.string.tips_do_not_choose_image),
121+
Toast.LENGTH_SHORT
122+
).show()
123+
return
124+
}
125+
if (FileUtils.isImage(requireContext().contentResolver, finalList.first())) {
126+
shareViewModel.updateImageList(finalList)
127+
dismissAllowingStateLoss()
128+
} else {
129+
Toast.makeText(
130+
requireContext(),
131+
getString(R.string.tips_choose_other_file_type),
132+
Toast.LENGTH_SHORT
133+
).show()
134+
}
135+
}
80136
}

app/src/main/java/me/rosuh/easywatermark/ui/widget/LaunchView.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import android.view.Gravity
99
import android.view.MotionEvent
1010
import android.view.ViewGroup
1111
import android.widget.ImageView
12+
import androidx.core.content.ContextCompat
1213
import androidx.core.view.children
1314
import androidx.core.view.isVisible
1415
import androidx.core.view.setPadding
@@ -79,7 +80,6 @@ class LaunchView : CustomViewGroup {
7980
it.setMargins(0, 0, 16.dp, 0)
8081
}
8182
setImageResource(R.drawable.ic_about)
82-
imageTintList = ColorStateList.valueOf(context.colorPrimary)
8383
}
8484
}
8585

@@ -232,6 +232,7 @@ class LaunchView : CustomViewGroup {
232232
init {
233233
clipChildren = false
234234
clipToPadding = false
235+
// setBackgroundColor(ContextCompat.getColor(context, R.color.md_theme_dark_background))
235236
launchViews.forEach {
236237
it.isVisible = false
237238
addView(it)
@@ -386,6 +387,8 @@ class LaunchView : CustomViewGroup {
386387
return animate
387388
}
388389

390+
fun isEdit(): Boolean = mode == ViewMode.Editor
391+
389392
fun setListener(block: LaunchViewListenerBuilder.() -> Unit) {
390393
launchViewListener = LaunchViewListenerBuilder().also(block)
391394
}

app/src/main/java/me/rosuh/easywatermark/ui/widget/WaterMarkImageView.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ class WaterMarkImageView : androidx.appcompat.widget.AppCompatImageView, Corouti
8383

8484
var config: WaterMark? = null
8585
set(value) {
86+
if (field == value) {
87+
return
88+
}
8689
field = value
8790
if (curImageInfo.uri.toString().isBlank()) return
8891
field?.let { applyNewConfig(false, it, curImageInfo) }

0 commit comments

Comments
 (0)