package de.theknut.xposedgelsettings.hooks.androidintegration;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Build;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
import de.theknut.xposedgelsettings.hooks.Common;
import de.theknut.xposedgelsettings.hooks.HooksBaseClass;
import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Fields;
import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Methods;
import de.theknut.xposedgelsettings.hooks.PreferencesHelper;
import de.theknut.xposedgelsettings.hooks.common.CommonHooks;
import de.theknut.xposedgelsettings.hooks.common.XGELSCallback;
import static de.robv.android.xposed.XposedHelpers.callMethod;
import static de.robv.android.xposed.XposedHelpers.getIntField;
/**
* Created by Alexander Schulz on 03.08.2014.
*/
public class SystemBars extends HooksBaseClass {
public static void initAllHooks(LoadPackageParam lpparam) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
CommonHooks.LauncherOnResumeListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
boolean show = ((Boolean) callMethod(Common.LAUNCHER_INSTANCE, Methods.lHasCustomContentToLeft)
&& getIntField(Common.WORKSPACE_INSTANCE, Fields.pvCurrentPage) == 0);
setGradientVisbility(show);
}
});
CommonHooks.LauncherFinishBindingItems.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
boolean show = ((Boolean) callMethod(Common.LAUNCHER_INSTANCE, Methods.lHasCustomContentToLeft)
&& getIntField(Common.WORKSPACE_INSTANCE, Fields.pvCurrentPage) == 0)
&& Common.LAUNCHER_CONTEXT.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
setGradientVisbility(show);
}
});
CommonHooks.LauncherOnPauseListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
setGradientVisbility(true);
}
});
if (Common.PACKAGE_OBFUSCATED) {
CommonHooks.OnNowShowListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
if (Common.LAUNCHER_CONTEXT.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
setGradientVisbility(true);
}
}
});
}
CommonHooks.PageEndMovingListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
boolean show = ((Boolean) callMethod(Common.LAUNCHER_INSTANCE, Methods.lHasCustomContentToLeft)
&& getIntField(Common.WORKSPACE_INSTANCE, Fields.pvCurrentPage) == 0)
&& Common.LAUNCHER_CONTEXT.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
setGradientVisbility(show);
}
});
} else if (PreferencesHelper.transparentSystemBars) {
CommonHooks.LauncherOnResumeListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
boolean show = ((Boolean) callMethod(Common.LAUNCHER_INSTANCE, Methods.lHasCustomContentToLeft)
&& getIntField(Common.WORKSPACE_INSTANCE, Fields.pvCurrentPage) == 0);
setGradientVisbility(show);
}
});
CommonHooks.LauncherOnPauseListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
setGradientVisbility(true);
}
});
if (Common.PACKAGE_OBFUSCATED) {
CommonHooks.OnNowShowListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
setGradientVisbility(true);
}
});
}
CommonHooks.PageBeginMovingListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
setGradientVisbility(false);
}
});
CommonHooks.PageEndMovingListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
boolean show = ((Boolean) callMethod(Common.LAUNCHER_INSTANCE, Methods.lHasCustomContentToLeft)
&& getIntField(Common.WORKSPACE_INSTANCE, Fields.pvCurrentPage) == 0);
setGradientVisbility(show);
}
});
CommonHooks.MoveToDefaultScreenListeners.add(new XGELSCallback() {
@Override
public void onBeforeHookedMethod(MethodHookParam param) throws Throwable {
setGradientVisbility(false);
}
});
}
}
private static void setGradientVisbility(boolean show) {
Intent myIntent = new Intent(Common.XGELS_INTENT);
myIntent.putExtra(Common.XGELS_ACTION_EXTRA, Common.XGELS_ACTION_OTHER);
myIntent.putExtra(Common.XGELS_ACTION, "SHADOWS");
myIntent.putExtra("SHOW", show);
Common.LAUNCHER_CONTEXT.sendBroadcast(myIntent);
}
}