Skip to content

Commit

Permalink
Android: public release.
Browse files Browse the repository at this point in the history
  • Loading branch information
grp committed May 28, 2011
1 parent 720fa37 commit c56f876
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 4 deletions.
2 changes: 2 additions & 0 deletions android/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xuzzproductions.android.paste" android:versionCode="1" android:versionName="1.0">
<uses-permission android:name="android.permission.INTERNET" />

<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="12" />

<application android:label="Paste" android:icon="@drawable/icon">
Expand Down
122 changes: 118 additions & 4 deletions android/src/com/xuzzproductions/android/paste/PasteActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,125 @@
import android.widget.*;
import android.text.*;
import android.content.*;
import android.net.*;
import android.view.inputmethod.*;
import android.text.method.*;
import android.view.ViewGroup.*;
import android.text.style.*;
import android.util.*;
import java.util.*;
import java.io.*;
import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.impl.client.*;
import org.apache.http.entity.*;
import org.apache.http.protocol.*;
import org.apache.http.client.methods.*;
import com.jakewharton.android.actionbarsherlock.*;

public class PasteActivity extends ActionBarSherlock.Activity
{
private class PastieTask extends AsyncTask<Object, Void, String> {
private ProgressDialog progress;
private Activity activity;

public PastieTask(Activity act) {
super();
activity = act;
}

@Override
protected void onPreExecute() {
progress = new ProgressDialog(activity);
progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progress.setMessage("Submitting to Pastie...");
progress.setCancelable(false);
progress.setOwnerActivity(activity);
progress.setIndeterminate(true);
progress.show();
}

@Override
protected String doInBackground(Object... params) {
try {
String text = (String) params[0];
boolean priv = (Boolean) params[1];

String boundary = "_xuzz_productions_paste";
String body = "";

Map<String, String> parameters = new HashMap<String, String>();
parameters.put("paste[body]", text);
parameters.put("paste[authorization]", "burger");
parameters.put("paste[restricted]", priv ? "1" : "0");
parameters.put("paste[parser_id]", "6");

for (Map.Entry<String, String> entry : parameters.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();

body += "--" + boundary + "\r\n";
body += "Content-Disposition: form-data; name=\"" + key + "\"\r\n\r\n";
body += value + "\r\n";
}

body += "--" + boundary + "--\r\n";

HttpClient client = new DefaultHttpClient();
HttpContext context = new BasicHttpContext();
HttpPost post = new HttpPost("http://xuzz.net/apps/paste.php"); //("http://pastie.org/pastes");
post.setHeader("User-Agent", "Paste/Android");
post.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
try { post.setEntity(new StringEntity(body)); } catch (UnsupportedEncodingException e) { return null; }

HttpResponse response = client.execute(post, context);

HttpEntity entity = response.getEntity();
BufferedReader in = new BufferedReader(new InputStreamReader(entity.getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
while ((line = in.readLine()) != null) {
sb.append(line + "\n");
}
in.close();
return sb.toString();

/*HttpUriRequest req = (HttpUriRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST);
HttpHost host = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
String url = host.toURI() + req.getURI();
return url;*/
} catch (IOException e) {
return null;
}
}

@Override
protected void onPostExecute(String result) {
if (result == null) {
Toast toast = Toast.makeText(activity, "Submission failed.", Toast.LENGTH_SHORT);
toast.show();
} else {
Object clipboardManager = getSystemService(Context.CLIPBOARD_SERVICE);

if (PasteActivity.hasModernClipboardManager()) {
android.content.ClipboardManager manager = (android.content.ClipboardManager) clipboardManager;
ClipData.Item item = new ClipData.Item(Uri.parse(result));
ClipData clip = new ClipData(new ClipDescription("Pastie URL", new String[] { ClipDescription.MIMETYPE_TEXT_URILIST }), item);
manager.setPrimaryClip(clip);
} else {
android.text.ClipboardManager manager = (android.text.ClipboardManager) clipboardManager;
manager.setText(result);
}

Toast toast = Toast.makeText(activity, "Pastie URL copied to clipboard.", Toast.LENGTH_SHORT);
toast.show();
}

progress.dismiss();
progress = null;
}
}

private static final String TAG = "PasteActivity";
private EditText textView;

Expand All @@ -35,7 +145,7 @@ public void onCreate(Bundle savedInstanceState) {
textView = (EditText) this.findViewById(R.id.main_text);
}

protected boolean hasModernClipboardManager() {
static boolean hasModernClipboardManager() {
try {
Class.forName("android.content.ClipboardManager", false, null);
return true;
Expand All @@ -48,10 +158,12 @@ protected void updateTextFromClipboard() {
Object clipboardManager = getSystemService(Context.CLIPBOARD_SERVICE);
CharSequence text = null;

if (hasModernClipboardManager()) {
if (clipboardManager == null) return;

if (PasteActivity.hasModernClipboardManager()) {
android.content.ClipboardManager manager = (android.content.ClipboardManager) clipboardManager;
ClipData clip = manager.getPrimaryClip();
if (clip.getItemCount() > 0)
if (clip != null && clip.getItemCount() > 0)
text = clip.getItemAt(0).getText();
} else {
android.text.ClipboardManager manager = (android.text.ClipboardManager) clipboardManager;
Expand All @@ -76,10 +188,12 @@ public boolean onOptionsItemSelected(MenuItem item) {
textView.setText("");
return true;
case R.id.menu_submit:
Toast.makeText(this, "Submitting...", Toast.LENGTH_SHORT).show();
PastieTask task = new PastieTask(this);
task.execute(textView.getText().toString(), true);
return true;
default:
return false;
}
}
}

0 comments on commit c56f876

Please sign in to comment.