package de.theknut.xposedgelsettings.hooks.appdrawer.tabsandfolders; import android.content.ComponentName; import android.content.pm.PackageInfo; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import de.theknut.xposedgelsettings.hooks.Common; import de.theknut.xposedgelsettings.hooks.ObfuscationHelper.Fields; import de.theknut.xposedgelsettings.hooks.PreferencesHelper; import de.theknut.xposedgelsettings.hooks.Utils; import static de.robv.android.xposed.XposedHelpers.getLongField; import static de.robv.android.xposed.XposedHelpers.getObjectField; /** * Created by Alexander Schulz on 26.09.2014. */ public class AppDrawerItem { public enum SortType { Alphabetically, LastUpdate, LastInstall } protected SortType sortType = SortType.Alphabetically; protected ArrayList data; protected ArrayList<String> rawData; protected String title; protected long id; protected int idx; protected boolean hideFromAppsPage; public ArrayList getData() { return data; } public int getIndex() { return idx; } public void setIndex(int newIdx) { this.idx = newIdx; } public long getId() { return id; } public int getLayoutId() { return 0x80 + (int) getId(); } public void setId(long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public SortType getSortType() { return sortType; } public void setSortType(SortType type) { this.sortType = type; } public boolean hideFromAppsPage() { return this.hideFromAppsPage; } public void setHideFromAppsPage(boolean hide) { this.hideFromAppsPage = hide; } protected ArrayList<String> getRawData(String keyPrefix) { if (this.rawData == null) { PreferencesHelper.prefs.reload(); return new ArrayList<String>(PreferencesHelper.prefs.getStringSet(keyPrefix + "_" + getId(), new HashSet<String>())); } return this.rawData; } public void invalidateRawData() { this.rawData = null; } protected void parseData(String keyPrefix) { PreferencesHelper.prefs.reload(); data = new ArrayList(); ArrayList<String> tabData = new ArrayList<String>(PreferencesHelper.prefs.getStringSet(keyPrefix + "_" + getId(), null)); for (String tab : tabData) { try { Object app = Utils.createAppInfo(ComponentName.unflattenFromString(tab)); if (app != null) data.add(app); } catch (Exception e) { } } sort(data); } protected void sort() { Collections.sort(getData(), getSortComparator()); } protected void sort(final ArrayList apps) { Collections.sort(apps, getSortComparator()); } public Comparator getSortComparator() { if (getSortType() == SortType.LastInstall) { return new Comparator<Object>() { public final int compare(Object a, Object b) { if (getLongField(a, "firstInstallTime") < getLongField(b, "firstInstallTime")) return 1; if (getLongField(a, "firstInstallTime") > getLongField(b, "firstInstallTime")) return -1; return 0; } }; } else if (getSortType() == SortType.LastUpdate) { return new Comparator<Object>() { public final int compare(Object a, Object b) { try { PackageInfo app1 = Common.LAUNCHER_CONTEXT.getPackageManager().getPackageInfo(((ComponentName) getObjectField(a, Fields.aiComponentName)).getPackageName(), 0); PackageInfo app2 = Common.LAUNCHER_CONTEXT.getPackageManager().getPackageInfo(((ComponentName) getObjectField(b, Fields.aiComponentName)).getPackageName(), 0); if (app1.lastUpdateTime < app2.lastUpdateTime) return 1; if (app1.lastUpdateTime > app2.lastUpdateTime) return -1; } catch (Exception e) { e.printStackTrace(); } return 0; } }; } else { return TabHelper.getInstance().getAppNameComparator(); } } @Override public String toString() { return "idx=" + getIndex() + "|" + "id=" + getId() + "|" + "title=" + getTitle() + "|" + "sort=" + getSortType() + "|" + "hide=" + hideFromAppsPage(); } }