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
This commit is contained in:
@@ -26,6 +26,11 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:background="@drawable/default_preference_background">
|
android:background="@drawable/default_preference_background">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/pinned_header"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
<include layout="@layout/tab_widget" />
|
<include layout="@layout/tab_widget" />
|
||||||
|
|
||||||
<!-- give an empty content area to make tabhost happy -->
|
<!-- give an empty content area to make tabhost happy -->
|
||||||
|
@@ -30,6 +30,11 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:visibility="gone">
|
android:visibility="gone">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:id="@+id/pinned_header"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
|
||||||
<FrameLayout android:layout_width="match_parent"
|
<FrameLayout android:layout_width="match_parent"
|
||||||
android:layout_height="0px"
|
android:layout_height="0px"
|
||||||
android:layout_weight="1">
|
android:layout_weight="1">
|
||||||
|
@@ -28,18 +28,27 @@ import android.widget.TextView;
|
|||||||
|
|
||||||
public class AppHeader {
|
public class AppHeader {
|
||||||
|
|
||||||
public static void createAppHeader(final Activity activity, Drawable icon, CharSequence label,
|
public static void createAppHeader(SettingsPreferenceFragment fragment, Drawable icon,
|
||||||
final Intent settingsIntent) {
|
CharSequence label, final Intent settingsIntent) {
|
||||||
createAppHeader(activity, icon, label, settingsIntent, 0);
|
createAppHeader(fragment, icon, label, settingsIntent, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void createAppHeader(final Activity activity, Drawable icon, CharSequence label,
|
public static void createAppHeader(Activity activity, Drawable icon, CharSequence label,
|
||||||
final Intent settingsIntent, int tintColorRes) {
|
final Intent settingsIntent, ViewGroup pinnedHeader) {
|
||||||
final View content = activity.findViewById(R.id.main_content);
|
|
||||||
final ViewGroup contentParent = (ViewGroup) content.getParent();
|
|
||||||
final View bar = activity.getLayoutInflater().inflate(R.layout.app_header,
|
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);
|
final ImageView appIcon = (ImageView) bar.findViewById(R.id.app_icon);
|
||||||
appIcon.setImageDrawable(icon);
|
appIcon.setImageDrawable(icon);
|
||||||
if (tintColorRes != 0) {
|
if (tintColorRes != 0) {
|
||||||
@@ -61,7 +70,8 @@ public class AppHeader {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
contentParent.addView(bar, 0);
|
|
||||||
|
return bar;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -112,6 +112,7 @@ import android.widget.AdapterView.OnItemSelectedListener;
|
|||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.BaseAdapter;
|
import android.widget.BaseAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
@@ -120,12 +121,12 @@ import android.widget.ProgressBar;
|
|||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
import android.widget.Switch;
|
import android.widget.Switch;
|
||||||
import android.widget.TabHost;
|
import android.widget.TabHost;
|
||||||
import android.widget.Toast;
|
|
||||||
import android.widget.TabHost.OnTabChangeListener;
|
import android.widget.TabHost.OnTabChangeListener;
|
||||||
import android.widget.TabHost.TabContentFactory;
|
import android.widget.TabHost.TabContentFactory;
|
||||||
import android.widget.TabHost.TabSpec;
|
import android.widget.TabHost.TabSpec;
|
||||||
import android.widget.TabWidget;
|
import android.widget.TabWidget;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.telephony.PhoneConstants;
|
import com.android.internal.telephony.PhoneConstants;
|
||||||
@@ -464,12 +465,12 @@ public class DataUsageSummary extends HighlightingFragment implements Indexable
|
|||||||
mListView.setOnItemClickListener(mListListener);
|
mListView.setOnItemClickListener(mListListener);
|
||||||
mListView.setAdapter(mAdapter);
|
mListView.setAdapter(mAdapter);
|
||||||
|
|
||||||
showRequestedAppIfNeeded();
|
showRequestedAppIfNeeded(view);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showRequestedAppIfNeeded() {
|
private void showRequestedAppIfNeeded(View rootView) {
|
||||||
if (mShowAppImmediatePkg == null) {
|
if (mShowAppImmediatePkg == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -482,7 +483,8 @@ public class DataUsageSummary extends HighlightingFragment implements Indexable
|
|||||||
final UidDetail detail = mUidDetailProvider.getUidDetail(app.key, true);
|
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
|
// When we are going straight to an app then we are coming from App Info and want
|
||||||
// a header at the top.
|
// 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);
|
AppDetailsFragment.show(DataUsageSummary.this, app, detail.label, false);
|
||||||
} catch (NameNotFoundException e) {
|
} catch (NameNotFoundException e) {
|
||||||
Log.w(TAG, "Could not find " + mShowAppImmediatePkg, e);
|
Log.w(TAG, "Could not find " + mShowAppImmediatePkg, e);
|
||||||
|
@@ -37,12 +37,13 @@ import android.util.Log;
|
|||||||
|
|
||||||
import com.android.settings.InstrumentedPreferenceFragment;
|
import com.android.settings.InstrumentedPreferenceFragment;
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
|
import com.android.settings.SettingsPreferenceFragment;
|
||||||
import com.android.settings.Utils;
|
import com.android.settings.Utils;
|
||||||
import com.android.settings.applications.ApplicationsState.AppEntry;
|
import com.android.settings.applications.ApplicationsState.AppEntry;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
public abstract class AppInfoBase extends InstrumentedPreferenceFragment
|
public abstract class AppInfoBase extends SettingsPreferenceFragment
|
||||||
implements ApplicationsState.Callbacks {
|
implements ApplicationsState.Callbacks {
|
||||||
|
|
||||||
public static final String ARG_PACKAGE_NAME = "package";
|
public static final String ARG_PACKAGE_NAME = "package";
|
||||||
|
@@ -34,7 +34,7 @@ public abstract class AppInfoWithHeader extends AppInfoBase {
|
|||||||
}
|
}
|
||||||
mCreated = true;
|
mCreated = true;
|
||||||
if (mPackageInfo == null) return;
|
if (mPackageInfo == null) return;
|
||||||
AppHeader.createAppHeader(getActivity(), mPackageInfo.applicationInfo.loadIcon(mPm),
|
AppHeader.createAppHeader(this, mPackageInfo.applicationInfo.loadIcon(mPm),
|
||||||
mPackageInfo.applicationInfo.loadLabel(mPm), null);
|
mPackageInfo.applicationInfo.loadLabel(mPm), null, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -45,6 +45,7 @@ import android.widget.ArrayAdapter;
|
|||||||
import android.widget.BaseAdapter;
|
import android.widget.BaseAdapter;
|
||||||
import android.widget.Filter;
|
import android.widget.Filter;
|
||||||
import android.widget.Filterable;
|
import android.widget.Filterable;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
|
|
||||||
@@ -298,15 +299,14 @@ public class ManageApplications extends InstrumentedFragment
|
|||||||
|
|
||||||
private void createHeader() {
|
private void createHeader() {
|
||||||
Activity activity = getActivity();
|
Activity activity = getActivity();
|
||||||
View content = activity.findViewById(R.id.main_content);
|
FrameLayout pinnedHeader = (FrameLayout) mRootView.findViewById(R.id.pinned_header);
|
||||||
ViewGroup contentParent = (ViewGroup) content.getParent();
|
|
||||||
mSpinnerHeader = (ViewGroup) activity.getLayoutInflater()
|
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);
|
mFilterSpinner = (Spinner) mSpinnerHeader.findViewById(R.id.filter_spinner);
|
||||||
mFilterAdapter = new FilterSpinnerAdapter(this);
|
mFilterAdapter = new FilterSpinnerAdapter(this);
|
||||||
mFilterSpinner.setAdapter(mFilterAdapter);
|
mFilterSpinner.setAdapter(mFilterAdapter);
|
||||||
mFilterSpinner.setOnItemSelectedListener(this);
|
mFilterSpinner.setOnItemSelectedListener(this);
|
||||||
contentParent.addView(mSpinnerHeader, 0);
|
pinnedHeader.addView(mSpinnerHeader, 0);
|
||||||
|
|
||||||
mFilterAdapter.enableFilter(getDefaultFilter());
|
mFilterAdapter.enableFilter(getDefaultFilter());
|
||||||
if (mListType == LIST_TYPE_MAIN || mListType == LIST_TYPE_NOTIFICATION) {
|
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) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
if (mListType == LIST_TYPE_STORAGE) {
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -112,7 +112,7 @@ public class ProcessStatsDetail extends SettingsPreferenceFragment
|
|||||||
public void onViewCreated(View view, Bundle savedInstanceState) {
|
public void onViewCreated(View view, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
|
|
||||||
AppHeader.createAppHeader(getActivity(),
|
AppHeader.createAppHeader(this,
|
||||||
mApp.mUiTargetApp != null ? mApp.mUiTargetApp.loadIcon(mPm) : new ColorDrawable(0),
|
mApp.mUiTargetApp != null ? mApp.mUiTargetApp.loadIcon(mPm) : new ColorDrawable(0),
|
||||||
mApp.mUiLabel, null);
|
mApp.mUiLabel, null);
|
||||||
}
|
}
|
||||||
|
@@ -464,7 +464,7 @@ public class PowerUsageDetail extends PowerUsageBase implements Button.OnClickLi
|
|||||||
appIcon = getActivity().getPackageManager().getDefaultActivityIcon();
|
appIcon = getActivity().getPackageManager().getDefaultActivityIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
AppHeader.createAppHeader(getActivity(), appIcon, title, null,
|
AppHeader.createAppHeader(this, appIcon, title, null,
|
||||||
mDrainType != DrainType.APP ? android.R.color.white : 0);
|
mDrainType != DrainType.APP ? android.R.color.white : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -84,7 +84,7 @@ public class AppNotificationSettings extends SettingsPreferenceFragment {
|
|||||||
}
|
}
|
||||||
mCreated = true;
|
mCreated = true;
|
||||||
if (mAppRow == null) return;
|
if (mAppRow == null) return;
|
||||||
AppHeader.createAppHeader(getActivity(), mAppRow.icon, mAppRow.label,
|
AppHeader.createAppHeader(this, mAppRow.icon, mAppRow.label,
|
||||||
mAppRow.settingsIntent);
|
mAppRow.settingsIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user