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 9.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.rthoni.camotion.ui;
  2. import android.content.Intent;
  3. import android.content.res.Configuration;
  4. import android.os.Bundle;
  5. import android.os.PersistableBundle;
  6. import android.support.design.widget.NavigationView;
  7. import android.support.v4.view.GravityCompat;
  8. import android.support.v4.widget.DrawerLayout;
  9. import android.support.v7.app.ActionBarDrawerToggle;
  10. import android.support.v7.app.AppCompatActivity;
  11. import android.support.v7.widget.Toolbar;
  12. import android.view.MenuItem;
  13. import android.view.SubMenu;
  14. import android.view.View;
  15. import android.widget.TextView;
  16. import android.widget.Toast;
  17. import com.crashlytics.android.Crashlytics;
  18. import com.luticate.auth.dbo.LuFullLoginDbo;
  19. import com.luticate.utils.business.LuPromise;
  20. import com.luticate.utils.business.LuRequest;
  21. import com.rthoni.camotion.R;
  22. import com.rthoni.camotion.business.CamotionBusiness;
  23. import com.rthoni.camotion.dbo.CommandDbo;
  24. import com.rthoni.camotion.dbo.LocationDbo;
  25. import com.rthoni.camotion.ui.dialogs.CommandExecDialog;
  26. import com.rthoni.camotion.ui.dialogs.LocationPickerDialog;
  27. import com.rthoni.camotion.ui.dialogs.LoginDialog;
  28. import com.rthoni.camotion.ui.fragments.CommandsFragment;
  29. import com.rthoni.camotion.ui.fragments.CamerasFragment;
  30. import com.rthoni.camotion.ui.fragments.CamotionFragment;
  31. import com.rthoni.camotion.ui.fragments.SensorsFragment;
  32. import io.fabric.sdk.android.Fabric;
  33. import java.util.List;
  34. public class MainActivity extends AppCompatActivity
  35. implements NavigationView.OnNavigationItemSelectedListener, CommandsFragment.OnCommandClickedInterface {
  36. private LuFullLoginDbo _fullLoginDbo = null;
  37. private LocationDbo _currentLocation = null;
  38. private TextView _locationNameView;
  39. private SubMenu _locationsMenu;
  40. private NavigationView _navigationView;
  41. private static final int REQUEST_CODE_ADD_ACCOUNT = 0;
  42. @Override
  43. protected void onCreate(Bundle savedInstanceState) {
  44. super.onCreate(savedInstanceState);
  45. Fabric.with(this, new Crashlytics());
  46. LuRequest.init(this);
  47. setContentView(R.layout.activity_main);
  48. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  49. setSupportActionBar(toolbar);
  50. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  51. ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
  52. R.string.navigation_drawer_open, R.string.navigation_drawer_close);
  53. drawer.addDrawerListener(toggle);
  54. toggle.syncState();
  55. _navigationView = (NavigationView) findViewById(R.id.nav_view);
  56. _navigationView.setNavigationItemSelectedListener(this);
  57. _locationsMenu = _navigationView.getMenu().findItem(R.id.location_menu).getSubMenu();
  58. View parentView = _navigationView.getHeaderView(0);
  59. _locationNameView = (TextView) parentView.findViewById(R.id.location_name_textview);
  60. init();
  61. }
  62. @Override
  63. public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
  64. super.onSaveInstanceState(outState, outPersistentState);
  65. }
  66. private void init()
  67. {
  68. List<LocationDbo> locations = CamotionBusiness.getLocations(MainActivity.this);
  69. if (locations.isEmpty())
  70. {
  71. startActivityForResult(new Intent(this, AddAccountActivity.class), REQUEST_CODE_ADD_ACCOUNT);
  72. return;
  73. }
  74. _locationsMenu.clear();
  75. if (locations.isEmpty()) {
  76. return;
  77. }
  78. for (final LocationDbo location : locations) {
  79. MenuItem item = _locationsMenu.add(location.getName());
  80. item.setIcon(R.mipmap.ic_location);
  81. item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
  82. @Override
  83. public boolean onMenuItemClick(MenuItem item) {
  84. setLocation(location);
  85. return false;
  86. }
  87. });
  88. }
  89. // Force drawer update; need a fix
  90. MenuItem item = _navigationView.getMenu().add("test42");
  91. _navigationView.getMenu().removeItem(item.getItemId());
  92. if (_currentLocation == null) {
  93. if (locations.size() == 1) {
  94. setLocation(locations.get(0));
  95. }
  96. else {
  97. LocationPickerDialog.getLocation(this)
  98. .then(new LuPromise.LuConsumer<LocationDbo>() {
  99. @Override
  100. public void execute(LocationDbo location) {
  101. setLocation(location);
  102. }
  103. }, new LuPromise.LuConsumer<LuPromise.LuPromiseError>() {
  104. @Override
  105. public void execute(LuPromise.LuPromiseError data) {
  106. setResult(RESULT_CANCELED);
  107. finish();
  108. }
  109. });
  110. }
  111. }
  112. }
  113. @Override
  114. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  115. super.onActivityResult(requestCode, resultCode, data);
  116. if (requestCode == REQUEST_CODE_ADD_ACCOUNT)
  117. {
  118. if (resultCode == RESULT_OK) {
  119. init();
  120. }
  121. else {
  122. List<LocationDbo> locations = CamotionBusiness.getLocations(MainActivity.this);
  123. if (locations.size() == 0) {
  124. finish();
  125. }
  126. }
  127. }
  128. }
  129. private void setLocation(LocationDbo location)
  130. {
  131. _currentLocation = location;
  132. _fullLoginDbo = null;
  133. _locationNameView.setText(_currentLocation.getName());
  134. _navigationView.getMenu().findItem(R.id.nav_cameras).setVisible(false);
  135. _navigationView.getMenu().findItem(R.id.nav_sensors).setVisible(false);
  136. _navigationView.getMenu().findItem(R.id.nav_commands).setVisible(false);
  137. showView(-1);
  138. LoginDialog dlg = new LoginDialog(this);
  139. dlg.loginFull(_currentLocation).then(new LuPromise.LuConsumer<LuFullLoginDbo>() {
  140. @Override
  141. public void execute(LuFullLoginDbo data) {
  142. _fullLoginDbo = data;
  143. _navigationView.getMenu().findItem(R.id.nav_cameras).setVisible(_fullLoginDbo.hasPermission("CAMOTION_CAMERA_GET"));
  144. _navigationView.getMenu().findItem(R.id.nav_sensors).setVisible(_fullLoginDbo.hasPermission("CAMOTION_SENSOR_GET"));
  145. _navigationView.getMenu().findItem(R.id.nav_commands).setVisible(_fullLoginDbo.hasPermission("CAMOTION_COMMAND_GET"));
  146. showView(getDefaultView());
  147. }
  148. }, new LuPromise.LuConsumer<LuPromise.LuPromiseError>() {
  149. @Override
  150. public void execute(LuPromise.LuPromiseError error) {
  151. showView(-1);
  152. Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_LONG).show();
  153. }
  154. });
  155. }
  156. private int getDefaultView()
  157. {
  158. if (_fullLoginDbo != null)
  159. {
  160. if (_fullLoginDbo.hasPermission("CAMOTION_CAMERA_GET"))
  161. {
  162. return R.id.nav_cameras;
  163. }
  164. else if (_fullLoginDbo.hasPermission("CAMOTION_COMMAND_GET"))
  165. {
  166. return R.id.nav_commands;
  167. }
  168. else if (_fullLoginDbo.hasPermission("CAMOTION_SENSOR_GET"))
  169. {
  170. return R.id.nav_sensors;
  171. }
  172. }
  173. return -1;
  174. }
  175. private void showView(int view)
  176. {
  177. if (_fullLoginDbo == null || _currentLocation == null)
  178. {
  179. init();
  180. return;
  181. }
  182. CamotionFragment fragment;
  183. if (view == R.id.nav_cameras) {
  184. _navigationView.getMenu().findItem(R.id.nav_cameras).setChecked(true);
  185. fragment = new CamerasFragment();
  186. } else if (view == R.id.nav_commands) {
  187. _navigationView.getMenu().findItem(R.id.nav_commands).setChecked(true);
  188. fragment = new CommandsFragment();
  189. } else if (view == R.id.nav_sensors) {
  190. _navigationView.getMenu().findItem(R.id.nav_sensors).setChecked(true);
  191. fragment = new SensorsFragment();
  192. } /*else if (view == -1) {
  193. fragment = new DefaultFragment();
  194. } */else {
  195. return;
  196. }
  197. Bundle args = new Bundle();
  198. args.putString("CAMOTION_LOGIN_DBO", _fullLoginDbo.toString());
  199. args.putString("CAMOTION_LOCATION_DBO", _currentLocation.toString());
  200. fragment.setArguments(args);
  201. getFragmentManager().beginTransaction().replace(R.id.container, fragment).commit();
  202. }
  203. @Override
  204. public void onBackPressed() {
  205. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  206. if (drawer.isDrawerOpen(GravityCompat.START)) {
  207. drawer.closeDrawer(GravityCompat.START);
  208. } else {
  209. super.onBackPressed();
  210. }
  211. }
  212. @Override
  213. public boolean onNavigationItemSelected(MenuItem item) {
  214. int id = item.getItemId();
  215. if (id == R.id.nav_cameras || id == R.id.nav_sensors || id == R.id.nav_commands) {
  216. showView(id);
  217. }
  218. else if (id == R.id.nav_add_account) {
  219. startActivityForResult(new Intent(this, AddAccountActivity.class), REQUEST_CODE_ADD_ACCOUNT);
  220. }
  221. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  222. drawer.closeDrawer(GravityCompat.START);
  223. return true;
  224. }
  225. @Override
  226. public void onConfigurationChanged(Configuration newConfig)
  227. {
  228. super.onConfigurationChanged(newConfig);
  229. }
  230. @Override
  231. public void onCommandClicked(CommandDbo command) {
  232. CommandExecDialog.showDialog(_currentLocation.getConfig(_fullLoginDbo.getLoginDbo()), this, command);
  233. }
  234. }