The intermediate result of bytes_downloaded*100
overflows the supported range of an int (> 2^31-1) and gives you a negative result.
You can solve it by using a long and cast the final result back to an int:
final int dl_progress = (int)((bytes_downloaded*100L)/bytes_total);