package net.everythingandroid.smspopup.controls; import android.content.Context; import android.telephony.SmsMessage; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.widget.Button; import android.widget.TextView; public class QmTextWatcher implements TextWatcher { private TextView mTextView; private Button mSendButton; private static final int CHARS_REMAINING_BEFORE_COUNTER_SHOWN = 30; public QmTextWatcher(Context context, TextView updateTextView, Button sendButton) { mTextView = updateTextView; mSendButton = sendButton; } public QmTextWatcher(Context context, TextView updateTextView) { mTextView = updateTextView; mSendButton = null; } @Override public void afterTextChanged(Editable s) {} @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) {} @Override public void onTextChanged(CharSequence s, int start, int before, int count) { getQuickReplyCounterText(s, mTextView, mSendButton); } public static void getQuickReplyCounterText(CharSequence s, TextView mTextView, Button mSendButton) { if (mSendButton != null) { if (s.length() > 0) { mSendButton.setEnabled(true); } else { mSendButton.setEnabled(false); } } if (s.length() < (80 - CHARS_REMAINING_BEFORE_COUNTER_SHOWN)) { mTextView.setVisibility(View.GONE); return; } /* * SmsMessage.calculateLength returns an int[4] with: int[0] being the number of SMS's * required, int[1] the number of code units used, int[2] is the number of code units * remaining until the next message. int[3] is the encoding type that should be used for the * message. */ int[] params = SmsMessage.calculateLength(s, false); int msgCount = params[0]; int remainingInCurrentMessage = params[2]; if (msgCount > 1 || remainingInCurrentMessage <= CHARS_REMAINING_BEFORE_COUNTER_SHOWN) { mTextView.setText(remainingInCurrentMessage + " / " + msgCount); mTextView.setVisibility(View.VISIBLE); } else { mTextView.setVisibility(View.GONE); } } }