Refactor: remove Compose prefix from Activity names
- Rename ComposeActivity to MainActivity - Rename EditProfileComposeActivity to EditProfileActivity - Rename NewProfileComposeActivity to NewProfileActivity - Rename GroupsComposeActivity to GroupsActivity - Move data models to compose/model package - Update all references in AndroidManifest.xml and source files
This commit is contained in:
@@ -96,7 +96,7 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".compose.ComposeActivity"
|
android:name=".compose.MainActivity"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
@@ -108,15 +108,15 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="io.nekohasekai.sfa.compose.NewProfileComposeActivity"
|
android:name="io.nekohasekai.sfa.compose.NewProfileActivity"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:theme="@style/AppTheme" />
|
android:theme="@style/AppTheme" />
|
||||||
<activity
|
<activity
|
||||||
android:name="io.nekohasekai.sfa.compose.EditProfileComposeActivity"
|
android:name="io.nekohasekai.sfa.compose.EditProfileActivity"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:theme="@style/AppTheme" />
|
android:theme="@style/AppTheme" />
|
||||||
<activity
|
<activity
|
||||||
android:name="io.nekohasekai.sfa.compose.GroupsComposeActivity"
|
android:name="io.nekohasekai.sfa.compose.GroupsActivity"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:theme="@style/AppTheme" />
|
android:theme="@style/AppTheme" />
|
||||||
<activity
|
<activity
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ package io.nekohasekai.sfa
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import io.nekohasekai.sfa.compose.ComposeActivity
|
import io.nekohasekai.sfa.compose.MainActivity
|
||||||
|
|
||||||
class LauncherActivity : Activity() {
|
class LauncherActivity : Activity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
val launchIntent =
|
val launchIntent =
|
||||||
Intent(this, ComposeActivity::class.java).apply {
|
Intent(this, MainActivity::class.java).apply {
|
||||||
intent?.let {
|
intent?.let {
|
||||||
action = it.action
|
action = it.action
|
||||||
data = it.data
|
data = it.data
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import io.nekohasekai.sfa.constant.Status
|
|||||||
import io.nekohasekai.sfa.database.ProfileManager
|
import io.nekohasekai.sfa.database.ProfileManager
|
||||||
import io.nekohasekai.sfa.database.Settings
|
import io.nekohasekai.sfa.database.Settings
|
||||||
import io.nekohasekai.sfa.ktx.hasPermission
|
import io.nekohasekai.sfa.ktx.hasPermission
|
||||||
import io.nekohasekai.sfa.compose.ComposeActivity
|
import io.nekohasekai.sfa.compose.MainActivity
|
||||||
import io.nekohasekai.sfa.vendor.Vendor
|
import io.nekohasekai.sfa.vendor.Vendor
|
||||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -397,7 +397,7 @@ class BoxService(
|
|||||||
0,
|
0,
|
||||||
Intent(
|
Intent(
|
||||||
service,
|
service,
|
||||||
ComposeActivity::class.java,
|
MainActivity::class.java,
|
||||||
).apply {
|
).apply {
|
||||||
setAction(Action.OPEN_URL).setData(Uri.parse(notification.openURL))
|
setAction(Action.OPEN_URL).setData(Uri.parse(notification.openURL))
|
||||||
setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
|
setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ import io.nekohasekai.sfa.compose.screen.profile.EditProfileViewModel
|
|||||||
import io.nekohasekai.sfa.compose.screen.profile.IconSelectionScreen
|
import io.nekohasekai.sfa.compose.screen.profile.IconSelectionScreen
|
||||||
import io.nekohasekai.sfa.compose.theme.SFATheme
|
import io.nekohasekai.sfa.compose.theme.SFATheme
|
||||||
|
|
||||||
class EditProfileComposeActivity : ComponentActivity() {
|
class EditProfileActivity : ComponentActivity() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
@@ -34,7 +34,7 @@ import io.nekohasekai.sfa.compose.theme.SFATheme
|
|||||||
import io.nekohasekai.sfa.constant.Alert
|
import io.nekohasekai.sfa.constant.Alert
|
||||||
import io.nekohasekai.sfa.constant.Status
|
import io.nekohasekai.sfa.constant.Status
|
||||||
|
|
||||||
class GroupsComposeActivity : ComponentActivity(), ServiceConnection.Callback {
|
class GroupsActivity : ComponentActivity(), ServiceConnection.Callback {
|
||||||
private val connection = ServiceConnection(this, this)
|
private val connection = ServiceConnection(this, this)
|
||||||
private var currentServiceStatus by mutableStateOf(Status.Stopped)
|
private var currentServiceStatus by mutableStateOf(Status.Stopped)
|
||||||
|
|
||||||
@@ -105,9 +105,9 @@ import io.nekohasekai.sfa.compose.screen.dashboard.GroupsCard
|
|||||||
import io.nekohasekai.sfa.compose.screen.connections.ConnectionDetailsScreen
|
import io.nekohasekai.sfa.compose.screen.connections.ConnectionDetailsScreen
|
||||||
import io.nekohasekai.sfa.compose.screen.connections.ConnectionsScreen
|
import io.nekohasekai.sfa.compose.screen.connections.ConnectionsScreen
|
||||||
import io.nekohasekai.sfa.compose.screen.connections.ConnectionsViewModel
|
import io.nekohasekai.sfa.compose.screen.connections.ConnectionsViewModel
|
||||||
import io.nekohasekai.sfa.ui.connections.Connection
|
import io.nekohasekai.sfa.compose.model.Connection
|
||||||
import io.nekohasekai.sfa.ui.connections.ConnectionSort
|
import io.nekohasekai.sfa.compose.model.ConnectionSort
|
||||||
import io.nekohasekai.sfa.ui.connections.ConnectionStateFilter
|
import io.nekohasekai.sfa.compose.model.ConnectionStateFilter
|
||||||
import io.nekohasekai.sfa.compose.screen.dashboard.groups.GroupsViewModel
|
import io.nekohasekai.sfa.compose.screen.dashboard.groups.GroupsViewModel
|
||||||
import io.nekohasekai.sfa.compose.screen.log.LogViewModel
|
import io.nekohasekai.sfa.compose.screen.log.LogViewModel
|
||||||
import io.nekohasekai.sfa.compose.theme.SFATheme
|
import io.nekohasekai.sfa.compose.theme.SFATheme
|
||||||
@@ -123,7 +123,7 @@ import kotlinx.coroutines.Dispatchers
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
|
|
||||||
class ComposeActivity : ComponentActivity(), ServiceConnection.Callback {
|
class MainActivity : ComponentActivity(), ServiceConnection.Callback {
|
||||||
private val connection = ServiceConnection(this, this)
|
private val connection = ServiceConnection(this, this)
|
||||||
private lateinit var dashboardViewModel: DashboardViewModel
|
private lateinit var dashboardViewModel: DashboardViewModel
|
||||||
private var currentServiceStatus by mutableStateOf(Status.Stopped)
|
private var currentServiceStatus by mutableStateOf(Status.Stopped)
|
||||||
@@ -240,7 +240,7 @@ class ComposeActivity : ComponentActivity(), ServiceConnection.Callback {
|
|||||||
}
|
}
|
||||||
val intent = Intent(Application.application, Settings.serviceClass())
|
val intent = Intent(Application.application, Settings.serviceClass())
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
ContextCompat.startForegroundService(this@ComposeActivity, intent)
|
ContextCompat.startForegroundService(this@MainActivity, intent)
|
||||||
}
|
}
|
||||||
Settings.startedByUser = true
|
Settings.startedByUser = true
|
||||||
}
|
}
|
||||||
@@ -249,7 +249,7 @@ class ComposeActivity : ComponentActivity(), ServiceConnection.Callback {
|
|||||||
private suspend fun prepare() =
|
private suspend fun prepare() =
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
try {
|
try {
|
||||||
val intent = VpnService.prepare(this@ComposeActivity)
|
val intent = VpnService.prepare(this@MainActivity)
|
||||||
if (intent != null) {
|
if (intent != null) {
|
||||||
prepareLauncher.launch(intent)
|
prepareLauncher.launch(intent)
|
||||||
true
|
true
|
||||||
@@ -338,9 +338,9 @@ class ComposeActivity : ComponentActivity(), ServiceConnection.Callback {
|
|||||||
confirmButton = {
|
confirmButton = {
|
||||||
TextButton(onClick = {
|
TextButton(onClick = {
|
||||||
startActivity(
|
startActivity(
|
||||||
Intent(this@ComposeActivity, NewProfileComposeActivity::class.java).apply {
|
Intent(this@MainActivity, NewProfileActivity::class.java).apply {
|
||||||
putExtra(NewProfileComposeActivity.EXTRA_IMPORT_NAME, name)
|
putExtra(NewProfileActivity.EXTRA_IMPORT_NAME, name)
|
||||||
putExtra(NewProfileComposeActivity.EXTRA_IMPORT_URL, url)
|
putExtra(NewProfileActivity.EXTRA_IMPORT_URL, url)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
showImportProfileDialog = false
|
showImportProfileDialog = false
|
||||||
@@ -430,7 +430,7 @@ class ComposeActivity : ComponentActivity(), ServiceConnection.Callback {
|
|||||||
try {
|
try {
|
||||||
val result = withContext(Dispatchers.IO) {
|
val result = withContext(Dispatchers.IO) {
|
||||||
Vendor.downloadAndInstall(
|
Vendor.downloadAndInstall(
|
||||||
this@ComposeActivity,
|
this@MainActivity,
|
||||||
updateInfo!!.downloadUrl,
|
updateInfo!!.downloadUrl,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -525,7 +525,7 @@ class ComposeActivity : ComponentActivity(), ServiceConnection.Callback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
is UiEvent.OpenUrl -> {
|
is UiEvent.OpenUrl -> {
|
||||||
this@ComposeActivity.launchCustomTab(event.url)
|
this@MainActivity.launchCustomTab(event.url)
|
||||||
}
|
}
|
||||||
|
|
||||||
is UiEvent.RequestStartService -> {
|
is UiEvent.RequestStartService -> {
|
||||||
@@ -538,7 +538,7 @@ class ComposeActivity : ComponentActivity(), ServiceConnection.Callback {
|
|||||||
|
|
||||||
is UiEvent.EditProfile -> {
|
is UiEvent.EditProfile -> {
|
||||||
val intent =
|
val intent =
|
||||||
Intent(this@ComposeActivity, EditProfileComposeActivity::class.java)
|
Intent(this@MainActivity, EditProfileActivity::class.java)
|
||||||
intent.putExtra("profile_id", event.profileId)
|
intent.putExtra("profile_id", event.profileId)
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
}
|
}
|
||||||
@@ -12,7 +12,7 @@ import androidx.compose.ui.Modifier
|
|||||||
import io.nekohasekai.sfa.compose.screen.configuration.NewProfileScreen
|
import io.nekohasekai.sfa.compose.screen.configuration.NewProfileScreen
|
||||||
import io.nekohasekai.sfa.compose.theme.SFATheme
|
import io.nekohasekai.sfa.compose.theme.SFATheme
|
||||||
|
|
||||||
class NewProfileComposeActivity : ComponentActivity() {
|
class NewProfileActivity : ComponentActivity() {
|
||||||
companion object {
|
companion object {
|
||||||
const val EXTRA_PROFILE_ID = "profile_id"
|
const val EXTRA_PROFILE_ID = "profile_id"
|
||||||
const val EXTRA_IMPORT_NAME = "import_name"
|
const val EXTRA_IMPORT_NAME = "import_name"
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.nekohasekai.sfa.ui.connections
|
package io.nekohasekai.sfa.compose.model
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import io.nekohasekai.libbox.Connection as LibboxConnection
|
import io.nekohasekai.libbox.Connection as LibboxConnection
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.nekohasekai.sfa.ui.connections
|
package io.nekohasekai.sfa.compose.model
|
||||||
|
|
||||||
import io.nekohasekai.libbox.Libbox
|
import io.nekohasekai.libbox.Libbox
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.nekohasekai.sfa.ui.dashboard
|
package io.nekohasekai.sfa.compose.model
|
||||||
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
import io.nekohasekai.libbox.OutboundGroup
|
import io.nekohasekai.libbox.OutboundGroup
|
||||||
@@ -43,7 +43,7 @@ import androidx.compose.ui.text.font.FontWeight
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import io.nekohasekai.libbox.Libbox
|
import io.nekohasekai.libbox.Libbox
|
||||||
import io.nekohasekai.sfa.R
|
import io.nekohasekai.sfa.R
|
||||||
import io.nekohasekai.sfa.ui.connections.Connection
|
import io.nekohasekai.sfa.compose.model.Connection
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ import androidx.compose.ui.text.style.TextOverflow
|
|||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import io.nekohasekai.libbox.Libbox
|
import io.nekohasekai.libbox.Libbox
|
||||||
import io.nekohasekai.sfa.R
|
import io.nekohasekai.sfa.R
|
||||||
import io.nekohasekai.sfa.ui.connections.Connection
|
import io.nekohasekai.sfa.compose.model.Connection
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.Date
|
import java.util.Date
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import io.nekohasekai.sfa.R
|
import io.nekohasekai.sfa.R
|
||||||
import io.nekohasekai.sfa.constant.Status
|
import io.nekohasekai.sfa.constant.Status
|
||||||
import io.nekohasekai.sfa.ui.connections.Connection
|
import io.nekohasekai.sfa.compose.model.Connection
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ConnectionsScreen(
|
fun ConnectionsScreen(
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ import io.nekohasekai.sfa.compose.base.BaseViewModel
|
|||||||
import io.nekohasekai.sfa.compose.base.ScreenEvent
|
import io.nekohasekai.sfa.compose.base.ScreenEvent
|
||||||
import io.nekohasekai.sfa.constant.Status
|
import io.nekohasekai.sfa.constant.Status
|
||||||
import io.nekohasekai.sfa.ktx.toList
|
import io.nekohasekai.sfa.ktx.toList
|
||||||
import io.nekohasekai.sfa.ui.connections.Connection
|
import io.nekohasekai.sfa.compose.model.Connection
|
||||||
import io.nekohasekai.sfa.ui.connections.ConnectionSort
|
import io.nekohasekai.sfa.compose.model.ConnectionSort
|
||||||
import io.nekohasekai.sfa.ui.connections.ConnectionStateFilter
|
import io.nekohasekai.sfa.compose.model.ConnectionStateFilter
|
||||||
import io.nekohasekai.sfa.utils.CommandClient
|
import io.nekohasekai.sfa.utils.CommandClient
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
|||||||
@@ -65,8 +65,8 @@ import io.nekohasekai.libbox.Libbox
|
|||||||
import io.nekohasekai.sfa.R
|
import io.nekohasekai.sfa.R
|
||||||
import io.nekohasekai.sfa.compose.screen.dashboard.groups.GroupsViewModel
|
import io.nekohasekai.sfa.compose.screen.dashboard.groups.GroupsViewModel
|
||||||
import io.nekohasekai.sfa.constant.Status
|
import io.nekohasekai.sfa.constant.Status
|
||||||
import io.nekohasekai.sfa.ui.dashboard.Group
|
import io.nekohasekai.sfa.compose.model.Group
|
||||||
import io.nekohasekai.sfa.ui.dashboard.GroupItem
|
import io.nekohasekai.sfa.compose.model.GroupItem
|
||||||
import io.nekohasekai.sfa.utils.CommandClient
|
import io.nekohasekai.sfa.utils.CommandClient
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import io.nekohasekai.libbox.Libbox
|
import io.nekohasekai.libbox.Libbox
|
||||||
import io.nekohasekai.libbox.ProfileContent
|
import io.nekohasekai.libbox.ProfileContent
|
||||||
import io.nekohasekai.sfa.R
|
import io.nekohasekai.sfa.R
|
||||||
import io.nekohasekai.sfa.compose.NewProfileComposeActivity
|
import io.nekohasekai.sfa.compose.NewProfileActivity
|
||||||
import io.nekohasekai.sfa.compose.screen.configuration.ProfileImportHandler
|
import io.nekohasekai.sfa.compose.screen.configuration.ProfileImportHandler
|
||||||
import io.nekohasekai.sfa.compose.screen.configuration.QRCodeDialog
|
import io.nekohasekai.sfa.compose.screen.configuration.QRCodeDialog
|
||||||
import io.nekohasekai.sfa.compose.util.QRCodeGenerator
|
import io.nekohasekai.sfa.compose.util.QRCodeGenerator
|
||||||
@@ -114,7 +114,7 @@ fun ProfilesCard(
|
|||||||
ActivityResultContracts.StartActivityForResult(),
|
ActivityResultContracts.StartActivityForResult(),
|
||||||
) { result ->
|
) { result ->
|
||||||
if (result.resultCode == android.app.Activity.RESULT_OK) {
|
if (result.resultCode == android.app.Activity.RESULT_OK) {
|
||||||
val profileId = result.data?.getLongExtra(NewProfileComposeActivity.EXTRA_PROFILE_ID, -1L)
|
val profileId = result.data?.getLongExtra(NewProfileActivity.EXTRA_PROFILE_ID, -1L)
|
||||||
if (profileId != null && profileId != -1L) {
|
if (profileId != null && profileId != -1L) {
|
||||||
coroutineScope.launch {
|
coroutineScope.launch {
|
||||||
val profile =
|
val profile =
|
||||||
@@ -165,9 +165,9 @@ fun ProfilesCard(
|
|||||||
is ProfileImportHandler.QRCodeParseResult.RemoteProfile -> {
|
is ProfileImportHandler.QRCodeParseResult.RemoteProfile -> {
|
||||||
withContext(Dispatchers.Main) {
|
withContext(Dispatchers.Main) {
|
||||||
val newProfileIntent =
|
val newProfileIntent =
|
||||||
Intent(context, NewProfileComposeActivity::class.java).apply {
|
Intent(context, NewProfileActivity::class.java).apply {
|
||||||
putExtra(NewProfileComposeActivity.EXTRA_IMPORT_NAME, parseResult.name)
|
putExtra(NewProfileActivity.EXTRA_IMPORT_NAME, parseResult.name)
|
||||||
putExtra(NewProfileComposeActivity.EXTRA_IMPORT_URL, parseResult.url)
|
putExtra(NewProfileActivity.EXTRA_IMPORT_URL, parseResult.url)
|
||||||
}
|
}
|
||||||
newProfileLauncher.launch(newProfileIntent)
|
newProfileLauncher.launch(newProfileIntent)
|
||||||
}
|
}
|
||||||
@@ -419,7 +419,7 @@ fun ProfilesCard(
|
|||||||
ListItem(
|
ListItem(
|
||||||
modifier = Modifier.clickable {
|
modifier = Modifier.clickable {
|
||||||
onHideAddProfileSheet()
|
onHideAddProfileSheet()
|
||||||
val intent = Intent(context, NewProfileComposeActivity::class.java)
|
val intent = Intent(context, NewProfileActivity::class.java)
|
||||||
newProfileLauncher.launch(intent)
|
newProfileLauncher.launch(intent)
|
||||||
},
|
},
|
||||||
leadingContent = {
|
leadingContent = {
|
||||||
|
|||||||
@@ -55,8 +55,8 @@ import androidx.lifecycle.viewmodel.compose.viewModel
|
|||||||
import io.nekohasekai.libbox.Libbox
|
import io.nekohasekai.libbox.Libbox
|
||||||
import io.nekohasekai.sfa.R
|
import io.nekohasekai.sfa.R
|
||||||
import io.nekohasekai.sfa.constant.Status
|
import io.nekohasekai.sfa.constant.Status
|
||||||
import io.nekohasekai.sfa.ui.dashboard.Group
|
import io.nekohasekai.sfa.compose.model.Group
|
||||||
import io.nekohasekai.sfa.ui.dashboard.GroupItem
|
import io.nekohasekai.sfa.compose.model.GroupItem
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun GroupsScreen(
|
fun GroupsScreen(
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import io.nekohasekai.libbox.OutboundGroup
|
|||||||
import io.nekohasekai.sfa.compose.base.BaseViewModel
|
import io.nekohasekai.sfa.compose.base.BaseViewModel
|
||||||
import io.nekohasekai.sfa.compose.base.ScreenEvent
|
import io.nekohasekai.sfa.compose.base.ScreenEvent
|
||||||
import io.nekohasekai.sfa.constant.Status
|
import io.nekohasekai.sfa.constant.Status
|
||||||
import io.nekohasekai.sfa.ui.dashboard.Group
|
import io.nekohasekai.sfa.compose.model.Group
|
||||||
import io.nekohasekai.sfa.ui.dashboard.GroupItem
|
import io.nekohasekai.sfa.compose.model.GroupItem
|
||||||
import io.nekohasekai.sfa.ui.dashboard.toList
|
import io.nekohasekai.sfa.compose.model.toList
|
||||||
import io.nekohasekai.sfa.utils.CommandClient
|
import io.nekohasekai.sfa.utils.CommandClient
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
|||||||
Reference in New Issue
Block a user