added ability to import meetings from text

bump version to 0.4.9
This commit is contained in:
2021-04-02 19:30:16 +02:00
parent 680ba1c331
commit 3809293afd
4 changed files with 153 additions and 40 deletions
+2 -2
View File
@@ -10,8 +10,8 @@ android {
applicationId "de.joel.zoomhelper" applicationId "de.joel.zoomhelper"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 30 targetSdkVersion 30
versionCode 12 versionCode 13
versionName '0.4.8' versionName '0.4.9'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
+5
View File
@@ -19,6 +19,11 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</activity> </activity>
</application> </application>
@@ -34,8 +34,9 @@ import java.io.ObjectOutputStream;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.Objects; import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class InstantAutoComplete extends androidx.appcompat.widget.AppCompatAutoCompleteTextView { class InstantAutoComplete extends androidx.appcompat.widget.AppCompatAutoCompleteTextView {
@@ -60,7 +61,6 @@ class InstantAutoComplete extends androidx.appcompat.widget.AppCompatAutoComplet
} }
public class MainActivity extends AppCompatActivity { public class MainActivity extends AppCompatActivity {
public boolean testing; public boolean testing;
@@ -69,6 +69,10 @@ public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
Intent myIntent = getIntent(); // gets the previously created intent Intent myIntent = getIntent(); // gets the previously created intent
String action = myIntent.getAction();
String type = myIntent.getType();
String meetingName = myIntent.getStringExtra("meetingName"); String meetingName = myIntent.getStringExtra("meetingName");
boolean joinImmediately = myIntent.getBooleanExtra("joinImmediately", false); boolean joinImmediately = myIntent.getBooleanExtra("joinImmediately", false);
testing = myIntent.getBooleanExtra("testing", false); testing = myIntent.getBooleanExtra("testing", false);
@@ -77,6 +81,7 @@ public class MainActivity extends AppCompatActivity {
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
final ScrollView scrollview = findViewById(R.id.scrollArea); final ScrollView scrollview = findViewById(R.id.scrollArea);
int meetingIndex = searchMeetingInList(getMeetings(), meetingName); int meetingIndex = searchMeetingInList(getMeetings(), meetingName);
if (meetingIndex == -1) { if (meetingIndex == -1) {
if (meetingName != null) { if (meetingName != null) {
@@ -101,7 +106,7 @@ public class MainActivity extends AppCompatActivity {
} }
watchMeetingNameBox(); //watchMeetingNameBox();
fillDropdownMeetingName(); fillDropdownMeetingName();
if (getLastMeeting() != -1) { if (getLastMeeting() != -1) {
try { try {
@@ -125,7 +130,11 @@ public class MainActivity extends AppCompatActivity {
watchShortcutIcon(); watchShortcutIcon();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
handleSendText(myIntent); // Handle text being sent
}
}
if (joinImmediately) { if (joinImmediately) {
Meeting currMeeting = getMeetings().get(meetingIndex); 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() { private void watchShortcutIcon() {
ImageView ShortcutIcon = findViewById(R.id.imageCreateShortcut); ImageView ShortcutIcon = findViewById(R.id.imageCreateShortcut);
@@ -281,7 +372,7 @@ public class MainActivity extends AppCompatActivity {
private void watchSaveIcon() { private void watchSaveIcon() {
ImageView saveIcon = findViewById(R.id.imageSave); ImageView saveIcon = findViewById(R.id.imageSave);
saveIcon.setOnClickListener(v -> saveAllMeetings()); saveIcon.setOnClickListener(v -> saveMeetingFromUI());
} }
public void watchMeetingNameBox() { public void watchMeetingNameBox() {
@@ -360,9 +451,8 @@ public class MainActivity extends AppCompatActivity {
editAtt.setText(getMeetings().get(meetingIndex).attendees.get(found).num); editAtt.setText(getMeetings().get(meetingIndex).attendees.get(found).num);
} }
public void fillMeeting(int id) {
ArrayList<Meeting> meetings = getMeetings();
public void fillMeeting(Meeting meeting) {
EditText editMeetingName = findViewById(R.id.TextMeetingName); EditText editMeetingName = findViewById(R.id.TextMeetingName);
EditText editID = findViewById(R.id.textBoxID); EditText editID = findViewById(R.id.textBoxID);
EditText editPW = findViewById(R.id.editTextTextPassword2); EditText editPW = findViewById(R.id.editTextTextPassword2);
@@ -372,12 +462,16 @@ public class MainActivity extends AppCompatActivity {
editID.setError(null); editID.setError(null);
editID.clearFocus(); 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); fillDropdownAttendeeName(id);
} }
@@ -517,12 +611,12 @@ public class MainActivity extends AppCompatActivity {
} }
public void btnSave_onClick(View view) { public void btnSave_onClick(View view) {
saveAllMeetings(); saveMeetingFromUI();
} }
public void btnJoin_onClick(View view) { public void btnJoin_onClick(View view) {
saveAllMeetings(); saveMeetingFromUI();
Meeting currMeeting = createCurrMeetingFromUI(); Meeting currMeeting = createCurrMeetingFromUI();
String url = buildZoomURL(currMeeting.meetingID, currMeeting.meetingPWD, currMeeting.attendees.get(currMeeting.lastAtt).name, currMeeting.attendees.get(currMeeting.lastAtt).num); String url = buildZoomURL(currMeeting.meetingID, currMeeting.meetingPWD, currMeeting.attendees.get(currMeeting.lastAtt).name, currMeeting.attendees.get(currMeeting.lastAtt).num);
launchZoomUrl(url); 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()); 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<Meeting> listMeetings = getMeetings(); ArrayList<Meeting> 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(); Meeting currMeetingUI = createCurrMeetingFromUI();
if (currMeetingUI.meetingID.equals("")) { if (currMeetingUI.meetingID.equals("")) {
@@ -552,29 +676,7 @@ public class MainActivity extends AppCompatActivity {
editMName.setText(currMeetingUI.meetingID); editMName.setText(currMeetingUI.meetingID);
currMeetingUI.meetingName = currMeetingUI.meetingID; currMeetingUI.meetingName = currMeetingUI.meetingID;
} }
importMeeting(currMeetingUI);
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();
} }
} }
+6
View File
@@ -26,5 +26,11 @@
<string name="WantToJoinImmediately">Wähle das Verhalten beim Öffnen der Verknüpfung aus</string> <string name="WantToJoinImmediately">Wähle das Verhalten beim Öffnen der Verknüpfung aus</string>
<string name="joinImmediately">sofort beitreten</string> <string name="joinImmediately">sofort beitreten</string>
<string name="alwaysAsk">Dialog immer anzeigen</string> <string name="alwaysAsk">Dialog immer anzeigen</string>
<string name="wantToimportMeeting">Möchtest du das folgende Meeting importieren?</string>
<string name="importError">"Dieser Text entspricht keinem für ZoomHelper bekannten Meetingeinladungs-Muster "</string>
<string name="ok">ok</string>
<string name="meetingAlreadyExists">Meeting unter diesem Namen existiert schon. Bitte umbenennen, ansonsten wird es beim Speichern überschrieben</string>
<string name="override">überschreiben</string>
<string name="rename">umbenennen</string>
</resources> </resources>