You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MainActivity.java 7.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. package com.rthoni.stssaguenay.ui.activities;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.support.design.widget.FloatingActionButton;
  5. import android.support.design.widget.NavigationView;
  6. import android.support.v4.widget.DrawerLayout;
  7. import android.support.v7.app.ActionBarDrawerToggle;
  8. import android.support.v7.app.AppCompatActivity;
  9. import android.support.v7.widget.Toolbar;
  10. import android.view.Menu;
  11. import android.view.MenuItem;
  12. import android.view.View;
  13. import android.widget.TextView;
  14. import android.widget.Toast;
  15. import com.facebook.CallbackManager;
  16. import com.facebook.FacebookCallback;
  17. import com.facebook.FacebookException;
  18. import com.facebook.FacebookSdk;
  19. import com.facebook.GraphRequest;
  20. import com.facebook.GraphResponse;
  21. import com.facebook.login.LoginManager;
  22. import com.facebook.login.LoginResult;
  23. import com.facebook.login.widget.LoginButton;
  24. import com.google.android.gms.ads.AdRequest;
  25. import com.google.android.gms.ads.AdView;
  26. import com.google.android.gms.ads.MobileAds;
  27. import com.luticate.utils.business.LuRequest;
  28. import com.rthoni.stssaguenay.R;
  29. import com.rthoni.stssaguenay.business.STSBusiness;
  30. import com.rthoni.stssaguenay.dbo.FavouriteStopDbo;
  31. import com.rthoni.stssaguenay.dbo.UserDbo;
  32. import com.rthoni.stssaguenay.ui.fragments.HomeFragment;
  33. import org.json.JSONException;
  34. import org.json.JSONObject;
  35. import java.util.List;
  36. import butterknife.BindView;
  37. import butterknife.ButterKnife;
  38. public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
  39. public static int ADD_FAVOURITE_STOP_REQUEST_CODE = 1;
  40. private boolean _goToHome = false;
  41. @BindView(R.id.fab)
  42. FloatingActionButton _fab;
  43. @BindView(R.id.nav_view)
  44. NavigationView _navigationView;
  45. private LoginButton _btnLogin;
  46. private TextView _textUserName;
  47. private TextView _textUserEmail;
  48. private TextView _textHelpMessage;
  49. private CallbackManager _callbackManager;
  50. @Override
  51. protected void onCreate(Bundle savedInstanceState) {
  52. super.onCreate(savedInstanceState);
  53. LuRequest.init(this);
  54. FacebookSdk.sdkInitialize(getApplicationContext());
  55. setContentView(R.layout.activity_main);
  56. ButterKnife.bind(this);
  57. MobileAds.initialize(getApplicationContext(), getString(R.string.ad_init));
  58. AdView mAdView = (AdView) findViewById(R.id.adView);
  59. AdRequest adRequest = new AdRequest.Builder().build();
  60. mAdView.loadAd(adRequest);
  61. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  62. setSupportActionBar(toolbar);
  63. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  64. ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
  65. this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
  66. drawer.setDrawerListener(toggle);
  67. toggle.syncState();
  68. _navigationView.setNavigationItemSelectedListener(this);
  69. View headerView = _navigationView.getHeaderView(0);
  70. _textUserName = ButterKnife.findById(headerView, R.id.textUserName);
  71. _textUserEmail = ButterKnife.findById(headerView, R.id.textUserEmail);
  72. _textHelpMessage = ButterKnife.findById(headerView, R.id.text_help_message);
  73. _fab.setOnClickListener(new View.OnClickListener() {
  74. @Override
  75. public void onClick(View view) {
  76. goToAddStop();
  77. }
  78. });
  79. _callbackManager = CallbackManager.Factory.create();
  80. _btnLogin = ButterKnife.findById(headerView, R.id.btnLogin);
  81. _btnLogin.setReadPermissions("email");
  82. _btnLogin.registerCallback(_callbackManager, new FacebookCallback<LoginResult>() {
  83. @Override
  84. public void onSuccess(LoginResult loginResult) {
  85. GraphRequest request = GraphRequest.newMeRequest(
  86. loginResult.getAccessToken(),
  87. new GraphRequest.GraphJSONObjectCallback() {
  88. @Override
  89. public void onCompleted(JSONObject object, GraphResponse response) {
  90. try {
  91. UserDbo userDbo = new UserDbo();
  92. userDbo.fromJson(object);
  93. onUserLogged(userDbo);
  94. } catch (JSONException e) {
  95. e.printStackTrace();
  96. }
  97. }
  98. });
  99. Bundle parameters = new Bundle();
  100. parameters.putString("fields", "id,email,name");
  101. request.setParameters(parameters);
  102. request.executeAsync();
  103. loginResult.getAccessToken();
  104. }
  105. @Override
  106. public void onCancel() {
  107. }
  108. @Override
  109. public void onError(FacebookException error) {
  110. Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show();
  111. }
  112. });
  113. updateLoginState();
  114. goToHome();
  115. }
  116. @Override
  117. protected void onResume() {
  118. if (_goToHome) {
  119. _goToHome = false;
  120. goToHome();
  121. }
  122. super.onResume();
  123. }
  124. public void goToHome()
  125. {
  126. _fab.show();
  127. HomeFragment f = new HomeFragment();
  128. getSupportFragmentManager().beginTransaction().replace(R.id.container, f).commit();
  129. }
  130. public void goToStop()
  131. {
  132. _fab.hide();
  133. }
  134. public void goToAddStop()
  135. {
  136. Intent intent = new Intent(this, StopPickerActivity.class);
  137. startActivityForResult(intent, ADD_FAVOURITE_STOP_REQUEST_CODE);
  138. }
  139. @Override
  140. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  141. if (requestCode == ADD_FAVOURITE_STOP_REQUEST_CODE && resultCode == RESULT_OK) {
  142. FavouriteStopDbo favouriteStopDbo = new FavouriteStopDbo();
  143. try {
  144. JSONObject obj = new JSONObject(data.getStringExtra(StopPickerActivity.STOP_EXTRA_NAME));
  145. favouriteStopDbo.fromJson(obj);
  146. } catch (JSONException e) {
  147. e.printStackTrace();
  148. return;
  149. }
  150. List<FavouriteStopDbo> favouriteStopDbos = STSBusiness.getFavouriteStops(this);
  151. favouriteStopDbos.add(favouriteStopDbo);
  152. STSBusiness.setFavouriteStops(this, favouriteStopDbos);
  153. _goToHome = true;
  154. }
  155. else {
  156. _callbackManager.onActivityResult(requestCode, resultCode, data);
  157. }
  158. super.onActivityResult(requestCode, resultCode, data);
  159. }
  160. @Override
  161. public boolean onNavigationItemSelected(MenuItem item) {
  162. if (item.getItemId() == R.id.nav_logout) {
  163. LoginManager.getInstance().logOut();
  164. STSBusiness.setLoggedUser(this, null);
  165. updateLoginState();
  166. }
  167. return false;
  168. }
  169. public void updateLoginState()
  170. {
  171. UserDbo user = STSBusiness.getLoggedUser(this);
  172. _btnLogin.setVisibility(user == null ? View.VISIBLE : View.GONE);
  173. Menu menu = _navigationView.getMenu();
  174. for (int i = 0; i < menu.size(); i++) {
  175. menu.getItem(i).setVisible(user != null);
  176. }
  177. _textUserName.setText(user == null ? "" : user.getName());
  178. _textUserName.setVisibility(user == null ? View.GONE : View.VISIBLE);
  179. _textUserEmail.setText(user == null ? "" : user.getEmail());
  180. _textUserEmail.setVisibility(user == null ? View.GONE : View.VISIBLE);
  181. _textHelpMessage.setVisibility(user == null ? View.VISIBLE : View.GONE);
  182. }
  183. public void onUserLogged(UserDbo userDbo)
  184. {
  185. STSBusiness.setLoggedUser(this, userDbo);
  186. updateLoginState();
  187. }
  188. }