package com.qmusic.localplugin;
import android.app.Activity;
import android.app.KeyguardManager;
import android.app.KeyguardManager.KeyguardLock;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.PixelFormat;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
import com.qmusic.localplugin.lockscreen.LockScreenReceiver;
import com.qmusic.localplugin.lockscreen.LockScreenView;
public class LockScreenPlug extends BasePlug {
public static final String TAG = LockScreenPlug.class.getSimpleName();
Context ctx;
IntentFilter intentFilter;
LockScreenReceiver lockScreenReceiver;
// ============
private WindowManager mWindowManager;
private View activityView, fullView;
private LayoutParams fullScreenParams, activityParams;
private boolean isLocked;
@Override
public void init(Context ctx) {
this.ctx = ctx;
lockScreenReceiver = new LockScreenReceiver();
intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
intentFilter.addAction(Intent.ACTION_SCREEN_ON);
ctx.registerReceiver(lockScreenReceiver, intentFilter);
}
@Override
public void destory() {
ctx.unregisterReceiver(lockScreenReceiver);
}
private void init2() {
mWindowManager = (WindowManager) ctx.getSystemService(Service.WINDOW_SERVICE);
activityView = new LockScreenView(ctx);
fullScreenParams = createFullParams(ctx);
activityParams = createActivityParams(ctx);
}
private LayoutParams createFullParams(Context ctx) {
LayoutParams fullParams = new LayoutParams();
fullParams.type = LayoutParams.TYPE_SYSTEM_OVERLAY;
fullParams.format = PixelFormat.RGBA_8888;
fullParams.flags = LayoutParams.FLAG_FULLSCREEN | LayoutParams.FLAG_LAYOUT_IN_SCREEN;
fullParams.gravity = Gravity.LEFT | Gravity.TOP;
return fullParams;
}
private LayoutParams createActivityParams(Context ctx) {
LayoutParams mLockViewLayoutParams = new LayoutParams();
mLockViewLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR;
// TYPE_SYSTEM_ERROR 这个可以全屏,覆盖statusbar
// TYPE_SYSTEM_OVERLAY;不能获取事件
// TYPE_SYSTEM_ALERT 虽然能保持最上面,但不能屏蔽按钮
// TYPE_PRIORITY_PHONE 同上
mLockViewLayoutParams.format = PixelFormat.RGBA_8888;// 控制透明度
mLockViewLayoutParams.flags = LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | LayoutParams.FLAG_NOT_TOUCH_MODAL | LayoutParams.FLAG_NOT_FOCUSABLE
| LayoutParams.FLAG_LAYOUT_IN_SCREEN | LayoutParams.FLAG_DISMISS_KEYGUARD | LayoutParams.FLAG_SHOW_WHEN_LOCKED;
// | LayoutParams.FLAG_LAYOUT_INSET_DECOR|
mLockViewLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;
// mLockViewLayoutParams.x = 0;
// mLockViewLayoutParams.y = 0;
// mLockViewLayoutParams.width = LayoutParams.MATCH_PARENT;
// mLockViewLayoutParams.height = LayoutParams.MATCH_PARENT;
// DisplayMetrics displayMetrics =
// ctx.getResources().getDisplayMetrics();
// mLockViewLayoutParams.width = displayMetrics.widthPixels;
// mLockViewLayoutParams.height = displayMetrics.heightPixels;
return mLockViewLayoutParams;
}
@SuppressWarnings("deprecation")
public synchronized void lock() {
if (!isLocked) {
isLocked = true;
if (mWindowManager == null) {
init2();
}
mWindowManager.addView(activityView, activityParams);
KeyguardManager keyguardManager = (KeyguardManager) ctx.getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock("lock");
lock.disableKeyguard();
}
}
public synchronized void unlock() {
if (isLocked) {
isLocked = false;
mWindowManager.removeView(activityView);
}
}
public synchronized void startAnimation() {
mWindowManager.addView(fullView, fullScreenParams);
}
public synchronized void stopAnimation() {
mWindowManager.removeView(fullView);
}
public static final void lockS() {
LockScreenPlug lockScreenPlug = (LockScreenPlug) PluginManager.getPlugin(LockScreenPlug.class.getSimpleName());
if (lockScreenPlug != null) {
lockScreenPlug.lock();
}
}
public static final void unlockS() {
LockScreenPlug lockScreenPlug = (LockScreenPlug) PluginManager.getPlugin(LockScreenPlug.class.getSimpleName());
if (lockScreenPlug != null) {
lockScreenPlug.unlock();
}
}
public static final void startAnimationS() {
LockScreenPlug lockScreenPlug = (LockScreenPlug) PluginManager.getPlugin(LockScreenPlug.class.getSimpleName());
if (lockScreenPlug != null) {
lockScreenPlug.startAnimation();
}
}
public static final void stopAnimationS() {
LockScreenPlug lockScreenPlug = (LockScreenPlug) PluginManager.getPlugin(LockScreenPlug.class.getSimpleName());
if (lockScreenPlug != null) {
lockScreenPlug.stopAnimation();
}
}
}