Subversion Repositories SmartDukaan

Rev

Rev 16278 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.saholic.profittill.main;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.Uri;
import android.os.AsyncTask;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.facebook.Session;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
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.AnalyticsUtility;
import com.saholic.profittill.Utils.UtilityFunctions;
import com.saholic.profittill.Volley.Analytics;
import com.saholic.profittill.Volley.AnalyticsErrorResponse;
import com.saholic.profittill.Volley.AnalyticsJsonResponse;
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.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class MobileNumber extends ActionBarActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
    SharedPreferences userData;
    SharedPreferences apiData;
    SharedPreferences.Editor userDataEditor;
    SharedPreferences.Editor apiSettingsEditor;
    EditText phoneNumberFirstTime;
    TextView skipMobileNumber;
    Button phoneNumberFirstTimeButton;
    boolean glogout;
    MixpanelAPI mixpanel;
    String type1;
    ArrayList<NameValuePair> nameValuePairsGcm;
    public GoogleApiClient mGoogleApiClient;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mobile_number);
        TestinAgent.init(this);
        getSupportActionBar().hide();
        mixpanel= MixpanelAPI.getInstance(getApplicationContext(), ProfitTillConstants.MIX_PANEL_TOKEN);
        userData = getApplicationContext().getSharedPreferences("User_Data", Context.MODE_PRIVATE);
        apiData = getApplicationContext().getSharedPreferences("API_Data", Context.MODE_PRIVATE);
        userDataEditor = userData.edit();
        apiSettingsEditor = apiData.edit();
        TestinAgent.setUserInfo(userData.getString("id", ""));
        Tracker t = ((GoogleAnalyticsTracker) getApplicationContext()).getTracker(
                GoogleAnalyticsTracker.TrackerName.APP_TRACKER);
        t.setScreenName("First Time Mobile Entered Screen");
        t.send(new HitBuilders.ScreenViewBuilder().build());
        new Analytics(ProfitTillConstants.ANALYTICS_URL,
                AnalyticsUtility.getAnalyticsRequest(MobileNumber.this, userData.getString("id", ""), "Screen", "Mobile Number", "Mobile Number Entering"),
                AnalyticsJsonResponse.getAnalyticsRequestInstance(),
                AnalyticsErrorResponse.getAnalyitcsResponseInstance()).anlyticsRequest(MobileNumber.this);

        type1 = userData.getString("type",null);

        if(type1!=null && type1.equalsIgnoreCase("google")) {
            mGoogleApiClient = new GoogleApiClient.Builder(this)
                    .addConnectionCallbacks(this)
                    .addOnConnectionFailedListener(this).addApi(Plus.API)
                    .addScope(Plus.SCOPE_PLUS_LOGIN).build();
            mGoogleApiClient.connect();
        }
        if(getIntent().getAction()=="31"){
            String emailURL= String.valueOf(getIntent().getData());
            Uri url = Uri.parse(emailURL);
            String campaignId = url.getQueryParameter("campaign");
            if(url.getQueryParameter("intent_type").equalsIgnoreCase("url")) {
                t.send(new HitBuilders.EventBuilder()
                        .setCategory("Message/Email")
                        .setAction("Message/Email Opened For User Id " + UtilityFunctions.campaignUserId(url))
                        .setLabel("Campaign Id " + campaignId)
                        .build());
                new Analytics(ProfitTillConstants.ANALYTICS_URL,
                        AnalyticsUtility.getAnalyticsRequest(MobileNumber.this, UtilityFunctions.campaignUserId(url), "Message", "Message Opened Mobile", campaignId),
                        AnalyticsJsonResponse.getAnalyticsRequestInstance(),
                        AnalyticsErrorResponse.getAnalyitcsResponseInstance()).anlyticsRequest(MobileNumber.this);
                nameValuePairsGcm = new ArrayList<>();
                nameValuePairsGcm.add(new BasicNameValuePair("user_id", UtilityFunctions.campaignUserId(url)));
                nameValuePairsGcm.add(new BasicNameValuePair("cid", campaignId));
                nameValuePairsGcm.add(new BasicNameValuePair("timestamp", UtilityFunctions.notificationDate()));
                nameValuePairsGcm.add(new BasicNameValuePair("result", "message_opened_mobile"));
                new NotificationOpenedData().execute(nameValuePairsGcm);
            }else{
                nameValuePairsGcm = new ArrayList<>();
                nameValuePairsGcm.add(new BasicNameValuePair("user_id", userData.getString("id","")));
                nameValuePairsGcm.add(new BasicNameValuePair("cid", campaignId));
                nameValuePairsGcm.add(new BasicNameValuePair("timestamp", UtilityFunctions.notificationDate()));
                nameValuePairsGcm.add(new BasicNameValuePair("result", "message_opened_mobile"));
                new NotificationOpenedData().execute(nameValuePairsGcm);
            }
        }
        phoneNumberFirstTime=(EditText)findViewById(R.id.phoneNumberFirstTime);
        skipMobileNumber = (TextView)findViewById(R.id.skipMobileNumber);
        phoneNumberFirstTimeButton=(Button)findViewById(R.id.phoneNumberFirstTimeButton);
        SpannableString content = new SpannableString(skipMobileNumber.getText().toString());
        content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
        skipMobileNumber.setText(content);

        skipMobileNumber.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                JSONObject props = new JSONObject();
                try {
                    mixpanel.identify(userData.getString("id", null));
                    props.put("Screen", "Mobile Verification");
                    mixpanel.track("First Time Mobile Number Skipped", props);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                Tracker t = ((GoogleAnalyticsTracker) getApplicationContext()).getTracker(
                        GoogleAnalyticsTracker.TrackerName.APP_TRACKER);
                t.send(new HitBuilders.EventBuilder()
                        .setCategory("First Time Mobile Entered ")
                        .setAction("Number not entered")
                        .setLabel("First Time Mobile Not entered")
                        .build());

                new Analytics(ProfitTillConstants.ANALYTICS_URL,
                        AnalyticsUtility.getAnalyticsRequest(MobileNumber.this, userData.getString("id", ""), "Clicks", "Mobile Number", "Mobile Number Skipped"),
                        AnalyticsJsonResponse.getAnalyticsRequestInstance(),
                        AnalyticsErrorResponse.getAnalyitcsResponseInstance()).anlyticsRequest(MobileNumber.this);

                Intent i = new Intent(MobileNumber.this, MainActivity.class);
                i.putExtra("displayView", "7");
                startActivity(i);
            }
        });

        phoneNumberFirstTimeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(phoneNumberFirstTime.getText().toString().length()==10){
                    if(isInternetOn()) {
                        JSONObject props = new JSONObject();
                        try {
                            mixpanel.identify(userData.getString("id",null));
                            props.put("Screen", "Mobile Verification");
                            mixpanel.track("First Time Mobile Number Entered",props);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                        if(!(userData.getString("id", "").isEmpty())) {
                            new Analytics(ProfitTillConstants.ANALYTICS_URL,
                                    AnalyticsUtility.getAnalyticsRequest(MobileNumber.this, userData.getString("id", ""), "Clicks", "Mobile Number", "Mobile Number Entered"),
                                    AnalyticsJsonResponse.getAnalyticsRequestInstance(),
                                    AnalyticsErrorResponse.getAnalyitcsResponseInstance()).anlyticsRequest(MobileNumber.this);
                        }
                        new pushVerification().execute();
                    }else{
                        Toast.makeText(getApplicationContext(), "No internet connection. Please try again.", Toast.LENGTH_SHORT).show();
                    }

                }
                else{
                    Toast.makeText(getApplicationContext(), "Mobile Number not valid.", Toast.LENGTH_SHORT).show();
                }

            }
        });


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_mobile_number, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onConnected(Bundle bundle) {

    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {

    }

    ProgressDialog pMobile;
    class pushVerification extends AsyncTask<String, Integer, String> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pMobile= new ProgressDialog(MobileNumber.this);
            pMobile.setMessage("Saving Data");
            pMobile.setCancelable(false);
            pMobile.show();
        }

        @Override
        protected String doInBackground(String... arg0) {
            HttpClient httpclient = new DefaultHttpClient();
            try {

                ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                SimpleDateFormat sdf = new SimpleDateFormat(ProfitTillConstants.SQL_DATE_FORMAT);
                String dateUpdated = sdf.format(new Date());
                nameValuePairs.add(new BasicNameValuePair("id",userData.getString("id","")));
                nameValuePairs.add(new BasicNameValuePair("mobile_number",phoneNumberFirstTime.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("mobile_number_last_updated",dateUpdated));
                String updateURL = apiData.getString("useredit.url","");
                String url = updateURL+userData.getString("id","");
                HttpPost httppost = new HttpPost(url);
                httppost.setHeader("Authorization", ProfitTillConstants.BASIC_AUTH);
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                int status = response.getStatusLine().getStatusCode();
                JSONObject jObjGmail = new JSONObject(EntityUtils.toString(entity));

                String success = jObjGmail.getString("success");

                if(status == 200){
                    Tracker t = ((GoogleAnalyticsTracker) getApplicationContext()).getTracker(
                            GoogleAnalyticsTracker.TrackerName.APP_TRACKER);
                    t.send(new HitBuilders.EventBuilder()
                            .setCategory("First Time Mobile Entered ")
                            .setAction("Number entered")
                            .setLabel("First Time Mobile entered")
                            .build());
                }
                if(success.equalsIgnoreCase("true")){
                    userDataEditor.putString("message","false");;
                    userDataEditor.commit();
                    return "true";
                }else{
                    userDataEditor.putString("message","true");;
                    userDataEditor.commit();
                    return "false";
                }
            } catch (ClientProtocolException e) {
                return "false";
            } catch (IOException e) {
                return "false";
            }catch (Exception e){
                return "false";
            }
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            if(pMobile!=null) {
                pMobile.dismiss();
            }
            if(result.equalsIgnoreCase("true")) {
                Intent i = new Intent(MobileNumber.this, MobileVerificationFirstTime.class);
                i.putExtra("numberVerification", phoneNumberFirstTime.getText().toString());
                startActivity(i);
            }
        }
    }

    @Override
    public void onBackPressed() {
        new AlertDialog.Builder(this)
                .setIcon(android.R.drawable.ic_dialog_alert)
                .setTitle("Exit!")
                .setMessage("Are you sure you want to sign out?")
                .setPositiveButton("Yes", new DialogInterface.OnClickListener(){
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if(type1.equalsIgnoreCase("facebook")) {
                            Log.d("fblogout","logout");
                            if (Session.getActiveSession() != null) {
                                Session.getActiveSession().closeAndClearTokenInformation();
                            }
                            Session.setActiveSession(null);
                            userDataEditor.clear().commit();
                            startActivity(new Intent(MobileNumber.this, LoginActivity.class));
                        }
                        else{
                            Log.d("gmailLogout","logout");
                            signOutFromGplus();
                            if(glogout==true){
                                startActivity(new Intent(MobileNumber.this, LoginActivity.class));
                            }
                        }

                    }

                })
                .setNegativeButton("No", null)
                .show();
    }

    public void signOutFromGplus() {
        if (mGoogleApiClient.isConnected()) {
            Plus.AccountApi.clearDefaultAccount(mGoogleApiClient);
            mGoogleApiClient.disconnect();
            mGoogleApiClient.connect();
            glogout=true;
            userDataEditor.clear();
            userDataEditor.commit();
        } else {
            glogout=false;
        }
    }

    public final boolean isInternetOn() {

        ConnectivityManager connec =
                (ConnectivityManager)this.getSystemService(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 NotificationOpenedData extends AsyncTask<ArrayList<NameValuePair>, Integer, String> {

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

        @Override
        protected String doInBackground(ArrayList<NameValuePair>... arg0) {

            try {
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost(apiData.getString("notication.data.url","http://api.profittill.com/pushnotifications/add"));
                httppost.setHeader("Authorization", ProfitTillConstants.BASIC_AUTH);
                httppost.setEntity(new UrlEncodedFormEntity(arg0[0]));
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                int status = response.getStatusLine().getStatusCode();
                nameValuePairsGcm.clear();
            } catch (Exception e) {
                Log.e("Fail 1", e.toString());

            }
            return "success";
        }

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

}