package dev.ukanth.ufirewall.activity; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.net.TrafficStats; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import java.util.Arrays; import dev.ukanth.ufirewall.Api; import dev.ukanth.ufirewall.R; public class AppDetailActivity extends AppCompatActivity { public static final String TAG = "AFWall"; private static String packageName = ""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle(getString(R.string.traffic_detail_title)); setContentView(R.layout.app_detail); Toolbar toolbar = (Toolbar) findViewById(R.id.app_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); final Context ctx = getApplicationContext(); ImageView image = (ImageView) findViewById(R.id.app_icon); TextView textView = (TextView) findViewById(R.id.app_title); TextView textView2 = (TextView) findViewById(R.id.app_package); TextView up = (TextView) findViewById(R.id.up); TextView down = (TextView) findViewById(R.id.down); /**/ int appid = getIntent().getIntExtra("appid", -1); if(appid > 0) { final PackageManager packageManager = getApplicationContext().getPackageManager(); final String[] packageNameList = ctx.getPackageManager().getPackagesForUid(appid); if(packageNameList != null) { packageName = packageNameList.length > 0 ? packageNameList[0] : ctx.getPackageManager().getNameForUid(appid); } else { packageName = ctx.getPackageManager().getNameForUid(appid); } Button button = (Button) findViewById(R.id.app_settings); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { Api.showInstalledAppDetails(getApplicationContext(), packageName); } }); ApplicationInfo applicationInfo; try { applicationInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA); image.setImageDrawable(applicationInfo.loadIcon(packageManager)); textView.setText(packageManager.getApplicationLabel(applicationInfo)); if(packageNameList.length > 1) { textView2.setText(Arrays.toString(packageNameList)); button.setEnabled(false); } else { textView2.setText(packageName); } long download_bytes = TrafficStats.getUidRxBytes(applicationInfo.uid); long uploaded_bytes = TrafficStats.getUidTxBytes(applicationInfo.uid); down.setText(" : " +humanReadableByteCount(download_bytes, false)); up.setText(" : " +humanReadableByteCount(uploaded_bytes, false)); } catch (final NameNotFoundException e) { long download_bytes = TrafficStats.getUidRxBytes(appid); long uploaded_bytes = TrafficStats.getUidTxBytes(appid); down.setText(" : " +humanReadableByteCount(download_bytes, false)); up.setText(" : " +humanReadableByteCount(uploaded_bytes, false)); button.setEnabled(false); } /*long total = TrafficStats.getTotalRxBytes(); long mobileTotal = TrafficStats.getMobileRxBytes(); long wifiTotal = (total - mobileTotal); Log.v(TAG, "total=" + total + " mob=" + mobileTotal + " wifi=" + wifiTotal);*/ } } public static String humanReadableByteCount(long bytes, boolean si) { int unit = si ? 1000 : 1024; if(bytes < 0) return "0 B"; if (bytes < unit) return bytes + " B"; int exp = (int) (Math.log(bytes) / Math.log(unit)); String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i"); return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; } return super.onOptionsItemSelected(item); } }