MainActivity.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  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, R.id.nav_archive, R.id.nav_spam)
  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. /* get Inbox Messages in Recyclerviewer at begining is overwritten by Fragments but has to stay*/
  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. /* Start email Writer*/
  105. FloatingActionButton message_create_button = findViewById(R.id.messageButton);
  106. message_create_button.setOnClickListener(new View.OnClickListener() {
  107. @Override
  108. public void onClick(View v) {
  109. DialogFragment dialog = messageCreateFragment.newInstance();
  110. dialog.show(getSupportFragmentManager(), "tag");
  111. }
  112. });
  113. }
  114. /* gets the data from the Email writer and adds it to the Database */
  115. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  116. super.onActivityResult(requestCode, resultCode, messageCreateFragment.replyIntent);
  117. /* Creates class for the Date when Email is written */
  118. Date dNow = new Date();
  119. SimpleDateFormat ft =
  120. new SimpleDateFormat("dd.MM.yy");
  121. // if (requestCode == NEW_WORD_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
  122. Message word = new Message(
  123. messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_TO),
  124. null,
  125. null,
  126. messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_FROM),
  127. ft.format(dNow),
  128. messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_SUBJECT),
  129. messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_MESSAGE),
  130. "Draft",false);
  131. mEmailViewModel.insert(word);
  132. // } else {
  133. Toast.makeText(
  134. getApplicationContext(),
  135. R.string.empty_not_saved,
  136. Toast.LENGTH_LONG).show();
  137. Toast.makeText(
  138. getApplicationContext(),
  139. messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_FROM),
  140. Toast.LENGTH_LONG).show();
  141. // }
  142. }
  143. @Override
  144. public boolean onCreateOptionsMenu(Menu menu) {
  145. // Inflate the menu; this adds items to the action bar if it is present.
  146. getMenuInflater().inflate(R.menu.create_message_options_menu, menu);
  147. return true;
  148. }
  149. @Override
  150. public boolean onSupportNavigateUp() {
  151. NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
  152. return NavigationUI.navigateUp(navController, mAppBarConfiguration)
  153. || super.onSupportNavigateUp();
  154. }
  155. // better leave empty to avoid any listener disambiguity
  156. public void onClick(View view) {}
  157. public void createNewEmailDialog(){
  158. // define View window
  159. AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
  160. final View emailPopupView = getLayoutInflater().inflate(R.layout.popup, null);
  161. // init text field variables
  162. newemail_name = emailPopupView.findViewById(R.id.popup_material_name_asking_text);
  163. newemail_email = emailPopupView.findViewById(R.id.popup_material_email_asking_text);
  164. newemail_password = emailPopupView.findViewById(R.id.popup_material_password_asking_text);
  165. // init button variables
  166. Button newemail_save_button = (Button) emailPopupView.findViewById(R.id.saveButton);
  167. // may not be private
  168. Button newemail_cancel_button = (Button) emailPopupView.findViewById(R.id.cancelButton);
  169. // open View window
  170. dialogBuilder.setView(emailPopupView);
  171. dialog = dialogBuilder.create();
  172. dialog.show();
  173. // store user input
  174. newemail_save_button.setOnClickListener(new View.OnClickListener() {
  175. @Override
  176. public void onClick(View v) {
  177. // store user input (only needed for DEBUGGING)
  178. String name = newemail_name.getText().toString();
  179. String email = newemail_email.getText().toString();
  180. String password = newemail_password.getText().toString();
  181. if (!mailFunctions.validateEmail(newemail_email) | !mailFunctions.validateName(newemail_name) | !mailFunctions.validatePassword(newemail_password)) {
  182. return;
  183. }
  184. // show all strings the user gave, this will later be stored to a secure database and checked for validation
  185. showToast(name);
  186. showToast(email);
  187. showToast(password);
  188. showSnackbar(emailPopupView,"save button clicked");
  189. }
  190. });
  191. newemail_cancel_button.setOnClickListener(new View.OnClickListener() {
  192. @Override
  193. public void onClick(View v) {
  194. // define save button here
  195. dialog.dismiss();
  196. }
  197. });
  198. }
  199. // show debug output in specific view
  200. private void showSnackbar(View View, String text) {
  201. Snackbar.make(View, text, Snackbar.LENGTH_LONG)
  202. .setAction("Action", null).show();
  203. }
  204. // like showSnackbar(), but global and uglier
  205. private void showToast(String text) {
  206. Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
  207. }
  208. }