package de.theknut.xposedgelsettings.hooks.appdrawer.tabsandfolders; import android.content.Intent; import android.content.res.Configuration; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import java.lang.reflect.Method; import de.theknut.xposedgelsettings.hooks.Common; import de.theknut.xposedgelsettings.hooks.ObfuscationHelper; import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Classes; import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Fields; import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Methods; import de.theknut.xposedgelsettings.hooks.Utils; import static de.robv.android.xposed.XposedHelpers.callMethod; import static de.robv.android.xposed.XposedHelpers.callStaticMethod; import static de.robv.android.xposed.XposedHelpers.getFloatField; import static de.robv.android.xposed.XposedHelpers.getIntField; import static de.robv.android.xposed.XposedHelpers.getObjectField; import static de.robv.android.xposed.XposedHelpers.newInstance; import static de.robv.android.xposed.XposedHelpers.setBooleanField; import static de.robv.android.xposed.XposedHelpers.setObjectField; /** * Created by Alexander Schulz on 22.09.2014. */ public class FolderM extends Folder implements View.OnLongClickListener, View.OnClickListener { public static int FOLDER_ITEM_ID = 0xF01DE5; public FolderM(String folderCfg) { this(folderCfg, true); } public FolderM(String folderCfg, boolean initData) { super(folderCfg, initData); } public FolderM(Intent intent, boolean initData) { super(intent, initData); } public View makeFolderIcon(ViewGroup allAppsGridAdapter) { if (folderIcon == null) { createFolderIcon(allAppsGridAdapter); } else { if (folderIcon.getParent() != null) { ((ViewGroup) folderIcon.getParent()).removeView(folderIcon); } } return folderIcon; } protected void createFolderIcon(ViewGroup appsCustomizeCellLayout) { initData(); int id = Common.LAUNCHER_CONTEXT.getResources().getIdentifier("folder_icon", "layout", Common.HOOKED_PACKAGE); if (id != 0) { Object folderInfo = newInstance(Classes.FolderInfo); setObjectField(folderInfo, "title", getTitle()); setObjectField(folderInfo, Fields.iiScreenId, FOLDER_ID); setObjectField(folderInfo, Fields.iiContainer, -101); setObjectField(folderInfo, Fields.iiID, getId()); String methodName = Methods.fiFromXml + "$"; for (Method method : Classes.FolderIcon.getDeclaredMethods()) { if (method.getName().contains(methodName)) { folderIcon = (View) callStaticMethod(Classes.FolderIcon, method.getName(), id, Common.LAUNCHER_INSTANCE, appsCustomizeCellLayout, folderInfo); break; } } TextView folderName = (TextView) getObjectField(folderIcon, Fields.fiFolderName); setBooleanField(folderName, Fields.btvShadowsEnabled, false); folderName.getPaint().clearShadowLayer(); EditText folderEditName = ((EditText) getObjectField(getObjectField(folderIcon, Fields.fiFolder), Fields.fFolderEditText)); folderEditName.setKeyListener(null); final FolderM folder = this; folderEditName.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { folder.closeFolder(); FolderHelper.getInstance().setupFolderSettings(folder); } } }); folderIcon.setOnLongClickListener(this); folderIcon.setOnClickListener(this); ImageView background = (ImageView) getObjectField(folderIcon, Fields.fiPreviewBackground); ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) background.getLayoutParams(); Object launcherAppState = callStaticMethod(Classes.LauncherAppState, "getInstance"); Object InvDevPro = getObjectField(launcherAppState, "mInvariantDeviceProfile"); if (Common.LAUNCHER_CONTEXT.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { Common.DEVICE_PROFIL = getObjectField(InvDevPro, "landscapeProfile"); } else { Common.DEVICE_PROFIL = getObjectField(InvDevPro, "portraitProfile"); } int padding = getIntField(Common.DEVICE_PROFIL, Fields.dpFolderBackgroundOffset); background.setPadding(0, -padding, 0, 0); folderIcon.setPadding(0, -padding, 0, 0); layoutParams.topMargin = padding; int folderIconSize = Common.APP_DRAWER_ICON_SIZE + (2 * - padding); layoutParams.height = layoutParams.width = folderIconSize; TextView t = ((TextView) getObjectField(folderIcon, Fields.fiFolderName)); t.setCompoundDrawablePadding(0); if (Common.GNL_VERSION < ObfuscationHelper.GNL_5_8_45) { t.setTextSize(0, getIntField(Common.DEVICE_PROFIL, Fields.dpIconTextSize)); } else { t.setTextSize(0, Utils.dpToPx(Math.round(getFloatField(Common.DEVICE_PROFIL, "allAppsIconTextSizeSp")))); } ((ViewGroup.MarginLayoutParams) t.getLayoutParams()).topMargin = Common.APP_DRAWER_ICON_SIZE + (padding * -1); addItems(); } } protected void addItems() { for (Object app : data) { addItem(app); } } public void addItem(Object shortcutInfo) { if (folderIcon != null && shortcutInfo != null) { callMethod(folderIcon, Methods.fiAddItem, shortcutInfo); } } public void closeFolder() { callMethod(Common.LAUNCHER_INSTANCE, Methods.lCloseFolder, getObjectField(folderIcon, "mFolder"), true); } }