Merge pull request #11 from MilosKozak/master

dev
This commit is contained in:
LadyViktoria 2016-06-13 23:09:15 +02:00 committed by GitHub
commit 41d3181454
21 changed files with 752 additions and 98 deletions

View file

@ -1,5 +1,6 @@
package info.nightscout.androidaps;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
@ -7,9 +8,15 @@ import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import com.squareup.otto.Subscribe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import info.nightscout.androidaps.events.EventRefreshGui;
import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment;
import info.nightscout.androidaps.plugins.LowSuspend.LowSuspendFragment;
import info.nightscout.androidaps.plugins.OpenAPSMA.OpenAPSMAFragment;
import info.nightscout.androidaps.plugins.Overview.OverviewFragment;
@ -26,7 +33,9 @@ public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private SlidingTabLayout mTabs;
private ViewPager mPager;
private TabPageAdapter mAdapter;
private static TabPageAdapter pageAdapter;
ArrayList<Fragment> pluginsList = new ArrayList<Fragment>();
public static TreatmentsFragment treatmentsFragment;
public static TempBasalsFragment tempBasalsFragment;
@ -38,25 +47,51 @@ public class MainActivity extends AppCompatActivity {
setContentView(R.layout.activity_main);
// Register all tabs in app here
mAdapter = new TabPageAdapter(getSupportFragmentManager());
mAdapter.registerNewFragment("Overview", OverviewFragment.newInstance());
mAdapter.registerNewFragment("VirtualPump", (VirtualPumpFragment) MainApp.setActivePump(VirtualPumpFragment.newInstance()));
mAdapter.registerNewFragment("LowSuspend", LowSuspendFragment.newInstance());
mAdapter.registerNewFragment("OpenAPS MA", OpenAPSMAFragment.newInstance());
mAdapter.registerNewFragment("Treatments", treatmentsFragment = TreatmentsFragment.newInstance());
mAdapter.registerNewFragment("TempBasals", tempBasalsFragment = TempBasalsFragment.newInstance());
mAdapter.registerNewFragment("Profile", ProfileViewerFragment.newInstance());
mAdapter.registerNewFragment("Objectives", ObjectivesFragment.newInstance());
pluginsList.add(OverviewFragment.newInstance());
pluginsList.add((VirtualPumpFragment) MainApp.setActivePump(VirtualPumpFragment.newInstance()));
pluginsList.add(LowSuspendFragment.newInstance());
pluginsList.add(OpenAPSMAFragment.newInstance());
pluginsList.add(treatmentsFragment = TreatmentsFragment.newInstance());
pluginsList.add(tempBasalsFragment = TempBasalsFragment.newInstance());
pluginsList.add(ProfileViewerFragment.newInstance());
pluginsList.add(ObjectivesFragment.newInstance());
pluginsList.add(ConfigBuilderFragment.newInstance());
/*
pageAdapter.registerNewFragment(OverviewFragment.newInstance());
pageAdapter.registerNewFragment((VirtualPumpFragment) MainApp.setActivePump(VirtualPumpFragment.newInstance()));
pageAdapter.registerNewFragment(LowSuspendFragment.newInstance());
pageAdapter.registerNewFragment(OpenAPSMAFragment.newInstance());
pageAdapter.registerNewFragment(treatmentsFragment = TreatmentsFragment.newInstance());
pageAdapter.registerNewFragment(tempBasalsFragment = TempBasalsFragment.newInstance());
pageAdapter.registerNewFragment(ProfileViewerFragment.newInstance());
pageAdapter.registerNewFragment(ObjectivesFragment.newInstance());
pageAdapter.registerNewFragment(ConfigBuilderFragment.newInstance());
*/
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mTabs = (SlidingTabLayout) findViewById(R.id.tabs);
mTabs.setViewPager(mPager);
registerBus();
setUpTabs(false);
}
@Subscribe
public void onStatusEvent(final EventRefreshGui ev) {
setUpTabs(true);
}
private void setUpTabs(boolean switchToLast) {
pageAdapter = new TabPageAdapter(getSupportFragmentManager());
for(Fragment f: pluginsList) {
pageAdapter.registerNewFragment(f);
}
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(pageAdapter);
mTabs = (SlidingTabLayout) findViewById(R.id.tabs);
mTabs.setViewPager(mPager);
if (switchToLast)
mPager.setCurrentItem(pageAdapter.getCount()-1, false);
}
@Override
@ -82,5 +117,7 @@ public class MainActivity extends AppCompatActivity {
MainApp.bus().register(this);
}
public static TabPageAdapter getPageAdapter() {
return pageAdapter;
}
}

