package eu.deki.paste; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.os.Bundle; import android.widget.Spinner; import android.widget.EditText; import android.widget.ArrayAdapter; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.view.MenuInflater; import android.content.Intent; import android.content.ContentResolver; import android.net.Uri; import java.io.InputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.FileNotFoundException; import eu.deki.paste.PasteTask; import eu.deki.paste.DekiEuPaste; /* * TODO: * - menu: open browser with url? * - more paste services */ public class MainActivity extends Activity { private EditText titleText; private EditText contentText; private Spinner expirationSpinner; private PasteTask pasteTask; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); titleText = (EditText) findViewById(R.id.paste_title); contentText = (EditText) findViewById(R.id.paste_content); expirationSpinner = (Spinner) findViewById(R.id.expiration); pasteTask = new DekiEuPaste(this); ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, pasteTask.getExpirationTimes()); expirationSpinner.setAdapter(adapter); Intent intent = getIntent(); if(intent.hasExtra(Intent.EXTRA_TEXT)) contentText.setText(intent.getStringExtra(Intent.EXTRA_TEXT)); if(intent.hasExtra(Intent.EXTRA_STREAM)) { try { Uri uri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); ContentResolver cr = getContentResolver(); InputStream is = cr.openInputStream(uri); ByteArrayOutputStream output = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int n = 0; while((n = is.read(buffer, 0, 1024)) != -1) output.write(buffer, 0, n); output.flush(); contentText.setText(output.toString()); } catch(FileNotFoundException ex) { } catch(IOException ex) { } catch(SecurityException ex) { // no permissions to read data (e.g. contacts/vcards) AlertDialog.Builder builder = new AlertDialog.Builder(this); String message = String.format(getResources().getString(R.string.noPermissionContent), ex.getLocalizedMessage()); builder.setMessage(message); builder.setTitle(R.string.noPermissionTitle); builder.setPositiveButton("OK", null); builder.create().show(); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.clear_text: clear_text(); break; default: return super.onOptionsItemSelected(item); } return true; } private void clear_text() { titleText.setText(""); contentText.setText(""); } public void onPasteButtonClick(View view) { // TODO: check network status? String title = titleText.getText().toString(); String content = contentText.getText().toString(); String expiration = expirationSpinner.getSelectedItem().toString(); pasteTask.execute(title, content, expiration); // new instance, because task must only be executed once pasteTask = new DekiEuPaste(this); } }