Move search button to bottom bar

pull/3385/head
Alex Baker 9 months ago
parent 317aae1e3e
commit b411441ba9

@ -626,6 +626,7 @@
<activity
android:launchMode="singleTask"
android:exported="true"
android:windowSoftInputMode="adjustResize"
android:name="com.todoroo.astrid.activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>

@ -20,12 +20,14 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.asPaddingValues
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.ime
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.systemBars
@ -381,13 +383,16 @@ class MainActivity : AppCompatActivity() {
listPane = {
key (state.filter) {
val fragment = remember { mutableStateOf<TaskListFragment?>(null) }
val keyboardOpen = rememberImeState()
AndroidFragment<TaskListFragment>(
fragmentState = rememberFragmentState(),
arguments = remember(state.filter) {
Bundle()
.apply { putParcelable(EXTRA_FILTER, state.filter) }
},
modifier = Modifier.fillMaxSize(),
modifier = Modifier
.fillMaxSize()
.imePadding(),
) { tlf ->
fragment.value = tlf
tlf.applyInsets(windowInsets.value)
@ -395,8 +400,16 @@ class MainActivity : AppCompatActivity() {
scope.launch { drawerState.open() }
}
}
LaunchedEffect(fragment, windowInsets) {
fragment.value?.applyInsets(windowInsets.value)
LaunchedEffect(fragment, windowInsets, keyboardOpen.value) {
fragment.value?.applyInsets(
if (keyboardOpen.value) {
PaddingValues(
top = windowInsets.value.calculateTopPadding(),
)
} else {
windowInsets.value
}
)
}
}
},

@ -55,7 +55,6 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.rememberPermissionState
import com.google.accompanist.permissions.shouldShowRationale
import com.google.android.material.bottomappbar.BottomAppBar
import com.google.android.material.snackbar.Snackbar
import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.adapter.TaskAdapter
@ -280,12 +279,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
val density = resources.displayMetrics.density
val topInset = (windowInsets.calculateTopPadding().value * density).toInt()
val bottomInset = (windowInsets.calculateBottomPadding().value * density).toInt()
if (topInset == 0 && bottomInset == 0) {
Timber.d("$this: Ignoring insets")
return
} else {
Timber.d("$this: applying insets")
}
with(binding.toolbar) {
val actionBarHeight = TypedValue.complexToDimensionPixelSize(
getData(requireContext(), android.R.attr.actionBarSize),
@ -515,9 +508,6 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
}?.let {
appBar.inflateMenu(it)
}
if (appBar is BottomAppBar) {
menu.removeItem(R.id.menu_search)
}
val hidden = menu.findItem(R.id.menu_show_unstarted)
val completed = menu.findItem(R.id.menu_show_completed)
if (!taskAdapter.supportsHiddenTasks() || !filter.supportsHiddenTasks()) {
@ -539,12 +529,23 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
menu.findItem(R.id.menu_expand_subtasks).isVisible = false
}
menu.findItem(R.id.menu_voice_add).isVisible = device.voiceInputAvailable() && filter.isWritable
search = binding.toolbar.menu.findItem(R.id.menu_search).setOnActionExpandListener(this)
search = binding.toolbar.menu.findItem(R.id.menu_search).apply {
setOnActionExpandListener(this@TaskListFragment)
isVisible = false
}
menu.findItem(R.id.menu_clear_completed).isVisible = filter.isWritable
}
override fun onMenuItemClick(item: MenuItem): Boolean {
Timber.d("onMenuItemClick($item)")
return when (item.itemId) {
R.id.menu_search -> {
if (!search.isActionViewExpanded) {
search.isVisible = true
search.expandActionView()
}
true
}
R.id.menu_voice_add -> {
safeStartActivityForResult(
Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
@ -785,6 +786,7 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
}
override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
search.isVisible = false
search.setOnQueryTextListener(null)
listViewModel.setFilter(filter)
listViewModel.setSearchQuery(null)

@ -3,11 +3,9 @@ package org.tasks.themes;
import static org.tasks.extensions.Context.INSTANCE;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
import android.view.ContextThemeWrapper;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatDelegate;
@ -83,10 +81,6 @@ public class ThemeBase implements Parcelable {
return index == 4 || index == 5 ? INSTANCE.isNightMode(activity) : index > 0;
}
public ContextThemeWrapper wrap(Context context) {
return new ContextThemeWrapper(context, THEMES[index]);
}
public void set(Activity activity) {
activity.setTheme(THEMES[index]);
}

@ -28,20 +28,19 @@
android:id="@+id/menu_share"
android:icon="@drawable/ic_outline_send_24px"
android:title="@string/share" />
<item
android:id="@+id/menu_voice_add"
android:icon="@drawable/ic_outline_mic_none_24px"
android:title="@string/EPr_voiceInputEnabled_title"
app:showAsAction="ifRoom" />
<item
android:id="@+id/menu_search"
android:icon="@drawable/ic_outline_search_24px"
android:title="@string/TLA_menu_search"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView"/>
app:showAsAction="always"/>
<item
android:id="@+id/menu_sort"
android:icon="@drawable/ic_outline_sort_24px"
android:title="@string/TLA_menu_sort"
app:showAsAction="ifRoom" />
app:showAsAction="always" />
<item
android:id="@+id/menu_voice_add"
android:icon="@drawable/ic_outline_mic_none_24px"
android:title="@string/EPr_voiceInputEnabled_title"
app:showAsAction="always" />
</menu>
Loading…
Cancel
Save