View file

@ -12,10 +12,7 @@ import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Date;
import info.nightscout.androidaps.data.Pump;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsFragment;
import info.nightscout.androidaps.plugins.Pump;
import info.nightscout.client.data.NSProfile;
import info.nightscout.androidaps.db.DatabaseHelper;

View file

@ -6,6 +6,7 @@ import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.support.annotation.Nullable;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.PreparedQuery;
@ -332,6 +333,7 @@ public class DataService extends IntentService {
editor.commit();
}
@Nullable
public static Treatment findById(String _id) {
try {
QueryBuilder<Treatment, String> qb = null;
@ -355,6 +357,7 @@ public class DataService extends IntentService {
return null;
}
@Nullable
public static Treatment findByTimeIndex(Long timeIndex) {
try {
QueryBuilder<Treatment, String> qb = null;

View file

@ -8,6 +8,7 @@ import java.util.List;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.Nullable;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
@ -109,6 +110,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
/*
* Return last BgReading from database or null if db is empty
*/
@Nullable
public BgReading lastBg() {
List<BgReading> bgList = null;
@ -133,6 +135,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
* Return bg reading if not old ( <9 min )
* or null if older
*/
@Nullable
public BgReading actualBg() {
BgReading lastBg = lastBg();
@ -182,6 +185,7 @@ public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
}
}
@Nullable
public GlucoseStatus getGlucoseStatusData() {
GlucoseStatus result = new GlucoseStatus();
try {

View file

@ -0,0 +1,7 @@
package info.nightscout.androidaps.events;
/**
* Created by mike on 13.06.2016.
*/
public class EventRefreshGui {
}

View file

@ -0,0 +1,210 @@
package info.nightscout.androidaps.plugins.ConfigBuilder;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import info.nightscout.androidaps.MainActivity;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.events.EventRefreshGui;
import info.nightscout.androidaps.plugins.PluginBase;
/**
* A simple {@link Fragment} subclass.
*/
public class ConfigBuilderFragment extends Fragment implements PluginBase {
private static Logger log = LoggerFactory.getLogger(ConfigBuilderFragment.class);
ListView pumpListView;
ListView treatmentsListView;
ListView tempsListView;
ListView profileListView;
ListView apsListView;
ListView generalListView;
PluginCustomAdapter pumpDataAdapter = null;
PluginCustomAdapter treatmentsDataAdapter = null;
PluginCustomAdapter tempsDataAdapter = null;
PluginCustomAdapter profileDataAdapter = null;
PluginCustomAdapter apsDataAdapter = null;
PluginCustomAdapter generalDataAdapter = null;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.configbuilder_fragment, container, false);
pumpListView = (ListView) view.findViewById(R.id.configbuilder_pumplistview);
treatmentsListView = (ListView) view.findViewById(R.id.configbuilder_treatmentslistview);
tempsListView = (ListView) view.findViewById(R.id.configbuilder_tempslistview);
profileListView = (ListView) view.findViewById(R.id.configbuilder_profilelistview);
apsListView = (ListView) view.findViewById(R.id.configbuilder_apslistview);
generalListView = (ListView) view.findViewById(R.id.configbuilder_generallistview);
//Array list of countries
ArrayList<PluginBase> pluginList = MainActivity.getPageAdapter().getPluginsList();
pumpDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getPageAdapter().getSpecificPluginsList(PluginBase.PUMP));
pumpListView.setAdapter(pumpDataAdapter);
treatmentsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getPageAdapter().getSpecificPluginsList(PluginBase.TREATMENT));
treatmentsListView.setAdapter(treatmentsDataAdapter);
tempsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getPageAdapter().getSpecificPluginsList(PluginBase.TEMPBASAL));
tempsListView.setAdapter(tempsDataAdapter);
profileDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getPageAdapter().getSpecificPluginsList(PluginBase.PROFILE));
profileListView.setAdapter(profileDataAdapter);
apsDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getPageAdapter().getSpecificPluginsList(PluginBase.APS));
apsListView.setAdapter(apsDataAdapter);
generalDataAdapter = new PluginCustomAdapter(getContext(), R.layout.configbuilder_simpleitem, MainActivity.getPageAdapter().getSpecificPluginsList(PluginBase.GENERAL));
generalListView.setAdapter(generalDataAdapter);
apsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// When clicked, show a toast with the TextView text
PluginBase plugin = (PluginBase) parent.getItemAtPosition(position);
Toast.makeText(MainApp.instance().getApplicationContext(),
"Clicked on Row: " + plugin.getName(),
Toast.LENGTH_LONG).show();
}
});
return view;
}
@Override
public int getType() {
return PluginBase.GENERAL;
}
@Override
public String getName() {
return MainApp.instance().getString(R.string.configbuilder);
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean isVisibleInTabs() {
return true;
}
@Override
public boolean canBeHidden() {
return false;
}
@Override
public void setFragmentEnabled(boolean fragmentEnabled) {
// Always enabled
}
@Override
public void setFragmentVisible(boolean fragmentVisible) {
// Always visible
}
public static ConfigBuilderFragment newInstance() {
ConfigBuilderFragment fragment = new ConfigBuilderFragment();
return fragment;
}
private class PluginCustomAdapter extends ArrayAdapter<PluginBase> {
private ArrayList<PluginBase> pluginList;
public PluginCustomAdapter(Context context, int textViewResourceId,
ArrayList<PluginBase> pluginList) {
super(context, textViewResourceId, pluginList);
this.pluginList = new ArrayList<PluginBase>();
this.pluginList.addAll(pluginList);
}
private class PluginViewHolder {
TextView name;
CheckBox checkboxEnabled;
CheckBox checkboxVisible;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
PluginViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.configbuilder_simpleitem, null);
holder = new PluginViewHolder();
holder.name = (TextView) convertView.findViewById(R.id.configbuilder_simpleitem_name);
holder.checkboxEnabled = (CheckBox) convertView.findViewById(R.id.configbuilder_simpleitem_checkboxenabled);
holder.checkboxVisible = (CheckBox) convertView.findViewById(R.id.configbuilder_simpleitem_checkboxvisible);
convertView.setTag(holder);
holder.checkboxEnabled.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
PluginBase plugin = (PluginBase) cb.getTag();
Toast.makeText(MainApp.instance().getApplicationContext(),
"Clicked on ENABLED: " + plugin.getName() +
" is " + cb.isChecked(),
Toast.LENGTH_LONG).show();
plugin.setFragmentEnabled(cb.isChecked());
}
});
holder.checkboxVisible.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
CheckBox cb = (CheckBox) v;
PluginBase plugin = (PluginBase) cb.getTag();
Toast.makeText(MainApp.instance().getApplicationContext(),
"Clicked on VISIBLE: " + plugin.getName() +
" is " + cb.isChecked(),
Toast.LENGTH_LONG).show();
plugin.setFragmentVisible(cb.isChecked());
MainApp.bus().post(new EventRefreshGui());
}
});
} else {
holder = (PluginViewHolder) convertView.getTag();
}
PluginBase plugin = pluginList.get(position);
holder.name.setText(plugin.getName());
holder.checkboxEnabled.setChecked(plugin.isEnabled());
holder.checkboxVisible.setChecked(plugin.isVisibleInTabs());
holder.name.setTag(plugin);
holder.checkboxEnabled.setTag(plugin);
holder.checkboxVisible.setTag(plugin);
if (!plugin.canBeHidden()) {
holder.checkboxEnabled.setEnabled(false);
holder.checkboxVisible.setEnabled(false);
}
return convertView;
}
}
private void displayListView() {
}
}

