MainActivity.java 11 KB

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