Problem with new Input System Plug/Unplug Generic Joystick

Hi, currently I’m developing an Device Manager where it will detect when the players Press “START” on Gamepad/Joystick or “ENTER” on Keyboard and it will create a new InputUser to associate with an InputActionAsset, when players unplug the device the code will detect the unplug and disable the InputActionAsset that associated with the unplug device and re-enable when the user plug in the device again, the problem that I’ve encountered was when I plug/unplug the Gamepad like PS4/5 DualShock DualSense the OnInputUserChange DeviceRegained work perfectly fine, but when I tried to plug/unplug the Generic Joystick, the first time that I do so, the code did not fired the DeviceRegained code path, instead it register that Joystick as a new device instead, and when I tried to plug/unplug that Generic Joystick for the second time, the code now fired the DeviceRegained code normally like it should, is there any fix to this behavior or is this an intended behavior?

public DeviceInstance[] devices;

public int deviceCount;
public static int MaxDeviceCounts = 4;

[Serializable]
public struct DeviceInstance
{
    public InputMap InputMap;
    public string DeviceName;
    public int DeviceId;
}

private void Start()
{
    devices = new DeviceInstance[MaxDeviceCounts];
}

void OnEnable()
{
    InputUser.listenForUnpairedDeviceActivity = 1;
    InputUser.onUnpairedDeviceUsed += OnUnpairedDeviceUsed;
    InputUser.onChange += OnInputUserChange;
}

private void OnInputUserChange(InputUser user, InputUserChange change, InputDevice device)
{
    //Handle users either disconnecting their device or signing out and reset their
    //gamepad represenation in the game
    
    if (device == null)
    {
        return;
    }

    switch (change)
    {
        case InputUserChange.DeviceLost: //Device Disconnected
            DisableDevice(device);
            break;
        case InputUserChange.DevicePaired:
            break;
        case InputUserChange.DeviceUnpaired:
            break;
        case InputUserChange.DeviceRegained:
            OnRePairedDeviceUsed(device);
            break;
        default:
            throw new ArgumentOutOfRangeException(nameof(change), change, null);
    }
}

private void OnUnpairedDeviceUsed(InputControl inputControl, InputEventPtr eventPtr)
{
    if (deviceCount >= MaxDeviceCounts)
    {
        Debug.LogError("MAX DEVICE POSSIBLE");
        return;
    }
    
    if (inputControl.device is Mouse)
        InputUser.PerformPairingWithDevice(inputControl.device, options: InputUserPairingOptions.UnpairCurrentDevicesFromUser);
    
    if (inputControl.device is Keyboard)
    {
        if (inputControl.displayName == "Enter")
        {
            Debug.LogError("PAIR KEYBOARD");
            AddNewDevice(inputControl);
        }
    }
    
    else if (inputControl.device is Gamepad)
    {
        if (inputControl.displayName == "Start")
        {
            Debug.LogError("PAIR GAMEPAD");
            AddNewDevice(inputControl);
        }
    }

    else if (inputControl.device is Joystick)
    {
        if (inputControl.displayName == "Button 10")
        {
            Debug.LogError("PAIR JOYSTICK");
            AddNewDevice(inputControl);
        }
    }
}

private void AddNewDevice(InputControl inputControl)
{
    for (var i = 0; i < devices.Length; i++)
    {
        if (devices[i].InputMap != null) continue;
        
        var newInputUser = InputUser.PerformPairingWithDevice(inputControl.device, options: InputUserPairingOptions.UnpairCurrentDevicesFromUser);
        var newDevice = new DeviceInstance();
        var newInputMap = new InputMap();
        newInputUser.AssociateActionsWithUser(newInputMap);
        Debug.LogError(newInputUser);
        newInputMap.Enable();

        newDevice.InputMap = newInputMap;
        newDevice.DeviceName = inputControl.device.name;
        newDevice.DeviceId = inputControl.device.deviceId;
        
        devices[i] = newDevice;
        deviceCount++;
        break;
    }
}

private void OnRePairedDeviceUsed(InputDevice device)
{
    Debug.LogError(device);

    for (var i = 0; i < devices.Length; i++)
    {
        if (device.name != devices[i].DeviceName) continue;
        
        Debug.Log($"Device {device.name} reconnected.");
        
        deviceCount++;
        break;
    }
}

private void DisableDevice(InputDevice device)
{
    for (var i = 0; i < devices.Length; i++)
    {
        if (device.name != devices[i].DeviceName) continue;
        
        deviceCount--;
        break;
    }
}

private void OnDisable()
{
    InputUser.onUnpairedDeviceUsed -= OnUnpairedDeviceUsed;
    InputUser.onChange -= OnInputUserChange;
}