164 lines
4.7 KiB
Java
164 lines
4.7 KiB
Java
/*
|
|
* Copyright 2016 Hippo Seven
|
|
*
|
|
* 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.hippo.glgallery;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.hippo.glview.image.ImageTexture;
|
|
import com.hippo.glview.image.ImageWrapper;
|
|
import com.hippo.glview.view.GLRootView;
|
|
|
|
public class SimpleAdapter extends GalleryView.Adapter implements GalleryProvider.Listener {
|
|
|
|
private final GalleryProvider mProvider;
|
|
private final ImageTexture.Uploader mUploader;
|
|
private boolean mShowIndex = true;
|
|
|
|
public SimpleAdapter(@NonNull GLRootView glRootView, @NonNull GalleryProvider provider) {
|
|
mProvider = provider;
|
|
mUploader = new ImageTexture.Uploader(glRootView);
|
|
}
|
|
|
|
public void clearUploader() {
|
|
mUploader.clear();
|
|
}
|
|
|
|
public void setShowIndex(boolean show) {
|
|
mShowIndex = show;
|
|
}
|
|
|
|
@Override
|
|
public void onBind(GalleryPageView view, int index) {
|
|
mProvider.request(index);
|
|
view.showInfo();
|
|
view.setImage(null);
|
|
if (mShowIndex) {
|
|
view.setPage(index + 1);
|
|
} else {
|
|
view.hidePage();
|
|
}
|
|
view.setProgress(GalleryPageView.PROGRESS_INDETERMINATE);
|
|
view.setError(null, null);
|
|
}
|
|
|
|
@Override
|
|
public void onUnbind(GalleryPageView view, int index) {
|
|
mProvider.cancelRequest(index);
|
|
view.setImage(null);
|
|
view.setError(null, null);
|
|
}
|
|
|
|
@Override
|
|
public String getError() {
|
|
return mProvider.getError();
|
|
}
|
|
|
|
@Override
|
|
public int size() {
|
|
return mProvider.size();
|
|
}
|
|
|
|
@Override
|
|
public void onDataChanged() {
|
|
mGalleryView.onDataChanged();
|
|
}
|
|
|
|
@Override
|
|
public void onPageWait(int index) {
|
|
GalleryPageView page = findPageByIndex(index);
|
|
if (page != null) {
|
|
page.showInfo();
|
|
page.setImage(null);
|
|
if (mShowIndex) {
|
|
page.setPage(index + 1);
|
|
} else {
|
|
page.hidePage();
|
|
}
|
|
page.setProgress(GalleryPageView.PROGRESS_INDETERMINATE);
|
|
page.setError(null, null);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPagePercent(int index, float percent) {
|
|
GalleryPageView page = findPageByIndex(index);
|
|
if (page != null) {
|
|
page.showInfo();
|
|
page.setImage(null);
|
|
if (mShowIndex) {
|
|
page.setPage(index + 1);
|
|
} else {
|
|
page.hidePage();
|
|
}
|
|
page.setProgress(percent);
|
|
page.setError(null, null);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPageSucceed(int index, ImageWrapper image) {
|
|
GalleryPageView page = findPageByIndex(index);
|
|
if (page != null) {
|
|
if (image.obtain()) {
|
|
ImageTexture imageTexture = new ImageTexture(image);
|
|
mUploader.addTexture(imageTexture);
|
|
page.showImage();
|
|
page.setImage(imageTexture);
|
|
if (mShowIndex) {
|
|
page.setPage(index + 1);
|
|
} else {
|
|
page.hidePage();
|
|
}
|
|
page.setProgress(GalleryPageView.PROGRESS_GONE);
|
|
page.setError(null, null);
|
|
} else {
|
|
// The image is recycled, request again.
|
|
// TODO request loop ?
|
|
mProvider.request(index);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onPageFailed(int index, String error) {
|
|
GalleryPageView page = findPageByIndex(index);
|
|
if (page != null) {
|
|
page.showInfo();
|
|
page.setImage(null);
|
|
if (mShowIndex) {
|
|
page.setPage(index + 1);
|
|
} else {
|
|
page.hidePage();
|
|
}
|
|
page.setProgress(GalleryPageView.PROGRESS_GONE);
|
|
page.setError(error, mGalleryView);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onDataChanged(int index) {
|
|
GalleryPageView page = findPageByIndex(index);
|
|
if (page != null) {
|
|
mProvider.request(index);
|
|
}
|
|
}
|
|
|
|
private GalleryPageView findPageByIndex(int index) {
|
|
return mGalleryView != null ? mGalleryView.findPageByIndex(index) : null;
|
|
}
|
|
}
|