Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[Add]
- Support alpha adjust seekBar.
[Update]
- Disable Viewpager touch gestures.
[Fix]
- Try to hiding SaveImageBSDialogFragment.
  • Loading branch information
rosuH committed Sep 3, 2020
1 parent db7efbd commit 07c4e32
Show file tree
Hide file tree
Showing 10 changed files with 163 additions and 75 deletions.
3 changes: 3 additions & 0 deletions app/src/main/java/me/rosuh/easywatermark/ui/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ class MainActivity : AppCompatActivity() {
cl_root.setTransition(R.id.transition_launch)
cl_root.transitionToEnd()
checkHadCrash()
// Activity was recycled but dialog still showing in some case?
SaveImageBSDialogFragment.safetyHide(this@MainActivity.supportFragmentManager)
}
}

Expand Down Expand Up @@ -229,6 +231,7 @@ class MainActivity : AppCompatActivity() {

val pagerAdapter = ControlPanelPagerAdapter(this, fragmentArray)
vp_control_panel.apply {
isUserInputEnabled = false
offscreenPageLimit = 2
adapter = pagerAdapter
}
Expand Down
9 changes: 0 additions & 9 deletions app/src/main/java/me/rosuh/easywatermark/ui/MainViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import android.net.Uri
import android.os.Build
import android.os.Environment
import android.provider.MediaStore
import android.util.Log
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
Expand Down Expand Up @@ -372,19 +371,11 @@ class MainViewModel : ViewModel() {
input?.copyTo(output)
}
}
Log.i(
"compressImg",
"Before compress: file ${tmpFile.absolutePath}, length = ${tmpFile.length()}"
)
val compressedFile = Compressor.compress(activity, tmpFile)
// clear tmp files
if (tmpFile.exists()) {
tmpFile.delete()
}
Log.i(
"compressImg",
"After compress: compressedFile ${compressedFile.absolutePath}, length = ${compressedFile.length()}"
)
try {
val compressedFileUri = FileProvider.getUriForFile(
activity,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,12 @@ class SaveImageBSDialogFragment : BottomSheetDialogFragment() {
return SaveImageBSDialogFragment()
}

fun safetyHide(manager: FragmentManager) {
kotlin.runCatching {
(manager.findFragmentByTag(TAG) as? SaveImageBSDialogFragment)?.dismissAllowingStateLoss()
}
}

fun safetyShow(manager: FragmentManager) {
try {
val f = manager.findFragmentByTag(TAG) as? SaveImageBSDialogFragment
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,16 +68,16 @@ class ContentFragment : BaseFragment() {
with(shareViewModel.config.value?.textSize ?: 14f) {
progress = this.toInt()
}
setOnSeekBarChangeListener(object : DetectedPerformanceSeekBarListener(
config
setOnSeekBarChangeListener(object : DetectedPerformanceSeekBarListener(config) {

) {
}.apply {
inTimeAction = { _: SeekBar?, _: Int, _: Boolean ->
tvContentSize.text = progress.toString()
}
postAction = { _: SeekBar?, _: Int ->
shareViewModel.updateTextSize(progress.toFloat())
postAction = { _: SeekBar?, _: Int, fromUser: Boolean ->
if (fromUser) {
shareViewModel.updateTextSize(progress.toFloat())
}
}
})
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class LayoutFragment : BaseFragment() {
inTimeAction = { seekBar: SeekBar?, _: Int, _: Boolean ->
tvProgressHorizon.text = seekBar?.progress.toString()
}
postAction = { seekBar: SeekBar?, _: Int ->
postAction = { seekBar: SeekBar?, _: Int, _ ->
shareViewModel.updateHorizon(seekBar?.progress ?: 0)
}
})
Expand All @@ -54,7 +54,7 @@ class LayoutFragment : BaseFragment() {
tvProgressVertical.text =
seekBar?.progress.toString()
}
postAction = { seekBar: SeekBar?, _: Int ->
postAction = { seekBar: SeekBar?, _: Int, _ ->
shareViewModel.updateVertical(seekBar?.progress ?: 0)
}
})
Expand Down
48 changes: 46 additions & 2 deletions app/src/main/java/me/rosuh/easywatermark/ui/panel/StyleFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,32 @@ class StyleFragment : BaseFragment() {
inTimeAction = { _: SeekBar?, _: Int, _: Boolean ->
tvDegree.text = "${shareViewModel.config.value?.degree ?: 0}°"
}
postAction =
{ _: SeekBar?, _: Int -> shareViewModel.updateDegree(progress.toFloat()) }
postAction = { _: SeekBar?, _: Int, fromUser: Boolean ->
if (fromUser) {
shareViewModel.updateDegree(progress.toFloat())
}
}
})
}

val tvAlpha = root.findViewById<TextView>(R.id.tv_tips_alpha).apply {
text = "${getAlphaValue()}%"
}
val sbAlpha = root.findViewById<SeekBar>(R.id.sb_alpha).apply {
progress = getAlphaValue()
setOnSeekBarChangeListener(object :
DetectedPerformanceSeekBarListener(
config
) {
}.apply {
inTimeAction = { _: SeekBar?, p: Int, _: Boolean ->
tvAlpha.text = "${p}%"
}
postAction = { _: SeekBar?, p: Int, fromUser: Boolean ->
if (fromUser) {
shareViewModel.updateAlpha((p.toFloat() / 100 * 255).toInt())
}
}
})
}

Expand All @@ -95,9 +119,29 @@ class StyleFragment : BaseFragment() {
}
}
}
initObserver(sbAlpha, tvAlpha)
return root
}

private fun getAlphaValue(): Int {
return ((shareViewModel.config.value?.alpha ?: 255).toFloat() / 255 * 100).toInt()
.coerceAtLeast(0).coerceAtMost(100)
}

private fun initObserver(
sbAlpha: SeekBar,
tvAlpha: TextView
) {
shareViewModel.config.observe(viewLifecycleOwner, {
with(it.alpha) {
val intAlpha =
(this.toFloat() / 255 * 100).toInt().coerceAtLeast(0).coerceAtMost(100)
sbAlpha.progress = intAlpha
tvAlpha.text = "${intAlpha}%"
}
})
}

private fun showColorPickerDialog(adapter: ColorPreviewAdapter) {
ColorPickerDialog.Builder(
activity,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ open class DetectedPerformanceSeekBarListener(

var inTimeAction: (SeekBar?, Int, Boolean) -> Unit = { _, _, _ -> }

var postAction: (SeekBar?, Int) -> Unit = { _, _ -> }
var postAction: (SeekBar?, Int, Boolean) -> Unit = { _, _, _ -> }

private var isHighPerformancePredicate: () -> Boolean = {
config?.markMode == WaterMarkConfig.MarkMode.Text
Expand All @@ -32,7 +32,7 @@ open class DetectedPerformanceSeekBarListener(

override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
if (isHighPerformancePredicate()) {
seekBar?.progress?.let { postAction.invoke(seekBar, it) }
seekBar?.progress?.let { postAction.invoke(seekBar, it, fromUser) }
}
inTimeAction.invoke(seekBar, progress, fromUser)
}
Expand All @@ -43,7 +43,7 @@ open class DetectedPerformanceSeekBarListener(

override fun onStopTrackingTouch(seekBar: SeekBar?) {
if (!isHighPerformancePredicate()) {
seekBar?.progress?.let { postAction.invoke(seekBar, it) }
seekBar?.progress?.let { postAction.invoke(seekBar, it, true) }
}
}

Expand Down
150 changes: 96 additions & 54 deletions app/src/main/res/layout/fragment_style.xml
Original file line number Diff line number Diff line change
@@ -1,66 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="20dp"
tools:background="#161616">
android:layout_height="match_parent"
android:animateLayoutChanges="true"
android:paddingBottom="12dp"
android:scrollbars="vertical">

<TextView
android:id="@+id/tv_title_color"
style="@style/AppTheme.TitleText"
android:layout_width="wrap_content"
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/title_text_color"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
android:padding="20dp"
tools:background="#161616">

<TextView
android:id="@+id/tv_title_color"
style="@style/AppTheme.TitleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/title_text_color"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintTop_toBottomOf="@+id/tv_title_color"
tools:itemCount="4"
tools:listitem="@layout/item_color_preview"
tools:orientation="horizontal" />

<TextView
android:id="@+id/tv_title_degree"
style="@style/AppTheme.TitleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/title_text_rotate"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rv_color" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_title_color"
tools:itemCount="4"
tools:listitem="@layout/item_color_preview"
tools:orientation="horizontal" />

<TextView
android:id="@+id/tv_tips_degree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text_zero_degree"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="@+id/tv_title_degree"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_title_degree" />
<TextView
android:id="@+id/tv_title_alpha"
style="@style/AppTheme.TitleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/style_alpha"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rv_color" />

<TextView
android:id="@+id/tv_tips_alpha"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="100"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="@+id/tv_title_alpha"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_title_alpha" />

<androidx.appcompat.widget.AppCompatSeekBar
android:id="@+id/sb_alpha"
style="@style/MySeekBarStyle"
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_marginTop="10dp"
android:background="#fff"
android:max="100"
android:progress="100"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_title_alpha"
app:layout_constraintTop_toBottomOf="@+id/tv_tips_alpha" />

<TextView
android:id="@+id/tv_title_degree"
style="@style/AppTheme.TitleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/title_text_rotate"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/sb_alpha" />

<TextView
android:id="@+id/tv_tips_degree"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text_zero_degree"
android:textAlignment="center"
app:layout_constraintBottom_toBottomOf="@+id/tv_title_degree"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_title_degree" />

<androidx.appcompat.widget.AppCompatSeekBar
android:id="@+id/sb_degree"
style="@style/MySeekBarStyle"
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_marginTop="10dp"
android:background="#fff"
android:max="360"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_title_degree"
app:layout_constraintTop_toBottomOf="@+id/tv_title_degree" />

<androidx.appcompat.widget.AppCompatSeekBar
android:id="@+id/sb_degree"
style="@style/MySeekBarStyle"
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_marginTop="10dp"
android:background="#fff"
android:max="360"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/tv_title_degree"
app:layout_constraintTop_toBottomOf="@+id/tv_title_degree" />
</androidx.constraintlayout.widget.ConstraintLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
1 change: 1 addition & 0 deletions app/src/main/res/values-en/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,5 @@
<string name="tip_not_mail_found">It seems that there is no mail client installed, you can actively paste the error message to the app market or Github</string>
<string name="tips_content_size_performance">The larger the size, the more demanding the real-time preview performance.</string>
<string name="config_default_water_mark_text">👋Photos are for testing purposes only.</string>
<string name="style_alpha">Alpha</string>
</resources>
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -69,4 +69,5 @@
<string name="email_subject" translatable="false">[EasyWaterMark] Crash info</string>
<string name="tips_content_size_performance">尺寸越大,实时预览性能要求越高</string>
<string name="config_default_water_mark_text">👋图片仅供测试,请勿作其他用途</string>
<string name="style_alpha">透明度</string>
</resources>

0 comments on commit 07c4e32

Please sign in to comment.