• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.phone.tests;
18 
19 import android.app.Activity;
20 import android.content.ActivityNotFoundException;
21 import android.content.Intent;
22 import android.net.Uri;
23 import android.os.Bundle;
24 import android.os.RemoteException;
25 import android.os.ServiceManager;
26 import android.telephony.PhoneNumberUtils;
27 import android.text.TextUtils;
28 import android.util.Log;
29 import android.view.View;
30 import android.widget.Button;
31 import android.widget.EditText;
32 import android.widget.TextView;
33 import android.widget.Toast;
34 
35 import com.android.internal.telephony.ITelephony;
36 import com.android.phone.Constants;
37 
38 /**
39  * Test activity that mimics the behavior of 3rd party apps firing off
40  * CALL and DIAL intents.
41  */
42 public class CallDialTest extends Activity implements View.OnClickListener {
43     private static final String LOG_TAG = "CallDialTest";
44 
45     // UI elements
46     private TextView mLabel;
47     private EditText mNumber;
48 
49     @Override
onCreate(Bundle savedInstanceState)50     protected void onCreate(Bundle savedInstanceState) {
51         Intent intent = getIntent();
52         log("onCreate: intent = " + intent);
53 
54         // Construct our basic UI:
55         super.onCreate(savedInstanceState);
56         setContentView(R.layout.call_dial_test);
57 
58         mLabel = (TextView) findViewById(R.id.label1);
59 
60         mNumber = (EditText) findViewById(R.id.number);
61         mNumber.setText("6505551234");  // Preload it with something useful
62 
63         ((Button) findViewById(R.id.callButton)).setOnClickListener(this);
64         ((Button) findViewById(R.id.dialButton)).setOnClickListener(this);
65         ((Button) findViewById(R.id.itelephonyCallButton)).setOnClickListener(this);
66         ((Button) findViewById(R.id.itelephonyDialButton)).setOnClickListener(this);
67     }
68 
69     @Override
onResume()70     protected void onResume() {
71         log("onResume()...");
72         super.onResume();
73     }
74 
75     @Override
onPause()76     protected void onPause() {
77         log("onPause()...");
78         super.onPause();
79     }
80 
81     // View.OnClickListener implementation
82     @Override
onClick(View view)83     public void onClick(View view) {
84         int id = view.getId();
85         log("onClick(View " + view + ", id " + id + ")...");
86 
87         switch (id) {
88             case R.id.callButton:
89                 log("onClick: CALL...");
90                 fireIntent(Intent.ACTION_CALL);
91                 break;
92             case R.id.dialButton:
93                 log("onClick: DIAL...");
94                 fireIntent(Intent.ACTION_DIAL);
95                 break;
96             case R.id.itelephonyCallButton:
97                 log("onClick: ITelephony.call()...");
98                 doITelephonyCall();
99                 break;
100             case R.id.itelephonyDialButton:
101                 log("onClick: ITelephony.dial()...");
102                 doITelephonyDial();
103                 break;
104             default:
105                 Log.wtf(LOG_TAG, "onClick: unexpected View: " + view);
106                 break;
107         }
108     }
109 
fireIntent(String action)110     private void fireIntent(String action) {
111         log("fireIntent(action = '" + action + "')...");
112 
113         // Get a phone number or SIP address from the EditText widget
114         String number = mNumber.getText().toString();
115         log("==> number: '" + number + "'");
116 
117         // Based on the number, fire off a CALL or DIAL intent:
118         // - if it's a fully qualified URI (with scheme), use it directly
119         // - if it looks like a SIP address, prepend sip:
120         // - if it's just a number, prepend tel: automatically
121         // - if it's blank, fire off a blank CALL or DIAL intent
122 
123         Uri uri = null;
124         if (!TextUtils.isEmpty(number)) {
125             if (number.contains(":")) {
126                 uri = Uri.parse(number);
127             } else if (PhoneNumberUtils.isUriNumber(number)) {
128                 uri = Uri.fromParts(Constants.SCHEME_SIP, number, null);
129             } else {
130                 uri = Uri.fromParts(Constants.SCHEME_TEL, number, null);
131             }
132         }
133         log("==> uri: " + uri);
134 
135         Intent intent = new Intent(action, uri);
136         log("==> intent: " + intent);
137 
138         try {
139             startActivity(intent);
140             Toast.makeText(this, "Starting activity...", Toast.LENGTH_SHORT).show();
141         } catch (ActivityNotFoundException e) {
142             Log.w(LOG_TAG, "testCall: ActivityNotFoundException for intent: " + intent);
143             Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
144         } catch (Exception e) {
145             Log.w(LOG_TAG, "testCall: Unexpected exception from startActivity(): " + e);
146             Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
147         }
148     }
149 
doITelephonyCall()150     private void doITelephonyCall() {
151         log("doITelephonyCall()...");
152 
153         // Get a phone number from the EditText widget
154         String number = mNumber.getText().toString();
155         log("==> number: '" + number + "'");
156 
157         try {
158             ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
159             log("- phone: " + phone);
160             log("- calling call()...");
161             phone.call(number);
162             log("  Done.");
163         } catch (RemoteException ex) {
164             Log.w(LOG_TAG, "RemoteException!", ex);
165         }
166     }
167 
doITelephonyDial()168     private void doITelephonyDial() {
169         log("doITelephonyDial()...");
170 
171         // Get a phone number from the EditText widget
172         String number = mNumber.getText().toString();
173         log("==> number: '" + number + "'");
174 
175         try {
176             ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
177             log("- phone: " + phone);
178             log("- calling dial()...");
179             phone.dial(number);
180             log("  Done.");
181         } catch (RemoteException ex) {
182             Log.w(LOG_TAG, "RemoteException!", ex);
183         }
184     }
185 
log(String msg)186     private void log(String msg) {
187         Log.i(LOG_TAG, msg);
188     }
189 }
190