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
(cherry picked from commit abba040727cb58e85108dca7dfb8988c1fd63cf2)
diff --git a/src/com/android/settings/applications/AppHeaderController.java b/src/com/android/settings/applications/AppHeaderController.java
index 45b8960..0bc9f8f 100644
--- a/src/com/android/settings/applications/AppHeaderController.java
+++ b/src/com/android/settings/applications/AppHeaderController.java
@@ -90,7 +90,7 @@
if (appHeader != null) {
mAppHeader = appHeader;
} else {
- mAppHeader = LayoutInflater.from(mContext)
+ mAppHeader = LayoutInflater.from(fragment.getContext())
.inflate(R.layout.app_details, null /* root */);
}
}
diff --git a/tests/robotests/src/com/android/settings/applications/AppHeaderControllerTest.java b/tests/robotests/src/com/android/settings/applications/AppHeaderControllerTest.java
index bd55fd0..79f452a 100644
--- a/tests/robotests/src/com/android/settings/applications/AppHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppHeaderControllerTest.java
@@ -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.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.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.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 @@
@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 @@
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();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
index a717306..68c153c 100644
--- a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
@@ -83,6 +83,7 @@
PreferenceManager mManager;
PreferenceScreen mScreen;
+ Context mShadowContext;
public TestFragment() {
mPm = mock(PackageManager.class);
@@ -90,10 +91,10 @@
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 PreferenceManager getPreferenceManager() {
return mManager;
}
+
+ @Override
+ public Context getContext() {
+ return mShadowContext;
+ }
}
}