From 33356660c0bd712a02ee7fd05ba77dcf871b0027 Mon Sep 17 00:00:00 2001 From: massimiliano Date: Sun, 25 Nov 2018 11:54:36 +0100 Subject: [PATCH] State page using api's instead of webview --- .idea/caches/build_file_checksums.ser | Bin 534 -> 534 bytes app/build.gradle | 4 + app/src/main/AndroidManifest.xml | 32 +-- .../disroot/disrootapp/ui/MainActivity.java | 8 +- .../disroot/disrootapp/ui/StateActivity.java | 203 ++++++++++++++++++ .../disroot/disrootapp/utils/HttpHandler.java | 66 ++++++ app/src/main/res/layout/activity_state.xml | 35 +++ app/src/main/res/layout/list_item.xml | 38 ++++ app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-nl/strings.xml | 1 + app/src/main/res/values-pt/strings.xml | 1 + app/src/main/res/values-sr/strings.xml | 1 + app/src/main/res/values/strings.xml | 4 +- app/src/main/res/values/styles.xml | 12 +- 16 files changed, 384 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/org/disroot/disrootapp/ui/StateActivity.java create mode 100644 app/src/main/java/org/disroot/disrootapp/utils/HttpHandler.java create mode 100644 app/src/main/res/layout/activity_state.xml create mode 100644 app/src/main/res/layout/list_item.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 4eeba38c66b08b55b0ce8de5ffd3305e2242821a..c83edae13c0e9cb50e4622f8bd7551f9d70d30be 100644 GIT binary patch delta 33 rcmV++0N($W1eOGlm;_20+o7?XX#o+9 diff --git a/app/build.gradle b/app/build.gradle index ee2693a..a9b8807 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -44,3 +44,7 @@ dependencies { repositories { mavenCentral() } + +dependencies { + implementation 'com.android.support.constraint:constraint-layout:+' +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f7fa6ce..d15645f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,20 +4,19 @@ - - - + + + android:theme="@style/DisTheme"> @@ -27,7 +26,7 @@ @@ -43,23 +42,24 @@ - - - + + android:label="@string/title_activity_tap" + android:screenOrientation="portrait"> + - - + \ No newline at end of file diff --git a/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java b/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java index 1ef56f7..27e914d 100644 --- a/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java +++ b/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java @@ -518,6 +518,7 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL }); button.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { + Intent goState = new Intent(MainActivity.this, StateActivity.class); //first time tap check if (firstStart.getBoolean("firsttap", true)){ showFirstTap(); @@ -525,9 +526,10 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL return; } else - webView.loadUrl(Constants.URL_DisApp_STATE); - webView.setVisibility(View.VISIBLE); - dashboard.setVisibility(View.GONE); + MainActivity.this.startActivity(goState); + //webView.loadUrl(Constants.URL_DisApp_STATE); + //webView.setVisibility(View.VISIBLE); + //dashboard.setVisibility(View.GONE); } }); diff --git a/app/src/main/java/org/disroot/disrootapp/ui/StateActivity.java b/app/src/main/java/org/disroot/disrootapp/ui/StateActivity.java new file mode 100644 index 0000000..2289324 --- /dev/null +++ b/app/src/main/java/org/disroot/disrootapp/ui/StateActivity.java @@ -0,0 +1,203 @@ +package org.disroot.disrootapp.ui; + +import android.annotation.SuppressLint; +import android.app.ProgressDialog; +import android.os.AsyncTask; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.View; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.SimpleAdapter; +import android.widget.Toast; + +import org.disroot.disrootapp.R; +import org.disroot.disrootapp.utils.HttpHandler; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; + +public class StateActivity extends AppCompatActivity { + + private String TAG = MainActivity.class.getSimpleName(); + + private ProgressDialog pDialog; + private ListView lv; + + // URL to get data JSON + static String url = "https://state.disroot.org/api/v1/components"; + static String url1 = "https://state.disroot.org/api/v1/components?page=2"; + + ArrayList> stateList; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_state); + + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + toolbar.setNavigationIcon(R.drawable.ic_arrow_back); + toolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onBackPressed(); + } + }); + + stateList = new ArrayList<>(); + + lv = findViewById(R.id.list); + + new GetList().execute(); + } + + /** + * Async task class to get json by making HTTP call + */ + @SuppressLint("StaticFieldLeak") + class GetList extends AsyncTask { + + @Override + protected void onPreExecute() { + super.onPreExecute(); + // Showing progress dialog + pDialog = new ProgressDialog(StateActivity.this); + pDialog.setMessage("Please wait..."); + pDialog.setCancelable(false); + pDialog.show(); + } + + @Override + protected Void doInBackground(Void... arg0) { + HttpHandler sh = new HttpHandler(); + + // Making a request to url and getting response + String jsonStr0 = sh.makeServiceCall(url); + String jsonStr1 = sh.makeServiceCall(url1); + + Log.e(TAG, "Response from url: " + jsonStr0); + + if (jsonStr0 != null) { + try { + JSONObject jsonObj = new JSONObject(jsonStr0); + + // Getting JSON Array node + JSONArray data = jsonObj.getJSONArray("data"); + + // looping through All data + for (int i = 0; i < data.length(); i++) { + JSONObject c = data.getJSONObject(i); + + String id = c.getString("id"); + String name = c.getString("name"); + String description = c.getString("description"); + String updated_at = c.getString("updated_at"); + String status_name = c.getString("status_name"); + + // tmp hash map for single service + HashMap service = new HashMap<>(); + + // adding each child node to HashMap key => value + service.put("id", id); + service.put("name", name); + service.put("description", description); + service.put("updated_at", updated_at); + service.put("status_name", status_name); + + // adding service to service list + stateList.add(service); + } + } catch (final JSONException e) { + Log.e(TAG, "Json parsing error: " + e.getMessage()); + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(getApplicationContext(), + "Json parsing error: " + e.getMessage(), + Toast.LENGTH_LONG) + .show(); + } + }); + } + }if (jsonStr1 != null) {//next page + try { + JSONObject jsonObj = new JSONObject(jsonStr1); + + // Getting JSON Array node + JSONArray data = jsonObj.getJSONArray("data"); + + // looping through All data + for (int i = 0; i < data.length(); i++) { + JSONObject c = data.getJSONObject(i); + + String id = c.getString("id"); + String name = c.getString("name"); + String description = c.getString("description"); + String updated_at = c.getString("updated_at"); + String status_name = c.getString("status_name"); + + // tmp hash map for single service + HashMap service = new HashMap<>(); + + // adding each child node to HashMap key => value + service.put("id", id); + service.put("name", name); + service.put("description", description); + service.put("updated_at", updated_at); + service.put("status_name", status_name); + + // adding service to service list + stateList.add(service); + } + } catch (final JSONException e) { + Log.e(TAG, "Json parsing error: " + e.getMessage()); + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(getApplicationContext(), + "Json parsing error: " + e.getMessage(), + Toast.LENGTH_LONG) + .show(); + } + }); + } + } else { + Log.e(TAG, "Couldn't get json from server."); + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(getApplicationContext(), + "Couldn't get json from server. Check LogCat for possible errors!", + Toast.LENGTH_LONG) + .show(); + } + }); + } + return null; + } + + @Override + protected void onPostExecute(Void result) { + super.onPostExecute(result); + // Dismiss the progress dialog + if (pDialog.isShowing()) + pDialog.dismiss(); + + + //Updating parsed JSON data into ListView + + ListAdapter adapter = new SimpleAdapter( + StateActivity.this, stateList, + R.layout.list_item, new String[]{"name", "description", "updated_at", + "status_name"}, new int[]{R.id.name, + R.id.description,R.id.updated_at, R.id.status_name}); + lv.setAdapter(adapter); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/disroot/disrootapp/utils/HttpHandler.java b/app/src/main/java/org/disroot/disrootapp/utils/HttpHandler.java new file mode 100644 index 0000000..b8ffdbd --- /dev/null +++ b/app/src/main/java/org/disroot/disrootapp/utils/HttpHandler.java @@ -0,0 +1,66 @@ +package org.disroot.disrootapp.utils; +import android.util.Log; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.ProtocolException; +import java.net.URL; + +/** + * Created by Ravi Tamada on 01/09/16. + * www.androidhive.info + */ +public class HttpHandler { + + private static final String TAG = HttpHandler.class.getSimpleName(); + + public HttpHandler() { + } + + public String makeServiceCall(String reqUrl) { + String response = null; + try { + URL url = new URL(reqUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + // read the response + InputStream in = new BufferedInputStream(conn.getInputStream()); + response = convertStreamToString(in); + } catch (MalformedURLException e) { + Log.e(TAG, "MalformedURLException: " + e.getMessage()); + } catch (ProtocolException e) { + Log.e(TAG, "ProtocolException: " + e.getMessage()); + } catch (IOException e) { + Log.e(TAG, "IOException: " + e.getMessage()); + } catch (Exception e) { + Log.e(TAG, "Exception: " + e.getMessage()); + } + return response; + } + + private String convertStreamToString(InputStream is) { + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + StringBuilder sb = new StringBuilder(); + + String line; + try { + while ((line = reader.readLine()) != null) { + sb.append(line).append('\n'); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return sb.toString(); + } +} diff --git a/app/src/main/res/layout/activity_state.xml b/app/src/main/res/layout/activity_state.xml new file mode 100644 index 0000000..f08a549 --- /dev/null +++ b/app/src/main/res/layout/activity_state.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/list_item.xml b/app/src/main/res/layout/list_item.xml new file mode 100644 index 0000000..31c1078 --- /dev/null +++ b/app/src/main/res/layout/list_item.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 561ed82..4b8167d 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -135,5 +135,6 @@ Para continuar, primero necesitas instalar K9-Mail.\nPor favor, selecciona Instalar para continuar desde F-Droid. Para continuar, primero necesitas instalar la app de Nextcloud.\nPor favor, selecciona Instalar para continuar desde F-Droid. Para continuar, primero necesitas instalar Conversations.\nPor favor, selecciona Instalar para continuar desde F-Droid. + Disroot state diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6ed74d7..4f1a5b6 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -164,5 +164,6 @@ Pour continuer, vous devez d\'abord installer K9-Mail.\nVeuillez sélectionner Installer pour continuer l\'installation avec F-Droid. Pour continuer, vous devez d\'abord installer l\'application Nextcloud.\nVeuillez sélectionner Installer pour continuer l\'installation avec F-Droid. Pour continuer, vous devez d\'abord installer Conversations.\nVeuillez sélectionner Installer pour continuer l\'installation avec F-Droid. + Disroot state diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 85cec92..d786ea6 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -134,5 +134,6 @@ Per continuare è necessario installare K9-Mail.\nSelezionate installa per continuare con l\'installazione su F-Droid. Per continuare è necessario installare la app di Nextcloud.\nSelezionate installa per continuare con l\'installazione su F-Droid. Per continuare è necessario installare Conversations.\nSelezionate installa per continuare con l\'installazione su F-Droid. + Disroot state diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 254bb80..23e36a9 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -135,5 +135,6 @@ Om verder te gaan moet u eerst K9-Mail installeren.\nSelecteer Installeren om verder te gaan met de installatie op F-Droid. Om verder te gaan moet u eerst Nextcloud app installeren.\nSelecteer Installeren om verder te gaan met de installatie op F-Droid. Om verder te gaan moet u eerst Conversations installeren.\nSelecteer Installeren om verder te gaan met de installatie op F-Droid. + Disroot state diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 2e85bf3..6636e99 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -134,5 +134,6 @@ To continue you need to install K9-Mail first.\nPlease select install to continue with the installatin on F-Droid. To continue you need to install the Nextcloud app first.\nPlease select install to continue with the installatin on F-Droid. To continue you need to install Conversations first.\nPlease select install to continue with the installatin on F-Droid. + Disroot state diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 8e39f3a..6703ec5 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -135,5 +135,6 @@ To continue you need to install K9-Mail first.\nPlease select install to continue with the installatin on F-Droid. To continue you need to install the Nextcloud app first.\nPlease select install to continue with the installatin on F-Droid. To continue you need to install Conversations first.\nPlease select install to continue with the installatin on F-Droid. + Disroot state diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3f4cb0d..64c41e4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,7 +44,7 @@ License GNU LGPLv3.0 License - Copyright © 2007 Free Software Foundation, Inc.\n + Copyright © 2007 Free Software Foundation, Inc.\n This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, version 3 of the License only.\n\n This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. @@ -134,5 +134,7 @@ To continue you need to install K9-Mail first.\nPlease select install to continue with the installatin on F-Droid. To continue you need to install the Nextcloud app first.\nPlease select install to continue with the installatin on F-Droid. To continue you need to install Conversations first.\nPlease select install to continue with the installatin on F-Droid. + StateActivity + Disroot state diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 64e14c0..91fa2b0 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -14,19 +14,23 @@ + + @style/CardView +