package de.theknut.xposedgelsettings.hooks.appdrawer.tabsandfolders; import android.content.Context; import android.content.Intent; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import de.theknut.xposedgelsettings.hooks.Common; import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Classes; import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Fields; import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Methods; import static de.robv.android.xposed.XposedHelpers.callMethod; import static de.robv.android.xposed.XposedHelpers.getLongField; import static de.robv.android.xposed.XposedHelpers.getObjectField; /** * Created by Alexander Schulz on 22.09.2014. */ public class Folder extends AppDrawerItem implements View.OnLongClickListener, View.OnClickListener { public static final String KEY_PREFIX= "folder"; public static final long FOLDER_ID = 0xABCDEF; protected View folderIcon; private long tabId = Tab.APPS_ID; public Folder(String folderCfg) { this(folderCfg, true); } public Folder(String folderCfg, boolean initData) { String[] settings = folderCfg.split("\\|"); for (String setting : settings) { if (setting.startsWith("idx=")) { this.idx = Integer.parseInt(setting.split("=")[1]); } else if (setting.startsWith("id=")) { this.id = Long.parseLong(setting.split("=")[1]); } else if (setting.startsWith("title=")) { this.title = setting.split("=")[1]; } else if (setting.startsWith("hide=")) { this.hideFromAppsPage = Boolean.parseBoolean(setting.split("=")[1]); } else if (setting.startsWith("tabid=")) { this.tabId = Long.parseLong(setting.split("=")[1]); } } if (initData) initData(); } public Folder(Intent intent, boolean initData) { this.id = intent.getLongExtra("itemid", -1); this.idx = intent.getIntExtra("index", -1); this.title = intent.getStringExtra("name"); this.tabId = intent.getLongExtra("tabid", Tab.APPS_ID); this.hideFromAppsPage = intent.getBooleanExtra("hide", false); if (initData) initData(); } protected void addItems() {} protected void addItem(Object shortcutInfo) {} public View makeFolderIcon(ViewGroup appsCustomizeCellLayout) { return null; } protected void createFolderIcon(ViewGroup appsCustomizeCellLayout) {} public View getFolderIcon() { return folderIcon; } @Override public boolean onLongClick(View v) { FolderHelper.getInstance().setupFolderSettings(this); return true; } protected void initData() { parseData(KEY_PREFIX); sort(data); ArrayList tmp = new ArrayList(data.size()); for (Object app : data) { tmp.add(callMethod(app, Methods.aiMakeShortcut)); } data = new ArrayList(tmp); } public ArrayList<String> getRawData() { return getRawData(KEY_PREFIX); } public Context getContext() { if (folderIcon != null) { return folderIcon.getContext(); } return null; } public boolean isOpen() { for (int i = 0; i < Common.DRAG_LAYER.getChildCount(); i++) { View child = Common.DRAG_LAYER.getChildAt(i); if (child.getClass().equals(Classes.Folder)) { return getLongField(getObjectField(child, Fields.fFolderInfo), Fields.iiID) == getId(); } } return false; } public long getTabId() { return tabId; } public void closeFolder() { callMethod(Common.LAUNCHER_INSTANCE, Methods.lCloseFolder); } @Override public String toString() { return super.toString() + "|" + "tabid=" + tabId; } @Override public void onClick(View v) { callMethod(Common.LAUNCHER_INSTANCE, Methods.lOpenFolder, folderIcon); } public boolean contains(String o) { for (String cmp : getRawData()) { if (cmp.contains(o)) return true; } return false; } public void invalidate() { ((ViewGroup) folderIcon.getParent()).removeView(folderIcon); folderIcon = null; } }