Skip to content
This repository has been archived by the owner on Jun 22, 2023. It is now read-only.

Commit

Permalink
PR #97 - Added Share functionality
Browse files Browse the repository at this point in the history
Added Share-Functionality
  • Loading branch information
d-Rickyy-b committed Aug 8, 2019
2 parents 4180c83 + cfde1c0 commit 8e7649d
Show file tree
Hide file tree
Showing 11 changed files with 140 additions and 15 deletions.
12 changes: 9 additions & 3 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ env:
- ANDROID_API=28
- EMULATOR_API=28
- ANDROID_BUILD_TOOLS=28.0.3

- LC_ALL='de_DE.UTF-8'

android:
components:
- tools
Expand All @@ -21,6 +22,11 @@ android:
- 'intel-android-extra-license-.+'
- '.*'

addons:
apt:
packages:
- language-pack-de

notifications:
email: false

Expand All @@ -34,11 +40,11 @@ cache:
- $HOME/.android/build-cache

before_install:
- openssl aes-256-cbc -K $encrypted_6ab911f61ce6_key -iv $encrypted_6ab911f61ce6_iv -in keystore.ks.enc -out keystore.ks -d
- 'if [ -n "$TRAVIS_TAG" ]; then openssl aes-256-cbc -K $encrypted_6ab911f61ce6_key -iv $encrypted_6ab911f61ce6_iv -in keystore.ks.enc -out keystore.ks -d; else echo "Not building a tagged commit! Skipping decrypting!"; fi'

script:
- ./gradlew jacocoTestReport coveralls
- ./gradlew clean build
- 'if [ -n "$TRAVIS_TAG" ]; then ./gradlew clean assembleRelease; else echo "Not building a tagged commit! Skipping building release apk!"; fi'

