Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.istroweil.ichfahrcar;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.graphics.drawable.BitmapDrawable;
- import android.graphics.drawable.Drawable;
- import android.os.Build;
- import android.support.annotation.RequiresApi;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ArrayAdapter;
- import android.widget.ImageView;
- import android.widget.Space;
- import android.widget.TextView;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- /**
- * Created by kivaari on 27.12.2016.
- */
- public class POIListAdapter extends ArrayAdapter<JSONObject> implements AsyncResponse{
- //TODO change this to HashMap, give Map to downloader task and access them from here, store position in json
- Map<Integer, Bitmap> bmpContainer;
- public POIListAdapter(Context context, ArrayList<JSONObject> pois){
- super(context, 0, pois);
- bmpContainer = new HashMap<>();
- }
- //TODO make it like this:http://stackoverflow.com/questions/14188685/android-onclick-event-on-custom-listview-adapter-not-working
- @RequiresApi(api = Build.VERSION_CODES.M)
- @Override
- public View getView(int position, View convertView, ViewGroup parent){
- JSONObject jsonItem = getItem(position);
- String name = "";
- String type = "";
- String address = "";
- String distance = "";
- Boolean selected = false;
- Boolean visible = false;
- try {
- selected = jsonItem.getBoolean("selected");
- visible = jsonItem.getBoolean("visible");
- name = jsonItem.getString("name");
- type = jsonItem.getString("type");
- address = jsonItem.getString("address");
- } catch (JSONException e) {
- e.printStackTrace();
- }
- Bitmap bmp = null;
- Drawable icon = null;
- View test = new Space(getContext()); //dummy to test for class equivalence
- if(visible){
- if((convertView == null) || (convertView.getClass() == test.getClass()))
- convertView = LayoutInflater.from(getContext()).inflate(R.layout.component_poi, parent, false);
- }
- if(!visible) {
- convertView = new Space(getContext());
- return convertView;
- }
- TextView tvName = (TextView) convertView.findViewById(R.id.tvName);
- TextView tvAddress = (TextView) convertView.findViewById(R.id.tvAddress);
- TextView tvDistance = (TextView) convertView.findViewById(R.id.tvDistance);
- ImageView ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon);
- if(selected)
- convertView.setBackgroundColor(getContext().getResources().getColor(R.color.colorLvSelected, null));
- else
- convertView.setBackgroundColor(getContext().getResources().getColor(R.color.colorLvUnselected, null));
- try {
- distance = calculateDistance(jsonItem.getDouble("lat"), jsonItem.getDouble("lon"));
- } catch (JSONException e) {
- e.printStackTrace();
- }
- if(jsonItem.toString().contains("icon")){ //check if there is an icon link present
- if(jsonItem.toString().contains("bmp") == false){ //download bitmap if it is not set yet
- try {
- File file = new File(getContext().getFilesDir(), jsonItem.getString("icon"));
- if(!file.exists()) {
- DownloadImageTask task = (DownloadImageTask) new DownloadImageTask(ivIcon, getContext(), position)
- .execute("https://www.fbi.h-da.de/fileadmin/personal/h.wiedling/daten/"
- + jsonItem.getString("icon"));
- task.delegate = this;
- }
- else{
- try {
- BitmapFactory.Options options = new BitmapFactory.Options();
- options.inPreferredConfig = Bitmap.Config.ARGB_8888;
- Bitmap bmp_file = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
- ivIcon.setImageBitmap(bmp_file);
- bmpContainer.put(position, (Bitmap) bmp_file);
- try {
- jsonItem.put("bmp", position);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- else{ //set ivIcon image if bitmap has already been saved
- try {
- //ISSUE this will cause bugs if bmps get removed or moved around, never redownload icons without clearing list
- bmp = bmpContainer.get(jsonItem.getInt("bmp"));
- } catch (JSONException e) {
- e.printStackTrace();
- }
- Drawable drawable = new BitmapDrawable(getContext().getResources(), bmp);
- ivIcon.setImageDrawable(drawable);
- }
- }
- else{
- switch (type) {
- case "fuel":
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- icon = getContext().getDrawable(R.drawable.fuel_poi);
- } else {
- icon = getContext().getResources().getDrawable(R.drawable.fuel_poi);
- }
- break;
- case "amenity":
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- icon = getContext().getDrawable(R.drawable.amenity);
- } else {
- icon = getContext().getResources().getDrawable(R.drawable.amenity);
- }
- break;
- case "pub":
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
- icon = getContext().getDrawable(R.drawable.pub);
- } else {
- icon = getContext().getResources().getDrawable(R.drawable.pub);
- }
- break;
- }
- ivIcon.setImageDrawable(icon);
- }
- tvAddress.setText(address);
- tvName.setText(name);
- tvDistance.setText(distance);
- return convertView;
- }
- public String calculateDistance(Double lat, Double lon/*, Coordinate start*/){
- //TODO add actual distance calculation
- Double dist = Car.distance(lat, lon, 1);
- if(dist == -1){
- return "";
- }
- String unit = "m";
- String result = Integer.toString(dist.intValue());
- result = result.concat(unit);
- return result;
- }
- @Override
- public void processFinish(Object output, int position, processIDs processID) {
- JSONObject jsonObject = getItem(position);
- Bitmap bmp = (Bitmap) output ;
- FileOutputStream out = null;
- try {
- File file = new File(getContext().getFilesDir(), jsonObject.getString("icon"));
- file.createNewFile();
- out = new FileOutputStream(file);
- bmp.compress(Bitmap.CompressFormat.PNG, 100, out); // bmp is your Bitmap instance
- // PNG is a lossless format, the compression factor (100) is ignored
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- if (out != null) {
- out.close();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- bmpContainer.put(position, (Bitmap) output);
- try {
- jsonObject.put("bmp", position);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void processFinish(Object output, processIDs processID) {
- }
- @Override
- public void processFinish(processIDs processID) {
- //clear selected from adapter once drive is done
- if(processID.equals(processIDs.DRIVEFINISHED)){
- for(int i = 0; i < getCount(); i++){
- try {
- getItem(i).put("selected", false);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- }
- }
- public void filterPOIs(JSONObject newFilter){
- String namef;
- String typef;
- for(int i = 0; i < getCount(); i++){
- try {
- getItem(i).put("visible", false);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- try {
- if (newFilter.toString().contains("namef")) {
- namef = newFilter.getString("namef").toUpperCase();
- Pattern p = Pattern.compile(namef);
- Matcher m;
- for (int i = 0; i < getCount(); i++) {
- String name = getItem(i).getString("name").toUpperCase();
- m = p.matcher(name);
- if(m.find())
- getItem(i).put("visible", true);
- }
- }
- }
- catch(Exception e){
- }
- try {
- if (newFilter.toString().contains("typef")) {
- typef = newFilter.getString("typef").toUpperCase();
- Pattern p = Pattern.compile(typef);
- Matcher m;
- for (int i = 0; i < getCount(); i++) {
- String type = getItem(i).getString("type").toUpperCase();
- m = p.matcher(type);
- if(m.find() || typef.equals("ALL"))
- getItem(i).put("visible", true);
- }
- }
- }
- catch(Exception e){
- }
- try {
- if (newFilter.toString().contains("history")) {
- for(int i = 0; i < getCount(); i++){
- JSONObject jsonObject = getItem(i);
- if(jsonObject.getBoolean("history")){
- jsonObject.put("visible", true);
- }
- else{
- jsonObject.put("visible", false);
- }
- }
- }
- }
- catch(Exception e){
- }
- notifyDataSetChanged();
- }
- public void updateHistory(JSONArray h){
- try {
- for(int i = 0; i < getCount(); i++){
- getItem(i).put("history", false);
- }
- for (int i = 0; i < h.length(); i++) {
- JSONObject jsonHistory = h.getJSONObject(i);
- for(int j = 0; j < getCount(); j++){
- JSONObject jsonAdapter = getItem(j);
- if (jsonHistory.getString("name").equals(jsonAdapter.getString("name")) &&
- jsonHistory.getString("address").equals(jsonAdapter.getString("address"))){
- jsonAdapter.put("history", true);
- }
- }
- }
- }
- catch (Exception e){
- }
- }
- public void makeAllInvisible(){
- for(int i = 0; i < getCount(); i++){
- try {
- getItem(i).put("visible", false);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- }
- public void unselectAll() {
- for(int i = 0; i < getCount(); i++){
- try {
- getItem(i).put("selected", false);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- }
- public void makeAllVisible() {
- for(int i = 0; i < getCount(); i++){
- try {
- getItem(i).put("visible", true);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- }
- public int getSelectedAmount() {
- int x = 0;
- for(int i = 0; i < getCount(); i++){
- try {
- if(getItem(i).getBoolean("selected"))
- x++;
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- return x;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement