1 package com.android.server.telecom.testapps; 2 3 import android.app.Activity; 4 import android.content.ContentValues; 5 import android.content.Context; 6 import android.content.Intent; 7 import android.net.Uri; 8 import android.os.Bundle; 9 import android.provider.CallLog.Calls; 10 import android.telecom.PhoneAccount; 11 import android.telecom.TelecomManager; 12 import android.util.Log; 13 import android.view.View; 14 import android.view.View.OnClickListener; 15 import android.widget.CheckBox; 16 import android.widget.EditText; 17 import android.widget.Toast; 18 19 public class TestDialerActivity extends Activity { 20 private static final int REQUEST_CODE_SET_DEFAULT_DIALER = 1; 21 22 private EditText mNumberView; 23 private CheckBox mRttCheckbox; 24 25 @Override onCreate(Bundle savedInstanceState)26 protected void onCreate(Bundle savedInstanceState) { 27 super.onCreate(savedInstanceState); 28 setContentView(R.layout.testdialer_main); 29 findViewById(R.id.set_default_button).setOnClickListener(new OnClickListener() { 30 @Override 31 public void onClick(View v) { 32 setDefault(); 33 } 34 }); 35 36 findViewById(R.id.place_call_button).setOnClickListener(new OnClickListener() { 37 @Override 38 public void onClick(View v) { 39 placeCall(); 40 } 41 }); 42 43 findViewById(R.id.test_voicemail_button).setOnClickListener(new OnClickListener() { 44 @Override 45 public void onClick(View v) { 46 testVoicemail(); 47 } 48 }); 49 50 findViewById(R.id.cancel_missed_button).setOnClickListener(new OnClickListener() { 51 @Override 52 public void onClick(View v) { 53 cancelMissedCallNotification(); 54 } 55 }); 56 57 mNumberView = (EditText) findViewById(R.id.number); 58 mRttCheckbox = (CheckBox) findViewById(R.id.call_with_rtt_checkbox); 59 updateMutableUi(); 60 } 61 62 @Override onActivityResult(int requestCode, int resultCode, Intent data)63 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 64 if (requestCode == REQUEST_CODE_SET_DEFAULT_DIALER) { 65 if (resultCode == RESULT_OK) { 66 showToast("User accepted request to become default dialer"); 67 } else if (resultCode == RESULT_CANCELED) { 68 showToast("User declined request to become default dialer"); 69 } 70 } 71 } 72 73 @Override onNewIntent(Intent intent)74 protected void onNewIntent(Intent intent) { 75 super.onNewIntent(intent); 76 updateMutableUi(); 77 } 78 updateMutableUi()79 private void updateMutableUi() { 80 Intent intent = getIntent(); 81 if (intent != null) { 82 mNumberView.setText(intent.getDataString()); 83 mRttCheckbox.setChecked( 84 intent.getBooleanExtra(TelecomManager.EXTRA_START_CALL_WITH_RTT, false)); 85 } 86 } 87 setDefault()88 private void setDefault() { 89 final Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER); 90 intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName()); 91 startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER); 92 } 93 placeCall()94 private void placeCall() { 95 final TelecomManager telecomManager = 96 (TelecomManager) getSystemService(Context.TELECOM_SERVICE); 97 telecomManager.placeCall(Uri.fromParts(PhoneAccount.SCHEME_TEL, 98 mNumberView.getText().toString(), null), createCallIntentExtras()); 99 } 100 testVoicemail()101 private void testVoicemail() { 102 try { 103 // Test read 104 getContentResolver().query(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null, null, null); 105 // Test write 106 final ContentValues values = new ContentValues(); 107 values.put(Calls.CACHED_NAME, "hello world"); 108 getContentResolver().update(Calls.CONTENT_URI_WITH_VOICEMAIL, values, "1=0", null); 109 } catch (SecurityException e) { 110 showToast("Permission check failed"); 111 return; 112 } 113 showToast("Permission check succeeded"); 114 } 115 showToast(String message)116 private void showToast(String message) { 117 Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); 118 } 119 cancelMissedCallNotification()120 private void cancelMissedCallNotification() { 121 try { 122 final TelecomManager tm = (TelecomManager) getSystemService(Context.TELECOM_SERVICE); 123 tm.cancelMissedCallsNotification(); 124 } catch (SecurityException e) { 125 Toast.makeText(this, "Privileged dialer operation failed", Toast.LENGTH_SHORT).show(); 126 return; 127 } 128 Toast.makeText(this, "Privileged dialer operation succeeded", Toast.LENGTH_SHORT).show(); 129 } 130 createCallIntentExtras()131 private Bundle createCallIntentExtras() { 132 Bundle extras = new Bundle(); 133 extras.putString("com.android.server.telecom.testapps.CALL_EXTRAS", "Hall was here"); 134 if (mRttCheckbox.isChecked()) { 135 extras.putBoolean(TelecomManager.EXTRA_START_CALL_WITH_RTT, true); 136 } 137 138 Bundle intentExtras = new Bundle(); 139 intentExtras.putBundle(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS, extras); 140 Log.i("Santos xtr", intentExtras.toString()); 141 return intentExtras; 142 } 143 } 144