/*
* GlowNotifier Application for Android
* Copyright (C) 2013 Youngbin Han<sukso96100@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.hybdms.glownotifier;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.os.IBinder;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.WindowManager;
import android.widget.ImageView;
import android.graphics.PixelFormat;
import java.util.Timer;
import java.util.TimerTask;
public class GlowOverlay extends Service {
private ImageView mGlowOverlay;
private WindowManager.LayoutParams mParams;
private WindowManager mWindowManager;
private TimerTask mTask;
private Timer mTimer;
private String DEBUGTAG = "GlowOverlay";
@Override
public IBinder onBind(Intent arg0) { return null; }
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(DEBUGTAG, "Service Started");
//Create Image View
mGlowOverlay = new ImageView(this);
//Load Preference Value
SharedPreferences pref = getSharedPreferences("pref", Context.MODE_PRIVATE);
int posentry_int = pref.getInt("posentry",0);
int ratio_int = pref.getInt("ratiovalue", 50);
int shape_int = pref.getInt("shapentry", 0);
int colormethod_int = pref.getInt("colormethodentry", 0);
int color_int = 0;
//Load Color Value
if(colormethod_int == 0){
color_int = pref.getInt("colorvalue", Color.WHITE);
}
else if(colormethod_int == 1){
color_int = intent.getIntExtra("autocolorvalue", Color.WHITE);
}
else{
SharedPreferences colorpref = getSharedPreferences("colorpref", Context.MODE_PRIVATE);
String color_key = "color" + intent.getStringExtra("pkgname");
color_int = colorpref.getInt(color_key, Color.WHITE);
}
//Get Device Screen Width Value
DisplayMetrics metrics = getApplicationContext().getResources().getDisplayMetrics();
int devicewidth = metrics.widthPixels;
//change width ratio value by loaded pref value
double ratiovalue = ratio_int * 0.01;
GradientDrawable g;
if(shape_int == 0){
//Circular Gradient Drawable
g = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]
{ color_int, Color.argb(0, Color.red(color_int), Color.green(color_int), Color.blue(color_int)) });
g.setGradientType(GradientDrawable.RADIAL_GRADIENT);
g.setGradientRadius((float) (devicewidth * ratiovalue));
}
else{
//Linear Gradient Drawable
GradientDrawable.Orientation linear_orientation;
if(posentry_int == 0){
linear_orientation = GradientDrawable.Orientation.TOP_BOTTOM;
}
else{
linear_orientation = GradientDrawable.Orientation.BOTTOM_TOP;
}
g = new GradientDrawable(linear_orientation, new int[]
{ color_int, Color.argb(0, Color.red(color_int), Color.green(color_int), Color.blue(color_int)) });
g.setGradientType(GradientDrawable.LINEAR_GRADIENT);
g.setSize(devicewidth, (int) (devicewidth * ratiovalue));
}
if(posentry_int == 0){
//If posentry value is 0 (Top)
g.setGradientCenter(0.5f, 0.0f);
}
else{
//If posentry value is 1 (Bottom)
g.setGradientCenter(0.5f, 1.0f);
}
mGlowOverlay.setImageDrawable(g);
//Get width and height from the image
int WRAP_CONTENT_WIDTH = mGlowOverlay.getDrawable().getIntrinsicWidth();
int WRAP_CONTENT_HEIGHT = mGlowOverlay.getDrawable().getIntrinsicHeight();
//Settings for Overlay
mParams = new WindowManager.LayoutParams(
WRAP_CONTENT_WIDTH,
WRAP_CONTENT_HEIGHT,
WindowManager.LayoutParams.TYPE_TOAST,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE //Not Focusable
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, //GlowOverlay Never Receives Touch Input
PixelFormat.TRANSLUCENT); //Transparent
//Gravity of The Overlay
if(posentry_int == 0){
//If posentry value is 0 (Top)
mParams.gravity = Gravity.TOP | Gravity.CENTER;
}
else{
//If posentry value is 1 (Bottom)
mParams.gravity = Gravity.BOTTOM | Gravity.CENTER;
}
// mGlowOverlay.setScaleType(ImageView.ScaleType.FIT_XY);
mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
mWindowManager.addView(mGlowOverlay, mParams);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
super.onCreate();
SharedPreferences pref = getSharedPreferences("pref", Context.MODE_PRIVATE);
int glowdelay_int = Integer.parseInt(pref.getString("delaytime", "5000"));
// Stop this Service in a few seconds
mTask = new TimerTask() {
@Override
public void run() {
stopSelf();
}
};
mTimer = new Timer();
mTimer.schedule(mTask, glowdelay_int);
//Remove the View
if(mWindowManager != null) {
if(mGlowOverlay != null) mWindowManager.removeView(mGlowOverlay);
}
}
@Override
public void onDestroy() {
//Remove the View
if(mWindowManager != null) {
if(mGlowOverlay != null) mWindowManager.removeView(mGlowOverlay);
}
super.onDestroy();
}
}