package com.arslaancodes.mokuassistant; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; 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 String CHANNEL_NAME = "moku Assistant"; 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 = buildNotification(); 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, CHANNEL_NAME, NotificationManager.IMPORTANCE_LOW ); channel.setDescription("Shows when moku Assistant is running"); channel.setShowBadge(false); NotificationManager manager = getSystemService(NotificationManager.class); if (manager != null) { manager.createNotificationChannel(channel); } } } private Notification buildNotification() { Intent notificationIntent = new Intent(this, AssistantService.class); PendingIntent pendingIntent = PendingIntent.getActivity( this, 0, notificationIntent, PendingIntent.FLAG_IMMUTABLE ); return new NotificationCompat.Builder(this, CHANNEL_ID) .setContentTitle("moku Assistant") .setContentText("listening...") .setSmallIcon(android.R.drawable.ic_btn_speak_now) .setContentIntent(pendingIntent) .setPriority(NotificationCompat.PRIORITY_LOW) .setOngoing(true) .build(); } private static native void startAssistant(); private static native void stopAssistant(); static { System.loadLibrary("moku"); } }