/*
* Copyright 2015. Appsi Mobile
*
* 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 com.appsimobile.appsii;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.PixelFormat;
import android.support.v4.util.CircularArray;
import android.view.Display;
import android.view.Gravity;
import android.view.WindowManager;
/**
* Created by nick on 13/02/15.
*/
public abstract class AbstractHotspotHelper {
final int mDp56;
final WindowManager mWindowManager;
private final Context mContext;
private int mHeight;
public AbstractHotspotHelper(Context context, WindowManager windowManager) {
mContext = context;
mWindowManager = windowManager;
mDp56 = (int) (context.getResources().getDisplayMetrics().density * 56);
}
protected static WindowManager.LayoutParams createInsetParams() {
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(1, 1,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR |
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSPARENT);
layoutParams.gravity = Gravity.TOP;
layoutParams.y = 0;
return layoutParams;
}
protected static WindowManager.LayoutParams updateLayoutParams(boolean left, int y,
WindowManager.LayoutParams params) {
if (left) {
params.gravity = Gravity.LEFT | Gravity.TOP;
} else {
params.gravity = Gravity.RIGHT | Gravity.TOP;
}
params.y = y;
return params;
}
public abstract void setCallback(HotspotHelperListener callback);
public abstract void onOrientationChanged();
public abstract void onDestroy();
public abstract void setVibrate(boolean mVibrate);
public abstract void addHotspots() throws PermissionDeniedException;
public abstract void removeHotspots();
public abstract void onHotspotsLoaded(CircularArray<HotspotItem> configurations);
public abstract int getTopOffset();
@SuppressWarnings("deprecation")
protected WindowManager.LayoutParams createHotspotParams(HotspotItem conf,
SharedPreferences prefs) {
Display display = mWindowManager.getDefaultDisplay();
mHeight = display.getHeight();
float pct = conf.mHeightRelativeToViewHeight;
int realHeight = (int) (mHeight * pct);
if (realHeight < mDp56) realHeight = mDp56;
int y = (int) (conf.mYPosRelativeToView * mHeight);
int hotspotWidth = prefs.getInt("pref_hotspot_width", 22);
int width = (int) (hotspotWidth * AppsiApplication.getDensity(mContext));
int xOffset = 0;
if (conf.mLeft) {
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR |
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.LEFT | Gravity.TOP;
params.x = xOffset;
params.y = y;
params.width = width;
params.height = realHeight;
return params;
} else {
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR |
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.TOP;
params.x = xOffset;
params.y = y;
params.width = width;
params.height = realHeight;
return params;
}
}
}