/*
* 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.share;
import android.content.DialogInterface;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ShareCompat;
import android.support.v4.content.FileProvider;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.jaspersoft.android.jaspermobile.Analytics;
import com.jaspersoft.android.jaspermobile.R;
import com.jaspersoft.android.jaspermobile.dialog.AnnotationOptionsDialog;
import com.jaspersoft.android.jaspermobile.dialog.ProgressDialogFragment;
import com.jaspersoft.android.jaspermobile.domain.ScreenCapture;
import com.jaspersoft.android.jaspermobile.domain.SimpleSubscriber;
import com.jaspersoft.android.jaspermobile.domain.interactor.resource.SaveScreenCaptureCase;
import com.jaspersoft.android.jaspermobile.network.RequestExceptionHandler;
import com.jaspersoft.android.jaspermobile.ui.view.activity.ToolbarActivity;
import com.jaspersoft.android.jaspermobile.widget.AnnotationControlView;
import com.jaspersoft.android.jaspermobile.widget.AnnotationView;
import com.jaspersoft.android.jaspermobile.widget.DraggableViewsContainer;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Extra;
import org.androidannotations.annotations.OptionsItem;
import org.androidannotations.annotations.OptionsMenu;
import org.androidannotations.annotations.ViewById;
import java.io.File;
import javax.inject.Inject;
/**
* @author Andrew Tivodar
* @since 2.5
*/
@EActivity(R.layout.activity_annotation)
@OptionsMenu(R.menu.annotation)
public class AnnotationActivity extends ToolbarActivity implements AnnotationControlView.EventListener {
private static final String CACHE_AUTHORITY = "com.jaspersoft.android.jaspermobile.fileprovider";
@ViewById(R.id.container)
RelativeLayout container;
@ViewById(R.id.reportImage)
ImageView reportImage;
@ViewById(R.id.annotationDrawingContainer)
AnnotationView annotationDrawing;
@ViewById(R.id.annotationControl)
AnnotationControlView annotationControlView;
@ViewById(R.id.annotationNotesContainer)
DraggableViewsContainer annotationNotes;
@Extra
Uri imageUri;
@Inject
SaveScreenCaptureCase mSaveScreenCaptureCase;
@Inject
RequestExceptionHandler mRequestExceptionHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lockScreenOrientation();
}
@AfterViews
void init() {
getBaseActivityComponent().inject(this);
reportImage.setImageURI(imageUri);
getSupportActionBar().setTitle(getString(R.string.annotation_title));
annotationControlView.setEventListener(this);
annotationControlView.setColor(annotationDrawing.getColor());
annotationNotes.setEnabled(false);
}
@Override
protected String getScreenName() {
return getString(R.string.ja_annotation);
}
@OptionsItem(R.id.annotationDoneAction)
void annotationDoneAction() {
ScreenCapture reportScreenCapture = ScreenCapture.Factory.capture(container);
mSaveScreenCaptureCase.execute(reportScreenCapture, new SimpleSubscriber<File>() {
@Override
public void onStart() {
ProgressDialogFragment.builder(getSupportFragmentManager())
.setLoadingMessage(R.string.loading_msg)
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
finish();
}
})
.show();
}
@Override
public void onError(Throwable e) {
mRequestExceptionHandler.showCommonErrorMessage(e);
}
@Override
public void onNext(File item) {
Uri sharedFileUri = FileProvider.getUriForFile(AnnotationActivity.this, CACHE_AUTHORITY, item);
ShareCompat.IntentBuilder.from(AnnotationActivity.this)
.setType("image/*")
.setStream(sharedFileUri)
.setSubject(getString(R.string.share_message))
.setChooserTitle(R.string.share_chooser_title)
.startChooser();
}
@Override
public void onCompleted() {
ProgressDialogFragment.dismiss(getSupportFragmentManager());
analytics.sendEvent(Analytics.EventCategory.RESOURCE.getValue(), Analytics.EventAction.SHARED.getValue(), null);
}
});
}
@Override
public void onModeChanged(int mode) {
annotationDrawing.setEnabled(mode == AnnotationControlView.DRAW_MODE);
annotationNotes.setEnabled(mode == AnnotationControlView.TEXT_MODE);
annotationControlView.setColor(annotationControlView.getMode() == AnnotationControlView.DRAW_MODE
? annotationDrawing.getColor() : annotationNotes.getColor());
}
@Override
public void onClear() {
annotationDrawing.reset();
annotationNotes.removeAllViews();
analytics.sendEvent(Analytics.EventCategory.RESOURCE.getValue(), Analytics.EventAction.ANNOTATED.getValue(), Analytics.EventLabel.CLEARED.getValue());
}
@Override
public void onSizeChangeRequested() {
AnnotationOptionsDialog annotationOptionsDialog = new AnnotationOptionsDialog(this);
annotationOptionsDialog.setSize(annotationControlView.getMode() == AnnotationControlView.DRAW_MODE
? annotationDrawing.getSize() : annotationNotes.getSize());
annotationOptionsDialog.setTitle(annotationControlView.getMode() == AnnotationControlView.DRAW_MODE
? getString(R.string.annotation_pick_line_size) : getString(R.string.annotation_pick_font_size));
annotationOptionsDialog.setBorder(annotationControlView.getMode() == AnnotationControlView.DRAW_MODE
? null : annotationNotes.needsBorder());
annotationOptionsDialog.setOnEventListener(new AnnotationOptionsDialog.OnAnnotationSizeListener() {
@Override
public void onAnnotationOptionsSelected(int size) {
if (annotationControlView.getMode() == AnnotationControlView.DRAW_MODE) {
annotationDrawing.setSize(size);
} else {
annotationNotes.setSize(size);
}
}
@Override
public void onAnnotationOptionsSelected(int size, boolean needsBorder) {
onAnnotationOptionsSelected(size);
annotationNotes.setNeedsBorder(needsBorder);
}
});
annotationOptionsDialog.show();
}
@Override
public void onColorSelected(int color) {
if (annotationControlView.getMode() == AnnotationControlView.DRAW_MODE) {
annotationDrawing.setColor(color);
} else {
annotationNotes.setColor(color);
}
}
private void lockScreenOrientation() {
if (getResources().getConfiguration().orientation == Configuration. ORIENTATION_LANDSCAPE)
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
else
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}