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