Make the suggestion view dismissible

The suggestion view could just be operated once to eliminate flicker.
When the suggestion is completed, there was no way to dismiss it unless
users kill Settings.

This patch allows updating the view's visibility after the activity is
stopped. When the activity restarts, the view can be updated.

Fix: 294153594
Test: robotest
Change-Id: Idc3aada3bff001d603bf2f7737f70f2880f6cc35
This commit is contained in:
Jason Chiu
2023-12-19 15:58:33 +08:00
parent dd61b6bb3d
commit dfd802da92
2 changed files with 22 additions and 4 deletions

View File

@@ -119,6 +119,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements
private SplitControllerCallbackAdapter mSplitControllerAdapter; private SplitControllerCallbackAdapter mSplitControllerAdapter;
private SplitInfoCallback mCallback; private SplitInfoCallback mCallback;
private boolean mAllowUpdateSuggestion = true;
/** A listener receiving homepage loaded events. */ /** A listener receiving homepage loaded events. */
public interface HomepageLoadedListener { public interface HomepageLoadedListener {
@@ -155,15 +156,18 @@ public class SettingsHomepageActivity extends FragmentActivity implements
* to avoid the flicker caused by the suggestion suddenly appearing/disappearing. * to avoid the flicker caused by the suggestion suddenly appearing/disappearing.
*/ */
public void showHomepageWithSuggestion(boolean showSuggestion) { public void showHomepageWithSuggestion(boolean showSuggestion) {
if (mAllowUpdateSuggestion) {
Log.i(TAG, "showHomepageWithSuggestion: " + showSuggestion);
mAllowUpdateSuggestion = false;
mSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
mTwoPaneSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
}
if (mHomepageView == null) { if (mHomepageView == null) {
return; return;
} }
Log.i(TAG, "showHomepageWithSuggestion: " + showSuggestion);
final View homepageView = mHomepageView; final View homepageView = mHomepageView;
mSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
mTwoPaneSuggestionView.setVisibility(showSuggestion ? View.VISIBLE : View.GONE);
mHomepageView = null; mHomepageView = null;
mLoadedListeners.forEach(listener -> listener.onHomepageLoaded()); mLoadedListeners.forEach(listener -> listener.onHomepageLoaded());
mLoadedListeners.clear(); mLoadedListeners.clear();
homepageView.setVisibility(View.VISIBLE); homepageView.setVisibility(View.VISIBLE);
@@ -278,6 +282,7 @@ public class SettingsHomepageActivity extends FragmentActivity implements
@Override @Override
protected void onStop() { protected void onStop() {
super.onStop(); super.onStop();
mAllowUpdateSuggestion = true;
if (mSplitControllerAdapter != null && mCallback != null) { if (mSplitControllerAdapter != null && mCallback != null) {
mSplitControllerAdapter.removeSplitListener(mCallback); mSplitControllerAdapter.removeSplitListener(mCallback);
mCallback = null; mCallback = null;

View File

@@ -167,6 +167,19 @@ public class SettingsHomepageActivityTest {
assertThat(suggestionTile.getVisibility()).isEqualTo(View.GONE); assertThat(suggestionTile.getVisibility()).isEqualTo(View.GONE);
} }
@Test
public void showHomepageWithSuggestion_callAfterOnStop_shouldUpdateVisibility() {
final SettingsHomepageActivity activity = Robolectric.buildActivity(
SettingsHomepageActivity.class).create().get();
final View suggestionTile = activity.findViewById(R.id.suggestion_content);
activity.showHomepageWithSuggestion(true);
activity.onStop();
activity.showHomepageWithSuggestion(false);
assertThat(suggestionTile.getVisibility()).isEqualTo(View.GONE);
}
@Test @Test
public void onStart_isNotDebuggable_shouldHideSystemOverlay() { public void onStart_isNotDebuggable_shouldHideSystemOverlay() {
ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", false); ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", false);