Advertisement
Guest User

Android - SMSCount

a guest
Oct 10th, 2011
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.88 KB | None | 0 0
  1. package sms.count;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStreamWriter;
  8. import java.text.SimpleDateFormat;
  9. import java.util.Date;
  10.  
  11. import android.app.Activity;
  12. import android.database.Cursor;
  13. import android.net.Uri;
  14. import android.os.Bundle;
  15. import android.provider.UserDictionary.Words;
  16. import android.view.View;
  17. import android.view.View.OnClickListener;
  18. import android.widget.*;
  19.  
  20. public class SMSCount extends Activity
  21. {
  22.     // dichiarazione oggetti
  23.     TextView smsTot, sms2day, smsSoldi, smsSoldiMese, smsSoldiRicarica;
  24.     Spinner tariffaCombo;
  25.     Button creaTariffa, tariffaScrivi, setData;
  26.     EditText nomeTariffa, smsGratis, nSmsPagamentoPrima, cSmsPagamentoPrima, cSmsPagamentoDopo, cSmsNoGratis, dataRicarica;
  27.     String temp[], split[];
  28.    
  29.     @Override
  30.     public void onCreate(Bundle savedInstanceState)
  31.     {
  32.         System.out.println("!!DEBUG!! app parte");
  33.         super.onCreate(savedInstanceState);
  34.         setContentView(R.layout.bk);
  35.         // richiamo la funzione guiExec
  36.         guiExec();
  37.     }
  38.    
  39.     protected void guiExec()
  40.     {
  41.         String data_today = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (System.currentTimeMillis())).substring(0, 2);
  42.         // assegno gli oggetti ai corrispettivi nella GUI
  43.         smsTot = (TextView) findViewById(R.id.smsTot);
  44.         sms2day = (TextView) findViewById(R.id.sms2day);
  45.         smsSoldi = (TextView) findViewById(R.id.smsSoldi);
  46.         smsSoldiMese = (TextView) findViewById(R.id.smsSoldiMese);
  47.         smsSoldiRicarica = (TextView) findViewById(R.id.smsSoldiRicarica);
  48.         tariffaCombo = (Spinner) findViewById(R.id.tariffaCombo);
  49.         creaTariffa = (Button) findViewById(R.id.creaTariffa);
  50.         dataRicarica = (EditText) findViewById(R.id.dataRicarica);
  51.         setData = (Button) findViewById(R.id.setData);
  52.        
  53.         // trovo gli sms totali
  54.         smsTot.setText("Messaggi inviati totali: "+getSmsCount(false));
  55.         sms2day.setText("Messaggi inviati oggi:  " +getSmsCount(true));
  56.        
  57.         // calcolo la spesa mensile
  58.         int costo_mese = 0;
  59.         String dbsoldi_read = databaseRead("smscount_soldi.db").replace("\n", "");
  60.         split = dbsoldi_read.split("\\|");
  61.         for (int i=0;i<(split.length)/2;i++)
  62.             if (Integer.parseInt(split[i*2].substring(0,2)) == Integer.parseInt(data_today))
  63.                 costo_mese += Integer.parseInt(split[(i*2)+1]);
  64.        
  65.         smsSoldiMese.setText("Soldi spesi questo mese: "+costo_mese+" cent ("+(float)costo_mese/100+" euro)");
  66.        
  67.         // aggiungo allo spinner la lista delle tariffe già create
  68.         String db_read = databaseRead("smscount.db").replace("\n", "");
  69.        
  70.         temp = db_read.split("\\|");
  71.         String nomi[] = new String[(temp.length+1)/6];
  72.         for (int i=1;i<=(temp.length+1)/6;i++)
  73.         {
  74.             nomi[i-1] = temp[(i*6)-1];
  75.         }
  76.         ArrayAdapter tariffaArrAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, nomi);
  77.         tariffaCombo.setAdapter(tariffaArrAdapter);
  78.        
  79.         // assegno all'evento della selezione della tariffa il calcolo dei soldi spesi
  80.         tariffaCombo.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
  81.         {  
  82.             public void onItemSelected(AdapterView parentView, View childView, int position, long id)
  83.             {  
  84.                 String item = parentView.getItemAtPosition(position).toString();
  85.                 // cerco l'item nell'array e calcolo i soldi
  86.                 for (int i=0;i<temp.length;i++)
  87.                 {
  88.                     if (item.equals(temp[i]))
  89.                     {
  90.                         String data_today = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (System.currentTimeMillis())).substring(0, 10);
  91.                         int smsGratis = Integer.parseInt(temp[i-5]);
  92.                         int smsMandati = getSmsCount(true);
  93.                         int soldiPerSms = Integer.parseInt(temp[i-1]);
  94.                         int smsPrima = Integer.parseInt(temp[i-4]);
  95.                         int costoPrima = Integer.parseInt(temp[i-3]);
  96.                         int costoDopo = Integer.parseInt(temp[i-2]);
  97.                         /*System.out.println("!!Gratis: "+smsGratis);
  98.                         System.out.println("!!Mandati: "+smsMandati);
  99.                         System.out.println("!!soldiPerSms: "+soldiPerSms);
  100.                         System.out.println("!!smsPrima: "+smsPrima);
  101.                         System.out.println("!!costoPrima: "+costoPrima);
  102.                         System.out.println("!!costoDopo: "+costoDopo);*/
  103.                         int spesa = getSoldiSpesi(smsGratis, smsMandati, soldiPerSms, smsPrima, costoPrima, costoDopo);
  104.                         smsSoldi.setText("Soldi spesi oggi: "+spesa+" cent ("+(float)spesa/100+" euro)");
  105.                         if (databaseRead("smscount_soldi.db") == "-1")
  106.                         {
  107.                             try
  108.                             {
  109.                                      System.out.println("!!DEBUG!! scrivo_soldi");
  110.                                      final String TESTSTRING = new String(data_today+"|"+spesa+"|"); // smsGratis|nPrima|cPrima|cDopo|smsNoGratis|tariffaNome        
  111.                                      FileOutputStream fOut = openFileOutput("smscount_soldi.db", MODE_WORLD_READABLE);
  112.                                      
  113.                                      OutputStreamWriter osw = new OutputStreamWriter(fOut);
  114.                                      
  115.                                      osw.write(TESTSTRING);
  116.                                      osw.flush();
  117.                                      osw.close();
  118.                             }
  119.                             catch (IOException ioe)
  120.                             {
  121.                                      System.out.println("!!DEBUG!! write: non scrivo "+ioe.toString());
  122.                             }
  123.                         }
  124.                         else
  125.                         {
  126.                             String dbread = databaseRead("smscount_soldi.db");
  127.                             if (dbread.lastIndexOf(data_today) != -1)
  128.                             {
  129.                                 String to_replace = dbread.substring(dbread.lastIndexOf(data_today),dbread.length());
  130.                                 String replace = dbread.replace(to_replace, data_today+"|"+spesa+"|");
  131.                                 try
  132.                                 {
  133.                                              System.out.println("!!DEBUG!! sostituisco");
  134.                                              FileOutputStream fOut = openFileOutput("smscount_soldi.db", MODE_WORLD_READABLE);
  135.                                              
  136.                                              OutputStreamWriter osw = new OutputStreamWriter(fOut);
  137.                                              
  138.                                              osw.write(replace);
  139.                                              osw.flush();
  140.                                              osw.close();
  141.                                 }
  142.                                 catch (IOException ioe)
  143.                                 {
  144.                                              System.out.println("!!DEBUG!! write: non scrivo "+ioe.toString());
  145.                                 }
  146.                             }
  147.                             else
  148.                             {
  149.                                 System.out.println("!! append");
  150.                                 try
  151.                                 {
  152.                                          System.out.println("!!DEBUG!! scrivo_soldi");
  153.                                          final String TESTSTRING = new String(data_today+"|"+spesa+"|"); // smsGratis|nPrima|cPrima|cDopo|smsNoGratis|tariffaNome        
  154.                                          FileOutputStream fOut = openFileOutput("smscount_soldi.db", MODE_APPEND);
  155.                                          
  156.                                          OutputStreamWriter osw = new OutputStreamWriter(fOut);
  157.                                          
  158.                                          osw.write(TESTSTRING);
  159.                                          osw.flush();
  160.                                          osw.close();
  161.                                 }
  162.                                 catch (IOException ioe)
  163.                                 {
  164.                                          System.out.println("!!DEBUG!! write: non scrivo "+ioe.toString());
  165.                                 }
  166.                             }
  167.                         }
  168.                     }
  169.                 }
  170.             }
  171.            
  172.             public void onNothingSelected(AdapterView parentView)
  173.             {  
  174.  
  175.             }  
  176.         });  
  177.        
  178.         // crea tariffa personalizzata
  179.         creaTariffa.setOnClickListener(new OnClickListener()
  180.         {
  181.             public void onClick(View v)
  182.             {
  183.                 _creaTariffa();
  184.             }
  185.         });
  186.        
  187.        
  188.         // data ricarica
  189.         String data_ricarica_read = databaseRead("smscount_data.db");
  190.         if  (data_ricarica_read != "-1")
  191.         {
  192.             _setData(data_ricarica_read);
  193.             dataRicarica.setText(data_ricarica_read);
  194.         }
  195.            
  196.         setData.setOnClickListener(new OnClickListener()
  197.         {
  198.             public void onClick(View v)
  199.             {                      
  200.                 _setData(dataRicarica.getText().toString());
  201.             }
  202.         });
  203.     }
  204.    
  205.     protected void _setData(String p)
  206.     {
  207.         SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
  208.         SimpleDateFormat df2 = new SimpleDateFormat("MM/dd/yyyy");
  209.         try
  210.         {
  211.             Date dataRicarica_d = df.parse(p);
  212.             int costo_ricarica = 0;
  213.             String dbsoldi_read = databaseRead("smscount_soldi.db").replace("\n", "");
  214.             split = dbsoldi_read.split("\\|");
  215.             for (int i=0;i<(split.length)/2;i++)
  216.             {
  217.                 try
  218.                 {
  219.                     Date dataLeg = df2.parse(split[i*2]);
  220.                    
  221.                     if (dataRicarica_d.before(dataLeg) || dataRicarica_d.equals(dataLeg))
  222.                         costo_ricarica += Integer.parseInt(split[(i*2)+1]);
  223.                 }
  224.                 catch (Exception e) { smsSoldiRicarica.setText("Soldi spesi dall'ultima ricarica: data non valida");}
  225.             }
  226.             smsSoldiRicarica.setText("Soldi spesi dall'ultima ricarica: "+costo_ricarica+" cent ("+(float)costo_ricarica/100+" euro)");
  227.             // scrivo su file la data dell'ultima ricarica
  228.             try
  229.             {
  230.                          System.out.println("!!DEBUG!! scrivo_data");
  231.                          FileOutputStream fOut = openFileOutput("smscount_data.db", MODE_WORLD_READABLE);
  232.                          
  233.                          OutputStreamWriter osw = new OutputStreamWriter(fOut);
  234.                          
  235.                          osw.write(p);
  236.                          osw.flush();
  237.                          osw.close();
  238.             }
  239.             catch (IOException ioe)
  240.             {
  241.                          System.out.println("!!DEBUG!! write: non scrivo "+ioe.toString());
  242.             }
  243.         }
  244.         catch (Exception e) { smsSoldiRicarica.setText("Soldi spesi dall'ultima ricarica: data non valida");}
  245.     }
  246.    
  247.     protected void _creaTariffa()
  248.     {
  249.         ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
  250.         vf.showNext();
  251.         tariffaScrivi = (Button) findViewById(R.id.tariffaScrivi);
  252.        
  253.         tariffaScrivi.setOnClickListener(new OnClickListener()
  254.         {
  255.             public void onClick(View v)
  256.             {
  257.                 String[] params = new String[6];
  258.                
  259.                 // assegno gli oggetti
  260.                 nomeTariffa = (EditText) findViewById(R.id.nomeTariffa);
  261.                 smsGratis = (EditText) findViewById(R.id.smsGratis);
  262.                 nSmsPagamentoPrima = (EditText) findViewById(R.id.nSmsPagamentoPrima);
  263.                 cSmsPagamentoPrima = (EditText) findViewById(R.id.cSmsPagamentoPrima);
  264.                 cSmsPagamentoDopo = (EditText) findViewById(R.id.cSmsPagamentoDopo);
  265.                 cSmsNoGratis = (EditText) findViewById(R.id.cSmsNoGratis);
  266.                
  267.                 // leggo il testo dagli oggetti
  268.                 params[0] = nomeTariffa.getText().toString();
  269.                 params[1] = smsGratis.getText().toString();
  270.                 params[2] = nSmsPagamentoPrima.getText().toString();
  271.                 params[3] = cSmsPagamentoPrima.getText().toString();
  272.                 params[4] = cSmsPagamentoDopo.getText().toString();
  273.                 params[5] = cSmsNoGratis.getText().toString();
  274.                 // aggiungo la nuova tariffa
  275.                  try
  276.                  {
  277.                      System.out.println("!!DEBUG!! scrivo");
  278.                      final String TESTSTRING = new String(params[1]+"|"+params[2]+"|"+params[3]+"|"+params[4]+"|"+params[5]+"|"+params[0]+"|"); // smsGratis|nPrima|cPrima|cDopo|smsNoGratis|tariffaNome        
  279.                      FileOutputStream fOut = openFileOutput("smscount.db", MODE_APPEND);
  280.                      
  281.                      OutputStreamWriter osw = new OutputStreamWriter(fOut);
  282.                      
  283.                      osw.write(TESTSTRING);
  284.                      osw.flush();
  285.                      osw.close();
  286.                  }
  287.                  catch (IOException ioe)
  288.                  {
  289.                      System.out.println("!!DEBUG!! write: non scrivo "+ioe.toString());
  290.                  }
  291.                 // torno alla gui principale
  292.                 ViewFlipper vf = (ViewFlipper) findViewById(R.id.details);
  293.                 vf.showPrevious();
  294.                 guiExec();
  295.             }
  296.         });
  297.     }
  298.    
  299.     protected String databaseRead(String searchFile)
  300.     {
  301.         try
  302.         {
  303.             FileInputStream  fIn = openFileInput(searchFile);
  304.             InputStreamReader isr = new InputStreamReader(fIn);
  305.             String index ="";
  306.              
  307.             char[] inputBuffer = new char[1];        
  308.             while ( isr.read(inputBuffer) != -1)
  309.             {
  310.                 index = index + new String(inputBuffer);
  311.             }
  312.            
  313.             //System.out.println("!!DEBUG!! index: "+index);
  314.             fIn.close();
  315.             isr.close();
  316.             return index;
  317.          }
  318.         catch (IOException ioe)
  319.         {
  320.             System.out.println("!!DEBUG!! eccezione: "+ioe.toString());
  321.             return "-1";
  322.         }
  323.     }
  324.    
  325.     protected int getSoldiSpesi(int smsGratis, int smsMandati, int soldiPerSms,
  326.                                 int smsPrima, int costoPrima, int costoSmsDopo)
  327.     {  
  328.         if (smsGratis == 0)
  329.             return smsMandati*soldiPerSms;
  330.         else
  331.         {
  332.             if (smsMandati >= smsPrima)
  333.                 if (smsMandati-smsPrima-smsGratis > 0)
  334.                     return (smsPrima*costoPrima) + ( (smsMandati-smsPrima-smsGratis) * costoSmsDopo );
  335.                 else
  336.                     return (smsPrima*costoPrima);
  337.             else
  338.                 return smsMandati*costoPrima;
  339.         }
  340.     }
  341.    
  342.     protected int getSmsCount(boolean today)
  343.     {
  344.         Uri uri = Uri.parse("content://sms/sent");
  345.         Cursor c= getContentResolver().query(uri, null, null ,null,null);
  346.         if (today == false)
  347.             return c.getCount();
  348.         else
  349.         {
  350.             String data;
  351.             String data_today = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (System.currentTimeMillis())).substring(0, 10); // data di oggi
  352.             int ret = 0; // contatore
  353.             if (c.moveToFirst())
  354.             {
  355.                 for (int i=0;i<c.getCount();i++)
  356.                 {
  357.                     data = c.getString(c.getColumnIndexOrThrow("date")).toString();
  358.                     data = new java.text.SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new java.util.Date (Long.parseLong(data))).substring(0, 10); // data del messaggio
  359.                     if (data.equals(data_today))
  360.                     {
  361.                         ret++;
  362.                     }
  363.                     c.moveToNext(); // vado al prossimo messaggio
  364.                 }
  365.             }
  366.            
  367.             return ret;
  368.         }
  369.     }
  370. }
  371.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement