Skip to content

Commit fc0feaa

Browse files
committed
Activity Recognition: Add RemoteView to service, & UI improvements
1 parent 4f05d5f commit fc0feaa

File tree

9 files changed

+138
-37
lines changed

9 files changed

+138
-37
lines changed

activity_recognition/src/main/java/com/asemlab/samples/activity_recognition/services/ActivityTrackingService.kt

Lines changed: 6 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.asemlab.samples.activity_recognition.R
1515
import com.asemlab.samples.activity_recognition.ui.MainActivity
1616
import com.asemlab.samples.activity_recognition.utilties.ActivityDetectionUtility
1717
import com.asemlab.samples.activity_recognition.utilties.Constants
18+
import com.asemlab.samples.activity_recognition.utilties.NotificationUtils
1819

1920
class ActivityTrackingService : Service() {
2021

@@ -24,14 +25,17 @@ class ActivityTrackingService : Service() {
2425
flags: Int,
2526
startId: Int
2627
): Int {
28+
29+
val notification = NotificationUtils.createNotification(this, "0")
30+
2731
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
2832
startForeground(
2933
Constants.SERVICE_NOTIFICATION_ID,
30-
createNotification(),
34+
notification,
3135
ServiceInfo.FOREGROUND_SERVICE_TYPE_HEALTH
3236
)
3337
} else
34-
startForeground(Constants.SERVICE_NOTIFICATION_ID, createNotification())
38+
startForeground(Constants.SERVICE_NOTIFICATION_ID, notification)
3539

3640
ActivityDetectionUtility.switchUpdatesDetecting(this)
3741
// ActivityDetectionUtility.switchTransitionsDetecting(this)
@@ -44,38 +48,6 @@ class ActivityTrackingService : Service() {
4448
super.onDestroy()
4549
}
4650

47-
private fun createNotificationChannel(context: Context) {
48-
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
49-
val channel = NotificationChannel(
50-
Constants.NOTIFICATION_CHANNEL_ID,
51-
Constants.NOTIFICATION_CHANNEL_NAME,
52-
NotificationManager.IMPORTANCE_LOW
53-
)
54-
val manager =
55-
context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
56-
manager.createNotificationChannel(channel)
57-
}
58-
}
59-
60-
private fun createNotification(): Notification {
61-
createNotificationChannel(this)
62-
63-
val mainIntent = Intent(this, MainActivity::class.java)
64-
val mainPendingIntent = PendingIntent.getActivity(
65-
this, Constants.SERVICE_NOTIFICATION_INTENT_ID,
66-
mainIntent,
67-
PendingIntent.FLAG_IMMUTABLE
68-
)
69-
70-
return NotificationCompat.Builder(this, Constants.NOTIFICATION_CHANNEL_ID)
71-
.setContentTitle("Activity tracking enabled")
72-
.setContentText("Detecting your activity")
73-
.setSmallIcon(R.drawable.ic_steps)
74-
.setContentIntent(mainPendingIntent)
75-
.setShowWhen(false)
76-
.setOngoing(true)
77-
.build()
78-
}
7951

8052
override fun onBind(intent: Intent?): IBinder? = null
8153
}

activity_recognition/src/main/java/com/asemlab/samples/activity_recognition/services/ActivityUpdatesReceiver.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ import com.asemlab.samples.activity_recognition.utilties.ActivityType.RUNNING
1111
import com.asemlab.samples.activity_recognition.utilties.ActivityType.STILL
1212
import com.asemlab.samples.activity_recognition.utilties.ActivityType.UNKNOWN
1313
import com.asemlab.samples.activity_recognition.utilties.ActivityType.WALKING
14+
import com.asemlab.samples.activity_recognition.utilties.Constants
1415
import com.asemlab.samples.activity_recognition.utilties.DataStoreUtils
16+
import com.asemlab.samples.activity_recognition.utilties.NotificationUtils
1517
import com.google.android.gms.location.ActivityRecognitionResult
1618
import kotlinx.coroutines.CoroutineScope
1719
import kotlinx.coroutines.Dispatchers
20+
import kotlinx.coroutines.flow.first
1821
import kotlinx.coroutines.launch
1922

2023

@@ -41,7 +44,15 @@ class ActivityUpdatesReceiver : BroadcastReceiver() {
4144
}
4245

4346
CoroutineScope(Dispatchers.IO).launch {
44-
DataStoreUtils.updateCurrentPoints(context, confidence / 10)
47+
DataStoreUtils.updateCurrentPoints(context, steps)
48+
49+
val currentSteps = DataStoreUtils.getCurrentPoints(context).first()
50+
51+
NotificationUtils.updateNotification(
52+
context,
53+
Constants.SERVICE_NOTIFICATION_ID,
54+
currentSteps.toString()
55+
)
4556
}
4657

4758

activity_recognition/src/main/java/com/asemlab/samples/activity_recognition/utilties/BindingUtility.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.asemlab.samples.activity_recognition.utilties
22

33
import android.widget.ImageView
4+
import android.widget.TextView
45
import androidx.databinding.BindingAdapter
56
import com.asemlab.samples.activity_recognition.R
67
import com.asemlab.samples.activity_recognition.model.ActivityEntry
@@ -14,4 +15,9 @@ fun ImageView.setIconEntry(entry: ActivityEntry) {
1415
// Not needed
1516
}
1617
}
18+
}
19+
20+
@BindingAdapter("dateEntry")
21+
fun TextView.setDateEntry(date: Long) {
22+
text = date.toDate().formatDateWithPattern()
1723
}

