diff --git a/app/build.gradle b/app/build.gradle index 0083738..198d405 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "de.joel.zoomhelper" minSdkVersion 21 targetSdkVersion 30 - versionCode 12 - versionName '0.4.8' + versionCode 13 + versionName '0.4.9' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 53859b8..19d10d4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,6 +19,11 @@ + + + + + diff --git a/app/src/main/java/de/joel/zoomhelper/MainActivity.java b/app/src/main/java/de/joel/zoomhelper/MainActivity.java index a811ecc..993c0fb 100644 --- a/app/src/main/java/de/joel/zoomhelper/MainActivity.java +++ b/app/src/main/java/de/joel/zoomhelper/MainActivity.java @@ -34,8 +34,9 @@ import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; class InstantAutoComplete extends androidx.appcompat.widget.AppCompatAutoCompleteTextView { @@ -60,7 +61,6 @@ class InstantAutoComplete extends androidx.appcompat.widget.AppCompatAutoComplet } - public class MainActivity extends AppCompatActivity { public boolean testing; @@ -69,6 +69,10 @@ public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { Intent myIntent = getIntent(); // gets the previously created intent + String action = myIntent.getAction(); + String type = myIntent.getType(); + + String meetingName = myIntent.getStringExtra("meetingName"); boolean joinImmediately = myIntent.getBooleanExtra("joinImmediately", false); testing = myIntent.getBooleanExtra("testing", false); @@ -77,6 +81,7 @@ public class MainActivity extends AppCompatActivity { setContentView(R.layout.activity_main); final ScrollView scrollview = findViewById(R.id.scrollArea); + int meetingIndex = searchMeetingInList(getMeetings(), meetingName); if (meetingIndex == -1) { if (meetingName != null) { @@ -101,7 +106,7 @@ public class MainActivity extends AppCompatActivity { } - watchMeetingNameBox(); + //watchMeetingNameBox(); fillDropdownMeetingName(); if (getLastMeeting() != -1) { try { @@ -125,7 +130,11 @@ public class MainActivity extends AppCompatActivity { watchShortcutIcon(); - + if (Intent.ACTION_SEND.equals(action) && type != null) { + if ("text/plain".equals(type)) { + handleSendText(myIntent); // Handle text being sent + } + } if (joinImmediately) { Meeting currMeeting = getMeetings().get(meetingIndex); @@ -139,6 +148,88 @@ public class MainActivity extends AppCompatActivity { } + private void handleSendText(Intent intent) { + String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); + String meetingID = ""; + String meetingPWD = ""; + String meetingName = ""; + + if (sharedText != null) { + Matcher matcher = Pattern.compile("(?i)(?<=(Meeting-ID:)|(Meeting\\sID:)|(ID:)).+").matcher(sharedText); + if (matcher.find()) { + meetingID = matcher.group(0).trim(); + } + matcher = Pattern.compile("(?i)(?<=(Kenncode:)|(Passwort:)|(Passcode:)|(Password:)).+").matcher(sharedText); + if (matcher.find()) { + meetingPWD = matcher.group(0).trim(); + } + matcher = Pattern.compile("(?i)(?<=(Thema:)|(Meeting\\sName:)|(Topic:)).+").matcher(sharedText); + if (matcher.find()) { + meetingName = matcher.group(0).trim(); + } + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.app_name); + builder.setMessage(R.string.meetingAlreadyExists); + + if (meetingID.equals("")) { + builder.setMessage(R.string.importError); + builder.setPositiveButton(R.string.ok, (dialog, which) -> { + dialog.dismiss(); + }); + AlertDialog alert = builder.create(); + alert.show(); + } else { + + Meeting mtgToImport = new Meeting(meetingName, meetingID, meetingPWD, "", ""); + + if (searchMeetingInList(getMeetings(), mtgToImport.meetingName) == -1) { + fillMeeting(mtgToImport); + } else { + builder.setPositiveButton(R.string.override, (dialog, which) -> { + int found = searchMeetingInList(getMeetings(), mtgToImport.meetingName); + importMeeting(mtgToImport, false); + fillMeeting(found); + dialog.dismiss(); + }); + builder.setNegativeButton(R.string.rename, (dialog, which) -> { + mtgToImport.meetingName = ""; + fillMeeting(mtgToImport); + dialog.dismiss(); + }); + AlertDialog alert = builder.create(); + alert.show(); + } + } + + + /* AlertDialog.Builder builder = new AlertDialog.Builder(this); + + builder.setTitle(R.string.app_name); + + if (meetingID.equals("")) { + builder.setMessage(R.string.importError); + builder.setPositiveButton(R.string.ok, (dialog, which) -> { + dialog.dismiss(); + }); + } else { + builder.setMessage(getString(R.string.wantToimportMeeting) + "\n" + mtgToImport.info()); + + builder.setPositiveButton(R.string.yes, (dialog, which) -> { + dialog.dismiss(); + importMeetingToUI(mtgToImport); + }); + + builder.setNegativeButton(R.string.no, (dialog, which) -> { + dialog.dismiss(); + }); + } + + AlertDialog alert = builder.create(); + alert.show();*/ + } + } + private void watchShortcutIcon() { ImageView ShortcutIcon = findViewById(R.id.imageCreateShortcut); @@ -281,7 +372,7 @@ public class MainActivity extends AppCompatActivity { private void watchSaveIcon() { ImageView saveIcon = findViewById(R.id.imageSave); - saveIcon.setOnClickListener(v -> saveAllMeetings()); + saveIcon.setOnClickListener(v -> saveMeetingFromUI()); } public void watchMeetingNameBox() { @@ -360,9 +451,8 @@ public class MainActivity extends AppCompatActivity { editAtt.setText(getMeetings().get(meetingIndex).attendees.get(found).num); } - public void fillMeeting(int id) { - ArrayList meetings = getMeetings(); + public void fillMeeting(Meeting meeting) { EditText editMeetingName = findViewById(R.id.TextMeetingName); EditText editID = findViewById(R.id.textBoxID); EditText editPW = findViewById(R.id.editTextTextPassword2); @@ -372,12 +462,16 @@ public class MainActivity extends AppCompatActivity { editID.setError(null); editID.clearFocus(); - editMeetingName.setText(meetings.get(id).meetingName); - editID.setText(meetings.get(id).meetingID); - editPW.setText(meetings.get(id).meetingPWD); - editName.setText(meetings.get(id).attendees.get(meetings.get(id).lastAtt).name); - editAtt.setText(meetings.get(id).attendees.get(meetings.get(id).lastAtt).num); + editMeetingName.setText(meeting.meetingName); + editID.setText(meeting.meetingID); + editPW.setText(meeting.meetingPWD); + editName.setText(meeting.attendees.get(meeting.lastAtt).name); + editAtt.setText(meeting.attendees.get(meeting.lastAtt).num); + } + + public void fillMeeting(int id) { + fillMeeting(getMeetings().get(id)); fillDropdownAttendeeName(id); } @@ -517,12 +611,12 @@ public class MainActivity extends AppCompatActivity { } public void btnSave_onClick(View view) { - saveAllMeetings(); + saveMeetingFromUI(); } public void btnJoin_onClick(View view) { - saveAllMeetings(); + saveMeetingFromUI(); Meeting currMeeting = createCurrMeetingFromUI(); String url = buildZoomURL(currMeeting.meetingID, currMeeting.meetingPWD, currMeeting.attendees.get(currMeeting.lastAtt).name, currMeeting.attendees.get(currMeeting.lastAtt).num); launchZoomUrl(url); @@ -538,8 +632,38 @@ public class MainActivity extends AppCompatActivity { return new Meeting(editMeetingName.getText().toString(), editID.getText().toString(), editPW.getText().toString(), editName.getText().toString(), editAtt.getText().toString()); } - public void saveAllMeetings() { + + public void importMeeting(Meeting meeting, boolean updateAttendee) { ArrayList listMeetings = getMeetings(); + int foundCurr = searchMeetingInList(listMeetings, meeting.meetingName); + if (foundCurr == -1) { + listMeetings.add(meeting); + if (listMeetings.size() == 1) { + setLastMeeting(0); + } else { + setLastMeeting(listMeetings.size() - 1); + } + + } else { + Meeting currMeeting = getMeetings().get(foundCurr); + currMeeting.meetingID = meeting.meetingID; + currMeeting.meetingPWD = meeting.meetingPWD; + if (updateAttendee) + currMeeting.updateAttendee(meeting.attendees.get(0).name, meeting.attendees.get(0).num); + listMeetings.set(foundCurr, currMeeting); + setLastMeeting(foundCurr); + } + saveMeetingList(listMeetings); + fillDropdownMeetingName(); + fillDropdownAttendeeName(getLastMeeting()); + Toast.makeText(getApplicationContext(), "Meeting gespeichert", Toast.LENGTH_SHORT).show(); + } + + public void importMeeting(Meeting meeting) { + importMeeting(meeting, true); + } + + public void saveMeetingFromUI() { Meeting currMeetingUI = createCurrMeetingFromUI(); if (currMeetingUI.meetingID.equals("")) { @@ -552,29 +676,7 @@ public class MainActivity extends AppCompatActivity { editMName.setText(currMeetingUI.meetingID); currMeetingUI.meetingName = currMeetingUI.meetingID; } - - - int foundCurr = searchMeetingInList(listMeetings, currMeetingUI.meetingName); - if (foundCurr == -1) { - listMeetings.add(currMeetingUI); - if (listMeetings.size() == 1) { - setLastMeeting(0); - } else { - setLastMeeting(listMeetings.size() - 1); - } - - } else { - Meeting currMeeting = getMeetings().get(foundCurr); - currMeeting.meetingID = currMeetingUI.meetingID; - currMeeting.meetingPWD = currMeetingUI.meetingPWD; - currMeeting.updateAttendee(currMeetingUI.attendees.get(0).name, currMeetingUI.attendees.get(0).num); - listMeetings.set(foundCurr, currMeeting); - setLastMeeting(foundCurr); - } - saveMeetingList(listMeetings); - fillDropdownMeetingName(); - fillDropdownAttendeeName(getLastMeeting()); - Toast.makeText(getApplicationContext(), "Meeting gespeichert", Toast.LENGTH_SHORT).show(); + importMeeting(currMeetingUI); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ab2e89e..33ed8ae 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -26,5 +26,11 @@ Wähle das Verhalten beim Öffnen der Verknüpfung aus sofort beitreten Dialog immer anzeigen + Möchtest du das folgende Meeting importieren? + "Dieser Text entspricht keinem für ZoomHelper bekannten Meetingeinladungs-Muster " + ok + Meeting unter diesem Namen existiert schon. Bitte umbenennen, ansonsten wird es beim Speichern überschrieben + überschreiben + umbenennen \ No newline at end of file