package cn.walcl.ulauncher.settings;
import java.net.URISyntaxException;
import java.text.Collator;
import java.util.Comparator;
import cn.walcl.ulauncher.IconCache;
import cn.walcl.ulauncher.IconItemInfo;
import cn.walcl.ulauncher.Launcher;
import cn.walcl.ulauncher.R;
import cn.walcl.ulauncher.ShortcutInfo;
import cn.walcl.ulauncher.appdb.AppDB;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.preference.PreferenceManager;
public class Preferences implements OnSharedPreferenceChangeListener {
private final static String EmptyString = "";
private static Preferences _Current = null;
public static Preferences getInstance() {
if (_Current == null)
_Current = new Preferences();
return _Current;
}
private SharedPreferences mPreferences = null;
private Launcher mLauncher = null;
public void setLauncher(Launcher launcher) {
if (launcher == null && mPreferences != null) {
mPreferences.unregisterOnSharedPreferenceChangeListener(this);
mPreferences = null;
} else if (launcher != null) {
mPreferences = PreferenceManager.getDefaultSharedPreferences(launcher);
mPreferences.registerOnSharedPreferenceChangeListener(this);
PreferenceManager.setDefaultValues(launcher, R.xml.settings, false);
}
mLauncher = launcher;
}
private Intent getIntent(String key) {
String val = mPreferences.getString(PREF_SWIPE_UP_ACTION, EmptyString);
if (val.equals(EmptyString)) {
try {
return Intent.parseUri(val, 0);
} catch (URISyntaxException e) {
return null;
}
} else
return null;
}
static final String PREF_HOMESCREEN_ENDLESS_LOOP = "EndlessHomescreenLoop";
static final String PREF_SWIPE_UP_ACTION = "SwipeUpAction";
static final String PREF_SWIPE_DOWN_ACTION = "SwipeDownAction";
static final String PREF_CURRENT_DRAWER_SORT_ORDER = "CurrentDrawerSortOrder";
public boolean getEndlessScrolling() {
return mPreferences.getBoolean(PREF_HOMESCREEN_ENDLESS_LOOP, true);
}
public Intent getSwipeUpAction() {
return getIntent(PREF_SWIPE_UP_ACTION);
}
public Intent getSwipeDownAction() {
return getIntent(PREF_SWIPE_DOWN_ACTION);
}
private static final int SORT_BY_NAME = 1;
private static final int SORT_BY_LAUNCH_COUNT = 2;
private Comparator<IconItemInfo> mCurrentComparator = null;
private Comparator<IconItemInfo> getAppNameComparator() {
final IconCache myIconCache = mLauncher.getIconCache();
final Collator sCollator = Collator.getInstance();
return new Comparator<IconItemInfo>() {
@Override
public final int compare(IconItemInfo a, IconItemInfo b) {
return sCollator.compare(a.getTitle(myIconCache), b.getTitle(myIconCache));
}
};
}
private Comparator<IconItemInfo> getLaunchCountComparator() {
final AppDB myAppDB = mLauncher.getAppDB();
return new Comparator<IconItemInfo>() {
@Override
public int compare(IconItemInfo a, IconItemInfo b) {
int valA = Integer.MAX_VALUE;
int valB = Integer.MAX_VALUE;
if (a instanceof ShortcutInfo)
valA = myAppDB.getLaunchCounter((ShortcutInfo)a);
if (b instanceof ShortcutInfo)
valB = myAppDB.getLaunchCounter((ShortcutInfo)b);
return valB - valA;
}
};
}
public Comparator<IconItemInfo> getCurrentDrawerComparator() {
if (mCurrentComparator == null) {
int currentMode = Integer.parseInt(mPreferences.getString(PREF_CURRENT_DRAWER_SORT_ORDER,
String.valueOf(SORT_BY_NAME)));
switch(currentMode) {
case SORT_BY_NAME:
mCurrentComparator = getAppNameComparator(); break;
case SORT_BY_LAUNCH_COUNT:
mCurrentComparator = getLaunchCountComparator(); break;
}
}
return mCurrentComparator;
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals(PREF_CURRENT_DRAWER_SORT_ORDER) && mLauncher != null) {
mCurrentComparator = null;
mLauncher.getAllAppsView().sort();
}
}
}