From 9c48fa24fb5dac9afb44785415ebd82385483a29 Mon Sep 17 00:00:00 2001 From: Arslaan Pathan Date: Sun, 16 Aug 2026 19:55:22 +1200 Subject: [impl] add AssistantService foreground service --- .../mokuassistant/AssistantService.java | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 app/src/main/java/com/arslaancodes/mokuassistant/AssistantService.java (limited to 'app/src/main/java/com/arslaancodes') diff --git a/app/src/main/java/com/arslaancodes/mokuassistant/AssistantService.java b/app/src/main/java/com/arslaancodes/mokuassistant/AssistantService.java new file mode 100644 index 0000000..d30ed2e --- /dev/null +++ b/app/src/main/java/com/arslaancodes/mokuassistant/AssistantService.java @@ -0,0 +1,73 @@ +package com.arslaancodes.mokuassistant; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.Service; +import android.content.Intent; +import android.os.Build; +import android.os.IBinder; +import android.util.Log; + +import androidx.core.app.NotificationCompat; + +public class AssistantService extends Service { + private static final String TAG = "moku"; + private static final String CHANNEL_ID = "moku_assistant_channel"; + private static final int NOTIFICATION_ID = 1001; + + @Override + public void onCreate() { + super.onCreate(); + createNotificationChannel(); + Log.i(TAG, "AssistantService created"); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.i(TAG, "AssistantService started"); + + Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID).setContentTitle("moku Assistant").setContentText("listening...").setSmallIcon(android.R.drawable.ic_btn_speak_now).setPriority(NotificationCompat.PRIORITY_LOW).build(); + + startForeground(NOTIFICATION_ID, notification); + + startAssistant(); + + return START_STICKY; + } + + @Override + public void onDestroy() { + Log.i(TAG, "AssistantService destroyed"); + stopAssistant(); + super.onDestroy(); + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + private void createNotificationChannel() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel channel = new NotificationChannel( + CHANNEL_ID, + "moku Assistant", + NotificationManager.IMPORTANCE_LOW + ); + channel.setDescription("Shows when moku Assistant is running"); + NotificationManager manager = getSystemService(NotificationManager.class); + if (manager != null) { + manager.createNotificationChannel(channel); + } + } + } + + // JNI functions + private static native void startAssistant(); + private static native void stopAssistant(); + + static { + System.loadLibrary("moku"); + } +} -- cgit v1.2.3