/** * Copyright (c) 2012 Todoroo Inc * * See the file "LICENSE" for the full license governing this code. */ package com.todoroo.astrid.service; import java.util.ArrayList; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.BitmapDrawable; import com.timsu.astrid.R; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.astrid.data.AddOn; import com.todoroo.astrid.utility.Constants; /** * Astrid Service for managing add-ons * * @author Tim Su <tim@todoroo.com> * */ @SuppressWarnings("nls") public class AddOnService { /** OEM preference key */ private static final String PREF_OEM = "poem"; /** Astrid Power Pack package */ public static final String POWER_PACK_PACKAGE = "com.todoroo.astrid.ppack"; /** Astrid Locale package */ public static final String LOCALE_PACKAGE = "com.todoroo.astrid.locale"; /** Astrid Power Pack label */ public static final String POWER_PACK_LABEL = "Astrid Power Pack"; /** Checks whether power pack should be enabled */ public boolean hasPowerPack() { if (Preferences.getBoolean(PREF_OEM, false)) return true; else if(isInstalled(POWER_PACK_PACKAGE, true)) return true; return false; } /** Checks whether locale plugin should be enabled */ public boolean hasLocalePlugin() { if (Preferences.getBoolean(PREF_OEM, false)) return true; else if(isInstalled(LOCALE_PACKAGE, true)) return true; return false; } /** * Record that a version was an OEM install */ public static void recordOem() { Preferences.setBoolean(PREF_OEM, true); } /** * Check whether a given add-on is installed * @param addOn * @return */ public boolean isInstalled(AddOn addOn) { // it isnt installed if it is null... if (addOn == null) return false; return isInstalled(addOn.getPackageName(), addOn.isInternal()); } /** * Check whether an external add-on is installed * @param packageName * @return */ public boolean isInstalled(String packageName) { return isInstalled(packageName, false); } /** * Check whether a given add-on is installed * @param addOn * @param internal whether to do api sig check * @return */ private boolean isInstalled(String packageName, boolean internal) { if(Constants.PACKAGE.equals(packageName)) return true; Context context = ContextManager.getContext(); String packageSignature = AndroidUtilities.getSignature(context, packageName); if(packageSignature == null) return false; if(!internal) return true; String astridSignature = AndroidUtilities.getSignature(context, Constants.PACKAGE); return packageSignature.equals(astridSignature); } /** * Get one AddOn-descriptor by packageName and title. * * @param packageName could be Constants.PACKAGE or one of AddOnService-constants * @param title the descriptive title, as in "Astrid Power Pack" * @return the addon-descriptor, if it is available (registered here in getAddOns), otherwise null */ public AddOn getAddOn(String packageName, String title) { if (title == null || packageName == null) return null; AddOn addon = null; AddOn[] addons = getAddOns(); for (int i = 0; i < addons.length ; i++) { if (packageName.equals(addons[i].getPackageName()) && title.equals(addons[i].getTitle())) { addon = addons[i]; } } return addon; } /** * Get a list of add-ons * * @return available add-ons */ public AddOn[] getAddOns() { Resources r = ContextManager.getContext().getResources(); // temporary temporary ArrayList<AddOn> list = new ArrayList<AddOn>(3); if(Constants.MARKET_STRATEGY.includesPowerPack()) list.add(new AddOn(false, true, r.getString(R.string.AOA_ppack_title), null, r.getString(R.string.AOA_ppack_description), POWER_PACK_PACKAGE, ((BitmapDrawable)r.getDrawable(R.drawable.icon_pp)).getBitmap())); if(Constants.MARKET_STRATEGY.includesLocalePlugin()) list.add(new AddOn(false, true, r.getString(R.string.AOA_locale_title), null, r.getString(R.string.AOA_locale_description), LOCALE_PACKAGE, ((BitmapDrawable)r.getDrawable(R.drawable.icon_locale)).getBitmap())); return list.toArray(new AddOn[list.size()]); } }