package info.nightscout.androidaps.plugins.NSProfile; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.support.annotation.Nullable; import com.squareup.otto.Subscribe; import org.json.JSONException; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import info.nightscout.androidaps.Config; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.Services.Intents; import info.nightscout.androidaps.events.EventNewBasalProfile; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.interfaces.ProfileInterface; import info.nightscout.androidaps.plugins.NSClientInternal.data.NSProfile; import info.nightscout.androidaps.plugins.NSProfile.events.EventNSProfileUpdateGUI; import info.nightscout.utils.SP; /** * Created by mike on 05.08.2016. */ public class NSProfilePlugin implements PluginBase, ProfileInterface { private static Logger log = LoggerFactory.getLogger(NSProfilePlugin.class); @Override public String getFragmentClass() { return NSProfileFragment.class.getName(); } static boolean fragmentEnabled = true; static boolean fragmentVisible = true; static NSProfile profile = null; public NSProfilePlugin() { MainApp.bus().register(this); loadNSProfile(); } @Override public String getName() { return MainApp.instance().getString(R.string.profileviewer); } @Override public String getNameShort() { String name = MainApp.sResources.getString(R.string.profileviewer_shortname); if (!name.trim().isEmpty()){ //only if translation exists return name; } // use long name as fallback return getName(); } @Override public boolean isEnabled(int type) { return type == PROFILE && fragmentEnabled; } @Override public boolean isVisibleInTabs(int type) { return type == PROFILE && fragmentVisible; } @Override public boolean canBeHidden(int type) { return true; } @Override public void setFragmentEnabled(int type, boolean fragmentEnabled) { if (type == PROFILE) this.fragmentEnabled = fragmentEnabled; } @Override public void setFragmentVisible(int type, boolean fragmentVisible) { if (type == PROFILE) this.fragmentVisible = fragmentVisible; } @Override public int getType() { return PluginBase.PROFILE; } @Subscribe public void onStatusEvent(final EventNewBasalProfile ev) { profile = new NSProfile(ev.newNSProfile.getData(), ev.newNSProfile.getActiveProfile()); storeNSProfile(); MainApp.bus().post(new EventNSProfileUpdateGUI()); } private void storeNSProfile() { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(MainApp.instance().getApplicationContext()); SharedPreferences.Editor editor = settings.edit(); editor.putString("profile", profile.getData().toString()); editor.putString("activeProfile", profile.getActiveProfile()); editor.apply(); if (Config.logPrefsChange) log.debug("Storing profile"); } private void loadNSProfile() { if (Config.logPrefsChange) log.debug("Loading stored profile"); String activeProfile = SP.getString("activeProfile", null); String profileString = SP.getString("profile", null); if (profileString != null) { if (Config.logPrefsChange) { log.debug("Loaded profile: " + profileString); log.debug("Loaded active profile: " + activeProfile); try { profile = new NSProfile(new JSONObject(profileString), activeProfile); } catch (JSONException e) { e.printStackTrace(); profile = null; } } } else { if (Config.logPrefsChange) { log.debug("Stored profile not found"); // force restart of nsclient to fetch profile Intent restartNSClient = new Intent(Intents.ACTION_RESTART); MainApp.instance().getApplicationContext().sendBroadcast(restartNSClient); } } } @Nullable @Override public NSProfile getProfile() { return profile; } }