Skip to content

Commit 2d8bcd1

Browse files
committed
Merge branch 'release/v2.2.1'
# Conflicts: # gradle.properties
2 parents 7c4bcc4 + 295d153 commit 2d8bcd1

31 files changed

Lines changed: 730 additions & 329 deletions

File tree

.github/workflows/develop.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -297,12 +297,14 @@ jobs:
297297
- name: Get tag name
298298
run: echo "VERSION_TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
299299

300-
- name: Rename desktop and iOS artifacts
300+
- name: Rename release artifacts
301301
run: |
302+
mv artifacts/android-foss-apk/*.apk artifacts/android-foss-apk/PiPixiv-${VERSION_TAG}-android-foss.apk
303+
mv artifacts/android-default-apk/*.apk artifacts/android-default-apk/PiPixiv-${VERSION_TAG}-android-default.apk
302304
mv artifacts/linux-artifacts/PiPixiv-linux-x86_64.tar.gz artifacts/linux-artifacts/PiPixiv-${VERSION_TAG}-linux-x86_64.tar.gz
303-
mv artifacts/windows-artifacts/*.msi artifacts/windows-artifacts/PiPixiv-${VERSION_TAG}-x86_64.msi
304-
mv artifacts/macos-artifacts/*.dmg artifacts/macos-artifacts/PiPixiv-${VERSION_TAG}-arm64.dmg
305-
mv artifacts/ios-artifacts/*.ipa artifacts/ios-artifacts/PiPixiv-${VERSION_TAG}.ipa
305+
mv artifacts/windows-artifacts/*.msi artifacts/windows-artifacts/PiPixiv-${VERSION_TAG}-windows-x86_64.msi
306+
mv artifacts/macos-artifacts/*.dmg artifacts/macos-artifacts/PiPixiv-${VERSION_TAG}-macos-arm64.dmg
307+
mv artifacts/ios-artifacts/*.ipa artifacts/ios-artifacts/PiPixiv-${VERSION_TAG}-ios.ipa
306308
307309
- name: Create Release
308310
uses: softprops/action-gh-release@v2

.github/workflows/release.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -305,12 +305,14 @@ jobs:
305305
- name: Get tag name
306306
run: echo "VERSION_TAG=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
307307

308-
- name: Rename desktop and iOS artifacts
308+
- name: Rename release artifacts
309309
run: |
310+
mv artifacts/android-foss-apk/*.apk artifacts/android-foss-apk/PiPixiv-${VERSION_TAG}-android-foss.apk
311+
mv artifacts/android-default-apk/*.apk artifacts/android-default-apk/PiPixiv-${VERSION_TAG}-android-default.apk
310312
mv artifacts/linux-artifacts/PiPixiv-linux-x86_64.tar.gz artifacts/linux-artifacts/PiPixiv-${VERSION_TAG}-linux-x86_64.tar.gz
311-
mv artifacts/windows-artifacts/*.msi artifacts/windows-artifacts/PiPixiv-${VERSION_TAG}-x86_64.msi
312-
mv artifacts/macos-artifacts/*.dmg artifacts/macos-artifacts/PiPixiv-${VERSION_TAG}-arm64.dmg
313-
mv artifacts/ios-artifacts/*.ipa artifacts/ios-artifacts/PiPixiv-${VERSION_TAG}.ipa
313+
mv artifacts/windows-artifacts/*.msi artifacts/windows-artifacts/PiPixiv-${VERSION_TAG}-windows-x86_64.msi
314+
mv artifacts/macos-artifacts/*.dmg artifacts/macos-artifacts/PiPixiv-${VERSION_TAG}-macos-arm64.dmg
315+
mv artifacts/ios-artifacts/*.ipa artifacts/ios-artifacts/PiPixiv-${VERSION_TAG}-ios.ipa
314316
315317
- name: Create Release
316318
uses: softprops/action-gh-release@v2

app/build.gradle.kts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,21 @@ import org.gradle.internal.extensions.stdlib.capitalized
55

66
plugins {
77
id("pixiv.android.application")
8-
alias(libs.plugins.hotswan.compiler)
98
// alias(androidx.plugins.baselineprofile)
109
}
10+
11+
val hotSwanTaskNames = gradle.startParameter.taskNames.map { it.lowercase() }
12+
val enableHotSwanCompiler = hotSwanTaskNames.isEmpty() ||
13+
hotSwanTaskNames.any { taskName ->
14+
taskName.contains("debug") ||
15+
taskName.contains("hotswan") ||
16+
taskName.contains("captureallpreviews")
17+
}
18+
19+
if (enableHotSwanCompiler) {
20+
pluginManager.apply(libs.plugins.hotswan.compiler.get().pluginId)
21+
}
22+
1123
if (project.findProperty("applyFirebasePlugins") == "true") {
1224
pluginManager.apply(libs.plugins.sentry.android.get().pluginId)
1325
pluginManager.apply(libs.plugins.google.services.get().pluginId)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<network-security-config>
3+
<debug-overrides>
4+
<trust-anchors>
5+
<certificates src="user" />
6+
<certificates src="system" />
7+
</trust-anchors>
8+
</debug-overrides>
9+
10+
<base-config cleartextTrafficPermitted="true">
11+
<trust-anchors>
12+
<certificates src="system" />
13+
<certificates src="user" />
14+
</trust-anchors>
15+
</base-config>
16+
</network-security-config>

app/src/main/AndroidManifest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
<!-- 网络请求权限 -->
66
<uses-permission android:name="android.permission.INTERNET" /> <!-- 读写权限 -->
7-
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
7+
<uses-permission
8+
android:name="android.permission.ACCESS_LOCAL_NETWORK"
9+
tools:targetApi="37" />
810
<uses-permission android:name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
911
<uses-permission
1012
android:name="android.permission.READ_EXTERNAL_STORAGE"
@@ -81,4 +83,4 @@
8183
</service>
8284
</application>
8385

84-
</manifest>
86+
</manifest>

app/src/main/kotlin/com/mrl/pixiv/MainActivity.kt

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import androidx.compose.runtime.LaunchedEffect
1919
import androidx.compose.ui.platform.LocalContext
2020
import androidx.core.content.getSystemService
2121
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
22+
import co.touchlab.kermit.Logger
2223
import coil3.gif.AnimatedImageDecoder
23-
import coil3.gif.GifDecoder
2424
import coil3.network.ktor3.KtorNetworkFetcherFactory
2525
import coil3.request.allowRgb565
2626
import com.mrl.pixiv.common.activity.BaseActivity
@@ -78,11 +78,7 @@ class MainActivity : BaseActivity() {
7878
imageLoaderBuilder = {
7979
this.allowRgb565(getSystemService<ActivityManager>()!!.isLowRamDevice)
8080
.components {
81-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
82-
add(AnimatedImageDecoder.Factory())
83-
} else {
84-
add(GifDecoder.Factory())
85-
}
81+
add(AnimatedImageDecoder.Factory())
8682
add(KtorNetworkFetcherFactory(imageHttpClient))
8783
}
8884
},
@@ -98,6 +94,7 @@ class MainActivity : BaseActivity() {
9894
}
9995
}
10096
super.onCreate(savedInstanceState)
97+
logRecentProcessExitReasons()
10198
}
10299

103100
override fun onNewIntent(intent: Intent) {
@@ -116,4 +113,20 @@ class MainActivity : BaseActivity() {
116113
intent
117114
}
118115
}
119-
}
116+
117+
private fun logRecentProcessExitReasons() {
118+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) return
119+
120+
val activityManager = getSystemService<ActivityManager>() ?: return
121+
activityManager.getHistoricalProcessExitReasons(packageName, 0, 5)
122+
.filter { info ->
123+
info.description?.contains("MemoryLimiter", ignoreCase = true) == true
124+
}
125+
.forEach { info ->
126+
Logger.w(tag = "Android17Compat") {
127+
"Recent process exit may be affected by Android memory limits: " +
128+
"reason=${info.reason}, description=${info.description}"
129+
}
130+
}
131+
}
132+
}
Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,8 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<network-security-config xmlns:android="http://schemas.android.com/apk/res/android">
3-
<debug-overrides>
2+
<network-security-config>
3+
<base-config cleartextTrafficPermitted="false">
44
<trust-anchors>
5-
<!-- Trust user added CAs while debuggable only -->
6-
<certificates src="user" />
75
<certificates src="system" />
86
</trust-anchors>
9-
</debug-overrides>
10-
11-
<base-config cleartextTrafficPermitted="true">
12-
<trust-anchors>
13-
<certificates src="system" />
14-
<certificates src="user" />
15-
</trust-anchors>
167
</base-config>
17-
</network-security-config>
8+
</network-security-config>

common/core/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,4 +107,4 @@ buildkonfig {
107107
)
108108
buildConfigField(FieldSpec.Type.STRING, "sentryDsn", sentryDsn.orEmpty(), const = true)
109109
}
110-
}
110+
}

common/core/src/androidMain/kotlin/com/mrl/pixiv/common/util/BitmapUtil.android.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ fun getDownloadPath(
9090
}
9191

9292
suspend fun saveToAlbum(
93-
bytes: ByteArray,
93+
file: File,
9494
fileName: String,
9595
mimeType: String?,
9696
subFolder: String? = null,
@@ -121,7 +121,9 @@ suspend fun saveToAlbum(
121121
)
122122
uri?.let {
123123
context.contentResolver.openOutputStream(it)?.use { out ->
124-
out.write(bytes)
124+
file.inputStream().use { input ->
125+
input.copyTo(out)
126+
}
125127
}
126128
it.toString() to filePath
127129
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.mrl.pixiv.common.util
2+
3+
import androidx.activity.compose.LocalActivity
4+
import androidx.compose.runtime.Composable
5+
import androidx.compose.runtime.DisposableEffect
6+
import androidx.compose.ui.platform.LocalView
7+
import androidx.core.view.WindowCompat
8+
import androidx.core.view.WindowInsetsCompat
9+
import androidx.core.view.WindowInsetsControllerCompat
10+
11+
@Composable
12+
actual fun StatusBarVisibilityEffect(hidden: Boolean) {
13+
val view = LocalView.current
14+
val activity = LocalActivity.current
15+
DisposableEffect(view, activity, hidden) {
16+
val window = activity?.window
17+
val controller = window?.let { WindowCompat.getInsetsController(it, view) }
18+
controller?.systemBarsBehavior =
19+
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
20+
21+
if (hidden) {
22+
controller?.hide(WindowInsetsCompat.Type.systemBars())
23+
} else {
24+
controller?.show(WindowInsetsCompat.Type.systemBars())
25+
}
26+
27+
onDispose {
28+
controller?.show(WindowInsetsCompat.Type.systemBars())
29+
}
30+
}
31+
}

0 commit comments

Comments
 (0)