Skip to content

Commit a55cc54

Browse files
committed
Update: scoped storage 대응
1 parent 6af5181 commit a55cc54

File tree

6 files changed

+44
-17
lines changed

6 files changed

+44
-17
lines changed

buildSrc/src/main/kotlin/Dependencies.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ object Application {
1414
const val targetSdk = 31
1515
const val compileSdk = 31
1616
const val jvmTarget = "11"
17-
const val versionCode = 1
18-
const val versionName = "dev-0.1.0"
17+
const val versionCode = 2
18+
const val versionName = "dev-0.1.1"
1919

2020
val targetCompat = JavaVersion.VERSION_11
2121
val sourceCompat = JavaVersion.VERSION_11

common/src/main/kotlin/io/github/jisungbin/gitmessengerbot/common/core/Storage.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ object Storage {
3131
private fun String.parsePath() = if (contains(sdcard)) this else "$sdcard/$this"
3232

3333
fun write(path: String, content: String) {
34+
if (isScoped) return
3435
val file = File(path.parsePath())
3536
if (!file.exists()) {
3637
File(file.path.substringBeforeLast("/")).mkdirs()
@@ -40,6 +41,7 @@ object Storage {
4041
}
4142

4243
fun read(path: String, default: String?): String? {
44+
if (isScoped) return default
4345
return try {
4446
val file = File(path.parsePath())
4547
if (file.exists()) {
@@ -53,26 +55,31 @@ object Storage {
5355
}
5456

5557
fun append(path: String, prefix: String, appendContent: String) {
58+
if (isScoped) return
5659
val preContent = read(path, "")
5760
val newContent = "$preContent$prefix$appendContent"
5861
write(path, newContent)
5962
}
6063

6164
fun delete(path: String) {
65+
if (isScoped) return
6266
File(path.parsePath()).delete()
6367
}
6468

6569
fun deleteAll(path: String) {
70+
if (isScoped) return
6671
File(path.parsePath()).deleteRecursively()
6772
}
6873

69-
fun fileList(path: String) = File(path.parsePath()).listFiles()?.toList() ?: emptyList()
74+
fun fileList(path: String) =
75+
if (isScoped) emptyList() else File(path.parsePath()).listFiles()?.toList() ?: emptyList()
7076

7177
@RequiresApi(Build.VERSION_CODES.R)
7278
fun isStorageManagerPermissionGranted() = Environment.isExternalStorageManager()
7379

7480
@RequiresApi(Build.VERSION_CODES.R)
7581
fun requestStorageManagePermission(activity: Activity) {
82+
if (isScoped) return
7683
val intent = Intent(
7784
Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION,
7885
"package:${activity.packageName}".toUri()

presentation/src/main/AndroidManifest.xml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,14 @@
1111
xmlns:tools="http://schemas.android.com/tools"
1212
package="io.github.jisungbin.gitmessengerbot">
1313

14-
<uses-permission
15-
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
16-
tools:ignore="ScopedStorage" />
1714
<uses-permission android:name="android.permission.INTERNET" />
1815
<uses-permission android:name="android.permission.WAKE_LOCK" />
1916
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
2017
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
2118
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
22-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
19+
<uses-permission
20+
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
21+
tools:ignore="ScopedStorage" />
2322
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
2423

2524
<!-- https://developer.chrome.com/docs/android/custom-tabs/best-practices/#applications-targeting-android-11-api-level-30-or-above -->

presentation/src/main/kotlin/io/github/jisungbin/gitmessengerbot/activity/main/MainActivity.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import android.content.Intent
1313
import android.os.Bundle
1414
import androidx.activity.ComponentActivity
1515
import androidx.activity.compose.setContent
16+
import androidx.appcompat.app.AlertDialog
1617
import androidx.compose.animation.Crossfade
1718
import androidx.compose.foundation.layout.Box
1819
import androidx.compose.foundation.layout.fillMaxWidth
@@ -49,6 +50,7 @@ import io.github.jisungbin.gitmessengerbot.activity.main.composable.CustomWidthB
4950
import io.github.jisungbin.gitmessengerbot.activity.main.dashboard.script.ScriptContent
5051
import io.github.jisungbin.gitmessengerbot.activity.main.setting.Setting
5152
import io.github.jisungbin.gitmessengerbot.common.constant.ScriptConstant
53+
import io.github.jisungbin.gitmessengerbot.common.core.Storage
5254
import io.github.jisungbin.gitmessengerbot.common.extension.doWhen
5355
import io.github.jisungbin.gitmessengerbot.common.extension.toast
5456
import io.github.jisungbin.gitmessengerbot.common.script.ScriptLang
@@ -115,6 +117,14 @@ class MainActivity : ComponentActivity() {
115117
}
116118
}
117119

120+
if (Storage.isScoped) {
121+
AlertDialog.Builder(this)
122+
.setMessage(R.string.activity_main_dialog_android_11_notice_title)
123+
.setMessage(R.string.activity_main_dialog_android_11_notice_message)
124+
.setPositiveButton(R.string.close, null)
125+
.show()
126+
}
127+
118128
setContent {
119129
MaterialTheme {
120130
Content()

presentation/src/main/kotlin/io/github/jisungbin/gitmessengerbot/activity/splash/SplashActivity.kt

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,25 +66,32 @@ class SplashActivity : ComponentActivity() {
6666
}
6767

6868
val isSetupDone = Storage.read(GithubConstant.DataPath, null) != null
69-
val builtDate = Calendar.getInstance().apply { timeInMillis = BuildConfig.TIMESTAMP }
70-
val builtTime = "${builtDate.get(Calendar.HOUR_OF_DAY)}h" +
71-
" ${builtDate.get(Calendar.MINUTE)}m " +
72-
"${builtDate.get(Calendar.SECOND)}s"
7369

74-
toast("Built at: $builtTime")
70+
if (BuildConfig.DEBUG) {
71+
val builtDate = Calendar.getInstance().apply { timeInMillis = BuildConfig.TIMESTAMP }
72+
val builtTime = "${builtDate.get(Calendar.HOUR_OF_DAY)}h" +
73+
" ${builtDate.get(Calendar.MINUTE)}m " +
74+
"${builtDate.get(Calendar.SECOND)}s"
75+
76+
toast("Built at: $builtTime")
77+
}
7578

7679
if (BuildOption.TestMode) {
7780
startActivity(Intent(this, TestActivity::class.java))
7881
} else {
7982
lifecycleScope.launchWhenCreated {
8083
doDelay(1500) {
8184
finish()
82-
startActivity(
83-
Intent(
84-
this@SplashActivity,
85-
if (isSetupDone) MainActivity::class.java else SetupActivity::class.java
85+
if (Storage.isScoped) {
86+
startActivity(Intent(this@SplashActivity, MainActivity::class.java))
87+
} else {
88+
startActivity(
89+
Intent(
90+
this@SplashActivity,
91+
if (isSetupDone) MainActivity::class.java else SetupActivity::class.java
92+
)
8693
)
87-
)
94+
}
8895
}
8996
}
9097
}

presentation/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<string name="todo">개발 예정</string>
1414
<string name="save">저장</string>
1515
<string name="saved">저장되었습니다.</string>
16+
<string name="close">닫기</string>
1617

1718
<string name="activity_setup_title">새로운 시작을 위해,\n아래의 권한들을 허용해주세요.</string>
1819
<string name="activity_setup_last_way">마지막으로,</string>
@@ -27,9 +28,12 @@
2728
<string name="activity_setup_dialog_button_start">시작하기</string>
2829
<string name="activity_setup_toast_welcome">%s님 환영합니다! 🎉🎈</string>
2930

31+
<string name="activity_main_dialog_android_11_notice_title">안드로이드11 공지</string>
32+
<string name="activity_main_dialog_android_11_notice_message">안드로이드11 부터는 구글 정책으로 인해 내부 저장소 접근이 불가능 합니다. (접근하려면 파일 관리자 앱 처럼 파일 접근 기능이 앱의 핵심 기능이여야 함)\n\n따라서 앱의 기능이 모두 작동하지 않을 수 있습니다.\n\n추후 product 버전에서는 이 문제 해결 및 앱의 정상적인 작동을 보장합니다.\n\n이 버전은 dev 버전이므로, 이해 부탁드립니다. 감사합니다.</string>
3033
<string name="activity_main_toast_eval_loaded">eval 준비 완료</string>
3134
<string name="activity_main_toast_eval_load_faled">eval 준비 실패\n\n%s</string>
3235
<string name="activity_main_toast_confirm_finish">정말 종료하실려면 뒤로가기를 한 번 더 눌러주세요.</string>
36+
3337
<string name="activity_main_composable_dashboard_script_header_welcome">Hi, %s</string>
3438
<string name="activity_main_composable_dashboard_script_header_power">메인 전원</string>
3539
<string name="activity_main_composable_dashboard_script_header_menu_power_on">On</string>

0 commit comments

Comments
 (0)