| package com.android.launcher3 |
| |
| import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_DELETED |
| import android.appwidget.AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED |
| import android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_IDS |
| import android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS |
| import android.appwidget.AppWidgetManager.EXTRA_HOST_ID |
| import android.content.Intent |
| import android.platform.uiautomator_helpers.DeviceHelpers |
| import androidx.test.ext.junit.runners.AndroidJUnit4 |
| import androidx.test.filters.SmallTest |
| import com.android.launcher3.LauncherPrefs.Companion.APP_WIDGET_IDS |
| import com.android.launcher3.LauncherPrefs.Companion.OLD_APP_WIDGET_IDS |
| import com.android.launcher3.util.IntArray |
| import com.android.launcher3.util.LauncherModelHelper.TEST_PACKAGE |
| import com.android.launcher3.widget.LauncherWidgetHolder.APPWIDGET_HOST_ID |
| import com.google.common.truth.Truth.assertThat |
| import org.junit.After |
| import org.junit.Before |
| import org.junit.Test |
| import org.junit.runner.RunWith |
| |
| /** Tests for [AppWidgetsRestoredReceiver] */ |
| @SmallTest |
| @RunWith(AndroidJUnit4::class) |
| class AppWidgetsRestoredReceiverTest { |
| private lateinit var launcherPrefs: LauncherPrefs |
| private lateinit var receiverUnderTest: AppWidgetsRestoredReceiver |
| |
| @Before |
| fun setup() { |
| launcherPrefs = LauncherPrefs(DeviceHelpers.context) |
| receiverUnderTest = AppWidgetsRestoredReceiver() |
| } |
| |
| @After |
| fun tearDown() { |
| launcherPrefs.remove(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS) |
| } |
| |
| @Test |
| fun `When AppWidgetsRestoredReceiver gets valid broadcast it sets old and new app widget ids`() { |
| // Given |
| val oldIds = intArrayOf(1, 2, 10) |
| val newIds = intArrayOf(10, 11, 12) |
| val expectedOldIds = IntArray.wrap(*oldIds).toConcatString() |
| val expectedNewIds = IntArray.wrap(*newIds).toConcatString() |
| val intent = |
| Intent().apply { |
| component = null |
| `package` = TEST_PACKAGE |
| action = ACTION_APPWIDGET_HOST_RESTORED |
| putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) |
| putExtra(EXTRA_APPWIDGET_IDS, newIds) |
| putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) |
| } |
| |
| // When |
| receiverUnderTest.onReceive(DeviceHelpers.context, intent) |
| |
| // Then |
| assertThat(launcherPrefs.get(OLD_APP_WIDGET_IDS)).isEqualTo(expectedOldIds) |
| assertThat(launcherPrefs.get(APP_WIDGET_IDS)).isEqualTo(expectedNewIds) |
| } |
| |
| @Test |
| fun `AppWidgetsRestoredReceiver does not set widget ids when Intent action is invalid`() { |
| // Given |
| val oldIds = intArrayOf(1, 2, 10) |
| val newIds = intArrayOf(10, 11, 12) |
| val intent = |
| Intent().apply { |
| component = null |
| `package` = TEST_PACKAGE |
| action = ACTION_APPWIDGET_DELETED |
| putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) |
| putExtra(EXTRA_APPWIDGET_IDS, newIds) |
| putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) |
| } |
| |
| // When |
| receiverUnderTest.onReceive(DeviceHelpers.context, intent) |
| |
| // Then |
| assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() |
| } |
| |
| @Test |
| fun `AppWidgetsRestoredReceiver does not set widget ids when Intent host id is not Launcher`() { |
| // Given |
| val oldIds = intArrayOf(1, 2, 10) |
| val newIds = intArrayOf(10, 11, 12) |
| val intent = |
| Intent().apply { |
| component = null |
| `package` = TEST_PACKAGE |
| action = ACTION_APPWIDGET_HOST_RESTORED |
| putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) |
| putExtra(EXTRA_APPWIDGET_IDS, newIds) |
| putExtra(EXTRA_HOST_ID, 999999999) |
| } |
| |
| // When |
| receiverUnderTest.onReceive(DeviceHelpers.context, intent) |
| |
| // Then |
| assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() |
| } |
| |
| @Test |
| fun `AppWidgetsRestoredReceiver does not set ids when new and old ids differ in length`() { |
| // Given |
| val oldIds = intArrayOf(10) |
| val newIds = intArrayOf(10, 11, 12) |
| val intent = |
| Intent().apply { |
| component = null |
| `package` = TEST_PACKAGE |
| action = ACTION_APPWIDGET_HOST_RESTORED |
| putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) |
| putExtra(EXTRA_APPWIDGET_IDS, newIds) |
| putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) |
| } |
| |
| // When |
| receiverUnderTest.onReceive(DeviceHelpers.context, intent) |
| |
| // Then |
| assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() |
| } |
| |
| @Test |
| fun `AppWidgetsRestoredReceiver does not set widget ids when old ids not set`() { |
| // Given |
| val newIds = intArrayOf(10, 11, 12) |
| val intent = |
| Intent().apply { |
| component = null |
| `package` = TEST_PACKAGE |
| action = ACTION_APPWIDGET_HOST_RESTORED |
| putExtra(EXTRA_APPWIDGET_IDS, newIds) |
| putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) |
| } |
| |
| // When |
| receiverUnderTest.onReceive(DeviceHelpers.context, intent) |
| |
| // Then |
| assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() |
| } |
| |
| @Test |
| fun `AppWidgetsRestoredReceiver does not set widget ids when new ids not set`() { |
| // Given |
| val oldIds = intArrayOf(10, 11, 12) |
| val intent = |
| Intent().apply { |
| component = null |
| `package` = TEST_PACKAGE |
| action = ACTION_APPWIDGET_HOST_RESTORED |
| putExtra(EXTRA_APPWIDGET_OLD_IDS, oldIds) |
| putExtra(EXTRA_HOST_ID, APPWIDGET_HOST_ID) |
| } |
| |
| // When |
| receiverUnderTest.onReceive(DeviceHelpers.context, intent) |
| |
| // Then |
| assertThat(launcherPrefs.has(OLD_APP_WIDGET_IDS, APP_WIDGET_IDS)).isFalse() |
| } |
| } |