Mega Code Archive

 
Categories / Android / Hardware
 

Screen Short

/*   *      *    dodol android screenshot capture and share library v1.0 (1. 30. 2011)  *      *    homepage:  *     http://dodol.kr  *    source:  *     http://code.google.com/p/dodol-android-screenshot-capture/  *       *    Copyright (C) 2011  dodol [dodol.kr@gmail.com]  *  *    This program is free software: you can redistribute it and/or modify  *    it under the terms of the GNU General Public License as published by  *    the Free Software Foundation, either version 3 of the License, or  *    any later version.  *  *    This program is distributed in the hope that it will be useful,  *    but WITHOUT ANY WARRANTY; without even the implied warranty of  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  *    GNU General Public License for more details.  *  *    You should have received a copy of the GNU General Public License  *    along with this program.  If not, see <http://www.gnu.org/licenses/>.  *   */ //package lib.dodol.screenshot; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Bitmap.CompressFormat; import android.graphics.Bitmap.Config; import android.util.Log; import android.view.View; import android.widget.Toast; public class DodolScreenshot {   private Activity mActivity;   private Bitmap mImageBitmap;   private String mAppId;   private String mMessage;   private String mResultMessage;   // constructor      public DodolScreenshot(Activity activity) {     this.mActivity = activity;   }      // public method      public Bitmap setCaptureSource(View view) {     mImageBitmap = makeBitmapImage(view);     return mImageBitmap;   }      public Bitmap setCaptureSource(Bitmap bitmap) {     mImageBitmap = bitmap;     return mImageBitmap;   }   public void setAppId(String mAppId) {     this.mAppId = mAppId;         }   public void setUserMessage(String msg) {     this.mMessage = msg;   }      public String getUserMessage() {     // TODO Auto-generated method stub     return mMessage;   }   public String upload() {     if(mImageBitmap == null) {       Log.e("dodol-screenshot", "screenshot source has not been set");       return "no screenshot source";     }     mResultMessage = processUploadRequest();      return mResultMessage;   }      public boolean isSuccess() {     return mResultMessage != null && mResultMessage.contains("http");   }      public String getUrl() {     return isSuccess() ? mResultMessage : null;    }      public Intent getSendIntent(String userMessage) {     if(isSuccess()) {       Intent intent = new Intent(Intent.ACTION_SEND);       // "Screenshot: " is 12 character        // url length is less than 50 character       intent.putExtra(Intent.EXTRA_TEXT, userMessage + "Screenshot: " + mResultMessage);       intent.setType("text/plain");       return intent;     } else {       return null;     }   }      // private methods      private Bitmap makeBitmapImage(View mMainLayout) {      Bitmap bitmap;          try {       bitmap = Bitmap.createBitmap(mMainLayout.getWidth(), mMainLayout.getHeight(), Config.ARGB_8888);       Canvas canvas = new Canvas();       canvas.setBitmap(bitmap);       mMainLayout.draw(canvas);     } catch (Exception e) {       Log.e("dodol-screenshot", "not enough memory");       Toast.makeText(mActivity, "dodol-screenshot: not enough memory", Toast.LENGTH_LONG).show();       return null;     }     return bitmap;   }      private String processUploadRequest() {          HttpURLConnection conn = null;     DataOutputStream dos = null;        try {          String lineEnd = "\r\n";             String twoHyphens = "--";             String boundary = "*****";             String urlString = "http://dodol-screenshot.appspot.com/post";             URL url = new URL(urlString);             conn = (HttpURLConnection) url.openConnection();             conn.setDoInput(true);             conn.setDoOutput(true);             conn.setUseCaches(false);                          conn.setRequestMethod("POST");                         conn.setRequestProperty("Charset", "utf-8");             conn.setRequestProperty("Connection", "Keep-Alive");             conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);             dos = new DataOutputStream( conn.getOutputStream() );             // additional field and data       ArrayList<String> data = new ArrayList<String>();       data.add("package");       data.add(mActivity.getPackageName());       data.add("appid");       data.add(mAppId);              data.add("title");       data.add(mMessage);              data.add("language");       data.add(mActivity.getResources().getConfiguration().locale.getISO3Language());              for(int i = 0; i < data.size(); i += 2) {         dos.writeBytes(twoHyphens + boundary + lineEnd);         dos.writeBytes("Content-Disposition: form-data; name=\"" + data.get(i)+ "\"" + "\r\n" + lineEnd);         dos.write(data.get(i + 1).getBytes("utf-8"));         dos.writeBytes(lineEnd);       }            dos.writeBytes(twoHyphens + boundary + lineEnd);                        // upload image file             dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"screenshot\"" + lineEnd);            dos.writeBytes(lineEnd);                        ByteArrayOutputStream  byteArray = new ByteArrayOutputStream();            mImageBitmap.compress(CompressFormat.JPEG, 90, byteArray);                        byte[] byteImageData = byteArray.toByteArray();            dos.write(byteImageData, 0, byteImageData.length);            dos.writeBytes(lineEnd);            dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);            dos.flush();            dos.close();            // receive result from server            InputStream is = conn.getInputStream();              BufferedReader reader = new BufferedReader(new InputStreamReader(is));            urlString = reader.readLine();                   conn.disconnect();            return urlString;                    } catch (Exception e) {         e.printStackTrace();         Log.e("dodol-screenshot", "Sorry, screenshot upload failed. See logcat exception message");         Toast.makeText(mActivity, "Sorry, screenshot upload failed.", Toast.LENGTH_LONG).show();        }     return null;     } }