package cn.edu.buaa.act.sdp.malwaredetector.activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import cn.edu.buaa.act.sdp.malwaredetector.Constant;
import cn.edu.buaa.act.sdp.malwaredetector.R;
import cn.edu.buaa.act.sdp.malwaredetector.entity.PackageInfoWithSize;
import cn.edu.buaa.act.sdp.malwaredetector.util.AppLog;
import cn.edu.buaa.act.sdp.malwaredetector.util.AppManager;
public class AppDetailedInforActivity extends ActionBarActivity implements View.OnClickListener {
private ImageView ivAppIcon;
private TextView tvAppName;
private TextView tvAppVersion;
private TextView tvAppPermission;
private TextView tvAppComponent;
private TextView tvAppFilter;
private Button btnLookXml;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_app_detailed_infor);
initView();
int position = getIntent().getIntExtra("position", 0);
List<PackageInfoWithSize> list = AppManager.getAllInstalledApps(this);
PackageInfoWithSize app = list.get(position);
ivAppIcon.setImageDrawable(app.getIcon());
tvAppName.setText(app.getAppName());
tvAppVersion.setText("版本 " + app.getVersion());
AppLog.log(Constant.TAG, app.getAppName(), 'd', "static-log.txt");
// TODO get permission group
// get the list of permissions
StringBuilder permissionName = new StringBuilder();
try {
PackageManager pm = getPackageManager();
PackageInfo info = pm.getPackageInfo(app.getPackageName(), PackageManager.GET_PERMISSIONS);
String[] requestPermissions = info.requestedPermissions;
if (requestPermissions != null) {
for (String per : requestPermissions) {
permissionName.append(per + "\n");
try {
PermissionInfo permissionInfo = pm.getPermissionInfo(per, PackageManager.GET_META_DATA);
if (permissionInfo.group != null) {
PermissionGroupInfo groupInfo = pm.getPermissionGroupInfo(permissionInfo.group, PackageManager.GET_META_DATA);
//permissionName.append(groupInfo.loadLabel(pm).toString() + "\n");
//permissionName.append(permissionInfo.loadLabel(pm).toString() + "\n");
// permissionName.append(permissionInfo.loadDescription(pm).toString() + "\n\n");
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
// get the list of components
StringBuilder componetNames = new StringBuilder();
try {
PackageManager pm = getPackageManager();
PackageInfo info = pm.getPackageInfo(app.getPackageName(), PackageManager.GET_ACTIVITIES);
ActivityInfo[] activities = info.activities;
if (activities != null) {
for (ActivityInfo ainfo : activities) {
componetNames.append(ainfo.name + "\n");
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
//
try {
PackageManager pm = getPackageManager();
PackageInfo info = pm.getPackageInfo(app.getPackageName(), PackageManager.GET_SERVICES);
ServiceInfo[] serviceInfos = info.services;
if (serviceInfos != null) {
for (ServiceInfo serviceInfo : serviceInfos) {
componetNames.append(serviceInfo.name + "\n");
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
// get the list of filters
StringBuilder filterNames = new StringBuilder();
PackageManager pm = getPackageManager();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse("http://www.google.com"));
List<ResolveInfo> infos = pm.queryIntentActivities(intent, PackageManager.GET_RESOLVED_FILTER);
if (infos != null) {
for (ResolveInfo info : infos) {
ActivityInfo ai = info.activityInfo;
IntentFilter filter = info.filter;
if (filter != null) {
filterNames.append(filter.toString() + "\n");
}
}
}
tvAppPermission.setText(permissionName);
tvAppComponent.setText(componetNames);
tvAppFilter.setText(filterNames);
AppLog.log(Constant.TAG, permissionName.toString(), 'd', "static-log.txt");
AppLog.log(Constant.TAG, componetNames.toString(), 'd', "static-log.txt");
AppLog.log(Constant.TAG, filterNames.toString(), 'd', "static-log.txt");
btnLookXml.setOnClickListener(this);
}
private void initView() {
ivAppIcon = (ImageView) findViewById(R.id.app_icon);
tvAppName = (TextView) findViewById(R.id.app_name);
tvAppVersion = (TextView) findViewById(R.id.app_version);
tvAppPermission = (TextView) findViewById(R.id.app_permission);
tvAppComponent = (TextView) findViewById(R.id.app_component);
tvAppFilter = (TextView) findViewById(R.id.app_filter);
btnLookXml = (Button) findViewById(R.id.look_xml);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_app_detailed_infor, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.look_xml:
break;
}
}
}