Use fragment context in AppHeaderController

The application context doesn't have the correct theme, use
fragment context instead

Fix: 36489386
Fix: 36516826
Test: RunSettingsRoboTests & Screenshot
Change-Id: I8285584220796264d85ea570df5b1df6ebeb275f
This commit is contained in:
jackqdyulei
2017-03-21 18:30:21 -07:00
parent e39e8350a1
commit abba040727
3 changed files with 20 additions and 10 deletions

View File

@@ -90,7 +90,7 @@ public class AppHeaderController {
if (appHeader != null) {
mAppHeader = appHeader;
} else {
mAppHeader = LayoutInflater.from(mContext)
mAppHeader = LayoutInflater.from(fragment.getContext())
.inflate(R.layout.app_details, null /* root */);
}
}

View File

@@ -17,7 +17,6 @@
package com.android.settings.applications;
import android.annotation.IdRes;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
@@ -25,12 +24,10 @@ import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.UserHandle;
import android.support.v7.preference.Preference;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.android.settings.R;
@@ -44,8 +41,8 @@ import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
@@ -55,8 +52,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.EnumSet;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class AppHeaderControllerTest {
@@ -79,7 +74,8 @@ public class AppHeaderControllerTest {
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mShadowContext = ShadowApplication.getInstance().getApplicationContext();
mShadowContext = RuntimeEnvironment.application;
when(mFragment.getContext()).thenReturn(mShadowContext);
mLayoutInflater = LayoutInflater.from(mShadowContext);
mInfo = new PackageInfo();
mInfo.versionName = "1234";
@@ -292,4 +288,12 @@ public class AppHeaderControllerTest {
assertThat(label.getText()).isEqualTo(
appHeader.getResources().getString(R.string.install_type_instant));
}
@Test
public void initAppHeaderController_appHeaderNull_useFragmentContext() {
mController = new AppHeaderController(mContext, mFragment, null);
// Fragment.getContext() is invoked to inflate the view
verify(mFragment).getContext();
}
}

View File

@@ -83,6 +83,7 @@ public class AppInfoWithHeaderTest {
PreferenceManager mManager;
PreferenceScreen mScreen;
Context mShadowContext;
public TestFragment() {
mPm = mock(PackageManager.class);
@@ -90,10 +91,10 @@ public class AppInfoWithHeaderTest {
mScreen = mock(PreferenceScreen.class);
mPackageInfo = new PackageInfo();
mPackageInfo.applicationInfo = new ApplicationInfo();
mShadowContext = ShadowApplication.getInstance().getApplicationContext();
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
(InstantAppDataProvider) (info -> false));
when(mManager.getContext())
.thenReturn(ShadowApplication.getInstance().getApplicationContext());
when(mManager.getContext()).thenReturn(mShadowContext);
}
@Override
@@ -120,6 +121,11 @@ public class AppInfoWithHeaderTest {
public PreferenceManager getPreferenceManager() {
return mManager;
}
@Override
public Context getContext() {
return mShadowContext;
}
}
}