/[projects]/android/SmsSend/src/dk/thoerup/smssend/SmsSend.java
ViewVC logotype

Contents of /android/SmsSend/src/dk/thoerup/smssend/SmsSend.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1138 - (show annotations) (download)
Mon Sep 27 05:47:31 2010 UTC (13 years, 7 months ago) by torben
File size: 9517 byte(s)
Also send an responseMessage when request fails
1 package dk.thoerup.smssend;
2
3
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.Map;
7
8 import android.app.Activity;
9 import android.app.ProgressDialog;
10 import android.content.Intent;
11 import android.content.SharedPreferences;
12 import android.os.AsyncTask;
13 import android.os.Bundle;
14 import android.provider.ContactsContract;
15 import android.telephony.SmsManager;
16 import android.util.Log;
17 import android.view.Menu;
18 import android.view.MenuItem;
19 import android.view.View;
20 import android.view.View.OnClickListener;
21 import android.widget.AdapterView;
22 import android.widget.ArrayAdapter;
23 import android.widget.Button;
24 import android.widget.EditText;
25 import android.widget.Spinner;
26 import android.widget.Toast;
27 import android.widget.AdapterView.OnItemSelectedListener;
28 import dk.thoerup.androidutils.HttpUtil;
29
30 public class SmsSend extends Activity {
31 /** Called when the activity is first created. */
32
33 final int MAXCOUNT = 25;
34 final String SMSDAEMON = "42407617";
35
36 final int OPTIONS_SETTINGS = 1000;
37
38 final int LOOKUP_PHONENR = 2000;
39
40 String respMessage;
41
42
43 @Override
44 public void onCreate(Bundle savedInstanceState) {
45 super.onCreate(savedInstanceState);
46 setContentView(R.layout.main);
47
48 Button select = (Button) findViewById(R.id.selectNumber);
49 select.setOnClickListener( selectListener );
50
51 Button send = (Button) findViewById(R.id.send);
52 send.setOnClickListener(sendListener);
53
54
55
56 Spinner method = (Spinner) findViewById(R.id.method);
57 ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(this, R.array.methods, android.R.layout.simple_spinner_item);
58 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
59 method.setOnItemSelectedListener(methodSelected);
60 method.setAdapter(adapter);
61 method.setSelection(0);
62
63 }
64
65 @Override
66 public boolean onCreateOptionsMenu(Menu menu) {
67 MenuItem item;
68
69 item = menu.add(0, OPTIONS_SETTINGS, 0, "Settings");
70 item.setIcon(android.R.drawable.ic_menu_edit);
71
72 return true;
73 }
74
75 @Override
76 public boolean onOptionsItemSelected(MenuItem item) {
77 boolean retval = true;
78
79 //TODO: Cleanup
80 switch (item.getItemId()) {
81 case OPTIONS_SETTINGS:
82 Intent i = new Intent(this, dk.thoerup.smssend.SmsConfig.class);
83 startActivity(i);
84 break;
85 default:
86 retval = super.onOptionsItemSelected(item);
87 }
88 return retval;
89
90 }
91
92
93
94 @Override
95 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
96 super.onActivityResult(requestCode, resultCode, data);
97
98 switch(requestCode) {
99 case LOOKUP_PHONENR:
100 if (resultCode == Activity.RESULT_OK) {
101 String phone = data.getStringExtra("phone");
102 EditText dest = (EditText) findViewById(R.id.destination);
103 dest.setText(phone);
104 }
105 break;
106 }
107 }
108
109 void lookup() {
110
111 Intent intent = new Intent(Intent.ACTION_PICK);
112 intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
113
114 startActivityForResult(intent, LOOKUP_PHONENR);
115
116
117
118 /*
119 Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
120 null, null, null, null);
121 while (cursor.moveToNext()) {
122 String contactId = cursor.getString(cursor.getColumnIndex(
123 ContactsContract.Contacts._ID));
124 String hasPhone = cursor.getString(cursor.getColumnIndex(
125 ContactsContract.Contacts.HAS_PHONE_NUMBER));
126 String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
127
128 Log.v("contact", name + " : " + hasPhone);
129
130
131
132 if (Integer.parseInt(hasPhone) > 0) {
133 // You know have the number so now query it like this
134 Cursor phones = getContentResolver().query(
135 ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
136 null,
137 ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,
138 null, null);
139 while (phones.moveToNext()) {
140 int phoneIdx = phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER);
141 String phoneNumber = phones.getString( phoneIdx );
142 Log.v("phone", phoneNumber);
143
144 }
145 phones.close();
146 }
147
148 }
149 cursor.close();
150 */
151
152 }
153
154 OnClickListener selectListener = new OnClickListener() {
155 @Override
156 public void onClick(View v) {
157 lookup();
158 }
159 };
160
161
162 OnClickListener sendListener = new OnClickListener() {
163 @Override
164 public void onClick(View v) {
165 SendWorker worker = new SendWorker();
166 worker.execute();
167 }
168 };
169
170 int getCount() {
171 EditText countView = (EditText) findViewById(R.id.count);
172 String strCount = countView.getText().toString();
173
174 int count = Integer.parseInt(strCount);
175
176 return Math.min(count, MAXCOUNT); //limit to MAXCOUNT
177 }
178
179 int getInterval() {
180 EditText intView = (EditText) findViewById(R.id.interval);
181 String strInt = intView.getText().toString();
182
183 return Integer.parseInt(strInt);
184 }
185
186 String getFrom() {
187 EditText origin = (EditText) findViewById(R.id.origin);
188 return origin.getText().toString().trim();
189 }
190
191 String getTo() {
192 EditText destination = (EditText) findViewById(R.id.destination);
193 String to = destination.getText().toString().trim();
194
195 to = to.replace("+", "");
196 if (to.length() < 10) {
197 to = "45" + to;
198 }
199 return to;
200 }
201
202 String getMessage() {
203 EditText message = (EditText) findViewById(R.id.message);
204 return message.getText().toString().trim();
205 }
206
207 boolean sendInternal() {
208 int count = getCount();
209 String to = getTo();
210
211 SmsManager sms = SmsManager.getDefault();
212 ArrayList<String> parts = sms.divideMessage(getMessage() );
213
214 for (int i=0; i<count; i++) {
215 sms.sendMultipartTextMessage(to, null, parts, null, null);
216 sleep(5000); //give the phone some time to send the message
217 }
218
219 return true;
220 }
221
222 void sleep(int s) {
223 try {
224 Thread.sleep(s);
225 } catch (InterruptedException e) {
226 Log.e("SmsSend", "Sleep interrupted", e);
227 }
228 }
229
230 boolean isNumeric(String str) {
231 for (int i=0; i<str.length(); i++) {
232 char c = str.charAt(i);
233 if (! Character.isDigit(c) )
234 return false;
235 }
236
237 return true;
238 }
239
240
241
242 boolean sendCoolSms() {
243 SharedPreferences prefs = this.getSharedPreferences("SmsSend", MODE_PRIVATE);
244 String user = prefs.getString("cooluser", "");
245 String pass = prefs.getString("coolpass", "");
246
247 if (user.equals("") || pass.equals("")) {
248 respMessage = "No username or password set!";
249 return false;
250 }
251
252 if ( isNumeric(getFrom()) ) {
253 respMessage = "Can not send when 'from' equals a number\nmust add letters";
254 return false;
255 }
256
257 //"http://sms.coolsmsc.dk:8080/?username=%s&password=%s&to=%s&from=SMS+HTTP+GW&message=hello+world"
258
259 String url = "http://sms.coolsmsc.dk:8080/";
260
261 Map<String,String> params = new HashMap<String,String>();
262 params.put("username", user);
263 params.put("password", pass);
264 params.put("to", getTo());
265 params.put("from", getFrom());
266 params.put("message", getMessage() );
267 params.put("resulttype", "urlencoded" );
268 params.put("lang", "lang" );
269
270 String paramStr = HttpUtil.encodeParams(params);
271
272 Log.v("SmsSend", paramStr);
273
274
275 boolean success = false;
276
277 try {
278 byte bytes[] = HttpUtil.postContent(url, paramStr, 2500 );
279 String res = new String(bytes);
280 Map<String,String> vals = HttpUtil.decodeParams(res);
281
282 success = vals.get("status").equals("success");
283 respMessage = vals.get("result");
284
285 } catch (Exception e) {
286 Log.e("SmsSend", "sendCoolSms", e);
287 respMessage = "" + e.getMessage();
288 success = false;
289 }
290
291 return success;
292 }
293
294 boolean sendSmsDaemon() {
295
296 int count = getCount();
297 int interval = getInterval();
298 String to = getTo();
299
300 String msg = "spam " + to + " " + count + " " + interval + " " + getMessage();
301
302 SmsManager sms = SmsManager.getDefault();
303 ArrayList<String> parts = sms.divideMessage(msg);
304
305
306 sms.sendMultipartTextMessage(SMSDAEMON, null, parts, null, null);
307
308 return true;
309 }
310
311
312
313
314 OnItemSelectedListener methodSelected = new OnItemSelectedListener() {
315 public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
316 switch (pos) {
317 case 0:
318 findViewById(R.id.interval).setEnabled(false);
319 findViewById(R.id.origin).setEnabled(false);
320 findViewById(R.id.count).setEnabled(true);
321 break;
322 case 1:
323 findViewById(R.id.interval).setEnabled(false);
324 findViewById(R.id.origin).setEnabled(true);
325 findViewById(R.id.count).setEnabled(false);
326 break;
327 case 2:
328 findViewById(R.id.interval).setEnabled(true);
329 findViewById(R.id.origin).setEnabled(false);
330 findViewById(R.id.count).setEnabled(true);
331 break;
332 }
333 }
334
335 @Override
336 public void onNothingSelected(AdapterView<?> arg0) {
337
338 }
339 };
340
341 class SendWorker extends AsyncTask<Void, Void, Void> {
342
343 boolean ret;
344 ProgressDialog dlg;
345
346 @Override
347 protected void onPreExecute() {
348 super.onPreExecute();
349
350 dlg = new ProgressDialog(SmsSend.this);
351 dlg.setMessage( "Sending" );
352 dlg.setCancelable(true);
353 dlg.show();
354
355 ret = false;
356 }
357
358 @Override
359 protected Void doInBackground(Void... params) {
360 Spinner method = (Spinner) findViewById(R.id.method);
361 int sel = method.getSelectedItemPosition();
362
363
364 switch (sel) {
365 case 0:
366 ret = sendInternal();
367 break;
368 case 1:
369 ret = sendCoolSms();
370 break;
371 case 2:
372 ret = sendSmsDaemon();
373 break;
374
375 }
376
377 return null;
378 }
379
380 @Override
381 protected void onPostExecute(Void result) {
382 dlg.dismiss();
383 dlg = null;
384
385 String msg = "Done!";
386 if (ret == false)
387 msg = respMessage;
388
389 Toast.makeText(SmsSend.this, msg, Toast.LENGTH_LONG).show();
390 }
391
392 }
393
394 }

  ViewVC Help
Powered by ViewVC 1.1.20