package com.steps.geosms.websms; import android.content.Context; import android.content.SharedPreferences; import android.util.Log; import com.steps.geosms.MyPreferencesManager; /** * Class SyncedWebSms that stays synced. * <p/> * Pattern by Ioane Sharvadze. * <p/> * This pattern is good for changing object at runtime. So in this option if user changed * web sms in runtime, this object will change inside structure so that webSms will be always * up to date. * <p/> * Created by Ioane on 3/24/2015. */ public class SyncedWebSms implements WebSms, SharedPreferences.OnSharedPreferenceChangeListener { private static final String TAG = SyncedWebSms.class.getSimpleName(); private WebSms webSms; private Context context; public SyncedWebSms(Context context) { this.context = context; this.webSms = MyPreferencesManager.getWebSmsManager(context); SharedPreferences preferences = MyPreferencesManager.getWebSmsPreferences(context); preferences.registerOnSharedPreferenceChangeListener(this); } @Override public boolean authenticate() { return webSms != null && webSms.authenticate(); } @Override public boolean sendSms(String message, String address) { return webSms != null && webSms.sendSms(message, address); } @Override public int getNumMessages() { if (webSms == null) return 0; return webSms.getNumMessages(); } @Override public String getBalance() { if (webSms == null) return null; return webSms.getBalance(); } @Override public String getCookie() { if (webSms == null) return ""; return webSms.getCookie(); } @Override public void setCookie(String cookie) { if (webSms == null) return; webSms.setCookie(cookie); } @Override public String getPassword() { if (webSms == null) return ""; return webSms.getPassword(); } @Override public void setPassword(String password) { if (webSms == null) return; webSms.setPassword(password); } @Override public String getUserName() { if (webSms == null) return ""; return webSms.getUserName(); } @Override public void setUserName(String userName) { if (webSms == null) return; webSms.setUserName(userName); } @Override public String getAccountName() { if (webSms == null) return ""; return webSms.getAccountName(); } @Override public void setAccountName(String name) { if (webSms == null) return; webSms.setAccountName(name); } @Override public boolean updateBalance() { return webSms != null && webSms.updateBalance(); } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Log.i(TAG, key); if (MyPreferencesManager.WEBSMS_COOKIE.equals(key) || key == null) return; // Web sms changed if (MyPreferencesManager.WEBSMS_NAME.equals(key)) { MyPreferencesManager.saveCookie(context, null); this.webSms = MyPreferencesManager.getWebSmsManager(context); return; } if (webSms == null) return; // changed username if (MyPreferencesManager.WEBSMS_USERNAME.equals(key)) { MyPreferencesManager.saveCookie(context, null); webSms.setCookie(""); // clear cookie this.webSms.setUserName(sharedPreferences.getString(MyPreferencesManager.WEBSMS_USERNAME, "")); } else if (MyPreferencesManager.WEBSMS_PASSWORD.equals(key)) { MyPreferencesManager.saveCookie(context, null); webSms.setCookie(""); // clear cookie this.webSms.setPassword(sharedPreferences.getString(MyPreferencesManager.WEBSMS_PASSWORD, "")); } } }