mirror of
https://github.com/home-assistant/android
synced 2024-07-24 03:44:23 +00:00
Replace deprecated menu functions with MenuProvider (#3776)
* Squash merge Migrate to MenuProvider (#2974) by @NotWoods * Merge fixes * Update sensor detail fragment menu for multiserver * Menu fixes/additions - Add HelpMenuProvider to Android Auto favorites - Fix notification history fragment having no view because of missing super call - Fix crash in device controls view if a server that is offline is selected * ktlint * Simplify some code - Undo formatting change in SettingsActivity - Don't require each activity to convert the string to URIs if we can do it in one place * Remove setHasOptionsMenu(false) usage
This commit is contained in:
parent
01326db427
commit
f722de9561
|
@ -5,9 +5,9 @@ import android.content.Intent
|
|||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.isInvisible
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.lifecycle.Lifecycle
|
||||
|
@ -19,8 +19,8 @@ import com.google.android.gms.wearable.CapabilityInfo
|
|||
import com.google.android.gms.wearable.Node
|
||||
import com.google.android.gms.wearable.NodeClient
|
||||
import com.google.android.gms.wearable.Wearable
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.databinding.ActivitySettingsWearBinding
|
||||
import io.homeassistant.companion.android.settings.HelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.wear.views.SettingsWearMainView
|
||||
import kotlinx.coroutines.CancellationException
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
|
@ -41,19 +41,6 @@ class SettingsWearActivity : AppCompatActivity(), CapabilityClient.OnCapabilityC
|
|||
private var wearNodesWithApp: Set<Node>? = null
|
||||
private var allConnectedNodes: List<Node>? = null
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.menu_activity_settings_wear, menu)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
|
||||
menu?.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/wear-os"))
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
|
@ -70,6 +57,8 @@ class SettingsWearActivity : AppCompatActivity(), CapabilityClient.OnCapabilityC
|
|||
openPlayStoreOnWearDevicesWithoutApp()
|
||||
}
|
||||
|
||||
addMenuProvider(HelpMenuProvider("https://companion.home-assistant.io/docs/wear-os/wear-os".toUri()))
|
||||
|
||||
// Perform the initial update of the UI
|
||||
updateUI()
|
||||
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package io.homeassistant.companion.android.settings
|
||||
|
||||
import android.content.Intent
|
||||
import android.content.Intent.ACTION_VIEW
|
||||
import android.net.Uri
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.MenuHost
|
||||
import androidx.core.view.MenuProvider
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import io.homeassistant.companion.android.R
|
||||
|
||||
/**
|
||||
* Adds a "Get Help" menu option that opens the given [helpLink] in the browser.
|
||||
*/
|
||||
class HelpMenuProvider(private val helpLink: Uri) : MenuProvider {
|
||||
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||
menuInflater.inflate(R.menu.menu_help, menu)
|
||||
}
|
||||
|
||||
override fun onPrepareMenu(menu: Menu) {
|
||||
menu.findItem(R.id.get_help).apply {
|
||||
intent = Intent(ACTION_VIEW, helpLink)
|
||||
}
|
||||
}
|
||||
|
||||
// Don't handle the help item so the intent is automatically launched
|
||||
override fun onMenuItemSelected(menuItem: MenuItem) = false
|
||||
}
|
||||
|
||||
/**
|
||||
* Wrapper around [MenuHost.addMenuProvider] to attach a [HelpMenuProvider] to a fragment's parent activity.
|
||||
*/
|
||||
fun Fragment.addHelpMenuProvider(helpLink: String) {
|
||||
val menuHost: MenuHost = requireActivity()
|
||||
menuHost.addMenuProvider(HelpMenuProvider(helpLink.toUri()), viewLifecycleOwner, Lifecycle.State.RESUMED)
|
||||
}
|
|
@ -4,10 +4,8 @@ import android.content.Context
|
|||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.biometric.BiometricManager
|
||||
import androidx.fragment.app.commit
|
||||
import dagger.hilt.EntryPoint
|
||||
|
@ -50,17 +48,6 @@ class SettingsActivity : BaseActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
||||
menuInflater.inflate(R.menu.menu_activity_settings, menu)
|
||||
|
||||
(menu.findItem(R.id.action_search)?.actionView as SearchView).apply {
|
||||
queryHint = getString(commonR.string.search_sensors)
|
||||
maxWidth = Integer.MAX_VALUE
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
val entryPoint = EntryPointAccessors.fromActivity(this, SettingsFragmentFactoryEntryPoint::class.java)
|
||||
supportFragmentManager.fragmentFactory = entryPoint.getSettingsFragmentFactory()
|
||||
|
@ -93,6 +80,7 @@ class SettingsActivity : BaseActivity() {
|
|||
} else {
|
||||
SettingsFragment::class.java
|
||||
}
|
||||
|
||||
settingsNavigation == "notification_history" -> NotificationHistoryFragment::class.java
|
||||
settingsNavigation?.startsWith("sensors/") == true -> SensorDetailFragment::class.java
|
||||
settingsNavigation?.startsWith("tiles/") == true -> ManageTilesFragment::class.java
|
||||
|
@ -240,6 +228,7 @@ class SettingsActivity : BaseActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
/** Used to inject classes before [onCreate] */
|
||||
@EntryPoint
|
||||
@InstallIn(ActivityComponent::class)
|
||||
interface SettingsFragmentFactoryEntryPoint {
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
package io.homeassistant.companion.android.settings.controls
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.RequiresApi
|
||||
|
@ -14,9 +11,9 @@ import androidx.fragment.app.Fragment
|
|||
import androidx.fragment.app.viewModels
|
||||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.data.integration.ControlsAuthRequiredSetting
|
||||
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
||||
import io.homeassistant.companion.android.settings.addHelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.controls.views.ManageControlsView
|
||||
import javax.inject.Inject
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
@ -30,21 +27,6 @@ class ManageControlsSettingsFragment : Fragment() {
|
|||
|
||||
val viewModel: ManageControlsViewModel by viewModels()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/integrations/android-device-controls"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -69,6 +51,10 @@ class ManageControlsSettingsFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
addHelpMenuProvider("https://companion.home-assistant.io/docs/integrations/android-device-controls")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.title = getString(commonR.string.controls_setting_title)
|
||||
|
|
|
@ -87,7 +87,7 @@ fun ManageControlsView(
|
|||
)
|
||||
}
|
||||
}
|
||||
items(entitiesList[selectedServer]!!.size, key = { "$selectedServer.${entitiesList[selectedServer]?.get(it)?.entityId}" }) { index ->
|
||||
items(entitiesList[selectedServer]?.size ?: 0, key = { "$selectedServer.${entitiesList[selectedServer]?.get(it)?.entityId}" }) { index ->
|
||||
val entity = entitiesList[selectedServer]?.get(index) as Entity<Map<String, Any>>
|
||||
ManageControlsEntity(
|
||||
entityName = (
|
||||
|
|
|
@ -8,6 +8,8 @@ import android.os.Build
|
|||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
@ -16,11 +18,13 @@ import android.widget.ScrollView
|
|||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.core.content.FileProvider
|
||||
import androidx.core.view.MenuHost
|
||||
import androidx.core.view.MenuProvider
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.google.android.material.tabs.TabLayout
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
@ -49,33 +53,45 @@ class LogFragment : Fragment() {
|
|||
private var crashLog: String? = null
|
||||
private var currentLog = ""
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.share_log -> {
|
||||
shareLog()
|
||||
return true
|
||||
}
|
||||
R.id.refresh_log -> {
|
||||
refreshLog()
|
||||
}
|
||||
private var toolbarGroupVisible = false
|
||||
set(value) {
|
||||
field = value
|
||||
activity?.invalidateMenu()
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val menuHost: MenuHost = requireActivity()
|
||||
menuHost.addMenuProvider(
|
||||
object : MenuProvider {
|
||||
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||
menuInflater.inflate(R.menu.menu_fragment_log, menu)
|
||||
}
|
||||
|
||||
setHasOptionsMenu(true)
|
||||
override fun onPrepareMenu(menu: Menu) {
|
||||
menu.setGroupVisible(R.id.log_toolbar_group, toolbarGroupVisible)
|
||||
}
|
||||
|
||||
override fun onMenuItemSelected(menuItem: MenuItem) = when (menuItem.itemId) {
|
||||
R.id.share_log -> {
|
||||
shareLog()
|
||||
true
|
||||
}
|
||||
R.id.refresh_log -> {
|
||||
refreshLog()
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
},
|
||||
viewLifecycleOwner,
|
||||
Lifecycle.State.RESUMED
|
||||
)
|
||||
|
||||
requireView().findViewById<TabLayout>(R.id.logTabLayout)
|
||||
.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
|
||||
override fun onTabSelected(tab: TabLayout.Tab?) {
|
||||
showLog()
|
||||
}
|
||||
override fun onTabSelected(tab: TabLayout.Tab?) = showLog()
|
||||
|
||||
override fun onTabUnselected(tab: TabLayout.Tab?) {
|
||||
}
|
||||
override fun onTabUnselected(tab: TabLayout.Tab?) {}
|
||||
|
||||
override fun onTabReselected(tab: TabLayout.Tab?) {
|
||||
(requireView().findViewById<ScrollView>(R.id.logScrollview))?.apply {
|
||||
|
@ -95,9 +111,6 @@ class LogFragment : Fragment() {
|
|||
|
||||
private fun refreshLog() = lifecycleScope.launch(Dispatchers.Main) {
|
||||
if (view != null && activity != null) {
|
||||
val toolbar = requireActivity().findViewById<Toolbar>(R.id.toolbar)
|
||||
|
||||
toolbar.menu.setGroupVisible(R.id.log_toolbar_group, false)
|
||||
showHideLogLoader(true)
|
||||
|
||||
// Runs with Dispatcher IO
|
||||
|
@ -105,7 +118,6 @@ class LogFragment : Fragment() {
|
|||
crashLog = getLatestFatalCrash(requireContext(), prefsRepository.isCrashReporting())
|
||||
|
||||
showLog()
|
||||
toolbar.menu.setGroupVisible(R.id.log_toolbar_group, true)
|
||||
showHideLogLoader(false)
|
||||
}
|
||||
}
|
||||
|
@ -227,6 +239,7 @@ class LogFragment : Fragment() {
|
|||
}
|
||||
|
||||
private fun showHideLogLoader(show: Boolean) {
|
||||
toolbarGroupVisible = !show
|
||||
if (view != null) {
|
||||
val logLoader = requireView().findViewById<LinearLayout>(R.id.logLoader)
|
||||
val logContents = requireView().findViewById<LinearLayout>(R.id.logContents)
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
package io.homeassistant.companion.android.settings.notification
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.RequiresApi
|
||||
|
@ -14,7 +11,7 @@ import androidx.fragment.app.Fragment
|
|||
import androidx.fragment.app.viewModels
|
||||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.settings.addHelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.notification.views.NotificationChannelView
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
||||
|
@ -23,21 +20,6 @@ class NotificationChannelFragment : Fragment() {
|
|||
|
||||
val viewModel: NotificationViewModel by viewModels()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/notifications/notifications-basic#notification-channels"))
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
|
@ -53,6 +35,10 @@ class NotificationChannelFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
addHelpMenuProvider("https://companion.home-assistant.io/docs/notifications/notifications-basic#notification-channels")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.title = getString(commonR.string.notification_channels)
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
package io.homeassistant.companion.android.settings.notification
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
|
@ -10,7 +8,9 @@ import android.view.MenuItem
|
|||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.core.view.MenuHost
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
|
@ -42,28 +42,6 @@ class NotificationDetailFragment : Fragment() {
|
|||
arguments?.get(ARG_NOTIF) as? NotificationItem
|
||||
} ?: return
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
menu.setGroupVisible(R.id.notification_toolbar_group, true)
|
||||
menu.removeItem(R.id.search_notifications)
|
||||
menu.removeItem(R.id.notification_filter)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/notifications/notifications-basic"))
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
if (item.itemId == R.id.action_delete) {
|
||||
deleteConfirmation()
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
|
@ -80,6 +58,29 @@ class NotificationDetailFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
val menuHost: MenuHost = requireActivity()
|
||||
menuHost.addMenuProvider(
|
||||
object : NotificationMenuProvider() {
|
||||
override fun onPrepareMenu(menu: Menu) {
|
||||
super.onPrepareMenu(menu)
|
||||
menu.removeItem(R.id.search_notifications)
|
||||
menu.removeItem(R.id.notification_filter)
|
||||
}
|
||||
|
||||
override fun onMenuItemSelected(menuItem: MenuItem) = when (menuItem.itemId) {
|
||||
R.id.action_delete -> {
|
||||
deleteConfirmation()
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
},
|
||||
viewLifecycleOwner,
|
||||
Lifecycle.State.RESUMED
|
||||
)
|
||||
}
|
||||
|
||||
private fun deleteConfirmation() {
|
||||
val builder: android.app.AlertDialog.Builder = android.app.AlertDialog.Builder(requireContext())
|
||||
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
package io.homeassistant.companion.android.settings.notification
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.core.text.HtmlCompat
|
||||
import androidx.core.view.MenuHost
|
||||
import androidx.fragment.app.commit
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceCategory
|
||||
|
@ -26,84 +27,83 @@ import io.homeassistant.companion.android.common.R as commonR
|
|||
@AndroidEntryPoint
|
||||
class NotificationHistoryFragment : PreferenceFragmentCompat() {
|
||||
|
||||
companion object {
|
||||
private var filterValue = 25
|
||||
}
|
||||
private var filterValue = 25
|
||||
|
||||
@Inject
|
||||
lateinit var notificationDao: NotificationDao
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
menu.setGroupVisible(R.id.notification_toolbar_group, true)
|
||||
val menuHost: MenuHost = requireActivity()
|
||||
menuHost.addMenuProvider(
|
||||
object : NotificationMenuProvider() {
|
||||
override fun onPrepareMenu(menu: Menu) {
|
||||
super.onPrepareMenu(menu)
|
||||
menu.findItem(R.id.last25)?.title = getString(commonR.string.last_num_notifications, 25)
|
||||
menu.findItem(R.id.last50)?.title = getString(commonR.string.last_num_notifications, 50)
|
||||
menu.findItem(R.id.last100)?.title = getString(commonR.string.last_num_notifications, 100)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/notifications/notifications-basic"))
|
||||
}
|
||||
menu.findItem(R.id.last25)?.title = getString(commonR.string.last_num_notifications, 25)
|
||||
menu.findItem(R.id.last50)?.title = getString(commonR.string.last_num_notifications, 50)
|
||||
menu.findItem(R.id.last100)?.title = getString(commonR.string.last_num_notifications, 100)
|
||||
val prefCategory = findPreference<PreferenceCategory>("list_notifications")
|
||||
val allNotifications = notificationDao.getAll()
|
||||
|
||||
val prefCategory = findPreference<PreferenceCategory>("list_notifications")
|
||||
val allNotifications = notificationDao.getAll()
|
||||
if (allNotifications.isNullOrEmpty()) {
|
||||
menu.removeItem(R.id.search_notifications)
|
||||
menu.removeItem(R.id.notification_filter)
|
||||
menu.removeItem(R.id.action_delete)
|
||||
} else {
|
||||
val searchViewItem = menu.findItem(R.id.search_notifications)
|
||||
val searchView: SearchView = searchViewItem.actionView as SearchView
|
||||
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
||||
override fun onQueryTextSubmit(query: String?): Boolean {
|
||||
searchView.clearFocus()
|
||||
|
||||
if (allNotifications.isNullOrEmpty()) {
|
||||
menu.removeItem(R.id.search_notifications)
|
||||
menu.removeItem(R.id.notification_filter)
|
||||
menu.removeItem(R.id.action_delete)
|
||||
} else {
|
||||
val searchViewItem = menu.findItem(R.id.search_notifications)
|
||||
val searchView: SearchView = searchViewItem.actionView as SearchView
|
||||
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
||||
override fun onQueryTextSubmit(query: String?): Boolean {
|
||||
searchView.clearFocus()
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onQueryTextChange(query: String?): Boolean {
|
||||
var searchList: Array<NotificationItem> = emptyArray()
|
||||
if (!query.isNullOrEmpty()) {
|
||||
for (item in allNotifications) {
|
||||
if (item.message.contains(query, true)) {
|
||||
searchList += item
|
||||
return false
|
||||
}
|
||||
}
|
||||
prefCategory?.title = getString(commonR.string.search_results)
|
||||
reloadNotifications(searchList, prefCategory)
|
||||
} else if (query.isNullOrEmpty()) {
|
||||
prefCategory?.title = getString(commonR.string.notifications)
|
||||
filterNotifications(filterValue, notificationDao, prefCategory)
|
||||
}
|
||||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
val prefCategory = findPreference<PreferenceCategory>("list_notifications")
|
||||
if (item.itemId in listOf(R.id.last25, R.id.last50, R.id.last100)) {
|
||||
filterValue = when (item.itemId) {
|
||||
R.id.last25 -> 25
|
||||
R.id.last50 -> 50
|
||||
R.id.last100 -> 100
|
||||
else -> 25
|
||||
}
|
||||
item.isChecked = !item.isChecked
|
||||
filterNotifications(filterValue, notificationDao, prefCategory)
|
||||
} else if (item.itemId == R.id.action_delete) {
|
||||
deleteAllConfirmation(notificationDao)
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
override fun onQueryTextChange(query: String?): Boolean {
|
||||
var searchList: Array<NotificationItem> = emptyArray()
|
||||
if (!query.isNullOrEmpty()) {
|
||||
for (item in allNotifications) {
|
||||
if (item.message.contains(query, true)) {
|
||||
searchList += item
|
||||
}
|
||||
}
|
||||
prefCategory?.title = getString(commonR.string.search_results)
|
||||
reloadNotifications(searchList, prefCategory)
|
||||
} else if (query.isNullOrEmpty()) {
|
||||
prefCategory?.title = getString(commonR.string.notifications)
|
||||
filterNotifications(filterValue, notificationDao, prefCategory)
|
||||
}
|
||||
return false
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
override fun onMenuItemSelected(menuItem: MenuItem) = when (menuItem.itemId) {
|
||||
R.id.last25, R.id.last50, R.id.last100 -> {
|
||||
val prefCategory = findPreference<PreferenceCategory>("list_notifications")
|
||||
filterValue = when (menuItem.itemId) {
|
||||
R.id.last25 -> 25
|
||||
R.id.last50 -> 50
|
||||
R.id.last100 -> 100
|
||||
else -> 25
|
||||
}
|
||||
menuItem.isChecked = !menuItem.isChecked
|
||||
filterNotifications(filterValue, notificationDao, prefCategory)
|
||||
true
|
||||
}
|
||||
R.id.action_delete -> {
|
||||
deleteAllConfirmation(notificationDao)
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
},
|
||||
viewLifecycleOwner,
|
||||
Lifecycle.State.RESUMED
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
package io.homeassistant.companion.android.settings.notification
|
||||
|
||||
import android.content.Intent
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.MenuProvider
|
||||
import io.homeassistant.companion.android.R
|
||||
|
||||
abstract class NotificationMenuProvider : MenuProvider {
|
||||
final override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||
menuInflater.inflate(R.menu.menu_fragment_notification, menu)
|
||||
}
|
||||
|
||||
override fun onPrepareMenu(menu: Menu) {
|
||||
menu.findItem(R.id.get_help).apply {
|
||||
intent = Intent(Intent.ACTION_VIEW, "https://companion.home-assistant.io/docs/notifications/notifications-basic".toUri())
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +1,8 @@
|
|||
package io.homeassistant.companion.android.settings.qs
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.runtime.getValue
|
||||
|
@ -18,7 +15,7 @@ import androidx.fragment.app.viewModels
|
|||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import com.mikepenz.iconics.typeface.IIcon
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.settings.addHelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.qs.views.ManageTilesView
|
||||
import io.homeassistant.companion.android.util.icondialog.IconDialog
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
@ -36,21 +33,6 @@ class ManageTilesFragment : Fragment() {
|
|||
|
||||
val viewModel: ManageTilesViewModel by viewModels()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/integrations/android-quick-settings"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -82,6 +64,10 @@ class ManageTilesFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
addHelpMenuProvider("https://companion.home-assistant.io/docs/integrations/android-quick-settings")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.title = getString(commonR.string.tiles)
|
||||
|
|
|
@ -3,16 +3,19 @@ package io.homeassistant.companion.android.settings.sensor
|
|||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.appcompat.widget.Toolbar
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.MenuHost
|
||||
import androidx.core.view.MenuProvider
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
|
@ -49,49 +52,18 @@ class SensorDetailFragment : Fragment() {
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||
launch {
|
||||
viewModel.serversShowExpand.collect { updateSensorToolbarMenu() }
|
||||
viewModel.serversShowExpand.collect { activity?.invalidateMenu() }
|
||||
}
|
||||
launch {
|
||||
viewModel.serversDoExpand.collect { updateSensorToolbarMenu() }
|
||||
viewModel.serversDoExpand.collect { activity?.invalidateMenu() }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
menu.setGroupVisible(R.id.senor_detail_toolbar_group, true)
|
||||
menu.removeItem(R.id.action_filter)
|
||||
menu.removeItem(R.id.action_search)
|
||||
|
||||
menu.setGroupVisible(R.id.sensor_detail_server_group, true)
|
||||
menu.findItem(R.id.action_sensor_expand)?.let {
|
||||
it.setOnMenuItemClickListener {
|
||||
viewModel.setServersExpanded(true)
|
||||
true
|
||||
}
|
||||
}
|
||||
menu.findItem(R.id.action_sensor_collapse)?.let {
|
||||
it.setOnMenuItemClickListener {
|
||||
viewModel.setServersExpanded(false)
|
||||
true
|
||||
}
|
||||
}
|
||||
updateSensorToolbarMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
val docsLink = viewModel.basicSensor?.docsLink ?: viewModel.sensorManager?.docsLink()
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse(docsLink))
|
||||
it.isVisible = docsLink != null // should always be true
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -114,7 +86,40 @@ class SensorDetailFragment : Fragment() {
|
|||
|
||||
@SuppressLint("InlinedApi")
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
val menuHost: MenuHost = requireActivity()
|
||||
menuHost.addMenuProvider(
|
||||
object : MenuProvider {
|
||||
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||
menuInflater.inflate(R.menu.menu_fragment_sensordetail, menu)
|
||||
}
|
||||
|
||||
override fun onPrepareMenu(menu: Menu) {
|
||||
menu.findItem(R.id.action_sensor_expand)?.let {
|
||||
it.isVisible = viewModel.serversShowExpand.value && !viewModel.serversDoExpand.value
|
||||
}
|
||||
menu.findItem(R.id.action_sensor_collapse)?.let {
|
||||
it.isVisible = viewModel.serversShowExpand.value && viewModel.serversDoExpand.value
|
||||
}
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
val docsLink = viewModel.basicSensor?.docsLink ?: viewModel.sensorManager?.docsLink()
|
||||
it.isVisible = docsLink != null
|
||||
if (docsLink != null) {
|
||||
it.intent = Intent(Intent.ACTION_VIEW, docsLink.toUri())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onMenuItemSelected(menuItem: MenuItem) = when (menuItem.itemId) {
|
||||
R.id.action_sensor_expand, R.id.action_sensor_collapse -> {
|
||||
viewModel.setServersExpanded(menuItem.itemId == R.id.action_sensor_expand)
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
},
|
||||
viewLifecycleOwner,
|
||||
Lifecycle.State.RESUMED
|
||||
)
|
||||
|
||||
viewModel.permissionRequests.observe(viewLifecycleOwner) {
|
||||
if (it == null || it.permissions.isNullOrEmpty()) return@observe
|
||||
|
@ -162,20 +167,4 @@ class SensorDetailFragment : Fragment() {
|
|||
super.onResume()
|
||||
activity?.title = null
|
||||
}
|
||||
|
||||
private fun updateSensorToolbarMenu(menu: Menu? = null) {
|
||||
val group = if (menu != null) {
|
||||
menu
|
||||
} else {
|
||||
if (view == null || activity == null) return
|
||||
val toolbar = activity?.findViewById<Toolbar>(R.id.toolbar) ?: return
|
||||
toolbar.menu
|
||||
}
|
||||
group.findItem(R.id.action_sensor_expand)?.let {
|
||||
it.isVisible = viewModel.serversShowExpand.value && !viewModel.serversDoExpand.value
|
||||
}
|
||||
group.findItem(R.id.action_sensor_collapse)?.let {
|
||||
it.isVisible = viewModel.serversShowExpand.value && viewModel.serversDoExpand.value
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,17 +1,22 @@
|
|||
package io.homeassistant.companion.android.settings.sensor
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.content.Intent.ACTION_VIEW
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.appcompat.widget.SearchView
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
import androidx.core.net.toUri
|
||||
import androidx.core.view.MenuHost
|
||||
import androidx.core.view.MenuProvider
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
|
@ -23,67 +28,6 @@ class SensorSettingsFragment : Fragment() {
|
|||
|
||||
val viewModel: SensorSettingsViewModel by viewModels()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.setGroupVisible(R.id.senor_detail_toolbar_group, true)
|
||||
|
||||
val searchViewItem = menu.findItem(R.id.action_search)
|
||||
val searchView: SearchView = searchViewItem.actionView as SearchView
|
||||
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
||||
override fun onQueryTextSubmit(query: String?): Boolean {
|
||||
searchView.clearFocus()
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onQueryTextChange(query: String?): Boolean {
|
||||
viewModel.setSensorsSearchQuery(query)
|
||||
return false
|
||||
}
|
||||
})
|
||||
if (!viewModel.searchQuery.isNullOrBlank() && !searchViewItem.isActionViewExpanded) {
|
||||
viewModel.setSensorsSearchQuery(null)
|
||||
}
|
||||
|
||||
when (viewModel.sensorFilter) {
|
||||
SensorSettingsViewModel.SensorFilter.ALL ->
|
||||
menu.findItem(R.id.action_show_sensors_all)?.isChecked = true
|
||||
SensorSettingsViewModel.SensorFilter.ENABLED ->
|
||||
menu.findItem(R.id.action_show_sensors_enabled)?.isChecked = true
|
||||
SensorSettingsViewModel.SensorFilter.DISABLED ->
|
||||
menu.findItem(R.id.action_show_sensors_disabled)?.isChecked = true
|
||||
}
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/core/sensors#android-sensors"))
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.action_show_sensors_all, R.id.action_show_sensors_enabled, R.id.action_show_sensors_disabled -> {
|
||||
item.isChecked = true
|
||||
viewModel.setSensorFilterChoice(
|
||||
when (item.itemId) {
|
||||
R.id.action_show_sensors_enabled -> SensorSettingsViewModel.SensorFilter.ENABLED
|
||||
R.id.action_show_sensors_disabled -> SensorSettingsViewModel.SensorFilter.DISABLED
|
||||
else -> SensorSettingsViewModel.SensorFilter.ALL
|
||||
}
|
||||
)
|
||||
return true
|
||||
}
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -112,6 +56,61 @@ class SensorSettingsFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
val menuHost: MenuHost = requireActivity()
|
||||
menuHost.addMenuProvider(
|
||||
object : MenuProvider {
|
||||
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
|
||||
menuInflater.inflate(R.menu.menu_fragment_sensor, menu)
|
||||
|
||||
val searchViewItem = menu.findItem(R.id.action_search)
|
||||
val searchView = searchViewItem.actionView as SearchView
|
||||
searchView.apply {
|
||||
queryHint = getString(commonR.string.search_sensors)
|
||||
maxWidth = Integer.MAX_VALUE
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPrepareMenu(menu: Menu) {
|
||||
val searchViewItem = menu.findItem(R.id.action_search)
|
||||
val searchView = searchViewItem.actionView as SearchView
|
||||
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
|
||||
override fun onQueryTextSubmit(query: String?): Boolean {
|
||||
searchView.clearFocus()
|
||||
return false
|
||||
}
|
||||
|
||||
override fun onQueryTextChange(query: String?): Boolean {
|
||||
viewModel.setSensorsSearchQuery(query)
|
||||
return false
|
||||
}
|
||||
})
|
||||
if (!viewModel.searchQuery.isNullOrBlank() && !searchViewItem.isActionViewExpanded) {
|
||||
viewModel.setSensorsSearchQuery(null)
|
||||
}
|
||||
|
||||
menu.findItem(viewModel.sensorFilter.menuItemId)?.isChecked = true
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(ACTION_VIEW, "https://companion.home-assistant.io/docs/core/sensors#android-sensors".toUri())
|
||||
}
|
||||
}
|
||||
|
||||
override fun onMenuItemSelected(menuItem: MenuItem) = when (menuItem.itemId) {
|
||||
R.id.action_show_sensors_all, R.id.action_show_sensors_enabled, R.id.action_show_sensors_disabled -> {
|
||||
menuItem.isChecked = !menuItem.isChecked
|
||||
viewModel.setSensorFilterChoice(menuItem.itemId)
|
||||
true
|
||||
}
|
||||
else -> false
|
||||
}
|
||||
},
|
||||
viewLifecycleOwner,
|
||||
Lifecycle.State.RESUMED
|
||||
)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.title = getString(commonR.string.sensors)
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
package io.homeassistant.companion.android.settings.sensor
|
||||
|
||||
import android.app.Application
|
||||
import androidx.annotation.IdRes
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.sensors.SensorManager
|
||||
import io.homeassistant.companion.android.database.sensor.Sensor
|
||||
import io.homeassistant.companion.android.database.sensor.SensorDao
|
||||
|
@ -21,10 +23,14 @@ class SensorSettingsViewModel @Inject constructor(
|
|||
) :
|
||||
AndroidViewModel(application) {
|
||||
|
||||
enum class SensorFilter {
|
||||
ALL,
|
||||
ENABLED,
|
||||
DISABLED
|
||||
enum class SensorFilter(@IdRes val menuItemId: Int) {
|
||||
ALL(R.id.action_show_sensors_all),
|
||||
ENABLED(R.id.action_show_sensors_enabled),
|
||||
DISABLED(R.id.action_show_sensors_disabled);
|
||||
|
||||
companion object {
|
||||
val menuItemIdToFilter = values().associateBy { it.menuItemId }
|
||||
}
|
||||
}
|
||||
|
||||
private var sensorsList = emptyList<Sensor>()
|
||||
|
@ -54,9 +60,9 @@ class SensorSettingsViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
fun setSensorFilterChoice(filter: SensorFilter) {
|
||||
fun setSensorFilterChoice(@IdRes filterMenuItemId: Int) {
|
||||
viewModelScope.launch {
|
||||
sensorFilter = filter
|
||||
sensorFilter = SensorFilter.menuItemIdToFilter.getValue(filterMenuItemId)
|
||||
filterSensorsList()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
package io.homeassistant.companion.android.settings.sensor
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.runtime.collectAsState
|
||||
|
@ -13,8 +10,8 @@ import androidx.fragment.app.Fragment
|
|||
import androidx.fragment.app.viewModels
|
||||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.settings.SettingViewModel
|
||||
import io.homeassistant.companion.android.settings.addHelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.sensor.views.SensorUpdateFrequencyView
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
||||
|
@ -23,21 +20,6 @@ class SensorUpdateFrequencyFragment : Fragment() {
|
|||
|
||||
val viewModel: SettingViewModel by viewModels()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/core/sensors#android-sensors"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -57,6 +39,10 @@ class SensorUpdateFrequencyFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
addHelpMenuProvider("https://companion.home-assistant.io/docs/core/sensors#android-sensors")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.title = getString(commonR.string.sensor_update_frequency)
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
package io.homeassistant.companion.android.settings.shortcuts
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.RequiresApi
|
||||
|
@ -20,7 +17,7 @@ import androidx.fragment.app.viewModels
|
|||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import com.mikepenz.iconics.typeface.IIcon
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.settings.addHelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.shortcuts.views.ManageShortcutsView
|
||||
import io.homeassistant.companion.android.util.icondialog.IconDialog
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
@ -37,21 +34,6 @@ class ManageShortcutsSettingsFragment : Fragment() {
|
|||
|
||||
val viewModel: ManageShortcutsViewModel by viewModels()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/integrations/android-shortcuts"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -77,6 +59,10 @@ class ManageShortcutsSettingsFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
addHelpMenuProvider("https://companion.home-assistant.io/docs/integrations/android-shortcuts")
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N_MR1)
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
package io.homeassistant.companion.android.settings.ssid
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
|
@ -12,7 +9,7 @@ import androidx.fragment.app.Fragment
|
|||
import androidx.fragment.app.viewModels
|
||||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.settings.addHelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.ssid.views.SsidView
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
||||
|
@ -25,21 +22,6 @@ class SsidFragment : Fragment() {
|
|||
|
||||
val viewModel: SsidViewModel by viewModels()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/troubleshooting/networking#setting-up-the-app"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -63,6 +45,10 @@ class SsidFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
addHelpMenuProvider("https://companion.home-assistant.io/docs/troubleshooting/networking#setting-up-the-app")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.title = getString(commonR.string.pref_connection_wifi)
|
||||
|
|
|
@ -21,11 +21,6 @@ class ExternalUrlFragment : Fragment() {
|
|||
|
||||
val viewModel by viewModels<ExternalUrlViewModel>()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(false)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
package io.homeassistant.companion.android.settings.vehicle
|
||||
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.annotation.RequiresApi
|
||||
|
@ -15,8 +12,8 @@ import androidx.fragment.app.Fragment
|
|||
import androidx.fragment.app.viewModels
|
||||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.data.servers.ServerManager
|
||||
import io.homeassistant.companion.android.settings.addHelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.vehicle.views.AndroidAutoFavoritesSettings
|
||||
import javax.inject.Inject
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
@ -29,21 +26,6 @@ class ManageAndroidAutoSettingsFragment : Fragment() {
|
|||
|
||||
val viewModel: ManageAndroidAutoViewModel by viewModels()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/android-auto"))
|
||||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
|
@ -63,6 +45,10 @@ class ManageAndroidAutoSettingsFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
addHelpMenuProvider("https://companion.home-assistant.io/docs/android-auto")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.title =
|
||||
|
|
|
@ -7,7 +7,6 @@ import android.os.Bundle
|
|||
import android.os.PowerManager
|
||||
import android.provider.Settings
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
|
@ -21,9 +20,9 @@ import androidx.fragment.app.Fragment
|
|||
import androidx.fragment.app.viewModels
|
||||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.common.data.wifi.WifiHelper
|
||||
import io.homeassistant.companion.android.settings.SettingViewModel
|
||||
import io.homeassistant.companion.android.settings.addHelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.websocket.views.WebsocketSettingView
|
||||
import javax.inject.Inject
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
@ -50,22 +49,11 @@ class WebsocketSettingFragment : Fragment() {
|
|||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
arguments?.let {
|
||||
serverId = it.getInt(EXTRA_SERVER, serverId)
|
||||
}
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/notifications/notification-local"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -97,6 +85,10 @@ class WebsocketSettingFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
addHelpMenuProvider("https://companion.home-assistant.io/docs/notifications/notification-local")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.title = getString(commonR.string.websocket_setting_name)
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
package io.homeassistant.companion.android.settings.widgets
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.Menu
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.compose.ui.platform.ComposeView
|
||||
|
@ -12,7 +9,7 @@ import androidx.fragment.app.Fragment
|
|||
import androidx.fragment.app.viewModels
|
||||
import com.google.accompanist.themeadapter.material.MdcTheme
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import io.homeassistant.companion.android.R
|
||||
import io.homeassistant.companion.android.settings.addHelpMenuProvider
|
||||
import io.homeassistant.companion.android.settings.widgets.views.ManageWidgetsView
|
||||
import io.homeassistant.companion.android.common.R as commonR
|
||||
|
||||
|
@ -21,21 +18,6 @@ class ManageWidgetsSettingsFragment : Fragment() {
|
|||
|
||||
val viewModel: ManageWidgetsViewModel by viewModels()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
override fun onPrepareOptionsMenu(menu: Menu) {
|
||||
super.onPrepareOptionsMenu(menu)
|
||||
|
||||
menu.findItem(R.id.get_help)?.let {
|
||||
it.isVisible = true
|
||||
it.intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://companion.home-assistant.io/docs/integrations/android-widgets"))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
|
@ -50,6 +32,10 @@ class ManageWidgetsSettingsFragment : Fragment() {
|
|||
}
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
addHelpMenuProvider("https://companion.home-assistant.io/docs/integrations/android-widgets")
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.title = getString(commonR.string.widgets)
|
||||
|
|
|
@ -1,120 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<group
|
||||
android:id="@+id/senor_detail_toolbar_group"
|
||||
android:visible="false">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_search"
|
||||
android:icon="@drawable/ic_search_toolbar"
|
||||
android:title="@string/search_sensors"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_filter"
|
||||
android:icon="@drawable/ic_filter_toolbar"
|
||||
android:title="@string/filter_sensors"
|
||||
app:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<group
|
||||
android:id="@+id/filter_toolbar_group"
|
||||
android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/action_show_sensors_all"
|
||||
android:title="@string/filter_sensors_all"
|
||||
android:checked="true" />
|
||||
<item
|
||||
android:id="@+id/action_show_sensors_enabled"
|
||||
android:title="@string/filter_sensors_enabled" />
|
||||
<item
|
||||
android:id="@+id/action_show_sensors_disabled"
|
||||
android:title="@string/filter_sensors_disabled" />
|
||||
</group>
|
||||
</menu>
|
||||
</item>
|
||||
</group>
|
||||
|
||||
<group
|
||||
android:id="@+id/sensor_detail_server_group"
|
||||
android:visible="false">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_sensor_expand"
|
||||
android:icon="@drawable/ic_unfold_more"
|
||||
android:title="@string/sensor_unfold_more"
|
||||
android:visible="false"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_sensor_collapse"
|
||||
android:icon="@drawable/ic_unfold_less"
|
||||
android:title="@string/sensor_unfold_less"
|
||||
android:visible="false"
|
||||
app:showAsAction="ifRoom"/>
|
||||
</group>
|
||||
|
||||
<group
|
||||
android:id="@+id/log_toolbar_group"
|
||||
android:visible="false">
|
||||
|
||||
<item
|
||||
android:id="@+id/share_log"
|
||||
android:icon="@drawable/ic_share_toolbar"
|
||||
android:title="@string/share_logs"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/refresh_log"
|
||||
android:icon="@drawable/ic_refresh_toolbar"
|
||||
android:title="@string/refresh_log"
|
||||
app:showAsAction="ifRoom" />
|
||||
</group>
|
||||
|
||||
<group
|
||||
android:id="@+id/notification_toolbar_group"
|
||||
android:visible="false">
|
||||
|
||||
<item
|
||||
android:id="@+id/search_notifications"
|
||||
android:icon="@drawable/ic_search_toolbar"
|
||||
android:title="@string/search_notifications"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/notification_filter"
|
||||
android:title="@string/filter_notifications"
|
||||
android:icon="@drawable/ic_filter_toolbar"
|
||||
app:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<group
|
||||
android:id="@+id/notification_filter_options"
|
||||
android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/last25"
|
||||
android:title="@string/last_num_notifications"
|
||||
android:checked="true"/>
|
||||
<item
|
||||
android:id="@+id/last50"
|
||||
android:title="@string/last_num_notifications"/>
|
||||
<item
|
||||
android:id="@+id/last100"
|
||||
android:title="@string/last_num_notifications"/>
|
||||
</group>
|
||||
</menu>
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/action_delete"
|
||||
android:icon="@drawable/ic_delete_toolbar"
|
||||
android:title="@string/delete_all_notifications"
|
||||
app:showAsAction="ifRoom" />
|
||||
</group>
|
||||
<item
|
||||
android:id="@+id/get_help"
|
||||
android:title="@string/get_help"
|
||||
android:icon="@drawable/ic_question_toolbar"
|
||||
android:visible="false"
|
||||
app:showAsAction="always"/>
|
||||
</menu>
|
23
app/src/main/res/menu/menu_fragment_log.xml
Normal file
23
app/src/main/res/menu/menu_fragment_log.xml
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<group android:id="@+id/log_toolbar_group">
|
||||
<item
|
||||
android:id="@+id/share_log"
|
||||
android:icon="@drawable/ic_share_toolbar"
|
||||
android:title="@string/share_logs"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/refresh_log"
|
||||
android:icon="@drawable/ic_refresh_toolbar"
|
||||
android:title="@string/refresh_log"
|
||||
app:showAsAction="ifRoom" />
|
||||
</group>
|
||||
|
||||
<item
|
||||
android:id="@+id/get_help"
|
||||
android:title="@string/get_help"
|
||||
android:icon="@drawable/ic_question_toolbar"
|
||||
app:showAsAction="always"/>
|
||||
</menu>
|
45
app/src/main/res/menu/menu_fragment_notification.xml
Normal file
45
app/src/main/res/menu/menu_fragment_notification.xml
Normal file
|
@ -0,0 +1,45 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<group android:id="@+id/notification_toolbar_group">
|
||||
|
||||
<item
|
||||
android:id="@+id/search_notifications"
|
||||
android:icon="@drawable/ic_search_toolbar"
|
||||
android:title="@string/search_notifications"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="ifRoom" />
|
||||
<item
|
||||
android:id="@+id/notification_filter"
|
||||
android:title="@string/filter_notifications"
|
||||
android:icon="@drawable/ic_filter_toolbar"
|
||||
app:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<group
|
||||
android:id="@+id/notification_filter_options"
|
||||
android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/last25"
|
||||
android:title="@string/last_num_notifications"
|
||||
android:checked="true"/>
|
||||
<item
|
||||
android:id="@+id/last50"
|
||||
android:title="@string/last_num_notifications"/>
|
||||
<item
|
||||
android:id="@+id/last100"
|
||||
android:title="@string/last_num_notifications"/>
|
||||
</group>
|
||||
</menu>
|
||||
</item>
|
||||
<item
|
||||
android:id="@+id/action_delete"
|
||||
android:icon="@drawable/ic_delete_toolbar"
|
||||
android:title="@string/delete_all_notifications"
|
||||
app:showAsAction="ifRoom" />
|
||||
</group>
|
||||
<item
|
||||
android:id="@+id/get_help"
|
||||
android:title="@string/get_help"
|
||||
android:icon="@drawable/ic_question_toolbar"
|
||||
app:showAsAction="always"/>
|
||||
</menu>
|
39
app/src/main/res/menu/menu_fragment_sensor.xml
Normal file
39
app/src/main/res/menu/menu_fragment_sensor.xml
Normal file
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_search"
|
||||
android:icon="@drawable/ic_search_toolbar"
|
||||
android:title="@string/search_sensors"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_filter"
|
||||
android:icon="@drawable/ic_filter_toolbar"
|
||||
android:title="@string/filter_sensors"
|
||||
app:showAsAction="ifRoom">
|
||||
<menu>
|
||||
<group
|
||||
android:id="@+id/filter_toolbar_group"
|
||||
android:checkableBehavior="single">
|
||||
<item
|
||||
android:id="@+id/action_show_sensors_all"
|
||||
android:title="@string/filter_sensors_all"
|
||||
android:checked="true" />
|
||||
<item
|
||||
android:id="@+id/action_show_sensors_enabled"
|
||||
android:title="@string/filter_sensors_enabled" />
|
||||
<item
|
||||
android:id="@+id/action_show_sensors_disabled"
|
||||
android:title="@string/filter_sensors_disabled" />
|
||||
</group>
|
||||
</menu>
|
||||
</item>
|
||||
|
||||
<item
|
||||
android:id="@+id/get_help"
|
||||
android:title="@string/get_help"
|
||||
android:icon="@drawable/ic_question_toolbar"
|
||||
app:showAsAction="always"/>
|
||||
</menu>
|
23
app/src/main/res/menu/menu_fragment_sensordetail.xml
Normal file
23
app/src/main/res/menu/menu_fragment_sensordetail.xml
Normal file
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_sensor_expand"
|
||||
android:icon="@drawable/ic_unfold_more"
|
||||
android:title="@string/sensor_unfold_more"
|
||||
android:visible="false"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_sensor_collapse"
|
||||
android:icon="@drawable/ic_unfold_less"
|
||||
android:title="@string/sensor_unfold_less"
|
||||
android:visible="false"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/get_help"
|
||||
android:title="@string/get_help"
|
||||
android:icon="@drawable/ic_question_toolbar"
|
||||
app:showAsAction="always"/>
|
||||
</menu>
|
3
app/src/full/res/menu/menu_activity_settings_wear.xml → app/src/main/res/menu/menu_help.xml
Executable file → Normal file
3
app/src/full/res/menu/menu_activity_settings_wear.xml → app/src/main/res/menu/menu_help.xml
Executable file → Normal file
|
@ -5,6 +5,5 @@
|
|||
android:id="@+id/get_help"
|
||||
android:title="@string/get_help"
|
||||
android:icon="@drawable/ic_question_toolbar"
|
||||
android:visible="false"
|
||||
app:showAsAction="always"/>
|
||||
</menu>
|
||||
</menu>
|
Loading…
Reference in a new issue