package zenproject.meditation.android.activities;
import android.os.Bundle;
import android.view.View;
import zenproject.meditation.android.R;
import zenproject.meditation.android.ui.menu.dialogs.Navigator;
import zenproject.meditation.android.sketch.ZenSketch;
import zenproject.meditation.android.ui.menu.ZenMenu;
import zenproject.meditation.android.sketch.actions.clear.SketchClearer;
import zenproject.meditation.android.sketch.actions.screenshot.ScreenshotTaker;
import zenproject.meditation.android.sketch.actions.share.SketchSharer;
import zenproject.meditation.android.ui.menu.buttons.FloatingActionButton;
import zenproject.meditation.android.ui.menu.buttons.MenuButton;
import zenproject.meditation.android.ui.sketch.ZenSketchView;
@SuppressWarnings({"PMD.TooManyMethods", "PMD.FieldDeclarationsShouldBeAtStartOfClass"})
public class SketchActivity extends ZenActivity implements View.OnAttachStateChangeListener {
private final ZenSketch zenSketch;
private ZenMenu zenMenu;
private Navigator navigator;
private ScreenshotTaker screenshotTaker;
private SketchClearer sketchClearer;
private SketchSharer sketchSharer;
private ZenSketchView zenSketchView;
public SketchActivity() {
this(ZenSketch.newInstance());
}
protected SketchActivity(ZenSketch zenSketch) {
this.zenSketch = zenSketch;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sketch);
zenSketchView = (ZenSketchView) findViewById(R.id.sketch);
zenSketchView.addOnAttachStateChangeListener(this);
zenMenu = ZenMenu.newInstance(zenSketchView);
navigator = Navigator.newInstance();
screenshotTaker = ScreenshotTaker.newInstance();
sketchClearer = SketchClearer.newInstance(zenSketchView);
sketchSharer = SketchSharer.newInstance();
}
@Override
protected void onStart() {
super.onStart();
zenSketch.start();
}
@Override
protected void onResume() {
super.onResume();
zenSketch.resume();
}
@Override
public void onViewAttachedToWindow(View v) {
zenSketch.injectInto(zenSketchView);
attachListeners();
}
private void attachListeners() {
zenSketch.setOnPaintingListener(zenMenu);
zenSketchView.setSketchClearListener(sketchClearer);
getMenuOptionViewFor(MenuButton.BRUSH).setOnClickListener(brushOptionsListener);
getMenuOptionViewFor(MenuButton.FLOWER).setOnClickListener(flowerOptionsListener);
getMenuOptionViewFor(MenuButton.RESTART).setOnClickListener(restartListener);
getMenuOptionViewFor(MenuButton.MENU).setOnClickListener(menuToggleListener);
getMenuOptionViewFor(MenuButton.SCREENSHOT).setOnClickListener(screenshotListener);
getMenuOptionViewFor(MenuButton.SHARE).setOnClickListener(shareListener);
}
private FloatingActionButton getMenuOptionViewFor(MenuButton menuButton) {
return zenMenu.getButtonViewFor(menuButton);
}
@Override
public void onViewDetachedFromWindow(View v) {
detachListeners();
}
private void detachListeners() {
zenSketch.setOnPaintingListener(null);
zenSketchView.setSketchClearListener(null);
getMenuOptionViewFor(MenuButton.BRUSH).setOnClickListener(null);
getMenuOptionViewFor(MenuButton.FLOWER).setOnClickListener(null);
getMenuOptionViewFor(MenuButton.RESTART).setOnClickListener(null);
getMenuOptionViewFor(MenuButton.MENU).setOnClickListener(null);
getMenuOptionViewFor(MenuButton.SCREENSHOT).setOnClickListener(null);
getMenuOptionViewFor(MenuButton.SHARE).setOnClickListener(null);
}
@Override
protected void onPause() {
zenSketch.pause();
super.onPause();
}
@Override
protected void onStop() {
zenSketch.stop();
super.onStop();
}
@Override
protected void onDestroy() {
zenSketch.destroy();
super.onDestroy();
}
/**
* Listeners which controls painting flow and menu operations.
* TODO Consider extracting this listeners into classes. This way they can be tested.
*/
private final View.OnClickListener menuToggleListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
zenMenu.toggle();
}
};
private final View.OnClickListener restartListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
sketchClearer.clearSketch();
}
};
private final View.OnClickListener brushOptionsListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
navigator.openBrushSelectionDialog();
}
};
private final View.OnClickListener flowerOptionsListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
navigator.openFlowerSelectionDialog();
}
};
private final View.OnClickListener shareListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
sketchSharer.shareSketch();
}
};
private final View.OnClickListener screenshotListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
screenshotTaker.takeScreenshot();
}
};
}