From e492ee06adbf4661d8b8b53f41f236c9173c5ca4 Mon Sep 17 00:00:00 2001 From: Julia Reynolds Date: Wed, 19 Aug 2015 10:21:52 -0400 Subject: [PATCH] Make the app header bar more consistent. - Don't include info link if just came from app info page - include back button on app info page when launched from header Bug: 22203029 Change-Id: I737332a487c41e0a93d161b55659700a1f936844 --- src/com/android/settings/AppHeader.java | 48 ++++++++++++++++------ src/com/android/settings/DataUsageSummary.java | 5 ++- .../android/settings/applications/AppInfoBase.java | 9 +++- .../settings/applications/AppInfoWithHeader.java | 27 +----------- .../settings/applications/InstalledAppDetails.java | 9 ++-- .../settings/applications/ManageApplications.java | 2 +- .../settings/applications/ProcessStatsBase.java | 4 +- .../settings/applications/ProcessStatsDetail.java | 3 +- .../settings/applications/ProcessStatsUi.java | 2 +- .../settings/fuelgauge/PowerUsageDetail.java | 10 +++-- .../settings/fuelgauge/PowerUsageSummary.java | 3 +- .../notification/AppNotificationSettings.java | 4 +- 12 files changed, 68 insertions(+), 58 deletions(-) diff --git a/src/com/android/settings/AppHeader.java b/src/com/android/settings/AppHeader.java index 71c2255ad0..257b2f0ad8 100644 --- a/src/com/android/settings/AppHeader.java +++ b/src/com/android/settings/AppHeader.java @@ -17,38 +17,49 @@ 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) { @@ -59,19 +70,32 @@ public class AppHeader { 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; + } } diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java index 35a85b5646..4b8fa074e7 100644 --- a/src/com/android/settings/DataUsageSummary.java +++ b/src/com/android/settings/DataUsageSummary.java @@ -486,8 +486,9 @@ public class DataUsageSummary extends HighlightingFragment implements Indexable // 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) diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java index ff618c2a20..f229b3d074 100644 --- a/src/com/android/settings/applications/AppInfoBase.java +++ b/src/com/android/settings/applications/AppInfoBase.java @@ -195,13 +195,18 @@ public abstract class AppInfoBase extends SettingsPreferenceFragment 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))); } diff --git a/src/com/android/settings/applications/AppInfoWithHeader.java b/src/com/android/settings/applications/AppInfoWithHeader.java index 5bfd79a4dd..004ce0cc64 100644 --- a/src/com/android/settings/applications/AppInfoWithHeader.java +++ b/src/com/android/settings/applications/AppInfoWithHeader.java @@ -16,19 +16,13 @@ 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 @@ -41,24 +35,7 @@ public abstract class AppInfoWithHeader extends AppInfoBase { 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); } } diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java index a6b35df969..1d5ed876ac 100755 --- a/src/com/android/settings/applications/InstalledAppDetails.java +++ b/src/com/android/settings/applications/InstalledAppDetails.java @@ -67,6 +67,7 @@ import android.widget.TextView; 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; @@ -680,7 +681,7 @@ public class InstalledAppDetails extends AppInfoBase // 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) { @@ -693,7 +694,7 @@ public class InstalledAppDetails extends AppInfoBase 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); @@ -742,7 +743,7 @@ public class InstalledAppDetails extends AppInfoBase 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, @@ -754,7 +755,7 @@ public class InstalledAppDetails extends AppInfoBase } 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; } diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index 61c2ebb157..a0c1c137a1 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -363,7 +363,7 @@ public class ManageApplications extends InstrumentedFragment 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); } } diff --git a/src/com/android/settings/applications/ProcessStatsBase.java b/src/com/android/settings/applications/ProcessStatsBase.java index b072ebeee2..ee53bf9165 100644 --- a/src/com/android/settings/applications/ProcessStatsBase.java +++ b/src/com/android/settings/applications/ProcessStatsBase.java @@ -24,6 +24,7 @@ import android.widget.ArrayAdapter; 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; @@ -128,7 +129,7 @@ public abstract class ProcessStatsBase extends 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); @@ -136,6 +137,7 @@ public abstract class ProcessStatsBase extends SettingsPreferenceFragment 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); } diff --git a/src/com/android/settings/applications/ProcessStatsDetail.java b/src/com/android/settings/applications/ProcessStatsDetail.java index 2037113c80..2fe5bd8f2e 100644 --- a/src/com/android/settings/applications/ProcessStatsDetail.java +++ b/src/com/android/settings/applications/ProcessStatsDetail.java @@ -121,8 +121,7 @@ public class ProcessStatsDetail extends SettingsPreferenceFragment { 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 diff --git a/src/com/android/settings/applications/ProcessStatsUi.java b/src/com/android/settings/applications/ProcessStatsUi.java index e2de91f4fa..ac78c176e5 100644 --- a/src/com/android/settings/applications/ProcessStatsUi.java +++ b/src/com/android/settings/applications/ProcessStatsUi.java @@ -108,7 +108,7 @@ public class ProcessStatsUi extends ProcessStatsBase { } 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); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java index 129322b40f..b7a0df2e4c 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java @@ -84,7 +84,7 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi public static void startBatteryDetailPage( SettingsActivity caller, BatteryStatsHelper helper, int statsType, BatteryEntry entry, - boolean showLocationButton) { + boolean showLocationButton, boolean includeAppInfo) { // Initialize mStats if necessary. helper.getStats(); @@ -104,6 +104,7 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi } 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; @@ -462,13 +463,15 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi 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 @@ -483,8 +486,7 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi 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); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 1031874d5a..bf49208df3 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -43,6 +43,7 @@ import com.android.settings.HelpUtils; 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; @@ -123,7 +124,7 @@ public class PowerUsageSummary extends PowerUsageBase { 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); } diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index 2ed6d854fd..bc89526dd4 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -44,7 +44,6 @@ import com.android.settings.R; 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; @@ -86,8 +85,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { } 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 -- 2.11.0