package yuku.kirimfidbek; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.content.pm.PackageManager.NameNotFoundException; import android.os.Build; import android.os.Build.VERSION; import android.util.Log; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import org.apache.http.HttpEntity; 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 yuku.capjempol.HitungCapJempol; public class PengirimFidbek { public static final String TAG = "KirimFidbek"; //$NON-NLS-1$ public static interface OnSuccessListener { void onSuccess(byte[] response); } static class Entri { String isi; int versionCode; int timestamp; String versionSdk; String capjempol; public Entri(String isi, int versionCode, int timestamp, String versionSdk, String capjempol) { this.isi = isi; this.versionCode = versionCode; this.timestamp = timestamp; this.versionSdk = versionSdk; this.capjempol = capjempol; } } final Context context_; final SharedPreferences offlineBuffer_; TangkapSemuaEror tangkapSemuaEror_; List<Entri> xentri_; OnSuccessListener onSuccessListener_ = null; boolean lagiKirim_ = false; public PengirimFidbek(Context context, SharedPreferences offlineBuffer) { context_ = context; offlineBuffer_ = offlineBuffer; getUniqueId(); // picu pembuatan uniqueId. } public void setOnSuccessListener(OnSuccessListener onSuccessListener) { onSuccessListener_ = onSuccessListener; } public void activateDefaultUncaughtExceptionHandler() { tangkapSemuaEror_ = new TangkapSemuaEror(this); tangkapSemuaEror_.aktifkan(); } public void tambah(String isi) { muat(); xentri_.add(new Entri(isi, getVersionCode(), getTimestamp(), getVersionSdk(), HitungCapJempol.hitung(context_))); simpan(); } int getTimestamp() { return (int)(new Date().getTime() / 1000L); } synchronized void simpan() { if (xentri_ == null) return; Editor editor = offlineBuffer_.edit(); { editor.putInt("nfidbek", xentri_.size()); //$NON-NLS-1$ for (int i = 0; i < xentri_.size(); i++) { Entri entri = xentri_.get(i); editor.putString("fidbek/" + i + "/isi", entri.isi); //$NON-NLS-1$ //$NON-NLS-2$ editor.putInt("fidbek/" + i + "/versionCode", entri.versionCode); //$NON-NLS-1$ //$NON-NLS-2$ editor.putInt("fidbek/" + i + "/timestamp", entri.timestamp); //$NON-NLS-1$ //$NON-NLS-2$ editor.putString("fidbek/" + i + "/versionSdk", entri.versionSdk); //$NON-NLS-1$ //$NON-NLS-2$ editor.putString("fidbek/" + i + "/capjempol", entri.capjempol); //$NON-NLS-1$ //$NON-NLS-2$ } } editor.commit(); } public synchronized void cobaKirim() { muat(); if (lagiKirim_ || xentri_.size() == 0) return; lagiKirim_ = true; new Pengirim().start(); } synchronized void muat() { if (xentri_ == null) { xentri_ = new ArrayList<Entri>(); int nfidbek = offlineBuffer_.getInt("nfidbek", 0); //$NON-NLS-1$ for (int i = 0; i < nfidbek; i++) { String isi = offlineBuffer_.getString("fidbek/" + i + "/isi", null); //$NON-NLS-1$ //$NON-NLS-2$ int versionCode = offlineBuffer_.getInt("fidbek/" + i + "/versionCode", 0); //$NON-NLS-1$ //$NON-NLS-2$ int timestamp = offlineBuffer_.getInt("fidbek/" + i + "/timestamp", 0); //$NON-NLS-1$ //$NON-NLS-2$ String versionSdk = offlineBuffer_.getString("fidbek/" + i + "/versionSdk", "0"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ String capjempol = offlineBuffer_.getString("fidbek/" + i + "/capjempol", null); //$NON-NLS-1$ //$NON-NLS-2$ xentri_.add(new Entri(isi, versionCode, timestamp, versionSdk, capjempol)); } } } class Pengirim extends Thread { public Pengirim() { } @Override public void run() { boolean berhasil = false; Log.d(TAG, "tred pengirim dimulai. thread id = " + getId()); //$NON-NLS-1$ try { HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost("http://www.kejut.com/prog/android/fidbek/kirim3.php"); //$NON-NLS-1$ ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); for (Entri entri: xentri_) { params.add(new BasicNameValuePair("uniqueId[]", getUniqueId())); //$NON-NLS-1$ params.add(new BasicNameValuePair("package_name[]", context_.getPackageName())); //$NON-NLS-1$ params.add(new BasicNameValuePair("fidbek_isi[]", entri.isi)); //$NON-NLS-1$ params.add(new BasicNameValuePair("package_versionCode[]", String.valueOf(entri.versionCode))); //$NON-NLS-1$ params.add(new BasicNameValuePair("timestamp[]", String.valueOf(entri.timestamp))); //$NON-NLS-1$ params.add(new BasicNameValuePair("build_product[]", getBuildProduct())); //$NON-NLS-1$ params.add(new BasicNameValuePair("build_device[]", getBuildDevice())); //$NON-NLS-1$ params.add(new BasicNameValuePair("version_sdk[]", entri.versionSdk)); //$NON-NLS-1$ params.add(new BasicNameValuePair("capjempol[]", entri.capjempol)); //$NON-NLS-1$ } post.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //$NON-NLS-1$ HttpResponse response = client.execute(post); HttpEntity entity = response.getEntity(); InputStream content = entity.getContent(); ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); while (true) { byte[] b = new byte[4096]; int read = content.read(b); if (read <= 0) break; baos.write(b, 0, read); } byte[] out = baos.toByteArray(); if (out.length >= 2 && out[0] == 'O' && out[1] == 'K') { berhasil = true; } if (onSuccessListener_ != null) { onSuccessListener_.onSuccess(out); } } catch (IOException e) { Log.w(TAG, "waktu post", e); //$NON-NLS-1$ } if (berhasil) { synchronized (PengirimFidbek.this) { xentri_.clear(); } simpan(); } Log.d(TAG, "tred pengirim selesai. berhasil = " + berhasil); //$NON-NLS-1$ lagiKirim_ = false; } } int getVersionCode() { int versionCode = 0; try { versionCode = context_.getPackageManager().getPackageInfo(context_.getPackageName(), 0).versionCode; } catch (NameNotFoundException e) { Log.w(TAG, "package get versioncode", e); //$NON-NLS-1$ } return versionCode; } String getBuildProduct() { return Build.PRODUCT; } String getBuildDevice() { return Build.DEVICE; } String getUniqueId() { String uniqueId = offlineBuffer_.getString("fidbek_uniqueId", null); //$NON-NLS-1$ if (uniqueId == null) { uniqueId = "u2:" + UUID.randomUUID().toString(); //$NON-NLS-1$ offlineBuffer_.edit().putString("fidbek_uniqueId", uniqueId).commit(); //$NON-NLS-1$ } return uniqueId; } String getVersionSdk() { return VERSION.SDK; } }