17cc70b4f0ad1064a4a0dce6056ad82b205887160Tyler Gunnpackage com.android.server.telecom.testapps; 27c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee 37c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Leeimport android.app.Activity; 4fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Leeimport android.content.ContentValues; 55310196deda80ace064a7d5bc672dbe1974906b9Yorke Leeimport android.content.Context; 67c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Leeimport android.content.Intent; 7562ad5e7577d13e0ac31c42ee6499543f4d1e684Yorke Leeimport android.net.Uri; 87c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Leeimport android.os.Bundle; 9fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Leeimport android.provider.CallLog.Calls; 10562ad5e7577d13e0ac31c42ee6499543f4d1e684Yorke Leeimport android.telecom.PhoneAccount; 115310196deda80ace064a7d5bc672dbe1974906b9Yorke Leeimport android.telecom.TelecomManager; 12504a7f92a570dc6e619811a868da7a86b7716624Santos Cordonimport android.util.Log; 137c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Leeimport android.view.View; 147c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Leeimport android.view.View.OnClickListener; 157c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Leeimport android.widget.EditText; 16fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Leeimport android.widget.Toast; 177c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee 18945a82ea92bf4fcc8b505738760650f9fb74960bIhab Awadimport com.android.server.telecom.testapps.R; 197c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee 207c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Leepublic class TestDialerActivity extends Activity { 21b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee private static final int REQUEST_CODE_SET_DEFAULT_DIALER = 1; 22b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee 237c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee private EditText mNumberView; 247c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee 257c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee @Override 267c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee protected void onCreate(Bundle savedInstanceState) { 277c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee super.onCreate(savedInstanceState); 287c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee setContentView(R.layout.testdialer_main); 297c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee findViewById(R.id.set_default_button).setOnClickListener(new OnClickListener() { 307c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee @Override 317c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee public void onClick(View v) { 327c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee setDefault(); 337c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee } 347c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee }); 355310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee 367c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee findViewById(R.id.place_call_button).setOnClickListener(new OnClickListener() { 377c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee @Override 387c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee public void onClick(View v) { 397c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee placeCall(); 407c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee } 417c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee }); 427c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee 43fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee findViewById(R.id.test_voicemail_button).setOnClickListener(new OnClickListener() { 44fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee @Override 45fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee public void onClick(View v) { 46fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee testVoicemail(); 47fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee } 48fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee }); 49fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee 505310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee findViewById(R.id.cancel_missed_button).setOnClickListener(new OnClickListener() { 515310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee @Override 525310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee public void onClick(View v) { 535310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee cancelMissedCallNotification(); 545310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee } 555310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee }); 565310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee 577c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee mNumberView = (EditText) findViewById(R.id.number); 587c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee updateEditTextWithNumber(); 597c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee } 607c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee 617c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee @Override 62b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee protected void onActivityResult(int requestCode, int resultCode, Intent data) { 63b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee if (requestCode == REQUEST_CODE_SET_DEFAULT_DIALER) { 64b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee if (resultCode == RESULT_OK) { 65b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee showToast("User accepted request to become default dialer"); 66b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee } else if (resultCode == RESULT_CANCELED) { 67b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee showToast("User declined request to become default dialer"); 68b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee } 69b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee } 70b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee } 71b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee 72b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee @Override 737c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee protected void onNewIntent(Intent intent) { 747c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee super.onNewIntent(intent); 757c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee updateEditTextWithNumber(); 767c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee } 777c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee 787c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee private void updateEditTextWithNumber() { 797c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee Intent intent = getIntent(); 807c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee if (intent != null) { 817c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee mNumberView.setText(intent.getDataString()); 827c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee } 837c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee } 847c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee 857c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee private void setDefault() { 86b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee final Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER); 87b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName()); 88b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee startActivityForResult(intent, REQUEST_CODE_SET_DEFAULT_DIALER); 897c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee } 907c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee 917c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee private void placeCall() { 924e4ed74f1c29ede44450f78354755bfabfb1fc4fYorke Lee final TelecomManager telecomManager = 934e4ed74f1c29ede44450f78354755bfabfb1fc4fYorke Lee (TelecomManager) getSystemService(Context.TELECOM_SERVICE); 944e4ed74f1c29ede44450f78354755bfabfb1fc4fYorke Lee telecomManager.placeCall(Uri.fromParts(PhoneAccount.SCHEME_TEL, 95504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon mNumberView.getText().toString(), null), createCallIntentExtras()); 967c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee } 97fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee 98fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee private void testVoicemail() { 99fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee try { 100fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee // Test read 101fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee getContentResolver().query(Calls.CONTENT_URI_WITH_VOICEMAIL, null, null, null, null); 102fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee // Test write 103fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee final ContentValues values = new ContentValues(); 104fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee values.put(Calls.CACHED_NAME, "hello world"); 105fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee getContentResolver().update(Calls.CONTENT_URI_WITH_VOICEMAIL, values, "1=0", null); 106fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee } catch (SecurityException e) { 107b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee showToast("Permission check failed"); 108fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee return; 109fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee } 110b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee showToast("Permission check succeeded"); 111b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee } 112b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee 113b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee private void showToast(String message) { 114b5c5d44062ff3d992e0985424382e4596d386085Yorke Lee Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); 115fbc956311259d1cdd5978cb0b652d1561f06a33cYorke Lee } 1165310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee 1175310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee private void cancelMissedCallNotification() { 1185310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee try { 1195310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee final TelecomManager tm = (TelecomManager) getSystemService(Context.TELECOM_SERVICE); 1205310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee tm.cancelMissedCallsNotification(); 1215310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee } catch (SecurityException e) { 1225310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee Toast.makeText(this, "Privileged dialer operation failed", Toast.LENGTH_SHORT).show(); 1235310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee return; 1245310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee } 1255310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee Toast.makeText(this, "Privileged dialer operation succeeded", Toast.LENGTH_SHORT).show(); 1265310196deda80ace064a7d5bc672dbe1974906b9Yorke Lee } 127504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon 128504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon private Bundle createCallIntentExtras() { 129504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon Bundle extras = new Bundle(); 130504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon extras.putString("com.android.server.telecom.testapps.CALL_EXTRAS", "Yorke was here"); 131504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon 132504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon Bundle intentExtras = new Bundle(); 133504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon intentExtras.putBundle(TelecomManager.EXTRA_OUTGOING_CALL_EXTRAS, extras); 134504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon Log.i("Santos xtr", intentExtras.toString()); 135504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon return intentExtras; 136504a7f92a570dc6e619811a868da7a86b7716624Santos Cordon } 1377c65acd2d2201fab6ea35f331baa1ea9bc04ee96Yorke Lee} 138