package com.yeokm1.nussocprintandroid.fragments; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.method.ScrollingMovementMethod; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.yeokm1.nussocprintandroid.R; import com.yeokm1.nussocprintandroid.core.Storage; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class QuotaFragment extends Fragment { private TextView outputTextView; private Button refreshButton; private final String TAG = "Quota"; private final String QUOTA_REGEX = "<tr><td bgcolor=.*?>(.*?)</td><td bgcolor=.*?>(.*?)</td></tr>"; private Pattern patternQuotaPage; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_quota, container, false); outputTextView = (TextView) view.findViewById(R.id.fragment_quota_output); outputTextView.setMovementMethod(new ScrollingMovementMethod()); refreshButton = (Button) view.findViewById(R.id.fragment_quota_refresh_button); patternQuotaPage = Pattern.compile(QUOTA_REGEX); refreshButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { refreshPrintQuota(); } }); refreshPrintQuota(); return view; } public void refreshPrintQuota(){ Storage storage = Storage.getInstance(); String username = storage.getUsername(); String password = storage.getPassword(); if(username.length() == 0 || password.length() == 0){ Toast.makeText(getActivity(), R.string.misc_missing_credential, Toast.LENGTH_SHORT).show(); return; } String loginURL = getString(R.string.quota_login_url); String quotaPageRelURL = getString(R.string.quota_page_relative_url); outputTextView.setText(R.string.quota_refresh_text); new AsyncTask<String, String, String>() { @Override protected String doInBackground(String... params) { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(params[0]); try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); nameValuePairs.add(new BasicNameValuePair("destination", params[1])); nameValuePairs.add(new BasicNameValuePair("credential_0", params[2])); nameValuePairs.add(new BasicNameValuePair("credential_1", params[3])); nameValuePairs.add(new BasicNameValuePair("AuthType", "AuthDBICookieHandler")); nameValuePairs.add(new BasicNameValuePair("AuthName", "mysoc")); httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost); String responseOutput = inputStreamToString(response.getEntity().getContent()); return responseOutput; } catch (Exception e) { return ""; } } @Override public void onPostExecute(String output){ if(isAdded() && outputTextView != null){ if(output.length() == 0){ outputTextView.setText(R.string.misc_no_network); } else { String processed = processHTMLOutputToQuota(output); outputTextView.setText(processed); } } } }.execute(new String[]{loginURL, quotaPageRelURL, username, password}); } private String processHTMLOutputToQuota(String input){ Matcher match = patternQuotaPage.matcher(input); StringBuffer finalString = new StringBuffer(); //Find quota strings while (match.find()) { String matched = match.group(); String processed = android.text.Html.fromHtml(matched).toString(); int indexToInsertTo = processed.length(); while(Character.isDigit(processed.charAt(indexToInsertTo - 1))){ indexToInsertTo--; } StringBuffer temp = new StringBuffer(processed); temp.insert(indexToInsertTo, ": "); String quotaString = temp.toString(); finalString.append(quotaString + System.getProperty("line.separator") + System.getProperty("line.separator")); } String finalText = finalString.toString(); if(finalText.length() == 0){ finalText = getString(R.string.misc_wrong_credentials); } Log.i(TAG, finalText); return finalText; } private String inputStreamToString(InputStream is) throws IOException { String line = ""; StringBuilder total = new StringBuilder(); // Wrap a BufferedReader around the InputStream BufferedReader rd = new BufferedReader(new InputStreamReader(is)); // Read response until the end while ((line = rd.readLine()) != null) { total.append(line); } String result = total.toString(); // Return full string return result; } }