/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.launcher.catalogue;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import com.android.launcher.R;
import android.content.Context;
import android.content.SharedPreferences;
import android.widget.TextView;
public final class AppCatalogueFilters {
private static AppCatalogueFilters sInstance;
public synchronized static AppCatalogueFilters getInstance() {
if (sInstance == null) {
sInstance = new AppCatalogueFilters();
}
return sInstance;
}
public class Catalogue {
private final int mIndex;
private final SharedPreferences mPreferences;
private final String mTitle;
public Catalogue(String title, int index) {
mIndex = index;
mTitle = title;
mPreferences = mContext.getSharedPreferences(APP_GROUP_PREFS_PREFIX + index, 0);
}
public String getTitle() {
return mTitle;
}
public SharedPreferences getPreferences() {
return mPreferences;
}
public int getIndex() {
return mIndex;
}
public void setTitleView(TextView v) {
if (mTitle != null) {
v.setText(mTitle);
} else {
v.setText(R.string.AppGroupAdd);
}
}
}
private final static String PREF_GRP_NAME = "GrpName";
private final static String APP_GROUP_PREFS_PREFIX = "APP_CATALOG_";
private Context mContext = null;
private final AppCatalogueFilter mDrawerFilter = new AppCatalogueFilter();
private SharedPreferences mAllGroupsIndex = null;
private final Hashtable<Integer, Catalogue> mAllAppGroups = new Hashtable<Integer, Catalogue>();
private AppCatalogueFilters() {}
public AppCatalogueFilter getDrawerFilter() {
return mDrawerFilter;
}
public String getGroupTitle(int index) {
if (!mAllAppGroups.containsKey(index))
return null;
return mAllAppGroups.get(index).getTitle();
}
public synchronized void dropGroup(int index)
{
if (!mAllAppGroups.containsKey(index))
return; // invalid index, do nothing.
Catalogue cat = mAllAppGroups.get(index);
SharedPreferences.Editor ed = cat.getPreferences().edit();
ed.clear();
ed.commit();
SharedPreferences.Editor editor = mAllGroupsIndex.edit();
editor.remove(PREF_GRP_NAME + index);
editor.commit();
mAllAppGroups.remove(index);
}
public synchronized final int createNewGroup(String grpName) {
int grp = getFirstFreeGroupIndex();
SharedPreferences.Editor editor = mAllGroupsIndex.edit();
editor.putString("GrpName"+grp, grpName);
editor.commit();
Catalogue cat = new Catalogue(grpName, grp);
mAllAppGroups.put(grp, cat);
return grp;
}
private int getFirstFreeGroupIndex() {
int result = 0;
while (true) {
if (!mAllAppGroups.containsKey(++result))
return result;
}
}
public SharedPreferences getGroupPreferences(int index) {
if (!mAllAppGroups.containsKey(index))
return null;
return mAllAppGroups.get(index).getPreferences();
}
public synchronized void init(Context context) {
if (context == null && mContext == null)
return; // We cant initialize without a context!
if (context != null)
mContext = context;
mAllGroupsIndex = context.getSharedPreferences(APP_GROUP_PREFS_PREFIX + "Index" , 0);
Map<String, ?> allGrps = mAllGroupsIndex.getAll();
final int prefNameLen = PREF_GRP_NAME.length();
for(String key : allGrps.keySet()) {
if (key.startsWith(PREF_GRP_NAME)) {
String title = mAllGroupsIndex.getString(key, "");
int index = Integer.parseInt(key.substring(prefNameLen));
Catalogue cat = new Catalogue(title, index);
mAllAppGroups.put(index, cat);
}
}
}
public List<Catalogue> getAllGroups() {
List<Catalogue> result = new ArrayList<Catalogue>(mAllAppGroups.size());
for (Catalogue itm : mAllAppGroups.values()) {
result.add(itm);
}
return result;
}
public List<Integer> getGroupsAndSpecialGroupIndexes() {
List<Integer> result = new ArrayList<Integer>();
result.add(AppGroupAdapter.APP_GROUP_ALL);
for (Integer idx : mAllAppGroups.keySet())
result.add(idx);
Collections.sort(result);
return result;
}
public Catalogue getCatalogue(int index) {
if (mAllAppGroups.containsKey(index))
return mAllAppGroups.get(index);
else
return null;
}
public int getUserCatalogueCount() {
return mAllAppGroups.size();
}
}