MainActivity.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. package com.noahvogt.miniprojekt;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.Menu;
  5. import android.view.View;
  6. import android.widget.Button;
  7. import android.widget.EditText;
  8. import android.widget.Toast;
  9. import androidx.appcompat.app.AlertDialog;
  10. import androidx.appcompat.app.AppCompatActivity;
  11. import androidx.appcompat.widget.Toolbar;
  12. import androidx.drawerlayout.widget.DrawerLayout;
  13. import androidx.fragment.app.DialogFragment;
  14. import com.google.android.material.floatingactionbutton.FloatingActionButton;
  15. import com.noahvogt.miniprojekt.ui.DataBase.Message;
  16. import com.noahvogt.miniprojekt.ui.home.CustomAdapter;
  17. import androidx.fragment.app.Fragment;
  18. import androidx.fragment.app.FragmentManager;
  19. import androidx.lifecycle.LifecycleOwner;
  20. import androidx.lifecycle.ViewModelProvider;
  21. import androidx.recyclerview.widget.LinearLayoutManager;
  22. import androidx.recyclerview.widget.RecyclerView;
  23. import com.google.android.material.navigation.NavigationView;
  24. import androidx.navigation.NavController;
  25. import androidx.navigation.Navigation;
  26. import androidx.navigation.ui.AppBarConfiguration;
  27. import androidx.navigation.ui.NavigationUI;
  28. import com.google.android.material.snackbar.Snackbar;
  29. import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
  30. import java.text.SimpleDateFormat;
  31. import java.util.Date;
  32. import java.util.List;
  33. import static com.noahvogt.miniprojekt.R.id.drawer_layout;
  34. public class MainActivity extends AppCompatActivity implements View.OnClickListener {
  35. private AppBarConfiguration mAppBarConfiguration;
  36. public static final int NEW_WORD_ACTIVITY_REQUEST_CODE = 1;
  37. public static EmailViewModel mEmailViewModel;
  38. public static RecyclerView recyclerView;
  39. public static final CustomAdapter adapter = new CustomAdapter(new CustomAdapter.EmailDiff());
  40. private AlertDialog dialog;
  41. private EditText newemail_name, newemail_email, newemail_password; // may not be private
  42. // empty descriptor
  43. public MainActivity() {
  44. }
  45. public String getVisibleFragment(){
  46. FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
  47. List<Fragment> fragments = fragmentManager.getFragments();
  48. if(fragments != null){
  49. showToast("not null");
  50. for(Fragment fragment : fragments){
  51. showToast(fragment.toString());
  52. if(fragment.isVisible())
  53. showToast("found visible fragment");
  54. return "is gallery";
  55. }
  56. } else {
  57. showToast("null");}
  58. return null;
  59. }
  60. @Override
  61. protected void onCreate(Bundle savedInstanceState) {
  62. super.onCreate(savedInstanceState);
  63. setContentView(R.layout.activity_main);
  64. // define button listeners
  65. Button add_email_button = (Button) findViewById(R.id.addEmailButton);
  66. add_email_button.setOnClickListener(new View.OnClickListener() {
  67. @Override
  68. public void onClick(View v) {
  69. createNewEmailDialog();
  70. }
  71. });
  72. /*creates accountmanager by clicking on profil */
  73. View accountView = findViewById(R.id.accountView);
  74. accountView.setOnClickListener(new View.OnClickListener() {
  75. @Override
  76. public void onClick(View v) {
  77. createNewEmailDialog();
  78. }
  79. });
  80. Toolbar toolbar = findViewById(R.id.toolbar);
  81. setSupportActionBar(toolbar);
  82. DrawerLayout drawer = findViewById(drawer_layout);
  83. NavigationView navigationView = findViewById(R.id.nav_view);
  84. // Passing each menu ID as a set of Ids because each
  85. // menu should be considered as top level destinations.
  86. mAppBarConfiguration = new AppBarConfiguration.Builder(
  87. R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
  88. .setDrawerLayout(drawer)
  89. .build();
  90. NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
  91. NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
  92. NavigationUI.setupWithNavController(navigationView, navController);
  93. // Lookup the recyclerview in activity layout
  94. recyclerView = findViewById(R.id.recyclerView);
  95. /* Attach the adapter to the recyclerview to populate items */
  96. recyclerView.setAdapter(adapter);
  97. recyclerView.setLayoutManager(new LinearLayoutManager(this));
  98. //mEmailViewModel = new ViewModelProvider(this).get(EmailViewModel.class);
  99. mEmailViewModel = new ViewModelProvider(this).get(EmailViewModel.class);
  100. mEmailViewModel.getInboxMessage().observe(this, messages -> {
  101. /* Update the cached copy of the messages in the adapter*/
  102. adapter.submitList(messages);
  103. });
  104. /* if (GalleryFragment.galleryViewOn) {
  105. showToast("gallery True");
  106. mEmailViewModel = new ViewModelProvider(this).get(EmailViewModel.class);
  107. mEmailViewModel.getDraftMessage().observe(this, messages -> {
  108. /* Update the cached copy of the messages in the adapter*/
  109. /* adapter.submitList(messages);
  110. });
  111. //mEmailViewModel.deleteNewMessage();
  112. }
  113. else if (HomeFragment.homeViewOn){
  114. showToast("home True");
  115. mEmailViewModel = new ViewModelProvider(this).get(EmailViewModel.class);
  116. mEmailViewModel.getDraftMessage().observe(this, messages -> {
  117. /* Update the cached copy of the messages in the adapter*/
  118. /* adapter.submitList(messages);
  119. });
  120. }
  121. else if (DraftFragment.DraftViewOn){
  122. showToast("draft True");
  123. mEmailViewModel = new ViewModelProvider(this).get(EmailViewModel.class);
  124. mEmailViewModel.getDraftMessage().observe(this, messages -> {
  125. /* Update the cached copy of the messages in the adapter*/
  126. /* adapter.submitList(messages);
  127. });
  128. }
  129. else {
  130. //mEmailViewModel.deleteNewMessage();
  131. }
  132. */
  133. /* Start email Writer*/
  134. FloatingActionButton message_create_button = findViewById(R.id.messageButton);
  135. message_create_button.setOnClickListener(new View.OnClickListener() {
  136. @Override
  137. public void onClick(View v) {
  138. DialogFragment dialog = messageCreateFragment.newInstance();
  139. dialog.show(getSupportFragmentManager(), "tag");
  140. Intent intent = new Intent(MainActivity.this, NewDraftMessageActivity.class);
  141. startActivityForResult(intent, NEW_WORD_ACTIVITY_REQUEST_CODE);
  142. }
  143. });
  144. }
  145. /* gets the data from the Email writer and adds it to the Database I think*/
  146. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  147. super.onActivityResult(requestCode, resultCode, data);
  148. /* Creates class for the Date when Email is written */
  149. Date dNow = new Date();
  150. SimpleDateFormat ft =
  151. new SimpleDateFormat("dd.MM.yy");
  152. if (requestCode == NEW_WORD_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
  153. Message word = new Message(
  154. data.getStringExtra(NewDraftMessageActivity.EXTRA_TO),
  155. null,
  156. null,
  157. data.getStringExtra(NewDraftMessageActivity.EXTRA_FROM),
  158. ft.format(dNow),
  159. data.getStringExtra(NewDraftMessageActivity.EXTRA_SUBJECT),
  160. data.getStringExtra(NewDraftMessageActivity.EXTRA_MESSAGE),
  161. "Draft",false);
  162. mEmailViewModel.insert(word);
  163. } else {
  164. Toast.makeText(
  165. getApplicationContext(),
  166. R.string.empty_not_saved,
  167. Toast.LENGTH_LONG).show();
  168. }
  169. }
  170. @Override
  171. public boolean onCreateOptionsMenu(Menu menu) {
  172. // Inflate the menu; this adds items to the action bar if it is present.
  173. getMenuInflater().inflate(R.menu.create_message_options_menu, menu);
  174. return true;
  175. }
  176. @Override
  177. public boolean onSupportNavigateUp() {
  178. NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
  179. return NavigationUI.navigateUp(navController, mAppBarConfiguration)
  180. || super.onSupportNavigateUp();
  181. }
  182. // better leave empty to avoid any listener disambiguity
  183. public void onClick(View view) {}
  184. public void createNewEmailDialog(){
  185. // define View window
  186. AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
  187. final View emailPopupView = getLayoutInflater().inflate(R.layout.popup, null);
  188. // init text field variables
  189. newemail_name = emailPopupView.findViewById(R.id.popup_material_name_asking_text);
  190. newemail_email = emailPopupView.findViewById(R.id.popup_material_email_asking_text);
  191. newemail_password = emailPopupView.findViewById(R.id.popup_material_password_asking_text);
  192. // init button variables
  193. Button newemail_save_button = (Button) emailPopupView.findViewById(R.id.saveButton);
  194. // may not be private
  195. Button newemail_cancel_button = (Button) emailPopupView.findViewById(R.id.cancelButton);
  196. // open View window
  197. dialogBuilder.setView(emailPopupView);
  198. dialog = dialogBuilder.create();
  199. dialog.show();
  200. // store user input
  201. newemail_save_button.setOnClickListener(new View.OnClickListener() {
  202. @Override
  203. public void onClick(View v) {
  204. // store user input (only needed for DEBUGGING)
  205. String name = newemail_name.getText().toString();
  206. String email = newemail_email.getText().toString();
  207. String password = newemail_password.getText().toString();
  208. if (!mailFunctions.validateEmail(newemail_email) | !mailFunctions.validateName(newemail_name) | !mailFunctions.validatePassword(newemail_password)) {
  209. return;
  210. }
  211. // show all strings the user gave, this will later be stored to a secure database and checked for validation
  212. showToast(name);
  213. showToast(email);
  214. showToast(password);
  215. showSnackbar(emailPopupView,"save button clicked");
  216. }
  217. });
  218. newemail_cancel_button.setOnClickListener(new View.OnClickListener() {
  219. @Override
  220. public void onClick(View v) {
  221. // define save button here
  222. dialog.dismiss();
  223. }
  224. });
  225. }
  226. // show debug output in specific view
  227. private void showSnackbar(View View, String text) {
  228. Snackbar.make(View, text, Snackbar.LENGTH_LONG)
  229. .setAction("Action", null).show();
  230. }
  231. // like showSnackbar(), but global and uglier
  232. private void showToast(String text) {
  233. Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
  234. }
  235. }