package me.barrasso.android.volume.popup;
import android.graphics.PixelFormat;
import android.util.Property;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.FrameLayout;
import me.barrasso.android.volume.media.VolumePanelInfo;
import me.barrasso.android.volume.ui.CmBatteryBar;
import me.barrasso.android.volume.R;
import me.barrasso.android.volume.media.StreamResources;
import me.barrasso.android.volume.utils.SettingsHelper;
import static me.barrasso.android.volume.LogUtils.LOGD;
import static me.barrasso.android.volume.LogUtils.LOGI;
/**
* Very simple theme, based on the MIUI Battery Bar concept but for volume_3!
*/
public class VolumeBarPanel extends VolumePanel {
public static final String TAG = VolumeBarPanel.class.getSimpleName();
public static final Property<VolumeBarPanel, Integer> BAR_HEIGHT =
Property.of(VolumeBarPanel.class, Integer.TYPE, "barHeight");
public static final VolumePanelInfo<VolumeBarPanel> VOLUME_PANEL_INFO =
new VolumePanelInfo<VolumeBarPanel>(VolumeBarPanel.class);
static {
VOLUME_PANEL_INFO.properties = new Property[] { BAR_HEIGHT };
}
public VolumeBarPanel(PopupWindowManager pWindowManager) {
super(pWindowManager);
}
protected int barHeight;
CmBatteryBar volumeBar;
@Override
public void onCreate() {
super.onCreate();
volumeBar = new CmBatteryBar(getContext());
volumeBar.setId(android.R.id.progress);
volumeBar.setColor(color);
mLayout = volumeBar;
}
@Override
public SettingsHelper loadSettings() {
SettingsHelper settingsHelper = super.loadSettings();
setBarHeight(settingsHelper.getIntProperty(VolumeBarPanel.class, BAR_HEIGHT, getBarHeight()));
return settingsHelper;
}
protected void updateHeight() {
volumeBar.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getBarHeight()));
}
public void setBarHeight(int newHeight) {
LOGI(TAG, "setBarHeight(" + newHeight + ")");
barHeight = newHeight;
updateHeight();
}
public int getBarHeight() {
if (barHeight <= 0)
return getResources().getDimensionPixelSize(R.dimen.volume_bar_height);
return barHeight;
}
@Override
public void setColor(int color) {
super.setColor(color);
if (null != volumeBar)
volumeBar.setColor(color);
}
@Override
public void onStreamVolumeChange(int streamType, int volume, int max) {
boolean isMute = isMuted(streamType);
StreamResources resources = StreamResources.resourceForStreamType(streamType);
LOGD(TAG, "onStreamVolumeChange(" + streamType + ", " + volume + ", " + max + "), mute=" + isMute);
volumeBar.setMax(max);
volumeBar.setProgress(volume);
volumeBar.setTag(resources);
updateHeight();
show();
}
@Override public boolean isInteractive() { return true; }
@Override public WindowManager.LayoutParams getWindowLayoutParams() {
int flags = (WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH |
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL |
WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN |
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED );
WindowManager.LayoutParams WPARAMS = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR, flags, PixelFormat.TRANSLUCENT);
WPARAMS.windowAnimations = android.R.style.Animation_Dialog;
WPARAMS.packageName = getContext().getPackageName();
WPARAMS.setTitle(TAG);
WPARAMS.rotationAnimation = WindowManager.LayoutParams.ROTATION_ANIMATION_JUMPCUT;
WPARAMS.gravity = (Gravity.FILL_HORIZONTAL | Gravity.TOP);
WPARAMS.screenBrightness = WPARAMS.buttonBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE;
return WPARAMS;
}
}