blob: f46e76c7017544630eec479696dc434562b2c3a5 [file] [log] [blame]
/*
* Copyright (C) 2015 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.systemui.statusbar.phone;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.ComponentName;
import android.content.SharedPreferences;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.LauncherApps;
import android.os.UserHandle;
import android.test.AndroidTestCase;
import java.util.ArrayList;
import java.util.List;
/** Tests for the data model for the navigation bar app icons. */
public class NavigationBarAppsModelTest extends AndroidTestCase {
private LauncherApps mMockLauncherApps;
private SharedPreferences mMockPrefs;
private NavigationBarAppsModel mModel;
@Override
protected void setUp() throws Exception {
super.setUp();
// Mockito setup boilerplate.
System.setProperty("dexmaker.dexcache", mContext.getCacheDir().getPath());
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
mMockLauncherApps = mock(LauncherApps.class);
mMockPrefs = mock(SharedPreferences.class);
mModel = new NavigationBarAppsModel(mMockLauncherApps, mMockPrefs);
}
/** Initializes the model from SharedPreferences for a few app activites. */
private void initializeModelFromPrefs() {
// Assume the version pref is present.
when(mMockPrefs.getInt("version", -1)).thenReturn(1);
// Assume several apps are stored.
when(mMockPrefs.getInt("app_count", -1)).thenReturn(3);
when(mMockPrefs.getString("app_0", null)).thenReturn("package0/class0");
when(mMockPrefs.getLong("app_user_0", -1)).thenReturn(-1L);
when(mMockPrefs.getString("app_1", null)).thenReturn("package1/class1");
when(mMockPrefs.getLong("app_user_1", -1)).thenReturn(45L);
when(mMockPrefs.getString("app_2", null)).thenReturn("package2/class2");
when(mMockPrefs.getLong("app_user_2", -1)).thenReturn(239L);
mModel.initialize();
}
/** Tests initializing the model from SharedPreferences. */
public void testInitializeFromPrefs() {
initializeModelFromPrefs();
assertEquals(3, mModel.getAppCount());
assertEquals("package0/class0", mModel.getApp(0).getComponentName().flattenToString());
assertEquals(-1L, mModel.getApp(0).getUserSerialNumber());
assertEquals("package1/class1", mModel.getApp(1).getComponentName().flattenToString());
assertEquals(45L, mModel.getApp(1).getUserSerialNumber());
assertEquals("package2/class2", mModel.getApp(2).getComponentName().flattenToString());
assertEquals(239L, mModel.getApp(2).getUserSerialNumber());
}
/** Tests initializing the model when the SharedPreferences aren't available. */
public void testInitializeDefaultApps() {
// Assume the version pref isn't available.
when(mMockPrefs.getInt("version", -1)).thenReturn(-1);
// Assume some installed activities.
LauncherActivityInfo activity1 = mock(LauncherActivityInfo.class);
when(activity1.getComponentName()).thenReturn(new ComponentName("package1", "class1"));
LauncherActivityInfo activity2 = mock(LauncherActivityInfo.class);
when(activity2.getComponentName()).thenReturn(new ComponentName("package2", "class2"));
List<LauncherActivityInfo> apps = new ArrayList<LauncherActivityInfo>();
apps.add(activity1);
apps.add(activity2);
when(mMockLauncherApps.getActivityList(anyString(), any(UserHandle.class)))
.thenReturn(apps);
// Initializing the model should load the installed activities.
mModel.initialize();
assertEquals(2, mModel.getAppCount());
assertEquals("package1/class1", mModel.getApp(0).getComponentName().flattenToString());
assertEquals(-1L, mModel.getApp(0).getUserSerialNumber());
assertEquals("package2/class2", mModel.getApp(1).getComponentName().flattenToString());
assertEquals(-1L, mModel.getApp(1).getUserSerialNumber());
}
/** Tests initializing the model if one of the prefs is missing. */
public void testInitializeWithMissingPref() {
// Assume the version pref is present.
when(mMockPrefs.getInt("version", -1)).thenReturn(1);
// Assume two apps are nominally stored.
when(mMockPrefs.getInt("app_count", -1)).thenReturn(2);
when(mMockPrefs.getString("app_0", null)).thenReturn("package0/class0");
when(mMockPrefs.getLong("app_user_0", -1)).thenReturn(239L);
// But assume one pref is missing.
when(mMockPrefs.getString("app_1", null)).thenReturn(null);
// Initializing the model should load from prefs and skip the missing one.
mModel.initialize();
assertEquals(1, mModel.getAppCount());
assertEquals("package0/class0", mModel.getApp(0).getComponentName().flattenToString());
assertEquals(239L, mModel.getApp(0).getUserSerialNumber());
}
/** Tests saving the model to SharedPreferences. */
public void testSavePrefs() {
initializeModelFromPrefs();
SharedPreferences.Editor mockEdit = mock(SharedPreferences.Editor.class);
when(mMockPrefs.edit()).thenReturn(mockEdit);
mModel.savePrefs();
verify(mockEdit).clear(); // Old prefs were removed.
verify(mockEdit).putInt("version", 1);
verify(mockEdit).putInt("app_count", 3);
verify(mockEdit).putString("app_0", "package0/class0");
verify(mockEdit).putString("app_1", "package1/class1");
verify(mockEdit).putString("app_2", "package2/class2");
}
}