Rinse the rice in cold water until the water runs clear. Soak the rice in cold water for 20-30 minutes.
In a large mixing bowl, add chicken, yogurt, ginger, garlic, and salt. Mix well and let it marinate for at least 30 minutes.
In a large pot or Dutch oven, heat oil over medium heat. Add sliced onions and fry until they turn golden brown. Remove half of the onions and set them aside for garnish.
Add bay leaves, cinnamon stick, green cardamom pods, and cumin seeds to the pot. Fry for a minute until fragrant.
Add diced tomatoes and fry until they turn soft and pulpy.
Add marinated chicken to the pot and fry for 5-7 minutes until the chicken is no longer pink.
Add coriander powder, turmeric powder, garam masala, and red chili powder. Mix well and fry for another minute.
Drain the soaked rice and add it to the pot. Mix well with the chicken and spices.
Add 3 cups of water to the pot and stir well. Bring the mixture to a boil and then reduce the heat to low. Cover the pot with a tight-fitting lid and let it simmer for 20-25 minutes or until the rice is fully cooked and the liquid has been absorbed.
Turn off the heat and let the biryani sit for 5-10 minutes. Fluff the rice with a fork and garnish with fried onions and chopped cilantro leaves before serving.