Skip to content

Commit fb3ba3f

Browse files
committed
Update formatting to completion dialog
1 parent 4cbc505 commit fb3ba3f

File tree

3 files changed

+62
-20
lines changed

3 files changed

+62
-20
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package dev.zwander.installwithoptions.data
2+
3+
enum class InstallStatus {
4+
SUCCESS,
5+
FAILURE,
6+
}
7+
8+
data class InstallResult(
9+
val status: InstallStatus,
10+
val packageName: String,
11+
val message: String,
12+
)

app/src/main/java/dev/zwander/installwithoptions/util/Installer.kt

+48-19
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.content.pm.PackageInstaller
88
import android.util.Log
99
import androidx.activity.compose.rememberLauncherForActivityResult
1010
import androidx.activity.result.contract.ActivityResultContracts
11+
import androidx.appcompat.widget.AppCompatTextView
1112
import androidx.compose.foundation.layout.Arrangement
1213
import androidx.compose.foundation.layout.fillMaxWidth
1314
import androidx.compose.foundation.lazy.LazyColumn
@@ -29,14 +30,18 @@ import androidx.compose.ui.Modifier
2930
import androidx.compose.ui.platform.LocalContext
3031
import androidx.compose.ui.res.stringResource
3132
import androidx.compose.ui.unit.dp
33+
import androidx.compose.ui.viewinterop.AndroidView
3234
import androidx.core.content.ContextCompat
3335
import androidx.core.content.IntentCompat
36+
import androidx.core.text.HtmlCompat
3437
import androidx.documentfile.provider.DocumentFile
3538
import dev.zwander.installwithoptions.BuildConfig
3639
import dev.zwander.installwithoptions.IOptionsApplier
3740
import dev.zwander.installwithoptions.R
3841
import dev.zwander.installwithoptions.data.DataModel
3942
import dev.zwander.installwithoptions.data.InstallOption
43+
import dev.zwander.installwithoptions.data.InstallResult
44+
import dev.zwander.installwithoptions.data.InstallStatus
4045
import dev.zwander.installwithoptions.data.MutableOption
4146
import dev.zwander.installwithoptions.data.Settings
4247
import dev.zwander.installwithoptions.data.getMutableOptions
@@ -61,7 +66,7 @@ fun rememberPackageInstaller(files: List<DocumentFile>): Installer {
6166
}
6267

6368
var statuses by remember {
64-
mutableStateOf<List<Pair<String, String>>>(listOf())
69+
mutableStateOf<List<InstallResult>>(listOf())
6570
}
6671
var isInstalling by remember {
6772
mutableStateOf(false)
@@ -109,11 +114,19 @@ fun rememberPackageInstaller(files: List<DocumentFile>): Installer {
109114

110115
PackageInstaller.STATUS_SUCCESS -> {
111116
statuses =
112-
statuses + (packageName to context.resources.getString(R.string.success))
117+
statuses + InstallResult(
118+
status = InstallStatus.SUCCESS,
119+
packageName = packageName,
120+
message = context.resources.getString(R.string.success),
121+
)
113122
}
114123

115124
else -> {
116-
statuses = statuses + (packageName to message)
125+
statuses = statuses + InstallResult(
126+
status = InstallStatus.FAILURE,
127+
packageName = packageName,
128+
message = message,
129+
)
117130
}
118131
}
119132
}
@@ -142,8 +155,11 @@ fun rememberPackageInstaller(files: List<DocumentFile>): Installer {
142155
)
143156
} catch (e: Exception) {
144157
statuses = files.map {
145-
(it.name ?: it.uri.toString()) to (e.localizedMessage ?: e.message
146-
?: e.toString())
158+
InstallResult(
159+
status = InstallStatus.FAILURE,
160+
packageName = it.name ?: it.uri.toString(),
161+
message = e.localizedMessage ?: e.message ?: e.toString(),
162+
)
147163
}
148164
}
149165
}
@@ -209,27 +225,40 @@ fun rememberPackageInstaller(files: List<DocumentFile>): Installer {
209225
}
210226
},
211227
title = {
212-
Text(text = stringResource(id = R.string.installation_complete))
228+
Text(
229+
text = stringResource(
230+
id = if (s.any { it.status == InstallStatus.FAILURE }) {
231+
R.string.installation_errors
232+
} else {
233+
R.string.installation_complete
234+
},
235+
),
236+
)
213237
},
214238
text = {
215239
SelectionContainer {
216240
LazyColumn(
217241
modifier = Modifier.fillMaxWidth(),
218-
verticalArrangement = Arrangement.spacedBy(4.dp),
242+
verticalArrangement = Arrangement.spacedBy(8.dp),
219243
) {
220-
items(items = s) {
221-
Text(
222-
text = stringResource(
223-
id = R.string.status_item,
224-
try {
225-
context.packageManager.getApplicationInfo(it.first, 0)
226-
.loadLabel(context.packageManager).toString()
227-
} catch (e: Throwable) {
228-
it.first
229-
},
230-
it.second,
244+
items(items = s) { res ->
245+
AndroidView(
246+
factory = { AppCompatTextView(it) },
247+
) { tv ->
248+
tv.text = HtmlCompat.fromHtml(
249+
context.resources.getString(
250+
R.string.status_item,
251+
try {
252+
context.packageManager.getApplicationInfo(res.packageName, 0)
253+
.loadLabel(context.packageManager).toString()
254+
} catch (e: Throwable) {
255+
res.packageName
256+
},
257+
res.message,
258+
),
259+
HtmlCompat.FROM_HTML_MODE_COMPACT,
231260
)
232-
)
261+
}
233262
}
234263
}
235264
}

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
<string name="install">Install</string>
77
<string name="success">Success</string>
88
<string name="installation_complete">Installation Complete</string>
9-
<string name="status_item">%1$s: %2$s</string>
9+
<string name="installation_errors">Errors Installing</string>
10+
<string name="status_item"><![CDATA[<b>%1$s</b><br>%2$s]]></string>
1011
<string name="download">Download</string>
1112
<string name="close_app">Close App</string>
1213
<string name="open_shizuku">Open Shizuku</string>

0 commit comments

Comments
 (0)