activity_recognition/src/main/java/com/asemlab/samples/activity_recognition/utilties/DateFormatingUtility.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ fun Date.formatDate(): String {
1212
return formatter.format(this)
1313
}
1414

15-
fun Date.formatDateWithPattern(format: String): String {
15+
fun Date.formatDateWithPattern(format: String = mainPattern): String {
1616
val formatter = SimpleDateFormat(format)
1717

1818
return formatter.format(this)
19-
}
19+
}
20+
21+
const val mainPattern = "EE, dd MMM"
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.asemlab.samples.activity_recognition.utilties
2+
3+
import android.app.Notification
4+
import android.app.NotificationChannel
5+
import android.app.NotificationManager
6+
import android.app.PendingIntent
7+
import android.content.Context
8+
import android.content.Context.NOTIFICATION_SERVICE
9+
import android.content.Intent
10+
import android.os.Build
11+
import android.widget.RemoteViews
12+
import androidx.core.app.NotificationCompat
13+
import com.asemlab.samples.activity_recognition.R
14+
import com.asemlab.samples.activity_recognition.ui.MainActivity
15+
16+
object NotificationUtils {
17+
18+
fun createNotificationChannel(context: Context) {
19+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
20+
val channel = NotificationChannel(
21+
Constants.NOTIFICATION_CHANNEL_ID,
22+
Constants.NOTIFICATION_CHANNEL_NAME,
23+
NotificationManager.IMPORTANCE_LOW
24+
)
25+
val manager =
26+
context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
27+
manager.createNotificationChannel(channel)
28+
}
29+
}
30+
31+
32+
fun createNotification(context: Context, newContent: String): Notification {
33+
createNotificationChannel(context)
34+
35+
val mainIntent = Intent(context, MainActivity::class.java)
36+
val mainPendingIntent = PendingIntent.getActivity(
37+
context, Constants.SERVICE_NOTIFICATION_INTENT_ID,
38+
mainIntent,
39+
PendingIntent.FLAG_IMMUTABLE
40+
)
41+
42+
return NotificationCompat.Builder(context, Constants.NOTIFICATION_CHANNEL_ID)
43+
.setContentTitle("Activity tracking enabled")
44+
.setContentText(newContent)
45+
.setSmallIcon(R.drawable.ic_steps)
46+
.setContentIntent(mainPendingIntent)
47+
.setCustomContentView(createStepsNotificationLayout(context, newContent))
48+
.setCustomBigContentView(createStepsNotificationLayout(context, newContent))
49+
.setShowWhen(false)
50+
.setOngoing(true)
51+
.build()
52+
}
53+
54+
fun createStepsNotificationLayout(context: Context, steps: String): RemoteViews {
55+
return RemoteViews(context.packageName, R.layout.steps_notification).apply {
56+
setTextViewText(R.id.steps_tv, steps)
57+
}
58+
}
59+
60+
fun updateNotification(context: Context, id: Int, newContent: String) {
61+
val manager = context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
62+
manager.notify(id, createNotification(context, newContent))
63+
}
64+
65+
}

activity_recognition/src/main/res/layout/entry_item.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,18 @@
4343
app:layout_constraintTop_toTopOf="parent"
4444
tools:text="500" />
4545

46+
<TextView
47+
android:id="@+id/date"
48+
android:layout_width="wrap_content"
49+
android:layout_height="wrap_content"
50+
android:textColor="@color/white"
51+
android:textSize="18sp"
52+
app:dateEntry="@{entry.date}"
53+
android:layout_marginStart="8dp"
54+
app:layout_constraintBottom_toBottomOf="parent"
55+
app:layout_constraintEnd_toEndOf="parent"
56+
app:layout_constraintTop_toTopOf="parent"
57+
tools:text="Su, 15 Feb" />
58+
4659
</androidx.constraintlayout.widget.ConstraintLayout>
4760
</layout>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:layout_width="match_parent"
6+
android:layout_height="wrap_content"
7+
android:padding="8dp"
8+
android:orientation="horizontal">
9+
10+
<ImageView
11+
android:layout_width="32dp"
12+
android:layout_height="32dp"
13+
android:layout_marginEnd="16dp"
14+
android:src="@drawable/ic_footprint"
15+
android:tint="@color/notification" />
16+
17+
<TextView
18+
android:id="@+id/steps_tv"
19+
android:layout_width="wrap_content"
20+
android:layout_height="match_parent"
21+
android:gravity="center"
22+
android:textColor="@color/notification"
23+
android:textAppearance="@style/TextAppearance.Material3.HeadlineSmall"
24+
tools:text="55" />
25+
26+
27+
</LinearLayout>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<color name="notification">#FFFFFFFF</color>
4+
</resources>

activity_recognition/src/main/res/values/colors.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,5 @@
1111
<color name="red_start">#EF9A9A</color>
1212
<color name="red_end">#C62828</color>
1313
<color name="red_center">#F44336</color>
14+
<color name="notification">#FF000000</color>
1415
</resources>

0 commit comments

Comments
 (0)