package com.majeur.applicationsinfo;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.view.MenuItem;
import android.view.View;
import android.widget.PopupMenu;
public class DetailOverflowMenu implements View.OnClickListener, PopupMenu.OnMenuItemClickListener {
private Context mContext;
private String mPackageName;
public DetailOverflowMenu(Context context, String packageName) {
mContext = context;
mPackageName = packageName;
}
public void setView(View view) {
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(mContext, view);
popupMenu.inflate(R.menu.fragment_detail);
//Disable uninstall option for system apps.
popupMenu.getMenu().findItem(R.id.action_uninstall).setEnabled(!isSystemApp());
popupMenu.setOnMenuItemClickListener(this);
popupMenu.show();
}
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.action_uninstall:
Intent uninstallIntent = new Intent(Intent.ACTION_DELETE);
uninstallIntent.setData(Uri.parse("package:" + mPackageName));
mContext.startActivity(uninstallIntent);
return true;
case R.id.action_view_in_settings:
Intent infoIntent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
infoIntent.addCategory(Intent.CATEGORY_DEFAULT);
infoIntent.setData(Uri.parse("package:" + mPackageName));
mContext.startActivity(infoIntent);
return true;
case R.id.action_view_manifest:
Intent viewManifestIntent = new Intent(mContext, ViewManifestActivity.class);
viewManifestIntent.putExtra(ViewManifestActivity.EXTRA_PACKAGE_NAME, mPackageName);
mContext.startActivity(viewManifestIntent);
return true;
}
return false;
}
public boolean isSystemApp() {
try {
return (mContext.getPackageManager().getApplicationInfo(mPackageName, 0).flags & ApplicationInfo.FLAG_SYSTEM) != 0;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
}
}