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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

  ViewVC Help
Powered by ViewVC 1.1.20