I guess it depends on what the server does, but it doesn't add much protection either way (or is even worse). (Also, does the average user know how to compute a hash on mobile? Sounds quite a hassle to me.)
1. Server stores hashed password
This means client sends H = hash(password)
to the server, server looks up clients hashed password H'
in the DB and validates client by checking H == H'
. This is really bad. Now if a DB breach happens the attacker can enter the hashed password that was stored in the DB to login. It essentially removes the point of hashing in the first place and is as if the plaintext password was stored.
2. Server stores hash of hashed password
This means client sends H = hash(password)
to the server, server looks up hash of clients hashed password H'
in the DB and validates client by checking H' == hash(H)
. Now if a DB breach happens the attacker must check if hash(hash(guess)) == recovered_hash
, so the cost to the attacker is about 2x what it would be with no client-side hashing (i.e. the attacker can check passwords 50% slower which isn't much of a win). The security in this case still depends on hash
being a (non-invertible) function resistant to dictionary attacks, client side hashing does little to help.
Summing up, the best thing to do is have the client enter the password in plaintext, transmit the password to the server over HTTPS, and hash the password on the server with something like bcrypt or scrypt, storing only the hash on the server. The reason your construction isn't an improvement is that the "seed" if you will does not gain any entropy and is just as easy (or not easy) to guess, you are just adding an intermediate stage.