package com.android.settings;
import android.app.Activity;
+import android.app.Fragment;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
+import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
+import com.android.settings.applications.AppInfoBase;
+import com.android.settings.applications.InstalledAppDetails;
+
public class AppHeader {
+ public static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
+ // constant value that can be used to check return code from sub activity.
+ private static final int INSTALLED_APP_DETAILS = 1;
+
public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon,
- CharSequence label, final Intent settingsIntent) {
- createAppHeader(fragment, icon, label, settingsIntent, 0);
+ CharSequence label, String pkgName, int uid) {
+ createAppHeader(fragment, icon, label, pkgName, uid, 0);
}
public static void createAppHeader(Activity activity, Drawable icon, CharSequence label,
- final Intent settingsIntent, ViewGroup pinnedHeader) {
+ String pkgName, int uid, ViewGroup pinnedHeader) {
final View bar = activity.getLayoutInflater().inflate(R.layout.app_header,
pinnedHeader, false);
- setupHeaderView(activity, icon, label, settingsIntent, 0, bar);
+ setupHeaderView(activity, icon, label, pkgName, uid, false, 0, bar);
pinnedHeader.addView(bar);
}
public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon,
- CharSequence label, Intent settingsIntent, int tintColorRes) {
+ CharSequence label, String pkgName, int uid, int tintColorRes) {
View bar = fragment.setPinnedHeaderView(R.layout.app_header);
- setupHeaderView(fragment.getActivity(), icon, label, settingsIntent, tintColorRes, bar);
+ setupHeaderView(fragment.getActivity(), icon, label, pkgName, uid, includeAppInfo(fragment),
+ tintColorRes, bar);
}
private static View setupHeaderView(final Activity activity, Drawable icon, CharSequence label,
- final Intent settingsIntent, int tintColorRes, View bar) {
+ final String pkgName, final int uid, boolean includeAppInfo, int tintColorRes,
+ View bar) {
final ImageView appIcon = (ImageView) bar.findViewById(R.id.app_icon);
appIcon.setImageDrawable(icon);
if (tintColorRes != 0) {
appName.setText(label);
final View appSettings = bar.findViewById(R.id.app_settings);
- if (settingsIntent == null) {
- appSettings.setVisibility(View.GONE);
- } else {
+ if (includeAppInfo && pkgName != null && !pkgName.equals(Utils.OS_PKG)) {
appSettings.setClickable(true);
appSettings.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
- activity.startActivity(settingsIntent);
+ AppInfoBase.startAppInfoFragment(InstalledAppDetails.class,
+ R.string.application_info_label, pkgName, uid, activity,
+ INSTALLED_APP_DETAILS);
}
});
+ } else {
+ appSettings.setVisibility(View.GONE);
}
-
return bar;
}
+ private static boolean includeAppInfo(final Fragment fragment) {
+ Bundle args = fragment.getArguments();
+ boolean showInfo = true;
+ if (args != null && args.getBoolean(EXTRA_HIDE_INFO_BUTTON, false)) {
+ showInfo = false;
+ }
+ Intent intent = fragment.getActivity().getIntent();
+ if (intent != null && intent.getBooleanExtra(EXTRA_HIDE_INFO_BUTTON, false)) {
+ showInfo = false;
+ }
+ return showInfo;
+ }
}
// When we are going straight to an app then we are coming from App Info and want
// a header at the top.
FrameLayout pinnedHeader = (FrameLayout) rootView.findViewById(R.id.pinned_header);
- AppHeader.createAppHeader(getActivity(), detail.icon, detail.label, null, pinnedHeader);
- AppDetailsFragment.show(DataUsageSummary.this, app, detail.label, true);
+ AppHeader.createAppHeader(getActivity(), detail.icon, detail.label,
+ mShowAppImmediatePkg, uid, pinnedHeader);
+ AppDetailsFragment.show(DataUsageSummary.this, app, detail.label, false);
} catch (NameNotFoundException e) {
Log.w(TAG, "Could not find " + mShowAppImmediatePkg, e);
Toast.makeText(getActivity(), getString(R.string.unknown_app), Toast.LENGTH_LONG)
public static void startAppInfoFragment(Class<?> fragment, int titleRes,
String pkg, int uid, Fragment source, int request) {
+ startAppInfoFragment(fragment, titleRes, pkg, uid, source.getActivity(), request);
+ }
+
+ public static void startAppInfoFragment(Class<?> fragment, int titleRes,
+ String pkg, int uid, Activity source, int request) {
Bundle args = new Bundle();
args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg);
args.putInt(AppInfoBase.ARG_PACKAGE_UID, uid);
- Intent intent = Utils.onBuildStartFragmentIntent(source.getActivity(), fragment.getName(),
+ Intent intent = Utils.onBuildStartFragmentIntent(source, fragment.getName(),
args, null, titleRes, null, false);
- source.getActivity().startActivityForResultAsUser(intent, request,
+ source.startActivityForResultAsUser(intent, request,
new UserHandle(UserHandle.getUserId(uid)));
}
package com.android.settings.applications;
-import android.app.Fragment;
-import android.content.Intent;
-import android.net.Uri;
import android.os.Bundle;
-import android.provider.Settings;
import android.util.Log;
import com.android.settings.AppHeader;
public abstract class AppInfoWithHeader extends AppInfoBase {
- public static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
-
private boolean mCreated;
@Override
mCreated = true;
if (mPackageInfo == null) return;
AppHeader.createAppHeader(this, mPackageInfo.applicationInfo.loadIcon(mPm),
- mPackageInfo.applicationInfo.loadLabel(mPm), getInfoIntent(this, mPackageName), 0);
- }
-
- public static Intent getInfoIntent(Fragment fragment, String packageName) {
- Bundle args = fragment.getArguments();
- Intent intent = fragment.getActivity().getIntent();
- boolean showInfo = true;
- if (args != null && args.getBoolean(EXTRA_HIDE_INFO_BUTTON, false)) {
- showInfo = false;
- }
- if (intent != null && intent.getBooleanExtra(EXTRA_HIDE_INFO_BUTTON, false)) {
- showInfo = false;
- }
- Intent infoIntent = null;
- if (showInfo) {
- infoIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
- infoIntent.setData(Uri.fromParts("package", packageName, null));
- }
- return infoIntent;
+ mPackageInfo.applicationInfo.loadLabel(mPm), mPackageName,
+ mPackageInfo.applicationInfo.uid, 0);
}
}
import com.android.internal.logging.MetricsLogger;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
+import com.android.settings.AppHeader;
import com.android.settings.DataUsageSummary;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
// start new activity to manage app permissions
Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mAppEntry.info.packageName);
- intent.putExtra(AppInfoWithHeader.EXTRA_HIDE_INFO_BUTTON, true);
+ intent.putExtra(AppHeader.EXTRA_HIDE_INFO_BUTTON, true);
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
Bundle args = new Bundle();
args.putString(ARG_PACKAGE_NAME, mAppEntry.info.packageName);
args.putInt(ARG_PACKAGE_UID, mAppEntry.info.uid);
- args.putBoolean(AppInfoWithHeader.EXTRA_HIDE_INFO_BUTTON, true);
+ args.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, true);
SettingsActivity sa = (SettingsActivity) getActivity();
sa.startPreferencePanel(fragment.getName(), args, -1, title, this, SUB_INFO_FRAGMENT);
startAppInfoFragment(AppLaunchSettings.class, mLaunchPreference.getTitle());
} else if (preference == mMemoryPreference) {
ProcessStatsBase.launchMemoryDetail((SettingsActivity) getActivity(),
- mStatsManager.getMemInfo(), mStats);
+ mStatsManager.getMemInfo(), mStats, false);
} else if (preference == mDataPreference) {
Bundle args = new Bundle();
args.putString(DataUsageSummary.EXTRA_SHOW_APP_IMMEDIATE_PKG,
} else if (preference == mBatteryPreference) {
BatteryEntry entry = new BatteryEntry(getActivity(), null, mUserManager, mSipper);
PowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
- mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry, true);
+ mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry, true, false);
} else {
return false;
}
super.onViewCreated(view, savedInstanceState);
if (mListType == LIST_TYPE_STORAGE) {
FrameLayout pinnedHeader = (FrameLayout) mRootView.findViewById(R.id.pinned_header);
- AppHeader.createAppHeader(getActivity(), null, mVolumeName, null, pinnedHeader);
+ AppHeader.createAppHeader(getActivity(), null, mVolumeName, null, -1, pinnedHeader);
}
}
import android.widget.Spinner;
import com.android.internal.app.ProcessStats;
+import com.android.settings.AppHeader;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
public abstract void refreshUi();
public static void launchMemoryDetail(SettingsActivity activity, MemInfo memInfo,
- ProcStatsPackageEntry entry) {
+ ProcStatsPackageEntry entry, boolean includeAppInfo) {
Bundle args = new Bundle();
args.putParcelable(ProcessStatsDetail.EXTRA_PACKAGE_ENTRY, entry);
args.putDouble(ProcessStatsDetail.EXTRA_WEIGHT_TO_RAM, memInfo.weightToRam);
args.putDouble(ProcessStatsDetail.EXTRA_MAX_MEMORY_USAGE,
memInfo.usedWeight * memInfo.weightToRam);
args.putDouble(ProcessStatsDetail.EXTRA_TOTAL_SCALE, memInfo.totalScale);
+ args.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, !includeAppInfo);
activity.startPreferencePanel(ProcessStatsDetail.class.getName(), args,
R.string.memory_usage, null, null, 0);
}
AppHeader.createAppHeader(this,
mApp.mUiTargetApp != null ? mApp.mUiTargetApp.loadIcon(mPm) : new ColorDrawable(0),
- mApp.mUiLabel, mApp.mPackage.equals(Utils.OS_PKG) ? null
- : AppInfoWithHeader.getInfoIntent(this, mApp.mPackage));
+ mApp.mUiLabel, mApp.mPackage, mApp.mUiTargetApp.uid);
}
@Override
}
ProcessStatsPreference pgp = (ProcessStatsPreference) preference;
MemInfo memInfo = mStatsManager.getMemInfo();
- launchMemoryDetail((SettingsActivity) getActivity(), memInfo, pgp.getEntry());
+ launchMemoryDetail((SettingsActivity) getActivity(), memInfo, pgp.getEntry(), true);
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
public static void startBatteryDetailPage(
SettingsActivity caller, BatteryStatsHelper helper, int statsType, BatteryEntry entry,
- boolean showLocationButton) {
+ boolean showLocationButton, boolean includeAppInfo) {
// Initialize mStats if necessary.
helper.getStats();
}
args.putSerializable(PowerUsageDetail.EXTRA_DRAIN_TYPE, entry.sipper.drainType);
args.putBoolean(PowerUsageDetail.EXTRA_SHOW_LOCATION_BUTTON, showLocationButton);
+ args.putBoolean(AppHeader.EXTRA_HIDE_INFO_BUTTON, !includeAppInfo);
int userId = UserHandle.myUserId();
int[] types;
String pkg = args.getString(EXTRA_ICON_PACKAGE);
int iconId = args.getInt(EXTRA_ICON_ID, 0);
Drawable appIcon = null;
+ int uid = -1;
+ final PackageManager pm = getActivity().getPackageManager();
if (!TextUtils.isEmpty(pkg)) {
try {
- final PackageManager pm = getActivity().getPackageManager();
ApplicationInfo ai = pm.getPackageInfo(pkg, 0).applicationInfo;
if (ai != null) {
appIcon = ai.loadIcon(pm);
+ uid = ai.uid;
}
} catch (NameNotFoundException nnfe) {
// Use default icon
if (pkg == null && mPackages != null) {
pkg = mPackages[0];
}
- AppHeader.createAppHeader(this, appIcon, title,
- pkg != null ? AppInfoWithHeader.getInfoIntent(this, pkg) : null,
+ AppHeader.createAppHeader(this, appIcon, title, pkg, uid,
mDrainType != DrainType.APP ? android.R.color.white : 0);
}
import com.android.settings.R;
import com.android.settings.Settings.HighPowerApplicationsActivity;
import com.android.settings.SettingsActivity;
+import com.android.settings.Utils;
import com.android.settings.applications.ManageApplications;
import java.util.ArrayList;
PowerGaugePreference pgp = (PowerGaugePreference) preference;
BatteryEntry entry = pgp.getInfo();
PowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(), mStatsHelper,
- mStatsType, entry, true);
+ mStatsType, entry, true, true);
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.applications.AppInfoBase;
-import com.android.settings.applications.AppInfoWithHeader;
import com.android.settings.notification.NotificationBackend.AppRow;
import java.util.List;
}
mCreated = true;
if (mAppRow == null) return;
- AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label,
- AppInfoWithHeader.getInfoIntent(this, mAppRow.pkg));
+ AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label, mAppRow.pkg, mAppRow.uid);
}
@Override