I recently realized Pi-hole is not working on my android phone at all. I did some research and find out other people have experienced the same problem. The culprit is the automatic IPv6 resolver.
I use pfSense as my router, and I dedicated Pi-Hole as the only DNS server for the whole network. Every device connected to this network should use pi-hole by default unless this device connects to a VPN or have a manually set DNS.
However, Android will somewhat make use of IPv6 to find out my ISP's IPv6 DNS and set that one as my primary DNS. You would think this won't be a problem if I manually set my DNS in wifi settings. Wrong. I did that and android forcefully set the IPv6 DNS as primary before pi-hole.
So far my solution is to disable IPv6 all together on pfSense. I do not know what else could work. Frankly, I don't know how Android even knows my ISP's DNS. My whole network is on VPN. DNS leak test shows that my DNS request went to the VPN servers.