/** * PHR_AndroidNative * * Copyright (C) 1999-2014 Photon Infotech Inc. * * 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.photon.phresco.nativeapp.eshop.activity; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import org.json.JSONException; import org.json.JSONObject; import org.xml.sax.SAXException; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.res.AssetManager; import android.content.res.Resources; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.DisplayMetrics; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.Toast; import com.google.gson.Gson; import com.photon.phresco.nativeapp.R; import com.photon.phresco.nativeapp.eshop.config.ConfigReader; import com.photon.phresco.nativeapp.eshop.config.Configuration; import com.photon.phresco.nativeapp.eshop.core.Constants; import com.photon.phresco.nativeapp.eshop.logger.PhrescoLogger; import com.photon.phresco.nativeapp.eshop.model.appconfig.AppConfig; import com.photon.phresco.nativeapp.eshop.model.errormessage.ErrorManager; /** * Parent class which extends Activity class, for all the activities in * application * * @author viral_b * */ public class PhrescoActivity extends Activity { private static final String TAG = "PhrescoActivity *********** "; private static final int ERROR_DIALOG_FLAG = 0; private String errMessage = "errorMessage"; private String cancelFlag = "cancelFlag"; private static AppConfig appConfigJSONObj; private JSONObject appConfigJSONResponseObj = null; // private static Properties properties; private int screenHeight; private int screenWidth; private static final String WEB_SERVICE = "WebService"; private String protocol = "protocol"; private String host = "host"; private String port = "port"; private String context = "context"; private String additionalContext = "additional_context"; /** * @return the appConfigJSONObj */ public static AppConfig getAppConfigJSONObj() { return appConfigJSONObj; } /** * @param appConfigJSONObj * the appConfigJSONObj to set */ public static void setAppConfigJSONObj(AppConfig appConfigJSONObj) { PhrescoActivity.appConfigJSONObj = appConfigJSONObj; } /** * @return the appConfigJSONResponseObj */ public JSONObject getAppConfigJSONResponseObj() { return appConfigJSONResponseObj; } /** * @param appConfigJSONResponseObj * the appConfigJSONResponseObj to set */ public void setAppConfigJSONResponseObj(JSONObject appConfigJSONResponseObj) { this.appConfigJSONResponseObj = appConfigJSONResponseObj; } /** * @return the propertiesr *//* public static Properties getProperties() { return properties; } *//** * @param properties * the properties to set *//* public static void setProperties(Properties properties) { PhrescoActivity.properties = properties; }*/ /** * @return the screenHeight */ public int getScreenHeight() { return screenHeight; } /** * @param screenHeight * the screenHeight to set */ public void setScreenHeight(int screenHeight) { this.screenHeight = screenHeight; } /** * @return the screenWidth */ public int getScreenWidth() { return screenWidth; } /** * @param screenWidth * the screenWidth to set */ public void setScreenWidth(int screenWidth) { this.screenWidth = screenWidth; } private DisplayMetrics metrics = new DisplayMetrics(); @Override protected void onCreate(Bundle savedInstanceState) { try { super.onCreate(savedInstanceState); this.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); this.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); setScreenHeight(getDeviceScreenHeight()); setScreenWidth(getDeviceScreenWidth()); } catch (Exception ex) { PhrescoLogger.info(TAG + "onCreate : Exception: " + ex.toString()); PhrescoLogger.warning(ex); } } @Override public void onBackPressed() { return; } /** * Read phresco-env-config.xml file to get to connect to web service */ public void readConfigXML() { try { Resources resources = getResources(); AssetManager assetManager = resources.getAssets(); // Read from the /assets directory InputStream inputStream = assetManager .open(Constants.PHRESCO_ENV_CONFIG); ConfigReader confReaderObj = new ConfigReader(inputStream); PhrescoLogger.info(TAG + "Default ENV = " + confReaderObj.getDefaultEnvName()); List<Configuration> configByEnv = confReaderObj.getConfigByEnv(confReaderObj.getDefaultEnvName()); for (Configuration configuration : configByEnv) { String envName = configuration.getEnvName(); String envType = configuration.getType(); PhrescoLogger.info(TAG + "envName = " + envName + " ----- envType = " + envType); //properties = configuration.getProperties(); if(envType.equalsIgnoreCase("webservice")) { String configName = configuration.getName(); String configJsonString = confReaderObj.getConfigAsJSON(envName, WEB_SERVICE, configName); getWebServiceURL(configJsonString); } else if (envType.equalsIgnoreCase("server")) { /*String configJsonString = confReaderObj.getConfigAsJSON(envName, SERVER, SERVER_CONFIG_NAME); getServerURL(configJsonString);*/ } } } catch (ParserConfigurationException ex) { PhrescoLogger.info(TAG + "readConfigXML : ParserConfigurationException: " + ex.toString()); PhrescoLogger.warning(ex); } catch (SAXException ex) { PhrescoLogger.info(TAG + "readConfigXML : SAXException: " + ex.toString()); PhrescoLogger.warning(ex); } catch (IOException ex) { PhrescoLogger.info(TAG + "readConfigXML : IOException: " + ex.toString()); PhrescoLogger.warning(ex); } catch (Exception ex) { PhrescoLogger.info(TAG + "readConfigXML : Exception: " + ex.toString()); PhrescoLogger.warning(ex); } } private void getWebServiceURL(String configJsonString) { try { JSONObject jsonObject = new JSONObject(configJsonString); String webServiceProtocol = jsonObject.getString(protocol).endsWith("://") ? jsonObject.getString(protocol) : jsonObject.getString(protocol) + "://"; // http:// String webServiceHost = jsonObject.getString(port).equalsIgnoreCase("") ? (jsonObject.getString(host).endsWith("/") ? jsonObject.getString(host): jsonObject.getString(host) + "/") : jsonObject.getString(host); // localhost/ // localhost String webServicePort = jsonObject.getString(port).equalsIgnoreCase("") ? "" : (jsonObject.getString(port).startsWith(":") ? jsonObject.getString(port) : ":" + jsonObject.getString(port)); // "" // (blank) // :1313 String webServiceContext = jsonObject.getString(context).startsWith("/") ? jsonObject.getString(context) : "/" + jsonObject.getString(context); // /phresco Constants.setWebContextURL(webServiceProtocol + webServiceHost + webServicePort + webServiceContext + "/"); Constants.setRestAPI(Constants.REST_API); PhrescoLogger.info(TAG + "getWebServiceURL() - Constants.webContextURL : " + Constants.getWebContextURL() + Constants.getRestAPI()); } catch (JSONException e) { PhrescoLogger.info(TAG + " EnvConstuctor - Exception " + e.toString()); PhrescoLogger.warning(e); } } /* * Don't Remove this method */ private void getServerURL(String configJsonString) { try { JSONObject jsonObject = new JSONObject(configJsonString); String webServiceProtocol = jsonObject.getString(protocol).endsWith( "://") ? jsonObject.getString(protocol) : jsonObject.getString(protocol) + "://"; // http:// String webServiceHost = jsonObject.getString(port).equalsIgnoreCase( "") ? (jsonObject.getString(host).endsWith("/") ? jsonObject.getString(host) : jsonObject.getString(host) + "/") : jsonObject.getString(host); // localhost/ // localhost String webServicePort = jsonObject.getString(port).equalsIgnoreCase( "") ? "" : (jsonObject.getString(port).startsWith(":") ? jsonObject.getString(port) : ":" + jsonObject.getString(port)); // "" // (blank) // :1313 String webServiceContext = jsonObject.getString(context).startsWith( "/") ? jsonObject.getString(context) : "/" + jsonObject.getString(context); // /phresco String webServiceAdditionalContext = null; try { webServiceAdditionalContext = jsonObject.getString( additionalContext).startsWith("/") ? jsonObject.getString(additionalContext) : "/" + jsonObject.getString(additionalContext); } catch (Exception e) { webServiceAdditionalContext = null; } if (webServiceAdditionalContext != null && webServiceAdditionalContext.length() > 1) {// > 1 beacuse of // "/" Constants.setWebContextURL(webServiceProtocol + webServiceHost + webServicePort + webServiceContext + webServiceAdditionalContext + "&userAgent=android"); } else { Constants.setWebContextURL(webServiceProtocol + webServiceHost + webServicePort + webServiceContext + "?userAgent=android"); } PhrescoLogger.info(TAG + "getServerURL() - Constants.webContextURL : " + Constants.getWebContextURL()); } catch (JSONException e) { // TODO Auto-generated catch block PhrescoLogger.info(TAG + " EnvConstuctor - Exception " + e.toString()); PhrescoLogger.warning(e); } } /** * Make a standard toast that just contains a text view with the text from a * resource, for long time * * @param str * The resource id of the string resource to use. Can be * formatted text. */ public void toast(int str) { Toast toast = Toast.makeText(this, str, Toast.LENGTH_LONG); toast.setGravity(LinearLayout.VERTICAL, 0, 0); toast.show(); } /** * Make a standard toast that just contains a text view, for long time * * @param str * The text to show. Can be formatted text. */ public void toast(String str) { Toast toast = Toast.makeText(this, str, Toast.LENGTH_SHORT); toast.setGravity(LinearLayout.VERTICAL, 0, 0); toast.show(); } /** * Make a standard toast that just contains a text view with the text from a * resource. * * @param str * The resource id of the string resource to use. Can be * formatted text. * @param length * How long to display the message. Either LENGTH_SHORT or * LENGTH_LONG */ public void toast(int str, int length) { Toast toast = Toast.makeText(this, str, length); toast.setGravity(LinearLayout.VERTICAL, 0, 0); toast.show(); } /** * The screen density expressed as dpi * * @return int * * @return May be either DENSITY_LOW, DENSITY_MEDIUM, or DENSITY_HIGH. */ protected int getScreenDensity() { int screenDensity = 0; try { getWindowManager().getDefaultDisplay().getMetrics(metrics); switch (metrics.densityDpi) { case DisplayMetrics.DENSITY_LOW: PhrescoLogger.info(TAG + "DENSITY_LOW"); break; case DisplayMetrics.DENSITY_MEDIUM: PhrescoLogger.info(TAG + "DENSITY_MEDIUM"); break; case DisplayMetrics.DENSITY_HIGH: PhrescoLogger.info(TAG + "DENSITY_HIGH"); break; case DisplayMetrics.DENSITY_XHIGH: PhrescoLogger.info(TAG + "DENSITY_EXTRA_HIGH"); break; } PhrescoLogger.info(TAG + "densityDpi: " + metrics.densityDpi); PhrescoLogger.info(TAG + "density: " + metrics.density); PhrescoLogger.info(TAG + "heightPixels: " + metrics.heightPixels); PhrescoLogger.info(TAG + "widthPixels: " + metrics.widthPixels); screenDensity = metrics.densityDpi; } catch (Exception ex) { PhrescoLogger.info(TAG + "getScreenDensity: Exception: " + ex.toString()); PhrescoLogger.warning(ex); } return screenDensity; } private int getDeviceScreenHeight() { getWindowManager().getDefaultDisplay().getMetrics(metrics); return metrics.heightPixels; } private int getDeviceScreenWidth() { getWindowManager().getDefaultDisplay().getMetrics(metrics); return metrics.widthPixels; } /** * Show the error message dialog box with OK button * * @param errorMessage */ public void showErrorDialog(String errorMessage) { try { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage(errorMessage) .setTitle(R.string.app_name) .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { finish(); // System.runFinalizersOnExit(true); android.os.Process .killProcess(android.os.Process .myPid()); } }); @SuppressWarnings("unused") AlertDialog alert = builder.show(); } catch (Exception ex) { PhrescoLogger.info(TAG + "showErrorDialog: " + ex.toString()); PhrescoLogger.warning(ex); } } /** * Show error message dialog box with OK and Cancel buttons * * @param errorMessage * @param cancelFlag */ public void showErrorDialog(String errorMessage, boolean cancelFlag) { PhrescoLogger .info(TAG + "showErrorDialog : cancelFlag = " + cancelFlag); try { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }).setMessage(errorMessage).setTitle(R.string.app_name) .setCancelable(false); @SuppressWarnings("unused") AlertDialog alert = builder.show(); } catch (Exception ex) { PhrescoLogger.info(TAG + "showErrorDialog: " + ex.toString()); PhrescoLogger.warning(ex); } } /** * Handler to call the method to show the error message dialog */ private Handler showErrorDialogHandler = new Handler() { @Override public void handleMessage(Message msg) { PhrescoLogger.info(TAG + " - Inside showErrorDialogHandler : "); super.handleMessage(msg); processError(msg); } }; /** * Process the error message dialog as per the data recevied * * @param msg */ private void processError(Message msg) { try { Bundle data = msg.getData(); if (data != null) { if (data.getBoolean(cancelFlag)) { showErrorDialog(data.getString(errMessage), data.getBoolean(cancelFlag)); } else { showErrorDialog(data.getString(errMessage)); } } } catch (Exception ex) { PhrescoLogger.info(TAG + " - splashHandler - Exception : " + ex.toString()); PhrescoLogger.warning(ex); } } /** * Call the error dialog handler method to open the normal error dialog box * with OK button */ public void showNormalErrorDialog() { try { PhrescoLogger .info(TAG + " processOnComplete - readAppConfigJSON - showErrorDialogHandler :"); Message msg = new Message(); Bundle errorMessageBundle = new Bundle(); errorMessageBundle.putString(errMessage, getString(R.string.http_connect_error_message)); msg.setData(errorMessageBundle); msg.what = ERROR_DIALOG_FLAG; showErrorDialogHandler.sendMessage(msg); } catch (Exception ex) { PhrescoLogger.info(TAG + " - showNormalErrorDialog - Exception : " + ex.toString()); PhrescoLogger.warning(ex); } } /** * Call the error dialog handler method to open the normal error dialog box * with OK and Cancel buttons */ public void showErrorDialogWithCancel() { try { PhrescoLogger.info(TAG + " processOnComplete - showErrorDialogHandler :"); Message msg = new Message(); Bundle errorMessageBundle = new Bundle(); errorMessageBundle.putString(errMessage, getString(R.string.http_connect_error_message)); errorMessageBundle.putBoolean(cancelFlag, true); msg.setData(errorMessageBundle); msg.what = ERROR_DIALOG_FLAG; showErrorDialogHandler.sendMessage(msg); } catch (Exception ex) { PhrescoLogger.info(TAG + " - showErrorDialogWithCancel - Exception : " + ex.toString()); PhrescoLogger.warning(ex); } } /** * Get the ErrorManager GSON object, when there is error returned from web * server * * @param errorJSONObj * @return ErrorManager */ public static ErrorManager getErrorGSONObject(JSONObject errorJSONObj) { ErrorManager errorManagerObj = null; PhrescoLogger.info(TAG + "getErrorGSONObject() - JSON STRING : " + errorJSONObj.toString()); try { Gson jsonObj = new Gson(); errorManagerObj = jsonObj.fromJson(errorJSONObj.toString(), ErrorManager.class); PhrescoLogger.info(TAG + "getErrorGSONObject() - ERROR JSON OBJECT : " + errorJSONObj.toString()); } catch (Exception ex) { PhrescoLogger.info(TAG + "getErrorGSONObject: Exception : " + ex.toString()); PhrescoLogger.warning(ex); } return errorManagerObj; } }