Action: Update the correct state over cache value. Bug: 258268965 Test: manual test Change-Id: I5ce4b847a2d8229ab2f9188cab369a43b55afbe0
160 lines
4.9 KiB
Java
160 lines
4.9 KiB
Java
/*
|
|
* Copyright (C) 2022 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.settings.accessibility;
|
|
|
|
import android.content.Context;
|
|
import android.util.AttributeSet;
|
|
import android.view.View;
|
|
|
|
import androidx.preference.Preference;
|
|
import androidx.preference.PreferenceViewHolder;
|
|
import androidx.viewpager.widget.ViewPager;
|
|
|
|
import com.android.internal.util.Preconditions;
|
|
import com.android.settings.R;
|
|
import com.android.settings.display.PreviewPagerAdapter;
|
|
import com.android.settings.widget.DotsPageIndicator;
|
|
|
|
/**
|
|
* A {@link Preference} that could show the preview related to the text and reading options.
|
|
*/
|
|
public class TextReadingPreviewPreference extends Preference {
|
|
private int mCurrentItem;
|
|
private int mLastLayerIndex;
|
|
private PreviewPagerAdapter mPreviewAdapter;
|
|
|
|
private final ViewPager.OnPageChangeListener mPageChangeListener =
|
|
new ViewPager.OnPageChangeListener() {
|
|
@Override
|
|
public void onPageScrolled(int i, float v, int i1) {
|
|
// Do nothing
|
|
}
|
|
|
|
@Override
|
|
public void onPageSelected(int i) {
|
|
mCurrentItem = i;
|
|
}
|
|
|
|
@Override
|
|
public void onPageScrollStateChanged(int i) {
|
|
// Do nothing
|
|
}
|
|
};
|
|
|
|
TextReadingPreviewPreference(Context context) {
|
|
super(context);
|
|
init();
|
|
}
|
|
|
|
public TextReadingPreviewPreference(Context context, AttributeSet attrs) {
|
|
super(context, attrs);
|
|
init();
|
|
}
|
|
|
|
TextReadingPreviewPreference(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
super(context, attrs, defStyleAttr);
|
|
init();
|
|
}
|
|
|
|
TextReadingPreviewPreference(Context context, AttributeSet attrs, int defStyleAttr,
|
|
int defStyleRes) {
|
|
super(context, attrs, defStyleAttr, defStyleRes);
|
|
init();
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(PreferenceViewHolder holder) {
|
|
super.onBindViewHolder(holder);
|
|
|
|
final ViewPager viewPager = (ViewPager) holder.findViewById(R.id.preview_pager);
|
|
viewPager.addOnPageChangeListener(mPageChangeListener);
|
|
final DotsPageIndicator pageIndicator =
|
|
(DotsPageIndicator) holder.findViewById(R.id.page_indicator);
|
|
updateAdapterIfNeeded(viewPager, pageIndicator, mPreviewAdapter);
|
|
updatePagerAndIndicator(viewPager, pageIndicator);
|
|
}
|
|
|
|
void setPreviewAdapter(PreviewPagerAdapter previewAdapter) {
|
|
if (previewAdapter != mPreviewAdapter) {
|
|
mPreviewAdapter = previewAdapter;
|
|
notifyChanged();
|
|
}
|
|
}
|
|
|
|
void setCurrentItem(int currentItem) {
|
|
Preconditions.checkNotNull(mPreviewAdapter,
|
|
"Preview adapter is null, you should init the preview adapter first");
|
|
|
|
if (currentItem != mCurrentItem) {
|
|
mCurrentItem = currentItem;
|
|
notifyChanged();
|
|
}
|
|
}
|
|
|
|
void setLastLayerIndex(int lastLayerIndex) {
|
|
mLastLayerIndex = lastLayerIndex;
|
|
}
|
|
|
|
int getCurrentItem() {
|
|
return mCurrentItem;
|
|
}
|
|
|
|
private void updateAdapterIfNeeded(ViewPager viewPager, DotsPageIndicator pageIndicator,
|
|
PreviewPagerAdapter previewAdapter) {
|
|
if (viewPager.getAdapter() == previewAdapter) {
|
|
return;
|
|
}
|
|
|
|
viewPager.setAdapter(previewAdapter);
|
|
|
|
if (previewAdapter != null) {
|
|
pageIndicator.setViewPager(viewPager);
|
|
} else {
|
|
mCurrentItem = 0;
|
|
}
|
|
}
|
|
|
|
private void updatePagerAndIndicator(ViewPager viewPager, DotsPageIndicator pageIndicator) {
|
|
if (viewPager.getAdapter() == null) {
|
|
return;
|
|
}
|
|
|
|
if (viewPager.getCurrentItem() != mCurrentItem) {
|
|
viewPager.setCurrentItem(mCurrentItem);
|
|
}
|
|
|
|
pageIndicator.setVisibility(
|
|
viewPager.getAdapter().getCount() > 1 ? View.VISIBLE : View.GONE);
|
|
}
|
|
|
|
private void init() {
|
|
setLayoutResource(R.layout.accessibility_text_reading_preview);
|
|
}
|
|
|
|
void notifyPreviewPagerChanged(int pagerIndex) {
|
|
Preconditions.checkNotNull(mPreviewAdapter,
|
|
"Preview adapter is null, you should init the preview adapter first");
|
|
|
|
if (pagerIndex != mLastLayerIndex) {
|
|
mPreviewAdapter.setPreviewLayer(pagerIndex, mLastLayerIndex, getCurrentItem(),
|
|
/* animate= */ false);
|
|
}
|
|
|
|
mLastLayerIndex = pagerIndex;
|
|
}
|
|
}
|