Make conditional work properly when toggle it in QS
Some conditionals do not work properly when users toggle its state in QS, the cause is that these conditionals don't have a way to monitor the status changed. Make RecyclerView handle onWindowFocusChanged event and make sure that conditionals can update the status when going back to Settings from QS. Bug: 118387886 Bug: 123171638 Bug: 123167705 Test: visual, robotests Change-Id: Ib3bb9bf43afaa58726502eea1e98bcf602bc3677
This commit is contained in:
@@ -43,6 +43,8 @@ import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||
import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
|
||||
import com.android.settingslib.core.lifecycle.events.OnStart;
|
||||
import com.android.settingslib.core.lifecycle.events.OnStop;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -98,7 +100,6 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
|
||||
mLifecycleObservers = new ArrayList<>();
|
||||
mControllerRendererPool = new ControllerRendererPool();
|
||||
mLifecycle.addObserver(this);
|
||||
|
||||
if (savedInstanceState == null) {
|
||||
mIsFirstLaunch = true;
|
||||
mSavedCards = null;
|
||||
@@ -240,6 +241,21 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
|
||||
outState.putStringArrayList(KEY_CONTEXTUAL_CARDS, cards);
|
||||
}
|
||||
|
||||
public void onWindowFocusChanged(boolean hasWindowFocus) {
|
||||
// Duplicate a list to avoid java.util.ConcurrentModificationException.
|
||||
final List<ContextualCard> cards = new ArrayList<>(mContextualCards);
|
||||
for (ContextualCard card : cards) {
|
||||
final ContextualCardController controller = mControllerRendererPool
|
||||
.getController(mContext, card.getCardType());
|
||||
if (hasWindowFocus && controller instanceof OnStart) {
|
||||
((OnStart) controller).onStart();
|
||||
}
|
||||
if (!hasWindowFocus && controller instanceof OnStop) {
|
||||
((OnStop) controller).onStop();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ControllerRendererPool getControllerRendererPool() {
|
||||
return mControllerRendererPool;
|
||||
}
|
||||
|
Reference in New Issue
Block a user