blob: bfda888c96178d6299943f95e45f47bc81bec2b3 [file] [log] [blame]
arangelov24eec2f2018-05-30 18:24:23 +01001package com.android.settingslib.drawer;
2
Fan Zhang4c07a712018-08-06 10:04:14 -07003import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER;
arangelov24eec2f2018-05-30 18:24:23 +01004import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE;
Fan Zhang83dde972018-07-23 16:51:14 -07005import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON;
6import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
arangelov24eec2f2018-05-30 18:24:23 +01007import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL;
8import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY;
9
Fan Zhangb5bf7392018-07-25 13:36:33 -070010import static com.google.common.truth.Truth.assertThat;
11
Fan Zhang8f942a42019-03-05 17:04:06 -080012import android.content.Context;
13import android.content.Intent;
Fan Zhang83dde972018-07-23 16:51:14 -070014import android.content.pm.ActivityInfo;
Fan Zhang8f942a42019-03-05 17:04:06 -080015import android.content.pm.ApplicationInfo;
16import android.content.pm.ResolveInfo;
arangelov24eec2f2018-05-30 18:24:23 +010017import android.os.Bundle;
Fan Zhang1b0dfa32018-07-20 12:57:55 -070018
arangelov24eec2f2018-05-30 18:24:23 +010019import org.junit.Before;
arangelov24eec2f2018-05-30 18:24:23 +010020import org.junit.Test;
Fan Zhangb5bf7392018-07-25 13:36:33 -070021import org.junit.runner.RunWith;
James Lemieuxec3ad9e2018-11-28 17:49:14 -080022import org.robolectric.RobolectricTestRunner;
Fan Zhang83dde972018-07-23 16:51:14 -070023import org.robolectric.RuntimeEnvironment;
Fan Zhang8f942a42019-03-05 17:04:06 -080024import org.robolectric.shadow.api.Shadow;
25import org.robolectric.shadows.ShadowPackageManager;
Fan Zhang83dde972018-07-23 16:51:14 -070026
James Lemieuxec3ad9e2018-11-28 17:49:14 -080027@RunWith(RobolectricTestRunner.class)
arangelov24eec2f2018-05-30 18:24:23 +010028public class TileTest {
29
Fan Zhang8f942a42019-03-05 17:04:06 -080030 private Context mContext;
Fan Zhang83dde972018-07-23 16:51:14 -070031 private ActivityInfo mActivityInfo;
arangelov24eec2f2018-05-30 18:24:23 +010032 private Tile mTile;
33
34 @Before
35 public void setUp() {
Fan Zhang8f942a42019-03-05 17:04:06 -080036 mContext = RuntimeEnvironment.application;
Fan Zhang83dde972018-07-23 16:51:14 -070037 mActivityInfo = new ActivityInfo();
Fan Zhang8f942a42019-03-05 17:04:06 -080038 mActivityInfo.applicationInfo = new ApplicationInfo();
39 mActivityInfo.packageName = mContext.getPackageName();
Fan Zhanga79ab482018-08-07 13:04:20 -070040 mActivityInfo.name = "abc";
Amin Shaikh10f363b2019-01-24 17:59:49 -050041 mActivityInfo.icon = com.android.internal.R.drawable.ic_plus;
Fan Zhangf5c1d762018-08-03 09:14:32 -070042 mActivityInfo.metaData = new Bundle();
43 mTile = new Tile(mActivityInfo, "category");
arangelov24eec2f2018-05-30 18:24:23 +010044 }
45
46 @Test
47 public void isPrimaryProfileOnly_profilePrimary_shouldReturnTrue() {
Fan Zhangf5c1d762018-08-03 09:14:32 -070048 mActivityInfo.metaData.putString(META_DATA_KEY_PROFILE, PROFILE_PRIMARY);
arangelov24eec2f2018-05-30 18:24:23 +010049 assertThat(mTile.isPrimaryProfileOnly()).isTrue();
50 }
51
52 @Test
53 public void isPrimaryProfileOnly_profileAll_shouldReturnFalse() {
Fan Zhangf5c1d762018-08-03 09:14:32 -070054 mActivityInfo.metaData.putString(META_DATA_KEY_PROFILE, PROFILE_ALL);
arangelov24eec2f2018-05-30 18:24:23 +010055 assertThat(mTile.isPrimaryProfileOnly()).isFalse();
56 }
57
58 @Test
59 public void isPrimaryProfileOnly_noExplicitValue_shouldReturnFalse() {
60 assertThat(mTile.isPrimaryProfileOnly()).isFalse();
61 }
62
63 @Test
64 public void isPrimaryProfileOnly_nullMetadata_shouldReturnFalse() {
Fan Zhangf5c1d762018-08-03 09:14:32 -070065 mActivityInfo.metaData = null;
arangelov24eec2f2018-05-30 18:24:23 +010066 assertThat(mTile.isPrimaryProfileOnly()).isFalse();
67 }
Fan Zhang83dde972018-07-23 16:51:14 -070068
69 @Test
Fan Zhang0e201232018-07-26 11:26:44 -070070 public void getIcon_noContextOrMetadata_returnNull() {
Fan Zhanga79ab482018-08-07 13:04:20 -070071 mActivityInfo.metaData = null;
72 final Tile tile = new Tile(mActivityInfo, "category");
Fan Zhang0e201232018-07-26 11:26:44 -070073 assertThat(tile.getIcon(null)).isNull();
74 assertThat(tile.getIcon(RuntimeEnvironment.application)).isNull();
Fan Zhang83dde972018-07-23 16:51:14 -070075 }
76
77 @Test
78 public void getIcon_providedByUri_returnNull() {
Fan Zhangf5c1d762018-08-03 09:14:32 -070079 mActivityInfo.metaData.putString(META_DATA_PREFERENCE_ICON_URI, "content://foobar/icon");
Fan Zhang83dde972018-07-23 16:51:14 -070080
Fan Zhang0e201232018-07-26 11:26:44 -070081 assertThat(mTile.getIcon(RuntimeEnvironment.application)).isNull();
Fan Zhang83dde972018-07-23 16:51:14 -070082 }
83
84 @Test
85 public void getIcon_hasIconMetadata_returnIcon() {
Philip P. Moltmann2d21d772018-08-30 11:06:49 -070086 mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON, android.R.drawable.ic_info);
Fan Zhang83dde972018-07-23 16:51:14 -070087
Fan Zhang0e201232018-07-26 11:26:44 -070088 assertThat(mTile.getIcon(RuntimeEnvironment.application).getResId())
Philip P. Moltmann2d21d772018-08-30 11:06:49 -070089 .isEqualTo(android.R.drawable.ic_info);
Fan Zhang83dde972018-07-23 16:51:14 -070090 }
91
92 @Test
93 public void getIcon_noIconMetadata_returnActivityIcon() {
Fan Zhangf5c1d762018-08-03 09:14:32 -070094 mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON, 0);
Fan Zhang83dde972018-07-23 16:51:14 -070095
Fan Zhang0e201232018-07-26 11:26:44 -070096 assertThat(mTile.getIcon(RuntimeEnvironment.application).getResId())
97 .isEqualTo(mActivityInfo.icon);
Fan Zhang83dde972018-07-23 16:51:14 -070098 }
Fan Zhangf5c1d762018-08-03 09:14:32 -070099
100 @Test
101 public void isIconTintable_hasMetadata_shouldReturnIconTintableMetadata() {
102 final Tile tile = new Tile(mActivityInfo, "category");
103
104 mActivityInfo.metaData.putBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE, false);
105 assertThat(tile.isIconTintable(RuntimeEnvironment.application)).isFalse();
106
107 mActivityInfo.metaData.putBoolean(TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE, true);
108 assertThat(tile.isIconTintable(RuntimeEnvironment.application)).isTrue();
109 }
110
111 @Test
112 public void isIconTintable_noIcon_shouldReturnFalse() {
113 final Tile tile = new Tile(mActivityInfo, "category");
114
115 assertThat(tile.isIconTintable(RuntimeEnvironment.application)).isFalse();
116 }
117
118 @Test
119 public void isIconTintable_noMetadata_shouldReturnPackageNameCheck() {
120 final Tile tile1 = new Tile(mActivityInfo, "category");
121 assertThat(tile1.isIconTintable(RuntimeEnvironment.application)).isFalse();
122
123 final ActivityInfo activityInfo = new ActivityInfo();
124 activityInfo.packageName = "blah";
Fan Zhanga79ab482018-08-07 13:04:20 -0700125 activityInfo.name = "abc";
Fan Zhangf5c1d762018-08-03 09:14:32 -0700126
127 final Tile tile2 = new Tile(activityInfo, "category");
128 assertThat(tile2.isIconTintable(RuntimeEnvironment.application)).isTrue();
129 }
Fan Zhang4c07a712018-08-06 10:04:14 -0700130
131 @Test
132 public void getPriority_noMetadata_return0() {
133 final Tile tile = new Tile(mActivityInfo, "category");
134
135 assertThat(tile.getOrder()).isEqualTo(0);
136 }
137
138 @Test
139 public void getPriority_badMetadata_return0() {
140 mActivityInfo.metaData.putString(META_DATA_KEY_ORDER, "1");
141
142 final Tile tile = new Tile(mActivityInfo, "category");
143
144 assertThat(tile.getOrder()).isEqualTo(0);
145 }
146
147 @Test
148 public void getPriority_validMetadata_returnMetadataValue() {
149 mActivityInfo.metaData.putInt(META_DATA_KEY_ORDER, 1);
150
151 final Tile tile = new Tile(mActivityInfo, "category");
152
153 assertThat(tile.getOrder()).isEqualTo(1);
154 }
Fan Zhang8f942a42019-03-05 17:04:06 -0800155
156 @Test
157 public void getTitle_shouldEnsureMetadataNotStale() {
158 final ResolveInfo info = new ResolveInfo();
159 info.activityInfo = mActivityInfo;
160 final ShadowPackageManager spm = Shadow.extract(mContext.getPackageManager());
161 spm.addResolveInfoForIntent(
162 new Intent().setClassName(mActivityInfo.packageName, mActivityInfo.name), info);
163
164 final Tile tile = new Tile(mActivityInfo, "category");
165 final long staleTimeStamp = -10000;
166 tile.mLastUpdateTime = staleTimeStamp;
167
168 tile.getTitle(RuntimeEnvironment.application);
169
170 assertThat(tile.mLastUpdateTime).isNotEqualTo(staleTimeStamp);
171 }
arangelov24eec2f2018-05-30 18:24:23 +0100172}