You need to be careful with calling setText method inside TextWatcher. Otherwise you create an infinite loop, because you are always changing the text.
You could try the following an only set the text if it is really necessary:
if(!telephone.getText().toString().equals(formatted)) {
telephone.setText(formatted);
}
Instead of just:
telephone.setText(formatted);
That way you should be able to avoid creating an infinite loop