Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
T
TeamPrinterV2
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Aleksandr
TeamPrinterV2
Commits
c8233083
Commit
c8233083
authored
Jul 25, 2024
by
Aleksandr
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added requesting for notifications on details screen
parent
46b4ce28
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
46 additions
and
6 deletions
+46
-6
app/src/main/java/com/isidroid/c23/constant/Argument.kt
+2
-0
app/src/main/java/com/isidroid/c23/domain/use_case/DetailsUseCase.kt
+6
-1
app/src/main/java/com/isidroid/c23/ui/screen/content/ContentScreen.kt
+5
-1
app/src/main/java/com/isidroid/c23/ui/screen/content/ContentViewModel.kt
+3
-1
app/src/main/java/com/isidroid/c23/ui/screen/details/JobDetailsContract.kt
+6
-0
app/src/main/java/com/isidroid/c23/ui/screen/details/JobDetailsScreen.kt
+14
-0
app/src/main/java/com/isidroid/c23/ui/screen/details/JobDetailsViewModel.kt
+10
-3
No files found.
app/src/main/java/com/isidroid/c23/constant/Argument.kt
View file @
c8233083
...
@@ -11,6 +11,7 @@ import androidx.annotation.StringDef
...
@@ -11,6 +11,7 @@ import androidx.annotation.StringDef
Argument
.
ID
,
Argument
.
ID
,
Argument
.
INFO
,
Argument
.
INFO
,
Argument
.
MARKER
,
Argument
.
MARKER
,
Argument
.
HAS_NOTIFICATION_PERMISSION
,
)
)
annotation
class
Argument
{
annotation
class
Argument
{
companion
object
{
companion
object
{
...
@@ -22,5 +23,6 @@ annotation class Argument {
...
@@ -22,5 +23,6 @@ annotation class Argument {
const
val
INFO
=
"INFO"
const
val
INFO
=
"INFO"
const
val
MARKER
=
"MARKER"
const
val
MARKER
=
"MARKER"
const
val
DISTANCE
=
"DISTANCE"
const
val
DISTANCE
=
"DISTANCE"
const
val
HAS_NOTIFICATION_PERMISSION
=
"HAS_NOTIFICATION_PERMISSION"
}
}
}
}
app/src/main/java/com/isidroid/c23/domain/use_case/DetailsUseCase.kt
View file @
c8233083
...
@@ -10,6 +10,7 @@ import com.isidroid.c23.data.mapper.createListItem
...
@@ -10,6 +10,7 @@ import com.isidroid.c23.data.mapper.createListItem
import
com.isidroid.c23.domain.dto.PrintJobListItem
import
com.isidroid.c23.domain.dto.PrintJobListItem
import
com.isidroid.c23.ext.getPrintJobStatus
import
com.isidroid.c23.ext.getPrintJobStatus
import
com.isidroid.c23.ext.getPrintJobStatusColor
import
com.isidroid.c23.ext.getPrintJobStatusColor
import
com.isidroid.c23.ext.hasNotificationPermission
import
com.isidroid.c23.ext.isDebug
import
com.isidroid.c23.ext.isDebug
import
com.isidroid.core.FlowResult
import
com.isidroid.core.FlowResult
import
com.isidroid.job.repository.JobRepository
import
com.isidroid.job.repository.JobRepository
...
@@ -41,6 +42,9 @@ class DetailsUseCase @Inject constructor(
...
@@ -41,6 +42,9 @@ class DetailsUseCase @Inject constructor(
throw
NoLocationPermissionException
()
throw
NoLocationPermissionException
()
}
}
val
hasNotificationPermission
=
context
.
hasNotificationPermission
val
job
=
jobRepository
.
readLocalList
(
ids
=
listOf
(
id
)).
firstOrNull
()
?:
throw
JobNotFoundException
()
val
job
=
jobRepository
.
readLocalList
(
ids
=
listOf
(
id
)).
firstOrNull
()
?:
throw
JobNotFoundException
()
val
richSpot
=
spotRepository
.
findLocalRichSpots
(
ids
=
listOf
(
job
.
spotId
))
?.
firstOrNull
()
val
richSpot
=
spotRepository
.
findLocalRichSpots
(
ids
=
listOf
(
job
.
spotId
))
?.
firstOrNull
()
...
@@ -77,7 +81,8 @@ class DetailsUseCase @Inject constructor(
...
@@ -77,7 +81,8 @@ class DetailsUseCase @Inject constructor(
Argument
.
LATITUDE
to
location
.
first
,
Argument
.
LATITUDE
to
location
.
first
,
Argument
.
LONGITUDE
to
location
.
second
,
Argument
.
LONGITUDE
to
location
.
second
,
Argument
.
MARKER
to
mapMarker
,
Argument
.
MARKER
to
mapMarker
,
Argument
.
DISTANCE
to
distance
Argument
.
DISTANCE
to
distance
,
Argument
.
HAS_NOTIFICATION_PERMISSION
to
hasNotificationPermission
)
)
)
)
)
)
...
...
app/src/main/java/com/isidroid/c23/ui/screen/content/ContentScreen.kt
View file @
c8233083
package
com.isidroid.c23.ui.screen.content
package
com.isidroid.c23.ui.screen.content
import
android.Manifest
import
android.Manifest
import
android.os.Build
import
android.widget.Toast
import
android.widget.Toast
import
androidx.activity.compose.BackHandler
import
androidx.activity.compose.BackHandler
import
androidx.activity.compose.rememberLauncherForActivityResult
import
androidx.activity.compose.rememberLauncherForActivityResult
...
@@ -75,7 +76,10 @@ fun ContentScreen(
...
@@ -75,7 +76,10 @@ fun ContentScreen(
LaunchedEffect
(
state
.
value
.
documentHash
)
{
if
(
state
.
value
.
documentHash
!=
null
)
launcher
.
launch
(
"application/pdf"
)
}
LaunchedEffect
(
state
.
value
.
documentHash
)
{
if
(
state
.
value
.
documentHash
!=
null
)
launcher
.
launch
(
"application/pdf"
)
}
LaunchedEffect
(
state
.
value
.
wordHash
)
{
if
(
state
.
value
.
wordHash
!=
null
)
launcher
.
launch
(
"application/msword"
)
}
LaunchedEffect
(
state
.
value
.
wordHash
)
{
if
(
state
.
value
.
wordHash
!=
null
)
launcher
.
launch
(
"application/msword"
)
}
LaunchedEffect
(
state
.
value
.
documentTreeHash
)
{
if
(
state
.
value
.
documentTreeHash
!=
null
)
openDocumentTreeLauncher
.
launch
(
null
)
}
LaunchedEffect
(
state
.
value
.
documentTreeHash
)
{
if
(
state
.
value
.
documentTreeHash
!=
null
)
openDocumentTreeLauncher
.
launch
(
null
)
}
LaunchedEffect
(
"not_perm_${state.value.hasNotificationPermission}"
)
{
if
(
state
.
value
.
hasNotificationPermission
==
false
)
notificationLauncher
.
launch
(
Manifest
.
permission
.
POST_NOTIFICATIONS
)
}
LaunchedEffect
(
"not_perm_${state.value.hasNotificationPermission}"
)
{
if
(
state
.
value
.
hasNotificationPermission
==
false
&&
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
TIRAMISU
)
notificationLauncher
.
launch
(
Manifest
.
permission
.
POST_NOTIFICATIONS
)
}
LaunchedEffect
(
SIDE_EFFECTS_KEY
)
{
LaunchedEffect
(
SIDE_EFFECTS_KEY
)
{
...
...
app/src/main/java/com/isidroid/c23/ui/screen/content/ContentViewModel.kt
View file @
c8233083
...
@@ -52,7 +52,9 @@ class ContentViewModel @Inject constructor(
...
@@ -52,7 +52,9 @@ class ContentViewModel @Inject constructor(
}
}
private
suspend
fun
create
()
{
private
suspend
fun
create
()
{
useCase
.
create
().
flowOn
(
Dispatchers
.
IO
).
collect
{
useCase
.
create
()
.
flowOn
(
Dispatchers
.
IO
)
.
collect
{
val
(
data
,
hasPermission
)
=
it
val
(
data
,
hasPermission
)
=
it
if
(
data
==
null
)
if
(
data
==
null
)
...
...
app/src/main/java/com/isidroid/c23/ui/screen/details/JobDetailsContract.kt
View file @
c8233083
package
com.isidroid.c23.ui.screen.details
package
com.isidroid.c23.ui.screen.details
import
com.isidroid.c23.domain.dto.PrintJobListItem
import
com.isidroid.c23.domain.dto.PrintJobListItem
import
com.isidroid.c23.ui.screen.content.ContentContract.Event
import
com.isidroid.core.vm.ViewEvent
import
com.isidroid.core.vm.ViewEvent
import
com.isidroid.core.vm.ViewSideEffect
import
com.isidroid.core.vm.ViewSideEffect
import
com.isidroid.core.vm.ViewState
import
com.isidroid.core.vm.ViewState
...
@@ -12,6 +13,8 @@ class JobDetailsContract {
...
@@ -12,6 +13,8 @@ class JobDetailsContract {
data
object
DismissBuildRouteConfirmation
:
Event
data
object
DismissBuildRouteConfirmation
:
Event
data
object
OpenNavigationApp
:
Event
data
object
OpenNavigationApp
:
Event
data
object
LocationPermissionGranted
:
Event
data
object
LocationPermissionGranted
:
Event
data
object
CheckNotificationPermission
:
Event
}
}
sealed
interface
Effect
:
ViewSideEffect
{
sealed
interface
Effect
:
ViewSideEffect
{
...
@@ -31,5 +34,7 @@ class JobDetailsContract {
...
@@ -31,5 +34,7 @@ class JobDetailsContract {
val
distance
:
String
?
=
null
,
val
distance
:
String
?
=
null
,
val
renderProgress
:
Pair
<
Int
,
Int
>?
=
null
,
val
renderProgress
:
Pair
<
Int
,
Int
>?
=
null
,
val
uploadProgress
:
Pair
<
Int
,
Int
>?
=
null
,
val
uploadProgress
:
Pair
<
Int
,
Int
>?
=
null
,
val
hasNotificationPermission
:
Boolean
?
=
null
,
)
:
ViewState
)
:
ViewState
}
}
\ No newline at end of file
app/src/main/java/com/isidroid/c23/ui/screen/details/JobDetailsScreen.kt
View file @
c8233083
package
com.isidroid.c23.ui.screen.details
package
com.isidroid.c23.ui.screen.details
import
android.Manifest
import
android.os.Build
import
androidx.activity.compose.BackHandler
import
androidx.activity.compose.BackHandler
import
androidx.activity.compose.rememberLauncherForActivityResult
import
androidx.activity.result.contract.ActivityResultContracts
import
androidx.compose.runtime.Composable
import
androidx.compose.runtime.Composable
import
androidx.compose.runtime.LaunchedEffect
import
androidx.compose.runtime.LaunchedEffect
import
androidx.compose.runtime.State
import
androidx.compose.runtime.State
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.Modifier
import
com.isidroid.c23.ui.screen.content.ContentContract
import
com.isidroid.c23.ui.screen.details.component.DetailsV2
import
com.isidroid.c23.ui.screen.details.component.DetailsV2
import
com.isidroid.c23.ui.screen.map._components.RequestLocationPermissionComponent
import
com.isidroid.c23.ui.screen.map._components.RequestLocationPermissionComponent
import
com.isidroid.core.vm.SIDE_EFFECTS_KEY
import
com.isidroid.core.vm.SIDE_EFFECTS_KEY
...
@@ -26,6 +31,15 @@ fun JobDetailsScreen(
...
@@ -26,6 +31,15 @@ fun JobDetailsScreen(
onGranted
=
{
onEventSent
(
JobDetailsContract
.
Event
.
LocationPermissionGranted
)
}
onGranted
=
{
onEventSent
(
JobDetailsContract
.
Event
.
LocationPermissionGranted
)
}
)
)
val
notificationLauncher
=
rememberLauncherForActivityResult
(
ActivityResultContracts
.
RequestPermission
())
{
onEventSent
(
JobDetailsContract
.
Event
.
CheckNotificationPermission
)
}
LaunchedEffect
(
"not_perm_${state.value.hasNotificationPermission}"
)
{
if
(
state
.
value
.
hasNotificationPermission
==
false
&&
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
TIRAMISU
)
notificationLauncher
.
launch
(
Manifest
.
permission
.
POST_NOTIFICATIONS
)
}
LaunchedEffect
(
SIDE_EFFECTS_KEY
)
{
LaunchedEffect
(
SIDE_EFFECTS_KEY
)
{
effectFlow
?.
collect
{
effect
->
effectFlow
?.
collect
{
effect
->
when
(
effect
)
{
when
(
effect
)
{
...
...
app/src/main/java/com/isidroid/c23/ui/screen/details/JobDetailsViewModel.kt
View file @
c8233083
...
@@ -52,6 +52,7 @@ class JobDetailsViewModel @Inject constructor(
...
@@ -52,6 +52,7 @@ class JobDetailsViewModel @Inject constructor(
JobDetailsContract
.
Event
.
DismissBuildRouteConfirmation
->
setState
{
copy
(
routeConfirmationVisible
=
false
)
}
JobDetailsContract
.
Event
.
DismissBuildRouteConfirmation
->
setState
{
copy
(
routeConfirmationVisible
=
false
)
}
JobDetailsContract
.
Event
.
OpenNavigationApp
->
openNavigationApp
()
JobDetailsContract
.
Event
.
OpenNavigationApp
->
openNavigationApp
()
JobDetailsContract
.
Event
.
LocationPermissionGranted
->
locationPermissionGranted
()
JobDetailsContract
.
Event
.
LocationPermissionGranted
->
locationPermissionGranted
()
JobDetailsContract
.
Event
.
CheckNotificationPermission
->
setState
{
copy
(
hasNotificationPermission
=
null
)
}
}
}
}
}
...
@@ -94,17 +95,23 @@ class JobDetailsViewModel @Inject constructor(
...
@@ -94,17 +95,23 @@ class JobDetailsViewModel @Inject constructor(
lat
=
res
.
result
[
Argument
.
LATITUDE
]
as
?
Double
,
lat
=
res
.
result
[
Argument
.
LATITUDE
]
as
?
Double
,
lng
=
res
.
result
[
Argument
.
LONGITUDE
]
as
?
Double
,
lng
=
res
.
result
[
Argument
.
LONGITUDE
]
as
?
Double
,
mapMarker
=
res
.
result
[
Argument
.
MARKER
]
as
?
MapMarker
,
mapMarker
=
res
.
result
[
Argument
.
MARKER
]
as
?
MapMarker
,
distance
=
res
.
result
[
Argument
.
DISTANCE
]
as
?
String
distance
=
res
.
result
[
Argument
.
DISTANCE
]
as
?
String
,
hasNotificationPermission
=
res
.
result
[
Argument
.
HAS_NOTIFICATION_PERMISSION
]
as
?
Boolean
)
)
}
}
}
}
}
}
private
suspend
fun
onDetails
(
item
:
PrintJobListItem
?,
lat
:
Double
?,
lng
:
Double
?,
mapMarker
:
MapMarker
?,
distance
:
String
?)
{
private
suspend
fun
onDetails
(
item
:
PrintJobListItem
?,
lat
:
Double
?,
lng
:
Double
?,
mapMarker
:
MapMarker
?,
distance
:
String
?,
hasNotificationPermission
:
Boolean
?)
{
val
myLocation
=
MapMarker
(
id
=
"my_location"
,
lat
=
lat
?:
0.0
,
lng
=
lng
?:
0.0
,
name
=
"My location"
,
imageVector
=
Icons
.
Outlined
.
AccountCircle
)
val
myLocation
=
MapMarker
(
id
=
"my_location"
,
lat
=
lat
?:
0.0
,
lng
=
lng
?:
0.0
,
name
=
"My location"
,
imageVector
=
Icons
.
Outlined
.
AccountCircle
)
_spotResultStateFlow
.
emit
(
listOfNotNull
(
mapMarker
,
myLocation
))
_spotResultStateFlow
.
emit
(
listOfNotNull
(
mapMarker
,
myLocation
))
setState
{
copy
(
isLoading
=
false
,
printJob
=
item
,
lat
=
lat
,
lng
=
lng
,
distance
=
distance
)
}
setState
{
copy
(
isLoading
=
false
,
printJob
=
item
,
lat
=
lat
,
lng
=
lng
,
distance
=
distance
,
hasNotificationPermission
=
hasNotificationPermission
)
}
}
}
private
fun
openNavigationApp
()
{
private
fun
openNavigationApp
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment