SmsDetailObserver.java :  » UnTagged » feemaster » com » fee » master » service » Android Open Source

Android Open Source » UnTagged » feemaster 
feemaster » com » fee » master » service » SmsDetailObserver.java
package com.fee.master.service;


import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.util.Log;

import com.fee.master.MainActivity;
import com.fee.master.R;
import com.fee.master.db.ConfigCenter;
import com.fee.master.model.DayStat;
import com.fee.master.model.MonthStat;
import com.fee.master.util.Constants;
import com.fee.master.util.DateUtil;

public class SmsDetailObserver extends ContentObserver {
  
  private static final String TAG = "DetailSmsObserver";
  private static final int DETAIL_SERVICE_STATUS_ID = 115;
  
  public static boolean registed = false;
  
  //
  public static int oldCount = 0;
  
  private Context context;
  
  private static final String[] SMS_PROJECTION = {
    "address","person","date","type",
  };

  public SmsDetailObserver(Context context,Handler handler) {    
    super(handler);
    this.context = context;
  }
  
  public void onChange(boolean selfChange){
    Log.i(TAG, "on change");
    
    String orderBy = "date desc";    
    ContentResolver content = context.getContentResolver();
    Cursor cursor = content.query(Uri.parse(Constants.URI_SMS), SMS_PROJECTION, null, null, orderBy);
    int curCount = cursor.getCount();
    String smsType = "";
    
    if(cursor.moveToFirst()&& curCount>=oldCount ){
      
      String number = cursor.getString(cursor.getColumnIndex("address"));
      int type = cursor.getInt(cursor.getColumnIndex("type"));
      long smsTime = cursor.getLong(cursor.getColumnIndex("date"));
      String time = DateUtil.formatDate(smsTime, Constants.yyyyMMddHHmmss);
      
      Log.d(TAG, "number="+number+",type="+type+",time="+time);
      
      //1-2-
      if(type==1){
        smsType = Constants.MSG_IN;
      }else if(type ==2){
        smsType = Constants.MSG_OUT;
      }
      
      String month = time.substring(0, 6);
      String day = time.substring(0,8);
      String mSelection = MonthStat.MONTH+" ='"+month+"' and "+MonthStat.KEY+"='"+smsType+"'";
      String dSelection = DayStat.DAY+" ='"+day+"' and "+DayStat.KEY+"='"+smsType+"'";
      
      //
      ContentValues mValues = new ContentValues();
      mValues.put(MonthStat.MONTH, month);
      mValues.put(MonthStat.KEY, smsType);
      mValues.put(MonthStat.NUM, 1);
      Cursor c = context.getContentResolver().query(MonthStat.URI_MONTH_STAT, null, mSelection, null, null);
      
      if(c!= null && c.getCount()>0){
        context.getContentResolver().update(MonthStat.URI_MONTH_STAT, mValues, null, null);
      }else{              
        context.getContentResolver().insert(MonthStat.URI_MONTH_STAT, mValues);
      }
      c.close();
      
      //
      ContentValues dValues = new ContentValues();
      dValues.put(DayStat.DAY, day);
      dValues.put(DayStat.KEY, smsType);
      dValues.put(DayStat.NUM, 1);
      
      Cursor dc = context.getContentResolver().query(DayStat.URI_DAY_STAT, null, dSelection, null, null);
      if(dc!= null && dc.getCount()>0){
        context.getContentResolver().update(DayStat.URI_DAY_STAT, dValues, null, null);
      }else{              
        context.getContentResolver().insert(DayStat.URI_DAY_STAT, dValues);
      }
      dc.close();  
      
    }
    cursor.close();
    
    //
    oldCount= curCount;
    
    if(smsType.equals(Constants.MSG_OUT) && checkOverMaxTime()){
      showNotify();
    }
  }
  
  
  private boolean checkOverMaxTime(){
    String max = ConfigCenter.getValue(context, Constants.KEY_WARN_SMS, "0");
    if("".equals(max) || "0".equals(max)){
      return false;
    }else{
      int curNum = 0;
      String selection = MonthStat.MONTH+"="+ DateUtil.getCurrentDate("yyyyMM");
      selection = selection +" and "+MonthStat.KEY+"='"+Constants.MSG_OUT+"'";
          Cursor c = context.getContentResolver().query(MonthStat.URI_MONTH_STAT, null, selection, null, null);
          if(c.moveToFirst()){
            curNum = c.getInt(c.getColumnIndex(MonthStat.NUM));            
          }
          c.close();
          if(curNum > Integer.valueOf(max)){
            return true;
          }else{
            return false;
          }
    }    
  }
  
  private void showNotify(){
    NotificationManager nfManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification nf = new Notification();
    nf.icon = R.drawable.icon;
    nf.tickerText = context.getResources().getString(R.string.notify_desc_sms);
    PendingIntent contentIntent = PendingIntent
        .getActivity(context, 0, new Intent(context,MainActivity.class), 0);
    
    String max = ConfigCenter.getValue(context, Constants.KEY_WARN_SMS, "0");
    String title = context.getResources().getString(R.string.app_name);
    String desc = context.getResources().getString(R.string.notify_desc_sms)+":"+max+context.getResources().getString(R.string.sms_count);
    nf.setLatestEventInfo(context, title,desc, contentIntent);
    nf.flags = Notification.FLAG_NO_CLEAR;

    nfManager.notify(DETAIL_SERVICE_STATUS_ID, nf);
  }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.