diff options
Diffstat (limited to 'src/com/android/car/dialer/DialerFragment.java')
-rw-r--r-- | src/com/android/car/dialer/DialerFragment.java | 145 |
1 files changed, 93 insertions, 52 deletions
diff --git a/src/com/android/car/dialer/DialerFragment.java b/src/com/android/car/dialer/DialerFragment.java index bf3197a5..642bf198 100644 --- a/src/com/android/car/dialer/DialerFragment.java +++ b/src/com/android/car/dialer/DialerFragment.java @@ -19,16 +19,18 @@ import android.content.Context; import android.media.AudioManager; import android.media.ToneGenerator; import android.os.Bundle; -import android.os.Handler; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.TextUtils; -import android.util.ArrayMap; import android.util.Log; +import android.util.SparseArray; +import android.util.SparseIntArray; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; + import com.android.car.apps.common.FabDrawable; import com.android.car.dialer.telecom.TelecomUtils; import com.android.car.dialer.telecom.UiCallManager; @@ -40,12 +42,14 @@ import com.android.car.dialer.telecom.UiCallManager.CallListener; public class DialerFragment extends Fragment { private static final String TAG = "Em.DialerFragment"; private static final String INPUT_ACTIVE_KEY = "INPUT_ACTIVE_KEY"; + private static final String DIAL_NUMBER_KEY = "DIAL_NUMBER_KEY"; + + private static final int TONE_LENGTH_MS = 150; private static final int TONE_RELATIVE_VOLUME = 80; - private static final int ABANDON_AUDIO_FOCUS_DELAY_MS = 250; private static final int MAX_DIAL_NUMBER = 20; - private static final int NO_TONE = -1; - private static final ArrayMap<Integer, Integer> mToneMap = new ArrayMap<>(); + private static final SparseIntArray mToneMap = new SparseIntArray(); + private static final SparseArray<String> mDialValueMap = new SparseArray<>(); static { mToneMap.put(KeyEvent.KEYCODE_1, ToneGenerator.TONE_DTMF_1); @@ -60,14 +64,25 @@ public class DialerFragment extends Fragment { mToneMap.put(KeyEvent.KEYCODE_0, ToneGenerator.TONE_DTMF_0); mToneMap.put(KeyEvent.KEYCODE_STAR, ToneGenerator.TONE_DTMF_S); mToneMap.put(KeyEvent.KEYCODE_POUND, ToneGenerator.TONE_DTMF_P); + + mDialValueMap.put(KeyEvent.KEYCODE_1, "1"); + mDialValueMap.put(KeyEvent.KEYCODE_2, "2"); + mDialValueMap.put(KeyEvent.KEYCODE_3, "3"); + mDialValueMap.put(KeyEvent.KEYCODE_4, "4"); + mDialValueMap.put(KeyEvent.KEYCODE_5, "5"); + mDialValueMap.put(KeyEvent.KEYCODE_6, "6"); + mDialValueMap.put(KeyEvent.KEYCODE_7, "7"); + mDialValueMap.put(KeyEvent.KEYCODE_8, "8"); + mDialValueMap.put(KeyEvent.KEYCODE_9, "9"); + mDialValueMap.put(KeyEvent.KEYCODE_0, "0"); + mDialValueMap.put(KeyEvent.KEYCODE_STAR, "*"); + mDialValueMap.put(KeyEvent.KEYCODE_POUND, "#"); } private Context mContext; private UiCallManager mUiCallManager; private final StringBuffer mNumber = new StringBuffer(MAX_DIAL_NUMBER); - private AudioManager mAudioManager; private ToneGenerator mToneGenerator; - private final Handler mHandler = new Handler(); private final Object mToneGeneratorLock = new Object(); private TextView mNumberView; private boolean mShowInput = true; @@ -87,28 +102,36 @@ public class DialerFragment extends Fragment { void onDialerBackClick(); } - public static DialerFragment newInstance(UiCallManager callManager) { + /** + * Creates a new instance of the {@link DialerFragment} and display the given number as the one + * to dial. + */ + static DialerFragment newInstance(UiCallManager callManager, + DialerBackButtonListener listener, @Nullable String dialNumber) { DialerFragment fragment = new DialerFragment(); fragment.mUiCallManager = callManager; - return fragment; - } + fragment.mBackListener = listener; - /** - * Sets the given {@link DialerBackButtonListener} to be notified whenever the back button - * on the dialer has been clicked. Passing {@code null} to this method will clear all listeners. - */ - public void setDialerBackButtonListener(DialerBackButtonListener listener) { - mBackListener = listener; + if (!TextUtils.isEmpty(dialNumber)) { + Bundle args = new Bundle(); + args.putString(DIAL_NUMBER_KEY, dialNumber); + fragment.setArguments(args); + } + + return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - mAudioManager = - (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); if (savedInstanceState != null && savedInstanceState.containsKey(INPUT_ACTIVE_KEY)) { mShowInput = savedInstanceState.getBoolean(INPUT_ACTIVE_KEY); } + + Bundle args = getArguments(); + if (args != null) { + setDialNumber(args.getString(DIAL_NUMBER_KEY)); + } } @Override @@ -125,7 +148,7 @@ public class DialerFragment extends Fragment { Log.v(TAG, "onCreateView: inflated successfully"); } - view.findViewById(R.id.exit_dialer_button).setOnClickListener((unusedView) -> { + view.findViewById(R.id.exit_dialer_button).setOnClickListener(v -> { if (mBackListener != null) { mBackListener.onDialerBackClick(); } @@ -137,9 +160,10 @@ public class DialerFragment extends Fragment { Log.v(TAG, "mShowInput: " + mShowInput); } - View callButton = view.findViewById(R.id.call); FabDrawable answerCallDrawable = new FabDrawable(mContext); - answerCallDrawable.setFabAndStrokeColor(getResources().getColor(R.color.phone_call)); + answerCallDrawable.setFabAndStrokeColor(getContext().getColor(R.color.phone_call)); + + View callButton = view.findViewById(R.id.call); callButton.setBackground(answerCallDrawable); callButton.setVisibility(View.VISIBLE); callButton.setOnClickListener((unusedView) -> { @@ -151,16 +175,17 @@ public class DialerFragment extends Fragment { mUiCallManager.safePlaceCall(mNumber.toString(), false); } }); + View deleteButton = view.findViewById(R.id.delete); deleteButton.setVisibility(View.VISIBLE); - deleteButton.setOnClickListener((unusedView) -> { + deleteButton.setOnClickListener(v -> { if (mNumber.length() != 0) { mNumber.deleteCharAt(mNumber.length() - 1); mNumberView.setText(getFormattedNumber(mNumber.toString())); } }); - setupKeypad(view); + setupKeypadClickListeners(view); return view; } @@ -170,35 +195,47 @@ public class DialerFragment extends Fragment { * associated value to {@link #mNumber}. */ private class DialpadClickListener implements View.OnClickListener { - private String mValue; + private final int mTone; + private final String mValue; - public DialpadClickListener(String value) { - mValue = value; + DialpadClickListener(int keyCode) { + mTone = mToneMap.get(keyCode); + mValue = mDialValueMap.get(keyCode); } @Override public void onClick(View v) { mNumber.append(mValue); mNumberView.setText(getFormattedNumber(mNumber.toString())); + playTone(mTone); } - }; + } - /** - * Sets up the click listeners for all the dialpad buttons. - */ - private void setupKeypad(View parent) { - parent.findViewById(R.id.zero).setOnClickListener(new DialpadClickListener("0")); - parent.findViewById(R.id.one).setOnClickListener(new DialpadClickListener("1")); - parent.findViewById(R.id.two).setOnClickListener(new DialpadClickListener("2")); - parent.findViewById(R.id.three).setOnClickListener(new DialpadClickListener("3")); - parent.findViewById(R.id.four).setOnClickListener(new DialpadClickListener("4")); - parent.findViewById(R.id.five).setOnClickListener(new DialpadClickListener("5")); - parent.findViewById(R.id.six).setOnClickListener(new DialpadClickListener("6")); - parent.findViewById(R.id.seven).setOnClickListener(new DialpadClickListener("7")); - parent.findViewById(R.id.eight).setOnClickListener(new DialpadClickListener("8")); - parent.findViewById(R.id.nine).setOnClickListener(new DialpadClickListener("9")); - parent.findViewById(R.id.star).setOnClickListener(new DialpadClickListener("*")); - parent.findViewById(R.id.pound).setOnClickListener(new DialpadClickListener("#")); + private void setupKeypadClickListeners(View parent) { + parent.findViewById(R.id.zero).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_0)); + parent.findViewById(R.id.one).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_1)); + parent.findViewById(R.id.two).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_2)); + parent.findViewById(R.id.three).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_3)); + parent.findViewById(R.id.four).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_4)); + parent.findViewById(R.id.five).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_5)); + parent.findViewById(R.id.six).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_6)); + parent.findViewById(R.id.seven).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_7)); + parent.findViewById(R.id.eight).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_8)); + parent.findViewById(R.id.nine).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_9)); + parent.findViewById(R.id.star).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_STAR)); + parent.findViewById(R.id.pound).setOnClickListener( + new DialpadClickListener(KeyEvent.KEYCODE_POUND)); } @Override @@ -237,7 +274,7 @@ public class DialerFragment extends Fragment { mNumberView = null; } - public void setDialNumber(final String number) { + private void setDialNumber(final String number) { if (TextUtils.isEmpty(number)) { return; } @@ -256,6 +293,18 @@ public class DialerFragment extends Fragment { mNumberView.setText(getFormattedNumber(mNumber.toString())); } + private void playTone(int tone) { + synchronized (mToneGeneratorLock) { + if (mToneGenerator == null) { + Log.w(TAG, "playTone: mToneGenerator == null, tone: " + tone); + return; + } + + // Start the new tone (will stop any playing tone) + mToneGenerator.startTone(tone, TONE_LENGTH_MS); + } + } + private void stopTone() { synchronized (mToneGeneratorLock) { if (mToneGenerator == null) { @@ -263,17 +312,9 @@ public class DialerFragment extends Fragment { return; } mToneGenerator.stopTone(); - mHandler.postDelayed(mDelayedAbandonAudioFocusRunnable, ABANDON_AUDIO_FOCUS_DELAY_MS); } } - private final Runnable mDelayedAbandonAudioFocusRunnable = new Runnable() { - @Override - public void run() { - mAudioManager.abandonAudioFocus(null); - } - }; - private String getFormattedNumber(String number) { return TelecomUtils.getFormattedNumber(mContext, number); } |