package android.car.usb.handler;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
import android.os.UserHandle;
import android.os.UserManager;

import java.util.ArrayList;
import java.util.HashMap;

/** Queues work to the BootUsbService job to scan for connected devices. */
public class BootUsbScanner extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // Only start the service for the non-system user, or for the system user if it is running
        // as a "real" user. This ensures the service is started only once and is started even on a
        // foreground user switch.
        if (context.getUserId() == UserHandle.USER_SYSTEM
                && UserManager.isHeadlessSystemUserMode()) {
            return;
        }
        // we defer this processing to BootUsbService so that we are very quick to process
        // LOCKED_BOOT_COMPLETED
        UsbManager usbManager = context.getSystemService(UsbManager.class);
        HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
        if (deviceList.size() > 0) {
            Intent bootUsbServiceIntent = new Intent(context, BootUsbService.class);
            bootUsbServiceIntent.putParcelableArrayListExtra(
                    BootUsbService.USB_DEVICE_LIST_KEY, new ArrayList<>(deviceList.values()));

            context.startForegroundService(bootUsbServiceIntent);
        }
    }
}
