/* * Copyright 2013 Chris Banes * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package uk.co.senab.actionbarpulltorefresh.extras.actionbarsherlock; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.app.SherlockExpandableListActivity; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.actionbarsherlock.app.SherlockListActivity; import com.actionbarsherlock.app.SherlockPreferenceActivity; import android.app.Activity; import android.content.Context; import android.os.Build; import android.view.View; import android.widget.FrameLayout; import uk.co.senab.actionbarpulltorefresh.library.EnvironmentDelegate; import uk.co.senab.actionbarpulltorefresh.library.HeaderTransformer; import uk.co.senab.actionbarpulltorefresh.library.Options; class AbsPullToRefreshAttacher extends uk.co.senab.actionbarpulltorefresh.library.PullToRefreshAttacher { private FrameLayout mHeaderViewWrapper; protected AbsPullToRefreshAttacher(Activity activity, Options options) { super(activity, options); } @Override protected void addHeaderViewToActivity(View headerViewLayout, Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { super.addHeaderViewToActivity(headerViewLayout, activity); } else { // On older devices we need to wrap the HeaderView in a FrameLayout otherwise // visibility changes do not take effect mHeaderViewWrapper = new FrameLayout(activity); mHeaderViewWrapper.addView(headerViewLayout); super.addHeaderViewToActivity(mHeaderViewWrapper, activity); } } @Override protected void removeHeaderViewFromActivity(View headerViewLayout, Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { super.removeHeaderViewFromActivity(headerViewLayout, activity); } else if (mHeaderViewWrapper != null) { super.removeHeaderViewFromActivity(mHeaderViewWrapper, activity); mHeaderViewWrapper = null; } } @Override protected EnvironmentDelegate createDefaultEnvironmentDelegate() { return new AbsEnvironmentDelegate(); } @Override protected HeaderTransformer createDefaultHeaderTransformer() { return new AbsDefaultHeaderTransformer(); } public static class AbsEnvironmentDelegate implements EnvironmentDelegate { /** * @return Context which should be used for inflating the header layout */ public Context getContextForInflater(Activity activity) { ActionBar ab = null; if (activity instanceof SherlockActivity) { ab = ((SherlockActivity) activity).getSupportActionBar(); } else if (activity instanceof SherlockListActivity) { ab = ((SherlockListActivity) activity).getSupportActionBar(); } else if (activity instanceof SherlockFragmentActivity) { ab = ((SherlockFragmentActivity) activity).getSupportActionBar(); } else if (activity instanceof SherlockExpandableListActivity) { ab = ((SherlockExpandableListActivity) activity).getSupportActionBar(); } else if (activity instanceof SherlockPreferenceActivity) { ab = ((SherlockPreferenceActivity) activity).getSupportActionBar(); } Context context = null; if (ab != null) { context = ab.getThemedContext(); } if (context == null) { context = activity; } return context; } } }