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