Guest User

Untitled

a guest
May 10th, 2016
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 114.45 KB | None | 0 0
  1. package com.infinum.novalac;
  2.  
  3. import com.google.android.gcm.GCMRegistrar;
  4. import com.google.android.gms.common.ConnectionResult;
  5. import com.google.android.gms.common.Scopes;
  6. import com.google.android.gms.common.api.GoogleApiClient;
  7. import com.google.android.gms.common.api.Scope;
  8. import com.google.android.gms.plus.Plus;
  9. import com.google.android.gms.plus.PlusShare;
  10. import com.google.android.gms.plus.model.people.Person;
  11. import com.google.gson.Gson;
  12. import com.google.gson.JsonObject;
  13. import com.google.gson.JsonParser;
  14.  
  15. import com.facebook.FacebookException;
  16. import com.facebook.Request;
  17. import com.facebook.Session;
  18. import com.facebook.SessionState;
  19. import com.facebook.UiLifecycleHelper;
  20. import com.facebook.model.GraphUser;
  21. import com.facebook.widget.FacebookDialog;
  22. import com.facebook.widget.FacebookDialog.Callback;
  23. import com.facebook.widget.FacebookDialog.PendingCall;
  24. import com.facebook.widget.WebDialog;
  25. import com.facebook.widget.WebDialog.OnCompleteListener;
  26. import com.infinum.novalac.api.BaseCallback;
  27. import com.infinum.novalac.api.NovalacService;
  28. import com.infinum.novalac.api.models.AuthTokenWrapper;
  29. import com.infinum.novalac.api.models.DocumentResponseWrapper;
  30. import com.infinum.novalac.api.models.EmailWrapper;
  31. import com.infinum.novalac.api.models.MessageResponse;
  32. import com.infinum.novalac.api.models.ShareData;
  33. import com.infinum.novalac.api.models.SocialUser;
  34. import com.infinum.novalac.api.models.SocialUserWrapper;
  35. import com.infinum.novalac.api.models.UserWrapper;
  36. import com.infinum.novalac.custom.deserializer.BannersCustomDeserializer;
  37. import com.infinum.novalac.helpers.TwitterHelper;
  38. import com.infinum.novalac.util.LoginListener;
  39. import com.infinum.novalac.util.NovalacLogger;
  40. import com.infinum.novalac.util.NovalacUtil;
  41. import com.nostra13.socialsharing.facebook.FacebookFacade;
  42.  
  43. import org.apache.http.HttpResponse;
  44. import org.apache.http.client.HttpClient;
  45. import org.apache.http.client.methods.HttpGet;
  46. import org.apache.http.impl.client.DefaultHttpClient;
  47. import org.apache.http.util.EntityUtils;
  48. import org.json.JSONException;
  49. import org.json.JSONObject;
  50.  
  51. import android.annotation.SuppressLint;
  52. import android.app.Activity;
  53. import android.app.AlarmManager;
  54. import android.app.AlertDialog;
  55. import android.app.AlertDialog.Builder;
  56. import android.app.DatePickerDialog;
  57. import android.app.DatePickerDialog.OnDateSetListener;
  58. import android.app.Dialog;
  59. import android.app.NotificationManager;
  60. import android.app.PendingIntent;
  61. import android.app.ProgressDialog;
  62. import android.app.TimePickerDialog;
  63. import android.app.TimePickerDialog.OnTimeSetListener;
  64. import android.content.ActivityNotFoundException;
  65. import android.content.Context;
  66. import android.content.DialogInterface;
  67. import android.content.Intent;
  68. import android.content.IntentSender;
  69. import android.content.SharedPreferences;
  70. import android.content.res.Configuration;
  71. import android.database.Cursor;
  72. import android.graphics.Bitmap;
  73. import android.net.ConnectivityManager;
  74. import android.net.NetworkInfo;
  75. import android.net.Uri;
  76. import android.net.http.SslError;
  77. import android.os.AsyncTask;
  78. import android.os.Build;
  79. import android.os.Bundle;
  80. import android.os.Environment;
  81. import android.os.Handler;
  82. import android.os.Message;
  83. import android.provider.MediaStore;
  84. import android.util.Base64;
  85. import android.util.Log;
  86. import android.view.KeyEvent;
  87. import android.view.LayoutInflater;
  88. import android.view.Menu;
  89. import android.view.View;
  90. import android.view.View.OnClickListener;
  91. import android.view.Window;
  92. import android.view.WindowManager;
  93. import android.webkit.HttpAuthHandler;
  94. import android.webkit.JavascriptInterface;
  95. import android.webkit.SslErrorHandler;
  96. import android.webkit.WebChromeClient;
  97. import android.webkit.WebSettings.RenderPriority;
  98. import android.webkit.WebStorage.QuotaUpdater;
  99. import android.webkit.WebView;
  100. import android.webkit.WebViewClient;
  101. import android.widget.Button;
  102. import android.widget.DatePicker;
  103. import android.widget.EditText;
  104. import android.widget.LinearLayout;
  105. import android.widget.TimePicker;
  106. import android.widget.Toast;
  107.  
  108. import java.io.ByteArrayOutputStream;
  109. import java.io.File;
  110. import java.io.FileNotFoundException;
  111. import java.io.FileOutputStream;
  112. import java.io.IOException;
  113. import java.io.UnsupportedEncodingException;
  114. import java.lang.reflect.InvocationTargetException;
  115. import java.net.URLDecoder;
  116. import java.text.SimpleDateFormat;
  117. import java.util.ArrayList;
  118. import java.util.Calendar;
  119. import java.util.Collection;
  120. import java.util.Date;
  121. import java.util.Locale;
  122.  
  123. import eu.janmuller.android.simplecropimage.CropImage;
  124. import hr.infinum.data.core.DataContainer;
  125. import hr.infinum.data.core.Format;
  126. import hr.infinum.data.core.Store;
  127. import hr.infinum.data.errors.Error;
  128. import hr.infinum.data.listeners.LoadListener;
  129. import hr.infinum.data.serialization.QueryStringSerializer;
  130. import hr.infinum.data.typecasting.DefaultTypeCaster;
  131. import hr.infinum.data.typecasting.TypeCaster;
  132. import hr.infinum.io.Loggy;
  133. import hr.infinum.io.RestClient.HttpMethod;
  134. import hr.infinum.novalac.generated.Sources;
  135. import hr.infinum.novalac.generated.params.BannersParams;
  136. import hr.infinum.novalac.generated.params.PushRegisterParams;
  137. import hr.infinum.novalac.generated.params.PushUnregisterParams;
  138. import hr.infinum.novalac.generated.sources.BannersSource;
  139. import hr.infinum.novalac.generated.sources.ExportDataSource;
  140. import hr.infinum.novalac.generated.sources.PushRegisterSource;
  141. import hr.infinum.novalac.generated.sources.PushUnregisterSource;
  142. import hr.infinum.novalac.models.Banner;
  143. import hr.infinum.novalac.models.StatusResponse;
  144. import retrofit.client.Response;
  145. import twitter4j.Status;
  146. import twitter4j.StatusUpdate;
  147. import twitter4j.Twitter;
  148. import twitter4j.TwitterException;
  149. import twitter4j.TwitterFactory;
  150. import twitter4j.auth.AccessToken;
  151. import twitter4j.auth.RequestToken;
  152. import twitter4j.conf.ConfigurationBuilder;
  153.  
  154. //import net.simonvt.app.DatePickerDialog;
  155. //import net.simonvt.app.DatePickerDialog.OnDateSetListener;
  156.  
  157. public class HomeActivity extends Activity implements OnDateSetListener,
  158.         LoginListener, GoogleApiClient.ConnectionCallbacks,
  159.         GoogleApiClient.OnConnectionFailedListener {
  160.  
  161.     private static final int REQUEST_TAKE_A_PHOTO = 100;
  162.  
  163.     private static final int REQUEST_CHOOSE_FROM_GALLERY = 101;
  164.  
  165.     private static final int REQUEST_CROP_IMAGE_FROM_GALLERY = 103;
  166.  
  167.     private static final int GOOGLE_PLUS_REQUEST_CODE = 49404;
  168.  
  169.     private static final int REQUEST_AUTHORIZATION = 10302;
  170.  
  171.     private static WebView webView;
  172.  
  173.     private Button btnLoad;
  174.  
  175.     private Button btnLoad2;
  176.  
  177.     private EditText etURL;
  178.  
  179.     private String URL = "http://www.infinum.hr";
  180.  
  181.     private NovalacPreferences prefs;
  182.  
  183.     private String URLstub = "javascript:NativeBridge.callback(\"%s\", \"%s\")";
  184.  
  185.     private String URLstubWithResponse = "javascript:NativeBridge.callback(\"%s\", %s)";
  186.  
  187.     public static final String URL_DATEPICKER = "native://datepicker";
  188.  
  189.     public static final String URL_FILEPICKER = "native://photopicker";
  190.  
  191.     public static final String URL_EXTERNAL = "native://external";
  192.  
  193.     public static final String URL_LANGUAGE = "native://language";
  194.  
  195.     public static final String URL_BANNERS = "native://getBanners";
  196.  
  197.     public static final String URL_CLOSE = "native://close";
  198.  
  199.     public static final String URL_TIMEPICKER = "native://timepicker";
  200.  
  201.     public static final String URL_REMINDER = "native://reminder";
  202.  
  203.     public static final String URL_NATIVE = "native://";
  204.  
  205.     public static final String URL_PUSH_APP_LOADED = "native://app-loaded";
  206.  
  207.     public static final String URL_SHARE = "native://share";
  208.  
  209.     public static final String URL_LOADING = "native://loading";
  210.  
  211.     public static final String URL_EXPORT_ADD = "native://export-add";
  212.  
  213.     public static final String URL_EXPORT_SEND = "native://export-send";
  214.  
  215.     public static final String URL_MEASUREMENT_NOTIFICAITON = "native://measurement-notification";
  216.  
  217.     public static final String URL_SOCIAL_LOGIN = "native://social-login";
  218.  
  219.     public static final String URL_LOGIN = "native://login";
  220.  
  221.     public static final String URL_USER_CREATE = "native://user-create";
  222.  
  223.     public static final String URL_IMPORT_USER_DATA = "native://import-user-data";
  224.  
  225.     public static final String URL_LOAD_USER_DATA = "native://load-user-data";
  226.  
  227.     public static final String URL_RESET_PASSWORD = "native://reset-password";
  228.  
  229.     public static final String STUB_DATEPICKER = "datepicker";
  230.  
  231.     public static final String STUB_FILEPICKER = "photopicker";
  232.  
  233.     public static final String STUB_BANNERS = "getBanners";
  234.  
  235.     public static final String STUB_TIMEPICKER = "timepicker";
  236.  
  237.     public static final String STUB_REMINDER = "reminder/";
  238.  
  239.     public static final String STUB_CREATE = "create";
  240.  
  241.     public static final String STUB_UPDATE = "update";
  242.  
  243.     public static final String STUB_DESTROY = "destroy";
  244.  
  245.     public static final String STUB_SHARE = "share";
  246.  
  247.     public static final String STUB_EXPORT_SEND = "export-send";
  248.  
  249.     public static final String STUB_FACEBOOK = "facebook";
  250.  
  251.     public static final String STUB_TWITTER = "twitter";
  252.  
  253.     public static final String STUB_GOOGLE = "gplus";
  254.  
  255.     public static final String STUB_SOCIAL_LOGIN = "social-login";
  256.  
  257.     public static final String STUB_LOGIN = "login";
  258.  
  259.     public static final String STUB_USER_CREATE = "user-create";
  260.  
  261.     public static final String STUB_EXPORT_USER_ADD = "export-user-send";
  262.  
  263.     public static final String STUB_IMPORT_USER_DATA = "import-user-data";
  264.  
  265.     public static final String STUB_ANDROID_CHUNK_RECEIVER = "androidChunkedPartialDataReceiver";
  266.  
  267.     public static final String STUB_RESET_PASSWORD = "reset-password";
  268.  
  269.     public static final String STUB_SHARE_MY_FIRST = "share-my-first-send";
  270.  
  271.     private static final int CROP = 14;
  272.  
  273.     private static final String CHILD_ID = "child_id";
  274.  
  275.     private DatePickerDialog dateDialog;
  276.  
  277.     private String cancel = "";
  278.  
  279.     private String photo = "";
  280.  
  281.     private String camera = "";
  282.  
  283.     private boolean fromPush = false;
  284.  
  285.     private Bundle b;
  286.  
  287.     private String content;
  288.  
  289.     private String custom;
  290.  
  291.     private Uri currentPhotoUri;
  292.  
  293.     private boolean appLoaded = false;
  294.  
  295.     private String urlText;
  296.  
  297.     private String urlUrl;
  298.  
  299.     private ProgressDialog progressDialog;
  300.  
  301.     private Dialog customProggresDialog;
  302.  
  303.     private WebView twitterWebView;
  304.  
  305.     private LinearLayout twitterWebViewWrapper;
  306.  
  307.     private boolean shouldPostPhotoAfterTwitterLogin = false;
  308.  
  309.     /* Client used to interact with Google APIs. */
  310.     private GoogleApiClient mGoogleApiClient;
  311.  
  312.     /* Is there a ConnectionResult resolution in progress? */
  313.     private boolean mIsResolving = false;
  314.  
  315.     /* Should we automatically resolve ConnectionResults when possible? */
  316.     private boolean mShouldResolve = false;
  317.  
  318.     FacebookFacade facebookFacade;
  319.  
  320.     @Override
  321.     public void onCreate(Bundle savedInstanceState) {
  322.         super.onCreate(savedInstanceState);
  323.         TypeCaster.setGlobal(new DefaultTypeCaster());
  324.         prefs = new NovalacPreferences(this);
  325.         NovalacApplication.setHomeActivity(this);
  326.         Loggy.showAll();
  327.  
  328.         // Build GoogleApiClient with access to basic profile
  329.         mGoogleApiClient = new GoogleApiClient.Builder(this)
  330.                 .addConnectionCallbacks(this)
  331.                 .addOnConnectionFailedListener(this)
  332.                 .addApi(Plus.API)
  333.                 .addScope(new Scope(Scopes.PLUS_LOGIN))
  334.                 .addScope(new Scope(Scopes.PLUS_ME))
  335.                 .build();
  336.  
  337.         uiHelper = new UiLifecycleHelper(this, callback);
  338.         uiHelper.onCreate(savedInstanceState);
  339.  
  340.         // if (!hasInternet(this)) {
  341.         // Toast.makeText(this, "NO internet -- need translation",
  342.         // Toast.LENGTH_LONG).show();
  343.         // finish();
  344.         // return;
  345.         // }
  346.  
  347.         if (getIntent() != null && getIntent().getExtras() != null) {
  348.             fromPush = true;
  349.             content = getIntent().getExtras().getString("display_text");
  350.             custom = getIntent().getExtras().getString("custom");
  351.             if (fromPush && appLoaded) {
  352.                 if (content != null) {
  353.                     webView.loadUrl("javascript:NativeBridge.pushNotification.alert(\""
  354.                             + content + "\")");
  355.                 } else if (custom != null) {
  356.                     try {
  357.                         JSONObject obj = new JSONObject(custom);
  358.                         urlText = obj.getString("text");
  359.                         urlUrl = obj.getString("url");
  360.                         webView.loadUrl("javascript:NativeBridge.pushNotification.urlAlert(\""
  361.                                 + urlText + "\", \"" + urlUrl + "\")");
  362.                     } catch (JSONException e) {
  363.                         // TODO Auto-generated catch bloc0k
  364.                         e.printStackTrace();
  365.                     }
  366.                     // webView.loadUrl("javascript:NativeBridge.pushNotification.urlAlert("
  367.                     // + custom + ")");
  368.                 }
  369.             }
  370.         }
  371.  
  372.         // TODO migrate to new GCM API
  373.         GCMRegistrar.checkDevice(getApplicationContext());
  374.         GCMRegistrar.checkManifest(this);
  375.         final String regId = GCMRegistrar
  376.                 .getRegistrationId(getApplicationContext());
  377.         if (regId.equals("")) {
  378.             GCMRegistrar.register(getApplicationContext(), "960775340051");
  379.         } else {
  380.             Log.v("gcm", "Already registered");
  381.             registerLocally(regId);
  382.         }
  383.  
  384.         if (prefs.getStoredLanguage() == null) {
  385.             setConfigurationLanguage("sl");
  386.  
  387.         } else {
  388.             setConfigurationLanguage(prefs.getStoredLanguage());
  389.         }
  390.  
  391.         setContentView(R.layout.activity_home);
  392.         int currentapiVersion = android.os.Build.VERSION.SDK_INT;
  393.         if (currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB) {
  394.             getWindow().setFlags(
  395.                     WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
  396.                     WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
  397.         } else {
  398.         }
  399.         URL = prefs.getStoredURL();
  400.  
  401.         webView = (WebView) findViewById(R.id.webview);
  402.         // twitterWebView = (WebView) findViewById(R.id.twitter_webview);
  403.  
  404.         btnLoad = (Button) findViewById(R.id.btnLoad);
  405.         btnLoad2 = (Button) findViewById(R.id.btnLoad2);
  406.         etURL = (EditText) findViewById(R.id.etURL);
  407.         etURL.setText(URL);
  408.         twitterWebViewWrapper = (LinearLayout) findViewById(R.id.twitter_webview_wrapper);
  409.  
  410.         AsyncTask asyncTask = new AsyncTask<String, Void, String>() {
  411.  
  412.             @Override
  413.             protected String doInBackground(String... params) {
  414.  
  415.                 HttpResponse response = null;
  416.                 HttpGet httpGet = null;
  417.                 HttpClient httpClient = null;
  418.                 String responseString = "";
  419.  
  420.                 try {
  421.                     if (httpClient == null) {
  422.                         httpClient = new DefaultHttpClient();
  423.                     }
  424.  
  425.                     httpGet = new HttpGet((String) params[0]);
  426.  
  427.                     response = httpClient.execute(httpGet);
  428.                     responseString = EntityUtils.toString(response.getEntity(),
  429.                             "UTF-8");
  430.  
  431.                 } catch (IOException e) {
  432.                     e.printStackTrace();
  433.                 }
  434.  
  435.                 NovalacLogger.logD(responseString);
  436.                 return responseString;
  437.             }
  438.  
  439.             @Override
  440.             protected void onPostExecute(String result) {
  441. //              resumeWithLoadedUrl(result);
  442. //               resumeWithLoadedUrl("file:///android_asset/index.html");
  443. //               resumeWithLoadedUrl("http://192.168.1.97:8000");
  444.  
  445.                 super.onPostExecute(result);
  446.             }
  447.         };
  448.  
  449.         String[] params = new String[1];
  450.  
  451.         // for testing purposes only
  452. //      params[0] = "https://www.dropbox.com/s/cbtr0zwf89ee2lw/url.txt?dl=1";
  453. //      asyncTask.execute(params);
  454.  
  455.         resumeWithLoadedUrl("file:///android_asset/index.html");
  456.  
  457.         // Calendar cal = Calendar.getInstance(Locale.getDefault());
  458.         // dateDialog = new DatePickerDialog(HomeActivity.this,
  459.         // HomeActivity.this,
  460.         // cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
  461.         // cal.get(Calendar.DAY_OF_MONTH));
  462.         // // dateDialog.getDatePicker().setMaxDate(cal.getTimeInMillis());
  463.         //
  464.         // btnLoad.setOnClickListener(loadListener());
  465.         // btnLoad2.setOnClickListener(new View.OnClickListener() {
  466.         //
  467.         // @Override
  468.         // public void onClick(View v) {
  469.         // // TODO Auto-generated method stub
  470.         // dateDialog.show();
  471.         // }
  472.         // });
  473.         //
  474.         // if (getIntent() != null && getIntent().getExtras() != null) {
  475.         // String babyId = getIntent().getStringExtra(ReminderService.BABY_ID);
  476.         // String reminderId = getIntent().getStringExtra(
  477.         // ReminderService.REMINDER);
  478.         // if (babyId != null && reminderId != null) {
  479.         // // URL = getUrl(this) + "#child/" + babyId + "/reminder/" +
  480.         // // reminderId + "";
  481.         // if (android.os.Build.VERSION.SDK_INT == 15) {
  482.         // URL = getUrl(this);
  483.         // webView.getSettings()
  484.         // .setUserAgentString(
  485.         // "{firstRun: 0, language: '"
  486.         // + prefs.getStoredLanguage()
  487.         // + "', fromNotif: 1, hash: '#child/"
  488.         // + babyId + "/reminder/"
  489.         // + reminderId + "'}");
  490.         // //
  491.         // webView.loadUrl("javascript:(function(){window.startingParams = {firstRun: 0, language: '"+
  492.         // // prefs.getStoredLanguage() +
  493.         // // "', fromNotif: 1, hash: '#child/" +babyId +"/reminder/"+
  494.         // // reminderId+"'};})()");
  495.         // } else {
  496.         // URL = getUrl(this) + "&fromNotif=1" + "#child/" + babyId
  497.         // + "/reminder/" + reminderId;
  498.         // }
  499.         //
  500.         // webView.loadUrl(URL);
  501.         // }
  502.         // }
  503.         //
  504.         // /*
  505.         // * Coming from notificaiton in status bar
  506.         // */
  507.         // if (getIntent() != null && getIntent().getExtras() != null
  508.         // && getIntent().getExtras().containsKey(CHILD_ID)) {
  509.         // String childId = getIntent().getStringExtra(CHILD_ID);
  510.         //
  511.         // if (childId != null) {
  512.         // URL = getUrl(this) + "#child/" + childId;
  513.         // // URL = getUrl(this) + "#child/" + babyId + "/reminder/" +
  514.         // // reminderId + "";
  515.         // if (android.os.Build.VERSION.SDK_INT == 15) {
  516.         // webView.getSettings().setUserAgentString(
  517.         // "{ firstRun: 0, language: '"
  518.         // + prefs.getStoredLanguage()
  519.         // + "', hash: '#child/" + childId + "'}");
  520.         // //
  521.         // webView.loadUrl("javascript:(function(){window.startingParams = { firstRun: 0, language: "+
  522.         // // prefs.getStoredLanguage() + ", hash: '#child/"+ childId
  523.         // // +"'};})()");
  524.         // }
  525.         // webView.loadUrl(URL);
  526.         // }
  527.         // }
  528.         //
  529.  
  530.     }
  531.  
  532.     /**
  533.      * Load index.html (from web or from assets)
  534.      */
  535.     private void resumeWithLoadedUrl(String url) {
  536.  
  537.         URL = url;
  538.  
  539.         initWebView(false);
  540.  
  541.         Calendar cal = Calendar.getInstance(Locale.getDefault());
  542.         dateDialog = new DatePickerDialog(HomeActivity.this, HomeActivity.this,
  543.                 cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
  544.                 cal.get(Calendar.DAY_OF_MONTH));
  545.         // dateDialog.getDatePicker().setMaxDate(cal.getTimeInMillis());
  546.  
  547.         btnLoad.setOnClickListener(loadListener());
  548.         btnLoad2.setOnClickListener(new View.OnClickListener() {
  549.  
  550.             @Override
  551.             public void onClick(View v) {
  552.                 // TODO Auto-generated method stub
  553.                 dateDialog.show();
  554.             }
  555.         });
  556.  
  557.         if (getIntent() != null && getIntent().getExtras() != null) {
  558.             String babyId = getIntent().getStringExtra(ReminderService.BABY_ID);
  559.             String reminderId = getIntent().getStringExtra(
  560.                     ReminderService.REMINDER);
  561.             if (babyId != null && reminderId != null) {
  562.                 // URL = getUrl(this) + "#child/" + babyId + "/reminder/" +
  563.                 // reminderId + "";
  564.                 if (android.os.Build.VERSION.SDK_INT == 15) {
  565.                     URL = getUrl(this);
  566.                     webView.getSettings()
  567.                             .setUserAgentString(
  568.                                     "{firstRun: 0, language: '"
  569.                                             + prefs.getStoredLanguage()
  570.                                             + "', fromNotif: 1, hash: '#child/"
  571.                                             + babyId + "/reminder/"
  572.                                             + reminderId + "'}");
  573.                     // webView.loadUrl("javascript:(function(){window.startingParams = {firstRun: 0, language: '"+
  574.                     // prefs.getStoredLanguage() +
  575.                     // "', fromNotif: 1, hash: '#child/" +babyId +"/reminder/"+
  576.                     // reminderId+"'};})()");
  577.                 } else {
  578.                     URL = getUrl(this) + "&fromNotif=1" + "#child/" + babyId
  579.                             + "/reminder/" + reminderId;
  580.                 }
  581.  
  582.                 webView.loadUrl(URL);
  583.             }
  584.         }
  585.  
  586.         /*
  587.                  * Coming from notificaiton in status bar
  588.          */
  589.         if (getIntent() != null && getIntent().getExtras() != null
  590.                 && getIntent().getExtras().containsKey(CHILD_ID)) {
  591.             String childId = getIntent().getStringExtra(CHILD_ID);
  592.  
  593.             if (childId != null) {
  594.                 URL = getUrl(this) + "#child/" + childId;
  595.                 // URL = getUrl(this) + "#child/" + babyId + "/reminder/" +
  596.                 // reminderId + "";
  597.                 if (android.os.Build.VERSION.SDK_INT == 15) {
  598.                     webView.getSettings().setUserAgentString(
  599.                             "{ firstRun: 0, language: '"
  600.                                     + prefs.getStoredLanguage()
  601.                                     + "', hash: '#child/" + childId + "'}");
  602.                     // webView.loadUrl("javascript:(function(){window.startingParams = { firstRun: 0, language: "+
  603.                     // prefs.getStoredLanguage() + ", hash: '#child/"+ childId
  604.                     // +"'};})()");
  605.                 }
  606.                 webView.loadUrl(URL);
  607.             }
  608.         }
  609.  
  610.         // testLogin();
  611.  
  612.     }
  613.  
  614.     private void testLogin() {
  615.         Handler handler = new Handler();
  616.         handler.postDelayed(new Runnable() {
  617.  
  618.             @Override
  619.             public void run() {
  620.                 // loginFacebook();
  621.                 // loginTwitter();
  622.                 // loginGooglePlus();
  623.             }
  624.         }, 5000);
  625.     }
  626.  
  627.     private UiLifecycleHelper uiHelper;
  628.  
  629.     private void loginFacebook() {
  630.         // FacebookLoginUtil.login(HomeActivity.this, (LoginListener)
  631.         // HomeActivity.this);
  632.         facebookFacade = new FacebookFacade(HomeActivity.this,
  633.                 getString(R.string.app_id));
  634.         Session session = Session.getActiveSession();
  635.  
  636.         // check if session is already openned
  637.         if (!session.isOpened() && !session.isClosed()) {
  638.             session.openForRead(new Session.OpenRequest(this)
  639.                     // .setPermissions(Arrays.asList("public_profile"))
  640.                     .setCallback(callback));
  641.         }
  642.         // session is already active, open it
  643.         else {
  644.  
  645.             Session.openActiveSession(this, true, callback);
  646.         }
  647.  
  648.     }
  649.  
  650.     /**
  651.      * Provides asynchronous notification of Session state changes.
  652.      */
  653.     private Session.StatusCallback callback = new Session.StatusCallback() {
  654.         @Override
  655.         public void call(Session session, SessionState state,
  656.                 Exception exception) {
  657.             NovalacLogger.logD("fb callback call");
  658.             onSessionStateChange(session, state, exception);
  659.         }
  660.     };
  661.  
  662.     private void onSessionStateChange(final Session session,
  663.             SessionState state, Exception exception) {
  664.  
  665.         NovalacLogger.logD("fb on session state change");
  666.         // session is opened, proceed to main activity
  667.         if (state.isOpened()) {
  668.  
  669.             // postLoginUser(, provider);
  670.  
  671.             NovalacLogger.logD("state is opened");
  672.  
  673.             Request.executeMeRequestAsync(session,
  674.                     new Request.GraphUserCallback() {
  675.  
  676.                         @Override
  677.                         public void onCompleted(GraphUser user,
  678.                                 com.facebook.Response response) {
  679.                             NovalacLogger.logD("on completed me request");
  680.                             HomeActivity.this.onSuccess(user.getId());
  681.                             // session.closeAndClearTokenInformation();
  682.  
  683.                         }
  684.                     });
  685.  
  686.         }
  687.         // session is closed, show error dialog
  688.         else if (state.isClosed()) {
  689.  
  690.             NovalacLogger.logD("state is not opened");
  691.  
  692.         }
  693.     }
  694.  
  695.     private static final String OAUTH_CONSUMER_KEY = "HnzTBLRUh3wphE5xp8ZsNvmwh";
  696.  
  697.     private static final String OAUTH_CONSUMER_SECRET = "OGDLu3segzRqKLQmfzqAu1NzAch5p5FTLLuZqyck8wdD4aQFHb";
  698.  
  699.     // private static final String OAUTH_CONSUMER_KEY =
  700.     // "L8YIhIJlXtwS9qNyrS2qxuNlG";
  701.     // private static final String OAUTH_CONSUMER_SECRET =
  702.     // "RgJC0Ez0awRR064770p2RxYb3HJ2EorJGRboyNbtTe9St27yI0";
  703.  
  704.     private static final String TWITTER_CALLBACK_URL = "oauth://t4jsample";
  705.     // private static final String TWITTER_CALLBACK_URL =
  706.     // "http://www.neznam.com/";
  707.  
  708.     public static final String URL_TWITTER_OAUTH_VERIFIER = "oauth_verifier";
  709.  
  710.     private static RequestToken requestToken;
  711.  
  712.     private static Twitter twitter;
  713.  
  714.     private void loginTwitter() {
  715.  
  716.         twitterWebView = new WebView(this);
  717.         twitterWebViewWrapper.setVisibility(View.VISIBLE);
  718.         twitterWebViewWrapper.addView(twitterWebView);
  719.  
  720.         twitterWebView.onResume();
  721.         twitterWebView.setWebViewClient(new WebViewClient() {
  722.  
  723.             @Override
  724.             public void onLoadResource(WebView view, String url) {
  725.                 // TODO Auto-generated method stub
  726.                 NovalacLogger.logD("load res=" + url);
  727.                 super.onLoadResource(view, url);
  728.             }
  729.  
  730.             @Override
  731.             public void onPageStarted(WebView view, String url, Bitmap favicon) {
  732.                 NovalacLogger.logD("onpagestart=" + url);
  733.                 super.onPageStarted(view, url, favicon);
  734.  
  735.             }
  736.  
  737.             @Override
  738.             public boolean shouldOverrideUrlLoading(WebView view, String url) {
  739.  
  740.                 twitterWebView.setVisibility(View.GONE);
  741.                 twitterWebViewWrapper.setVisibility(View.GONE);
  742.  
  743.                 // need to use reflection because of min api 8 - onPause webview
  744.                 // is available from 11
  745.                 try {
  746.                     Class.forName("android.webkit.WebView")
  747.                             .getMethod("onPause", (Class[]) null)
  748.                             .invoke(twitterWebView, (Object[]) null);
  749. //                  twitterWebView.destroy();
  750.                 } catch (IllegalAccessException e1) {
  751.                     // TODO Auto-generated catch block
  752.                     e1.printStackTrace();
  753.                 } catch (IllegalArgumentException e1) {
  754.                     // TODO Auto-generated catch block
  755.                     e1.printStackTrace();
  756.                 } catch (InvocationTargetException e1) {
  757.                     // TODO Auto-generated catch block
  758.                     e1.printStackTrace();
  759.                 } catch (NoSuchMethodException e1) {
  760.                     // TODO Auto-generated catch block
  761.                     e1.printStackTrace();
  762.                 } catch (ClassNotFoundException e1) {
  763.                     // TODO Auto-generated catch block
  764.                     e1.printStackTrace();
  765.                 }
  766.  
  767.                 if (url.contains(TWITTER_CALLBACK_URL)) {
  768.                     try {
  769.                         Uri uri = Uri.parse(url);
  770.                         NovalacLogger.logD("url=" + url);
  771.                         new AsyncTwitterUserRequest().execute(uri);
  772.                     } catch (IllegalStateException e) {
  773.                         e.printStackTrace();
  774.                     }
  775.                     return false;
  776.                 } else {
  777.                     // return super.shouldOverrideUrlLoading(view, url);
  778.                     return false;
  779.                 }
  780.  
  781.             }
  782.  
  783.         });
  784.  
  785.         twitterWebView.clearCache(true);
  786.  
  787.         ConfigurationBuilder builder = new ConfigurationBuilder();
  788.         builder.setOAuthConsumerKey(OAUTH_CONSUMER_KEY);
  789.         builder.setOAuthConsumerSecret(OAUTH_CONSUMER_SECRET);
  790.  
  791.         try {
  792.             twitter4j.conf.Configuration configuration = builder.build();
  793.             TwitterFactory factory = new TwitterFactory(configuration);
  794.             twitter = factory.getInstance();
  795.             new AsyncTwitterRequest().execute();
  796.         } catch (Exception e) {
  797.             e.printStackTrace();
  798.         }
  799.  
  800.     }
  801.  
  802.     private class AsyncTwitterRequest extends AsyncTask {
  803.  
  804.         @Override
  805.         protected Object doInBackground(Object[] params) {
  806.  
  807.             try {
  808.                 requestToken = twitter
  809.                         .getOAuthRequestToken(TWITTER_CALLBACK_URL);
  810.  
  811.             } catch (TwitterException e) {
  812.                 e.printStackTrace();
  813.             }
  814.  
  815.             HomeActivity.this.runOnUiThread(new Runnable() {
  816.  
  817.                 @Override
  818.                 public void run() {
  819.                     if (requestToken != null) {
  820.                         twitterWebView.setVisibility(View.VISIBLE);
  821.                         NovalacLogger.logD("request token url="
  822.                                 + requestToken.getAuthenticationURL());
  823.                         twitterWebView.loadUrl(requestToken
  824.                                 .getAuthenticationURL());
  825.                     } else {
  826.                         NovalacLogger.logD("request token == null");
  827.                         twitterWebView.setVisibility(View.GONE);
  828.                     }
  829.  
  830.                 }
  831.             });
  832.  
  833.             return null;
  834.         }
  835.     }
  836.  
  837.     private class AsyncTwitterUserRequest extends AsyncTask {
  838.  
  839.         @Override
  840.         protected Object doInBackground(Object[] params) {
  841.             NovalacLogger.logD("async twitter user request");
  842.             Uri uri = (Uri) params[0];
  843.             String verifier = uri.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER);
  844.  
  845.             try {
  846.                 final AccessToken accessToken = twitter.getOAuthAccessToken(
  847.                         requestToken, verifier);
  848.                 prefs.setTwitterLoggedIn(true);
  849.                 prefs.setTwitterOauthToken(accessToken.getToken());
  850.                 prefs.setTwitterTokenSecret(accessToken.getTokenSecret());
  851.                 // final User user = twitter.showUser(twitter.getId());
  852.                 if (shouldPostPhotoAfterTwitterLogin) {
  853.                     shouldPostPhotoAfterTwitterLogin = false;
  854.                     shareOnTwitterWithImage(cachedShareData);
  855.                 } else {
  856.                     postLoginUser(twitter.getId() + "", "twitter");
  857.                 }
  858.  
  859.             } catch (Exception e) {
  860.  
  861.                 e.printStackTrace();
  862.             }
  863.  
  864.             return null;
  865.         }
  866.     }
  867.  
  868.     @Override
  869.     protected void onStop() {
  870.         super.onStop();
  871.         if (mGoogleApiClient != null) {
  872.             mGoogleApiClient.disconnect();
  873.         }
  874.     }
  875.  
  876.  
  877.     private ConnectionResult mConnectionResult;
  878.  
  879.     private void loginGooglePlus() {
  880.         // User clicked the sign-in button, so begin the sign-in process and automatically
  881.         // attempt to resolve any errors that occur.
  882.         mShouldResolve = true;
  883.         mGoogleApiClient.connect();
  884.     }
  885.  
  886.     private void postLoginUser(String uid, final String provider) {
  887.  
  888.         NovalacService service = ((NovalacApplication) getApplication())
  889.                 .getService();
  890.  
  891.         SocialUser socialUser = new SocialUser();
  892.         socialUser.setUid(uid);
  893.         socialUser.setProvider(provider);
  894.  
  895.         SocialUserWrapper wrapper = new SocialUserWrapper();
  896.         wrapper.setSocialUser(socialUser);
  897.  
  898.         service.login(wrapper, new BaseCallback<AuthTokenWrapper>() {
  899.  
  900.             @Override
  901.             protected void onSuccess(AuthTokenWrapper t, Response response) {
  902.                 String result = String.format(URLstub, STUB_SOCIAL_LOGIN,
  903.                         t.getAuthToken());
  904.                 NovalacLogger.logD("login provider=" + provider
  905.                         + " with token=" + t.getAuthToken());
  906.                 webView.loadUrl(result);
  907.             }
  908.  
  909.             @Override
  910.             protected void onErrorMessage(String message) {
  911.                 String result = String.format(URLstub, STUB_SOCIAL_LOGIN, "0");
  912.                 NovalacLogger.logD("login provider=" + provider
  913.                         + " with token=" + " on error msg");
  914.                 webView.loadUrl(result);
  915.             }
  916.  
  917.             @Override
  918.             protected void onGenericError() {
  919.                 String result = String.format(URLstub, STUB_SOCIAL_LOGIN, "0");
  920.                 webView.loadUrl(result);
  921.                 NovalacLogger.logD("login provider=" + provider
  922.                         + " with token=" + " on gen err");
  923.             }
  924.         });
  925.     }
  926.  
  927.     @Override
  928.     protected void onResume() {
  929.         super.onResume();
  930.  
  931.         // Session session = Session.getActiveSession();
  932.         // if (session != null &&
  933.         // (session.isOpened() || session.isClosed())) {
  934.         // onSessionStateChange(session, session.getState(), null);
  935.         // }
  936.  
  937.         uiHelper.onResume();
  938.  
  939.     }
  940.  
  941.     @Override
  942.     protected void onPause() {
  943.         super.onPause();
  944.  
  945.         uiHelper.onPause();
  946.  
  947.     }
  948.  
  949.     /**
  950.      * Register push with our server, send the device id and language instance
  951.      * id
  952.      */
  953.     private void registerLocally(final String regId) {
  954.         prefs.setGCMRegistrationID(regId);
  955.         PushRegisterSource source = Sources
  956.                 .getPushRegisterSource(NovalacApplication.getHomeActivity());
  957.         PushRegisterParams params = new PushRegisterParams();
  958.  
  959.         params.setDeviceToken(regId);
  960.         params.setLocale(prefs.getStoredLanguage());
  961.         params.setPlatformId(2);
  962.         params.setUdid(NovalacUtil.getUniqueDeviceId(HomeActivity.this));
  963.         // params.setInstanceId(prefs.getStoredLanguageId());
  964.         params.setInstanceId(prefs.getStoredPushNotificationLanguageId());
  965.  
  966.         source.setHttpMethod(HttpMethod.POST);
  967.         source.setErrorDeserializer(new NovalacErrorHandler());
  968.         source.setSerializer(new QueryStringSerializer());
  969.         source.setParams(params);
  970.         source.fetchAsync(new LoadListener() {
  971.  
  972.             @Override
  973.             public void onError(ArrayList<Error> errors) {
  974.                 NovalacLogger
  975.                         .logD("push onregister local server error  - nesto");
  976.             }
  977.  
  978.             @Override
  979.             public void beforeLoad() {
  980.  
  981.             }
  982.  
  983.             @Override
  984.             public void afterLoad(DataContainer container) {
  985.                 NovalacLogger
  986.                         .logD("push onregister local server after load - yeah!");
  987.                 StatusResponse response = (StatusResponse) container;
  988.                 if (response != null) {
  989.                     if (response.getStatus().toLowerCase().contains("error")) {
  990.                         Toast.makeText(HomeActivity.this,
  991.                                 response.getErrorMessage(), Toast.LENGTH_LONG)
  992.                                 .show();
  993.                     } else {
  994.                         // Toast.makeText(HomeActivity.this, "all ok",
  995.                         // Toast.LENGTH_LONG).show();
  996.                     }
  997.                 }
  998.             }
  999.  
  1000.         });
  1001.     }
  1002.  
  1003.     /**
  1004.      * Unregister push with our server
  1005.      */
  1006.     public void unregisterLocally(final String regId, int oldLanguageId) {
  1007.         PushUnregisterSource source = Sources
  1008.                 .getPushUnregisterSource(NovalacApplication.getHomeActivity());
  1009.         PushUnregisterParams params = new PushUnregisterParams();
  1010.         params.setDeviceid(NovalacUtil.getUniqueDeviceId(this));
  1011.  
  1012.         params.setInstanceId(oldLanguageId);
  1013.  
  1014.         source.setParams(params);
  1015.         source.setErrorDeserializer(new NovalacErrorHandler());
  1016.         source.fetchAsync(new LoadListener() {
  1017.  
  1018.             @Override
  1019.             public void onError(ArrayList<Error> errors) {
  1020.                 Log.d("push unregister local server error", "nesto");
  1021.  
  1022.             }
  1023.  
  1024.             @Override
  1025.             public void beforeLoad() {
  1026.                 // TODO Auto-generated method stub
  1027.  
  1028.             }
  1029.  
  1030.             @Override
  1031.             public void afterLoad(DataContainer container) {
  1032.                 Log.d("push unregister local server ok", "nesto");
  1033.  
  1034.             }
  1035.         });
  1036.     }
  1037.  
  1038.     private void setConfigurationLanguage(String language) {
  1039.  
  1040.         // Added because API returned wrong locale for serbian language
  1041.         if (language.equals("rs")) {
  1042.             language = "sr";
  1043.         }
  1044.  
  1045.         Locale locale = new Locale(language);
  1046.         Locale.setDefault(locale);
  1047.         Configuration config = new Configuration();
  1048.         config.locale = locale;
  1049.         getApplicationContext().getResources().updateConfiguration(config,
  1050.                 getBaseContext().getResources().getDisplayMetrics());
  1051.  
  1052.     }
  1053.  
  1054.     private OnClickListener loadListener() {
  1055.         OnClickListener listener = new View.OnClickListener() {
  1056.  
  1057.             @Override
  1058.             public void onClick(View v) {
  1059.                 URL = etURL.getText().toString();
  1060.                 prefs.setStoredURL(URL);
  1061.  
  1062.                 webView.loadUrl(URL);
  1063.                 // chooseFromGallery();
  1064.             }
  1065.         };
  1066.         return listener;
  1067.     }
  1068.  
  1069.     @SuppressLint("NewApi")
  1070.     private void initWebView(boolean languageChanged) {
  1071.  
  1072.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  1073.             WebView.setWebContentsDebuggingEnabled(true);
  1074.         }
  1075.  
  1076.         webView.getSettings().setJavaScriptEnabled(true);
  1077.         webView.getSettings().setDomStorageEnabled(true);
  1078.         webView.getSettings().setAppCacheEnabled(true);
  1079.         webView.getSettings().setAppCacheMaxSize(1024 * 1024 * 5);
  1080.         webView.getSettings().setAppCachePath(getCacheDir().getAbsolutePath());
  1081.         webView.getSettings().setAllowFileAccess(true);
  1082.         webView.getSettings().setDatabaseEnabled(true);
  1083. //      String sDataPath = "/data/data/" + webView.getContext().getPackageName()
  1084. //              + "/databases/"; // old path
  1085.         String sDataPath = getApplicationContext().getDir("databases", Context.MODE_PRIVATE).getPath();
  1086.         webView.getSettings().setDatabasePath(sDataPath);
  1087.         webView.getSettings().setDatabaseEnabled(true);
  1088.         webView.addJavascriptInterface(new AndroidInterface(HomeActivity.this),
  1089.                 "Android");
  1090.         webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
  1091.         webView.getSettings().setRenderPriority(RenderPriority.HIGH);
  1092.         webView.setWebChromeClient(new WebChromeClient() {
  1093.             @Override
  1094.             public void onExceededDatabaseQuota(String url,
  1095.                     String databaseIdentifier, long quota,
  1096.                     long estimatedDatabaseSize, long totalQuota,
  1097.                     QuotaUpdater quotaUpdater) {
  1098.  
  1099.                 quotaUpdater.updateQuota(5 * 1024 * 1024);
  1100.             }
  1101.         });
  1102.         webView.setWebViewClient(new WebViewClient() {
  1103.  
  1104.             @Override
  1105.             public void onFormResubmission(WebView view, Message dontResend,
  1106.                     Message resend) {
  1107.                 super.onFormResubmission(view, dontResend, resend);
  1108.             }
  1109.  
  1110.             @Override
  1111.             public void onLoadResource(WebView view, String url) {
  1112.                 super.onLoadResource(view, url);
  1113.             }
  1114.  
  1115.             @Override
  1116.             public void onPageFinished(WebView view, String url) {
  1117.                 super.onPageFinished(view, url);
  1118.             }
  1119.  
  1120.             @Override
  1121.             public void onPageStarted(WebView view, String url, Bitmap favicon) {
  1122.                 super.onPageStarted(view, url, favicon);
  1123.             }
  1124.  
  1125.             @Override
  1126.             public void onReceivedError(WebView view, int errorCode,
  1127.                     String description, String failingUrl) {
  1128.                 super.onReceivedError(view, errorCode, description, failingUrl);
  1129.             }
  1130.  
  1131.             @Override
  1132.             public void onReceivedHttpAuthRequest(WebView view,
  1133.                     HttpAuthHandler handler, String host, String realm) {
  1134.                 super.onReceivedHttpAuthRequest(view, handler, host, realm);
  1135.             }
  1136.  
  1137.             @Override
  1138.             public void onReceivedSslError(WebView view,
  1139.                     SslErrorHandler handler, SslError error) {
  1140.                 super.onReceivedSslError(view, handler, error);
  1141.             }
  1142.  
  1143.             @Override
  1144.             public void onScaleChanged(WebView view, float oldScale,
  1145.                     float newScale) {
  1146.                 super.onScaleChanged(view, oldScale, newScale);
  1147.             }
  1148.  
  1149.             @Override
  1150.             public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
  1151.                 super.onUnhandledKeyEvent(view, event);
  1152.             }
  1153.  
  1154.             @Override
  1155.             public boolean shouldOverrideUrlLoading(WebView view, String url) {
  1156.                 NovalacLogger.logD("url=" + url);
  1157.                 if (url.contains(URL_FILEPICKER)) {
  1158.                     String[] actions = url.split("/");
  1159.                     cancel = actions[actions.length - 1];
  1160.                     camera = actions[actions.length - 2];
  1161.                     photo = actions[actions.length - 3];
  1162.  
  1163.                     try {
  1164.                         cancel = URLDecoder.decode(cancel, "UTF-8");
  1165.                         camera = URLDecoder.decode(camera, "UTF-8");
  1166.                         photo = URLDecoder.decode(photo, "UTF-8");
  1167.                         changeUserAvatar();
  1168.                     } catch (UnsupportedEncodingException e) {
  1169.                         e.printStackTrace();
  1170.                     }
  1171.  
  1172.                     return true;
  1173.                 } else if (url.contains(URL_DATEPICKER)) {
  1174.                     dateDialog.show();
  1175.                     return true;
  1176.  
  1177.                 } else if (url.contains(URL_EXTERNAL)) {
  1178.                     String tmpUrl = url.replace(URL_EXTERNAL, "");
  1179.                     if (tmpUrl.startsWith("/")) {
  1180.                         tmpUrl = tmpUrl.substring(1);
  1181.                     }
  1182.                     // if (!tmpUrl.startsWith("http://") &&
  1183.                     // !tmpUrl.startsWith("https://"))
  1184.                     // tmpUrl = "http://" + tmpUrl;
  1185.                     Intent myIntent = new Intent(Intent.ACTION_VIEW, Uri
  1186.                             .parse(tmpUrl));
  1187.                     startActivity(myIntent);
  1188.                     return true;
  1189.                 }
  1190.                 if (url.contains(URL_LANGUAGE)) {
  1191.                     String language = url.replace(URL_LANGUAGE, "");
  1192.                     NovalacLogger.logD("language=" + language);
  1193.                     if (language.startsWith("/")) {
  1194.                         language = language.substring(1);
  1195.                     }
  1196.                     NovalacLogger.logD("language=" + language);
  1197.  
  1198.                     // int oldLanguageId = prefs.getStoredLanguageId();
  1199.                     int oldLanguageId = prefs
  1200.                             .getStoredPushNotificationLanguageId();
  1201.  
  1202.                     prefs.setStoredLanguage(language);
  1203.                     prefs.setStoredPushNotificatinLanguage(language);
  1204.                     setConfigurationLanguage(language);
  1205.  
  1206.                     Calendar cal = Calendar.getInstance(Locale.getDefault());
  1207.                     dateDialog = new DatePickerDialog(HomeActivity.this,
  1208.                             HomeActivity.this, cal.get(Calendar.YEAR), cal
  1209.                             .get(Calendar.MONTH), cal
  1210.                             .get(Calendar.DAY_OF_MONTH));
  1211.  
  1212.                     unregisterLocally(prefs.getGCMRegistrationID(),
  1213.                             oldLanguageId);
  1214.  
  1215.                     registerLocally(prefs.getGCMRegistrationID());
  1216.  
  1217.                     initWebView(true);
  1218.                     // getAndLoadUrl(true);
  1219.                     return true;
  1220.                 } else if (url.contains(URL_BANNERS)) {
  1221.                     loadBanner();
  1222.                     return true;
  1223.                 } else if (url.contains(URL_CLOSE)) {
  1224.                     finish();
  1225.                     return true;
  1226.                 } else if (url.contains(URL_TIMEPICKER)) {
  1227.                     showTimePicker();
  1228.                     return true;
  1229.                 } else if (url.contains(URL_REMINDER)) {
  1230.  
  1231.                     if (url.contains(STUB_CREATE)) {
  1232.                         String contentReminder = "";
  1233.                         String reminderParams = url.replace(URL_REMINDER + "/"
  1234.                                 + STUB_CREATE + "/", "");
  1235.                         String[] params = reminderParams.split("/");
  1236.                         try {
  1237.                             if (ReminderService.createReminderAndSave(
  1238.                                     HomeActivity.this, params[0],
  1239.                                     Long.parseLong(params[1]), params[2],
  1240.                                     params[3])) {
  1241.                                 contentReminder = String.format(URLstub,
  1242.                                         STUB_REMINDER + STUB_CREATE, "1");
  1243.                             } else {
  1244.                                 // contentReminder = String.format(URLstub,
  1245.                                 // STUB_REMINDER + STUB_CREATE, "0");
  1246.                                 return true;
  1247.                             }
  1248.                         } catch (NumberFormatException e) {
  1249.                             e.printStackTrace();
  1250.                             contentReminder = String.format(URLstub,
  1251.                                     STUB_REMINDER + STUB_CREATE, "0");
  1252.                         } catch (JSONException e) {
  1253.                             e.printStackTrace();
  1254.                         }
  1255.                         NovalacLogger
  1256.                                 .logD("contentReminder=" + contentReminder);
  1257.                         webView.loadUrl(contentReminder);
  1258.  
  1259.                     } else if (url.contains(STUB_UPDATE)) {
  1260.                         String reminderParams = url.replace(URL_REMINDER + "/"
  1261.                                 + STUB_UPDATE + "/", "");
  1262.                         String contentReminder = "";
  1263.                         String[] params = reminderParams.split("/");
  1264.                         try {
  1265.                             if (ReminderService.updateReminder(
  1266.                                     HomeActivity.this, params[0],
  1267.                                     Long.parseLong(params[1]), params[2],
  1268.                                     params[3])) {
  1269.                                 contentReminder = String.format(URLstub,
  1270.                                         STUB_REMINDER + STUB_UPDATE, "1");
  1271.                                 NovalacLogger.logD("true");
  1272.                             } else {
  1273.                                 // contentReminder = String.format(URLstub,
  1274.                                 // STUB_REMINDER + STUB_UPDATE, "0");
  1275.                                 NovalacLogger.logD("false");
  1276.                                 return true;
  1277.                             }
  1278.                         } catch (NumberFormatException e) {
  1279.                             e.printStackTrace();
  1280.                             contentReminder = String.format(URLstub,
  1281.                                     STUB_REMINDER + STUB_UPDATE, "0");
  1282.                         } catch (JSONException e) {
  1283.                             e.printStackTrace();
  1284.                             contentReminder = String.format(URLstub,
  1285.                                     STUB_REMINDER + STUB_UPDATE, "0");
  1286.                         }
  1287.  
  1288.                         NovalacLogger
  1289.                                 .logD("contentReminder=" + contentReminder);
  1290.                         webView.loadUrl(contentReminder);
  1291.  
  1292.                     } else if (url.contains(STUB_DESTROY)) {
  1293.                         String reminderParams = url.replace(URL_REMINDER + "/"
  1294.                                 + STUB_DESTROY + "/", "");
  1295.                         String[] params = reminderParams.split("/");
  1296.                         try {
  1297.                             ReminderService.deleteReminder(HomeActivity.this,
  1298.                                     params[0]);
  1299.                         } catch (JSONException e) {
  1300.                             e.printStackTrace();
  1301.                         }
  1302.                         String contentReminder = String.format(URLstub,
  1303.                                 STUB_REMINDER + STUB_DESTROY, "1");
  1304.                         NovalacLogger
  1305.                                 .logD("contentReminder=" + contentReminder);
  1306.                         webView.loadUrl(contentReminder);
  1307.  
  1308.                     }
  1309.  
  1310.                     return true;
  1311.                 } else if (url.contains(URL_PUSH_APP_LOADED)) {
  1312.                     appLoaded = true;
  1313.                     if (fromPush && appLoaded) {
  1314.                         if (content != null) {
  1315.                             webView.loadUrl("javascript:NativeBridge.pushNotification.alert(\""
  1316.                                     + content + "\")");
  1317.                         } else if (custom != null) {
  1318.                             try {
  1319.                                 JSONObject obj = new JSONObject(custom);
  1320.                                 urlText = obj.getString("text");
  1321.                                 urlUrl = obj.getString("url");
  1322.                                 webView.loadUrl("javascript:NativeBridge.pushNotification.urlAlert(\""
  1323.                                         + urlText + "\", \"" + urlUrl + "\")");
  1324.                             } catch (JSONException e) {
  1325.                                 // TODO Auto-generated catch block
  1326.                                 e.printStackTrace();
  1327.                             }
  1328.                         }
  1329.                     }
  1330.  
  1331.                     return true;
  1332.                 } else if (url.contains(URL_SHARE)) {
  1333.                     String shareParams = url.replace(URL_SHARE + "/", "");
  1334.                     String[] params = shareParams.split("/");
  1335.                     String message;
  1336.                     try {
  1337.                         message = URLDecoder.decode(params[1], "UTF-8");
  1338.                         if (params[0].equals("twitter")) {
  1339.                             shareOnTwitter(message);
  1340.                         } else if (params[0].equals("facebook")) {
  1341.                             shareOnFacebook(message);
  1342.                         }
  1343.                     } catch (UnsupportedEncodingException e) {
  1344.                         // TODO Auto-generated catch block
  1345.                         e.printStackTrace();
  1346.                     }
  1347.                     return true;
  1348.  
  1349.                 } else if (url.contains(URL_EXPORT_ADD)) {
  1350.                     return true;
  1351.                 } else if (url.contains(URL_EXPORT_SEND)) {
  1352.                     return true;
  1353.                 } else if (url.contains(URL_LOADING)) {
  1354.                     toggleProgressDialog();
  1355.                     return true;
  1356.                 } else if (url.contains(URL_MEASUREMENT_NOTIFICAITON)) {
  1357.                     String measurementParams = url.replace(
  1358.                             URL_MEASUREMENT_NOTIFICAITON + "/", "");
  1359.                     String[] params = measurementParams.split("/");
  1360.  
  1361.                     String childID = params[0];
  1362.  
  1363.                     String timestamp;
  1364.                     if (params.length == 1) {
  1365.                         timestamp = "";
  1366.                     } else {
  1367.                         timestamp = params[1];
  1368.                     }
  1369.  
  1370.                     if (timestamp != "") {
  1371.                         raiseAlarmNotification(childID, timestamp);
  1372.                     } else {
  1373.                         deleteAlarmNotification(childID);
  1374.                     }
  1375.  
  1376.                     return true;
  1377.                 } else if (url.contains(URL_SOCIAL_LOGIN)) {
  1378.  
  1379.                     String social = url.replace(URL_SOCIAL_LOGIN + "/", "");
  1380.  
  1381.                     NovalacLogger.logD("social=" + social);
  1382.  
  1383.                     if (social.equals(STUB_FACEBOOK)) {
  1384.                         loginFacebook();
  1385.                     } else if (social.equals(STUB_TWITTER)) {
  1386.                         loginTwitter();
  1387.                     } else if (social.equals(STUB_GOOGLE)) {
  1388.                         loginGooglePlus();
  1389.                     }
  1390.  
  1391.                     return true;
  1392.                 } else if (url.contains(URL_LOGIN)) {
  1393.  
  1394.                     String loginString = url.replace(URL_LOGIN + "/", "");
  1395.                     String[] params = loginString.split("/");
  1396.  
  1397.                     loginUser(params[0], params[1]);
  1398.  
  1399.                     return true;
  1400.                 } else if (url.contains(URL_USER_CREATE)) {
  1401.  
  1402.                     String userCreateString = url.replace(
  1403.                             URL_USER_CREATE + "/", "");
  1404.                     String[] params = userCreateString.split("/");
  1405.  
  1406.                     createUser(params[0], params[1]);
  1407.  
  1408.                     return true;
  1409.                 } else if (url.contains(URL_IMPORT_USER_DATA)) {
  1410.  
  1411.                     String userToken = url.replace(URL_IMPORT_USER_DATA + "/",
  1412.                             "");
  1413.  
  1414.                     importUser(userToken);
  1415.  
  1416.                     return true;
  1417.                 } else if (url.contains(URL_LOAD_USER_DATA)) {
  1418.  
  1419.                     String userToken = url
  1420.                             .replace(URL_LOAD_USER_DATA + "/", "");
  1421.                     importUser(userToken);
  1422.  
  1423.                     return true;
  1424.                 } else if (url.contains(URL_RESET_PASSWORD)) {
  1425.                     String email = url.replace(URL_RESET_PASSWORD + "/", "");
  1426.                     resetPassword(email);
  1427.                     return true;
  1428.                 } else if (url.contains(URL_NATIVE)) {
  1429.                     NovalacLogger.logD("url native=" + url);
  1430.                     return true;
  1431.                 } else {
  1432.  
  1433.                     NovalacLogger.logD("should override normal");
  1434.  
  1435.                     return super.shouldOverrideUrlLoading(view, url);
  1436.                 }
  1437.             }
  1438.  
  1439.         });
  1440.         webView.setWebChromeClient(new WebChromeClient());
  1441.         webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
  1442.  
  1443.         getAndLoadUrl(languageChanged);
  1444.         if (fromPush && appLoaded) {
  1445.             if (content != null) {
  1446.                 webView.loadUrl("javascript:NativeBridge.pushNotification.alert(\""
  1447.                         + content + "\")");
  1448.             } else if (custom != null) {
  1449.                 try {
  1450.                     JSONObject obj = new JSONObject(custom);
  1451.                     urlText = obj.getString("text");
  1452.                     urlUrl = obj.getString("url");
  1453.                     webView.loadUrl("javascript:NativeBridge.pushNotification.urlAlert(\""
  1454.                             + urlText + "\", \"" + urlUrl + "\")");
  1455.                 } catch (JSONException e) {
  1456.                     // TODO Auto-generated catch block
  1457.                     e.printStackTrace();
  1458.                 }
  1459.             }
  1460.         }
  1461.     }
  1462.  
  1463.     private void resetPassword(String email) {
  1464.         EmailWrapper emailWrapper = new EmailWrapper();
  1465.         emailWrapper.setEmail(email);
  1466.         ((NovalacApplication) getApplication()).getService().resetPassword(
  1467.                 emailWrapper, new BaseCallback<MessageResponse>() {
  1468.  
  1469.                     @Override
  1470.                     protected void onSuccess(MessageResponse t,
  1471.                             Response response) {
  1472.                         String result = String.format(URLstub,
  1473.                                 STUB_RESET_PASSWORD, 1);
  1474.                         webView.loadUrl(result);
  1475.                     }
  1476.  
  1477.                     @Override
  1478.                     protected void onErrorMessage(String message) {
  1479.                         String result = String.format(URLstub,
  1480.                                 STUB_RESET_PASSWORD, 0);
  1481.                         webView.loadUrl(result);
  1482.                     }
  1483.  
  1484.                     @Override
  1485.                     protected void onGenericError() {
  1486.                         String result = String.format(URLstub,
  1487.                                 STUB_RESET_PASSWORD, 0);
  1488.                         webView.loadUrl(result);
  1489.                     }
  1490.                 });
  1491.     }
  1492.  
  1493.     private static final int CHUNK_SIZE = 500;
  1494.  
  1495.     private String cachedUserData;
  1496.  
  1497.     private void importUser(String userToken) {
  1498.  
  1499.         ((NovalacApplication) getApplication()).getService().fetchDocument(
  1500.                 userToken, new BaseCallback<DocumentResponseWrapper>() {
  1501.  
  1502.                     @Override
  1503.                     protected void onSuccess(DocumentResponseWrapper t,
  1504.                             Response response) {
  1505.  
  1506.                         String result;
  1507.  
  1508.                         if (t == null) {
  1509.                             result = String.format(URLstub,
  1510.                                     STUB_IMPORT_USER_DATA, 0);
  1511.                             webView.loadUrl(result);
  1512.                         } else {
  1513.  
  1514.                             // result = String.format(URLstub,
  1515.                             // STUB_IMPORT_USER_DATA, t.getDocument());
  1516.  
  1517.                             // String document = t.getDocument();
  1518.                             // int documentLength = t.getDocument().length();
  1519.                             //
  1520.                             // float chunkSizeFloat = (((float)documentLength) /
  1521.                             // CHUNK_SIZE);
  1522.                             // int chunksSize = (int) Math.ceil(chunkSizeFloat);
  1523.                             //
  1524.                             // String chunkedJson;
  1525.                             // for (int i = 0; i < chunksSize; i++) {
  1526.                             // if ((i + 1) * CHUNK_SIZE > documentLength) {
  1527.                             // chunkedJson = generateChunkJson(i, chunksSize,
  1528.                             // t.getDocument().substring(i * CHUNK_SIZE));
  1529.                             // } else {
  1530.                             // chunkedJson = generateChunkJson(i, chunksSize,
  1531.                             // t.getDocument().substring(i * CHUNK_SIZE, (i + 1
  1532.                             // ) * CHUNK_SIZE));
  1533.                             // }
  1534.                             //
  1535.                             // // result = String.format(URLstub,
  1536.                             // STUB_ANDROID_CHUNK_RECEIVER, chunkedJson);
  1537.                             // result = String.format(URLstub,
  1538.                             // STUB_ANDROID_CHUNK_RECEIVER, "abcde");
  1539.                             // webView.loadUrl(result);
  1540.                             // }
  1541.  
  1542.                             cachedUserData = t.getDocument();
  1543.                             result = String.format(URLstub,
  1544.                                     STUB_IMPORT_USER_DATA, 1);
  1545.                             webView.loadUrl(result);
  1546.  
  1547.                         }
  1548.  
  1549.                     }
  1550.  
  1551.                     @Override
  1552.                     protected void onGenericError() {
  1553.                         String result = String.format(URLstub,
  1554.                                 STUB_IMPORT_USER_DATA, 0);
  1555.                         NovalacLogger.logD("on generic error");
  1556.                         webView.loadUrl(result);
  1557.                     }
  1558.  
  1559.                     @Override
  1560.                     protected void onErrorMessage(String message) {
  1561.                         NovalacLogger.logD("error msg=" + message);
  1562.                         String result = String.format(URLstub,
  1563.                                 STUB_IMPORT_USER_DATA, 0);
  1564.                         webView.loadUrl(result);
  1565.                     }
  1566.                 });
  1567.  
  1568.     }
  1569.  
  1570.     private static final String INDEX_JSON = "index";
  1571.  
  1572.     private static final String LEN_JSON = "len";
  1573.  
  1574.     private static final String DATA_JSON = "data";
  1575.  
  1576.     private String generateChunkJson(int index, int length, String data) {
  1577.  
  1578.         JsonObject chunkJson = new JsonObject();
  1579.         chunkJson.addProperty(INDEX_JSON, index);
  1580.         chunkJson.addProperty(LEN_JSON, length);
  1581.         chunkJson.addProperty(DATA_JSON, data);
  1582.  
  1583.         NovalacLogger.logD("chunk=" + chunkJson.toString());
  1584.  
  1585.         return chunkJson.toString();
  1586.     }
  1587.  
  1588.     private String saveDocumentOnDisk(String document) {
  1589.  
  1590.         String path = "";
  1591.         String FILENAME = "document.js";
  1592.  
  1593.         try {
  1594.             FileOutputStream fos = openFileOutput(FILENAME,
  1595.                     Context.MODE_WORLD_READABLE);
  1596.             fos.write(document.getBytes());
  1597.             fos.close();
  1598.             path = "file://" + getFileStreamPath(FILENAME).getAbsolutePath();
  1599.         } catch (FileNotFoundException e) {
  1600.             // TODO Auto-generated catch block
  1601.             e.printStackTrace();
  1602.         } catch (IOException e) {
  1603.             // TODO Auto-generated catch block
  1604.             e.printStackTrace();
  1605.         }
  1606.  
  1607.         return path;
  1608.     }
  1609.  
  1610.     private void loginUser(String username, String password) {
  1611.  
  1612.         com.infinum.novalac.api.models.User user = new com.infinum.novalac.api.models.User();
  1613.         user.setEmail(username);
  1614.         user.setPassword(password);
  1615.  
  1616.         UserWrapper wrapper = new UserWrapper();
  1617.         wrapper.setUser(user);
  1618.  
  1619.         ((NovalacApplication) getApplication()).getService().login(wrapper,
  1620.                 new BaseCallback<AuthTokenWrapper>() {
  1621.  
  1622.                     @Override
  1623.                     protected void onSuccess(AuthTokenWrapper t,
  1624.                             Response response) {
  1625.                         String result = String.format(URLstub, STUB_LOGIN,
  1626.                                 t.getAuthToken());
  1627.                         webView.loadUrl(result);
  1628.                     }
  1629.  
  1630.                     @Override
  1631.                     protected void onErrorMessage(String message) {
  1632.                         String result = String.format(URLstub, STUB_LOGIN, "0");
  1633.                         webView.loadUrl(result);
  1634.                     }
  1635.  
  1636.                     @Override
  1637.                     protected void onGenericError() {
  1638.                         String result = String.format(URLstub, STUB_LOGIN, "0");
  1639.                         webView.loadUrl(result);
  1640.                     }
  1641.                 });
  1642.  
  1643.     }
  1644.  
  1645.     private void createUser(String username, String password) {
  1646.  
  1647.         com.infinum.novalac.api.models.User user = new com.infinum.novalac.api.models.User();
  1648.         user.setEmail(username);
  1649.         user.setPassword(password);
  1650.  
  1651.         UserWrapper userWrapper = new UserWrapper();
  1652.         userWrapper.setUser(user);
  1653.  
  1654.         ((NovalacApplication) getApplication()).getService().register(
  1655.                 userWrapper, new BaseCallback<AuthTokenWrapper>() {
  1656.  
  1657.                     @Override
  1658.                     protected void onSuccess(AuthTokenWrapper t,
  1659.                             Response response) {
  1660.                         String result = String.format(URLstub,
  1661.                                 STUB_USER_CREATE, t.getAuthToken());
  1662.                         webView.loadUrl(result);
  1663.                     }
  1664.  
  1665.                     @Override
  1666.                     protected void onErrorMessage(String message) {
  1667.                         String result = String.format(URLstub,
  1668.                                 STUB_USER_CREATE, 0);
  1669.                         webView.loadUrl(result);
  1670.                     }
  1671.  
  1672.                     @Override
  1673.                     protected void onGenericError() {
  1674.                         String result = String.format(URLstub,
  1675.                                 STUB_USER_CREATE, 0);
  1676.                         webView.loadUrl(result);
  1677.                     }
  1678.                 });
  1679.  
  1680.     }
  1681.  
  1682.     private void deleteNotificationInStatusBar(String childID) {
  1683.         NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  1684.  
  1685.         notificationManager.cancel(prefs.getNotificaitonIdForChildId(childID));
  1686.     }
  1687.  
  1688.     private void deleteAlarmNotification(String childID) {
  1689.         Intent intent = new Intent("novalac.receiver");
  1690.         intent.putExtra(CHILD_ID, childID);
  1691.  
  1692.         int notificationId = prefs.getNotificaitonIdForChildId(childID);
  1693.  
  1694.         PendingIntent sender = PendingIntent.getBroadcast(this, notificationId,
  1695.                 intent, PendingIntent.FLAG_UPDATE_CURRENT);
  1696.  
  1697.         AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
  1698.         alarmManager.cancel(sender);
  1699.  
  1700.         deleteNotificationInStatusBar(childID);
  1701.     }
  1702.  
  1703.     private void raiseAlarmNotification(String childID, String timeStamp) {
  1704.         int notificationId = prefs.getNotificaitonIdForChildId(childID);
  1705.         if (notificationId == -100) {
  1706.             notificationId = prefs.setLastNotificaitonIdForChildId(childID);
  1707.         }
  1708.  
  1709.         AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
  1710.         Intent i = new Intent("novalac.receiver");
  1711.         i.putExtra(CHILD_ID, childID);
  1712.  
  1713.         PendingIntent pi = PendingIntent.getBroadcast(this, notificationId, i,
  1714.                 PendingIntent.FLAG_UPDATE_CURRENT);
  1715.  
  1716.         // deleteAlarmNotification(childID);
  1717.  
  1718.         am.set(AlarmManager.RTC_WAKEUP, Long.valueOf(timeStamp), pi);
  1719.  
  1720.         // Calendar time = Calendar.getInstance();
  1721.         // time.setTimeInMillis(System.currentTimeMillis());
  1722.         // time.add(Calendar.SECOND, 5);
  1723.         // am.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pi);
  1724.     }
  1725.  
  1726.     private void toggleProgressDialog() {
  1727.  
  1728.         if (customProggresDialog == null) {
  1729.  
  1730.             Dialog dialog = new Dialog(HomeActivity.this);
  1731.             View view = LayoutInflater.from(HomeActivity.this).inflate(
  1732.                     R.layout.custom_progress_dialog, null);
  1733.             dialog.setCancelable(false);
  1734.             dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
  1735.             dialog.setContentView(view);
  1736.             customProggresDialog = dialog;
  1737.             customProggresDialog.show();
  1738.  
  1739.         } else {
  1740.             if (customProggresDialog.isShowing()) {
  1741.                 customProggresDialog.cancel();
  1742.             } else {
  1743.                 customProggresDialog.show();
  1744.             }
  1745.  
  1746.         }
  1747.         //
  1748.         // if (progressDialog == null) {
  1749.         // progressDialog = new ProgressDialog(HomeActivity.this);
  1750.         // progressDialog.setCancelable(false);
  1751.         // progressDialog.show();
  1752.         // } else {
  1753.         // if (progressDialog.isShowing()) {
  1754.         // progressDialog.cancel();
  1755.         // } else {
  1756.         // progressDialog.show();
  1757.         // }
  1758.         // }
  1759.     }
  1760.  
  1761.     private void shareOnFacebook(String message) {
  1762. //
  1763. //        final FacebookFacade facebook = new FacebookFacade(this, getString(R.string.app_id));
  1764. //        if (!facebook.isAuthorized()) {
  1765. //            runOnUiThread(new Runnable() {
  1766. //                @Override
  1767. //                public void run() {
  1768. //                    facebook.authorize();
  1769. //                    final String content = String.format(URLstub, STUB_SHARE, "1");
  1770. //                    webView.post(new Runnable() {
  1771. //                        @Override
  1772. //                        public void run() {
  1773. //                            webView.loadUrl(content);
  1774. //                        }
  1775. //                    });
  1776. //                }
  1777. //            });
  1778. //        } else {
  1779. //            facebook.publishMessage(message);
  1780. //            final String content = String.format(URLstub, STUB_SHARE, "1");
  1781. //            webView.post(new Runnable() {
  1782. //                @Override
  1783. //                public void run() {
  1784. //                    webView.loadUrl(content);
  1785. //                }
  1786. //            });
  1787. //        }
  1788.  
  1789.         if (FacebookDialog.canPresentShareDialog(this,
  1790.                 FacebookDialog.ShareDialogFeature.PHOTOS)) {
  1791.  
  1792.             NovalacLogger.logD("can share on facebook");
  1793.  
  1794. //
  1795. //            FacebookDialog shareDialog = new FacebookDialog.PhotoShareDialogBuilder(
  1796. //                    this).addPhotoFiles(files).build();
  1797.             FacebookDialog dialog = new FacebookDialog.ShareDialogBuilder(
  1798.                     this).setApplicationName(getString(R.string.app_name)).build();
  1799.             uiHelper.trackPendingDialogCall(dialog.present());
  1800.  
  1801.         } else {
  1802.  
  1803.             // UNABLE TO SHARE WITH IMAGE ON FACEBOOK WITHOUT INSTALLED FACEBOOK
  1804.             // APP
  1805.             // Session.openActiveSession(this, true, new StatusCallback() {
  1806.             //
  1807.             // @Override
  1808.             // public void call(Session session, SessionState state,
  1809.             // Exception exception) {
  1810.             //
  1811.             // continueShareImageWithFacebook = true;
  1812.             // cachedImageForFacebook = shareData.getImage();
  1813.             // // onSessionStateChange(session, state, exception);
  1814.             //
  1815.             // }
  1816.             // });
  1817.             //
  1818.             // NovalacLogger.logD("can not share on facebook");
  1819.  
  1820.             runOnUiThread(new Runnable() {
  1821.  
  1822.                 @Override
  1823.                 public void run() {
  1824.                     NovalacLogger.logD("share my first 2");
  1825.                     String result = String.format(URLstub, STUB_SHARE_MY_FIRST,
  1826.                             2);
  1827.                     webView.loadUrl(result);
  1828.                 }
  1829.             });
  1830.  
  1831.         }
  1832.  
  1833.     }
  1834.  
  1835.     private void shareOnTwitter(String message) {
  1836.         NovalacLogger.logD(message);
  1837.         twitterHelper = new TwitterHelper(this);
  1838.         twitterHelper.postTweet(HomeActivity.this, message);
  1839.  
  1840.         String content = String.format(URLstub, STUB_SHARE, "1");
  1841.         webView.loadUrl(content);
  1842.  
  1843.     }
  1844.  
  1845.     private void loadBanner() {
  1846.  
  1847.         BannersSource source = Sources.getBannersSource(HomeActivity.this);
  1848.         source.setSerializer(new QueryStringSerializer());
  1849.         source.setDeserializer(new BannersCustomDeserializer());
  1850.  
  1851.         BannersParams params = new BannersParams();
  1852.         params.setLanguageID(prefs.getStoredLanguageId());
  1853.         // params.setLanguageID(32);
  1854.  
  1855.         source.setParams(params);
  1856.         source.fetchAsync(new LoadListener() {
  1857.  
  1858.             @Override
  1859.             public void onError(ArrayList<Error> errors) {
  1860.                 // TODO Auto-generated method stub
  1861.  
  1862.             }
  1863.  
  1864.             @Override
  1865.             public void beforeLoad() {
  1866.                 // TODO Auto-generated method stub
  1867.  
  1868.             }
  1869.  
  1870.             @Override
  1871.             public void afterLoad(DataContainer container) {
  1872.                 Store<Banner> banners = (Store<Banner>) container;
  1873.  
  1874.                 String response = null;
  1875.  
  1876.                 if (banners == null || banners.size() == 0) {
  1877.                     response = "[]";
  1878.                 } else {// vadi podatke iz BannersCustomDeserializera kao
  1879.                     // rawData i samo proslijedujem dalje
  1880.                     response = banners.get(0).getBannerUrl();
  1881.                 }
  1882.  
  1883.                 String content = String.format(URLstubWithResponse,
  1884.                         STUB_BANNERS, response);
  1885.                 // NovalacLogger.logD("content=" + content);
  1886.                 webView.loadUrl(content);
  1887.  
  1888.             }
  1889.         });
  1890.  
  1891.     }
  1892.  
  1893.     private void showTimePicker() {
  1894.         Calendar cal = Calendar.getInstance();
  1895.         TimePickerDialog timePickerDialog = new TimePickerDialog(this,
  1896.                 onTimeSetListener, cal.get(Calendar.HOUR_OF_DAY),
  1897.                 cal.get(Calendar.MINUTE), true);
  1898.         timePickerDialog.show();
  1899.     }
  1900.  
  1901.     private OnTimeSetListener onTimeSetListener = new OnTimeSetListener() {
  1902.  
  1903.         @Override
  1904.         public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
  1905.             String content = String.format(
  1906.                     URLstub,
  1907.                     STUB_TIMEPICKER,
  1908.                     String.format("%02d", hourOfDay) + ":"
  1909.                             + String.format("%02d", minute));
  1910.             webView.loadUrl(content);
  1911.         }
  1912.     };
  1913.  
  1914.     public void getAndLoadUrl(final boolean languageChanged) {
  1915.  
  1916.         // URL = "http://labs.infinum.hr/medis/";
  1917.         // URL = NovalacPreferences.NOVALAC_SERVER;
  1918.         // URL = "file:///android_asset/index.html";
  1919.  
  1920.         String URLComplete;
  1921.  
  1922.         if (android.os.Build.VERSION.SDK_INT == 15) {
  1923.             // prefs.setStoredLanguage("hr");
  1924.             if (prefs.getStoredLanguage() == null) {
  1925.                 webView.getSettings().setUserAgentString(
  1926.                         "{firstRun: 1, hash:'#language'}");
  1927.                 // webView.loadUrl("javascript:(function(){window.startingParams = {  firstRun: 1, hash:'#language'};})()");
  1928.                 // URLComplete = URL + "?android=1&firstRun=1#language";
  1929.             } else {
  1930.                 if (languageChanged) {
  1931.                     webView.getSettings().setUserAgentString(
  1932.                             "{ firstRun: 1,  language: '"
  1933.                                     + prefs.getStoredLanguage() + "'}");
  1934.                     // webView.loadUrl("javascript:window.location.reload( true )");
  1935.                     // webView.loadUrl("javascript:(function(){window.startingParams = { firstRun: 1,  language: '"
  1936.                     // + prefs.getStoredLanguage() + "'};})()");
  1937.                     // URLComplete = URL + "?language=" +
  1938.                     // prefs.getStoredLanguage()
  1939.                     // + "&firstRun=1&android=1";
  1940.                 } else {
  1941.                     webView.getSettings().setUserAgentString(
  1942.                             "{ firstRun: 0,  language: '"
  1943.                                     + prefs.getStoredLanguage() + "'}");
  1944.                     // webView.loadUrl("javascript:(function(){window.startingParams = { firstRun: 0,  language: '"
  1945.                     // + prefs.getStoredLanguage() + "'};})()");
  1946.                     // URLComplete = URL + "?language=" +
  1947.                     // prefs.getStoredLanguage()
  1948.                     // + "&firstRun=0&android=1";
  1949.                 }
  1950.             }
  1951.             prefs.setStoredURL(URL);
  1952.  
  1953.             webView.loadUrl(URL);
  1954.         } else {
  1955.             if (prefs.getStoredLanguage() == null) {
  1956.                 URLComplete = URL + "?android=1&firstRun=1#language";
  1957.             } else {
  1958.                 if (languageChanged) {
  1959.                     URLComplete = URL + "?language="
  1960.                             + prefs.getStoredLanguage()
  1961.                             + "&firstRun=1&android=1";
  1962.                 } else {
  1963.                     URLComplete = URL + "?language="
  1964.                             + prefs.getStoredLanguage()
  1965.                             + "&firstRun=0&android=1";
  1966.                 }
  1967.             }
  1968.             prefs.setStoredURL(URLComplete);
  1969.             webView.loadUrl(URLComplete);
  1970.         }
  1971.  
  1972.     }
  1973.  
  1974.     public static String getUrl(Context context) {
  1975.  
  1976.         // String tempURL = "http://labs.infinum.hr/medis/";
  1977.         String tempURL = NovalacPreferences.NOVALAC_SERVER;
  1978.         NovalacPreferences tempPrefs = new NovalacPreferences(context);
  1979.  
  1980.         if (android.os.Build.VERSION.SDK_INT != 15) {
  1981.             tempURL += "?language=" + tempPrefs.getStoredLanguage()
  1982.                     + "&firstRun=0&android=1";
  1983.         }
  1984.  
  1985.         return tempURL;
  1986.     }
  1987.  
  1988.     @Override
  1989.     public boolean onCreateOptionsMenu(Menu menu) {
  1990.         // getMenuInflater().inflate(R.menu.activity_home, menu);
  1991.         return true;
  1992.     }
  1993.  
  1994.     private void changeUserAvatar() {
  1995.         AlertDialog.Builder adb = new Builder(this);
  1996.         // CharSequence[] picItems = new String[] {
  1997.         // getString(R.string.select_gallery_btn),
  1998.         // getString(R.string.select_photo_btn),
  1999.         // getString(R.string.cancel_btn)
  2000.         // };
  2001.         CharSequence[] picItems = new String[]{photo, camera, cancel};
  2002.         adb.setTitle(R.string.app_name);
  2003.         adb.setItems(picItems, new DialogInterface.OnClickListener() {
  2004.  
  2005.             @Override
  2006.             public void onClick(DialogInterface dialog, int itemID) {
  2007.                 switch (itemID) {
  2008.                     case 0:
  2009.                         chooseFromGallery();
  2010.                         break;
  2011.                     case 1:
  2012.                         takeAPhoto();
  2013.                         break;
  2014.                     case 2:
  2015.                         dialog.dismiss();
  2016.                         break;
  2017.                     default:
  2018.                         dialog.dismiss();
  2019.                         break;
  2020.                 }
  2021.             }
  2022.  
  2023.         });
  2024.         adb.show();
  2025.     }
  2026.  
  2027.     private void chooseFromGallery() {
  2028.         Intent intent = new Intent(Intent.ACTION_PICK,
  2029.                 android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  2030.         intent.setType("image/*");
  2031.         startActivityForResult(intent, REQUEST_CHOOSE_FROM_GALLERY);
  2032.     }
  2033.  
  2034.     private void takeAPhoto() {
  2035.         Intent intent = new Intent(
  2036.                 android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
  2037.  
  2038.         Uri fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
  2039.         currentPhotoUri = fileUri;
  2040.         intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
  2041.  
  2042.         try {
  2043.             intent.putExtra("return-data", true);
  2044.             startActivityForResult(intent, REQUEST_TAKE_A_PHOTO);
  2045.         } catch (ActivityNotFoundException e) {
  2046.             // TODO: sta ako nema niceg
  2047.         }
  2048.     }
  2049.  
  2050.     @Override
  2051.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  2052.         super.onActivityResult(requestCode, resultCode, data);
  2053.  
  2054.         // FacebookLoginUtil.onActivityResult(this, requestCode, resultCode,
  2055.         // data);
  2056.  
  2057.         uiHelper.onActivityResult(requestCode, resultCode, data,
  2058.                 new Callback() {
  2059.  
  2060.                     @Override
  2061.                     public void onError(PendingCall pendingCall,
  2062.                             Exception error, Bundle data) {
  2063.                         NovalacLogger.logD("facebook share on error");
  2064.                         if (continueShareImageWithFacebook) {
  2065.                             // onSessionStateChange()
  2066.                         } else {
  2067.                             String result = String.format(URLstub,
  2068.                                     STUB_SHARE_MY_FIRST, 0);
  2069.                             webView.loadUrl(result);
  2070.                         }
  2071.  
  2072.                     }
  2073.  
  2074.                     @Override
  2075.                     public void onComplete(PendingCall pendingCall, Bundle data) {
  2076.  
  2077.                         NovalacLogger.logD("facebook share on complete");
  2078.  
  2079.                         if (continueShareImageWithFacebook) {
  2080.  
  2081.                         } else {
  2082.  
  2083.                             if (FacebookDialog.getNativeDialogDidComplete(data)) {
  2084.                                 if (FacebookDialog.COMPLETION_GESTURE_CANCEL.equals(FacebookDialog
  2085.                                         .getNativeDialogCompletionGesture(data))) {
  2086.                                     String result = String.format(URLstub,
  2087.                                             STUB_SHARE_MY_FIRST, 0);
  2088.                                     webView.loadUrl(result);
  2089.                                 } else {
  2090.                                     String result = String.format(URLstub,
  2091.                                             STUB_SHARE_MY_FIRST, 1);
  2092.                                     webView.loadUrl(result);
  2093.                                 }
  2094.  
  2095.                             } else {
  2096.                                 String result = String.format(URLstub,
  2097.                                         STUB_SHARE_MY_FIRST, 0);
  2098.                                 webView.loadUrl(result);
  2099.                             }
  2100.                         }
  2101.  
  2102.                     }
  2103.                 });
  2104.  
  2105.         if (resultCode == RESULT_OK) {
  2106.  
  2107.             if (requestCode == CROP) {
  2108.                 Bitmap bmp = (Bitmap) data.getExtras().get("data");
  2109.  
  2110.                 saveImage(bmp);
  2111.  
  2112.             } else if (requestCode == REQUEST_TAKE_A_PHOTO) {
  2113.  
  2114.                 Intent intent = new Intent(this,
  2115.                         eu.janmuller.android.simplecropimage.CropImage.class);
  2116.                 if (currentPhotoUri != null) {
  2117.                     intent.setData(currentPhotoUri);
  2118.  
  2119.                     String filePath = currentPhotoUri.getPath();
  2120.                     intent.putExtra(CropImage.IMAGE_PATH, filePath);
  2121.  
  2122.                     // int rotationForImage =
  2123.                     // AiImageUtils.rotationForImage(this,
  2124.                     // filePath);
  2125.                     // intent.putExtra("rotation_angle", rotationForImage);
  2126.                 } else {
  2127.                     if (data.getExtras() != null
  2128.                             && data.getExtras().get("data") != null) {
  2129.                         Bitmap b = (Bitmap) data.getExtras().get("data");
  2130.  
  2131.                         intent.putExtra("data", b);
  2132.                     } else {
  2133.                         return;
  2134.                     }
  2135.  
  2136.                 }
  2137.                 intent.putExtra(CropImage.ASPECT_X, 1);
  2138.                 intent.putExtra(CropImage.ASPECT_Y, 1);
  2139.                 intent.putExtra(CropImage.OUTPUT_X, 400);
  2140.                 intent.putExtra(CropImage.OUTPUT_Y, 400);
  2141.                 intent.putExtra(CropImage.RETURN_DATA, true);
  2142.                 intent.putExtra(CropImage.SCALE, true);
  2143.                 startActivityForResult(intent, CROP);
  2144.  
  2145.             } else if (requestCode == REQUEST_CHOOSE_FROM_GALLERY) {
  2146.  
  2147.                 Uri u = null;
  2148.                 if (data != null) {
  2149.                     u = data.getData();
  2150.                     if (u != null) {
  2151.                         // Intent intent = new Intent(this,
  2152.                         // com.android.camera.CropImage.class);
  2153.                         Intent intent = new Intent(
  2154.                                 this,
  2155.                                 eu.janmuller.android.simplecropimage.CropImage.class);
  2156.  
  2157.                         // Ovdje nije potrebno raditi neke rotacije kada se
  2158.                         // uzima slika
  2159.                         // iz galerije
  2160.  
  2161.                         // intent.setData(u);
  2162.                         // String filePath = getRealPathFromURI(u);
  2163.                         // int rotationForImage =
  2164.                         // AiImageUtils.rotationForImage(this, filePath);
  2165.                         // intent.putExtra("rotation_angle", rotationForImage);
  2166.  
  2167.                         // } else {
  2168.                         // Bitmap b = (Bitmap) data.getExtras().get("data");
  2169.                         //
  2170.                         // intent.putExtra("data", b);
  2171.                         // }
  2172.  
  2173.                         String filePath = getRealPathFromURI(u);
  2174.                         intent.putExtra(CropImage.IMAGE_PATH, filePath);
  2175.                         intent.putExtra(CropImage.ASPECT_X, 1);
  2176.                         intent.putExtra(CropImage.ASPECT_Y, 1);
  2177.                         intent.putExtra(CropImage.OUTPUT_X, 400);
  2178.                         intent.putExtra(CropImage.OUTPUT_Y, 400);
  2179.                         intent.putExtra(CropImage.RETURN_DATA, true);
  2180.                         intent.putExtra(CropImage.SCALE, true);
  2181.                         startActivityForResult(intent, CROP);
  2182.                     } else {
  2183.                         return;
  2184.                     }
  2185.                 }
  2186.  
  2187.             } else if (requestCode == TwitterHelper.TWITTER_CODE) {
  2188.                 twitterHelper.handleAuthenticationCallback(HomeActivity.this,
  2189.                         data);
  2190.  
  2191.             }
  2192.         }
  2193.  
  2194.         if (requestCode == GOOGLE_PLUS_REQUEST_CODE
  2195.                 || requestCode == REQUEST_AUTHORIZATION) {
  2196.  
  2197.             // If the error resolution was not successful we should not resolve further.
  2198.             if (resultCode != RESULT_OK) {
  2199.                 mShouldResolve = false;
  2200.             } else {
  2201.                 mIsResolving = false;
  2202.                 mGoogleApiClient.connect();
  2203.             }
  2204.         }
  2205.  
  2206.     }
  2207.  
  2208.     private void saveImage(Bitmap bmp) {
  2209.         ByteArrayOutputStream stream = new ByteArrayOutputStream();
  2210.         bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream);
  2211.         byte[] image = stream.toByteArray();
  2212.         try {
  2213.             stream.flush();
  2214.             stream.close();
  2215.         } catch (IOException e) {
  2216.             // TODO Auto-generated catch block
  2217.             e.printStackTrace();
  2218.         }
  2219.         String encodedImage = Base64.encodeToString(image, Base64.DEFAULT);
  2220.         if (encodedImage.contains("\n")) {
  2221.             NovalacLogger.logD(encodedImage);
  2222.             encodedImage = encodedImage.replaceAll("\n", "");
  2223.             NovalacLogger.logD(encodedImage);
  2224.         }
  2225.         String content = String.format(URLstub, STUB_FILEPICKER,
  2226.                 "data:image/png;base64," + encodedImage);
  2227.         NovalacLogger.logD(content);
  2228.         webView.loadUrl(content);
  2229.  
  2230.     }
  2231.  
  2232.     // @Override
  2233.     // public void onDateSet(DatePicker view, int year, int monthOfYear, int
  2234.     // dayOfMonth) {
  2235.     //
  2236.     // // if (isPastDate(year, monthOfYear, dayOfMonth)) {
  2237.     // // return;
  2238.     // // }
  2239.     //
  2240.     // Calendar cal = Calendar.getInstance();
  2241.     // cal.set(year, monthOfYear, dayOfMonth);
  2242.     //
  2243.     // Calendar todayDate = Calendar.getInstance();
  2244.     //
  2245.     // if (cal.after(todayDate)) {
  2246.     //
  2247.     // dateDialog.updateDate(todayDate.get(Calendar.YEAR),
  2248.     // todayDate.get(Calendar.MONTH),
  2249.     // todayDate.get(Calendar.DAY_OF_MONTH));
  2250.     // dateDialog.show();
  2251.     // } else {
  2252.     // Long milis = cal.getTimeInMillis();
  2253.     // String content = String.format(URLstub, STUB_DATEPICKER,
  2254.     // String.valueOf(milis));
  2255.     // Log.d("NOVALAC - datepicker content native load", content);
  2256.     // webView.loadUrl(content);
  2257.     // }
  2258.     //
  2259.     // }
  2260.  
  2261.     @Override
  2262.     public void onBackPressed() {
  2263.         webView.loadUrl("javascript:NativeBridge.back()");
  2264.     }
  2265.  
  2266.     @Override
  2267.     public void onConfigurationChanged(Configuration newConfig) {
  2268.         super.onConfigurationChanged(newConfig);
  2269.  
  2270.     }
  2271.  
  2272.     // @Override
  2273.     // public void onDateSet(net.simonvt.widget.DatePicker view, int year, int
  2274.     // monthOfYear, int dayOfMonth) {
  2275.     // // TODO Auto-generated method stub
  2276.     //
  2277.     // Calendar cal = Calendar.getInstance();
  2278.     // cal.set(year, monthOfYear, dayOfMonth);
  2279.     // Long milis = cal.getTimeInMillis();
  2280.     // String content = String.format(URLstub, STUB_DATEPICKER,
  2281.     // String.valueOf(milis));
  2282.     // Log.d("NOVALAC - datepicker content native load", content);
  2283.     // webView.loadUrl(content);
  2284.     //
  2285.     // }
  2286.     //
  2287.     // private DatePickerDialog.OnDateSetListener mDateSetListener = new
  2288.     // DatePickerDialog.OnDateSetListener() {
  2289.     //
  2290.     // @Override
  2291.     // public void onDateSet(net.simonvt.widget.DatePicker view, int year, int
  2292.     // monthOfYear, int dayOfMonth) {
  2293.     // Calendar cal = Calendar.getInstance();
  2294.     // cal.set(year, monthOfYear, dayOfMonth);
  2295.     // Long milis = cal.getTimeInMillis();
  2296.     // String content = String.format(URLstub, STUB_DATEPICKER,
  2297.     // String.valueOf(milis));
  2298.     // Log.d("NOVALAC - datepicker content native load", content);
  2299.     // webView.loadUrl(content);
  2300.     //
  2301.     // }
  2302.     // };
  2303.  
  2304.     @Override
  2305.     public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
  2306.         Calendar cal = Calendar.getInstance();
  2307.         // cal.set(year, monthOfYear, dayOfMonth);
  2308.         cal.set(arg1, arg2, arg3);
  2309.         Long milis = cal.getTimeInMillis();
  2310.         String content = String.format(URLstub, STUB_DATEPICKER,
  2311.                 String.valueOf(milis));
  2312.         NovalacLogger.logD("datepicker content native load - " + content);
  2313.         webView.loadUrl(content);
  2314.  
  2315.     }
  2316.  
  2317.     @Override
  2318.     protected void onNewIntent(Intent intent) {
  2319.         // TODO Auto-generated method stub
  2320.         super.onNewIntent(intent);
  2321.     }
  2322.  
  2323.     private boolean hasInternet(Context context) {
  2324.         boolean connected = false;
  2325.         try {
  2326.             ConnectivityManager connectivityManager = (ConnectivityManager) context
  2327.                     .getSystemService(Context.CONNECTIVITY_SERVICE);
  2328.  
  2329.             NetworkInfo networkInfo = connectivityManager
  2330.                     .getActiveNetworkInfo();
  2331.             connected = networkInfo != null && networkInfo.isAvailable()
  2332.                     && networkInfo.isConnected();
  2333.             return connected;
  2334.  
  2335.         } catch (Exception e) {
  2336.         }
  2337.         return connected;
  2338.     }
  2339.  
  2340.     public String getRealPathFromURI(Uri contentUri) {
  2341.  
  2342.         String[] columns = {MediaStore.Images.Media.DATA};
  2343.         Cursor cursor = managedQuery(contentUri, columns, // Which columns to
  2344.                 // return
  2345.                 null, // WHERE clause; which rows to return (all rows)
  2346.                 null, // WHERE clause selection arguments (none)
  2347.                 null); // Order-by clause (ascending by name)
  2348.         int column_index = cursor
  2349.                 .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
  2350.         cursor.moveToFirst();
  2351.  
  2352.         return cursor.getString(column_index);
  2353.     }
  2354.  
  2355.     public static final int MEDIA_TYPE_IMAGE = 1;
  2356.  
  2357.     public static final int MEDIA_TYPE_VIDEO = 2;
  2358.  
  2359.     private static final String CURRENT_PHOTO_URI = "current_photo_uri";
  2360.  
  2361.     private TwitterHelper twitterHelper;
  2362.  
  2363.     /** Create a file Uri for saving an image or video */
  2364.     private static Uri getOutputMediaFileUri(int type) {
  2365.         return Uri.fromFile(getOutputMediaFile(type));
  2366.     }
  2367.  
  2368.     /** Create a File for saving an image or video */
  2369.     private static File getOutputMediaFile(int type) {
  2370.         // To be safe, you should check that the SDCard is mounted
  2371.         // using Environment.getExternalStorageState() before doing this.
  2372.  
  2373.         File mediaStorageDir = new File(
  2374.                 Environment
  2375.                         .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
  2376.                 "Novalac");
  2377.  
  2378.         // This location works best if you want the created images to be shared
  2379.         // between applications and persist after your app has been uninstalled.
  2380.  
  2381.         // Create the storage directory if it does not exist
  2382.         if (!mediaStorageDir.exists()) {
  2383.             if (!mediaStorageDir.mkdirs()) {
  2384.                 // Log.d("MyCameraApp", "failed to create directory");
  2385.                 return null;
  2386.             }
  2387.         }
  2388.         File noMedia = new File(mediaStorageDir, ".nomedia");
  2389.         try {
  2390.             noMedia.createNewFile();
  2391.             NovalacLogger.logD("proslo no media");
  2392.         } catch (IOException e) {
  2393.             e.printStackTrace();
  2394.             NovalacLogger.logD("nije proslo no media");
  2395.         }
  2396.  
  2397.         // Create a media file name
  2398.         String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")
  2399.                 .format(new Date());
  2400.         File mediaFile;
  2401.         if (type == MEDIA_TYPE_IMAGE) {
  2402.             mediaFile = new File(mediaStorageDir.getPath() + File.separator
  2403.                     + "IMG_" + timeStamp + ".jpg");
  2404.         } else if (type == MEDIA_TYPE_VIDEO) {
  2405.             mediaFile = new File(mediaStorageDir.getPath() + File.separator
  2406.                     + "VID_" + timeStamp + ".mp4");
  2407.         } else {
  2408.             return null;
  2409.         }
  2410.  
  2411.         return mediaFile;
  2412.     }
  2413.  
  2414.     public static File createImageFile() throws IOException {
  2415.         String timeStamp = new SimpleDateFormat("yyyMMdd_HHmmss")
  2416.                 .format(new Date());
  2417.         String imageFileName = "novalac_" + timeStamp;
  2418.         File image = File.createTempFile(imageFileName, ".jpg",
  2419.                 getPhotoStorageDir());
  2420.  
  2421.         return image;
  2422.     }
  2423.  
  2424.     @SuppressLint("NewApi")
  2425.     public static File getPhotoStorageDir() {
  2426.         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO) {
  2427.             File storageDir = new File(
  2428.                     Environment
  2429.                             .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
  2430.                     "novalac");
  2431.             storageDir.mkdirs();
  2432.             return storageDir;
  2433.         } else {
  2434.             File storageDir = new File(
  2435.                     Environment.getExternalStorageDirectory() + "Pictures/"
  2436.                             + "novalac");
  2437.             storageDir.mkdirs();
  2438.             return storageDir;
  2439.         }
  2440.  
  2441.     }
  2442.  
  2443.     private ShareData cachedShareData;
  2444.  
  2445.     private void shareOnTwitterWithImage(final ShareData shareData) {
  2446.  
  2447.         if (shareData == null) {
  2448.             return;
  2449.         }
  2450.  
  2451.         AccessToken accessToken = new AccessToken(prefs.getTwitterToken(),
  2452.                 prefs.getTwitterTokenSecret());
  2453.  
  2454.         ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
  2455.         configurationBuilder.setOAuthConsumerKey(OAUTH_CONSUMER_KEY);
  2456.         configurationBuilder.setOAuthConsumerSecret(OAUTH_CONSUMER_SECRET);
  2457.         twitter4j.conf.Configuration configuration = configurationBuilder
  2458.                 .build();
  2459.         TwitterFactory twitterFactory = new TwitterFactory(configuration);
  2460.  
  2461.         File file = getFileFromBase64(shareData.getImage());
  2462.  
  2463.         final Twitter twitter = twitterFactory.getInstance(accessToken);
  2464.         final StatusUpdate status = new StatusUpdate(shareData.getMessage());
  2465.         // final byte[] imageBytes = Base64.decode(shareData.getImage(),
  2466.         // Base64.DEFAULT);
  2467.         // final File file = new File("shared_image");
  2468.  
  2469.         status.setMedia(file);
  2470.         new Thread(new Runnable() {
  2471.  
  2472.             @Override
  2473.             public void run() {
  2474.                 try {
  2475.  
  2476.                     final Status updatedStatus = twitter.updateStatus(status);
  2477.                     runOnUiThread(new Runnable() {
  2478.  
  2479.                         @Override
  2480.                         public void run() {
  2481.  
  2482.                             if (updatedStatus != null) {
  2483.                                 NovalacLogger
  2484.                                         .logD("twitter update status successfuly");
  2485.                                 String result = String.format(URLstub,
  2486.                                         STUB_SHARE_MY_FIRST, 1);
  2487.                                 webView.loadUrl(result);
  2488.  
  2489.                             } else {
  2490.                                 NovalacLogger
  2491.                                         .logD("twitter update status failed");
  2492.                                 String result = String.format(URLstub,
  2493.                                         STUB_SHARE_MY_FIRST, 0);
  2494.                                 webView.loadUrl(result);
  2495.  
  2496.                             }
  2497.  
  2498.                         }
  2499.                     });
  2500.  
  2501.                     cachedShareData = null;
  2502.                 } catch (TwitterException e) {
  2503.                     e.printStackTrace();
  2504.                     shouldPostPhotoAfterTwitterLogin = true;
  2505.                     cachedShareData = shareData;
  2506.                     runOnUiThread(new Runnable() {
  2507.  
  2508.                         @Override
  2509.                         public void run() {
  2510.                             loginTwitter();
  2511.                         }
  2512.                     });
  2513.  
  2514.                 }
  2515.  
  2516.             }
  2517.         }).start();
  2518.  
  2519.         // runOnUiThread(new Runnable() {
  2520.         //
  2521.         // @Override
  2522.         // public void run() {
  2523.         //
  2524.         // try {
  2525.         //
  2526.         // final FileOutputStream fos = new FileOutputStream(file);
  2527.         // fos.write(imageBytes);
  2528.         //
  2529.         // } catch (FileNotFoundException e) {
  2530.         // e.printStackTrace();
  2531.         // } catch (IOException e) {
  2532.         // e.printStackTrace();
  2533.         // } finally {
  2534.         // // try {
  2535.         // // if (fos != null) {
  2536.         // // fos.close();
  2537.         // // }
  2538.         //
  2539.         // status.setMedia(file);
  2540.         //
  2541.         // Handler handler = new Handler();
  2542.         // handler.post(new Runnable() {
  2543.         //
  2544.         // @Override
  2545.         // public void run() {
  2546.         // // TODO Auto-generated method stub
  2547.         // try {
  2548.         // twitter.updateStatus(status);
  2549.         // } catch (TwitterException e) {
  2550.         // // TODO Auto-generated catch block
  2551.         // e.printStackTrace();
  2552.         // }
  2553.         // }
  2554.         // });
  2555.         // // twitter.updateStatus(status);
  2556.         //
  2557.         //
  2558.         // // } catch (IOException e) {
  2559.         // // e.printStackTrace();
  2560.         // // } catch (TwitterException e) {
  2561.         // // e.printStackTrace();
  2562.         // // loginTwitter();
  2563.         // // }
  2564.         // }
  2565.         //
  2566.         // }
  2567.         // });
  2568.  
  2569.     }
  2570.  
  2571.     private void shareOnGPlusWithImage(ShareData shareData) {
  2572.  
  2573.         NovalacLogger.logD("base64=" + shareData.getImage());
  2574.         byte[] imageBytes = Base64.decode(shareData.getImage(), Base64.DEFAULT);
  2575.         File path = Environment
  2576.                 .getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
  2577.         File file = new File(path, "/" + "shared_image.jpg");
  2578.  
  2579.         // File file = new File("shared_image.jpg");
  2580.         FileOutputStream fos = null;
  2581.         try {
  2582.             fos = new FileOutputStream(file);
  2583.             fos.write(imageBytes);
  2584.         } catch (FileNotFoundException e) {
  2585.             e.printStackTrace();
  2586.         } catch (IOException e) {
  2587.             e.printStackTrace();
  2588.         } finally {
  2589.             try {
  2590.                 if (fos != null) {
  2591.                     fos.close();
  2592.                 }
  2593.  
  2594.                 String photoUri = MediaStore.Images.Media.insertImage(
  2595.                         getContentResolver(), file.getAbsolutePath(), null,
  2596.                         null);
  2597.  
  2598.                 Intent intent = new PlusShare.Builder(this)
  2599.                         .setText(shareData.getMessage()).setType("image/jpeg")
  2600.                         .setStream(Uri.parse(photoUri)).getIntent();
  2601.                 startActivityForResult(intent, 103);
  2602.  
  2603.             } catch (IOException e) {
  2604.                 e.printStackTrace();
  2605.             }
  2606.         }
  2607.  
  2608.         // PlusShare.Builder share = new
  2609.         // PlusShare.Builder(this).setText(shareData.getMessage())
  2610.  
  2611.         // .
  2612.  
  2613.     }
  2614.  
  2615.     boolean continueShareImageWithFacebook = false;
  2616.  
  2617.     String cachedImageForFacebook = null;
  2618.  
  2619.     private void shareOnFacebookWithImage(final ShareData shareData) {
  2620.  
  2621.         NovalacLogger.logD("share image on facebook");
  2622.  
  2623.         if (FacebookDialog.canPresentShareDialog(this,
  2624.                 FacebookDialog.ShareDialogFeature.PHOTOS)) {
  2625.  
  2626.             NovalacLogger.logD("can share on facebook");
  2627.  
  2628.             Collection<File> files = new ArrayList<File>();
  2629.             files.add(getFileFromBase64(shareData.getImage()));
  2630.  
  2631.             FacebookDialog shareDialog = new FacebookDialog.PhotoShareDialogBuilder(
  2632.                     this).addPhotoFiles(files).build();
  2633.             uiHelper.trackPendingDialogCall(shareDialog.present());
  2634.  
  2635.             // FacebookDialog shareDialog = new
  2636.             // FacebookDialog.ShareDialogBuilder(this)
  2637.             // .setPicture(getImageUri(shareData.getImage()))
  2638.             // .setLink("http://www.novalac.net/")
  2639.             // .setDescription(shareData.getMessage()).build();
  2640.             // uiHelper.trackPendingDialogCall(shareDialog.present());
  2641.  
  2642.         } else {
  2643.  
  2644.             // UNABLE TO SHARE WITH IMAGE ON FACEBOOK WITHOUT INSTALLED FACEBOOK
  2645.             // APP
  2646.             // Session.openActiveSession(this, true, new StatusCallback() {
  2647.             //
  2648.             // @Override
  2649.             // public void call(Session session, SessionState state,
  2650.             // Exception exception) {
  2651.             //
  2652.             // continueShareImageWithFacebook = true;
  2653.             // cachedImageForFacebook = shareData.getImage();
  2654.             // // onSessionStateChange(session, state, exception);
  2655.             //
  2656.             // }
  2657.             // });
  2658.             //
  2659.             // NovalacLogger.logD("can not share on facebook");
  2660.  
  2661.             runOnUiThread(new Runnable() {
  2662.  
  2663.                 @Override
  2664.                 public void run() {
  2665.                     NovalacLogger.logD("share my first 2");
  2666.                     String result = String.format(URLstub, STUB_SHARE_MY_FIRST,
  2667.                             2);
  2668.                     webView.loadUrl(result);
  2669.                 }
  2670.             });
  2671.  
  2672.         }
  2673.  
  2674.     }
  2675.  
  2676.     private File getFileFromBase64(String base64Image) {
  2677.  
  2678.         byte[] imageBytes = Base64.decode(base64Image, Base64.DEFAULT);
  2679.         File path = Environment
  2680.                 .getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
  2681.         File file = new File(path, "/" + "shared_image.jpg");
  2682.  
  2683.         // File file = new File("shared_image.jpg");
  2684.         FileOutputStream fos = null;
  2685.         try {
  2686.             fos = new FileOutputStream(file);
  2687.             fos.write(imageBytes);
  2688.         } catch (FileNotFoundException e) {
  2689.             e.printStackTrace();
  2690.         } catch (IOException e) {
  2691.             e.printStackTrace();
  2692.         } finally {
  2693.             try {
  2694.                 if (fos != null) {
  2695.                     fos.close();
  2696.                 }
  2697.  
  2698.                 return file;
  2699.  
  2700.             } catch (IOException e) {
  2701.                 e.printStackTrace();
  2702.             }
  2703.             return null;
  2704.  
  2705.         }
  2706.     }
  2707.  
  2708.     private String getImageUri(String base64Image) {
  2709.  
  2710.         byte[] imageBytes = Base64.decode(base64Image, Base64.DEFAULT);
  2711.         File path = Environment
  2712.                 .getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
  2713.         File file = new File(path, "/" + "shared_image.jpg");
  2714.  
  2715.         // File file = new File("shared_image.jpg");
  2716.         FileOutputStream fos = null;
  2717.         try {
  2718.             fos = new FileOutputStream(file);
  2719.             fos.write(imageBytes);
  2720.         } catch (FileNotFoundException e) {
  2721.             e.printStackTrace();
  2722.         } catch (IOException e) {
  2723.             e.printStackTrace();
  2724.         } finally {
  2725.             try {
  2726.                 if (fos != null) {
  2727.                     fos.close();
  2728.                 }
  2729.  
  2730.                 String photoUri = MediaStore.Images.Media.insertImage(
  2731.                         getContentResolver(), file.getAbsolutePath(), null,
  2732.                         null);
  2733.                 return photoUri;
  2734.             } catch (IOException e) {
  2735.                 e.printStackTrace();
  2736.             }
  2737.             return "";
  2738.  
  2739.         }
  2740.     }
  2741.  
  2742.     public class AndroidInterface {
  2743.  
  2744.         Context context;
  2745.  
  2746.         AndroidInterface(Context context) {
  2747.             this.context = context;
  2748.         }
  2749.  
  2750.         @JavascriptInterface
  2751.         public boolean setDatabaseItem(String key, String value) {
  2752.             SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
  2753.             editor.putString(key, value);
  2754.             return editor.commit();
  2755.         }
  2756.  
  2757.         @JavascriptInterface
  2758.         public String getDatabaseItem(String key) {
  2759.             SharedPreferences prefs = getPreferences(MODE_PRIVATE);
  2760.             String value = prefs.getString(key, "");
  2761.             if (value != null && !value.equals("")) {
  2762.                 return value;
  2763.             }
  2764.             return null;
  2765.         }
  2766.  
  2767.         @JavascriptInterface
  2768.         public boolean removeDatabaseItem(String key) {
  2769.             SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
  2770.             editor.remove(key);
  2771.             return editor.commit();
  2772.         }
  2773.  
  2774.         @JavascriptInterface
  2775.         public void shareMyFirst(String json) {
  2776.             NovalacLogger.logD("share my first");
  2777.             try {
  2778.                 ShareData shareData = new Gson()
  2779.                         .fromJson(json, ShareData.class);
  2780.  
  2781.                 NovalacLogger.logD("share my first with = "
  2782.                         + shareData.getSocialNetwork());
  2783.                 NovalacLogger.logD("image=" + shareData.getImage());
  2784.  
  2785.                 String socialNetwork = shareData.getSocialNetwork();
  2786.                 if (socialNetwork.equals("facebook")) {
  2787.                     if (shareData.getImage().equals("")) {
  2788.                         shareOnFacebook(shareData.getMessage());
  2789.                     } else {
  2790.                         shareOnFacebookWithImage(shareData);
  2791.                     }
  2792.                 } else if (socialNetwork.equals("twitter")) {
  2793.                     shareOnTwitterWithImage(shareData);
  2794.                 } else if (socialNetwork.equals("gplus")) {
  2795.                     shareOnGPlusWithImage(shareData);
  2796.                 }
  2797.             } catch (Exception e) {
  2798.                 e.printStackTrace();
  2799.             }
  2800.  
  2801.         }
  2802.  
  2803.         @JavascriptInterface
  2804.         public void exportUserData(String json) {
  2805.  
  2806. //          JSONObject jsonObject = null;
  2807. //          try {
  2808. //              jsonObject = new JSONObject(json);
  2809. //              NovalacLogger.logD("json object=" + jsonObject.toString());
  2810. //          } catch (JSONException e) {
  2811. //              e.printStackTrace();
  2812. //          }
  2813.             JsonParser parser = new JsonParser();
  2814.             JsonObject jsonObject = parser.parse(json).getAsJsonObject();
  2815.  
  2816. //          DocumentWrapper documentWrapper = new Gson().fromJson(json,
  2817. //                  DocumentWrapper.class);
  2818.  
  2819.             ((NovalacApplication) getApplication()).getService().postDocument(
  2820. //                  documentWrapper,   
  2821.                     jsonObject,
  2822.                     new BaseCallback<DocumentResponseWrapper>() {
  2823.  
  2824.                         @Override
  2825.                         protected void onSuccess(DocumentResponseWrapper t,
  2826.                                 Response response) {
  2827.                             String result = String.format(URLstub,
  2828.                                     STUB_EXPORT_USER_ADD, "1");
  2829.                             NovalacLogger.logD("document=" + t.getDocument());
  2830.                             webView.loadUrl(result);
  2831.                         }
  2832.  
  2833.                         @Override
  2834.                         protected void onGenericError() {
  2835.                             String result = String.format(URLstub,
  2836.                                     STUB_EXPORT_USER_ADD, "0");
  2837.                             NovalacLogger.logD("generic error");
  2838.                             webView.loadUrl(result);
  2839.                         }
  2840.  
  2841.                         @Override
  2842.                         protected void onErrorMessage(String message) {
  2843.                             NovalacLogger.logD("error=" + message);
  2844.                             String result = String.format(URLstub,
  2845.                                     STUB_EXPORT_USER_ADD, "0");
  2846.                             webView.loadUrl(result);
  2847.                         }
  2848.                     });
  2849.  
  2850.         }
  2851.  
  2852.         @JavascriptInterface
  2853.         public String importUser() {
  2854.             if (cachedUserData != null && !cachedUserData.equals("")) {
  2855.                 String userData = cachedUserData;
  2856.                 cachedUserData = null;
  2857.                 return userData;
  2858.             } else {
  2859.                 return "";
  2860.             }
  2861.         }
  2862.  
  2863.         @JavascriptInterface
  2864.         public void exportData(String object) {
  2865.  
  2866.             JSONObject jsonObject;
  2867.             try {
  2868.                 jsonObject = new JSONObject(object);
  2869.                 NovalacLogger.logD("DINO json Object=" + jsonObject.toString());
  2870.                 ExportDataSource source = Sources
  2871.                         .getExportDataSource(HomeActivity.this);
  2872.                 source.setObject(new JSONObjectDataContainer(jsonObject));
  2873.                 source.setInputFormat(Format.JSON);
  2874.                 source.setErrorDeserializer(new NovalacErrorHandler());
  2875.                 source.setSerializer(new JSONObjectSerializer());
  2876.  
  2877.                 source.fetchAsync(new LoadListener() {
  2878.  
  2879.                     @Override
  2880.                     public void onError(ArrayList<Error> errors) {
  2881.                         Loggy.data("onError");
  2882.                         // Log.d("DARIO", "" + errors);
  2883.                         for (int i = 0; i < errors.size(); i++) {
  2884.                             NovalacLogger.logD("error=" + errors.get(i));
  2885.                         }
  2886.  
  2887.                         String content = String.format(URLstub,
  2888.                                 STUB_EXPORT_SEND, "0");
  2889.                         webView.loadUrl(content);
  2890.                     }
  2891.  
  2892.                     @Override
  2893.                     public void beforeLoad() {
  2894.                         Loggy.data("beforeLoad()");
  2895.  
  2896.                     }
  2897.  
  2898.                     @Override
  2899.                     public void afterLoad(DataContainer container) {
  2900.                         NovalacLogger.logD("container=" + container);
  2901.                         Loggy.data("afterLoad()");
  2902.  
  2903.                         String content = String.format(URLstub,
  2904.                                 STUB_EXPORT_SEND, "1");
  2905.  
  2906.                         webView.loadUrl(content);
  2907.  
  2908.                     }
  2909.                 });
  2910.  
  2911.             } catch (JSONException e) {
  2912.                 // TODO Auto-generated catch block
  2913.                 e.printStackTrace();
  2914.             }
  2915.  
  2916.         }
  2917.  
  2918.  
  2919.     }
  2920.  
  2921.     @Override
  2922.     protected void onSaveInstanceState(Bundle outState) {
  2923.         outState.putParcelable(CURRENT_PHOTO_URI, currentPhotoUri);
  2924.         super.onSaveInstanceState(outState);
  2925.  
  2926.         uiHelper.onSaveInstanceState(outState);
  2927.  
  2928.     }
  2929.  
  2930.     @Override
  2931.     protected void onDestroy() {
  2932.         super.onDestroy();
  2933.         uiHelper.onDestroy();
  2934.     }
  2935.  
  2936.     @Override
  2937.     protected void onRestoreInstanceState(Bundle savedInstanceState) {
  2938.         currentPhotoUri = savedInstanceState.getParcelable(CURRENT_PHOTO_URI);
  2939.         super.onRestoreInstanceState(savedInstanceState);
  2940.     }
  2941.  
  2942.     // Facebook user logged in
  2943.     @Override
  2944.     public void onSuccess(String userId) {
  2945.         NovalacLogger.logD("facebook on success");
  2946.  
  2947.         if (continueShareImageWithFacebook) {
  2948.  
  2949.             NovalacLogger.logD("continue share="
  2950.                     + continueShareImageWithFacebook);
  2951.             continueShareImageWithFacebook = false;
  2952.  
  2953.             // try {
  2954.  
  2955.             Bundle params = new Bundle();
  2956.             params.putString("access_token", Session.getActiveSession()
  2957.                     .getAccessToken());
  2958.             params.putString("description", "description");
  2959.             params.putString("caption", "caption");
  2960.             params.putString("value", "value");
  2961.             // params.putP
  2962.  
  2963.             // Request request = new Request(Session.getActiveSession(),
  2964.             // "me/photos", params, com.facebook.HttpMethod.POST, new
  2965.             // Request.Callback() {
  2966.             //
  2967.             // @Override
  2968.             // public void onCompleted(com.facebook.Response response) {
  2969.             // NovalacLogger.logD("on new request completed=" +
  2970.             // response.getRawResponse());
  2971.             // }
  2972.             // });
  2973.             // request.executeAsync();
  2974.  
  2975.             WebDialog webDialog = new WebDialog.FeedDialogBuilder(
  2976.                     HomeActivity.this, Session.getActiveSession())
  2977.                     .setName("name").setDescription("description")
  2978.                     .setLink("http://www.novalac.net/")
  2979.                             // .setPicture("https://pbs.twimg.com/media/BuWdCspIQAAlfzN.jpg")
  2980.                     .setOnCompleteListener(new OnCompleteListener() {
  2981.  
  2982.                         @Override
  2983.                         public void onComplete(Bundle values,
  2984.                                 FacebookException error) {
  2985.                             cachedImageForFacebook = null;
  2986.                             if (error != null) {
  2987.                                 error.printStackTrace();
  2988.                             }
  2989.                         }
  2990.                     }).build();
  2991.  
  2992.             webDialog.show();
  2993.  
  2994.             // Request.newUploadPhotoRequest(Session.getActiveSession(),
  2995.             // getFileFromBase64(cachedImageForFacebook), new Request.Callback()
  2996.             // {
  2997.             //
  2998.             // @Override
  2999.             // public void onCompleted(com.facebook.Response response) {
  3000.             //
  3001.             // NovalacLogger.logD("" + response.getRawResponse());
  3002.             //
  3003.             // WebDialog webDialog = new WebDialog.FeedDialogBuilder(
  3004.             // HomeActivity.this, Session.getActiveSession()).setName("name")
  3005.             // .setDescription("description")
  3006.             // .setLink("http://www.novalac.net/")
  3007.             // .setPicture("https://www.dropbox.com/s/vosixwg5gb6qqjh/Screenshot%202014-08-18%2011.42.02.png")
  3008.             // .setOnCompleteListener(new OnCompleteListener() {
  3009.             //
  3010.             // @Override
  3011.             // public void onComplete(Bundle values, FacebookException error) {
  3012.             // cachedImageForFacebook = null;
  3013.             // error.printStackTrace();
  3014.             // }
  3015.             // })
  3016.             // .build();
  3017.             //
  3018.             // webDialog.show();
  3019.             //
  3020.             // }
  3021.             // }).executeAsync();
  3022.             // } catch (FileNotFoundException e) {
  3023.             // // TODO Auto-generated catch block
  3024.             // e.printStackTrace();
  3025.             // }
  3026.  
  3027.             return;
  3028.  
  3029.         } else {
  3030.             postLoginUser(userId, "facebook");
  3031.         }
  3032.  
  3033.     }
  3034.  
  3035.     // Facebook user login failed
  3036.     @Override
  3037.     public void onFailure() {
  3038.  
  3039.         NovalacLogger.logD("facebook on failure");
  3040.         //
  3041.         String result = String.format(URLstub, STUB_SOCIAL_LOGIN, "0");
  3042.         webView.loadUrl(result);
  3043.  
  3044.     }
  3045.  
  3046.     // G+ login
  3047.     @Override
  3048.     public void onConnectionFailed(ConnectionResult connectionResult) {
  3049.         // Could not connect to Google Play Services.  The user needs to select an account,
  3050.         // grant permissions or resolve an error in order to sign in. Refer to the javadoc for
  3051.         // ConnectionResult to see possible error codes.
  3052.  
  3053.         if (connectionResult.hasResolution()) {
  3054.             mConnectionResult = connectionResult;
  3055.             try {
  3056.                 mConnectionResult.startResolutionForResult(this,
  3057.                         GOOGLE_PLUS_REQUEST_CODE);
  3058.             } catch (IntentSender.SendIntentException e) {
  3059.                 e.printStackTrace();
  3060.                 String result = String.format(URLstub, STUB_SOCIAL_LOGIN, "0");
  3061.                 webView.loadUrl(result);
  3062.             }
  3063.         } else {
  3064.             String result = String.format(URLstub, STUB_SOCIAL_LOGIN, "0");
  3065.             webView.loadUrl(result);
  3066.         }
  3067.     }
  3068.  
  3069.  
  3070.     // G+ login
  3071.     @Override
  3072.     public void onConnected(Bundle connectionHint) {
  3073.  
  3074.         Plus.PeopleApi.loadVisible(mGoogleApiClient, null);
  3075.  
  3076.         if (Plus.PeopleApi.getCurrentPerson(mGoogleApiClient) != null) {
  3077.             Person currentPerson = Plus.PeopleApi.getCurrentPerson(mGoogleApiClient);
  3078.  
  3079.             if (currentPerson == null) {
  3080.                 // not successful
  3081.                 loginUnsuccessful();
  3082.             } else {
  3083.                 // g+ login successful
  3084.                 postLoginUser(currentPerson.getId(), "gplus");
  3085.             }
  3086.         } else {
  3087.             loginUnsuccessful();
  3088.         }
  3089.     }
  3090.  
  3091.     private void loginUnsuccessful() {
  3092.         String result = String.format(URLstub, STUB_SOCIAL_LOGIN, "0");
  3093.         webView.loadUrl(result);
  3094.     }
  3095.  
  3096.     @Override
  3097.     public void onConnectionSuspended(int cause) {
  3098.         // TODO Auto-generated method stub
  3099.  
  3100.     }
  3101. }
Add Comment
Please, Sign In to add comment