1 package com.android.launcher3 2 3 import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_DELETED 4 import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED 5 import android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_IDS 6 import android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS 7 import android.appwidget.AppWidgetManager.EXTRA_HOST_ID 8 import android.content.Intent 9 import android.platform.uiautomator_helpers.DeviceHelpers 10 import androidx.test.ext.junit.runners.AndroidJUnit4 11 import androidx.test.filters.SmallTest 12 import com.android.launcher3.LauncherPrefs.Companion.APP_WIDGET_IDS 13 import com.android.launcher3.LauncherPrefs.Companion.OLD_APP_WIDGET_IDS 14 import com.android.launcher3.util.IntArray 15 import com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE 16 import com.android.launcher3.widget.LauncherWidgetHolder.APPWIDGET_HOST_ID 17 import com.google.common.truth.Truth.assertThat 18 import org.junit.After 19 import org.junit.Before 20 import org.junit.Test 21 import org.junit.runner.RunWith 22 23 /** Tests for [AppWidgetsRestoredReceiver] */ 24 @SmallTest 25 @RunWith(AndroidJUnit4::class) 26 class AppWidgetsRestoredReceiverTest { 27 private lateinit var launcherPrefs: LauncherPrefs 28 private lateinit var receiverUnderTest: AppWidgetsRestoredReceiver 29 30 @Before setupnull31 fun setup() { 32 launcherPrefs = LauncherPrefs(DeviceHelpers.context) 33 receiverUnderTest = AppWidgetsRestoredReceiver() 34 } 35 36 @After tearDownnull37 fun tearDown() { 38 launcherPrefs.remove(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS) 39 } 40 41 @Test When AppWidgetsRestoredReceiver gets valid broadcast it sets old and new app widget idsnull42 fun `When AppWidgetsRestoredReceiver gets valid broadcast it sets old and new app widget ids`() { 43 // Given 44 val oldIds = intArrayOf(1, 2, 10) 45 val newIds = intArrayOf(10, 11, 12) 46 val expectedOldIds = IntArray.wrap(*oldIds).toConcatString() 47 val expectedNewIds = IntArray.wrap(*newIds).toConcatString() 48 val intent = 49 Intent().apply { 50 component = null 51 `package` = TEST_PACKAGE 52 action = ACTION_APPWIDGET_HOST_RESTORED 53 putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) 54 putExtra(EXTRA_APPWIDGET_IDS, newIds) 55 putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) 56 } 57 58 // When 59 receiverUnderTest.onReceive(DeviceHelpers.context, intent) 60 61 // Then 62 assertThat(launcherPrefs.get(OLD_APP_WIDGET_IDS)).isEqualTo(expectedOldIds) 63 assertThat(launcherPrefs.get(APP_WIDGET_IDS)).isEqualTo(expectedNewIds) 64 } 65 66 @Test AppWidgetsRestoredReceiver does not set widget ids when Intent action is invalidnull67 fun `AppWidgetsRestoredReceiver does not set widget ids when Intent action is invalid`() { 68 // Given 69 val oldIds = intArrayOf(1, 2, 10) 70 val newIds = intArrayOf(10, 11, 12) 71 val intent = 72 Intent().apply { 73 component = null 74 `package` = TEST_PACKAGE 75 action = ACTION_APPWIDGET_DELETED 76 putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) 77 putExtra(EXTRA_APPWIDGET_IDS, newIds) 78 putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) 79 } 80 81 // When 82 receiverUnderTest.onReceive(DeviceHelpers.context, intent) 83 84 // Then 85 assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() 86 } 87 88 @Test AppWidgetsRestoredReceiver does not set widget ids when Intent host id is not Launchernull89 fun `AppWidgetsRestoredReceiver does not set widget ids when Intent host id is not Launcher`() { 90 // Given 91 val oldIds = intArrayOf(1, 2, 10) 92 val newIds = intArrayOf(10, 11, 12) 93 val intent = 94 Intent().apply { 95 component = null 96 `package` = TEST_PACKAGE 97 action = ACTION_APPWIDGET_HOST_RESTORED 98 putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) 99 putExtra(EXTRA_APPWIDGET_IDS, newIds) 100 putExtra(EXTRA_HOST_ID, 999999999) 101 } 102 103 // When 104 receiverUnderTest.onReceive(DeviceHelpers.context, intent) 105 106 // Then 107 assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() 108 } 109 110 @Test AppWidgetsRestoredReceiver does not set ids when new and old ids differ in lengthnull111 fun `AppWidgetsRestoredReceiver does not set ids when new and old ids differ in length`() { 112 // Given 113 val oldIds = intArrayOf(10) 114 val newIds = intArrayOf(10, 11, 12) 115 val intent = 116 Intent().apply { 117 component = null 118 `package` = TEST_PACKAGE 119 action = ACTION_APPWIDGET_HOST_RESTORED 120 putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) 121 putExtra(EXTRA_APPWIDGET_IDS, newIds) 122 putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) 123 } 124 125 // When 126 receiverUnderTest.onReceive(DeviceHelpers.context, intent) 127 128 // Then 129 assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() 130 } 131 132 @Test AppWidgetsRestoredReceiver does not set widget ids when old ids not setnull133 fun `AppWidgetsRestoredReceiver does not set widget ids when old ids not set`() { 134 // Given 135 val newIds = intArrayOf(10, 11, 12) 136 val intent = 137 Intent().apply { 138 component = null 139 `package` = TEST_PACKAGE 140 action = ACTION_APPWIDGET_HOST_RESTORED 141 putExtra(EXTRA_APPWIDGET_IDS, newIds) 142 putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) 143 } 144 145 // When 146 receiverUnderTest.onReceive(DeviceHelpers.context, intent) 147 148 // Then 149 assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() 150 } 151 152 @Test AppWidgetsRestoredReceiver does not set widget ids when new ids not setnull153 fun `AppWidgetsRestoredReceiver does not set widget ids when new ids not set`() { 154 // Given 155 val oldIds = intArrayOf(10, 11, 12) 156 val intent = 157 Intent().apply { 158 component = null 159 `package` = TEST_PACKAGE 160 action = ACTION_APPWIDGET_HOST_RESTORED 161 putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) 162 putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) 163 } 164 165 // When 166 receiverUnderTest.onReceive(DeviceHelpers.context, intent) 167 168 // Then 169 assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() 170 } 171 } 172