Skip to content

Commit

Permalink
Merge pull request #244 from GuoXiCheng/dev
Browse files Browse the repository at this point in the history
add NotificationDialog
  • Loading branch information
GuoXiCheng authored Sep 20, 2024
2 parents 4b974df + da3ae46 commit 3fc302c
Show file tree
Hide file tree
Showing 6 changed files with 143 additions and 6 deletions.
22 changes: 22 additions & 0 deletions app/src/main/java/com/android/skip/ui/alive/AliveActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.runtime.Composable
import androidx.core.app.NotificationManagerCompat
import com.android.skip.MyApp
import com.android.skip.R
import com.android.skip.ui.alive.backstage.BackstageButton
Expand All @@ -20,6 +21,8 @@ import com.android.skip.ui.components.FlatButton
import com.android.skip.ui.components.ResourceIcon
import com.android.skip.ui.components.RowContent
import com.android.skip.ui.components.ScaffoldPage
import com.android.skip.ui.components.notification.NotificationDialog
import com.android.skip.ui.components.notification.NotificationDialogViewModel
import com.android.skip.ui.theme.AppTheme
import com.android.skip.ui.webview.WebViewActivity
import dagger.hilt.android.AndroidEntryPoint
Expand All @@ -31,6 +34,8 @@ class AliveActivity : AppCompatActivity() {

private val notificationBarViewModel by viewModels<NotificationBarViewModel>()

private val notificationDialogViewModel by viewModels<NotificationDialogViewModel> ()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Expand Down Expand Up @@ -60,9 +65,26 @@ class AliveActivity : AppCompatActivity() {
}
startActivity(intent)
}
NotificationDialog(notificationDialogViewModel) {
notificationBarViewModel.changeEnable(false)
notificationDialogViewModel.changeDialogState(false)
}
})
}
}

notificationBarViewModel.enable.observe(this) {
if (it && !NotificationManagerCompat.from(MyApp.context).areNotificationsEnabled()) {
notificationDialogViewModel.changeDialogState(true)
}
}
}

