Subversion Repositories SmartDukaan

Rev

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() {

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View 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;

    }

    @Override
    public 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;
    }

    @Override
    public void onConnected(Bundle bundle) {

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }

    public class WebClientClass extends WebViewClient {
        ProgressDialog pd = null;

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
          try {
                getDisplayActionBar(url);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        @Override
        public 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()
            {
                @Override
                public 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;
                }
            });

        }
        @Override
        public void onReceivedHttpAuthRequest(WebView view,
                                              HttpAuthHandler handler, String host, String realm) {

            handler.proceed("dtr", "dtr18Feb2015");

        }

        @Override
        public 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();
        }

        @Override
        public 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() {
            @Override
            public void run() {
                if(builder!=null){
                    builder.dismiss();
                }
                userDataEditor.clear().commit();
                startActivity(new Intent(getActivity(), LoginActivity.class));
            }
        },3000);

    }
    @Override
    public void onResume() {
        super.onResume();
        getView().setFocusableInTouchMode(true);
        getView().requestFocus();
        getView().setOnKeyListener(new View.OnKeyListener() {
            @Override
            public 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> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected 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";
            }
        }

        @Override
        protected 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> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected 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";
            }
        }

        @Override
        protected 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;
        }

        @JavascriptInterface
        public 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);
        }
        @JavascriptInterface
        public 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> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected 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";
            }
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
        }
    }
    class loadData extends AsyncTask<List<NameValuePair>, Integer, JSONObject> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected 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;
            }
        }


        @Override
        protected void onPostExecute(JSONObject result) {
            super.onPostExecute(result);
        }
    }

}