// Constants for state save/restore
private static final String SAVE_KEY_CATEGORIES = ":settings:categories";
- private static final String SAVE_KEY_SHOW_HOME_AS_UP = ":settings:show_home_as_up";
+ @VisibleForTesting
+ static final String SAVE_KEY_SHOW_HOME_AS_UP = ":settings:show_home_as_up";
+ @VisibleForTesting
+ static final String SAVE_KEY_SHOW_SEARCH = ":settings:show_search";
/**
* When starting this activity, the invoking Intent can contain this extra
private Button mNextButton;
- private boolean mDisplayHomeAsUpEnabled;
- private boolean mDisplaySearch;
+ @VisibleForTesting
+ boolean mDisplayHomeAsUpEnabled;
+ @VisibleForTesting
+ boolean mDisplaySearch;
private boolean mIsShowingDashboard;
private boolean mIsShortcut;
if (!mDisplaySearch) {
return false;
}
-
mSearchFeatureProvider.setUpSearchMenu(menu, this);
return true;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
+ saveState(outState);
+ }
+ /**
+ * For testing purposes to avoid crashes from final variables in Activity's onSaveInstantState.
+ */
+ @VisibleForTesting
+ void saveState(Bundle outState) {
if (mCategories.size() > 0) {
outState.putParcelableArrayList(SAVE_KEY_CATEGORIES, mCategories);
}
outState.putBoolean(SAVE_KEY_SHOW_HOME_AS_UP, mDisplayHomeAsUpEnabled);
+ outState.putBoolean(SAVE_KEY_SHOW_SEARCH, mDisplaySearch);
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ super.onRestoreInstanceState(savedInstanceState);
+
+ mDisplayHomeAsUpEnabled = savedInstanceState.getBoolean(SAVE_KEY_SHOW_HOME_AS_UP);
+ mDisplaySearch = savedInstanceState.getBoolean(SAVE_KEY_SHOW_SEARCH);
}
@Override
package com.android.settings;
+import android.app.Activity;
import android.app.ActivityManager;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
+import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
+import android.os.Bundle;
+import android.view.Menu;
+import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
import org.junit.Test;
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.util.ReflectionHelpers;
+import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doReturn;
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class SettingsActivityTest {
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private Context mContext;
+
@Mock
private FragmentManager mFragmentManager;
@Mock
private Bitmap mBitmap;
private SettingsActivity mActivity;
+ private FakeFeatureFactory mFeatureFactory;
+
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ FakeFeatureFactory.setupForTest(mContext);
+ mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
+
mActivity = spy(new SettingsActivity());
doReturn(mBitmap).when(mActivity).getBitmapFromXmlResource(anyInt());
}
@Test
public void launchSettingFragment_nullExtraShowFragment_shouldNotCrash()
throws ClassNotFoundException {
- mActivity = spy(new SettingsActivity());
when(mActivity.getFragmentManager()).thenReturn(mFragmentManager);
when(mFragmentManager.beginTransaction()).thenReturn(mock(FragmentTransaction.class));
verify(mTaskDescription).setIcon(any());
}
+
+ @Test
+ public void testCreateOptionsMenu_setsUpSearch() {
+ ReflectionHelpers.setField(mActivity, "mSearchFeatureProvider",
+ mFeatureFactory.getSearchFeatureProvider());
+ mActivity.mDisplaySearch = true;
+ mActivity.onCreateOptionsMenu(null);
+
+ verify(mFeatureFactory.getSearchFeatureProvider()).setUpSearchMenu(any(Menu.class),
+ any(Activity.class));
+ }
+
+ @Test
+ public void testSaveState_DisplaySearchSaved() {
+ mActivity.mDisplaySearch = true;
+ Bundle bundle = new Bundle();
+ mActivity.saveState(bundle);
+
+ assertThat((boolean) bundle.get(SettingsActivity.SAVE_KEY_SHOW_SEARCH)).isTrue();
+ }
+
+ @Test
+ public void testSaveState_EnabledHomeSaved() {
+ mActivity.mDisplayHomeAsUpEnabled = true;
+ Bundle bundle = new Bundle();
+ mActivity.saveState(bundle);
+
+ assertThat((boolean) bundle.get(SettingsActivity.SAVE_KEY_SHOW_HOME_AS_UP)).isTrue();
+ }
+
+ @Test
+ public void testRestoreState_DisplaySearchRestored() {
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(SettingsActivity.SAVE_KEY_SHOW_SEARCH, true);
+ mActivity.onRestoreInstanceState(bundle);
+
+ assertThat(mActivity.mDisplaySearch).isTrue();
+ }
+
+ @Test
+ public void testRestoreState_EnabledHomeRestored() {
+ Bundle bundle = new Bundle();
+ bundle.putBoolean(SettingsActivity.SAVE_KEY_SHOW_SEARCH, true);
+ mActivity.onRestoreInstanceState(bundle);
+
+ assertThat(mActivity.mDisplaySearch).isTrue();
+ }
}