added ability to import meetings from text
bump version to 0.4.9
This commit is contained in:
@@ -19,6 +19,11 @@
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</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>
|
||||
</application>
|
||||
|
||||
|
||||
@@ -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<Meeting> 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<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();
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -26,5 +26,11 @@
|
||||
<string name="WantToJoinImmediately">Wähle das Verhalten beim Öffnen der Verknüpfung aus</string>
|
||||
<string name="joinImmediately">sofort beitreten</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>
|
||||
Reference in New Issue
Block a user