diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java index 022b180c5..4813188a3 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java @@ -105,7 +105,9 @@ public void onFinish() { adapter.checkForUpdates(db.getNotes()); } }); - db.getNoteServerSyncHelper().downloadNotes(); + if (!PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean(SettingsActivity.SETTINGS_FIRST_RUN, true)) { + db.getNoteServerSyncHelper().downloadNotes(); + } super.onResume(); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SettingsActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SettingsActivity.java index 702eb395a..953d064f7 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SettingsActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SettingsActivity.java @@ -20,6 +20,7 @@ import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.util.NotesClientUtil; +import it.niedermann.owncloud.notes.util.NotesClientUtil.LoginStatus; /** * Allows to set Settings like URL, Username and Password for Server-Synchronization @@ -194,7 +195,7 @@ protected void onPostExecute(Boolean o) { /** * If Log-In-Credentials are correct, save Credentials to Shared Preferences and finish First Run Wizard. */ - private class LoginValidatorAsyncTask extends AsyncTask { + private class LoginValidatorAsyncTask extends AsyncTask { String url, username, password; @Override @@ -208,7 +209,7 @@ protected void onPreExecute() { * @return isValidLogin Boolean */ @Override - protected Boolean doInBackground(String... params) { + protected LoginStatus doInBackground(String... params) { url = params[0]; username = params[1]; password = params[2]; @@ -216,8 +217,8 @@ protected Boolean doInBackground(String... params) { } @Override - protected void onPostExecute(Boolean isValidLogin) { - if (isValidLogin) { + protected void onPostExecute(LoginStatus status) { + if (LoginStatus.OK.equals(status)) { SharedPreferences.Editor editor = preferences.edit(); editor.putString(SETTINGS_URL, url); editor.putString(SETTINGS_USERNAME, username); @@ -238,7 +239,7 @@ protected void onPostExecute(Boolean isValidLogin) { Log.e("Note", "invalid login"); btn_submit.setText(R.string.settings_submit); setInputsEnabled(true); - Toast.makeText(getApplicationContext(), getString(R.string.error_invalid_login), Toast.LENGTH_LONG).show(); + Toast.makeText(getApplicationContext(), getString(R.string.error_invalid_login, getString(status.str)), Toast.LENGTH_LONG).show(); } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java index 019ed6e4f..f82db47ab 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java @@ -1,6 +1,7 @@ package it.niedermann.owncloud.notes.persistence; import android.app.Activity; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.AsyncTask; @@ -8,6 +9,7 @@ import android.os.Message; import android.preference.PreferenceManager; import android.view.View; +import android.widget.Toast; import org.json.JSONException; @@ -15,11 +17,13 @@ import java.util.ArrayList; import java.util.List; +import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.activity.SettingsActivity; import it.niedermann.owncloud.notes.model.DBStatus; import it.niedermann.owncloud.notes.model.Note; import it.niedermann.owncloud.notes.util.ICallback; import it.niedermann.owncloud.notes.util.NotesClient; +import it.niedermann.owncloud.notes.util.NotesClientUtil.LoginStatus; /** * Helps to synchronize the Database to the Server. @@ -205,7 +209,7 @@ protected void onPostExecute(Void aVoid) { } private class DownloadNotesTask extends AsyncTask> { - private boolean serverError = false; + private LoginStatus status = null; @Override protected List doInBackground(Object... params) { @@ -213,9 +217,12 @@ protected List doInBackground(Object... params) { List notes = new ArrayList<>(); try { notes = client.getNotes(); - } catch (IOException | JSONException e) { - serverError = true; + status = LoginStatus.OK; + } catch (IOException e) { e.printStackTrace(); + status = LoginStatus.CONNECTION_FAILED; + } catch (JSONException e) { + status = LoginStatus.JSON_FAILED; } return notes; } @@ -223,8 +230,11 @@ protected List doInBackground(Object... params) { @Override protected void onPostExecute(List result) { // Clear Database only if there was no Server Error - if (!serverError) { + if (status==LoginStatus.OK) { db.clearDatabase(); + } else { + Context c = db.getContext(); + Toast.makeText(c, c.getString(R.string.error_sync, c.getString(status.str)), Toast.LENGTH_LONG).show(); } for (Note note : result) { db.addNote(note); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/util/NotesClientUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/util/NotesClientUtil.java index b52a51835..16801f7c2 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/util/NotesClientUtil.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/util/NotesClientUtil.java @@ -2,6 +2,7 @@ import android.util.Base64; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -12,12 +13,27 @@ import java.net.MalformedURLException; import java.net.URL; +import it.niedermann.owncloud.notes.R; + /** * Utils for Validation etc * Created by stefan on 25.09.15. */ public class NotesClientUtil { + public enum LoginStatus { + OK(0), + AUTH_FAILED(R.string.error_username_password_invalid), + CONNECTION_FAILED(R.string.error_io), + JSON_FAILED(R.string.error_json), + SERVER_FAILED(R.string.error_server); + + public final int str; + LoginStatus(int str) { + this.str = str; + } + } + /** * Checks if the given url String starts with http:// or https:// * @@ -34,7 +50,7 @@ public static boolean isHttp(String url) { * @param password String * @return Username and Password are a valid Login-Combination for the given URL. */ - public static boolean isValidLogin(String url, String username, String password) { + public static LoginStatus isValidLogin(String url, String username, String password) { try { String targetURL = url + "index.php/apps/notes/api/v0.2/notes"; HttpURLConnection con = (HttpURLConnection) new URL(targetURL) @@ -48,14 +64,27 @@ public static boolean isValidLogin(String url, String username, String password) con.setConnectTimeout(10 * 1000); // 10 seconds con.connect(); if (con.getResponseCode() == 200) { - return true; + StringBuilder result = new StringBuilder(); + BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream())); + String line; + while ((line = rd.readLine()) != null) { + result.append(line); + } + System.out.println(result.toString()); + new JSONArray(result.toString()); + return LoginStatus.OK; + } else if (con.getResponseCode() >= 401 && con.getResponseCode() <= 403) { + return LoginStatus.AUTH_FAILED; + } else { + return LoginStatus.SERVER_FAILED; } - } catch (MalformedURLException e1) { - return false; + } catch (MalformedURLException e) { + return LoginStatus.CONNECTION_FAILED; } catch (IOException e) { - return false; + return LoginStatus.CONNECTION_FAILED; + } catch (JSONException e) { + return LoginStatus.JSON_FAILED; } - return false; } /** @@ -65,7 +94,7 @@ public static boolean isValidLogin(String url, String username, String password) * @return true if there is a installed instance, false if not */ public static boolean isValidURL(String url) { - StringBuffer result = new StringBuffer(); + StringBuilder result = new StringBuilder(); try { HttpURLConnection con = (HttpURLConnection) new URL(url + "status.php") .openConnection(); diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 8f3123fbe..a936fb8e2 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -45,9 +45,11 @@ Kein Netzwerk verfügbar - JSON-Fehler - IO-Fehler - Login fehlgeschlagen + Synchronisation fehlgeschlagen: %1$s + Login fehlgeschlagen: %1$s + ist die Server-App ownCloud Notes aktiviert? + Server-Verbindung nicht möglich + URL/Server fehlerhaft URL nicht korrekt Benutzername / Passwort nicht korrekt diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 1fc657a2e..3c4c91b9a 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -47,7 +47,7 @@ Erreur de JSON Erreur d\'E/S - Détails de connexion incorrects + Détails de connexion incorrects: %1$s Adresse du serveur incorrecte Identifiant ou mot de passe incorrect diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 90dfd626c..ed34806bc 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -47,7 +47,7 @@ Сеть недоступна - Неверный логин + Неверный логин: %1$s Ошибка ввода/вывода Ошибка JSON Неверный адрес @@ -85,4 +85,4 @@ Все заметки Одна заметка - \ No newline at end of file + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ecdee1abe..26a8684ac 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,9 +45,11 @@ No network available - JSON error - IO error - Invalid login + Synchronization failed: %1$s + Invalid login: %1$s + is the owncloud Notes app activated on the server? + server connection is broken + URL/Server has errors Wrong server address Wrong username or password