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
diff --git a/src/com/android/settings/AppHeader.java b/src/com/android/settings/AppHeader.java
index 2f3678b..71c2255 100644
--- a/src/com/android/settings/AppHeader.java
+++ b/src/com/android/settings/AppHeader.java
@@ -28,18 +28,27 @@
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 @@
}
});
}
- contentParent.addView(bar, 0);
+
+ return bar;
}
}
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index 27a486c..7eec3df 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -112,6 +112,7 @@
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.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 @@
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 @@
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 2d402e5..e42f246 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -37,12 +37,13 @@
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 f7546f2..f8feaf1 100644
--- a/src/com/android/settings/applications/AppInfoWithHeader.java
+++ b/src/com/android/settings/applications/AppInfoWithHeader.java
@@ -34,7 +34,7 @@
}
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 b55cc44..3107efd 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -45,6 +45,7 @@
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 @@
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 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 191e7e9..55538bc 100644
--- a/src/com/android/settings/applications/ProcessStatsDetail.java
+++ b/src/com/android/settings/applications/ProcessStatsDetail.java
@@ -112,7 +112,7 @@
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 4aa935a..bac8202 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageDetail.java
@@ -464,7 +464,7 @@
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 883975a..28245c8 100644
--- a/src/com/android/settings/notification/AppNotificationSettings.java
+++ b/src/com/android/settings/notification/AppNotificationSettings.java
@@ -84,7 +84,7 @@
}
mCreated = true;
if (mAppRow == null) return;
- AppHeader.createAppHeader(getActivity(), mAppRow.icon, mAppRow.label,
+ AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label,
mAppRow.settingsIntent);
}