diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 709494f..84cbfda 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -46,22 +46,22 @@ jobs: echo "APK_FILE_X86=$(find app/build/outputs/apk -name '*x86*.apk')" >> $GITHUB_ENV echo "APK_FILE_X64=$(find app/build/outputs/apk -name '*x64*.apk')" >> $GITHUB_ENV - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 name: Upload apk (arm64-v8a) with: name: app-arm64-v8a-release path: ${{ env.APK_FILE }} - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 name: Upload apk (armeabi-v7a) with: name: app-armeabi-v7a-release path: ${{ env.APK_FILE_ARMV7 }} - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 name: Upload apk (x86_64) with: name: app-x86_64-release path: ${{ env.APK_FILE_X64 }} - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 name: Upload apk (x86) with: name: app-x86-release @@ -130,7 +130,7 @@ jobs: - telegram-bot-api steps: - name: Download Artifacts - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: path: artifacts - name: Download Telegram Bot API Binary @@ -170,14 +170,14 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Clone Telegram Bot API run: | git clone --recursive https://github.com/tdlib/telegram-bot-api.git git status telegram-bot-api >> telegram-bot-api-status - name: Cache Bot API Binary id: cache-bot-api - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: telegram-bot-api-binary key: CI-telegram-bot-api-${{ hashFiles('telegram-bot-api-status') }} diff --git a/app/build.gradle b/app/build.gradle index 591c742..7dc1443 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,13 +6,13 @@ def keystoreProperties = new Properties() keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) android { - compileSdk = 34 + compileSdk = 35 defaultConfig { applicationId "com.maary.shareas" minSdkVersion 29 - targetSdkVersion 34 - versionCode 4 - versionName "3.0-alpha-240504" + targetSdkVersion 35 + versionCode 5 + versionName "3.0-alpha-241117" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildFeatures { @@ -80,48 +80,44 @@ android { print(output.outputFileName) print("--------") } -// if (output.outputFileName.contains("x86_64")){ -// def newName = output.outputFile.name -// output.outputFileName.replace("x86_64", "x64") -// } } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'androidx.appcompat:appcompat:1.6.1' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'androidx.core:core-ktx:1.13.0' - implementation 'androidx.activity:activity:1.8.2' - implementation "androidx.datastore:datastore-preferences:1.0.0" + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.0' + implementation 'androidx.core:core-ktx:1.15.0' + implementation 'androidx.activity:activity:1.9.3' + implementation "androidx.datastore:datastore-preferences:1.1.1" // optional - RxJava2 support - implementation "androidx.datastore:datastore-preferences-rxjava2:1.0.0" + implementation "androidx.datastore:datastore-preferences-rxjava2:1.1.1" // optional - RxJava3 support - implementation "androidx.datastore:datastore-preferences-rxjava3:1.0.0" - implementation "androidx.fragment:fragment-ktx:1.6.2" + implementation "androidx.datastore:datastore-preferences-rxjava3:1.1.1" + implementation "androidx.fragment:fragment-ktx:1.8.5" - implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.17.3' - implementation 'com.microsoft.onnxruntime:onnxruntime-extensions-android:0.9.0' + implementation 'com.microsoft.onnxruntime:onnxruntime-android:1.20.0' + implementation 'com.microsoft.onnxruntime:onnxruntime-extensions-android:0.13.0' - implementation("androidx.transition:transition:1.5.0-rc02") - implementation("androidx.transition:transition-ktx:1.5.0-rc02") + implementation("androidx.transition:transition:1.5.1") + implementation("androidx.transition:transition-ktx:1.5.1") - implementation "androidx.fragment:fragment:1.7.0-rc02" + implementation "androidx.fragment:fragment:1.8.5" // Kotlin - implementation "androidx.fragment:fragment-ktx:1.7.0-rc02" + implementation "androidx.fragment:fragment-ktx:1.8.5" testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.5' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + androidTestImplementation 'androidx.test.ext:junit:1.2.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' implementation 'io.github.hokofly:hoko-blur:1.5.3' - implementation 'com.google.android.material:material:1.12.0-rc01' + implementation 'com.google.android.material:material:1.13.0-alpha07' - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0" - implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.7.0" - implementation "androidx.activity:activity-ktx:1.8.2" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7" + implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.7" + implementation "androidx.activity:activity-ktx:1.9.3" implementation 'com.github.bumptech.glide:glide:4.16.0' diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index 09fac2a..fc8aecc 100644 Binary files a/app/src/main/ic_launcher-playstore.png and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/maary/shareas/WallpaperViewModel.kt b/app/src/main/java/com/maary/shareas/WallpaperViewModel.kt index ca1f0f6..007bd56 100644 --- a/app/src/main/java/com/maary/shareas/WallpaperViewModel.kt +++ b/app/src/main/java/com/maary/shareas/WallpaperViewModel.kt @@ -76,12 +76,17 @@ class WallpaperViewModel : ViewModel() { var processHome = true var processLock = true + private var cropped: Bitmap? = null + private var bitmap: Bitmap? = null set(value) { Log.v("WVM", "BITMAP SET") field = value - bakBitmap.bitmapHome = value - bakBitmap.bitmapLock = value + cropped = value + bakBitmap = bakBitmap.copy( + bitmapHome = value, + bitmapLock = value + ) _viewerState.value = bakBitmap } @@ -248,9 +253,9 @@ class WallpaperViewModel : ViewModel() { if (processHome && processLock) { bakBitmap = _viewerState.value } else if (processHome) { - bakBitmap.bitmapHome = _viewerState.value.bitmapHome + bakBitmap = bakBitmap.copy(bitmapHome = _viewerState.value.bitmapHome) } else if (processLock) { - bakBitmap.bitmapLock = _viewerState.value.bitmapLock + bakBitmap= bakBitmap.copy(bitmapLock = _viewerState.value.bitmapLock) } } @@ -275,8 +280,10 @@ class WallpaperViewModel : ViewModel() { bitmapLock = bitmap ) } - bakBitmap.bitmapLock = bitmap - bakBitmap.bitmapHome = bitmap + bakBitmap = bakBitmap.copy( + bitmapHome = bitmap, + bitmapLock = bitmap + ) } /** @@ -843,15 +850,18 @@ class WallpaperViewModel : ViewModel() { val resultWidth = originalWidth * scale val resultHeight = originalHeight * scale - var resultBitmap = Bitmap.createBitmap(resultWidth, resultHeight, bitmapRaw!!.config) - val canvas = Canvas(resultBitmap) + var resultBitmap = + bitmapRaw?.config?.let { Bitmap.createBitmap(resultWidth, resultHeight, it) } + val canvas = resultBitmap?.let { Canvas(it) } var currentX = 0 var currentY = 0 for (processedTileDeferred in processedTilesDeferred) { val processedTile = processedTileDeferred.await() if (processedTile != null) { - canvas.drawBitmap(processedTile, currentX.toFloat(), currentY.toFloat(), null) + if (canvas != null) { + canvas.drawBitmap(processedTile, currentX.toFloat(), currentY.toFloat(), null) + } currentX += processedTile.width if (currentX >= resultWidth) { currentX = 0 @@ -860,7 +870,7 @@ class WallpaperViewModel : ViewModel() { } } - resultBitmap = fitBitmapToScreen(resultBitmap, context) + resultBitmap = resultBitmap?.let { fitBitmapToScreen(it, context) } _viewerState.update { current -> current.copy( @@ -892,4 +902,39 @@ class WallpaperViewModel : ViewModel() { } return false } + + fun scrollToStart(): Triple { + return Triple( + ScrollableImageView.HORIZONTAL, + 0, + 0 + ) + } + + fun scrollToEnd(): Triple { + return Triple( + ScrollableImageView.HORIZONTAL, + bitmap!!.width, + 0 + ) + } + + fun crop( + start: Int = 0, + end: Int = cropped!!.width) { + val safeStart = start.coerceAtLeast(0) // 起始点不能小于 0 + val safeEnd = end.coerceAtMost(cropped!!.width) // 终止点不能超过 bitmap 的宽度 + if (safeStart >= safeEnd) { + throw IllegalArgumentException("Start must be less than end") + } + + // 计算裁剪的宽度和高度 + val width = safeEnd - safeStart + val height = cropped!!.height + + // 裁剪 bitmap + cropped = Bitmap.createBitmap(cropped!!, safeStart, 0, width, height) +// bitmap = cropped + updateViewerState(cropped, cropped) + } } \ No newline at end of file diff --git a/app/src/main/java/com/maary/shareas/activity/MainActivity.java b/app/src/main/java/com/maary/shareas/activity/MainActivity.java index 53f9a33..822868f 100644 --- a/app/src/main/java/com/maary/shareas/activity/MainActivity.java +++ b/app/src/main/java/com/maary/shareas/activity/MainActivity.java @@ -140,6 +140,7 @@ protected void onCreate(Bundle savedInstanceState) { //setup the fab click listener binding.fab.setOnClickListener(view -> { cord = binding.mainView.getVisibleRect(); + builder.setTitle(R.string.setAs); binding.bottomAppBar.getMenu().getItem(MENU_RESET).setEnabled(true); AlertDialog dialog = builder.create(); dialog.show(); @@ -147,6 +148,7 @@ protected void onCreate(Bundle savedInstanceState) { binding.fab.setOnLongClickListener(view -> { cord = null; + builder.setTitle(R.string.setFullAs); AlertDialog dialog = builder.create(); dialog.show(); return false; @@ -202,7 +204,7 @@ public void onColorsChanged(@Nullable WallpaperColors colors, int which) { //setup AlertDialog builder builder = new MaterialAlertDialogBuilder(context); - builder.setTitle(R.string.setAs); +// builder.setTitle(R.string.setAs); String[] options = { getResources().getString(R.string.home), diff --git a/app/src/main/java/com/maary/shareas/data/ViewerBitmap.kt b/app/src/main/java/com/maary/shareas/data/ViewerBitmap.kt index f1cef4c..345c821 100644 --- a/app/src/main/java/com/maary/shareas/data/ViewerBitmap.kt +++ b/app/src/main/java/com/maary/shareas/data/ViewerBitmap.kt @@ -3,6 +3,6 @@ package com.maary.shareas.data import android.graphics.Bitmap data class ViewerBitmap( - var bitmapHome: Bitmap? = null, - var bitmapLock: Bitmap? = null + val bitmapHome: Bitmap? = null, + val bitmapLock: Bitmap? = null ) \ No newline at end of file diff --git a/app/src/main/java/com/maary/shareas/fragment/EditorFragment.kt b/app/src/main/java/com/maary/shareas/fragment/EditorFragment.kt index 50ba87d..188a468 100644 --- a/app/src/main/java/com/maary/shareas/fragment/EditorFragment.kt +++ b/app/src/main/java/com/maary/shareas/fragment/EditorFragment.kt @@ -21,6 +21,7 @@ import com.maary.shareas.WallpaperViewModel import com.maary.shareas.databinding.FragmentEditorBinding import com.maary.shareas.fragment.editor.BlurFragment import com.maary.shareas.fragment.editor.BrightnessFragment +import com.maary.shareas.fragment.editor.CropFragment import com.maary.shareas.fragment.editor.PaintFragment import com.maary.shareas.fragment.editor.UpscaleFragment import kotlinx.coroutines.launch @@ -75,6 +76,7 @@ class EditorFragment : Fragment() { binding.editorButtonBlur.backgroundTintList = colorStateList binding.editorButtonBrightness.backgroundTintList = colorStateList binding.editorButtonFill.backgroundTintList = colorStateList + binding.editorButtonCrop.backgroundTintList = colorStateList binding.editorButtonUpscale.backgroundTintList = colorStateList binding.appbarButtonCancel.setBackgroundColor(viewModel.getSecondaryColor(requireContext())) binding.appbarButtonConfirm.setBackgroundColor(viewModel.getSecondaryColor(requireContext())) @@ -177,6 +179,10 @@ class EditorFragment : Fragment() { loadFragment(PaintFragment()) } + binding.editorButtonCrop.setOnClickListener { + loadFragment(CropFragment()) + } + binding.editorButtonUpscale.setOnClickListener { loadFragment(UpscaleFragment()) } diff --git a/app/src/main/java/com/maary/shareas/fragment/editor/CropFragment.kt b/app/src/main/java/com/maary/shareas/fragment/editor/CropFragment.kt new file mode 100644 index 0000000..3b6e14b --- /dev/null +++ b/app/src/main/java/com/maary/shareas/fragment/editor/CropFragment.kt @@ -0,0 +1,102 @@ +package com.maary.shareas.fragment.editor + +import android.content.res.ColorStateList +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.activity.OnBackPressedCallback +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import com.maary.shareas.R +import com.maary.shareas.WallpaperViewModel +import com.maary.shareas.databinding.FragmentBlurBinding +import com.maary.shareas.databinding.FragmentCropBinding +import com.maary.shareas.view.ScrollableImageView +import kotlinx.coroutines.launch + +class CropFragment: Fragment() { + + private val viewModel: WallpaperViewModel by activityViewModels() + private var _binding: FragmentCropBinding? = null + private val binding get() = _binding!! + private lateinit var onBackPressedCallback: OnBackPressedCallback + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + onBackPressedCallback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + viewModel.abortEdit(null) + requireParentFragment().childFragmentManager.beginTransaction().remove(this@CropFragment).commit() + requireParentFragment().childFragmentManager.popBackStack() + // 获取包含当前 Fragment 的布局 + val containingLayout = requireView().parent.parent.parent as? View + // 如果布局不为空,则隐藏布局 + containingLayout?.visibility = View.INVISIBLE + isEnabled = false + } + } + requireActivity().onBackPressedDispatcher.addCallback(this, onBackPressedCallback) + + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + viewModel.primaryColorState.collect { + if (viewModel.primary != null) { + val colorValue = viewModel.getPrimaryColor(requireContext()) + val colorValueSec = viewModel.getSecondaryColor(requireContext()) + val colorValueOnPri = viewModel.getPrimaryColorAlt(requireContext()) + val colorStateList = ColorStateList.valueOf(colorValue) + val colorStateListSec = ColorStateList.valueOf(colorValueSec) + val colorStateListOnPri = ColorStateList.valueOf(colorValueOnPri) + binding.buttonLeftEdge.backgroundTintList = colorStateList + binding.buttonRightEdge.backgroundTintList = colorStateList + binding.buttonConfirmEdge.backgroundTintList = colorStateListSec + binding.buttonLeftEdge.iconTint = colorStateListOnPri + binding.buttonRightEdge.iconTint = colorStateListOnPri + } + } + } + } + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + _binding = FragmentCropBinding.inflate(inflater, container, false) + binding.buttonConfirmEdge.isEnabled = false + + val imageView = requireActivity().findViewById(R.id.main_view) + + binding.buttonLeftEdge.setOnClickListener { + binding.buttonConfirmEdge.isEnabled = true + val param = viewModel.scrollToStart() + imageView.scrollImageTo(param.first, param.second, param.third) + } + + binding.buttonRightEdge.setOnClickListener { + binding.buttonConfirmEdge.isEnabled = true + val param = viewModel.scrollToEnd() + imageView.scrollImageTo(param.first, param.second, param.third) + } + + binding.buttonConfirmEdge.setOnClickListener { + if (binding.buttonLeftEdge.isChecked) { + viewModel.crop(start = imageView.getVisibleRectStart()) + } + if (binding.buttonRightEdge.isChecked) { + viewModel.crop(end = imageView.getVisibleRectEnd()) + } + binding.buttonConfirmEdge.isEnabled = false + } + + + return binding.root + } +} \ No newline at end of file diff --git a/app/src/main/java/com/maary/shareas/view/ScrollableImageView.kt b/app/src/main/java/com/maary/shareas/view/ScrollableImageView.kt index 727ba0a..1e6b8a6 100644 --- a/app/src/main/java/com/maary/shareas/view/ScrollableImageView.kt +++ b/app/src/main/java/com/maary/shareas/view/ScrollableImageView.kt @@ -83,6 +83,26 @@ class ScrollableImageView @JvmOverloads constructor( } + fun getVisibleRectStart(): Int { + // 获取 ScrollView 和 HorizontalView 的滚动距离 + val scrollX = scrollX + val horizontalScrollX = horizontalView.scrollX + + // 计算可视部分的矩形区域 + return scrollX + horizontalScrollX + + } + + fun getVisibleRectEnd(): Int { + // 获取 ScrollView 和 HorizontalView 的滚动距离 + val scrollX = scrollX + val horizontalScrollX = horizontalView.scrollX + + // 计算可视部分的矩形区域 + return scrollX + horizontalScrollX + width + + } + fun scrollImageTo(target: Int, x: Int, y: Int) { if (target == VERTICAL) this.smoothScrollTo(x, y) if (target == HORIZONTAL) horizontalView.smoothScrollTo(x, y) diff --git a/app/src/main/res/drawable/ic_crop.xml b/app/src/main/res/drawable/ic_crop.xml new file mode 100644 index 0000000..5a3c066 --- /dev/null +++ b/app/src/main/res/drawable/ic_crop.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 5a652a6..fe2282c 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -1,40 +1,32 @@ - + android:viewportWidth="800" + android:viewportHeight="492"> + + android:pathData="M206,137V435C233.24,435 346.75,435 400,435V137C343.5,137 233.26,137 206,137Z" + android:fillColor="#C0FCFF"/> + android:pathData="M400,137V435C440.46,435 455,435 594,435V137C491.5,137 440.46,137 400,137Z" + android:fillColor="#89D2E8"/> + android:pathData="M366,68.86V183.17C366,195.78 381.22,206 400,206C418.78,206 434,195.78 434,183.17V68.86C411.33,68.86 388.67,68.86 366,68.86Z" + android:fillColor="#A9A9AE"/> + android:pathData="M765.67,80H628.33C609.37,80 594,95.37 594,114.33V457.67C594,476.63 609.37,492 628.33,492H765.67C784.63,492 800,476.63 800,457.67V114.33C800,95.37 784.63,80 765.67,80Z" + android:fillColor="#7AC0DE"/> + android:pathData="M171.67,80H34.33C15.37,80 0,95.37 0,114.33V457.67C0,476.63 15.37,492 34.33,492H171.67C190.63,492 206,476.63 206,457.67V114.33C206,95.37 190.63,80 171.67,80Z" + android:fillColor="#89D2E8"/> + android:pathData="M468.57,0.29H331.43C312.49,0.29 297.14,15.64 297.14,34.57C297.14,53.51 312.49,68.86 331.43,68.86H468.57C487.51,68.86 502.86,53.51 502.86,34.57C502.86,15.64 487.51,0.29 468.57,0.29Z" + android:fillColor="#DA3981"/> - - + android:pathData="M502.86,34.57C502.86,15.64 487.51,0.29 468.57,0.29H400V68.86H468.57C487.51,68.86 502.86,53.51 502.86,34.57Z" + android:fillColor="#A91E62"/> diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml index 521dabc..2bc2014 100644 --- a/app/src/main/res/drawable/ic_launcher_monochrome.xml +++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml @@ -1,39 +1,32 @@ - + android:viewportWidth="800" + android:viewportHeight="492"> + + android:pathData="M206,137V435C233.24,435 346.75,435 400,435V137C343.5,137 233.26,137 206,137Z" + android:fillColor="#7f000000"/> + android:pathData="M400,137V435C440.46,435 455,435 594,435V137C491.5,137 440.46,137 400,137Z" + android:fillColor="#9f000000"/> + android:pathData="M468.57,0.29H331.43C312.49,0.29 297.14,15.64 297.14,34.57C297.14,53.51 312.49,68.86 331.43,68.86H468.57C487.51,68.86 502.86,53.51 502.86,34.57C502.86,15.64 487.51,0.29 468.57,0.29Z" + android:fillColor="#000000"/> - - diff --git a/app/src/main/res/drawable/ic_left_edge.xml b/app/src/main/res/drawable/ic_left_edge.xml new file mode 100644 index 0000000..6376719 --- /dev/null +++ b/app/src/main/res/drawable/ic_left_edge.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_right_edge.xml b/app/src/main/res/drawable/ic_right_edge.xml new file mode 100644 index 0000000..dc05234 --- /dev/null +++ b/app/src/main/res/drawable/ic_right_edge.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_crop.xml b/app/src/main/res/layout/fragment_crop.xml new file mode 100644 index 0000000..6d48634 --- /dev/null +++ b/app/src/main/res/layout/fragment_crop.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_editor.xml b/app/src/main/res/layout/fragment_editor.xml index d57f647..192c938 100644 --- a/app/src/main/res/layout/fragment_editor.xml +++ b/app/src/main/res/layout/fragment_editor.xml @@ -9,16 +9,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - + + diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp index 83e1b46..cbb432a 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.webp and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp index abd5314..39165bb 100644 Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp index dde6e3c..aca7a16 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.webp and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp index 524eae0..64a0b6d 100644 Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp index d3978c5..5f4c892 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp index 218f8e2..2cb211b 100644 Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp index 1a487cd..ccc6c32 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp index 2a24ad9..dcf50d2 100644 Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp index 62ca9a7..32b4cea 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp index 7f1a5b0..8e26975 100644 Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index e26d13c..b20a9bb 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -61,4 +61,7 @@ 图像块大小 使用 FP_16 不使用 CPU + 居中 + 裁切 + 全图设置为 \ 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 3a8446d..77274d3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -72,4 +72,6 @@ Use FP16 Disable CPU Center + Crop + Set full image as diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index df852ce..a68ea2e 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -48,6 +48,14 @@ 32dp + +