package ams.android.linkit.Fragment; import android.app.Fragment; import android.app.FragmentTransaction; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.support.v4.widget.DrawerLayout; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.CookieManager; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import android.widget.ProgressBar; 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.GooglePlayServicesUtil; import com.google.android.gms.gcm.GoogleCloudMessaging; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import org.apache.http.Header; import org.json.JSONException; import org.json.JSONObject; import java.io.IOException; import java.io.UnsupportedEncodingException; import ams.android.linkit.Activity.MainActivity; import ams.android.linkit.R; import ams.android.linkit.Tools.GlobalApplication; /** * Created by Aidin on 2/1/2015. */ public class FragmentLogin extends Fragment { private static String TAG = "linkitShopper"; private final static int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; GoogleCloudMessaging gcm; WebView webView; ImageView imageReload; ProgressBar progressBarLoad; public View onCreateView(final LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) { // if (!(getActivity().getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)) { // getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // } MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); ((MainActivity) getActivity()).currentFragmentName = "Login"; View rootView = inflater.inflate(R.layout.fragment_login, container, false); webView = (WebView) rootView.findViewById(R.id.webViewLogin); imageReload = (ImageView) rootView.findViewById(R.id.imgRefresh); progressBarLoad = (ProgressBar) rootView.findViewById(R.id.progressBar_load); ImageView imagePlay = (ImageView) rootView.findViewById(R.id.imgPlay); imagePlay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentIntro f1 = new FragmentIntro(); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.setCustomAnimations(R.animator.slide_in_left, R.animator.slide_out_right); ft.replace(R.id.container, f1, "Intro"); ft.addToBackStack("Intro"); ft.commit(); } }); imageReload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { setUrl(); //new hasActiveInternetConnectionTask().execute(); } }); imageReload.bringToFront(); CookieManager cookieManager = CookieManager.getInstance(); if (Build.VERSION.SDK_INT > 20) { cookieManager.flush(); } else { cookieManager.removeAllCookie(); } if (checkPlayServices()) { gcm = GoogleCloudMessaging.getInstance(GlobalApplication.getAppContext()); if (((GlobalApplication) getActivity().getApplication()).getRegistrationId().isEmpty()) { registerInBackground(); } else { setUrl(); } } else { Log.i(TAG, "No valid Google Play Services APK found."); } WebViewClient wvc = new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url) { return false; } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { webView.loadData("<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" ?>", "text/html", "UTF-8"); } @Override public void onPageFinished(WebView view, String url) { progressBarLoad.setVisibility(View.INVISIBLE); try { if (url.startsWith(getResources().getString(R.string.BASE_URL) + "users/insta-buyer-cb")) { login(getResources().getString(R.string.BASE_URL) + "users/userId"); } } catch (Exception ex) { } super.onPageFinished(view, url); } }; webView.setWebViewClient(wvc); // Get tracker. Tracker t = ((GlobalApplication) getActivity().getApplication()).getTracker(GlobalApplication.TrackerName.APP_TRACKER); t.setScreenName("LinkitShopper - Login"); t.send(new HitBuilders.AppViewBuilder().build()); return rootView; } private void setUrl() { String url = getResources().getString(R.string.BASE_URL) + "users/auth/buyer/android/" + ((GlobalApplication) getActivity().getApplication()).getRegistrationId(); webView.loadUrl(url); progressBarLoad.setVisibility(View.VISIBLE); } private void registerInBackground() { new RetrieveFeedTask().execute(); } private class RetrieveFeedTask extends AsyncTask<String, String, String> { @Override protected String doInBackground(String... params) { String msg; try { if (gcm == null) { gcm = GoogleCloudMessaging.getInstance(GlobalApplication.getAppContext()); } String regId = gcm.register(getResources().getString(R.string.SENDER_ID)); msg = "Device registered, registration ID=" + regId; ((GlobalApplication) getActivity().getApplication()).setRegistrationId(regId); } catch (IOException ex) { msg = "Error :" + ex.getMessage(); } return msg; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); setUrl(); } } private boolean checkPlayServices() { int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(GlobalApplication.getAppContext()); if (resultCode != ConnectionResult.SUCCESS) { if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { GooglePlayServicesUtil.getErrorDialog(resultCode, getActivity(), PLAY_SERVICES_RESOLUTION_REQUEST).show(); } else { Log.i(TAG, "This device is not supported."); //finish(); } return false; } return true; } private void login(String URL) { AsyncHttpClient client = new AsyncHttpClient(); client.addHeader("token", ((GlobalApplication) getActivity().getApplication()).getRegistrationId()); client.addHeader("device", "android"); client.addHeader("userType", "buyer"); client.get(URL, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] response) { try { parseJSON(new String(response, "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } @Override public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { } @Override public void onRetry(int retryNo) { } }); } private void parseJSON(String jsonStr) { if (jsonStr != null) { try { MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); JSONObject jsonObj = new JSONObject(jsonStr); ((GlobalApplication) getActivity().getApplication()).setUserId(jsonObj.getString("userId")); FragmentLinks f1 = new FragmentLinks(); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.container, f1, "Links"); ft.commit(); } catch (JSONException e) { e.printStackTrace(); } } else { Log.e("ServiceHandler", "Couldn't get any data from the url"); } } }