package com.smartisanos.sidebar.util;
import java.util.List;
import com.smartisanos.sidebar.PendingDragEventTask;
import android.content.ClipDescription;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.DragEvent;
public class OngoingItem extends SidebarItem {
private ComponentName mName;
private int mToken;
private int mPendingNumbers;
private CharSequence mTitle;
private int mPid;
public OngoingItem(ComponentName name, int token, int pendingNumbers,
CharSequence title, int pid) {
mName = name;
mToken = token;
mPendingNumbers = pendingNumbers;
mTitle = title;
mPid = pid;
}
public int getPid() {
return mPid;
}
public int getPendingNumbers() {
return mPendingNumbers;
}
@Override
public CharSequence getDisplayName() {
return mTitle;
}
@Override
public Drawable getAvatar() {
return null;
}
@Override
public void delete() {
// TODO Auto-generated method stub
}
@Override
public boolean acceptDragEvent(Context context, DragEvent event) {
if (event == null) {
return true;
}
if (event.getClipDescription().getMimeTypeCount() <= 0) {
return false;
}
String mimeType = event.getClipDescription().getMimeType(0);
if (TextUtils.isEmpty(mimeType)) {
return false;
}
if (ClipDescription.MIMETYPE_TEXT_PLAIN.equals(mimeType)) {
Intent sharingIntent = new Intent(
android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
List<ResolveInfo> infos = context.getPackageManager().queryIntentActivities(sharingIntent, 0);
if (infos != null) {
for (ResolveInfo ri : infos) {
ComponentName cn = new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name);
if (mName.equals(cn)) {
return true;
}
}
}
} else {
for (String action : ResolveInfoManager.ACTIONS) {
Intent intent = new Intent(action);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType(mimeType);
intent.setPackage(mName.getPackageName());
List<ResolveInfo> infos = context.getPackageManager().queryIntentActivities(intent, 0);
if (infos != null) {
for (ResolveInfo ri : infos) {
ComponentName cn = new ComponentName(
ri.activityInfo.packageName,
ri.activityInfo.name);
if (mName.equals(cn)) {
return true;
}
}
}
}
}
return false;
}
@Override
public boolean handleDragEvent(Context context, DragEvent event) {
boolean isPending = PendingDragEventTask.tryPending(context, event,
this);
if (isPending) {
return true;
}
if (event.getClipData().getItemCount() <= 0
|| event.getClipDescription() == null
|| event.getClipDescription().getMimeTypeCount() <= 0) {
return false;
}
String mimeType = event.getClipDescription().getMimeType(0);
if (TextUtils.isEmpty(mimeType)) {
return false;
}
if (ClipDescription.MIMETYPE_TEXT_PLAIN.equals(mimeType)
&& !TextUtils.isEmpty(event.getClipData().getItemAt(0).getText())) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setPackage(mName.getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_NEW_DOCUMENT
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.setType(mimeType);
intent.putExtra(Intent.EXTRA_TEXT, event.getClipData().getItemAt(0).getText().toString());
intent.setComponent(mName);
Utils.dismissAllDialog(context);
sendNewData(context, intent);
return true;
} else {
if (event.getClipData().getItemAt(0).getUri() == null) {
return false;
}
Intent intent = new Intent(Intent.ACTION_SEND);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setComponent(mName);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_NEW_DOCUMENT
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.setType(mimeType);
intent.putExtra(Intent.EXTRA_STREAM,
event.getClipData().getItemAt(0).getUri());
Utils.dismissAllDialog(context);
sendNewData(context, intent);
return true;
}
}
@Override
public boolean openUI(Context context) {
Intent realIntent = new Intent();
realIntent.setComponent(mName);
realIntent.putExtra("token", mToken);
realIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_NEW_DOCUMENT
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
context.startActivity(realIntent);
return true;
}
public boolean isSameItem(ComponentName name, int token) {
return mToken == token && mName.equals(name);
}
public void setPendingNumbers(int pendingNumbers) {
mPendingNumbers = pendingNumbers;
}
public void setTitle(CharSequence title) {
mTitle = title;
}
public void sendNewData(Context context, Intent extraIntent) {
Intent realIntent = new Intent("com.smartisanos.sidebar.intent.action.SEND_NEW_DATA");
realIntent.setPackage(mName.getPackageName());
realIntent.putExtra("token", mToken);
if(extraIntent != null){
realIntent.putExtra(Intent.EXTRA_INTENT, extraIntent);
}
//smartisan intent, processed more quickly
// realIntent.addFlags(Intent.FLAG_RECEIVER_SM_USER_AWARE);
context.sendBroadcast(realIntent);
}
}