Blame | Last modification | View Log | RSS feed
package com.saholic.profittill.main;import android.app.AlertDialog;import android.app.Fragment;import android.app.ProgressDialog;import android.content.Context;import android.content.Intent;import android.content.SharedPreferences;import android.graphics.Bitmap;import android.net.ConnectivityManager;import android.net.Uri;import android.os.AsyncTask;import android.os.Bundle;import android.os.Handler;import android.util.Base64;import android.util.Log;import android.view.KeyEvent;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.webkit.CookieManager;import android.webkit.CookieSyncManager;import android.webkit.HttpAuthHandler;import android.webkit.JavascriptInterface;import android.webkit.WebView;import android.webkit.WebViewClient;import com.google.android.gms.common.ConnectionResult;import com.google.android.gms.common.api.GoogleApiClient;import com.google.android.gms.plus.Plus;import com.mixpanel.android.mpmetrics.MixpanelAPI;import com.saholic.profittill.Constants.ProfitTillConstants;import com.saholic.profittill.R;import com.saholic.profittill.Utils.UtilityFunctions;import com.testin.agent.TestinAgent;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;public class MyWallet extends Fragment implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener{WebView myWalletWebView;SharedPreferences userData;SharedPreferences apiData;SharedPreferences.Editor userDataEditor;SharedPreferences.Editor apiSettingsEditor;String saholicUrl;JSONObject jSaholic;JSONArray jsArraySaholic;int pageRedirect=0;boolean displayActionBar;String type1;public GoogleApiClient mGoogleApiClient;ArrayList<NameValuePair> nameValuePairsRawHtml;public MyWallet() {}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// Inflate the layout for this fragmentView rootView = inflater.inflate(R.layout.fragment_my_wallet, container, false);TestinAgent.init(getActivity());MixpanelAPI mixpanel = MixpanelAPI.getInstance(getActivity(), ProfitTillConstants.MIX_PANEL_TOKEN);userData = getActivity().getSharedPreferences("User_Data", Context.MODE_PRIVATE);apiData = getActivity().getSharedPreferences("API_Data", Context.MODE_PRIVATE);userDataEditor = userData.edit();apiSettingsEditor = apiData.edit();TestinAgent.setUserInfo(userData.getString("id", ""));String url = apiData.getString("mywallet.url",null);String id = userData.getString("id",null);String landingUrl = url + "?user_id=" + id;JSONObject props = new JSONObject();try {mixpanel.identify(userData.getString("id",null));props.put("Screen", "My Wallet");mixpanel.track("My Wallet", props);} catch (JSONException e) {e.printStackTrace();}type1 = userData.getString("type",null);if(isInternetOn()) {if(type1!=null && type1.equalsIgnoreCase("google")) {mGoogleApiClient = new GoogleApiClient.Builder(getActivity()).addConnectionCallbacks(this).addOnConnectionFailedListener(this).addApi(Plus.API).addScope(Plus.SCOPE_PLUS_LOGIN).build();mGoogleApiClient.connect();}WebClientClass webViewClient = new WebClientClass();myWalletWebView = (WebView) rootView.findViewById(R.id.myWalletWebView);myWalletWebView.setClickable(true);myWalletWebView.setFocusableInTouchMode(true);myWalletWebView.getSettings().setDomStorageEnabled(true);myWalletWebView.getSettings().setJavaScriptEnabled(true);myWalletWebView.addJavascriptInterface(new javascriptInterface(getActivity()), "HTMLOUT");if(Uri.parse(landingUrl).getHost().contains("api.profittill")) {userDataEditor.putString("saholic.data", UtilityFunctions.clearCookiesNew(landingUrl,getActivity())).commit();}CookieSyncManager.createInstance(getActivity());CookieManager cookieManager = CookieManager.getInstance();cookieManager.setCookie(url, "token="+userData.getString("token",""));cookieManager.setCookie(url, "walletAuthentication=true");myWalletWebView.loadUrl(landingUrl);myWalletWebView.setWebViewClient(webViewClient);}else{SearchFragment nextFrag= new SearchFragment();Bundle args = new Bundle();args.putString("finishingurl", landingUrl);args.putString("fragmentNumber", "17");nextFrag.setArguments(args);getActivity().getFragmentManager().beginTransaction().replace(R.id.frame_container, nextFrag).addToBackStack(null).commit();}return rootView;}@Overridepublic void onViewCreated(View view, Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);}JSONObject obj;public void getDisplayActionBar(String url) throws Exception{String snapdealConfirmation = apiData.getString("snapdeal.order.success.url",null);String flipkartConfirmation = apiData.getString("flipkart.order.success.url",null);String amazonConfirmation = apiData.getString("amazon.order.success.url",null);String amazonThankYouConfirmation = apiData.getString("amazon.order.success.thankyou.url",null);String saholicConfirmation = apiData.getString("saholic.order.success.url",null);if(url.contains(snapdealConfirmation) || url.contains(flipkartConfirmation) || url.contains(amazonConfirmation) || url.contains(amazonThankYouConfirmation) || url.contains(saholicConfirmation)){displayActionBar=true;String storeID = getStoreId(url);if(storeID==null){Log.e("Deals Page Activity", "Null value returned for storeID");}else{nameValuePairsRawHtml=new ArrayList<NameValuePair>();nameValuePairsRawHtml.add(new BasicNameValuePair("user_id",userData.getString("id",null)));nameValuePairsRawHtml.add(new BasicNameValuePair("store_id",storeID));nameValuePairsRawHtml.add(new BasicNameValuePair("order_url",url));nameValuePairsRawHtml.add(new BasicNameValuePair("sub_tag",userData.getString("subtag",null)));}}else{displayActionBar = false;}return;}public String getStoreId(String url){if(url.contains("snapdeal")){pageRedirect=Integer.parseInt(apiData.getString("pageredirect.snapdeal","0"));return apiData.getString("store.code.snapdeal",null);}else if(url.contains("flipkart")){pageRedirect=Integer.parseInt(apiData.getString("pageredirect.flipkart","0"));return apiData.getString("store.code.flipkart",null);}else if(url.contains("amazon")){pageRedirect=Integer.parseInt(apiData.getString("pageredirect.amazon","0"));return apiData.getString("store.code.amazon",null);}else if(url.contains("saholic")){return apiData.getString("store.code.spice",null);}return null;}@Overridepublic void onConnected(Bundle bundle) {}@Overridepublic void onConnectionSuspended(int i) {}@Overridepublic void onConnectionFailed(ConnectionResult connectionResult) {}public class WebClientClass extends WebViewClient {ProgressDialog pd = null;@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);try {getDisplayActionBar(url);}catch (Exception e){e.printStackTrace();}}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);obj = new JSONObject();try {if(Uri.parse(url).getHost().contains("saholic") && userData.getString("saholic.data","false").equalsIgnoreCase("true")){saholicUrl=url;view.loadUrl("javascript:window.HTMLOUT.saholicHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");}else {JSONObject j = new JSONObject();JSONArray jsArray = new JSONArray();j.put("url", url);j.put("user_id", userData.getString("id", null));j.put("time", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));jsArray.put(j);obj.put("pushdata", jsArray);new pushData().execute();}} catch (JSONException e) {e.printStackTrace();}if(displayActionBar){view.loadUrl("javascript:window.HTMLOUT.flipkartHTML('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');");}view.setOnKeyListener(new View.OnKeyListener(){@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event){if(event.getAction() == KeyEvent.ACTION_DOWN){WebView webView = (WebView) v;switch(keyCode){case KeyEvent.KEYCODE_BACK:if(webView.canGoBack()){webView.goBack();return true;}else{Intent i = new Intent(getActivity(),MainActivity.class);i.putExtra("displayView","0");startActivity(i);}break;}}return false;}});}@Overridepublic void onReceivedHttpAuthRequest(WebView view,HttpAuthHandler handler, String host, String realm) {handler.proceed("dtr", "dtr18Feb2015");}@Overridepublic void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {super.onReceivedError(view, errorCode, description, failingUrl);SearchFragment nextFrag= new SearchFragment();Bundle args = new Bundle();args.putString("finishingurl",failingUrl);nextFrag.setArguments(args);getActivity().getFragmentManager().beginTransaction().replace(R.id.frame_container, nextFrag).addToBackStack(null).commit();}@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {if(url.contains(apiData.getString("wallet.auth","api.profittill.com/special/native/login"))){/*Toast.makeText(getActivity(), apiData.getString("wallet.error", "Error while logging in to the wallet. Please log in again"), Toast.LENGTH_LONG).show();*/AlertDialog alert;AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());builder.setMessage(apiData.getString("wallet.auth.message","You are not authenticated. Please log in again")).setCancelable(false);alert = builder.create();alert.show();android.webkit.CookieManager cookieManager = android.webkit.CookieManager.getInstance();android.webkit.CookieSyncManager.createInstance(getActivity());cookieManager.removeAllCookie();try{if (mGoogleApiClient.isConnected()) {Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);mGoogleApiClient.disconnect();mGoogleApiClient.connect();redirectPage(alert);/*userDataEditor.clear().commit();startActivity(new Intent(getActivity(), LoginActivity.class));*/}else{if(!mGoogleApiClient.isConnected()){redirectPage(alert);/* userDataEditor.clear().commit();startActivity(new Intent(getActivity(), LoginActivity.class));*/}}}catch (Exception e){redirectPage(alert);/* userDataEditor.clear().commit();startActivity(new Intent(getActivity(), LoginActivity.class));*/}return true;}return false;}}public void redirectPage(final AlertDialog builder){Handler h =new Handler();h.postDelayed(new Runnable() {@Overridepublic void run() {if(builder!=null){builder.dismiss();}userDataEditor.clear().commit();startActivity(new Intent(getActivity(), LoginActivity.class));}},3000);}@Overridepublic void onResume() {super.onResume();getView().setFocusableInTouchMode(true);getView().requestFocus();getView().setOnKeyListener(new View.OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {Intent i = new Intent(getActivity(), MainActivity.class);i.putExtra("displayView", "0");startActivity(i);return true;}return false;}});}class pushData extends AsyncTask<String, Integer, String> {@Overrideprotected void onPreExecute() {super.onPreExecute();}@Overrideprotected String doInBackground(String... arg0) {HttpClient httpclient = new DefaultHttpClient();try {ArrayList<NameValuePair> nameValuePairs = new ArrayList<>();nameValuePairs.add(new BasicNameValuePair("pushdata",obj.toString()));HttpPost httppost = new HttpPost(apiData.getString("url.push.api",null));httppost.setHeader("Authorization", ProfitTillConstants.BASIC_AUTH);httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));System.out.println(obj.toString());StringEntity se = new StringEntity(obj.toString());HttpResponse response = httpclient.execute(httppost);int status = response.getStatusLine().getStatusCode();if(status == 200){return "success";} else {return "failure";}} catch (ClientProtocolException e) {return "failure";} catch (IOException e) {return "failure";}}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);}}public final boolean isInternetOn() {ConnectivityManager connec =(ConnectivityManager)getActivity().getSystemService(getActivity().getBaseContext().CONNECTIVITY_SERVICE);if ( connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTED ||connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.CONNECTING ||connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTING ||connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.CONNECTED ) {return true;} else if (connec.getNetworkInfo(0).getState() == android.net.NetworkInfo.State.DISCONNECTED ||connec.getNetworkInfo(1).getState() == android.net.NetworkInfo.State.DISCONNECTED ) {return false;}return false;}class checkGateWayProblem extends AsyncTask<String, Integer, String> {@Overrideprotected void onPreExecute() {super.onPreExecute();}@Overrideprotected String doInBackground(String... arg0) {HttpClient httpclient = new DefaultHttpClient();try {HttpPost httppost = new HttpPost(arg0[0]);final String basicAuth = "Basic " + Base64.encodeToString("dtr:dtr18Feb2015".getBytes(), Base64.NO_WRAP);httppost.setHeader("Authorization", basicAuth);HttpResponse response = httpclient.execute(httppost);int status = response.getStatusLine().getStatusCode();jsArraySaholic = new JSONArray();jSaholic.put("url", arg0[0]);jSaholic.put("time", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));jSaholic.put("httpstatus", status);jSaholic.put("cookies", CookieManager.getInstance().getCookie(arg0[0]));jsArraySaholic.put(jSaholic);obj.put("pushdata", jsArraySaholic);Log.d("status " ,"Status in checkGatewayProbelm " + status);if(status == 200){return "success";} else {return "failure";}} catch (ClientProtocolException e) {return "failure";} catch (IOException e) {return "failure";}catch (JSONException e){return "failure";}}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);new pushData1().execute(obj);}}class javascriptInterface {Context mContext;/*** Instantiate the interface and set the context*/public javascriptInterface(Context c) {mContext = c;}@JavascriptInterfacepublic void saholicHTML(String html) {try {obj = new JSONObject();jSaholic = new JSONObject();jSaholic.put("html", UtilityFunctions.compress(html));jSaholic.put("zip", "1");jSaholic.put("user_id", userData.getString("id", null));} catch (Exception e) {}new checkGateWayProblem().execute(saholicUrl);}@JavascriptInterfacepublic void flipkartHTML(String html) {nameValuePairsRawHtml.add(new BasicNameValuePair("rawhtml",UtilityFunctions.compress(html)));nameValuePairsRawHtml.add(new BasicNameValuePair("zip","1"));new loadData().execute(nameValuePairsRawHtml);}}class pushData1 extends AsyncTask<JSONObject, Integer, String> {@Overrideprotected void onPreExecute() {super.onPreExecute();}@Overrideprotected String doInBackground(JSONObject... arg0) {HttpClient httpclient = new DefaultHttpClient();try {ArrayList<NameValuePair> nameValuePairs = new ArrayList<>();nameValuePairs.add(new BasicNameValuePair("pushdata",arg0[0].toString()));HttpPost httppost = new HttpPost(apiData.getString("url.push.api",null));final String basicAuth = "Basic " + Base64.encodeToString("dtr:dtr18Feb2015".getBytes(), Base64.NO_WRAP);httppost.setHeader("Authorization", basicAuth);httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));System.out.println("JSON object in push Data 1 " + arg0[0].toString());StringEntity se = new StringEntity(arg0[0].toString());HttpResponse response = httpclient.execute(httppost);int status = response.getStatusLine().getStatusCode();if(status == 200){return "success";} else {return "failure";}} catch (ClientProtocolException e) {return "failure";} catch (IOException e) {return "failure";}}@Overrideprotected void onPostExecute(String result) {super.onPostExecute(result);}}class loadData extends AsyncTask<List<NameValuePair>, Integer, JSONObject> {@Overrideprotected void onPreExecute() {super.onPreExecute();}@Overrideprotected JSONObject doInBackground(List<NameValuePair>... orderDetail) {try {HttpClient httpclient = new DefaultHttpClient();HttpPost httppost = new HttpPost(apiData.getString("orderpagehtml.push.api", null));httppost.setHeader("Authorization", ProfitTillConstants.BASIC_AUTH);httppost.setEntity(new UrlEncodedFormEntity(orderDetail[0]));HttpResponse response = httpclient.execute(httppost);HttpEntity entity = response.getEntity();String getJSON = EntityUtils.toString(entity);if(getJSON==null){return null;}else {JSONObject jObjGmail = new JSONObject(getJSON);return jObjGmail;}} catch (Exception e) {return null;}}@Overrideprotected void onPostExecute(JSONObject result) {super.onPostExecute(result);}}}