Fix screen freeze when changing display size in Multi-Window mode
The device screen freezes when launching two Display size settings screen and changing display size in Multi-Window mode. To fix this issue, OnSeekBarChangeListener should be set in onStart() to avoid onProgressChanged() is called during onRestoreInstanceState which is caused by display size change. Fixes: 70253030 Test: manual - open two Display size settings in Multi-Window mode. Change-Id: I779954aeeb1da526ba1b0fac2676e2f7d8289352
This commit is contained in:
committed by
Yoshinori Hirano
parent
9afa720abe
commit
09c44bf78d
@@ -58,6 +58,7 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc
|
|||||||
private DotsPageIndicator mPageIndicator;
|
private DotsPageIndicator mPageIndicator;
|
||||||
|
|
||||||
private TextView mLabel;
|
private TextView mLabel;
|
||||||
|
private LabeledSeekBar mSeekBar;
|
||||||
private View mLarger;
|
private View mLarger;
|
||||||
private View mSmaller;
|
private View mSmaller;
|
||||||
|
|
||||||
@@ -110,19 +111,17 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc
|
|||||||
// seek bar.
|
// seek bar.
|
||||||
final int max = Math.max(1, mEntries.length - 1);
|
final int max = Math.max(1, mEntries.length - 1);
|
||||||
|
|
||||||
final LabeledSeekBar seekBar = (LabeledSeekBar) content.findViewById(R.id.seek_bar);
|
mSeekBar = (LabeledSeekBar) content.findViewById(R.id.seek_bar);
|
||||||
seekBar.setLabels(mEntries);
|
mSeekBar.setLabels(mEntries);
|
||||||
seekBar.setMax(max);
|
mSeekBar.setMax(max);
|
||||||
seekBar.setProgress(mInitialIndex);
|
|
||||||
seekBar.setOnSeekBarChangeListener(new onPreviewSeekBarChangeListener());
|
|
||||||
|
|
||||||
mSmaller = content.findViewById(R.id.smaller);
|
mSmaller = content.findViewById(R.id.smaller);
|
||||||
mSmaller.setOnClickListener(new OnClickListener() {
|
mSmaller.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
final int progress = seekBar.getProgress();
|
final int progress = mSeekBar.getProgress();
|
||||||
if (progress > 0) {
|
if (progress > 0) {
|
||||||
seekBar.setProgress(progress - 1, true);
|
mSeekBar.setProgress(progress - 1, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -131,9 +130,9 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc
|
|||||||
mLarger.setOnClickListener(new OnClickListener() {
|
mLarger.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
final int progress = seekBar.getProgress();
|
final int progress = mSeekBar.getProgress();
|
||||||
if (progress < seekBar.getMax()) {
|
if (progress < mSeekBar.getMax()) {
|
||||||
seekBar.setProgress(progress + 1, true);
|
mSeekBar.setProgress(progress + 1, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -141,7 +140,7 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc
|
|||||||
if (mEntries.length == 1) {
|
if (mEntries.length == 1) {
|
||||||
// The larger and smaller buttons will be disabled when we call
|
// The larger and smaller buttons will be disabled when we call
|
||||||
// setPreviewLayer() later in this method.
|
// setPreviewLayer() later in this method.
|
||||||
seekBar.setEnabled(false);
|
mSeekBar.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
@@ -172,6 +171,21 @@ public abstract class PreviewSeekBarPreferenceFragment extends SettingsPreferenc
|
|||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
// Set SeekBar listener here to avoid onProgressChanged() is called
|
||||||
|
// during onRestoreInstanceState().
|
||||||
|
mSeekBar.setProgress(mCurrentIndex);
|
||||||
|
mSeekBar.setOnSeekBarChangeListener(new onPreviewSeekBarChangeListener());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
mSeekBar.setOnSeekBarChangeListener(null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new configuration based on the current position of the SeekBar.
|
* Creates new configuration based on the current position of the SeekBar.
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user