<step category="com.android.settings.suggested.category.DEFERRED_SETUP"
exclusive="true" />
<step category="com.android.settings.suggested.category.FIRST_IMPRESSION"
- exclusiveExpireDays="7"
+ exclusiveExpireDays="14"
exclusive="true"
multiple="true" />
<step category="com.android.settings.suggested.category.LOCK_SCREEN" />
mRemoveAccountController = new RemoveAccountPreferenceController(context, this);
controllers.add(mRemoveAccountController);
controllers.add(new AccountHeaderPreferenceController(
- context, getActivity(), this, getArguments()));
+ context, getLifecycle(), getActivity(), this, getArguments()));
return controllers;
}
import android.accounts.Account;
import android.app.Activity;
-import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.os.UserHandle;
+import android.support.v14.preference.PreferenceFragment;
import android.support.v7.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.PreferenceController;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.accounts.AuthenticatorHelper;
+import com.android.settingslib.core.lifecycle.Lifecycle;
import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_ACCOUNT;
import static com.android.settings.accounts.AccountDetailDashboardFragment.KEY_USER_HANDLE;
private static final String KEY_ACCOUNT_HEADER = "account_header";
private final Activity mActivity;
- private final Fragment mHost;
+ private final PreferenceFragment mHost;
private final Account mAccount;
private final UserHandle mUserHandle;
+ private final Lifecycle mLifecycle;
- public AccountHeaderPreferenceController(Context context, Activity activity, Fragment host,
- Bundle args) {
+ public AccountHeaderPreferenceController(Context context, Lifecycle lifecycle,
+ Activity activity, PreferenceFragment host, Bundle args) {
super(context);
mActivity = activity;
mHost = host;
+ mLifecycle = lifecycle;
if (args != null && args.containsKey(KEY_ACCOUNT)) {
mAccount = args.getParcelable(KEY_ACCOUNT);
} else {
EntityHeaderController
.newInstance(mActivity, mHost, headerPreference.findViewById(R.id.entity_header))
+ .setRecyclerView(mHost.getListView(), mLifecycle)
.setLabel(mAccount.name)
.setIcon(helper.getDrawableForType(mContext, mAccount.type))
.done(mActivity, true /* rebindButtons */);
final Activity activity = getActivity();
final Preference pref = EntityHeaderController
.newInstance(activity, this, null /* header */)
+ .setRecyclerView(getListView(), getLifecycle())
.setIcon(IconDrawableFactory.newInstance(activity)
.getBadgedIcon(mPackageInfo.applicationInfo))
.setLabel(mPackageInfo.applicationInfo.loadLabel(mPm))
mHeader = (LayoutPreference) findPreference(KEY_HEADER);
mActionButtons = (LayoutPreference) findPreference(KEY_ACTION_BUTTONS);
EntityHeaderController.newInstance(activity, this, mHeader.findViewById(R.id.entity_header))
+ .setRecyclerView(getListView(), getLifecycle())
.setPackageName(mPackageName)
.setButtonActions(EntityHeaderController.ActionType.ACTION_APP_PREFERENCE,
EntityHeaderController.ActionType.ACTION_NONE)
final CharSequence summary =
isInstantApp ? null : getString(Utils.getInstallationStatus(mAppEntry.info));
EntityHeaderController.newInstance(activity, this, appSnippet)
- .setLabel(mAppEntry)
- .setIcon(mAppEntry)
- .setSummary(summary)
- .setIsInstantApp(isInstantApp)
- .done(activity, false /* rebindActions */);
+ .setLabel(mAppEntry)
+ .setIcon(mAppEntry)
+ .setSummary(summary)
+ .setIsInstantApp(isInstantApp)
+ .done(activity, false /* rebindActions */);
mVersionPreference.setSummary(getString(R.string.version_text, pkgInfo.versionName));
}
final Activity activity = getActivity();
final Preference pref = EntityHeaderController
.newInstance(activity, this, null /* appHeader */)
- .setIcon(mApp.mUiTargetApp != null
- ? IconDrawableFactory.newInstance(activity).getBadgedIcon(mApp.mUiTargetApp)
- : new ColorDrawable(0))
- .setLabel(mApp.mUiLabel)
- .setPackageName(mApp.mPackage)
- .setUid(mApp.mUiTargetApp != null
- ? mApp.mUiTargetApp.uid
- : UserHandle.USER_NULL)
- .setButtonActions(ActionType.ACTION_APP_INFO, ActionType.ACTION_NONE)
- .done(activity, getPrefContext());
+ .setRecyclerView(getListView(), getLifecycle())
+ .setIcon(mApp.mUiTargetApp != null
+ ? IconDrawableFactory.newInstance(activity).getBadgedIcon(mApp.mUiTargetApp)
+ : new ColorDrawable(0))
+ .setLabel(mApp.mUiLabel)
+ .setPackageName(mApp.mPackage)
+ .setUid(mApp.mUiTargetApp != null
+ ? mApp.mUiTargetApp.uid
+ : UserHandle.USER_NULL)
+ .setButtonActions(ActionType.ACTION_APP_INFO, ActionType.ACTION_NONE)
+ .done(activity, getPrefContext());
getPreferenceScreen().addPreference(pref);
}
final Activity activity = getActivity();
final Preference pref = EntityHeaderController
.newInstance(activity, this, null /* header */)
+ .setRecyclerView(getListView(), getLifecycle())
.setButtonActions(showInfoButton
? EntityHeaderController.ActionType.ACTION_APP_INFO
: EntityHeaderController.ActionType.ACTION_NONE,
final Bundle bundle = getArguments();
EntityHeaderController controller = EntityHeaderController
.newInstance(context, this, appSnippet)
+ .setRecyclerView(getListView(), getLifecycle())
.setButtonActions(EntityHeaderController.ActionType.ACTION_NONE,
EntityHeaderController.ActionType.ACTION_NONE);
final Activity activity = getActivity();
final Preference pref = EntityHeaderController
.newInstance(activity, this /* fragment */, null /* header */)
+ .setRecyclerView(getListView(), getLifecycle())
.setIcon(mAppRow.icon)
.setLabel(mAppRow.label)
.setPackageName(mAppRow.pkg)
final Activity activity = getActivity();
final Preference pref = EntityHeaderController
.newInstance(activity, this /* fragment */, null /* header */)
+ .setRecyclerView(getListView(), getLifecycle())
.setIcon(mAppRow.icon)
.setLabel(mChannel.getName())
.setSummary(mAppRow.label)
--- /dev/null
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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 com.android.settings.widget;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.support.v7.widget.RecyclerView;
+import android.view.View;
+
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+public class ActionBarShadowController implements LifecycleObserver, OnStart, OnStop {
+
+ private ScrollChangeWatcher mScrollChangeWatcher;
+ private RecyclerView mRecyclerView;
+ private boolean isScrollWatcherAttached;
+
+ public static ActionBarShadowController attachToRecyclerView(Activity activity,
+ Lifecycle lifecycle, RecyclerView recyclerView) {
+ return new ActionBarShadowController(activity, lifecycle, recyclerView);
+ }
+
+ private ActionBarShadowController(Activity activity, Lifecycle lifecycle,
+ RecyclerView recyclerView) {
+ mScrollChangeWatcher = new ScrollChangeWatcher(activity);
+ mRecyclerView = recyclerView;
+ attachScrollWatcher();
+ lifecycle.addObserver(this);
+ }
+
+ @Override
+ public void onStop() {
+ detachScrollWatcher();
+ }
+
+ private void detachScrollWatcher() {
+ mRecyclerView.removeOnScrollListener(mScrollChangeWatcher);
+ isScrollWatcherAttached = false;
+ }
+
+ @Override
+ public void onStart() {
+ attachScrollWatcher();
+ }
+
+ private void attachScrollWatcher() {
+ if (!isScrollWatcherAttached) {
+ isScrollWatcherAttached = true;
+ mRecyclerView.addOnScrollListener(mScrollChangeWatcher);
+ mScrollChangeWatcher.updateDropShadow(mRecyclerView);
+ }
+ }
+
+ /**
+ * Update the drop shadow as the scrollable entity is scrolled.
+ */
+ private final class ScrollChangeWatcher extends RecyclerView.OnScrollListener {
+
+ private Activity mActivity;
+
+ public ScrollChangeWatcher(Activity activity) {
+ mActivity = activity;
+ }
+
+ // RecyclerView scrolled.
+ @Override
+ public void onScrolled(RecyclerView view, int dx, int dy) {
+ updateDropShadow(view);
+ }
+
+ public void updateDropShadow(View view) {
+ final boolean shouldShowShadow = view.canScrollVertically(-1);
+ final ActionBar actionBar = mActivity.getActionBar();
+ if (actionBar != null) {
+ actionBar.setElevation(shouldShowShadow ? 8 : 0);
+ }
+ }
+ }
+
+}
import android.os.UserHandle;
import android.support.annotation.IntDef;
import android.support.annotation.VisibleForTesting;
+import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.core.lifecycle.Lifecycle;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
private static final String TAG = "AppDetailFeature";
- private final Context mContext;
+ private final Context mAppContext;
+ private final Activity mActivity;
private final Fragment mFragment;
private final int mMetricsCategory;
private final View mHeader;
-
+ private Lifecycle mLifecycle;
+ private RecyclerView mRecyclerView;
private Drawable mIcon;
private CharSequence mLabel;
private CharSequence mSummary;
* @param fragment The fragment that header will be placed in.
* @param header Optional: header view if it's already created.
*/
- public static EntityHeaderController newInstance(Context context, Fragment fragment,
+ public static EntityHeaderController newInstance(Activity activity, Fragment fragment,
View header) {
- return new EntityHeaderController(context.getApplicationContext(), fragment, header);
+ return new EntityHeaderController(activity, fragment, header);
}
- private EntityHeaderController(Context context, Fragment fragment, View header) {
- mContext = context;
+ private EntityHeaderController(Activity activity, Fragment fragment, View header) {
+ mActivity = activity;
+ mAppContext = activity.getApplicationContext();
mFragment = fragment;
- mMetricsCategory = FeatureFactory.getFactory(context).getMetricsFeatureProvider()
+ mMetricsCategory = FeatureFactory.getFactory(mAppContext).getMetricsFeatureProvider()
.getMetricsCategory(fragment);
if (header != null) {
mHeader = header;
}
}
+ public EntityHeaderController setRecyclerView(RecyclerView recyclerView, Lifecycle lifecycle) {
+ mRecyclerView = recyclerView;
+ mLifecycle = lifecycle;
+ return this;
+ }
+
public EntityHeaderController setIcon(Drawable icon) {
if (icon != null) {
- mIcon = icon.getConstantState().newDrawable(mContext.getResources());
+ mIcon = icon.getConstantState().newDrawable(mAppContext.getResources());
}
return this;
}
public EntityHeaderController setIcon(ApplicationsState.AppEntry appEntry) {
if (appEntry.icon != null) {
- mIcon = appEntry.icon.getConstantState().newDrawable(mContext.getResources());
+ mIcon = appEntry.icon.getConstantState().newDrawable(mAppContext.getResources());
}
return this;
}
actionBar.setBackgroundDrawable(
new ColorDrawable(Utils.getColorAttr(activity, android.R.attr.colorSecondary)));
actionBar.setElevation(0);
+ if (mRecyclerView != null && mLifecycle != null) {
+ ActionBarShadowController.attachToRecyclerView(mActivity, mLifecycle, mRecyclerView);
+ }
return this;
}
button.setVisibility(View.GONE);
} else {
button.setContentDescription(
- mContext.getString(R.string.application_info_label));
+ mAppContext.getString(R.string.application_info_label));
button.setImageResource(com.android.settings.R.drawable.ic_info);
button.setOnClickListener(new View.OnClickListener() {
@Override
}
private Intent resolveIntent(Intent i) {
- ResolveInfo result = mContext.getPackageManager().resolveActivity(i, 0);
+ ResolveInfo result = mAppContext.getPackageManager().resolveActivity(i, 0);
if (result != null) {
return new Intent(i.getAction())
.setClassName(result.activityInfo.packageName, result.activityInfo.name);
import android.accounts.Account;
import android.app.Activity;
-import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.os.UserHandle;
+import android.support.v14.preference.PreferenceFragment;
import android.support.v7.preference.PreferenceScreen;
import android.widget.TextView;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.accounts.AuthenticatorHelper;
+import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before;
import org.junit.Test;
@Mock
private Activity mActivity;
@Mock
- private Fragment mFragment;
+ private PreferenceFragment mFragment;
@Mock
private PreferenceScreen mScreen;
@Test
public void isAvailable_noArgs_shouldReturnNull() {
mController = new AccountHeaderPreferenceController(RuntimeEnvironment.application,
- mActivity, mFragment, null /* args */);
+ new Lifecycle(), mActivity, mFragment, null /* args */);
assertThat(mController.isAvailable()).isFalse();
}
args.putParcelable(AccountDetailDashboardFragment.KEY_ACCOUNT, account);
args.putParcelable(AccountDetailDashboardFragment.KEY_USER_HANDLE, UserHandle.CURRENT);
mController = new AccountHeaderPreferenceController(RuntimeEnvironment.application,
- mActivity, mFragment, args);
+ new Lifecycle(), mActivity, mFragment, args);
assertThat(mController.isAvailable()).isTrue();
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
+import static org.mockito.Matchers.any;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
@Test
public void bindAppHeader_allWorkApps_shouldNotShowAppInfoLink() {
ShadowEntityHeaderController.setUseMock(mHeaderController);
+ when(mHeaderController.setRecyclerView(any(), any())).thenReturn(mHeaderController);
+
mFragment = spy(new AppDataUsage());
doReturn(mock(PreferenceManager.class, RETURNS_DEEP_STUBS))
import android.graphics.drawable.Drawable;
import android.os.BatteryStats;
import android.os.Bundle;
+import android.support.v7.widget.RecyclerView;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
+import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.After;
import org.junit.Before;
ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
doReturn(mEntityHeaderController).when(mEntityHeaderController)
+ .setRecyclerView(any(RecyclerView.class), any(Lifecycle.class));
+ doReturn(mEntityHeaderController).when(mEntityHeaderController)
.setButtonActions(anyInt(), anyInt());
doReturn(mEntityHeaderController).when(mEntityHeaderController)
.setIcon(any(Drawable.class));
package com.android.settings.testutils.shadow;
+import android.app.Activity;
import android.app.Fragment;
-import android.content.Context;
import android.view.View;
import com.android.settings.widget.EntityHeaderController;
}
@Implementation
- public static EntityHeaderController newInstance(Context context, Fragment fragment,
+ public static EntityHeaderController newInstance(Activity activity, Fragment fragment,
View header) {
return sMockController;
}
--- /dev/null
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * 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 com.android.settings.widget;
+
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.support.v7.widget.RecyclerView;
+
+import com.android.settings.SettingsRobolectricTestRunner;
+import com.android.settings.TestConfig;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
+
+import java.util.List;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ActionBarShadowControllerTest {
+
+ @Mock
+ private RecyclerView mRecyclerView;
+ @Mock
+ private Activity mActivity;
+ @Mock
+ private ActionBar mActionBar;
+ private Lifecycle mLifecycle;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ when(mActivity.getActionBar()).thenReturn(mActionBar);
+ mLifecycle = new Lifecycle();
+ }
+
+ @Test
+ public void attachToRecyclerView_shouldAddScrollWatcherAndUpdateActionBar() {
+ when(mRecyclerView.canScrollVertically(-1)).thenReturn(false);
+
+ ActionBarShadowController.attachToRecyclerView(mActivity, mLifecycle, mRecyclerView);
+
+ verify(mActionBar).setElevation(0);
+ }
+
+
+ @Test
+ public void attachToRecyclerView_lifecycleChange_shouldAttachDetach() {
+ ActionBarShadowController.attachToRecyclerView(mActivity, mLifecycle, mRecyclerView);
+
+ List<LifecycleObserver> observers = ReflectionHelpers.getField(mLifecycle, "mObservers");
+ assertThat(observers).hasSize(1);
+ verify(mRecyclerView).addOnScrollListener(any());
+
+ mLifecycle.onStop();
+ verify(mRecyclerView).removeOnScrollListener(any());
+
+ mLifecycle.onStart();
+ verify(mRecyclerView, times(2)).addOnScrollListener(any());
+ }
+
+}
@Mock
private Fragment mFragment;
- private FakeFeatureFactory mFeatureFactory;
private Context mShadowContext;
private LayoutInflater mLayoutInflater;
private PackageInfo mInfo;
public void setUp() {
MockitoAnnotations.initMocks(this);
FakeFeatureFactory.setupForTest(mContext);
- mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
mShadowContext = RuntimeEnvironment.application;
+ when(mActivity.getApplicationContext()).thenReturn(mShadowContext);
when(mContext.getApplicationContext()).thenReturn(mContext);
when(mFragment.getContext()).thenReturn(mShadowContext);
mLayoutInflater = LayoutInflater.from(mShadowContext);
@Test
public void testBuildView_constructedWithoutView_shouldCreateNewView() {
- mController = EntityHeaderController.newInstance(mShadowContext, mFragment, null);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, null);
View view = mController.done(mActivity);
assertThat(view).isNotNull();
@Test
public void testBuildView_withContext_shouldBuildPreference() {
- mController = EntityHeaderController.newInstance(mShadowContext, mFragment, null);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, null);
Preference preference = mController.done(mActivity, mShadowContext);
assertThat(preference instanceof LayoutPreference).isTrue();
@Test
public void testBuildView_constructedWithView_shouldReturnSameView() {
View inputView = mLayoutInflater.inflate(R.layout.settings_entity_header, null /* root */);
- mController = EntityHeaderController.newInstance(mShadowContext, mFragment, inputView);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, inputView);
View view = mController.done(mActivity);
assertThat(view).isSameAs(inputView);
final TextView label = header.findViewById(R.id.entity_header_title);
final TextView version = header.findViewById(R.id.entity_header_summary);
- mController = EntityHeaderController.newInstance(mShadowContext, mFragment, header);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, header);
mController.setLabel(testString);
mController.setSummary(testString);
mController.setIcon(mShadowContext.getDrawable(R.drawable.ic_add));
info.activityInfo.name = "321";
final View appLinks = mLayoutInflater
.inflate(R.layout.settings_entity_header, null /* root */);
+ when(mActivity.getApplicationContext()).thenReturn(mContext);
when(mContext.getPackageManager().resolveActivity(any(Intent.class), anyInt()))
.thenReturn(info);
- mController = EntityHeaderController.newInstance(mContext, mFragment, appLinks);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, appLinks);
mController.setButtonActions(
EntityHeaderController.ActionType.ACTION_APP_PREFERENCE,
EntityHeaderController.ActionType.ACTION_NONE);
when(mContext.getPackageManager().resolveActivity(any(Intent.class), anyInt()))
.thenReturn(null);
- mController = EntityHeaderController.newInstance(mContext, mFragment, appLinks);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, appLinks);
mController.setButtonActions(
EntityHeaderController.ActionType.ACTION_APP_PREFERENCE,
EntityHeaderController.ActionType.ACTION_NONE);
final View appLinks = mLayoutInflater
.inflate(R.layout.settings_entity_header, null /* root */);
- mController = EntityHeaderController.newInstance(mContext, mFragment, appLinks);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, appLinks);
mController.setPackageName(null)
.setButtonActions(
EntityHeaderController.ActionType.ACTION_APP_INFO,
.inflate(R.layout.settings_entity_header, null /* root */);
when(mFragment.getActivity()).thenReturn(mock(Activity.class));
- mController = EntityHeaderController.newInstance(mContext, mFragment, appLinks);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, appLinks);
mController.setPackageName("123")
.setUid(UserHandle.USER_SYSTEM)
.setButtonActions(
when(mFragment.getActivity()).thenReturn(mock(Activity.class));
when(mContext.getString(eq(R.string.application_info_label))).thenReturn("App Info");
- mController = EntityHeaderController.newInstance(mContext, mFragment, appLinks);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, appLinks);
mController.setPackageName("123")
.setUid(UserHandle.USER_SYSTEM)
.setButtonActions(
EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE);
mController.done(mActivity);
- assertThat(appLinks.findViewById(android.R.id.button1).getContentDescription())
- .isEqualTo("App Info");
+ assertThat(appLinks.findViewById(android.R.id.button1).getContentDescription().toString())
+ .isEqualTo("App info");
}
@Test
final View appLinks = mLayoutInflater
.inflate(R.layout.settings_entity_header, null /* root */);
- mController = EntityHeaderController.newInstance(mContext, mFragment, appLinks);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, appLinks);
mController.setAppNotifPrefIntent(new Intent())
.setButtonActions(
EntityHeaderController.ActionType.ACTION_NOTIF_PREFERENCE,
public void instantApps_normalAppsDontGetLabel() {
final View header = mLayoutInflater.inflate(
R.layout.settings_entity_header, null /* root */);
- mController = EntityHeaderController.newInstance(mContext, mFragment, header);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, header);
mController.done(mActivity);
assertThat(header.findViewById(R.id.install_type).getVisibility())
public void instantApps_expectedHeaderItem() {
final View header = mLayoutInflater.inflate(
R.layout.settings_entity_header, null /* root */);
- mController = EntityHeaderController.newInstance(mContext, mFragment, header);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, header);
mController.setIsInstantApp(true);
mController.done(mActivity);
TextView label = header.findViewById(R.id.install_type);
@Test
public void styleActionBar_invalidObjects_shouldNotCrash() {
- mController = EntityHeaderController.newInstance(mShadowContext, mFragment, null);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, null);
mController.styleActionBar(null);
when(mActivity.getActionBar()).thenReturn(null);
public void styleActionBar_setElevationAndBackground() {
final ActionBar actionBar = mActivity.getActionBar();
- mController = EntityHeaderController.newInstance(mShadowContext, mFragment, null);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, null);
mController.styleActionBar(mActivity);
verify(actionBar).setElevation(0);
@Test
public void initAppHeaderController_appHeaderNull_useFragmentContext() {
- mController = EntityHeaderController.newInstance(mContext, mFragment, null);
+ mController = EntityHeaderController.newInstance(mActivity, mFragment, null);
// Fragment.getContext() is invoked to inflate the view
verify(mFragment).getContext();