From 2ec49072d3f6b1b7855f64f2e7f91ab7352dc958 Mon Sep 17 00:00:00 2001 From: massimiliano Date: Sun, 9 Dec 2018 18:42:42 +0100 Subject: [PATCH] Splitted State activity in 2 + Fixed app crashing issue when opening Pix-Art messenger --- app/src/main/AndroidManifest.xml | 16 +- .../disroot/disrootapp/ui/MainActivity.java | 1 + .../disroot/disrootapp/ui/StateActivity.java | 113 +++----- .../disrootapp/ui/StateMessagesActivity.java | 272 ++++++++++++++++++ app/src/main/res/layout/activity_state.xml | 30 ++ .../res/layout/activity_state_messages.xml | 66 +++++ app/src/main/res/values-es/strings.xml | 3 + app/src/main/res/values-fr/strings.xml | 3 + app/src/main/res/values-it/strings.xml | 7 +- app/src/main/res/values-nl/strings.xml | 7 +- app/src/main/res/values-pt/strings.xml | 3 + app/src/main/res/values-sr/strings.xml | 3 + app/src/main/res/values/strings.xml | 8 +- app/src/main/res/xml/changelog_master.xml | 2 + 14 files changed, 451 insertions(+), 83 deletions(-) create mode 100644 app/src/main/java/org/disroot/disrootapp/ui/StateMessagesActivity.java create mode 100644 app/src/main/res/layout/activity_state_messages.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 43c2277..76f6ec1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,14 @@ android:label="@string/title_activity_about" android:theme="@style/DisTheme" /> + + - - \ 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 27e914d..c933a7b 100644 --- a/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java +++ b/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java @@ -287,6 +287,7 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL /* if((xmpp1 == null)&&(xmpp2 != null)) { */ if((xmpp1 == null)&&(xmpp2 != null)) {//if(xmpp1 == null) { startActivity(xmpp2); + return; } //need to change to give user choise || check.getBoolean("checkPix",false) if((xmpp1 != null)&&(xmpp2 != null)) { diff --git a/app/src/main/java/org/disroot/disrootapp/ui/StateActivity.java b/app/src/main/java/org/disroot/disrootapp/ui/StateActivity.java index 087fc8a..e25b0be 100644 --- a/app/src/main/java/org/disroot/disrootapp/ui/StateActivity.java +++ b/app/src/main/java/org/disroot/disrootapp/ui/StateActivity.java @@ -2,14 +2,18 @@ package org.disroot.disrootapp.ui; import android.annotation.SuppressLint; import android.app.ProgressDialog; +import android.content.Intent; import android.graphics.Color; 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.Menu; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; @@ -27,7 +31,9 @@ import java.util.HashMap; public class StateActivity extends AppCompatActivity { - private String TAG = MainActivity.class.getSimpleName(); + Button button; + + private String TAG = StateActivity.class.getSimpleName(); private ProgressDialog pDialog; private ListView lv; @@ -35,7 +41,6 @@ public class StateActivity extends AppCompatActivity { // 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"; - static String incidenturl0 ="https://state.disroot.org/api/v1/incidents?sort=id&order=desc"; ArrayList> stateList; @@ -54,6 +59,16 @@ public class StateActivity extends AppCompatActivity { } }); + + button = findViewById(R.id.StateMessageBtn);//StateMessageBtn + button.setOnClickListener(new View.OnClickListener() { + public void onClick(View arg0) { + Intent goState = new Intent(StateActivity.this, StateMessagesActivity.class); + StateActivity.this.startActivity(goState); + } + + }); + stateList = new ArrayList<>(); lv = findViewById(R.id.list); @@ -61,6 +76,32 @@ public class StateActivity extends AppCompatActivity { new GetList().execute(); } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_about, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + + //noinspection SimplifiableIfStatement + if (id == R.id.action_home) { + Intent goHome = new Intent(StateActivity.this, MainActivity.class); + StateActivity.this.startActivity(goHome); + return true; + } + + return super.onOptionsItemSelected(item); + } + /** * Async task class to get json by making HTTP call */ @@ -84,7 +125,6 @@ public class StateActivity extends AppCompatActivity { // Making a request to url and getting response String jsonStr0 = sh.makeServiceCall(url); String jsonStr1 = sh.makeServiceCall(url1); - String jsonStrincidents0 = sh.makeServiceCall(incidenturl0); Log.e(TAG, "Response from url: " + jsonStr0); @@ -174,51 +214,6 @@ public class StateActivity extends AppCompatActivity { } }); } - } if (jsonStrincidents0 != null) {//Incidaetnts page - try { - JSONObject jsonObj = new JSONObject(jsonStrincidents0); - - // 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 message = c.getString("message"); - String scheduled_at = c.getString("scheduled_at"); - String updated_at = c.getString("updated_at"); - String lastUpdated = "Last Updated: " + updated_at; - String human_status = c.getString("human_status"); - - // 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("message", message); - service.put("scheduled_at", scheduled_at); - service.put("updated_at", lastUpdated); - service.put("human_status", human_status); - - // 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() { @@ -244,9 +239,9 @@ public class StateActivity extends AppCompatActivity { //Updating parsed JSON data into ListView ListAdapter adapter = new SimpleAdapter( StateActivity.this, stateList, - R.layout.list_item, new String[]{"name","message", "description", "updated_at", "scheduled_at", - "status_name", "human_status"}, new int[]{R.id.name, R.id.message, - R.id.description,R.id.updated_at, R.id.scheduled_at, R.id.status_name, R.id.human_status}) + 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}) //Change Color based on Status { @@ -305,22 +300,6 @@ public class StateActivity extends AppCompatActivity { status.setText(R.string.PerformanceIssues); status.setTextColor(Color.YELLOW); break; - }//Human_status - TextView humanStatus = v.findViewById(R.id.human_status); - String humanStatusValue = humanStatus.getText().toString(); - switch (humanStatusValue) { - case "Fixed": - case "Scheduled": - humanStatus.setTextColor(Color.GREEN); - break; - case "Investigating": - case "Watching": - humanStatus.setTextColor(Color.YELLOW); - - break; - case "Identified": - humanStatus.setTextColor(Color.RED); - break; } return v; } diff --git a/app/src/main/java/org/disroot/disrootapp/ui/StateMessagesActivity.java b/app/src/main/java/org/disroot/disrootapp/ui/StateMessagesActivity.java new file mode 100644 index 0000000..9ddfae7 --- /dev/null +++ b/app/src/main/java/org/disroot/disrootapp/ui/StateMessagesActivity.java @@ -0,0 +1,272 @@ +package org.disroot.disrootapp.ui; + +import android.annotation.SuppressLint; +import android.app.ProgressDialog; +import android.content.Intent; +import android.graphics.Color; +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.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.SimpleAdapter; +import android.widget.TextView; +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 StateMessagesActivity extends AppCompatActivity { + + Button button; + private String TAG = StateMessagesActivity.class.getSimpleName(); + + private ProgressDialog pDialog; + private ListView lv; + + // URL to get data JSON + static String incidenturl0 ="https://state.disroot.org/api/v1/incidents?sort=id&order=desc"; + + ArrayList> messageList; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_state_messages); + + 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(); + } + }); + + + button = findViewById(R.id.StateBtn);//StateBtn + button.setOnClickListener(new View.OnClickListener() { + public void onClick(View arg0) { + Intent goState = new Intent(StateMessagesActivity.this, StateActivity.class); + StateMessagesActivity.this.startActivity(goState); + } + + }); + + messageList = new ArrayList<>(); + + lv = findViewById(R.id.list); + + new GetList().execute(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + // Inflate the menu; this adds items to the action bar if it is present. + getMenuInflater().inflate(R.menu.menu_about, menu); + return true; + } + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + // Handle action bar item clicks here. The action bar will + // automatically handle clicks on the Home/Up button, so long + // as you specify a parent activity in AndroidManifest.xml. + int id = item.getItemId(); + + + //noinspection SimplifiableIfStatement + if (id == R.id.action_home) { + Intent goHome = new Intent(StateMessagesActivity.this, MainActivity.class); + StateMessagesActivity.this.startActivity(goHome); + return true; + } + + return super.onOptionsItemSelected(item); + } + + /** + * 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(StateMessagesActivity.this); + pDialog.setMessage("Loading…"); + pDialog.setCancelable(false); + pDialog.show(); + } + + @Override + protected Void doInBackground(Void... arg0) { + HttpHandler sh = new HttpHandler(); + + // Making a request to url and getting response + String jsonStrincidents0 = sh.makeServiceCall(incidenturl0); + + Log.e(TAG, "Response from url: " + incidenturl0); + + if (jsonStrincidents0 != null) {//Incidaetnts page + try { + JSONObject jsonObj = new JSONObject(jsonStrincidents0); + + // 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 message = c.getString("message"); + String scheduled_at = c.getString("scheduled_at"); + String scheduledAt = "Scheduled at: " + scheduled_at; + String updated_at = c.getString("updated_at"); + String lastUpdated = "Last Updated: " + updated_at; + String human_status = c.getString("human_status"); + + // 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("message", message); + service.put("scheduled_at", scheduledAt); + service.put("updated_at", lastUpdated); + service.put("human_status", human_status); + + // adding service to service list + messageList.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( + StateMessagesActivity.this, messageList, + R.layout.list_item, new String[]{"name","message", "updated_at", "scheduled_at", "human_status"}, new int[]{R.id.name, R.id.message, + R.id.updated_at, R.id.scheduled_at, R.id.human_status}) + + //Change Color based on Status + { + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View v = super.getView(position, convertView, parent); + //Name Email + TextView nameMail = v.findViewById(R.id.name); + String nameMailValue = nameMail.getText().toString(); + switch (nameMailValue) { + case "Email Service": + nameMail.setText(R.string.EmailService); + break; + default: + break; + } + //Name WebMail + TextView nameWebmail = v.findViewById(R.id.name); + String nameWebmailValue = nameWebmail.getText().toString(); + switch (nameWebmailValue) { + case "WebMail Service": + nameWebmail.setText(R.string.WebmailService); + break; + default: + break; + } + //Name Cloud + TextView nameCloud = v.findViewById(R.id.name); + String nameCloudValue = nameCloud.getText().toString(); + switch (nameCloudValue) { + case "WebMail Service": + nameCloud.setText(R.string.Cloud); + break; + default: + break; + } + //Make Last updated translatable + TextView updated = v.findViewById(R.id.updated_at); + String updatedValue = updated.getText().toString(); + if (updatedValue.startsWith("Last Updated: ")){ + updated.setText(updatedValue.replace("Last Updated: ",getText(R.string.LastUpdated))); + } + //Make Scheduled at translatable + TextView scheduled = v.findViewById(R.id.scheduled_at); + String scheduledValue = scheduled.getText().toString(); + if (scheduledValue.startsWith("Scheduled at: ")){ + scheduled.setText(scheduledValue.replace("Scheduled at: ",getText(R.string.ScheduledAt))); + } + //Human_status + TextView humanStatus = v.findViewById(R.id.human_status); + String humanStatusValue = humanStatus.getText().toString(); + switch (humanStatusValue) { + case "Fixed": + case "Scheduled": + humanStatus.setTextColor(Color.GREEN); + break; + case "Investigating": + case "Watching": + humanStatus.setTextColor(Color.YELLOW); + + break; + case "Identified": + humanStatus.setTextColor(Color.RED); + break; + } + return v; + } + }; + lv.setAdapter(adapter); + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_state.xml b/app/src/main/res/layout/activity_state.xml index 8521c90..9725ad5 100644 --- a/app/src/main/res/layout/activity_state.xml +++ b/app/src/main/res/layout/activity_state.xml @@ -26,6 +26,36 @@ + +