package com.marktony.translator.service;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.os.IBinder;
import android.support.annotation.Nullable;
import android.support.v7.app.NotificationCompat;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.marktony.translator.R;
import com.marktony.translator.constant.Constants;
import com.marktony.translator.model.BingModel;
import com.marktony.translator.util.UTF8Encoder;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
/**
* Created by lizhaotailang on 2016/7/14.
*/
public class ClipboardService extends Service {
private ClipboardManager manager;
private RequestQueue queue;
private static final String TAG = ClipboardService.class.getSimpleName();
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
manager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
manager.addPrimaryClipChangedListener(listener);
queue = Volley.newRequestQueue(ClipboardService.this.getApplicationContext());
}
private ClipboardManager.OnPrimaryClipChangedListener listener = new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
if (manager.hasPrimaryClip()){
ClipData data = manager.getPrimaryClip();
handleClipData(data.getItemAt(0).getText().toString());
}
}
};
private void handleClipData(final String clipData) {
StringRequest request = new StringRequest(Request.Method.GET,
Constants.BING_BASE + "?Word=" + clipData + "&Samples=false",
new Response.Listener<String>() {
@Override
public void onResponse(String s) {
try {
Gson gson = new Gson();
BingModel model = gson.fromJson(s, BingModel.class);
if (model != null) {
String result = model.getWord() + "\n";
if (model.getPronunciation() != null) {
BingModel.Pronunciation p = model.getPronunciation();
result = result + "\nAmE:" + p.getAmE() + "\nBrE:" + p.getBrE() + "\n";
}
for (BingModel.Definition def : model.getDefs()) {
result = result + def.getPos() + "\n" + def.getDef() + "\n";
}
result = result.substring(0, result.length() - 1);
NotificationCompat.Builder mBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(ClipboardService.this)
.setSmallIcon(R.drawable.ic_small_icon)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
.setContentTitle(getString(R.string.app_name))
.setContentText(result)
.setWhen(System.currentTimeMillis())
.setPriority(Notification.PRIORITY_DEFAULT)
.setStyle(new NotificationCompat.BigTextStyle().bigText(result));
Intent shareIntent = new Intent().setAction(Intent.ACTION_SEND).setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT,result);
PendingIntent sharePi = PendingIntent.getActivity(ClipboardService.this,0,shareIntent,0);
mBuilder.addAction(R.drawable.ic_share_white_24dp,getString(R.string.share),sharePi);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(0,mBuilder.build());
}
} catch (JsonSyntaxException ex) {
Toast.makeText(ClipboardService.this, R.string.error,Toast.LENGTH_SHORT).show();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(ClipboardService.this, R.string.network_error,Toast.LENGTH_SHORT).show();
}
});
queue.add(request);
}
@Override
public void onDestroy() {
super.onDestroy();
if (manager != null){
manager.removePrimaryClipChangedListener(listener);
}
}
}