View file

@ -1,9 +1,7 @@
package info.nightscout.androidaps.plugins.LowSuspend;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
@ -25,7 +23,7 @@ import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Pump;
import info.nightscout.androidaps.plugins.Pump;
import info.nightscout.androidaps.db.DatabaseHelper;
import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.plugins.APSBase;
@ -46,17 +44,44 @@ public class LowSuspendFragment extends Fragment implements View.OnClickListener
Date lastAPSRun = null;
APSResult lastAPSResult = null;
boolean fragmentEnabled = false;
boolean fragmentVisible = true;
@Override
public String getName() {
return MainApp.instance().getString(R.string.lowsuspend);
}
@Override
public boolean isEnabled() {
return fragmentEnabled;
}
@Override
public boolean isVisibleInTabs() {
return fragmentVisible;
}
@Override
public boolean canBeHidden() {
return true;
}
@Override
public void setFragmentEnabled(boolean selected) {
this.fragmentEnabled = selected;
}
@Override
public void setFragmentVisible(boolean fragmentVisible) {
this.fragmentVisible = fragmentVisible;
}
@Override
public int getType() {
return PluginBase.APS;
}
@Override
public boolean isFragmentVisible() {
return true;
}
@Override
public APSResult getLastAPSResult() {
return lastAPSResult;

View file

@ -1,6 +1,5 @@
package info.nightscout.androidaps.plugins.Objectives;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.CardView;
@ -15,6 +14,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.plugins.PluginBase;
@ -22,16 +22,42 @@ public class ObjectivesFragment extends Fragment implements PluginBase {
RecyclerView recyclerView;
LinearLayoutManager llm;
boolean fragmentVisible = true;
@Override
public int getType() {
return PluginBase.GENERAL;
}
@Override
public boolean isFragmentVisible() {
public String getName() {
return MainApp.instance().getString(R.string.objectives);
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean isVisibleInTabs() {
return fragmentVisible;
}
@Override
public boolean canBeHidden() {
return true;
}
@Override
public void setFragmentEnabled(boolean fragmentEnabled) {
}
@Override
public void setFragmentVisible(boolean fragmentVisible) {
this.fragmentVisible = fragmentVisible;
}
class Objective {
String objective;
String gate;
@ -92,7 +118,7 @@ public class ObjectivesFragment extends Fragment implements PluginBase {
@Override
public void onBindViewHolder(ObjectiveViewHolder holder, int position) {
holder.position.setText(String.valueOf(position+1));
holder.position.setText(String.valueOf(position + 1));
holder.objective.setText(objectives.get(position).objective);
holder.gate.setText(objectives.get(position).gate);
holder.started.setText(objectives.get(position).started.toString());

View file

@ -13,7 +13,7 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.data.Pump;
import info.nightscout.androidaps.plugins.Pump;
import info.nightscout.androidaps.db.DatabaseHelper;
import info.nightscout.androidaps.plugins.ScriptReader;
import info.nightscout.androidaps.plugins.Treatments.TreatmentsFragment;

View file

@ -25,8 +25,7 @@ import info.nightscout.androidaps.Constants;
import info.nightscout.androidaps.MainActivity;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.data.Pump;
import info.nightscout.androidaps.plugins.Pump;
import info.nightscout.androidaps.db.DatabaseHelper;
import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.events.EventTreatmentChange;
@ -54,16 +53,44 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener,
Date lastAPSRun = null;
APSResult lastAPSResult = null;
boolean fragmentEnabled = false;
boolean fragmentVisible = true;
@Override
public int getType() {
return PluginBase.APS;
public String getName() {
return MainApp.instance().getString(R.string.openapsma);
}
@Override
public boolean isFragmentVisible() {
public boolean isEnabled() {
return fragmentEnabled;
}
@Override
public boolean isVisibleInTabs() {
return fragmentVisible;
}
@Override
public boolean canBeHidden() {
return true;
}
@Override
public void setFragmentVisible(boolean fragmentVisible) {
this.fragmentVisible = fragmentVisible;
}
@Override
public void setFragmentEnabled(boolean fragmentEnabled) {
this.fragmentEnabled = fragmentEnabled;
}
@Override
public int getType() {
return PluginBase.APS;
}
@Override
public APSResult getLastAPSResult() {
return lastAPSResult;
@ -153,7 +180,7 @@ public class OpenAPSMAFragment extends Fragment implements View.OnClickListener,
@Override
public void invoke() {
DetermineBasalAdapterJS determineBasalAdapterJS = null;
DetermineBasalAdapterJS determineBasalAdapterJS = null;
try {
determineBasalAdapterJS = new DetermineBasalAdapterJS(new ScriptReader(MainApp.instance().getBaseContext()));
} catch (IOException e) {

View file

@ -44,17 +44,41 @@ public class OverviewFragment extends Fragment implements PluginBase {
TextView deltaView;
GraphView bgGraph;
@Override
public String getName() {
return MainApp.instance().getString(R.string.overview);
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean isVisibleInTabs() {
return true;
}
@Override
public boolean canBeHidden() {
return false;
}
@Override
public void setFragmentEnabled(boolean fragmentEnabled) {
// Always enabled
}
@Override
public void setFragmentVisible(boolean fragmentVisible) {
// Always visible
}
@Override
public int getType() {
return PluginBase.GENERAL;
}
@Override
public boolean isFragmentVisible() {
return true;
}
public static OverviewFragment newInstance() {
OverviewFragment fragment = new OverviewFragment();
return fragment;
@ -101,15 +125,16 @@ public class OverviewFragment extends Fragment implements PluginBase {
if (bgGraph == null)
return;
// **** BG value ****
if (profile != null && lastBG != null && bgView != null) {
bgView.setText(lastBG.valueToUnitsToString(profile.getUnits()));
DatabaseHelper.GlucoseStatus glucoseStatus = MainApp.getDbHelper().getGlucoseStatusData();
deltaView.setText(NSProfile.toUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) + " " + units);
if (glucoseStatus != null)
deltaView.setText("Δ " + NSProfile.toUnitsString(glucoseStatus.delta, glucoseStatus.delta * Constants.MGDL_TO_MMOLL, units) + " " + units);
BgReading.units = profile.getUnits();
} else
return;
// **** BG value ****
Integer flag = bgView.getPaintFlags();
if (actualBG == null) {
flag |= Paint.STRIKE_THRU_TEXT_FLAG;
@ -118,7 +143,7 @@ public class OverviewFragment extends Fragment implements PluginBase {
bgView.setPaintFlags(flag);
Long agoMsec = new Date().getTime() - lastBG.timestamp;
int agoMin = (int) (agoMsec / 60d / 60d / 1000d);
int agoMin = (int) (agoMsec / 60d / 1000d);
timeAgoView.setText(agoMin + " " + getString(R.string.minago));
// **** BG graph ****
@ -135,7 +160,7 @@ public class OverviewFragment extends Fragment implements PluginBase {
Double lowLine = NSProfile.toUnits(80d, 4d, units); // TODO: make this customisable
Double highLine = NSProfile.toUnits(180d, 10d, units);
Double maxY = NSProfile.toUnits(400d , 20d, units); // TODO: add some scale support
Double maxY = NSProfile.toUnits(400d, 20d, units); // TODO: add some scale support
List<BgReading> bgReadingsArray = MainApp.getDbHelper().getDataFromTime(fromTime);
List<BgReading> inRangeArray = new ArrayList<BgReading>();

View file

@ -7,10 +7,18 @@ import java.util.Date;
*/
public interface PluginBase {
int GENERAL = 1;
int PROFILE = 2;
int APS = 3;
int PUMP = 4;
int TREATMENT = 2;
int TEMPBASAL = 3;
int PROFILE = 4;
int APS = 5;
int PUMP = 6;
public int getType();
public boolean isFragmentVisible();
}
String getName();
boolean isEnabled();
boolean isVisibleInTabs();
boolean canBeHidden();
void setFragmentEnabled(boolean fragmentEnabled);
void setFragmentVisible(boolean fragmentVisible);
}

View file

@ -35,17 +35,44 @@ public class ProfileViewerFragment extends Fragment implements PluginBase {
private static DecimalFormat formatNumber2decimalplaces = new DecimalFormat("0.00");
boolean fragmentEnabled = true;
boolean fragmentVisible = true;
@Override
public String getName() {
return MainApp.instance().getString(R.string.profileviewer);
}
@Override
public boolean isEnabled() {
return fragmentEnabled;
}
@Override
public boolean isVisibleInTabs() {
return fragmentVisible;
}
@Override
public boolean canBeHidden() {
return true;
}
@Override
public void setFragmentEnabled(boolean fragmentEnabled) {
this.fragmentEnabled = fragmentEnabled;
}
@Override
public void setFragmentVisible(boolean fragmentVisible) {
this.fragmentVisible = fragmentVisible;
}
@Override
public int getType() {
return PluginBase.PROFILE;
}
@Override
public boolean isFragmentVisible() {
return true;
}
public static ProfileViewerFragment newInstance(String param1, String param2) {
ProfileViewerFragment fragment = new ProfileViewerFragment();
return fragment;

View file

@ -1,8 +1,8 @@
package info.nightscout.androidaps.data;
package info.nightscout.androidaps.plugins;
import org.json.JSONObject;
import info.nightscout.androidaps.db.Treatment;
import info.nightscout.androidaps.data.Result;
import info.nightscout.client.data.NSProfile;
/**
@ -16,7 +16,7 @@ public interface Pump {
Integer getBatteryPercent();
Integer getReservoirValue();
// Upload to pump new basal profile from MainApp.getNSProfile()
// Upload to pump new basal profile
void setNewBasalProfile(NSProfile profile);
double getBaseBasalRate(); // base basal rate, not temp basal

View file

@ -1,8 +1,6 @@
package info.nightscout.androidaps.plugins.TempBasals;
import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.CardView;
@ -31,7 +29,6 @@ import java.util.Locale;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Iob;
import info.nightscout.androidaps.db.TempBasal;
import info.nightscout.androidaps.events.EventNewBG;
import info.nightscout.androidaps.events.EventTempBasalChange;
@ -56,17 +53,44 @@ public class TempBasalsFragment extends Fragment implements PluginBase {
private List<TempBasal> tempBasals;
boolean fragmentEnabled = true;
boolean fragmentVisible = true;
@Override
public int getType() {
return PluginBase.GENERAL;
public String getName() {
return MainApp.instance().getString(R.string.tempbasals);
}
@Override
public boolean isFragmentVisible() {
public boolean isEnabled() {
return fragmentEnabled;
}
@Override
public boolean isVisibleInTabs() {
return fragmentVisible;
}
@Override
public boolean canBeHidden() {
return true;
}
@Override
public void setFragmentEnabled(boolean fragmentEnabled) {
this.fragmentEnabled = fragmentEnabled;
}
@Override
public void setFragmentVisible(boolean fragmentVisible) {
this.fragmentVisible = fragmentVisible;
}
@Override
public int getType() {
return PluginBase.TEMPBASAL;
}
private void initializeData() {
try {
Dao<TempBasal, Long> dao = MainApp.getDbHelper().getDaoTempBasals();

View file

@ -1,7 +1,6 @@
package info.nightscout.androidaps.plugins.Treatments;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
@ -32,7 +31,6 @@ import java.util.Date;
import java.util.List;
import java.util.Locale;
import info.nightscout.androidaps.MainActivity;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Iob;
@ -64,17 +62,44 @@ public class TreatmentsFragment extends Fragment implements View.OnClickListener
private List<Treatment> treatments;
boolean fragmentEnabled = true;
boolean fragmentVisible = true;
@Override
public int getType() {
return PluginBase.GENERAL;
public String getName() {
return MainApp.instance().getString(R.string.treatments);
}
@Override
public boolean isFragmentVisible() {
public boolean isEnabled() {
return fragmentEnabled;
}
@Override
public boolean isVisibleInTabs() {
return fragmentVisible;
}
@Override
public boolean canBeHidden() {
return true;
}
@Override
public void setFragmentEnabled(boolean fragmentEnabled) {
this.fragmentEnabled = fragmentEnabled;
}
@Override
public void setFragmentVisible(boolean fragmentVisible) {
this.fragmentVisible = fragmentVisible;
}
@Override
public int getType() {
return PluginBase.TREATMENT;
}
private void initializeData() {
try {
Dao<Treatment, Long> dao = MainApp.getDbHelper().getDaoTreatments();

View file

@ -20,10 +20,9 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import info.nightscout.androidaps.Config;
import info.nightscout.androidaps.MainActivity;
import info.nightscout.androidaps.MainApp;
import info.nightscout.androidaps.R;
import info.nightscout.androidaps.data.Pump;
import info.nightscout.androidaps.plugins.Pump;
import info.nightscout.androidaps.data.Result;
import info.nightscout.androidaps.db.TempBasal;
import info.nightscout.androidaps.db.Treatment;
@ -47,16 +46,43 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, Pump {
TextView batteryView;
TextView reservoirView;
boolean fragmentEnabled = true;
boolean fragmentVisible = true;
@Override
public int getType() {
return PluginBase.PUMP;
public String getName() {
return MainApp.instance().getString(R.string.virtualpump);
}
@Override
public boolean isFragmentVisible() {
public boolean isEnabled() {
return fragmentEnabled;
}
@Override
public boolean isVisibleInTabs() {
return fragmentVisible;
}
@Override
public boolean canBeHidden() {
return true;
}
public void setFragmentEnabled(boolean fragmentEnabled) {
this.fragmentEnabled = fragmentEnabled;
}
@Override
public void setFragmentVisible(boolean fragmentVisible) {
this.fragmentVisible = fragmentVisible;
}
@Override
public int getType() {
return PluginBase.PUMP;
}
public static VirtualPumpFragment newInstance() {
VirtualPumpFragment fragment = new VirtualPumpFragment();
return fragment;
@ -128,7 +154,7 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, Pump {
tempBasal = null;
}
}
if (isExtendedBoluslInProgress()) {
if (isExtendedBoluslInProgress()) {
long plannedTimeEnd = extendedBolus.getPlannedTimeEnd().getTime();
if (plannedTimeEnd < now) {
extendedBolus.timeEnd = new Date(plannedTimeEnd);
@ -344,7 +370,7 @@ public class VirtualPumpFragment extends Fragment implements PluginBase, Pump {
}
@Override
public JSONObject getJSONStatus(){
public JSONObject getJSONStatus() {
JSONObject pump = new JSONObject();
JSONObject battery = new JSONObject();
JSONObject status = new JSONObject();

View file

@ -1,56 +1,69 @@
package info.nightscout.androidaps.tabs;
import android.os.Bundle;
import android.support.annotation.PluralsRes;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentStatePagerAdapter;
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;
import info.nightscout.androidaps.plugins.PluginBase;
/**
* Created by mike on 30.05.2016.
*/
public class TabPageAdapter extends FragmentPagerAdapter {
public class TabPageAdapter extends FragmentStatePagerAdapter {
int registeredTabs = 0;
List<Fragment> fragmentList = new ArrayList<Fragment>();
ArrayList<PluginBase> fragmentList = new ArrayList<PluginBase>();
ArrayList<PluginBase> visibleFragmentList = new ArrayList<PluginBase>();
FragmentManager fm;
public TabPageAdapter(FragmentManager fm) {
super(fm);
this.fm = fm;
}
@Override
@Nullable
public Fragment getItem(int position) {
if (position > registeredTabs)
return null;
Fragment fragment = fragmentList.get(position);
Fragment fragment = (Fragment) visibleFragmentList.get(position);
return fragment;
}
@Override
public CharSequence getPageTitle(int position) {
return fragmentList.get(position).getArguments().getString("name");
return visibleFragmentList.get(position).getName();
}
@Override
public int getCount() {
return registeredTabs;
return visibleFragmentList.size();
}
public int registerNewFragment(String name, Fragment fragment) {
if (((PluginBase) fragment).isFragmentVisible()){
fragmentList.add(fragment);
Bundle args = new Bundle();
args.putString("name", name);
fragment.setArguments(args);
registeredTabs++;
public void registerNewFragment(Fragment fragment) {
PluginBase plugin = (PluginBase) fragment;
fragmentList.add(plugin);
if (plugin.isVisibleInTabs()) {
visibleFragmentList.add(plugin);
notifyDataSetChanged();
return registeredTabs - 1;
}
return registeredTabs;
}
public ArrayList<PluginBase> getPluginsList() {
return fragmentList;
}
public ArrayList<PluginBase> getSpecificPluginsList(int type) {
ArrayList<PluginBase> newList = new ArrayList<PluginBase>();
Iterator<PluginBase> it = fragmentList.iterator();
while (it.hasNext()) {
PluginBase p = it.next();
if (p.getType() == type)
newList.add(p);
}
return newList;
}
}

View file

@ -0,0 +1,105 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderFragment">
<!-- TODO: Update blank fragment layout -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_pump"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_pumplistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:background="@color/cardColorBackground" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_treatments"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_treatmentslistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@color/cardColorBackground" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_tempbasals"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_tempslistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@color/cardColorBackground" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_profile"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_profilelistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@color/cardColorBackground" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_aps"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_apslistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@color/cardColorBackground" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/configbuilder_general"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold" />
<ListView
android:id="@+id/configbuilder_generallistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:background="@color/cardColorBackground" />
</LinearLayout>
</FrameLayout>

View file

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:id="@+id/configbuilder_simpleitem_checkboxenabled"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_gravity="center"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="Enabled" />
<CheckBox
android:id="@+id/configbuilder_simpleitem_checkboxvisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_gravity="center"
android:focusable="false"
android:focusableInTouchMode="false"
android:text="Visible" />
<ImageView
android:id="@+id/configbuilder_simpleitem_upimage"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@android:drawable/arrow_up_float" />
<TextView
android:id="@+id/configbuilder_simpleitem_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Plugin name"
android:textStyle="bold" />
</LinearLayout>
</ScrollView>

View file

@ -88,4 +88,20 @@
<string name="avgdelta">Avg. delta:</string>
<string name="minago">min ago</string>
<string name="configbuilder">Config Builder</string>
<string name="lowsuspend">Low Suspend</string>
<string name="objectives">Objectives</string>
<string name="openapsma">OpenAPS MA</string>
<string name="overview">Overview</string>
<string name="profileviewer">Profile Viewer</string>
<string name="tempbasals">Temp Basals</string>
<string name="treatments">Treatments</string>
<string name="virtualpump">Virtual Pump</string>
<string name="configbuilder_pump">Pump</string>
<string name="configbuilder_treatments">Treatments</string>
<string name="configbuilder_tempbasals">Temp Basals</string>
<string name="configbuilder_profile">Profile</string>
<string name="configbuilder_aps">APS</string>
<string name="configbuilder_general">General</string>
</resources>