package com.asha.nightowl.custom;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.NonNull;
import android.support.v7.view.menu.BaseMenuPresenter;
import android.support.v7.view.menu.MenuPresenter;
import android.support.v7.widget.ActionMenuView;
import android.support.v7.widget.Toolbar;
import android.view.View;
import com.asha.nightowllib.NightOwlUtil;
import com.asha.nightowllib.handler.annotations.OwlHandle;
import com.asha.nightowllib.handler.impls.AbsSkinHandler;
import com.asha.nightowllib.paint.IOwlPaint;
import java.lang.reflect.Field;
/**
* Created by hzqiujiadi on 15/11/11.
* hzqiujiadi ashqalcn@gmail.com
*/
@OwlHandle(Toolbar.class)
public class ToolbarHandler extends AbsSkinHandler implements OwlCustomTable.OwlToolbar {
public ToolbarHandler() {
}
public static class PopupThemePaint implements IOwlPaint{
private static Field sActionMenuViewField;
private static Field sPresenterField;
private static Field sContextField;
static {
try {
sActionMenuViewField = Toolbar.class.getDeclaredField("mMenuView");
sActionMenuViewField.setAccessible(true);
sPresenterField = ActionMenuView.class.getDeclaredField("mPresenter");
sPresenterField.setAccessible(true);
sContextField = BaseMenuPresenter.class.getDeclaredField("mContext");
sContextField.setAccessible(true);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
@Override
public void draw(@NonNull View view, @NonNull Object value) {
Toolbar toolbar = (Toolbar) view;
int themeId = (int) value;
try {
ActionMenuView actionMenuView = (ActionMenuView) sActionMenuViewField.get(toolbar);
if ( actionMenuView == null ){
toolbar.getContext().setTheme(themeId);
} else {
MenuPresenter presenter = (MenuPresenter) sPresenterField.get(actionMenuView);
Context context = (Context) sContextField.get(presenter);
context.setTheme(themeId);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
toolbar.setPopupTheme((Integer) value);
}
@Override
public Object[] setup(@NonNull View view, @NonNull TypedArray a, int attr) {
Toolbar toolbar = (Toolbar) view;
int theme1 = toolbar.getPopupTheme();
int theme2 = a.getResourceId(attr,0);
return new Integer[]{theme1,theme2};
}
}
public static class TitleTextColorPaint implements IOwlPaint{
@Override
public void draw(@NonNull View view, @NonNull Object value) {
Toolbar toolbar = (Toolbar) view;
int color = (int) value;
toolbar.setTitleTextColor(color);
}
@Override
public Object[] setup(@NonNull View view, @NonNull TypedArray a, int attr) {
Toolbar toolbar = (Toolbar) view;
int color1 = NightOwlUtil.getFieldIntSafely(Toolbar.class, "mTitleTextColor", toolbar);
int color2 = a.getColor(attr,color1);
return new Integer[]{ color1,color2 };
}
}
}