2016-01-05 12:40:02 +00:00
|
|
|
package eu.faircode.netguard;
|
|
|
|
|
|
|
|
import android.content.Context;
|
2016-01-06 10:12:37 +00:00
|
|
|
import android.content.Intent;
|
2016-01-08 07:12:14 +00:00
|
|
|
import android.content.pm.ApplicationInfo;
|
|
|
|
import android.content.pm.PackageManager;
|
2016-01-05 12:40:02 +00:00
|
|
|
import android.database.Cursor;
|
2016-01-06 10:12:37 +00:00
|
|
|
import android.net.Uri;
|
|
|
|
import android.text.TextUtils;
|
2016-01-05 12:40:02 +00:00
|
|
|
import android.view.LayoutInflater;
|
|
|
|
import android.view.View;
|
|
|
|
import android.view.ViewGroup;
|
|
|
|
import android.widget.CursorAdapter;
|
2016-01-08 07:12:14 +00:00
|
|
|
import android.widget.ImageView;
|
2016-01-05 12:40:02 +00:00
|
|
|
import android.widget.TextView;
|
|
|
|
|
2016-01-08 07:12:14 +00:00
|
|
|
import com.squareup.picasso.Picasso;
|
|
|
|
|
2016-01-05 12:40:02 +00:00
|
|
|
import java.text.SimpleDateFormat;
|
|
|
|
|
|
|
|
public class LogAdapter extends CursorAdapter {
|
|
|
|
private int colTime;
|
2016-01-07 06:47:00 +00:00
|
|
|
private int colVersion;
|
2016-01-05 12:40:02 +00:00
|
|
|
private int colIP;
|
2016-01-07 06:47:00 +00:00
|
|
|
private int colProtocol;
|
2016-01-08 07:03:04 +00:00
|
|
|
private int colPort;
|
|
|
|
private int colFlags;
|
2016-01-07 06:47:00 +00:00
|
|
|
private int colUid;
|
2016-01-05 12:40:02 +00:00
|
|
|
|
|
|
|
public LogAdapter(Context context, Cursor cursor) {
|
|
|
|
super(context, cursor, 0);
|
|
|
|
colTime = cursor.getColumnIndex("time");
|
2016-01-07 06:47:00 +00:00
|
|
|
colVersion = cursor.getColumnIndex("version");
|
2016-01-05 12:40:02 +00:00
|
|
|
colIP = cursor.getColumnIndex("ip");
|
2016-01-07 06:47:00 +00:00
|
|
|
colProtocol = cursor.getColumnIndex("protocol");
|
2016-01-08 07:03:04 +00:00
|
|
|
colPort = cursor.getColumnIndex("port");
|
|
|
|
colFlags = cursor.getColumnIndex("flags");
|
2016-01-07 06:47:00 +00:00
|
|
|
colUid = cursor.getColumnIndex("uid");
|
2016-01-05 12:40:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public View newView(Context context, Cursor cursor, ViewGroup parent) {
|
|
|
|
return LayoutInflater.from(context).inflate(R.layout.log, parent, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void bindView(final View view, final Context context, final Cursor cursor) {
|
|
|
|
// Get values
|
2016-01-06 10:12:37 +00:00
|
|
|
long time = cursor.getLong(colTime);
|
2016-01-07 06:47:00 +00:00
|
|
|
int version = (cursor.isNull(colVersion) ? -1 : cursor.getInt(colVersion));
|
2016-01-06 10:12:37 +00:00
|
|
|
String ip = cursor.getString(colIP);
|
2016-01-07 06:47:00 +00:00
|
|
|
int protocol = (cursor.isNull(colProtocol) ? -1 : cursor.getInt(colProtocol));
|
2016-01-08 07:03:04 +00:00
|
|
|
int port = (cursor.isNull(colPort) ? -1 : cursor.getInt(colPort));
|
|
|
|
String flags = cursor.getString(colFlags);
|
2016-01-07 06:47:00 +00:00
|
|
|
final int uid = (cursor.isNull(colUid) ? -1 : cursor.getInt(colUid));
|
2016-01-08 07:03:04 +00:00
|
|
|
|
2016-01-07 06:47:00 +00:00
|
|
|
final String whois = (ip.length() > 1 && ip.charAt(0) == '/' ? ip.substring(1) : ip);
|
2016-01-05 12:40:02 +00:00
|
|
|
|
|
|
|
// Get views
|
2016-01-08 07:12:14 +00:00
|
|
|
ImageView ivIcon = (ImageView) view.findViewById(R.id.ivIcon);
|
2016-01-05 12:40:02 +00:00
|
|
|
TextView tvTime = (TextView) view.findViewById(R.id.tvTime);
|
|
|
|
TextView tvIP = (TextView) view.findViewById(R.id.tvIP);
|
2016-01-07 06:47:00 +00:00
|
|
|
TextView tvProtocol = (TextView) view.findViewById(R.id.tvProtocol);
|
2016-01-08 07:03:04 +00:00
|
|
|
TextView tvPort = (TextView) view.findViewById(R.id.tvPort);
|
|
|
|
TextView tvFlags = (TextView) view.findViewById(R.id.tvFlags);
|
2016-01-07 06:47:00 +00:00
|
|
|
TextView tvUid = (TextView) view.findViewById(R.id.tvUid);
|
2016-01-05 12:40:02 +00:00
|
|
|
|
2016-01-08 07:12:14 +00:00
|
|
|
// Application icon
|
|
|
|
ApplicationInfo info = null;
|
|
|
|
PackageManager pm = context.getPackageManager();
|
|
|
|
String[] pkg = pm.getPackagesForUid(uid);
|
|
|
|
if (pkg != null && pkg.length > 0)
|
|
|
|
try {
|
|
|
|
info = pm.getApplicationInfo(pkg[0], 0);
|
|
|
|
} catch (PackageManager.NameNotFoundException ignored) {
|
|
|
|
}
|
|
|
|
if (info == null || info.icon == 0)
|
|
|
|
Picasso.with(context).load(android.R.drawable.sym_def_app_icon).into(ivIcon);
|
|
|
|
else {
|
|
|
|
Uri uri = Uri.parse("android.resource://" + info.packageName + "/" + info.icon);
|
|
|
|
Picasso.with(context).load(uri).into(ivIcon);
|
|
|
|
}
|
|
|
|
|
2016-01-05 12:40:02 +00:00
|
|
|
// Set values
|
2016-01-07 06:47:00 +00:00
|
|
|
tvTime.setText(new SimpleDateFormat("dd").format(time) + " " +
|
|
|
|
SimpleDateFormat.getTimeInstance(SimpleDateFormat.MEDIUM).format(time));
|
|
|
|
|
|
|
|
tvIP.setText(whois);
|
|
|
|
|
|
|
|
if (version == 4)
|
2016-01-07 10:56:24 +00:00
|
|
|
if (protocol == IPv4Packet.IPv4Header.ICMP)
|
2016-01-07 06:47:00 +00:00
|
|
|
tvProtocol.setText("ICMP");
|
2016-01-07 10:56:24 +00:00
|
|
|
else if (protocol == IPv4Packet.IPv4Header.TCP)
|
2016-01-07 06:47:00 +00:00
|
|
|
tvProtocol.setText("TCP");
|
2016-01-07 10:56:24 +00:00
|
|
|
else if (protocol == IPv4Packet.IPv4Header.UDP)
|
2016-01-07 06:47:00 +00:00
|
|
|
tvProtocol.setText("UDP");
|
|
|
|
else
|
|
|
|
tvProtocol.setText(protocol < 0 ? "" : Integer.toString(protocol));
|
|
|
|
else
|
|
|
|
tvProtocol.setText("");
|
|
|
|
|
2016-01-08 07:03:04 +00:00
|
|
|
tvPort.setText(port < 0 ? "" : Integer.toString(port));
|
|
|
|
tvFlags.setText(flags);
|
2016-01-07 06:47:00 +00:00
|
|
|
tvUid.setText(uid < 0 ? "" : Integer.toString(uid % 100000));
|
2016-01-06 10:12:37 +00:00
|
|
|
|
|
|
|
tvIP.setOnClickListener(new View.OnClickListener() {
|
|
|
|
@Override
|
|
|
|
public void onClick(View view) {
|
|
|
|
if (!TextUtils.isEmpty(whois)) {
|
|
|
|
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://whois.domaintools.com/" + whois));
|
|
|
|
if (context.getPackageManager().resolveActivity(intent, 0) != null)
|
|
|
|
context.startActivity(intent);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2016-01-07 06:47:00 +00:00
|
|
|
|
|
|
|
tvUid.setOnClickListener(new View.OnClickListener() {
|
|
|
|
@Override
|
|
|
|
public void onClick(View view) {
|
|
|
|
if (uid > 0) {
|
|
|
|
Intent main = new Intent(context, ActivityMain.class);
|
|
|
|
main.putExtra(ActivityMain.EXTRA_SEARCH, Integer.toString(uid));
|
|
|
|
context.startActivity(main);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2016-01-05 12:40:02 +00:00
|
|
|
}
|
|
|
|
}
|