package com.integreight.onesheeld.shields.fragments;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ExpandableListView;
import com.integreight.onesheeld.R;
import com.integreight.onesheeld.adapters.InternetRequestsExpandapleAdapter;
import com.integreight.onesheeld.model.InternetResponse;
import com.integreight.onesheeld.model.InternetUiRequest;
import com.integreight.onesheeld.shields.ShieldFragmentParent;
import com.integreight.onesheeld.shields.controller.InternetShield;
import com.integreight.onesheeld.shields.controller.SpeakerShield;
import com.integreight.onesheeld.shields.controller.utils.InternetResponsePopup;
import com.integreight.onesheeld.utils.CrashlyticsUtils;
import com.loopj.android.http.AsyncHttpResponseHandler;
import java.util.ArrayList;
import java.util.Enumeration;
public class InternetFragment extends ShieldFragmentParent<InternetFragment> {
ExpandableListView requestsList;
ArrayList<InternetUiRequest> requests;
InternetResponsePopup popup;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.internet_shield_fragment_layout, container,
false);
}
@Override
public void doOnViewCreated(View v, @Nullable Bundle savedInstanceState) {
requestsList = (ExpandableListView) v.findViewById(R.id.requestsList);
}
@Override
public void doOnStart() {
((InternetShield) getApplication().getRunningShields().get(getControllerTag())).setUiCallback(new AsyncHttpResponseHandler() {
@Override
public void onStart() {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI() && requestsList != null && requestsList.getExpandableListAdapter() != null && requestsList.getExpandableListAdapter() instanceof InternetRequestsExpandapleAdapter) {
requests = ((InternetShield) getApplication().getRunningShields().get(getControllerTag())).getUiRequests();
checkRequests();
((InternetRequestsExpandapleAdapter) requestsList.getExpandableListAdapter()).updateRequests(requests);
}
}
});
}
@Override
public void onFinish() {
uiHandler.post(new Runnable() {
@Override
public void run() {
if (canChangeUI() && requestsList != null && requestsList.getExpandableListAdapter() != null && requestsList.getExpandableListAdapter() instanceof InternetRequestsExpandapleAdapter) {
requests = ((InternetShield) getApplication().getRunningShields().get(getControllerTag())).getUiRequests();
checkRequests();
((InternetRequestsExpandapleAdapter) requestsList.getExpandableListAdapter()).updateRequests(requests);
}
}
});
}
@Override
public void onSuccess(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes) {
}
@Override
public void onFailure(int i, cz.msebera.android.httpclient.Header[] headers, byte[] bytes, Throwable throwable) {
}
});
requests = ((InternetShield) getApplication().getRunningShields().get(getControllerTag())).getUiRequests();
checkRequests();
try {
View footer = new View(getActivity());
footer.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, getPixelFromDips(50)));
requestsList.addFooterView(footer);
} catch (Exception e) {
CrashlyticsUtils.logException(e);
}
requestsList.setAdapter(new InternetRequestsExpandapleAdapter(activity, requests));
requestsList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView expandableListView, View view, int i, int i2, long l) {
if (requestsList.getExpandableListAdapter().getChildrenCount(i) == 6 && i2 == 1) {
InternetResponse response = requests.get(i).getResponse();
String headers = "";
Enumeration e = response.getHeaders().keys();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
headers += " " + key + " : " + response.getHeaders().get(key) + "\n";
}
popup = new InternetResponsePopup(getActivity(), new String(response.getResponseBody()), activity.getString(R.string.internet_status_code)+": " + response.getStatusCode() + "\n\n" + activity.getString(R.string.internet_headers)+" : \n" + headers + "\n" + activity.getString(R.string.internet_response_body)+": \n" + new String(response.getResponseBody()));
popup.show();
}
return true;
}
});
requestsList.setIndicatorBounds(getPixelFromDips(10), getPixelFromDips(40));
}
public int getPixelFromDips(float pixels) {
// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
return (int) (pixels * scale + 0.5f);
}
private void checkRequests() {
if (requests == null || requests.size() == 0) {
getView().findViewById(R.id.noRequests).setVisibility(View.VISIBLE);
} else
getView().findViewById(R.id.noRequests).setVisibility(View.INVISIBLE);
}
@Override
public void doOnStop() {
if (popup != null && popup.isShowing())
popup.cancel();
}
private void initializeFirmata() {
if (getApplication().getRunningShields().get(getControllerTag()) == null) {
getApplication().getRunningShields().put(getControllerTag(),
new SpeakerShield(activity, getControllerTag()));
}
}
@Override
public void doOnServiceConnected() {
initializeFirmata();
}
}