From 20f464eddec2ffa64a385a1e9f51b9b8766ecf50 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Wed, 6 May 2015 16:00:25 -0400 Subject: [PATCH] Fix app headers in settings Use SettingsPreferenceFragment's method for pinned headers where possible, and add a frame within the fragment for them to live in otherwise so that this view doesn't end up on the activity. Bug: 20886475 Change-Id: I985eb1497744ea50bfabed862e5088eb89df5b61 --- res/layout/data_usage_summary.xml | 5 ++++ res/layout/manage_applications_apps.xml | 5 ++++ src/com/android/settings/AppHeader.java | 28 +++++++++++++------ .../android/settings/DataUsageSummary.java | 10 ++++--- .../settings/applications/AppInfoBase.java | 3 +- .../applications/AppInfoWithHeader.java | 4 +-- .../applications/ManageApplications.java | 11 ++++---- .../applications/ProcessStatsDetail.java | 2 +- .../settings/fuelgauge/PowerUsageDetail.java | 2 +- .../notification/AppNotificationSettings.java | 2 +- 10 files changed, 48 insertions(+), 24 deletions(-) diff --git a/res/layout/data_usage_summary.xml b/res/layout/data_usage_summary.xml index 66341053d5b..88750040e96 100644 --- a/res/layout/data_usage_summary.xml +++ b/res/layout/data_usage_summary.xml @@ -26,6 +26,11 @@ android:orientation="vertical" android:background="@drawable/default_preference_background"> + + diff --git a/res/layout/manage_applications_apps.xml b/res/layout/manage_applications_apps.xml index 044cdb4b925..e4ec8715896 100644 --- a/res/layout/manage_applications_apps.xml +++ b/res/layout/manage_applications_apps.xml @@ -30,6 +30,11 @@ android:orientation="vertical" android:visibility="gone"> + + diff --git a/src/com/android/settings/AppHeader.java b/src/com/android/settings/AppHeader.java index 2f3678b942c..71c2255ad0e 100644 --- a/src/com/android/settings/AppHeader.java +++ b/src/com/android/settings/AppHeader.java @@ -28,18 +28,27 @@ import android.widget.TextView; public class AppHeader { - public static void createAppHeader(final Activity activity, Drawable icon, CharSequence label, - final Intent settingsIntent) { - createAppHeader(activity, icon, label, settingsIntent, 0); + public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon, + CharSequence label, final Intent settingsIntent) { + createAppHeader(fragment, icon, label, settingsIntent, 0); } - public static void createAppHeader(final Activity activity, Drawable icon, CharSequence label, - final Intent settingsIntent, int tintColorRes) { - final View content = activity.findViewById(R.id.main_content); - final ViewGroup contentParent = (ViewGroup) content.getParent(); + public static void createAppHeader(Activity activity, Drawable icon, CharSequence label, + final Intent settingsIntent, ViewGroup pinnedHeader) { final View bar = activity.getLayoutInflater().inflate(R.layout.app_header, - contentParent, false); + pinnedHeader, false); + setupHeaderView(activity, icon, label, settingsIntent, 0, bar); + pinnedHeader.addView(bar); + } + public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon, + CharSequence label, Intent settingsIntent, int tintColorRes) { + View bar = fragment.setPinnedHeaderView(R.layout.app_header); + setupHeaderView(fragment.getActivity(), icon, label, settingsIntent, tintColorRes, bar); + } + + private static View setupHeaderView(final Activity activity, Drawable icon, CharSequence label, + final Intent settingsIntent, int tintColorRes, View bar) { final ImageView appIcon = (ImageView) bar.findViewById(R.id.app_icon); appIcon.setImageDrawable(icon); if (tintColorRes != 0) { @@ -61,7 +70,8 @@ public class AppHeader { } }); } - contentParent.addView(bar, 0); + + return bar; } } diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java index 27a486cc0d1..7eec3dfff58 100644 --- a/src/com/android/settings/DataUsageSummary.java +++ b/src/com/android/settings/DataUsageSummary.java @@ -112,6 +112,7 @@ import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Button; +import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; @@ -120,12 +121,12 @@ import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.Switch; import android.widget.TabHost; -import android.widget.Toast; import android.widget.TabHost.OnTabChangeListener; import android.widget.TabHost.TabContentFactory; import android.widget.TabHost.TabSpec; import android.widget.TabWidget; import android.widget.TextView; +import android.widget.Toast; import com.android.internal.logging.MetricsLogger; import com.android.internal.telephony.PhoneConstants; @@ -464,12 +465,12 @@ public class DataUsageSummary extends HighlightingFragment implements Indexable mListView.setOnItemClickListener(mListListener); mListView.setAdapter(mAdapter); - showRequestedAppIfNeeded(); + showRequestedAppIfNeeded(view); return view; } - private void showRequestedAppIfNeeded() { + private void showRequestedAppIfNeeded(View rootView) { if (mShowAppImmediatePkg == null) { return; } @@ -482,7 +483,8 @@ public class DataUsageSummary extends HighlightingFragment implements Indexable final UidDetail detail = mUidDetailProvider.getUidDetail(app.key, true); // When we are going straight to an app then we are coming from App Info and want // a header at the top. - AppHeader.createAppHeader(getActivity(), detail.icon, detail.label, null); + 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, false); } catch (NameNotFoundException e) { Log.w(TAG, "Could not find " + mShowAppImmediatePkg, e); diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java index 2d402e53a49..e42f246436b 100644 --- a/src/com/android/settings/applications/AppInfoBase.java +++ b/src/com/android/settings/applications/AppInfoBase.java @@ -37,12 +37,13 @@ import android.util.Log; import com.android.settings.InstrumentedPreferenceFragment; import com.android.settings.SettingsActivity; +import com.android.settings.SettingsPreferenceFragment; import com.android.settings.Utils; import com.android.settings.applications.ApplicationsState.AppEntry; import java.util.ArrayList; -public abstract class AppInfoBase extends InstrumentedPreferenceFragment +public abstract class AppInfoBase extends SettingsPreferenceFragment implements ApplicationsState.Callbacks { public static final String ARG_PACKAGE_NAME = "package"; diff --git a/src/com/android/settings/applications/AppInfoWithHeader.java b/src/com/android/settings/applications/AppInfoWithHeader.java index f7546f28761..f8feaf16bad 100644 --- a/src/com/android/settings/applications/AppInfoWithHeader.java +++ b/src/com/android/settings/applications/AppInfoWithHeader.java @@ -34,7 +34,7 @@ public abstract class AppInfoWithHeader extends AppInfoBase { } mCreated = true; if (mPackageInfo == null) return; - AppHeader.createAppHeader(getActivity(), mPackageInfo.applicationInfo.loadIcon(mPm), - mPackageInfo.applicationInfo.loadLabel(mPm), null); + AppHeader.createAppHeader(this, mPackageInfo.applicationInfo.loadIcon(mPm), + mPackageInfo.applicationInfo.loadLabel(mPm), null, 0); } } diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index b55cc445566..3107efdfea0 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -45,6 +45,7 @@ import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Filter; import android.widget.Filterable; +import android.widget.FrameLayout; import android.widget.ListView; import android.widget.Spinner; @@ -298,15 +299,14 @@ public class ManageApplications extends InstrumentedFragment private void createHeader() { Activity activity = getActivity(); - View content = activity.findViewById(R.id.main_content); - ViewGroup contentParent = (ViewGroup) content.getParent(); + FrameLayout pinnedHeader = (FrameLayout) mRootView.findViewById(R.id.pinned_header); mSpinnerHeader = (ViewGroup) activity.getLayoutInflater() - .inflate(R.layout.apps_filter_spinner, contentParent, false); + .inflate(R.layout.apps_filter_spinner, pinnedHeader, false); mFilterSpinner = (Spinner) mSpinnerHeader.findViewById(R.id.filter_spinner); mFilterAdapter = new FilterSpinnerAdapter(this); mFilterSpinner.setAdapter(mFilterAdapter); mFilterSpinner.setOnItemSelectedListener(this); - contentParent.addView(mSpinnerHeader, 0); + pinnedHeader.addView(mSpinnerHeader, 0); mFilterAdapter.enableFilter(getDefaultFilter()); if (mListType == LIST_TYPE_MAIN || mListType == LIST_TYPE_NOTIFICATION) { @@ -333,7 +333,8 @@ public class ManageApplications extends InstrumentedFragment public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (mListType == LIST_TYPE_STORAGE) { - AppHeader.createAppHeader(getActivity(), null, mVolumeName, null); + FrameLayout pinnedHeader = (FrameLayout) mRootView.findViewById(R.id.pinned_header); + AppHeader.createAppHeader(getActivity(), null, mVolumeName, null, pinnedHeader); } } diff --git a/src/com/android/settings/applications/ProcessStatsDetail.java b/src/com/android/settings/applications/ProcessStatsDetail.java index 191e7e97df1..55538bc99ae 100644 --- a/src/com/android/settings/applications/ProcessStatsDetail.java +++ b/src/com/android/settings/applications/ProcessStatsDetail.java @@ -112,7 +112,7 @@ public class ProcessStatsDetail extends SettingsPreferenceFragment public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - AppHeader.createAppHeader(getActivity(), + AppHeader.createAppHeader(this, mApp.mUiTargetApp != null ? mApp.mUiTargetApp.loadIcon(mPm) : new ColorDrawable(0), mApp.mUiLabel, null); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageDetail.java b/src/com/android/settings/fuelgauge/PowerUsageDetail.java index 4aa935ab852..bac82022155 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java +++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java @@ -464,7 +464,7 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi appIcon = getActivity().getPackageManager().getDefaultActivityIcon(); } - AppHeader.createAppHeader(getActivity(), appIcon, title, null, + AppHeader.createAppHeader(this, appIcon, title, null, mDrainType != DrainType.APP ? android.R.color.white : 0); } diff --git a/src/com/android/settings/notification/AppNotificationSettings.java b/src/com/android/settings/notification/AppNotificationSettings.java index 883975a5a7d..28245c8c89d 100644 --- a/src/com/android/settings/notification/AppNotificationSettings.java +++ b/src/com/android/settings/notification/AppNotificationSettings.java @@ -84,7 +84,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment { } mCreated = true; if (mAppRow == null) return; - AppHeader.createAppHeader(getActivity(), mAppRow.icon, mAppRow.label, + AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label, mAppRow.settingsIntent); }