Replaces the default Toolbar in SettingsActivity with one that looks like a search bar. It uses a Toolbar inside a CardView with some custom styling. Since the search bar is a floating element, the new toolbar lives in the content frame of the dashboard. A FrameLayout is used to provide the layering that is desired. Since the search bar is on top, an additional spacer view is added to the list of items in the dashboard. Its color changes based on what the first view is so that it always matches. Adds android-support-v7-cardview as a dependency (and reorders the other deps to be in alphabetical order). Remaining work (in future CLs): - remove search menu option? - clean up initial window - remove the line between the header and the first condition when there's a condition Bug: 37477506 Test: make RunSettingsRoboTests Change-Id: Id7477b90fbaf30eb5cac1ee244c847bddb95b3fd
158 lines
5.2 KiB
Java
158 lines
5.2 KiB
Java
/*
|
|
* Copyright (C) 2016 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;
|
|
|
|
import static com.google.common.truth.Truth.assertThat;
|
|
|
|
import static org.mockito.ArgumentMatchers.nullable;
|
|
import static org.mockito.Matchers.anyInt;
|
|
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;
|
|
|
|
import android.app.Activity;
|
|
import android.app.ActivityManager;
|
|
import android.app.FragmentManager;
|
|
import android.app.FragmentTransaction;
|
|
import android.content.ComponentName;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.graphics.Bitmap;
|
|
import android.os.Bundle;
|
|
import android.view.Menu;
|
|
|
|
import com.android.settings.search.SearchActivity;
|
|
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.shadows.ShadowApplication;
|
|
import org.robolectric.util.ReflectionHelpers;
|
|
|
|
@RunWith(SettingsRobolectricTestRunner.class)
|
|
@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 ActivityManager.TaskDescription mTaskDescription;
|
|
@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 {
|
|
when(mActivity.getFragmentManager()).thenReturn(mFragmentManager);
|
|
when(mFragmentManager.beginTransaction()).thenReturn(mock(FragmentTransaction.class));
|
|
|
|
doReturn(RuntimeEnvironment.application.getClassLoader()).when(mActivity).getClassLoader();
|
|
|
|
mActivity.launchSettingFragment(null, true, mock(Intent.class));
|
|
}
|
|
|
|
@Test
|
|
public void testSetTaskDescription_IconChanged() {
|
|
mActivity.setTaskDescription(mTaskDescription);
|
|
|
|
verify(mTaskDescription).setIcon(nullable(Bitmap.class));
|
|
}
|
|
|
|
@Test
|
|
public void testCreateOptionsMenu_setsUpSearch() {
|
|
ReflectionHelpers.setField(mActivity, "mSearchFeatureProvider",
|
|
mFeatureFactory.getSearchFeatureProvider());
|
|
mActivity.mDisplaySearch = true;
|
|
mActivity.onCreateOptionsMenu(null);
|
|
|
|
verify(mFeatureFactory.getSearchFeatureProvider()).setUpSearchMenu(nullable(Menu.class),
|
|
nullable(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();
|
|
}
|
|
|
|
@Test
|
|
public void testOnClick() {
|
|
doReturn("com.android.settings").when(mActivity).getPackageName();
|
|
|
|
mActivity.onClick(null);
|
|
|
|
Intent intent = ShadowApplication.getInstance().getNextStartedActivity();
|
|
assertThat(intent.getComponent()).isEqualTo(
|
|
new ComponentName("com.android.settings", SearchActivity.class.getName()));
|
|
}
|
|
}
|