/*
* 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.activities.viewer.html.dashboard;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.Toast;
import com.jaspersoft.android.jaspermobile.R;
import com.jaspersoft.android.jaspermobile.dialog.ProgressDialogFragment;
import com.jaspersoft.android.jaspermobile.util.ScrollableTitleHelper;
import com.jaspersoft.android.jaspermobile.webview.WebInterface;
import com.jaspersoft.android.jaspermobile.webview.WebViewEnvironment;
import com.jaspersoft.android.jaspermobile.webview.dashboard.bridge.AmberDashboardExecutor;
import com.jaspersoft.android.jaspermobile.webview.dashboard.bridge.DashboardCallback;
import com.jaspersoft.android.jaspermobile.webview.dashboard.bridge.DashboardExecutor;
import com.jaspersoft.android.jaspermobile.webview.dashboard.bridge.DashboardWebInterface;
import com.jaspersoft.android.jaspermobile.webview.dashboard.bridge.JsDashboardTrigger;
import com.jaspersoft.android.sdk.client.oxm.resource.ResourceLookup;
import org.androidannotations.annotations.Bean;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.InstanceState;
import org.androidannotations.annotations.UiThread;
/**
* @author Tom Koptel
* @since 2.0
*/
@EActivity
public class AmberDashboardActivity extends BaseDashboardActivity implements DashboardCallback {
@InstanceState
protected boolean mMaximized;
@InstanceState
protected boolean mPaused;
private Toast mToast;
private int mOrientation;
private boolean mFavoriteItemVisible, mRefreshItemVisible, mInfoItemVisible;
private MenuItem favoriteAction, refreshAction, aboutAction;
private JsDashboardTrigger mDashboardTrigger;
private DashboardExecutor mDashboardExecutor;
private WebInterface webInterface;
@SuppressLint("ShowToast")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mToast = Toast.makeText(this, "", Toast.LENGTH_LONG);
showMenuItems();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
boolean result = super.onCreateOptionsMenu(menu);
favoriteAction = menu.findItem(R.id.favoriteAction);
refreshAction = menu.findItem(R.id.refreshAction);
aboutAction = menu.findItem(R.id.aboutAction);
return result;
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
boolean result = super.onPrepareOptionsMenu(menu);
favoriteAction.setVisible(mFavoriteItemVisible);
refreshAction.setVisible(mRefreshItemVisible);
aboutAction.setVisible(mInfoItemVisible);
return result;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation != mOrientation && mOrientation != -1 && !mPaused) {
mOrientation = newConfig.orientation;
showLoading();
}
}
@Override
protected void onPause() {
mPaused = true;
if (webInterface != null) {
webInterface.pause();
}
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
mPaused = false;
if (webInterface != null) {
webInterface.resume();
}
}
@Override
protected String getScreenName() {
return getString(R.string.ja_dvs_hn);
}
//---------------------------------------------------------------------
// Abstract methods implementations
//---------------------------------------------------------------------
@Override
public void onWebViewConfigured(WebView webView) {
mDashboardTrigger = JsDashboardTrigger.with(webView);
mDashboardExecutor = AmberDashboardExecutor.newInstance(webView, mServer, resource);
webInterface = DashboardWebInterface.from(this);
WebViewEnvironment
.configure(webView)
.withWebInterface(webInterface);
showInitialLoader();
loadFlow();
}
@Override
public void onPageFinished() {
webView.loadUrl(mScriptTagFactory.getTagCreator(resource).createTag());
}
@Override
public void onRefresh() {
loadFlow();
}
@Override
public void onHomeAsUpCalled() {
if (mMaximized && webView != null) {
mDashboardTrigger.minimizeDashlet();
scrollableTitleHelper.injectTitle(resource.getLabel());
} else {
super.onBackPressed();
}
}
@Override
public void onSessionRefreshed() {
showInitialLoader();
loadFlow();
}
//---------------------------------------------------------------------
// DashboardCallback implementations
//---------------------------------------------------------------------
@UiThread
@Override
public void onMaximizeStart(String title) {
resetZoom();
hideMenuItems();
showLoading();
}
@UiThread
@Override
public void onMaximizeEnd(String title) {
ProgressDialogFragment.dismiss(getSupportFragmentManager());
mMaximized = true;
scrollableTitleHelper.injectTitle(title);
}
@UiThread
@Override
public void onMaximizeFailed(String error) {
hideLoading();
}
@UiThread
@Override
public void onMinimizeStart() {
resetZoom();
showMenuItems();
showLoading();
}
@UiThread
@Override
public void onMinimizeEnd() {
hideLoading();
mMaximized = false;
}
@UiThread
@Override
public void onMinimizeFailed(String error) {
hideLoading();
}
@UiThread
@Override
public void onScriptLoaded() {
runDashboard();
}
@UiThread
@Override
public void onLoadStart() {
}
@UiThread
@Override
public void onLoadDone() {
hideInitialLoader();
}
@UiThread
@Override
public void onLoadError(String error) {
hideLoading();
mToast.setText(error);
mToast.show();
}
@UiThread
@Override
public void onReportExecution(String data) {
}
@UiThread
@Override
public void onWindowResizeStart() {
}
@UiThread
@Override
public void onWindowResizeEnd() {
hideLoading();
}
@Override
public void onAuthError(String message) {
}
@UiThread
@Override
public void onWindowError(String errorMessage) {
showMessage(getString(R.string.failed_load_data));
hideLoading();
}
//---------------------------------------------------------------------
// Helper methods
//---------------------------------------------------------------------
private void loadFlow() {
mDashboardExecutor.prepare();
}
private void runDashboard() {
mDashboardExecutor.execute();
}
private void showInitialLoader() {
webView.setVisibility(View.INVISIBLE);
showLoading();
}
private void hideInitialLoader() {
webView.setVisibility(View.VISIBLE);
hideLoading();
}
private void showMenuItems() {
mFavoriteItemVisible = mRefreshItemVisible = mInfoItemVisible = true;
supportInvalidateOptionsMenu();
}
private void hideMenuItems() {
mFavoriteItemVisible = mRefreshItemVisible = mInfoItemVisible = false;
supportInvalidateOptionsMenu();
}
}