diff --git a/app/build.gradle b/app/build.gradle
index 4b09486..fd38dc6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -5,13 +5,13 @@ apply plugin: 'kotlin-android-extensions'
android {
useLibrary 'org.apache.http.legacy'
- compileSdkVersion 28
+ compileSdkVersion 29
defaultConfig {
applicationId "de.nils_beyer.android.testapplication"
minSdkVersion 17
- targetSdkVersion 28
- versionCode 22
- versionName "1.7.6"
+ targetSdkVersion 29
+ versionCode 23
+ versionName "1.7.7"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 94d0956..2202e6d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+
= 23) {
window.statusBarColor = resources.getColor(R.color.login_color, theme)
}
@@ -60,6 +64,7 @@ class LoginActivity : AppCompatActivity() {
finish()
} else {
login_error.visibility = View.VISIBLE
+ login_error.text = getString(R.string.login_error)
val vibratorService = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
// Use new VibrationEffect call on Android Oreo
@@ -76,7 +81,23 @@ class LoginActivity : AppCompatActivity() {
// on error
progressBar.visibility = View.GONE
login_btn_login.isEnabled = true
- Snackbar.make(activity_login, getString(R.string.io_error), Snackbar.LENGTH_LONG).show()
+
+ login_error.visibility = View.VISIBLE
+ login_error.text = it.message
+
+ val vibratorService = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
+
+ // Use new VibrationEffect call on Android Oreo
+ // if not available, use the deprecated vibrate method.
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ vibratorService.vibrate(VibrationEffect.createOneShot(
+ 100, VibrationEffect.DEFAULT_AMPLITUDE
+ ))
+ } else {
+ vibratorService.vibrate(100)
+ }
+
+ Snackbar.make(activity_login, String.format(getString(R.string.activity_login_generic_error_template), it.message), Snackbar.LENGTH_LONG).show()
})
}
@@ -100,9 +121,9 @@ class LoginActivity : AppCompatActivity() {
private fun checkPassword(callback: (Boolean)->(Unit), error : (Exception) -> Unit) {
Thread(Runnable {
try {
- login_account_spinner.getSelectedAccount()!!.tryRegister(this, login_username.text.toString(), login_password.text.toString())
+ login_account_spinner.getSelectedAccount().tryRegister(this, login_username.text.toString(), login_password.text.toString())
runOnUiThread { callback(true) }
- } catch (e: SecurityException) {
+ } catch (e: UnAuthorizedException) {
// In case that the authorization
// credentials are wrong
// a security Exception is thrown by the
@@ -128,4 +149,16 @@ class LoginActivity : AppCompatActivity() {
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
}
+
+ /**
+ * Returns the app version name or null if packageManager throws an error
+ */
+ private fun getAppVersion() : String? {
+ return try {
+ val pInfo = packageManager.getPackageInfo(packageName, 0)
+ pInfo.versionName
+ } catch (e: PackageManager.NameNotFoundException) {
+ null
+ }
+ }
}
diff --git a/app/src/main/java/de/nils_beyer/android/Vertretungen/download/DownloadHTML.kt b/app/src/main/java/de/nils_beyer/android/Vertretungen/download/DownloadHTML.kt
index e372d4d..ac581a9 100644
--- a/app/src/main/java/de/nils_beyer/android/Vertretungen/download/DownloadHTML.kt
+++ b/app/src/main/java/de/nils_beyer/android/Vertretungen/download/DownloadHTML.kt
@@ -7,7 +7,9 @@ import java.net.HttpURLConnection
import java.net.URL
import javax.net.ssl.HttpsURLConnection
-@Throws(SecurityException::class, IllegalStateException::class)
+class UnAuthorizedException : Exception()
+
+@Throws(SecurityException::class, IllegalStateException::class, UnAuthorizedException::class)
fun downloadHTMLFileWithCredientials(url : String, username : String, password : String) : String {
// Setup HTTP connection
val urlConnection = URL(url).openConnection() as HttpsURLConnection
@@ -18,7 +20,7 @@ fun downloadHTMLFileWithCredientials(url : String, username : String, password :
// 401 - Unauthorized e.g. wrong credentials
if (httpStatusCode == 401) {
- throw SecurityException("Unauthorized HTTP request")
+ throw UnAuthorizedException()
}
if (httpStatusCode != 200) {
diff --git a/app/src/main/java/de/nils_beyer/android/Vertretungen/download/StudentDownloadService.java b/app/src/main/java/de/nils_beyer/android/Vertretungen/download/StudentDownloadService.java
index 38246f3..470ff4c 100644
--- a/app/src/main/java/de/nils_beyer/android/Vertretungen/download/StudentDownloadService.java
+++ b/app/src/main/java/de/nils_beyer/android/Vertretungen/download/StudentDownloadService.java
@@ -88,7 +88,7 @@ protected void onHandleIntent(Intent intent) {
reply.send(this, DownloadResultCodes.RESULT_SUCCESS.ordinal(), result);
- } catch (SecurityException exc) {
+ } catch (UnAuthorizedException exc) {
// The given username/password are incorrect
StudentAccount.INSTANCE.setLoginValid(getApplicationContext(), false);
Intent data = new Intent();
@@ -124,11 +124,11 @@ private String readMotd(String html) {
}
}
- protected String downloadHTMLFile(String url) throws SecurityException, IllegalStateException {
+ protected String downloadHTMLFile(String url) throws SecurityException, IllegalStateException, UnAuthorizedException {
return downloadHTMLFile(url, StudentAccount.getUserName(getApplicationContext()), StudentAccount.getPassword(getApplicationContext()));
}
- public static String downloadHTMLFile(String url, String username, String password) throws SecurityException, IllegalStateException {
+ public static String downloadHTMLFile(String url, String username, String password) throws SecurityException, IllegalStateException, UnAuthorizedException {
return DownloadHTMLKt.downloadHTMLFileWithCredientials(url, username, password);
}
diff --git a/app/src/main/java/de/nils_beyer/android/Vertretungen/download/TeacherDownloadService.java b/app/src/main/java/de/nils_beyer/android/Vertretungen/download/TeacherDownloadService.java
index f994c20..48db1ef 100644
--- a/app/src/main/java/de/nils_beyer/android/Vertretungen/download/TeacherDownloadService.java
+++ b/app/src/main/java/de/nils_beyer/android/Vertretungen/download/TeacherDownloadService.java
@@ -99,7 +99,7 @@ protected void onHandleIntent(Intent intent) {
VertretungenWidgetProvider.updateWidgetData(this);
reply.send(this, DownloadResultCodes.RESULT_SUCCESS.ordinal(), result);
- } catch (SecurityException exc) {
+ } catch (UnAuthorizedException exc) {
// The given username/password are incorrect
StudentAccount.INSTANCE.setLoginValid(getApplicationContext(), false);
Intent data = new Intent();
@@ -120,7 +120,7 @@ protected String downloadHTMLFile(String url) throws Exception {
return downloadHTMLFile(url, TeacherAccount.getUserName(getApplicationContext()), TeacherAccount.getPassword(getApplicationContext()));
}
- public static String downloadHTMLFile(String url, String username, String password) throws IllegalStateException, SecurityException {
+ public static String downloadHTMLFile(String url, String username, String password) throws IllegalStateException, SecurityException, UnAuthorizedException {
return DownloadHTMLKt.downloadHTMLFileWithCredientials(url, username, password);
}
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 8b1b984..e7d6a07 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -101,10 +101,19 @@
+ android:layout_alignParentBottom="true"
+ android:text="@string/login_info"
+ android:textStyle="italic" />
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5a47682..2559a3e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -29,7 +29,8 @@
Keine Daten heruntergeladen
- Verbindungsfehler \nBitte überprüfen Sie Ihre Internetverbindung
+ Etwas ist fehlgeschlagen.\n%s
+ Etwas ist fehlgeschlagen. Prüfen Sie Ihre Internetverbindung oder versuchen Sie sich erneut anzumelden.
Anmeldedaten fehlerhaft.
Neu anmelden
Daten erfolgreich heruntergeladen