override fun onResume() {
super.onResume()
if (!NotificationManagerCompat.from(MyApp.context).areNotificationsEnabled()) {
notificationBarViewModel.changeEnable(false)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.android.skip.ui.components.notification

import android.content.Intent
import android.provider.Settings
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import com.android.skip.MyApp
import com.android.skip.R

@Composable
fun NotificationDialog(
notificationDialogViewModel: NotificationDialogViewModel,
onDismiss: () -> Unit
) {
val showDialog = notificationDialogViewModel.showDialog.observeAsState()
val context = LocalContext.current
if (showDialog.value == true) {
AlertDialog(
containerColor = MaterialTheme.colorScheme.background,
title = {
Text(text = stringResource(id = R.string.dialog_notification_title))
},
text = {
Text(text = stringResource(id = R.string.dialog_notification_content))
},
onDismissRequest = onDismiss,
confirmButton = {
TextButton(
onClick = {
val intent = Intent().apply {
action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
putExtra(Settings.EXTRA_APP_PACKAGE, MyApp.context.packageName)
}
context.startActivity(intent)
notificationDialogViewModel.changeDialogState(false)
}
) {
Text(stringResource(id = R.string.dialog_confirm))
}
},
dismissButton = {
TextButton(
onClick = onDismiss
) {
Text(stringResource(id = R.string.dialog_dismiss))
}
}
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.android.skip.ui.components.notification

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject

@HiltViewModel
class NotificationDialogViewModel @Inject constructor(): ViewModel() {
private val _showDialog = MutableLiveData(false)
val showDialog: LiveData<Boolean> = _showDialog

fun changeDialogState(isShow: Boolean) {
_showDialog.postValue(isShow)
}
}
27 changes: 22 additions & 5 deletions app/src/main/java/com/android/skip/ui/inspect/InspectActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,15 @@ import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
import com.android.skip.MyApp
import com.android.skip.R
import com.android.skip.service.AccessibilityInspectViewModel
import com.android.skip.service.InspectService
import com.android.skip.ui.components.ScaffoldPage
import com.android.skip.ui.components.notification.NotificationDialog
import com.android.skip.ui.components.notification.NotificationDialogViewModel
import com.android.skip.ui.inspect.record.InspectRecordButton
import com.android.skip.ui.inspect.record.InspectRecordViewModel
import com.android.skip.ui.inspect.start.StartInspectButton
Expand All @@ -31,6 +34,8 @@ class InspectActivity : AppCompatActivity() {

private val accessibilityInspectViewModel by viewModels<AccessibilityInspectViewModel>()

private val notificationDialogViewModel by viewModels<NotificationDialogViewModel>()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Expand All @@ -40,6 +45,10 @@ class InspectActivity : AppCompatActivity() {
InspectRecordButton(inspectRecordViewModel) {
startActivity(Intent(MyApp.context, InspectRecordActivity::class.java))
}
NotificationDialog(notificationDialogViewModel) {
notificationDialogViewModel.changeDialogState(false)
startInspectViewModel.changeInspectState(false)
}
})
}
}
Expand All @@ -61,11 +70,16 @@ class InspectActivity : AppCompatActivity() {
when (value) {
true -> {
if (!ServiceUtils.isServiceRunning(InspectService::class.java)) {
// TODO(通知权限检查)
val mediaProjectionManager =
getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
val screenCaptureIntent = mediaProjectionManager.createScreenCaptureIntent()
screenshotPermissionLauncher.launch(screenCaptureIntent)

if (!NotificationManagerCompat.from(MyApp.context).areNotificationsEnabled()) {
notificationDialogViewModel.changeDialogState(true)
} else {
val mediaProjectionManager =
getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
val screenCaptureIntent =
mediaProjectionManager.createScreenCaptureIntent()
screenshotPermissionLauncher.launch(screenCaptureIntent)
}
}
}

Expand All @@ -84,5 +98,8 @@ class InspectActivity : AppCompatActivity() {

override fun onResume() {
super.onResume()
if (!ServiceUtils.isServiceRunning(InspectService::class.java)) {
startInspectViewModel.changeInspectState(false)
}
}
}
23 changes: 23 additions & 0 deletions app/src/main/java/com/android/skip/ui/settings/SettingsActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@ import android.os.Bundle
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.NotificationManagerCompat
import com.android.skip.MyApp
import com.android.skip.R
import com.android.skip.data.config.ConfigViewModel
import com.android.skip.ui.components.ScaffoldPage
import com.android.skip.ui.components.notification.NotificationDialog
import com.android.skip.ui.components.notification.NotificationDialogViewModel
import com.android.skip.ui.settings.custom.CustomButton
import com.android.skip.ui.settings.strict.StrictButton
import com.android.skip.ui.settings.strict.StrictViewModel
Expand All @@ -26,6 +30,8 @@ class SettingsActivity : AppCompatActivity() {

private val configViewModel by viewModels<ConfigViewModel>()

private val notificationDialogViewModel by viewModels<NotificationDialogViewModel>()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

Expand All @@ -40,8 +46,25 @@ class SettingsActivity : AppCompatActivity() {
}
startActivity(intent)
}
NotificationDialog(notificationDialogViewModel) {
notificationDialogViewModel.changeDialogState(false)
tipViewModel.changeEnable(false)
}
})
}
}

tipViewModel.enable.observe(this) {
if (it && !NotificationManagerCompat.from(MyApp.context).areNotificationsEnabled()) {
notificationDialogViewModel.changeDialogState(true)
}
}
}

override fun onResume() {
super.onResume()
if (!NotificationManagerCompat.from(MyApp.context).areNotificationsEnabled()) {
tipViewModel.changeEnable(false)
}
}
}
4 changes: 3 additions & 1 deletion app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
<string name="about_app_version">应用版本号</string>
<string name="about_config_version">配置版本号</string>
<string name="checking">检查中…</string>
<string name="invalid_config">无效的配置</string>
<string name="invalid_config">未检测到有效的配置</string>

<string name="toast_start_accessibility_first">请先开启无障碍服务</string>
<string name="toast_save_success">保存成功</string>
Expand All @@ -66,6 +66,8 @@
<string name="dialog_confirm">确认</string>
<string name="dialog_dismiss">取消</string>
<string name="dialog_edit_custom_config">编辑自定义配置</string>
<string name="dialog_notification_title">通知权限请求</string>
<string name="dialog_notification_content">请开启「允许通知」以便获取通知访问权限</string>

<string name="store_custom_config">CUSTOM_CONFIG</string>
<string name="store_default_config">https://skip.guoxicheng.top/skip_config_v3.yaml</string>
Expand Down

0 comments on commit 3fc302c

Please sign in to comment.