From 5a27f9afa13186a4175b085e49ed41d0d78a413b Mon Sep 17 00:00:00 2001 From: Milos Kozak Date: Mon, 3 Jul 2017 00:02:54 +0200 Subject: [PATCH] allow lock screen in nsclient mode --- .../nightscout/androidaps/MainActivity.java | 29 +++++++++++++++ .../plugins/Overview/OverviewFragment.java | 18 +++++++++ .../Overview/events/EventSetWakeLock.java | 13 +++++++ .../res/layout/overview_fragment_nsclient.xml | 31 +++++++++++----- .../overview_fragment_nsclient_tablet.xml | 37 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 + 6 files changed, 121 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/info/nightscout/androidaps/plugins/Overview/events/EventSetWakeLock.java diff --git a/app/src/main/java/info/nightscout/androidaps/MainActivity.java b/app/src/main/java/info/nightscout/androidaps/MainActivity.java index 5643d445fd..c4b93657d3 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/MainActivity.java @@ -23,6 +23,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; +import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.ImageButton; @@ -40,6 +41,7 @@ import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventRefreshGui; import info.nightscout.androidaps.interfaces.PluginBase; import info.nightscout.androidaps.plugins.ConfigBuilder.ConfigBuilderPlugin; +import info.nightscout.androidaps.plugins.Overview.events.EventSetWakeLock; import info.nightscout.androidaps.tabs.SlidingTabLayout; import info.nightscout.androidaps.tabs.TabPageAdapter; import info.nightscout.utils.ImportExportPrefs; @@ -60,6 +62,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe ImageButton menuButton; + protected PowerManager.WakeLock mWakeLock; @Override protected void onCreate(Bundle savedInstanceState) { @@ -79,10 +82,24 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe if (Config.logFunctionCalls) log.debug("onCreate"); + onStatusEvent(new EventSetWakeLock(SP.getBoolean("lockscreen", false))); + registerBus(); setUpTabs(false); } + @Subscribe + public void onStatusEvent(final EventSetWakeLock ev) { + final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); + if (ev.lock) { + mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "AAPS"); + mWakeLock.acquire(); + } else { + if (mWakeLock != null) + mWakeLock.release(); + } + } + @Subscribe public void onStatusEvent(final EventRefreshGui ev) { String lang = SP.getString("language", "en"); @@ -96,6 +113,11 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } catch (IllegalStateException e) { e.printStackTrace(); } + boolean lockScreen = BuildConfig.NSCLIENTOLNY && SP.getBoolean("lockscreen", false); + if (lockScreen) + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + else + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }); } @@ -156,6 +178,13 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe askForSMSPermissions(); } + @Override + public void onDestroy() { + if (mWakeLock != null) + mWakeLock.release(); + super.onDestroy(); + } + private void askForBatteryOptimizationPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { final String packageName = getPackageName(); diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java index 984778dbfc..1f44f4ab37 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/OverviewFragment.java @@ -31,6 +31,7 @@ import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.TextView; +import android.widget.ToggleButton; import com.crashlytics.android.answers.Answers; import com.crashlytics.android.answers.CustomEvent; @@ -63,6 +64,7 @@ import java.util.concurrent.TimeUnit; import info.nightscout.androidaps.BuildConfig; import info.nightscout.androidaps.Config; import info.nightscout.androidaps.Constants; +import info.nightscout.androidaps.MainActivity; import info.nightscout.androidaps.MainApp; import info.nightscout.androidaps.R; import info.nightscout.androidaps.broadcasts.NSClearAlarmBroadcast; @@ -85,6 +87,7 @@ import info.nightscout.androidaps.events.EventExtendedBolusChange; import info.nightscout.androidaps.events.EventInitializationChanged; import info.nightscout.androidaps.events.EventPreferenceChange; import info.nightscout.androidaps.events.EventPumpStatusChanged; +import info.nightscout.androidaps.events.EventRefreshGui; import info.nightscout.androidaps.events.EventRefreshOverview; import info.nightscout.androidaps.events.EventTempBasalChange; import info.nightscout.androidaps.events.EventTempTargetChange; @@ -108,6 +111,7 @@ import info.nightscout.androidaps.plugins.Overview.Dialogs.CalibrationDialog; import info.nightscout.androidaps.plugins.Overview.Dialogs.NewTreatmentDialog; import info.nightscout.androidaps.plugins.Overview.Dialogs.WizardDialog; import info.nightscout.androidaps.plugins.Overview.events.EventDismissNotification; +import info.nightscout.androidaps.plugins.Overview.events.EventSetWakeLock; import info.nightscout.androidaps.plugins.Overview.graphExtensions.AreaGraphSeries; import info.nightscout.androidaps.plugins.Overview.graphExtensions.DataPointWithLabelInterface; import info.nightscout.androidaps.plugins.Overview.graphExtensions.DoubleDataPoint; @@ -181,6 +185,8 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, Button acceptTempButton; Button quickWizardButton; + CheckBox lockScreen; + boolean smallWidth; boolean smallHeight; @@ -330,6 +336,18 @@ public class OverviewFragment extends Fragment implements View.OnClickListener, } }); + lockScreen = (CheckBox) view.findViewById(R.id.overview_lockscreen); + if (lockScreen != null) { + lockScreen.setChecked(SP.getBoolean("lockscreen", false)); + lockScreen.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + SP.putBoolean("lockscreen", isChecked); + MainApp.bus().post(new EventSetWakeLock(isChecked)); + } + }); + } + return view; } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/events/EventSetWakeLock.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/events/EventSetWakeLock.java new file mode 100644 index 0000000000..519341172d --- /dev/null +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/events/EventSetWakeLock.java @@ -0,0 +1,13 @@ +package info.nightscout.androidaps.plugins.Overview.events; + +/** + * Created by mike on 02.07.2017. + */ + +public class EventSetWakeLock { + public boolean lock = false; + + public EventSetWakeLock(boolean val) { + lock = val; + } +} diff --git a/app/src/main/res/layout/overview_fragment_nsclient.xml b/app/src/main/res/layout/overview_fragment_nsclient.xml index a4c4baea44..f42809b4be 100644 --- a/app/src/main/res/layout/overview_fragment_nsclient.xml +++ b/app/src/main/res/layout/overview_fragment_nsclient.xml @@ -138,17 +138,30 @@ - + android:orientation="vertical"> + + + + + diff --git a/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml b/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml index afb6b8ab2d..014f5f5993 100644 --- a/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml +++ b/app/src/main/res/layout/overview_fragment_nsclient_tablet.xml @@ -152,6 +152,14 @@ android:layout_marginLeft="10dp" android:textAppearance="?android:attr/textAppearanceSmall" /> + + +