/*
* Copyright (C) Winson Chiu
*
* 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 cw.kop.autobackground;
import android.annotation.TargetApi;
import android.opengl.GLSurfaceView;
import android.os.Build;
import android.service.dreams.DreamService;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import cw.kop.autobackground.files.FileHandler;
import cw.kop.autobackground.settings.AppSettings;
/**
* Created by TheKeeperOfPie on 11/13/2014.
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public class DaydreamService extends DreamService {
private GLSurfaceView glSurfaceView;
private WallpaperRenderer renderer;
private GestureDetector gestureDetector;
private ScaleGestureDetector scaleGestureDetector;
private int touchCount = 0;
@Override
public void onCreate() {
super.onCreate();
AppSettings.initPrefs(this);
gestureDetector = new GestureDetector(this,
new GestureDetector.SimpleOnGestureListener() {
@Override
public void onLongPress(MotionEvent e) {
if (AppSettings.useLongPressReset()) {
renderer.resetPosition();
}
super.onLongPress(e);
}
@Override
public boolean onDoubleTap(MotionEvent e) {
if (AppSettings.useDoubleTap()) {
renderer.loadNext(FileHandler.getNextImage());
}
return super.onDoubleTap(e);
}
@Override
public boolean onScroll(MotionEvent e1,
MotionEvent e2,
float distanceX,
float distanceY) {
if (AppSettings.useDrag() && touchCount == 2) {
renderer.onSwipe(distanceX,
distanceY, 0);
glSurfaceView.requestRender();
return true;
}
return super.onScroll(e1,
e2,
distanceX,
distanceY);
}
});
scaleGestureDetector = new ScaleGestureDetector(this,
new ScaleGestureDetector.SimpleOnScaleGestureListener() {
@Override
public boolean onScale(
ScaleGestureDetector detector) {
if (AppSettings.useScale()) {
renderer.setScaleFactor(detector.getScaleFactor(), 0);
glSurfaceView.requestRender();
return true;
}
return false;
}
});
glSurfaceView = new GLSurfaceView(this);
}
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
setInteractive(true);
setFullscreen(true);
glSurfaceView.setEGLContextClientVersion(2);
renderer = new WallpaperRenderer(DaydreamService.this,
new WallpaperRenderer.Callback() {
@Override
public void setRenderMode(int mode) {
glSurfaceView.setRenderMode(mode);
}
@Override
public void loadCurrent() {
}
@Override
public void requestRender() {
glSurfaceView.requestRender();
}
});
glSurfaceView.setRenderer(renderer);
glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
setContentView(glSurfaceView);
renderer.loadNext(FileHandler.getNextImage());
}
@Override
public void onDreamingStarted() {
super.onDreamingStarted();
glSurfaceView.onResume();
}
@Override
public void onDreamingStopped() {
glSurfaceView.onPause();
super.onDreamingStopped();
}
@Override
public void onDetachedFromWindow() {
renderer.release();
super.onDetachedFromWindow();
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
touchCount = event.getPointerCount();
gestureDetector.onTouchEvent(event);
scaleGestureDetector.onTouchEvent(event);
return super.dispatchTouchEvent(event);
}
}