arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 1 | package com.android.settingslib.drawer; |
| 2 | |
Fan Zhang | 4c07a71 | 2018-08-06 10:04:14 -0700 | [diff] [blame] | 3 | import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 4 | import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 5 | import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; |
| 6 | import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 7 | import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; |
| 8 | import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; |
| 9 | |
Fan Zhang | b5bf739 | 2018-07-25 13:36:33 -0700 | [diff] [blame] | 10 | import static com.google.common.truth.Truth.assertThat; |
| 11 | |
Fan Zhang | 8f942a4 | 2019-03-05 17:04:06 -0800 | [diff] [blame] | 12 | import android.content.Context; |
| 13 | import android.content.Intent; |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 14 | import android.content.pm.ActivityInfo; |
Fan Zhang | 8f942a4 | 2019-03-05 17:04:06 -0800 | [diff] [blame] | 15 | import android.content.pm.ApplicationInfo; |
| 16 | import android.content.pm.ResolveInfo; |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 17 | import android.os.Bundle; |
Fan Zhang | 1b0dfa3 | 2018-07-20 12:57:55 -0700 | [diff] [blame] | 18 | |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 19 | import org.junit.Before; |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 20 | import org.junit.Test; |
Fan Zhang | b5bf739 | 2018-07-25 13:36:33 -0700 | [diff] [blame] | 21 | import org.junit.runner.RunWith; |
James Lemieux | ec3ad9e | 2018-11-28 17:49:14 -0800 | [diff] [blame] | 22 | import org.robolectric.RobolectricTestRunner; |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 23 | import org.robolectric.RuntimeEnvironment; |
Fan Zhang | 8f942a4 | 2019-03-05 17:04:06 -0800 | [diff] [blame] | 24 | import org.robolectric.shadow.api.Shadow; |
| 25 | import org.robolectric.shadows.ShadowPackageManager; |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 26 | |
James Lemieux | ec3ad9e | 2018-11-28 17:49:14 -0800 | [diff] [blame] | 27 | @RunWith(RobolectricTestRunner.class) |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 28 | public class TileTest { |
| 29 | |
Fan Zhang | 8f942a4 | 2019-03-05 17:04:06 -0800 | [diff] [blame] | 30 | private Context mContext; |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 31 | private ActivityInfo mActivityInfo; |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 32 | private Tile mTile; |
| 33 | |
| 34 | @Before |
| 35 | public void setUp() { |
Fan Zhang | 8f942a4 | 2019-03-05 17:04:06 -0800 | [diff] [blame] | 36 | mContext = RuntimeEnvironment.application; |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 37 | mActivityInfo = new ActivityInfo(); |
Fan Zhang | 8f942a4 | 2019-03-05 17:04:06 -0800 | [diff] [blame] | 38 | mActivityInfo.applicationInfo = new ApplicationInfo(); |
| 39 | mActivityInfo.packageName = mContext.getPackageName(); |
Fan Zhang | a79ab48 | 2018-08-07 13:04:20 -0700 | [diff] [blame] | 40 | mActivityInfo.name = "abc"; |
Amin Shaikh | 10f363b | 2019-01-24 17:59:49 -0500 | [diff] [blame] | 41 | mActivityInfo.icon = com.android.internal.R.drawable.ic_plus; |
Fan Zhang | f5c1d76 | 2018-08-03 09:14:32 -0700 | [diff] [blame] | 42 | mActivityInfo.metaData = new Bundle(); |
| 43 | mTile = new Tile(mActivityInfo, "category"); |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 44 | } |
| 45 | |
| 46 | @Test |
| 47 | public void isPrimaryProfileOnly_profilePrimary_shouldReturnTrue() { |
Fan Zhang | f5c1d76 | 2018-08-03 09:14:32 -0700 | [diff] [blame] | 48 | mActivityInfo.metaData.putString(META_DATA_KEY_PROFILE, PROFILE_PRIMARY); |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 49 | assertThat(mTile.isPrimaryProfileOnly()).isTrue(); |
| 50 | } |
| 51 | |
| 52 | @Test |
| 53 | public void isPrimaryProfileOnly_profileAll_shouldReturnFalse() { |
Fan Zhang | f5c1d76 | 2018-08-03 09:14:32 -0700 | [diff] [blame] | 54 | mActivityInfo.metaData.putString(META_DATA_KEY_PROFILE, PROFILE_ALL); |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 55 | 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 Zhang | f5c1d76 | 2018-08-03 09:14:32 -0700 | [diff] [blame] | 65 | mActivityInfo.metaData = null; |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 66 | assertThat(mTile.isPrimaryProfileOnly()).isFalse(); |
| 67 | } |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 68 | |
| 69 | @Test |
Fan Zhang | 0e20123 | 2018-07-26 11:26:44 -0700 | [diff] [blame] | 70 | public void getIcon_noContextOrMetadata_returnNull() { |
Fan Zhang | a79ab48 | 2018-08-07 13:04:20 -0700 | [diff] [blame] | 71 | mActivityInfo.metaData = null; |
| 72 | final Tile tile = new Tile(mActivityInfo, "category"); |
Fan Zhang | 0e20123 | 2018-07-26 11:26:44 -0700 | [diff] [blame] | 73 | assertThat(tile.getIcon(null)).isNull(); |
| 74 | assertThat(tile.getIcon(RuntimeEnvironment.application)).isNull(); |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 75 | } |
| 76 | |
| 77 | @Test |
| 78 | public void getIcon_providedByUri_returnNull() { |
Fan Zhang | f5c1d76 | 2018-08-03 09:14:32 -0700 | [diff] [blame] | 79 | mActivityInfo.metaData.putString(META_DATA_PREFERENCE_ICON_URI, "content://foobar/icon"); |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 80 | |
Fan Zhang | 0e20123 | 2018-07-26 11:26:44 -0700 | [diff] [blame] | 81 | assertThat(mTile.getIcon(RuntimeEnvironment.application)).isNull(); |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 82 | } |
| 83 | |
| 84 | @Test |
| 85 | public void getIcon_hasIconMetadata_returnIcon() { |
Philip P. Moltmann | 2d21d77 | 2018-08-30 11:06:49 -0700 | [diff] [blame] | 86 | mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON, android.R.drawable.ic_info); |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 87 | |
Fan Zhang | 0e20123 | 2018-07-26 11:26:44 -0700 | [diff] [blame] | 88 | assertThat(mTile.getIcon(RuntimeEnvironment.application).getResId()) |
Philip P. Moltmann | 2d21d77 | 2018-08-30 11:06:49 -0700 | [diff] [blame] | 89 | .isEqualTo(android.R.drawable.ic_info); |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 90 | } |
| 91 | |
| 92 | @Test |
| 93 | public void getIcon_noIconMetadata_returnActivityIcon() { |
Fan Zhang | f5c1d76 | 2018-08-03 09:14:32 -0700 | [diff] [blame] | 94 | mActivityInfo.metaData.putInt(META_DATA_PREFERENCE_ICON, 0); |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 95 | |
Fan Zhang | 0e20123 | 2018-07-26 11:26:44 -0700 | [diff] [blame] | 96 | assertThat(mTile.getIcon(RuntimeEnvironment.application).getResId()) |
| 97 | .isEqualTo(mActivityInfo.icon); |
Fan Zhang | 83dde97 | 2018-07-23 16:51:14 -0700 | [diff] [blame] | 98 | } |
Fan Zhang | f5c1d76 | 2018-08-03 09:14:32 -0700 | [diff] [blame] | 99 | |
| 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 Zhang | a79ab48 | 2018-08-07 13:04:20 -0700 | [diff] [blame] | 125 | activityInfo.name = "abc"; |
Fan Zhang | f5c1d76 | 2018-08-03 09:14:32 -0700 | [diff] [blame] | 126 | |
| 127 | final Tile tile2 = new Tile(activityInfo, "category"); |
| 128 | assertThat(tile2.isIconTintable(RuntimeEnvironment.application)).isTrue(); |
| 129 | } |
Fan Zhang | 4c07a71 | 2018-08-06 10:04:14 -0700 | [diff] [blame] | 130 | |
| 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 Zhang | 8f942a4 | 2019-03-05 17:04:06 -0800 | [diff] [blame] | 155 | |
| 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 | } |
arangelov | 24eec2f | 2018-05-30 18:24:23 +0100 | [diff] [blame] | 172 | } |