123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- package com.rthoni.stssaguenay.ui.activities;
-
- import android.app.ProgressDialog;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.os.Bundle;
- import android.support.design.widget.NavigationView;
- import android.support.multidex.MultiDex;
- import android.support.v4.app.FragmentManager;
- import android.support.v4.widget.DrawerLayout;
- import android.support.v7.app.ActionBarDrawerToggle;
- import android.support.v7.app.AlertDialog;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.Toolbar;
- import android.text.InputType;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.EditText;
- import android.widget.TextView;
- import android.widget.Toast;
-
- import com.facebook.CallbackManager;
- import com.facebook.FacebookCallback;
- import com.facebook.FacebookException;
- import com.facebook.FacebookSdk;
- import com.facebook.GraphRequest;
- import com.facebook.GraphResponse;
- import com.facebook.login.LoginManager;
- import com.facebook.login.LoginResult;
- import com.facebook.login.widget.LoginButton;
- import com.github.clans.fab.FloatingActionButton;
- import com.github.clans.fab.FloatingActionMenu;
- import com.google.android.gms.ads.AdRequest;
- import com.google.android.gms.ads.AdView;
- import com.google.android.gms.ads.MobileAds;
- import com.luticate.utils.business.LuConsumer;
- import com.luticate.utils.business.LuPromise;
- import com.luticate.utils.dataaccess.LuRequest;
- import com.luticate.utils.dbo.LuPromiseError;
- import com.luticate.utils.dbo.LuVoidDbo;
- import com.rthoni.stssaguenay.R;
- import com.rthoni.stssaguenay.business.STSBusiness;
- import com.rthoni.stssaguenay.business.UsersSettingsBusiness;
- import com.rthoni.stssaguenay.dbo.StopsDbo;
- import com.rthoni.stssaguenay.dbo.UserFavouriteStopsDbo;
- import com.rthoni.stssaguenay.dbo.UserDbo;
- import com.rthoni.stssaguenay.dbo.UsersSettingsDbo;
- import com.rthoni.stssaguenay.ui.fragments.HomeFragment;
- import com.rthoni.stssaguenay.ui.fragments.StopViewerFragment;
-
- import org.json.JSONObject;
-
- import java.util.List;
-
- import butterknife.BindView;
- import butterknife.ButterKnife;
-
- public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
-
- public static int ADD_FAVOURITE_STOP_REQUEST_CODE = 1;
- public static int SEARCH_STOP_REQUEST_CODE = 2;
-
- @BindView(R.id.fab)
- FloatingActionMenu _fab;
-
- @BindView(R.id.fab_item_add_map)
- FloatingActionButton _fabMap;
-
- @BindView(R.id.fab_item_add_list)
- FloatingActionButton _fabList;
-
- @BindView(R.id.nav_view)
- NavigationView _navigationView;
-
- private LoginButton _btnLogin;
-
- private TextView _textUserName;
-
- private TextView _textUserEmail;
-
- private TextView _textHelpMessage;
-
- private CallbackManager _callbackManager;
-
- private FragmentManager _fragmentManager;
-
- private DrawerLayout _drawer;
-
- private Runnable _onResumeAction;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- LuRequest.init(this);
-
- FacebookSdk.sdkInitialize(getApplicationContext());
-
- setContentView(R.layout.activity_main);
- ButterKnife.bind(this);
-
- MobileAds.initialize(getApplicationContext(), getString(R.string.ad_init));
- AdView mAdView = (AdView) findViewById(R.id.adView);
- AdRequest adRequest = new AdRequest.Builder().build();
- mAdView.loadAd(adRequest);
-
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
-
- _drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
- ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
- this, _drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
- _drawer.addDrawerListener(toggle);
- toggle.syncState();
-
- _navigationView.setNavigationItemSelectedListener(this);
-
- View headerView = _navigationView.getHeaderView(0);
- _textUserName = ButterKnife.findById(headerView, R.id.textUserName);
- _textUserEmail = ButterKnife.findById(headerView, R.id.textUserEmail);
- _textHelpMessage = ButterKnife.findById(headerView, R.id.text_help_message);
-
- _fabMap.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- goToAddStop(true);
- }
- });
-
- _fabList.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- goToAddStop(false);
- }
- });
-
- _callbackManager = CallbackManager.Factory.create();
- _btnLogin = ButterKnife.findById(headerView, R.id.btnLogin);
- _btnLogin.setReadPermissions("email");
- _btnLogin.registerCallback(_callbackManager, new FacebookCallback<LoginResult>() {
- @Override
- public void onSuccess(LoginResult loginResult) {
- GraphRequest request = GraphRequest.newMeRequest(
- loginResult.getAccessToken(),
- new GraphRequest.GraphJSONObjectCallback() {
- @Override
- public void onCompleted(JSONObject object, GraphResponse response) {
- try {
- UserDbo userDbo = new UserDbo();
- userDbo.fromJson(object);
- onUserLogged(userDbo);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- Bundle parameters = new Bundle();
- parameters.putString("fields", "id,email,name");
- request.setParameters(parameters);
- request.executeAsync();
- loginResult.getAccessToken();
- }
-
- @Override
- public void onCancel() {
-
- }
-
- @Override
- public void onError(FacebookException error) {
- Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show();
- }
- });
-
-
- _fragmentManager = getSupportFragmentManager();
- _fragmentManager.addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
- @Override
- public void onBackStackChanged() {
- if (_fragmentManager.getBackStackEntryCount() == 0) {
- goToHome();
- }
- }
- });
-
- updateLoginState();
- goToHome();
- }
-
- @Override
- protected void attachBaseContext(Context newBase) {
- super.attachBaseContext(newBase);
- MultiDex.install(this);
- }
-
- @Override
- public boolean onSupportNavigateUp() {
- if (_fragmentManager.getBackStackEntryCount() == 0) {
- return super.onSupportNavigateUp();
- }
- _fragmentManager.popBackStack();
- return true;
- }
-
- @Override
- protected void onResume() {
- if (_onResumeAction != null) {
- _onResumeAction.run();
- }
- super.onResume();
- }
-
- public void goToHome()
- {
- _fab.setVisibility(View.VISIBLE);
- HomeFragment f = new HomeFragment();
- f.setOnFavouriteStopClicked(new LuConsumer<UserFavouriteStopsDbo>() {
- @Override
- public void execute(UserFavouriteStopsDbo data) {
- goToStop(data.getStop());
- }
- });
- getSupportFragmentManager().beginTransaction().replace(R.id.container, f).commit();
- }
-
- public void goToStop(StopsDbo stopsDbo)
- {
- _fab.setVisibility(View.GONE);
- StopViewerFragment f = new StopViewerFragment();
- f.setStopsDbo(stopsDbo);
- getSupportFragmentManager()
- .beginTransaction()
- .replace(R.id.container, f)
- .addToBackStack("StopViewerFragment")
- .commit();
- }
-
- public void goToAddStop(boolean map)
- {
- _fab.close(true);
- Intent intent = new Intent(this, StopPickerActivity.class);
- intent.putExtra(StopPickerActivity.MAP_EXTRA_NAME, map);
- startActivityForResult(intent, ADD_FAVOURITE_STOP_REQUEST_CODE);
- }
-
- public void goToSearchStop(boolean map)
- {
- _fab.close(true);
- Intent intent = new Intent(this, StopPickerActivity.class);
- intent.putExtra(StopPickerActivity.MAP_EXTRA_NAME, map);
- intent.putExtra(StopPickerActivity.SELECT_ROUTES_EXTRA_NAME, false);
- startActivityForResult(intent, SEARCH_STOP_REQUEST_CODE);
- }
-
- public void goToSearchStop()
- {
- final int item[] = new int[1];
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- String[] array = new String[]{getString(R.string.stop_add_map), getString(R.string.stop_add_list)};
- builder.setSingleChoiceItems(array, 0, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- item[0] = which;
- }
- });
- builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- goToSearchStop(item[0] == 0);
- }
- });
- builder.show();
- }
-
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == ADD_FAVOURITE_STOP_REQUEST_CODE && resultCode == RESULT_OK) {
- UserFavouriteStopsDbo favouriteStopDbo = new UserFavouriteStopsDbo();
- try {
- favouriteStopDbo.fromJson(data.getStringExtra(StopPickerActivity.FAVOURITE_STOP_EXTRA_NAME));
- } catch (Exception e) {
- e.printStackTrace();
- return;
- }
- List<UserFavouriteStopsDbo> favouriteStopDbos = STSBusiness.getFavouriteStops(this);
- favouriteStopDbos.add(favouriteStopDbo);
- STSBusiness.setFavouriteStops(this, favouriteStopDbos);
- _onResumeAction = new Runnable() {
- @Override
- public void run() {
- goToHome();
- }
- };
- }
- else if (requestCode == SEARCH_STOP_REQUEST_CODE && resultCode == RESULT_OK) {
- final StopsDbo stopDbo = new StopsDbo();
- try {
- stopDbo.fromJson(data.getStringExtra(StopPickerActivity.STOP_EXTRA_NAME));
- } catch (Exception e) {
- e.printStackTrace();
- return;
- }
- _onResumeAction = new Runnable() {
- @Override
- public void run() {
- goToStop(stopDbo);
- }
- };
- }
- else {
- _callbackManager.onActivityResult(requestCode, resultCode, data);
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
-
- @Override
- public boolean onNavigationItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.nav_search_stop) {
- goToSearchStop();
- }
- else if (item.getItemId() == R.id.nav_restore) {
- restoreSettings();
- }
- else if (item.getItemId() == R.id.nav_backup) {
- backupSettings();
- }
- else if (item.getItemId() == R.id.nav_logout) {
- LoginManager.getInstance().logOut();
- STSBusiness.setLoggedUser(this, null);
- updateLoginState();
- }
- else {
- return false;
- }
- _drawer.closeDrawers();
- return true;
- }
-
- public void updateLoginState()
- {
- UserDbo user = STSBusiness.getLoggedUser(this);
- _btnLogin.setVisibility(user == null ? View.VISIBLE : View.GONE);
- Menu menu = _navigationView.getMenu();
- menu.findItem(R.id.nav_restore).setVisible(user != null);
- menu.findItem(R.id.nav_backup).setVisible(user != null);
- menu.findItem(R.id.nav_logout).setVisible(user != null);
- _textUserName.setText(user == null ? "" : user.getName());
- _textUserName.setVisibility(user == null ? View.GONE : View.VISIBLE);
- _textUserEmail.setText(user == null ? "" : user.getEmail());
- _textUserEmail.setVisibility(user == null ? View.GONE : View.VISIBLE);
- _textHelpMessage.setVisibility(user == null ? View.VISIBLE : View.GONE);
- }
-
- public void onUserLogged(UserDbo userDbo)
- {
- STSBusiness.setLoggedUser(this, userDbo);
- updateLoginState();
- }
-
- public LuPromise<String> askPassword(boolean encrypt)
- {
- final LuPromise<String> promise = new LuPromise<>();
-
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle(R.string.encryption_password);
- builder.setMessage(encrypt ? R.string.encryption_password_encrypt : R.string.encryption_password_decrypt);
-
- final EditText input = new EditText(this);
- input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
- builder.setView(input);
-
- builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- promise.resolve(input.getText().toString());
- }
- });
- builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.cancel();
- }
- });
-
- builder.show();
- return promise;
- }
-
- public void restoreSettings()
- {
- final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
- progressDialog.setIndeterminate(true);
- progressDialog.setCancelable(false);
- progressDialog.show();
- progressDialog.setTitle(R.string.loading);
- progressDialog.setMessage(getString(R.string.settings_restoring));
-
- UserDbo user = STSBusiness.getLoggedUser(MainActivity.this);
- UsersSettingsBusiness.get(STSBusiness.getConfig(this), user.getId())
- .then(new LuConsumer<String>() {
- @Override
- public void execute(final String data) {
- progressDialog.dismiss();
- if (data == null) {
- Toast.makeText(MainActivity.this, R.string.encryption_empty, Toast.LENGTH_LONG).show();
- return;
- }
- askPassword(false).then(new LuConsumer<String>() {
- @Override
- public void execute(String password) {
- UsersSettingsDbo settingsDbo = UsersSettingsBusiness.decryptSettings(data, password);
- if (settingsDbo == null) {
- Toast.makeText(MainActivity.this, R.string.encryption_bad_password, Toast.LENGTH_LONG).show();
- }
- else {
- Toast.makeText(MainActivity.this, R.string.settings_restored, Toast.LENGTH_LONG).show();
- STSBusiness.setUserSettings(MainActivity.this, settingsDbo);
- goToHome();
- }
- }
- });
- }
- }, new LuConsumer<LuPromiseError>() {
- @Override
- public void execute(LuPromiseError data) {
- progressDialog.dismiss();
- Toast.makeText(MainActivity.this, data.toString(), Toast.LENGTH_LONG).show();
- }
- });
- }
-
- public void backupSettings()
- {
- askPassword(true).then(new LuConsumer<String>() {
- @Override
- public void execute(String password) {
- UserDbo user = STSBusiness.getLoggedUser(MainActivity.this);
- UsersSettingsDbo settingsDbo = STSBusiness.getUserSettings(MainActivity.this);
- String data = UsersSettingsBusiness.encryptSettings(settingsDbo, password);
- final ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
- progressDialog.setIndeterminate(true);
- progressDialog.setCancelable(false);
- progressDialog.show();
- progressDialog.setTitle(R.string.loading);
- progressDialog.setMessage(getString(R.string.settings_backing_up));
- UsersSettingsBusiness.put(STSBusiness.getConfig(MainActivity.this), data, user.getId())
- .then(new LuConsumer<LuVoidDbo>() {
- @Override
- public void execute(LuVoidDbo data) {
- progressDialog.dismiss();
- Toast.makeText(MainActivity.this, R.string.settings_backed_up, Toast.LENGTH_LONG).show();
- }
- }, new LuConsumer<LuPromiseError>() {
- @Override
- public void execute(LuPromiseError data) {
- progressDialog.dismiss();
- Toast.makeText(MainActivity.this, data.toString(), Toast.LENGTH_LONG).show();
- }
- });
- }
- });
- }
- }
|