added ability to import meetings from text
bump version to 0.4.9
This commit is contained in:
+2
-2
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
Reference in New Issue
Block a user