Heat the oil in a deep skillet over medium-high. Brown the chicken pieces in two batches, about 3 minutes per batch, and set them aside. They do not need to cook through here.
Lower the heat to medium and cook the onion in the same pan until genuinely soft and starting to turn golden, 7 to 8 minutes. Rushing this is the most common reason a curry tastes thin.
Add the garlic and ginger for 1 minute, then the curry powder, cumin, and turmeric. Stir constantly for 60 seconds until fragrant.
Add the tomatoes and scrape the pan clean. Simmer 5 minutes, then stir in the coconut milk and salt.
Return the chicken and simmer 12 to 15 minutes until cooked through and the sauce has thickened. Finish with cilantro and serve over rice.