deploy:
provider: releases
Expand Down
4 changes: 2 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ android {
applicationId "de.aurora.mggvertretungsplan"
minSdkVersion 15
targetSdkVersion 28
versionCode 28
versionName "3.2.1"
versionCode 30
versionName "3.2.2"
multiDexEnabled true

testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
Expand Down
41 changes: 38 additions & 3 deletions app/src/main/java/de/aurora/mggvertretungsplan/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,6 @@
import android.view.MenuItem;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;

import androidx.annotation.ColorInt;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
Expand All @@ -34,7 +31,12 @@
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

import org.json.JSONArray;
import org.json.JSONException;

import de.aurora.mggvertretungsplan.datamodel.TimeTable;
import de.aurora.mggvertretungsplan.datamodel.TimeTableDay;
import de.aurora.mggvertretungsplan.parsing.BaseParser;
import de.aurora.mggvertretungsplan.parsing.BaseParser.ParsingCompleteListener;
import de.aurora.mggvertretungsplan.parsing.MGGParser;
Expand Down Expand Up @@ -220,6 +222,39 @@ public boolean onOptionsItemSelected(MenuItem item) {
case R.id.action_feedback:
launchCustomTabsIntent(color, getString(R.string.feedback_url));
break;
case R.id.action_share:
StringBuilder sb = new StringBuilder();
String header = getString(R.string.toolbarTitle_WithClass, class_name);
sb.append(header);
sb.append("\n");

String input = StorageUtilities.readFile(this);
TimeTable timeTable;

if (input.isEmpty()) {
timeTable = new TimeTable();
} else {
try {
JSONArray jsonArray = new JSONArray(input);
timeTable = new TimeTable(jsonArray);
timeTable = timeTable.filter(class_name);
} catch (JSONException e) {
Logger.e(TAG, e.getMessage());
timeTable = new TimeTable();
}
}

for (TimeTableDay ttd : timeTable.getAllDays()) {
sb.append(ttd.toShareString());
}

Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Vertretungsplan des Markgrafen-Gymnasiums");
shareIntent.putExtra(Intent.EXTRA_TEXT, sb.toString().trim());
startActivity(Intent.createChooser(shareIntent, "Teilen via..."));
break;

case R.id.action_info:
Spanned informationText;
if (Build.VERSION.SDK_INT >= 24) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,21 @@ public String toString() {
return result.toString().trim();
}

/**
* Filters the timetable so that only entries of a certain class will stay. All other classes
* will be removed.
* @param class_name The name of the class, which should be filtered on.
* @return TimeTable object
*/
public TimeTable filter(String className) {
final TimeTable tt = new TimeTable();
for (TimeTableDay ttd: timeTableDays) {
tt.addDay(ttd.filter(className));
}

return tt;
}

public JSONArray toJSON() throws JSONException {
JSONArray jsonArray = new JSONArray();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ public TimeTableDay(String date, String week, ArrayList<ArrayList<String>> timeT
mergeConsecutiveCancellations();
}

public TimeTableDay(Date date, Week week, ArrayList<TimeTableElement> timeTableElements) {
this.date = date;
this.week = week;
for (TimeTableElement tte: timeTableElements) {
addElement(tte);
}
}

public TimeTableDay(JSONObject jsonObject) {
try {
String date = jsonObject.getString("date");
Expand Down Expand Up @@ -125,6 +133,10 @@ public ArrayList<TimeTableElement> getElements(String className) {
return elementsOfClass;
}

public TimeTableDay filter(String className) {
return new TimeTableDay(this.date, this.week, getElements(className));
}

public ArrayList<ArrayList<String>> getArrayList() {
ArrayList<ArrayList<String>> elements = new ArrayList<>();

Expand Down Expand Up @@ -253,6 +265,33 @@ public String toString() {
return result.toString().trim();
}

/**
* Formats the TTD in a beautiful way to share the TT via other apps
* @return Beautiful formatted string of the TTD's content
*/
public String toShareString() {
StringBuilder result = new StringBuilder();
result.append(getFullDateString());
result.append(", ");
result.append(this.week.toString());
result.append("-Woche\n");

if (timeTableElements.isEmpty()) {
//result.append(getString(R.string.card_no_information));
//TODO Remove hardcoded string
result.append("Keine Ausfälle!");
result.append("\n\n");
return result.toString();
}

for (TimeTableElement tte : timeTableElements) {
result.append(tte.toShareString());
}
result.append("\n");

return result.toString();
}

public JSONObject toJSON() throws JSONException {
JSONObject jsonObject = new JSONObject();
jsonObject.put("date", getDateString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,25 @@ public String toString() {
return String.format("%s | %s | %s | %s | %s | %s | %s", hour, class_name, subject, newSubject, room, newRoom, info);
}

/**
* Formats the TTD in a beautiful way to share the TT via other apps
* @return Beautiful formatted string of the TTD's content
*/
public String toShareString() {
// TODO There should be some way to see what subject is cancelled / substituted,
// especially important for K1 / K2 because there are multiple subjects taking place
// at the same time
int type = getType();
if (type == CANCELLATION) {
return String.format(" > %s. Stunde entfällt! %s\n", hour, info);
}
if (type == SUBSTITUTION) {
return String.format(" > %s. Stunde: %s -> %s\n", hour, room, newRoom);
}
return "FEHLER!\n";
//TODO remove hardcoded strings!
}

public JSONObject toJSON() throws JSONException {
JSONObject jsonObject = new JSONObject();

Expand Down
13 changes: 9 additions & 4 deletions app/src/main/res/menu/toolbar_menu.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,31 @@
xmlns:app="http://schemas.android.com/apk/res-auto">

<item
android:id="@+id/action_info"
android:id="@+id/action_share"
android:icon="@android:drawable/ic_menu_share"
android:orderInCategory="1"
android:title="@string/action_share_title" />
<item
android:id="@+id/action_info"
android:orderInCategory="2"
android:title="@string/infoTitle"
app:showAsAction="never" />

<item
android:id="@+id/action_settings"
android:orderInCategory="2"
android:orderInCategory="3"
android:title="@string/action_settings"
app:showAsAction="never" />

<item
android:id="@+id/action_feedback"
android:orderInCategory="3"
android:orderInCategory="4"
android:title="@string/action_feedback"
app:showAsAction="never" />

<item
android:id="@+id/action_website"
android:orderInCategory="4"
android:orderInCategory="5"
android:title="@string/action_website"
app:showAsAction="never" />

Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@
<string name="defaultChannelDesc">Benachrichtigungen über Änderungen des Vertretungsplans</string>
<string name="newsChannelDisplayName">Neuigkeiten</string>
<string name="newsChannelDesc">Nachrichten der MGG Webseite</string>
<string name="action_share_title">Teilen...</string>

<string-array name="ClassLayer_List">
<item>5</item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,4 +96,9 @@ public void testToString() {
assertEquals(String.format("%s | %s | %s | %s | %s | %s | %s", hour, class_name, "Deutsch", "Englisch", room, newRoom, info), tte.toString());
}

@Test
public void testToShareString() {
TimeTableElement tte = new TimeTableElement(hour, class_name, subject, newSubject, room, newRoom, info);
assertEquals(String.format(" > %s. Stunde: %s -> %s\n", hour, room, newRoom), tte.toShareString());
}
}
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
classpath 'com.android.tools.build:gradle:3.4.1'
classpath 'org.jacoco:org.jacoco.core:0.8.2'
classpath 'org.kt3k.gradle.plugin:coveralls-gradle-plugin:2.8.2'
}
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Sun Sep 30 23:50:08 CEST 2018
#Mon Jun 24 16:56:41 CEST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

0 comments on commit 8e7649d

Please sign in to comment.