Prevent all menu invalidations if we have requested a conversation search.

This commit is contained in:
Alex Hart
2021-06-25 09:28:55 -03:00
parent 42e865813c
commit e504c490c8
2 changed files with 32 additions and 26 deletions

View File

@@ -701,17 +701,9 @@ class ConversationSettingsFragment : DSLSettingsFragment(
override fun getAnimationState(recyclerView: RecyclerView): AnimationState { override fun getAnimationState(recyclerView: RecyclerView): AnimationState {
val layoutManager = recyclerView.layoutManager as LinearLayoutManager val layoutManager = recyclerView.layoutManager as LinearLayoutManager
// If first visible item position is 0
// If less than actionbarsize is visible
// SHOW
// else
// HIDE
// else
// HIDE
return if (layoutManager.findFirstVisibleItemPosition() == 0) { return if (layoutManager.findFirstVisibleItemPosition() == 0) {
val firstChild = requireNotNull(layoutManager.getChildAt(0)) val firstChild = requireNotNull(layoutManager.getChildAt(0))
firstChild.getDrawingRect(rect) firstChild.getLocalVisibleRect(rect)
if (rect.height() <= actionBarSize) { if (rect.height() <= actionBarSize) {
AnimationState.SHOW AnimationState.SHOW

View File

@@ -336,7 +336,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
private static final String TAG = Log.tag(ConversationActivity.class); private static final String TAG = Log.tag(ConversationActivity.class);
private static final String STATE_REACT_WITH_ANY_PAGE = "STATE_REACT_WITH_ANY_PAGE"; private static final String STATE_REACT_WITH_ANY_PAGE = "STATE_REACT_WITH_ANY_PAGE";
private static final String STATE_HANDLED_INIT_SEARCH = "STATE_HANDLED_INIT_SEARCH"; private static final String STATE_IS_SEARCH_REQUESTED = "STATE_IS_SEARCH_REQUESTED";
private static final int REQUEST_CODE_SETTINGS = 1000; private static final int REQUEST_CODE_SETTINGS = 1000;
@@ -411,6 +411,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
private boolean isDefaultSms = true; private boolean isDefaultSms = true;
private boolean isMmsEnabled = true; private boolean isMmsEnabled = true;
private boolean isSecurityInitialized = false; private boolean isSecurityInitialized = false;
private boolean isSearchRequested = false;
private volatile boolean screenInitialized = false; private volatile boolean screenInitialized = false;
@@ -440,6 +441,8 @@ public class ConversationActivity extends PassphraseRequiredActivity
ConversationIntents.Args args = ConversationIntents.Args.from(getIntent()); ConversationIntents.Args args = ConversationIntents.Args.from(getIntent());
isSearchRequested = args.isWithSearchOpen();
reportShortcutLaunch(args.getRecipientId()); reportShortcutLaunch(args.getRecipientId());
setContentView(R.layout.conversation_activity); setContentView(R.layout.conversation_activity);
@@ -497,8 +500,6 @@ public class ConversationActivity extends PassphraseRequiredActivity
} }
}); });
initializeInsightObserver(); initializeInsightObserver();
handleStartWithSearchOpen();
} }
@Override @Override
@@ -536,7 +537,10 @@ public class ConversationActivity extends PassphraseRequiredActivity
setIntent(intent); setIntent(intent);
viewModel.setArgs(ConversationIntents.Args.from(intent)); ConversationIntents.Args args = ConversationIntents.Args.from(intent);
isSearchRequested = args.isWithSearchOpen();
viewModel.setArgs(args);
reportShortcutLaunch(viewModel.getArgs().getRecipientId()); reportShortcutLaunch(viewModel.getArgs().getRecipientId());
initializeResources(viewModel.getArgs()); initializeResources(viewModel.getArgs());
@@ -553,7 +557,11 @@ public class ConversationActivity extends PassphraseRequiredActivity
searchNav.setVisibility(View.GONE); searchNav.setVisibility(View.GONE);
handleStartWithSearchOpen(); if (args.isWithSearchOpen()) {
if (searchViewItem != null && searchViewItem.expandActionView()) {
searchViewModel.onSearchOpened();
}
}
} }
@Override @Override
@@ -686,7 +694,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
titleView.setTitle(glideRequests, recipientSnapshot); titleView.setTitle(glideRequests, recipientSnapshot);
NotificationChannels.updateContactChannelName(this, recipientSnapshot); NotificationChannels.updateContactChannelName(this, recipientSnapshot);
setBlockedUserState(recipientSnapshot, isSecureText, isDefaultSms); setBlockedUserState(recipientSnapshot, isSecureText, isDefaultSms);
supportInvalidateOptionsMenu(); invalidateOptionsMenu();
break; break;
case TAKE_PHOTO: case TAKE_PHOTO:
handleImageFromDeviceCameraApp(); handleImageFromDeviceCameraApp();
@@ -779,21 +787,12 @@ public class ConversationActivity extends PassphraseRequiredActivity
} }
} }
private void handleStartWithSearchOpen() {
if (viewModel.getArgs().isWithSearchOpen()) {
toolbar.postDelayed(() -> {
if (searchViewItem.expandActionView()) {
searchViewModel.onSearchOpened();
}
}, 500);
}
}
@Override @Override
protected void onSaveInstanceState(@NonNull Bundle outState) { protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
outState.putInt(STATE_REACT_WITH_ANY_PAGE, reactWithAnyEmojiStartPage); outState.putInt(STATE_REACT_WITH_ANY_PAGE, reactWithAnyEmojiStartPage);
outState.putBoolean(STATE_IS_SEARCH_REQUESTED, isSearchRequested);
} }
@Override @Override
@@ -801,6 +800,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
super.onRestoreInstanceState(savedInstanceState); super.onRestoreInstanceState(savedInstanceState);
reactWithAnyEmojiStartPage = savedInstanceState.getInt(STATE_REACT_WITH_ANY_PAGE, -1); reactWithAnyEmojiStartPage = savedInstanceState.getInt(STATE_REACT_WITH_ANY_PAGE, -1);
isSearchRequested = savedInstanceState.getBoolean(STATE_IS_SEARCH_REQUESTED, false);
} }
private void setVisibleThread(long threadId) { private void setVisibleThread(long threadId) {
@@ -1016,6 +1016,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
@Override @Override
public boolean onMenuItemActionCollapse(MenuItem item) { public boolean onMenuItemActionCollapse(MenuItem item) {
searchView.setOnQueryTextListener(null); searchView.setOnQueryTextListener(null);
isSearchRequested = false;
searchViewModel.onSearchClosed(); searchViewModel.onSearchClosed();
searchNav.setVisibility(View.GONE); searchNav.setVisibility(View.GONE);
inputPanel.setVisibility(View.VISIBLE); inputPanel.setVisibility(View.VISIBLE);
@@ -1026,10 +1027,23 @@ public class ConversationActivity extends PassphraseRequiredActivity
} }
}); });
if (isSearchRequested) {
if (searchViewItem.expandActionView()) {
searchViewModel.onSearchOpened();
}
}
super.onCreateOptionsMenu(menu); super.onCreateOptionsMenu(menu);
return true; return true;
} }
@Override
public void invalidateOptionsMenu() {
if (!isSearchRequested) {
super.invalidateOptionsMenu();
}
}
@Override @Override
public boolean onOptionsItemSelected(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item); super.onOptionsItemSelected(item);
@@ -1544,7 +1558,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
} }
calculateCharactersRemaining(); calculateCharactersRemaining();
supportInvalidateOptionsMenu(); invalidateOptionsMenu();
setBlockedUserState(recipient.get(), isSecureText, isDefaultSms); setBlockedUserState(recipient.get(), isSecureText, isDefaultSms);
} }