I figured it out! I have a bangle.js smartwatch and it was acting as an input device, causing the on-screen keyboard to never show. This is actually nice behavior if I knowingly attached a bluetooth keyboard, but in this case it was confusing. To fix it, I just disabled the watch as an input device in the bluetooth menu.
Thanks for your help everyone!