2020-04-01 21:10:48 +02:00
|
|
|
package info.nightscout.androidaps
|
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import android.content.Intent
|
|
|
|
import android.graphics.Rect
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.os.PersistableBundle
|
|
|
|
import android.text.SpannableString
|
|
|
|
import android.text.method.LinkMovementMethod
|
|
|
|
import android.text.util.Linkify
|
|
|
|
import android.util.TypedValue
|
|
|
|
import android.view.Menu
|
|
|
|
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.LinearLayout
|
|
|
|
import android.widget.TextView
|
|
|
|
import androidx.appcompat.app.ActionBarDrawerToggle
|
|
|
|
import androidx.appcompat.app.AlertDialog
|
|
|
|
import androidx.appcompat.widget.Toolbar
|
2020-04-25 21:52:20 +02:00
|
|
|
import androidx.viewpager2.widget.ViewPager2
|
|
|
|
import com.google.android.material.tabs.TabLayoutMediator
|
2021-01-08 18:55:01 +01:00
|
|
|
import com.google.firebase.crashlytics.FirebaseCrashlytics
|
2020-04-01 21:10:48 +02:00
|
|
|
import com.joanzapata.iconify.Iconify
|
|
|
|
import com.joanzapata.iconify.fonts.FontAwesomeModule
|
2020-11-28 17:26:03 +01:00
|
|
|
import dev.doubledot.doki.ui.DokiActivity
|
2020-04-01 21:10:48 +02:00
|
|
|
import info.nightscout.androidaps.activities.NoSplashAppCompatActivity
|
|
|
|
import info.nightscout.androidaps.activities.PreferencesActivity
|
2020-12-06 13:19:53 +01:00
|
|
|
import info.nightscout.androidaps.activities.ProfileHelperActivity
|
2020-04-01 21:10:48 +02:00
|
|
|
import info.nightscout.androidaps.activities.SingleFragmentActivity
|
|
|
|
import info.nightscout.androidaps.activities.StatsActivity
|
2021-04-10 11:35:38 +02:00
|
|
|
import info.nightscout.androidaps.database.entities.UserEntry.Action
|
|
|
|
import info.nightscout.androidaps.database.entities.UserEntry.Sources
|
2021-01-22 11:34:28 +01:00
|
|
|
import info.nightscout.androidaps.databinding.ActivityMainBinding
|
2020-04-01 21:10:48 +02:00
|
|
|
import info.nightscout.androidaps.events.EventAppExit
|
|
|
|
import info.nightscout.androidaps.events.EventPreferenceChange
|
|
|
|
import info.nightscout.androidaps.events.EventRebuildTabs
|
|
|
|
import info.nightscout.androidaps.historyBrowser.HistoryBrowseActivity
|
|
|
|
import info.nightscout.androidaps.interfaces.ActivePluginProvider
|
|
|
|
import info.nightscout.androidaps.interfaces.PluginType
|
|
|
|
import info.nightscout.androidaps.logging.AAPSLogger
|
|
|
|
import info.nightscout.androidaps.logging.LTag
|
2021-04-10 11:35:38 +02:00
|
|
|
import info.nightscout.androidaps.logging.UserEntryLogger
|
2020-04-01 21:10:48 +02:00
|
|
|
import info.nightscout.androidaps.plugins.aps.loop.LoopPlugin
|
|
|
|
import info.nightscout.androidaps.plugins.bus.RxBusWrapper
|
2020-05-04 01:27:47 +02:00
|
|
|
import info.nightscout.androidaps.plugins.configBuilder.ConstraintChecker
|
|
|
|
import info.nightscout.androidaps.plugins.constraints.signatureVerifier.SignatureVerifierPlugin
|
2020-04-01 21:10:48 +02:00
|
|
|
import info.nightscout.androidaps.plugins.constraints.versionChecker.VersionCheckerUtils
|
|
|
|
import info.nightscout.androidaps.plugins.general.nsclient.data.NSSettingsStatus
|
|
|
|
import info.nightscout.androidaps.plugins.general.smsCommunicator.SmsCommunicatorPlugin
|
|
|
|
import info.nightscout.androidaps.setupwizard.SetupWizardActivity
|
|
|
|
import info.nightscout.androidaps.utils.AndroidPermission
|
|
|
|
import info.nightscout.androidaps.utils.FabricPrivacy
|
2020-04-20 01:18:10 +02:00
|
|
|
import info.nightscout.androidaps.utils.alertDialogs.OKDialog
|
2020-04-01 21:10:48 +02:00
|
|
|
import info.nightscout.androidaps.utils.buildHelper.BuildHelper
|
|
|
|
import info.nightscout.androidaps.utils.extensions.isRunningRealPumpTest
|
2020-07-06 21:14:00 +02:00
|
|
|
import info.nightscout.androidaps.utils.locale.LocaleHelper
|
2020-04-01 21:10:48 +02:00
|
|
|
import info.nightscout.androidaps.utils.protection.ProtectionCheck
|
2020-05-03 17:50:33 +02:00
|
|
|
import info.nightscout.androidaps.utils.resources.IconsProvider
|
2021-02-04 20:54:09 +01:00
|
|
|
import info.nightscout.androidaps.utils.rx.AapsSchedulers
|
2020-04-01 21:10:48 +02:00
|
|
|
import info.nightscout.androidaps.utils.sharedPreferences.SP
|
2020-05-05 22:42:16 +02:00
|
|
|
import info.nightscout.androidaps.utils.tabs.TabPageAdapter
|
|
|
|
import info.nightscout.androidaps.utils.ui.UIRunnable
|
2020-04-01 21:10:48 +02:00
|
|
|
import io.reactivex.disposables.CompositeDisposable
|
2020-05-04 01:27:47 +02:00
|
|
|
import java.util.*
|
2020-04-01 21:10:48 +02:00
|
|
|
import javax.inject.Inject
|
|
|
|
import kotlin.system.exitProcess
|
|
|
|
|
|
|
|
class MainActivity : NoSplashAppCompatActivity() {
|
2020-12-06 13:19:53 +01:00
|
|
|
|
2020-04-01 21:10:48 +02:00
|
|
|
private val disposable = CompositeDisposable()
|
|
|
|
|
|
|
|
@Inject lateinit var aapsLogger: AAPSLogger
|
2021-02-04 20:54:09 +01:00
|
|
|
@Inject lateinit var aapsSchedulers: AapsSchedulers
|
2020-04-01 21:10:48 +02:00
|
|
|
@Inject lateinit var rxBus: RxBusWrapper
|
|
|
|
@Inject lateinit var androidPermission: AndroidPermission
|
|
|
|
@Inject lateinit var sp: SP
|
|
|
|
@Inject lateinit var versionCheckerUtils: VersionCheckerUtils
|
|
|
|
@Inject lateinit var smsCommunicatorPlugin: SmsCommunicatorPlugin
|
|
|
|
@Inject lateinit var loopPlugin: LoopPlugin
|
|
|
|
@Inject lateinit var nsSettingsStatus: NSSettingsStatus
|
|
|
|
@Inject lateinit var buildHelper: BuildHelper
|
|
|
|
@Inject lateinit var activePlugin: ActivePluginProvider
|
|
|
|
@Inject lateinit var fabricPrivacy: FabricPrivacy
|
|
|
|
@Inject lateinit var protectionCheck: ProtectionCheck
|
2020-05-03 17:50:33 +02:00
|
|
|
@Inject lateinit var iconsProvider: IconsProvider
|
2020-05-04 01:27:47 +02:00
|
|
|
@Inject lateinit var constraintChecker: ConstraintChecker
|
|
|
|
@Inject lateinit var signatureVerifierPlugin: SignatureVerifierPlugin
|
2020-05-07 09:54:36 +02:00
|
|
|
@Inject lateinit var config: Config
|
2021-04-10 11:35:38 +02:00
|
|
|
@Inject lateinit var uel: UserEntryLogger
|
2020-04-01 21:10:48 +02:00
|
|
|
|
|
|
|
private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle
|
|
|
|
private var pluginPreferencesMenuItem: MenuItem? = null
|
2020-12-17 15:49:47 +01:00
|
|
|
private var menu: Menu? = null
|
2020-04-01 21:10:48 +02:00
|
|
|
|
2021-01-22 11:34:28 +01:00
|
|
|
private lateinit var binding: ActivityMainBinding
|
|
|
|
|
2020-04-01 21:10:48 +02:00
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
Iconify.with(FontAwesomeModule())
|
2020-04-25 21:52:20 +02:00
|
|
|
LocaleHelper.update(applicationContext)
|
2021-01-22 11:34:28 +01:00
|
|
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
|
|
|
setContentView(binding.root)
|
|
|
|
setSupportActionBar(binding.toolbar)
|
2020-04-01 21:10:48 +02:00
|
|
|
supportActionBar?.setDisplayShowTitleEnabled(false)
|
|
|
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
|
|
|
supportActionBar?.setHomeButtonEnabled(true)
|
2021-01-22 11:34:28 +01:00
|
|
|
actionBarDrawerToggle = ActionBarDrawerToggle(this, binding.mainDrawerLayout, R.string.open_navigation, R.string.close_navigation).also {
|
|
|
|
binding.mainDrawerLayout.addDrawerListener(it)
|
2020-04-01 21:10:48 +02:00
|
|
|
it.syncState()
|
|
|
|
}
|
|
|
|
|
|
|
|
// initialize screen wake lock
|
|
|
|
processPreferenceChange(EventPreferenceChange(resourceHelper.gs(R.string.key_keep_screen_on)))
|
2021-01-22 11:34:28 +01:00
|
|
|
binding.mainPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
|
2020-04-25 21:52:20 +02:00
|
|
|
override fun onPageScrollStateChanged(state: Int) {}
|
2020-04-01 21:10:48 +02:00
|
|
|
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
|
|
|
|
override fun onPageSelected(position: Int) {
|
2020-12-17 15:49:47 +01:00
|
|
|
setPluginPreferenceMenuName()
|
2021-01-22 11:34:28 +01:00
|
|
|
checkPluginPreferences(binding.mainPager)
|
2020-04-01 21:10:48 +02:00
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
//Check here if loop plugin is disabled. Else check via constraints
|
|
|
|
if (!loopPlugin.isEnabled(PluginType.LOOP)) versionCheckerUtils.triggerCheckVersion()
|
2020-05-04 01:27:47 +02:00
|
|
|
setUserStats()
|
2020-04-01 21:10:48 +02:00
|
|
|
setupViews()
|
|
|
|
disposable.add(rxBus
|
|
|
|
.toObservable(EventRebuildTabs::class.java)
|
2021-02-04 20:54:09 +01:00
|
|
|
.observeOn(aapsSchedulers.main)
|
2020-04-01 21:10:48 +02:00
|
|
|
.subscribe({
|
|
|
|
if (it.recreate) recreate()
|
2020-04-25 21:52:20 +02:00
|
|
|
else setupViews()
|
2020-04-01 21:10:48 +02:00
|
|
|
setWakeLock()
|
2020-12-06 13:19:53 +01:00
|
|
|
}, fabricPrivacy::logException)
|
2020-04-01 21:10:48 +02:00
|
|
|
)
|
|
|
|
disposable.add(rxBus
|
|
|
|
.toObservable(EventPreferenceChange::class.java)
|
2021-02-04 20:54:09 +01:00
|
|
|
.observeOn(aapsSchedulers.main)
|
2020-12-06 13:19:53 +01:00
|
|
|
.subscribe({ processPreferenceChange(it) }, fabricPrivacy::logException)
|
2020-04-01 21:10:48 +02:00
|
|
|
)
|
2021-02-21 12:30:45 +01:00
|
|
|
if (startWizard() && !isRunningRealPumpTest()) {
|
2020-12-06 13:19:53 +01:00
|
|
|
protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, {
|
|
|
|
startActivity(Intent(this, SetupWizardActivity::class.java))
|
|
|
|
})
|
2020-04-01 21:10:48 +02:00
|
|
|
}
|
|
|
|
androidPermission.notifyForStoragePermission(this)
|
|
|
|
androidPermission.notifyForBatteryOptimizationPermission(this)
|
2020-07-02 22:45:47 +02:00
|
|
|
androidPermission.notifyForLocationPermissions(this)
|
2020-05-07 09:54:36 +02:00
|
|
|
if (config.PUMPDRIVERS) {
|
2020-04-01 21:10:48 +02:00
|
|
|
androidPermission.notifyForSMSPermissions(this, smsCommunicatorPlugin)
|
|
|
|
androidPermission.notifyForSystemWindowPermissions(this)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-04-25 21:52:20 +02:00
|
|
|
private fun checkPluginPreferences(viewPager: ViewPager2) {
|
2020-08-01 19:14:38 +02:00
|
|
|
if (viewPager.currentItem >= 0) pluginPreferencesMenuItem?.isEnabled = (viewPager.adapter as TabPageAdapter).getPluginAt(viewPager.currentItem).preferencesId != -1
|
2020-04-01 21:10:48 +02:00
|
|
|
}
|
|
|
|
|
2021-02-21 12:30:45 +01:00
|
|
|
private fun startWizard() : Boolean =
|
|
|
|
!sp.getBoolean(R.string.key_setupwizard_processed, false)
|
|
|
|
|
2020-04-01 21:10:48 +02:00
|
|
|
override fun onPostCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
|
|
|
|
super.onPostCreate(savedInstanceState, persistentState)
|
|
|
|
actionBarDrawerToggle.syncState()
|
|
|
|
}
|
|
|
|
|
|
|
|
public override fun onDestroy() {
|
|
|
|
super.onDestroy()
|
|
|
|
disposable.clear()
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onResume() {
|
|
|
|
super.onResume()
|
2020-04-20 01:18:10 +02:00
|
|
|
protectionCheck.queryProtection(this, ProtectionCheck.Protection.APPLICATION, null,
|
2020-12-04 17:55:35 +01:00
|
|
|
UIRunnable { OKDialog.show(this, "", resourceHelper.gs(R.string.authorizationfailed)) { finish() } },
|
|
|
|
UIRunnable { OKDialog.show(this, "", resourceHelper.gs(R.string.authorizationfailed)) { finish() } }
|
2020-05-05 22:42:16 +02:00
|
|
|
)
|
2020-04-01 21:10:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private fun setWakeLock() {
|
|
|
|
val keepScreenOn = sp.getBoolean(R.string.key_keep_screen_on, false)
|
|
|
|
if (keepScreenOn) window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) else window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun processPreferenceChange(ev: EventPreferenceChange) {
|
|
|
|
if (ev.isChanged(resourceHelper, R.string.key_keep_screen_on)) setWakeLock()
|
2020-05-31 12:02:42 +02:00
|
|
|
if (ev.isChanged(resourceHelper, R.string.key_skin)) recreate()
|
2020-04-01 21:10:48 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
private fun setupViews() {
|
2020-04-25 21:52:20 +02:00
|
|
|
// Menu
|
|
|
|
val pageAdapter = TabPageAdapter(this)
|
2021-01-22 11:34:28 +01:00
|
|
|
binding.mainNavigationView.setNavigationItemSelectedListener { true }
|
|
|
|
val menu = binding.mainNavigationView.menu.also { it.clear() }
|
2020-12-04 17:55:35 +01:00
|
|
|
for (p in activePlugin.getPluginsList()) {
|
2020-04-01 21:10:48 +02:00
|
|
|
pageAdapter.registerNewFragment(p)
|
2020-04-25 21:52:20 +02:00
|
|
|
if (p.isEnabled() && p.hasFragment() && !p.isFragmentVisible() && !p.pluginDescription.neverVisible) {
|
2020-04-01 21:10:48 +02:00
|
|
|
val menuItem = menu.add(p.name)
|
|
|
|
menuItem.isCheckable = true
|
2021-01-18 17:36:18 +01:00
|
|
|
if (p.menuIcon != -1) {
|
2020-12-17 13:59:06 +01:00
|
|
|
menuItem.setIcon(p.menuIcon)
|
2021-01-18 17:36:18 +01:00
|
|
|
} else {
|
2020-12-17 13:59:06 +01:00
|
|
|
menuItem.setIcon(R.drawable.ic_settings)
|
|
|
|
}
|
2020-04-01 21:10:48 +02:00
|
|
|
menuItem.setOnMenuItemClickListener {
|
|
|
|
val intent = Intent(this, SingleFragmentActivity::class.java)
|
2020-12-04 17:55:35 +01:00
|
|
|
intent.putExtra("plugin", activePlugin.getPluginsList().indexOf(p))
|
2020-04-01 21:10:48 +02:00
|
|
|
startActivity(intent)
|
2021-01-22 11:34:28 +01:00
|
|
|
binding.mainDrawerLayout.closeDrawers()
|
2020-04-01 21:10:48 +02:00
|
|
|
true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-01-22 11:34:28 +01:00
|
|
|
binding.mainPager.adapter = pageAdapter
|
|
|
|
binding.mainPager.offscreenPageLimit = 8 // This may cause more memory consumption
|
|
|
|
checkPluginPreferences(binding.mainPager)
|
2020-04-01 21:10:48 +02:00
|
|
|
|
2020-04-25 21:52:20 +02:00
|
|
|
// Tabs
|
2020-04-01 21:10:48 +02:00
|
|
|
if (sp.getBoolean(R.string.key_short_tabtitles, false)) {
|
2021-01-22 11:34:28 +01:00
|
|
|
binding.tabsNormal.visibility = View.GONE
|
|
|
|
binding.tabsCompact.visibility = View.VISIBLE
|
|
|
|
binding.toolbar.layoutParams = LinearLayout.LayoutParams(Toolbar.LayoutParams.MATCH_PARENT, resources.getDimension(R.dimen.compact_height).toInt())
|
|
|
|
TabLayoutMediator(binding.tabsCompact, binding.mainPager) { tab, position ->
|
|
|
|
tab.text = (binding.mainPager.adapter as TabPageAdapter).getPluginAt(position).nameShort
|
2020-04-25 21:52:20 +02:00
|
|
|
}.attach()
|
2020-04-01 21:10:48 +02:00
|
|
|
} else {
|
2021-01-22 11:34:28 +01:00
|
|
|
binding.tabsNormal.visibility = View.VISIBLE
|
|
|
|
binding.tabsCompact.visibility = View.GONE
|
2020-04-01 21:10:48 +02:00
|
|
|
val typedValue = TypedValue()
|
|
|
|
if (theme.resolveAttribute(R.attr.actionBarSize, typedValue, true)) {
|
2021-01-22 11:34:28 +01:00
|
|
|
binding.toolbar.layoutParams = LinearLayout.LayoutParams(Toolbar.LayoutParams.MATCH_PARENT,
|
2020-04-01 21:10:48 +02:00
|
|
|
TypedValue.complexToDimensionPixelSize(typedValue.data, resources.displayMetrics))
|
|
|
|
}
|
2021-01-22 11:34:28 +01:00
|
|
|
TabLayoutMediator(binding.tabsNormal, binding.mainPager) { tab, position ->
|
|
|
|
tab.text = (binding.mainPager.adapter as TabPageAdapter).getPluginAt(position).name
|
2020-04-25 21:52:20 +02:00
|
|
|
}.attach()
|
2020-04-01 21:10:48 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun dispatchTouchEvent(event: MotionEvent): Boolean {
|
|
|
|
if (event.action == MotionEvent.ACTION_DOWN) {
|
|
|
|
val v = currentFocus
|
|
|
|
if (v is EditText) {
|
|
|
|
val outRect = Rect()
|
|
|
|
v.getGlobalVisibleRect(outRect)
|
|
|
|
if (!outRect.contains(event.rawX.toInt(), event.rawY.toInt())) {
|
|
|
|
v.clearFocus()
|
|
|
|
val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
|
|
|
imm.hideSoftInputFromWindow(v.getWindowToken(), 0)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return super.dispatchTouchEvent(event)
|
|
|
|
}
|
|
|
|
|
2020-12-17 15:49:47 +01:00
|
|
|
private fun setPluginPreferenceMenuName() {
|
2021-01-22 11:34:28 +01:00
|
|
|
if (binding.mainPager.currentItem >= 0) {
|
|
|
|
val plugin = (binding.mainPager.adapter as TabPageAdapter).getPluginAt(binding.mainPager.currentItem)
|
2021-01-07 11:16:41 +01:00
|
|
|
this.menu?.findItem(R.id.nav_plugin_preferences)?.title = resourceHelper.gs(R.string.nav_preferences_plugin, plugin.name)
|
|
|
|
}
|
2020-12-17 15:49:47 +01:00
|
|
|
}
|
|
|
|
|
2020-04-01 21:10:48 +02:00
|
|
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
2021-01-18 17:36:18 +01:00
|
|
|
this.menu = menu
|
2020-04-01 21:10:48 +02:00
|
|
|
menuInflater.inflate(R.menu.menu_main, menu)
|
|
|
|
pluginPreferencesMenuItem = menu.findItem(R.id.nav_plugin_preferences)
|
2020-12-17 15:49:47 +01:00
|
|
|
setPluginPreferenceMenuName()
|
2021-01-22 11:34:28 +01:00
|
|
|
checkPluginPreferences(binding.mainPager)
|
2020-04-01 21:10:48 +02:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
|
when (item.itemId) {
|
2020-12-06 13:19:53 +01:00
|
|
|
R.id.nav_preferences -> {
|
2020-12-04 17:55:35 +01:00
|
|
|
protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, {
|
2020-04-01 21:10:48 +02:00
|
|
|
val i = Intent(this, PreferencesActivity::class.java)
|
|
|
|
i.putExtra("id", -1)
|
|
|
|
startActivity(i)
|
|
|
|
})
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2020-12-06 13:19:53 +01:00
|
|
|
R.id.nav_historybrowser -> {
|
2020-04-01 21:10:48 +02:00
|
|
|
startActivity(Intent(this, HistoryBrowseActivity::class.java))
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2020-12-06 13:19:53 +01:00
|
|
|
R.id.nav_setupwizard -> {
|
|
|
|
protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, {
|
|
|
|
startActivity(Intent(this, SetupWizardActivity::class.java))
|
|
|
|
})
|
2020-04-01 21:10:48 +02:00
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2020-12-06 13:19:53 +01:00
|
|
|
R.id.nav_about -> {
|
2020-04-01 21:10:48 +02:00
|
|
|
var message = "Build: ${BuildConfig.BUILDVERSION}\n"
|
|
|
|
message += "Flavor: ${BuildConfig.FLAVOR}${BuildConfig.BUILD_TYPE}\n"
|
2021-03-20 14:51:10 +01:00
|
|
|
message += "${resourceHelper.gs(R.string.configbuilder_nightscoutversion_label)} ${nsSettingsStatus.getVersion()}"
|
2020-04-01 21:10:48 +02:00
|
|
|
if (buildHelper.isEngineeringMode()) message += "\n${resourceHelper.gs(R.string.engineering_mode_enabled)}"
|
2021-01-08 18:55:01 +01:00
|
|
|
if (!fabricPrivacy.fabricEnabled()) message += "\n${resourceHelper.gs(R.string.fabric_upload_disabled)}"
|
2020-04-01 21:10:48 +02:00
|
|
|
message += resourceHelper.gs(R.string.about_link_urls)
|
|
|
|
val messageSpanned = SpannableString(message)
|
|
|
|
Linkify.addLinks(messageSpanned, Linkify.WEB_URLS)
|
|
|
|
AlertDialog.Builder(this)
|
|
|
|
.setTitle(resourceHelper.gs(R.string.app_name) + " " + BuildConfig.VERSION)
|
2020-05-03 17:50:33 +02:00
|
|
|
.setIcon(iconsProvider.getIcon())
|
2020-04-01 21:10:48 +02:00
|
|
|
.setMessage(messageSpanned)
|
|
|
|
.setPositiveButton(resourceHelper.gs(R.string.ok), null)
|
2020-11-28 17:26:03 +01:00
|
|
|
.setNeutralButton(resourceHelper.gs(R.string.cta_dont_kill_my_app_info)) { _, _ -> DokiActivity.start(context = this@MainActivity) }
|
|
|
|
.create().apply {
|
|
|
|
show()
|
|
|
|
findViewById<TextView>(android.R.id.message)?.movementMethod = LinkMovementMethod.getInstance()
|
2020-04-01 21:10:48 +02:00
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2020-12-06 13:19:53 +01:00
|
|
|
R.id.nav_exit -> {
|
2020-04-01 21:10:48 +02:00
|
|
|
aapsLogger.debug(LTag.CORE, "Exiting")
|
2021-04-10 11:35:38 +02:00
|
|
|
uel.log(Action.EXIT_AAPS, Sources.Aaps)
|
2020-04-01 21:10:48 +02:00
|
|
|
rxBus.send(EventAppExit())
|
|
|
|
finish()
|
|
|
|
System.runFinalization()
|
|
|
|
exitProcess(0)
|
|
|
|
}
|
|
|
|
|
|
|
|
R.id.nav_plugin_preferences -> {
|
2021-01-22 11:34:28 +01:00
|
|
|
val plugin = (binding.mainPager.adapter as TabPageAdapter).getPluginAt(binding.mainPager.currentItem)
|
2020-12-04 17:55:35 +01:00
|
|
|
protectionCheck.queryProtection(this, ProtectionCheck.Protection.PREFERENCES, {
|
2020-04-01 21:10:48 +02:00
|
|
|
val i = Intent(this, PreferencesActivity::class.java)
|
|
|
|
i.putExtra("id", plugin.preferencesId)
|
|
|
|
startActivity(i)
|
|
|
|
})
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
/*
|
|
|
|
R.id.nav_survey -> {
|
|
|
|
startActivity(Intent(this, SurveyActivity::class.java))
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
*/
|
2020-12-06 13:19:53 +01:00
|
|
|
R.id.nav_defaultprofile -> {
|
2020-07-06 21:14:00 +02:00
|
|
|
startActivity(Intent(this, ProfileHelperActivity::class.java))
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2020-12-06 13:19:53 +01:00
|
|
|
R.id.nav_stats -> {
|
2020-04-01 21:10:48 +02:00
|
|
|
startActivity(Intent(this, StatsActivity::class.java))
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return actionBarDrawerToggle.onOptionsItemSelected(item)
|
|
|
|
}
|
2020-05-04 01:27:47 +02:00
|
|
|
|
|
|
|
// Correct place for calling setUserStats() would be probably MainApp
|
|
|
|
// but we need to have it called at least once a day. Thus this location
|
|
|
|
|
|
|
|
private fun setUserStats() {
|
|
|
|
if (!fabricPrivacy.fabricEnabled()) return
|
|
|
|
val closedLoopEnabled = if (constraintChecker.isClosedLoopAllowed().value()) "CLOSED_LOOP_ENABLED" else "CLOSED_LOOP_DISABLED"
|
|
|
|
// Size is limited to 36 chars
|
|
|
|
val remote = BuildConfig.REMOTE.toLowerCase(Locale.getDefault())
|
|
|
|
.replace("https://", "")
|
|
|
|
.replace("http://", "")
|
|
|
|
.replace(".git", "")
|
|
|
|
.replace(".com/", ":")
|
|
|
|
.replace(".org/", ":")
|
|
|
|
.replace(".net/", ":")
|
|
|
|
fabricPrivacy.firebaseAnalytics.setUserProperty("Mode", BuildConfig.APPLICATION_ID + "-" + closedLoopEnabled)
|
|
|
|
fabricPrivacy.firebaseAnalytics.setUserProperty("Language", sp.getString(R.string.key_language, Locale.getDefault().language))
|
|
|
|
fabricPrivacy.firebaseAnalytics.setUserProperty("Version", BuildConfig.VERSION)
|
|
|
|
fabricPrivacy.firebaseAnalytics.setUserProperty("HEAD", BuildConfig.HEAD)
|
|
|
|
fabricPrivacy.firebaseAnalytics.setUserProperty("Remote", remote)
|
|
|
|
val hashes: List<String> = signatureVerifierPlugin.shortHashes()
|
|
|
|
if (hashes.isNotEmpty()) fabricPrivacy.firebaseAnalytics.setUserProperty("Hash", hashes[0])
|
|
|
|
activePlugin.activePump.let { fabricPrivacy.firebaseAnalytics.setUserProperty("Pump", it::class.java.simpleName) }
|
2020-05-07 09:54:36 +02:00
|
|
|
if (!config.NSCLIENT && !config.PUMPCONTROL)
|
2020-05-04 01:27:47 +02:00
|
|
|
activePlugin.activeAPS.let { fabricPrivacy.firebaseAnalytics.setUserProperty("Aps", it::class.java.simpleName) }
|
|
|
|
activePlugin.activeBgSource.let { fabricPrivacy.firebaseAnalytics.setUserProperty("BgSource", it::class.java.simpleName) }
|
|
|
|
fabricPrivacy.firebaseAnalytics.setUserProperty("Profile", activePlugin.activeProfileInterface.javaClass.simpleName)
|
|
|
|
activePlugin.activeSensitivity.let { fabricPrivacy.firebaseAnalytics.setUserProperty("Sensitivity", it::class.java.simpleName) }
|
|
|
|
activePlugin.activeInsulin.let { fabricPrivacy.firebaseAnalytics.setUserProperty("Insulin", it::class.java.simpleName) }
|
2021-01-08 18:55:01 +01:00
|
|
|
// Add to crash log too
|
|
|
|
FirebaseCrashlytics.getInstance().setCustomKey("HEAD", BuildConfig.HEAD)
|
|
|
|
FirebaseCrashlytics.getInstance().setCustomKey("Version", BuildConfig.VERSION)
|
|
|
|
FirebaseCrashlytics.getInstance().setCustomKey("Remote", remote)
|
2021-01-22 11:34:28 +01:00
|
|
|
FirebaseCrashlytics.getInstance().setCustomKey("Committed", BuildConfig.COMMITTED)
|
2021-01-08 18:55:01 +01:00
|
|
|
FirebaseCrashlytics.getInstance().setCustomKey("Hash", hashes[0])
|
2021-02-21 12:30:45 +01:00
|
|
|
FirebaseCrashlytics.getInstance().setCustomKey("Email", sp.getString(R.string.key_email_for_crash_report, ""))
|
2020-05-04 01:27:47 +02:00
|
|
|
}
|
|
|
|
|
2021-01-20 09:51:31 +01:00
|
|
|
}
|