/*
* Copyright © 2016 TIBCO Software,Inc.All rights reserved.
* http://community.jaspersoft.com/project/jaspermobile-android
*
* Unless you have purchased a commercial license agreement from TIBCO Jaspersoft,
* the following license terms apply:
*
* This program is part of TIBCO Jaspersoft Mobile for Android.
*
* TIBCO Jaspersoft Mobile is free software:you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation,either version 3of the License,or
* (at your option)any later version.
*
* TIBCO Jaspersoft Mobile is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY;without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with TIBCO Jaspersoft Mobile for Android.If not,see
* <http://www.gnu.org/licenses/lgpl>.
*/
package com.jaspersoft.android.jaspermobile.widget;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
/**
* @author Tom Koptel
* @since 2.0
*/
public abstract class AbstractPaginationView extends RelativeLayout {
public static final int FIRST_PAGE = 1;
public static final int UNDEFINED_PAGE_NUMBER = -1;
private static final String INSTANCE_STATE = "INSTANCE_STATE";
private static final String CURRENT_PAGE = "CURRENT_PAGE";
private static final String TOTAL_PAGE = "TOTAL_PAGE";
protected OnPageChangeListener onPageChangeListener = OnPageChangeListener.NULL;
protected OnPickerSelectedListener onOnPickerSelectedListener = OnPickerSelectedListener.NULL;
private int currentPage = FIRST_PAGE;
private int mTotalPages = UNDEFINED_PAGE_NUMBER;
public AbstractPaginationView(Context context) {
super(context);
}
public AbstractPaginationView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public AbstractPaginationView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public AbstractPaginationView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public RxPaginationBarView toRx() {
return new RxPaginationBarView(this);
}
public void setOnPageChangeListener(OnPageChangeListener onPageChangeListener) {
if (onPageChangeListener == null) {
this.onPageChangeListener = OnPageChangeListener.NULL;
}
this.onPageChangeListener = onPageChangeListener;
}
public void setOnPickerSelectedListener(OnPickerSelectedListener onOnPickerSelectedListener) {
if (onOnPickerSelectedListener == null) {
this.onOnPickerSelectedListener = OnPickerSelectedListener.NULL;
}
this.onOnPickerSelectedListener = onOnPickerSelectedListener;
}
public void updateCurrentPage(int page) {
currentPage = page;
alterControlStates();
}
public int getCurrentPage() {
return currentPage;
}
public void updateTotalCount(int totalPage) {
mTotalPages = totalPage;
alterTotalCount();
}
public boolean isTotalPagesLoaded() {
return mTotalPages != -1;
}
public int getTotalPages() {
return mTotalPages;
}
public void reset() {
updateTotalCount(-1);
updateCurrentPage(AbstractPaginationView.FIRST_PAGE);
}
@Override
protected void onRestoreInstanceState(Parcelable state) {
Bundle bundle = (Bundle) state;
currentPage = bundle.getInt(CURRENT_PAGE);
mTotalPages = bundle.getInt(TOTAL_PAGE);
Parcelable instanceState = bundle.getParcelable(INSTANCE_STATE);
super.onRestoreInstanceState(instanceState);
}
@Override
protected Parcelable onSaveInstanceState() {
super.onSaveInstanceState();
Bundle bundle = new Bundle();
bundle.putParcelable(INSTANCE_STATE, super.onSaveInstanceState());
bundle.putInt(CURRENT_PAGE, currentPage);
bundle.putInt(TOTAL_PAGE, mTotalPages);
return bundle;
}
protected FragmentManager getFragmentManager() {
FragmentActivity activity = (FragmentActivity) getContext();
return activity.getSupportFragmentManager();
}
/**
* Method responsible for refreshing data inside associated view.
* Total page view represents maximum page count for multi page report.
*/
protected abstract void alterTotalCount();
/**
* Method responsible for refreshing data inside control views.
* Though can be next page, previous page, last and first.
* In general depends on implementation of corresponding swipe component.
*/
protected abstract void alterControlStates();
public interface OnPageChangeListener {
OnPageChangeListener NULL = new OnPageChangeListener() {
@Override
public void onPageSelected(int currentPage) {
}
};
void onPageSelected(int currentPage);
}
public interface OnPickerSelectedListener {
OnPickerSelectedListener NULL = new OnPickerSelectedListener() {
@Override
public void onPagePickerRequested() {
}
};
void onPagePickerRequested();
}
}