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

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