package com.librelio.library.ui;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Application;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.Cursor;
import android.os.Environment;
import com.librelio.library.ui.criteraselectors.CheckedCriteriaSelectorFragment;
import com.librelio.library.ui.criteraselectors.CheckedCriteriaSelectorFragment.OnCriteriaChangedListener;
import com.librelio.library.ui.criteraselectors.RangeCriteriaSelectorFragment;
import com.librelio.library.ui.criteraselectors.RangeCriteriaSelectorFragment.OnRangeCriteriaChangedListener;
import com.librelio.library.ui.lexique.LexiqueFragment;
import com.librelio.library.ui.productdetail.ProductDetailFragment;
import com.librelio.library.ui.productdetail.ProductDetailFragment.ShareProductListener;
import com.librelio.library.ui.productlist.FavoriteProductListFragment;
import com.librelio.library.ui.productlist.ProductListFragment;
import com.librelio.library.ui.productsearch.ProductSearchFragment;
import com.librelio.library.utils.adapters.CursorViewBinder;
import com.librelio.library.utils.db.DBHelper;
import com.niveales.testskis.R;
/**
* @author Dmitry Valetin
*
*/
public class NivealesApplication extends Application {
public static class ProductSearchConstants {
public static final int[] PRODUCT_SEARCH_BINDER_IDS = new int[] {
R.id.productListItemGenre, R.id.productListItemModele,
R.id.productListItemGamme, R.id.productListItemBudget };
public static final String[] PRODUCT_SEARCH_BINDER_COLUMNS = new String[] {
// columns to display in search results list
DBHelper.MODELE_MARQUE_KEY, DBHelper.MODELE_MODELE_KEY,
"Gamme", "Prix_String", };
public static final String[] PRODUCT_SEARCH_SEARCH_COLUMNS = new String[] {
DBHelper.MODELE_MARQUE_KEY, DBHelper.MODELE_MODELE_KEY, "Gamme" };
public static final int PRODUCT_SEARCH_LISTVIEW_ITEM_LAYOUT = R.layout.product_search_item_layout;
public static final int PRODUCT_SEARCH_FAGMENT_LAYOUT = R.layout.product_search_fagment_layout;
}
public static class CriteriaSelectorConstants {
public static final int CRITERIA_SELECTOR_RIGHTPANE_TITLE_TEXTVIEW = R.id.RightPaneTitleTextView;
public static final int CRITERIA_SELECTOR_CRITERIA_CHECKBOX_VIEW_ID = R.id.CriteriaCheckBox;
public static final int CRITERIA_SELECTOR_CRITERIA_TEXTVIEW_VIEW_ID = R.id.CriteriaTextView;
public static final int CRETERIA_SELECTOR_LISTVIEW_VIEW_ID = R.id.CreteriaSelectorListView;
public static final int CHECKED_CRITERIA_SELECTOR_ITEM_LAYOUT_ID = R.layout.checked_criteria_selector_item_layout;
public static final int CRETERIA_SELECTOR_FRAGMENT_LAYOUT_ID = R.layout.creteria_selector_fragment_layout;
public static final int CRETERIA_SELECTOR_TITLE_VIEW_ID = R.id.CriteriaTitle;
}
public static class ProductDetailConstants {
public static final int PRODUCT_DETAIL_SHARE_BUTTON_VIEW_ID = R.id.ShareButton;
public static final int PRODUCT_DETAIL_FAVORITE_CKECKBOX_VIEW_ID = R.id.FavoriteCkeckBox;
public static String[] PRODUCT_DETAIL_HTML_FILE_KEYS = new String[] {
"%TAITLE%",
"%Modele%",
"%Budget%",
"%img%", // product image
"%GAMME%", "%TAILLE TESTEE%", "%TAILLES DISPONIBLES%",
"%type_de_cambre_text%", "%Test_baseline%",
"%Description_Test%", "%Test_avantages%",
"%test_inconvenients%", "%icone_genre%", "%icone_cambres%",
"%icone_wide%", "%icone_top%", "%img_niveau%",
"%img_polyvalence%", "%Caractéristiques%",
"%NIVEAU REQUIS%", "%icone_testerchoice%"
};
public static String[] PRODUCT_DETAIL_COLUMN_KEYS = // List of
// fields in
// product
// html file
new String[] { "Marque", "Modele", "Prix_String", "imgLR", "Gamme",
"test_Taille_testee", "Tailles", "type_de_cambre_text",
"Test_baseline", "Description_Test", "Test_avantages",
"test_inconvenients", "icone_genre", "icone_cambres",
"icone_wide", "icone_top", "img_niveau", "img_polyvalence",
"Caractéristiques", "niveau", "icone_testerchoice"
// List of Details table columns to get data from, used to fill HTML
// fields above
};
public static final int PRODUCT_DETAIL_WEBPAGE_FILE_URI = R.string.ProductDetailWebPage;
public static final int PRODUCT_DETAIL_WEBVIEW_VIEW_ID = R.id.ProductDetailsWebView;
public static final int PRODUCT_DETAIL_LAYOUT = R.layout.product_detail_layout;
// public static final int PRODUCT_DETAIL_SHAREHOLDER_VIEW_ID =
// R.id.ShareHolder;
public static final int PRODUCTDETAIL_NEXTBUTTON_VIEW_ID = R.id.NextButton;
public static final int PRODUCT_DETAIL_PREVBUTTON_VIEW_ID = R.id.PrevButton;
public static final int PRODUCTDETAIL_PRODUCTIMAGE_VIEW_ID = R.id.ProductImageAnchor;
// public static final String HTML_TITLE = "%TAITLE%";
// public static final String HTML_MODELE = "%Modele%";
// public static final String HTML_BUDGET = "%Budget%";
// public static final String HTML_GAMME = "%GAMME%";
// public static final String HTML_CHARACTER = "%CARACTERE%";
// public static final String HTML_NIVEAU_REQUIS = "%NIVEAU REQUIS%";
// public static final String HTML_TALLE_TESTEE = "%TAILLE TESTEE%";
// public static final String HTML_TEST_BASELINE = "%Test_baseline%";
// public static final String HTML_DESC = "%Description_Test%";
// public static final String HTML_TEST_ADV = "%Test_avantages%";
// public static final String HTML_TEST_DISADV = "%test_inconvenients%";
// public static final String HTML_CHARACTERISTICS =
// "%Caractéristiques%";
// public static final String HTML_ICON_TESTCHOICE =
// "%icone_testerchoice%";
// public static final String HTML_ICON_SEX = "%icone_genre%";
// public static final String HTML_PIC = "%img%";
public static final int PRODUCTDETAIL_PRODUCTIMAGE_POPUP_LAYOUT_ID = R.layout.product_image_popup;
}
public static final String DETAIL_TABLE_NAME = "Detail";
private static class ProductListConstants {
private static String[] PRODUCT_LIST_DISPLAY_COLUMNS = new String[] {
DBHelper.MODELE_MARQUE_KEY, DBHelper.MODELE_MODELE_KEY,
"icone_genre", "icone_cambres", "Gamme", "Prix_String",
"icone_wide", "icone_testerchoice", "imgLR"
// DBHelper.MODELE_PRIX_DE_REFERENCE_KEY,
// DBHelper.MODELE_GENRE_KEY,
// DBHelper.MODELE_IMG_KEY
};
private static int[] PRODUCT_LIST_DISPLAY_VIEW_IDS = new int[] {
R.id.productListItemGenre, R.id.productListItemModele,
R.id.productListItemFemale, R.id.productListItemChambre,
R.id.productListItemGamme, R.id.productListItemBudget,
R.id.productListItemWide, R.id.productListItemTesterChoice,
R.id.productListItemPicture };
private static final int PRODUCT_LIST_FAGMENT_LAYOUT = R.layout.product_list_fagment_layout;
private static final int PRODUCT_LIST_LISTVIEW_ITEM_LAYOUT = R.layout.product_list_item_layout;
private static final int PRODUCT_LIST_LISTVIEW_VIEW_ID = R.id.ProductListView;
/**
* list of button ids in product list layout
*/
private static final int[] PRODUCT_LIST_SORT_BUTTON_IDS = new int[] {
R.id.ProductListMarqueSortButton,
R.id.ProductListGammeSortButton, R.id.ProductListPrixSortButton };
private static final String[] PRODUCT_LIST_SORT_COLUMNS = new String[] {
"Marque", "Gamme", "Prix_de_reference" };
}
// Global constants
public static String DB_FILE_NAME;// = "snowsurf_tests2013_.sqlite";
// Bitly constants
public static final String BITLY_USER = "tedted1";
public static final String BITLY_API_KEY = "R_d0e2739e13391fc7cc6a7c66966239b4";
// App constants
public static final String MAIN_TAB_ID = "tab_id";
public static final String ASSETS_URI = "file:///android_asset/";
public static final String ASSETS_PHOTOS_URI = ASSETS_URI + "Photos/";
public static final String SELECTED_ID = "selectedid";
public static final String SELECTED_VALUE = "selected_value";
public static final String SELECTED_CRITERIA_ID = "criteria_id";
public static final String SELECTED = "Selected.png";
public static final String UNSELECTED = "NotSelected.png";
public static final String NUMERIC = "Numeric";
private static DBHelper mDBHelper;
// UI function helpers to help customize future apps
public ProductDetailFragment getProductDetailFragment(Cursor pCursor,
ShareProductListener pListener) {
ProductDetailFragment f = new ProductDetailFragment();
f.setOnShareProductListener(pListener);
f.setProductCursor(pCursor);
return f;
}
public ProductListFragment getProductListFragment() {
return ProductListFragment.getInstance(DETAIL_TABLE_NAME,
ProductListConstants.PRODUCT_LIST_FAGMENT_LAYOUT,
ProductListConstants.PRODUCT_LIST_LISTVIEW_VIEW_ID,
ProductListConstants.PRODUCT_LIST_LISTVIEW_ITEM_LAYOUT,
ProductListConstants.PRODUCT_LIST_SORT_BUTTON_IDS,
ProductListConstants.PRODUCT_LIST_SORT_COLUMNS,
new CursorViewBinder(this,
ProductListConstants.PRODUCT_LIST_DISPLAY_COLUMNS,
ProductListConstants.PRODUCT_LIST_DISPLAY_VIEW_IDS));
}
public FavoriteProductListFragment getFavoriteProductListFragment() {
return FavoriteProductListFragment.getInstance(getDBHelper(),
DETAIL_TABLE_NAME,
ProductListConstants.PRODUCT_LIST_FAGMENT_LAYOUT,
ProductListConstants.PRODUCT_LIST_LISTVIEW_VIEW_ID,
ProductListConstants.PRODUCT_LIST_LISTVIEW_ITEM_LAYOUT,
ProductListConstants.PRODUCT_LIST_SORT_BUTTON_IDS,
ProductListConstants.PRODUCT_LIST_SORT_COLUMNS,
new CursorViewBinder(this,
ProductListConstants.PRODUCT_LIST_DISPLAY_COLUMNS,
ProductListConstants.PRODUCT_LIST_DISPLAY_VIEW_IDS));
}
public ProductSearchFragment getProductSearchFragment(int searchEditTextId) {
return ProductSearchFragment.getInstance(getDBHelper(),
DETAIL_TABLE_NAME,
ProductSearchConstants.PRODUCT_SEARCH_FAGMENT_LAYOUT,
ProductListConstants.PRODUCT_LIST_LISTVIEW_VIEW_ID,
ProductSearchConstants.PRODUCT_SEARCH_LISTVIEW_ITEM_LAYOUT,
searchEditTextId,
ProductSearchConstants.PRODUCT_SEARCH_SEARCH_COLUMNS,
new CursorViewBinder(this,
ProductSearchConstants.PRODUCT_SEARCH_BINDER_COLUMNS,
ProductSearchConstants.PRODUCT_SEARCH_BINDER_IDS));
}
public LexiqueFragment getLexiqueFragment(DBHelper helper) {
return LexiqueFragment.getInstance(helper,
R.layout.lexique_fragment_layout, R.id.LexiqueListView,
R.layout.lexique_list_item_layout, new int[] {
R.id.LexiqueItemTerm, R.id.LexiqueItemTermDefinition });
}
public RangeCriteriaSelectorFragment getRangeCriteriaSelectorFragment(
DBHelper helper, String type, String criteria, String colName,
OnRangeCriteriaChangedListener l) {
return RangeCriteriaSelectorFragment
.getInstance(
type,
criteria,
CriteriaSelectorConstants.CRITERIA_SELECTOR_RIGHTPANE_TITLE_TEXTVIEW,
helper, this, colName,
R.layout.range_criteria_selector_layout,
R.id.MinPriceInputField, R.id.MaxPriceInputField, l);
}
public CheckedCriteriaSelectorFragment getCheckedCriteriaSelectorFragment(
int pPosition, OnCriteriaChangedListener l) {
return CheckedCriteriaSelectorFragment.getInstance(pPosition, l);
}
public static String copyFileToExternalDirectory(Context context, String pic,
AssetManager assets) {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File externalDir = context.getExternalCacheDir();
if (externalDir.canWrite()) {
try {
String fileName = pic.split("/")[pic.split("/").length - 1];
File newPic = new File(externalDir.getAbsolutePath() + "/" + fileName);
byte[] buffer = new byte[1024];
BufferedOutputStream bos = new BufferedOutputStream(
new FileOutputStream(newPic));
BufferedInputStream bis = new BufferedInputStream(
assets.open(pic));
int count = 0;
while ((count = bis.read(buffer, 0, 1024)) > 0) {
bos.write(buffer, 0, count);
}
bos.close();
bis.close();
return newPic.getAbsolutePath();
} catch (IOException e) {
e.printStackTrace();
return null;
}
} else {
return null;
}
}
return null;
}
public static DBHelper getDBHelper() {
return mDBHelper;
}
public static void setDBHelper(DBHelper pDbHelper) {
mDBHelper = pDbHelper;
}
@Override
public void onCreate() {
super.onCreate();
InputStream is;
try {
is = getAssets().open("customization.json");
BufferedReader reader = new BufferedReader(
new InputStreamReader(is));
StringWriter writer = new StringWriter();
char[] buffer = new char[1024];
int count = 0;
while ((count = reader.read(buffer)) > 0) {
writer.write(buffer, 0, count);
}
JSONObject json = new JSONObject(writer.toString());
DB_FILE_NAME = json.getString("DB_FILE_NAME");
JSONArray htmlKeys = json
.getJSONArray("PRODUCT_DETAIL_HTML_FILE_KEYS");
ProductDetailConstants.PRODUCT_DETAIL_HTML_FILE_KEYS = new String[htmlKeys
.length()];
for (int i = 0; i < htmlKeys.length(); i++) {
ProductDetailConstants.PRODUCT_DETAIL_HTML_FILE_KEYS[i] = htmlKeys
.getString(i);
}
JSONArray columnKeys = json
.getJSONArray("PRODUCT_DETAIL_COLUMN_KEYS");
ProductDetailConstants.PRODUCT_DETAIL_COLUMN_KEYS = new String[columnKeys
.length()];
for (int i = 0; i < columnKeys.length(); i++) {
ProductDetailConstants.PRODUCT_DETAIL_COLUMN_KEYS[i] = columnKeys
.getString(i);
}
JSONArray displayColumns = json
.getJSONArray("PRODUCT_LIST_DISPLAY_COLUMNS");
ProductListConstants.PRODUCT_LIST_DISPLAY_COLUMNS = new String[displayColumns
.length()];
for (int i = 0; i < displayColumns.length(); i++) {
ProductListConstants.PRODUCT_LIST_DISPLAY_COLUMNS[i] = displayColumns
.getString(i);
}
JSONArray displayViewIds = json
.getJSONArray("PRODUCT_LIST_DISPLAY_VIEW_IDS");
ProductListConstants.PRODUCT_LIST_DISPLAY_VIEW_IDS = new int[displayViewIds
.length()];
for (int i = 0; i < displayViewIds.length(); i++) {
String resourceName = displayViewIds.getString(i);
ProductListConstants.PRODUCT_LIST_DISPLAY_VIEW_IDS[i] = getResources()
.getIdentifier(resourceName, "id", getPackageName());
}
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
}
}