Add implicit tags to all WorkRequests.
am: 8dfe54b350
Change-Id: I7001c43c3fb84024335913ebafee01016e961dab
diff --git a/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java b/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
index ca82c50..c131117 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/WorkDatabaseMigrationTest.java
@@ -16,12 +16,15 @@
package androidx.work;
+import static android.database.sqlite.SQLiteDatabase.CONFLICT_FAIL;
+
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.db.framework.FrameworkSQLiteOpenHelperFactory;
import android.arch.persistence.room.testing.MigrationTestHelper;
+import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.support.test.InstrumentationRegistry;
@@ -30,6 +33,9 @@
import androidx.work.impl.WorkDatabase;
import androidx.work.impl.WorkDatabaseMigrations;
+import androidx.work.impl.model.WorkSpec;
+import androidx.work.impl.model.WorkTypeConverters;
+import androidx.work.worker.TestWorker;
import org.junit.Before;
import org.junit.Rule;
@@ -86,6 +92,33 @@
SupportSQLiteDatabase database =
mMigrationTestHelper.createDatabase(TEST_DATABASE, OLD_VERSION);
+ String workSpecId0 = UUID.randomUUID().toString();
+ ContentValues contentValues = new ContentValues();
+ contentValues.put("id", workSpecId0);
+ contentValues.put("state", WorkTypeConverters.StateIds.ENQUEUED);
+ contentValues.put("worker_class_name", TestWorker.class.getName());
+ contentValues.put("input_merger_class_name", OverwritingInputMerger.class.getName());
+ contentValues.put("input", Data.toByteArray(Data.EMPTY));
+ contentValues.put("output", Data.toByteArray(Data.EMPTY));
+ contentValues.put("initial_delay", 0L);
+ contentValues.put("interval_duration", 0L);
+ contentValues.put("flex_duration", 0L);
+ contentValues.put("required_network_type", false);
+ contentValues.put("requires_charging", false);
+ contentValues.put("requires_device_idle", false);
+ contentValues.put("requires_battery_not_low", false);
+ contentValues.put("requires_storage_not_low", false);
+ contentValues.put("content_uri_triggers",
+ WorkTypeConverters.contentUriTriggersToByteArray(new ContentUriTriggers()));
+ contentValues.put("run_attempt_count", 0);
+ contentValues.put("backoff_policy",
+ WorkTypeConverters.backoffPolicyToInt(BackoffPolicy.EXPONENTIAL));
+ contentValues.put("backoff_delay_duration", WorkRequest.DEFAULT_BACKOFF_DELAY_MILLIS);
+ contentValues.put("period_start_time", 0L);
+ contentValues.put("minimum_retention_duration", 0L);
+ contentValues.put("schedule_requested_at", WorkSpec.SCHEDULE_NOT_REQUESTED_YET);
+ database.insert("workspec", CONFLICT_FAIL, contentValues);
+
String workSpecId1 = UUID.randomUUID().toString();
String workSpecId2 = UUID.randomUUID().toString();
@@ -101,6 +134,14 @@
VALIDATE_DROPPED_TABLES,
WorkDatabaseMigrations.MIGRATION_1_2);
+ Cursor tagCursor = database.query("SELECT * FROM worktag");
+ assertThat(tagCursor.getCount(), is(1));
+ tagCursor.moveToFirst();
+ assertThat(tagCursor.getString(tagCursor.getColumnIndex("tag")),
+ is(TestWorker.class.getName()));
+ assertThat(tagCursor.getString(tagCursor.getColumnIndex("work_spec_id")), is(workSpecId0));
+ tagCursor.close();
+
Cursor cursor = database.query(CHECK_SYSTEM_ID_INFO);
assertThat(cursor.getCount(), is(2));
cursor.moveToFirst();
diff --git a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
index a96c677..3e01164 100644
--- a/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
+++ b/work/workmanager/src/androidTest/java/androidx/work/impl/WorkManagerImplTest.java
@@ -171,6 +171,18 @@
@Test
@SmallTest
+ public void testEnqueue_AddsImplicitTags() {
+ OneTimeWorkRequest work = new OneTimeWorkRequest.Builder(TestWorker.class).build();
+ mWorkManagerImpl.synchronous().enqueueSync(work);
+
+ WorkTagDao workTagDao = mDatabase.workTagDao();
+ List<String> tags = workTagDao.getTagsForWorkSpecId(work.getStringId());
+ assertThat(tags, is(notNullValue()));
+ assertThat(tags, contains(TestWorker.class.getName()));
+ }
+
+ @Test
+ @SmallTest
public void testEnqueue_insertMultipleWork() {
OneTimeWorkRequest work1 = new OneTimeWorkRequest.Builder(TestWorker.class).build();
OneTimeWorkRequest work2 = new OneTimeWorkRequest.Builder(TestWorker.class).build();
@@ -841,12 +853,12 @@
work0.getId(),
ENQUEUED,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(TestWorker.class.getName()));
WorkStatus workStatus1 = new WorkStatus(
work1.getId(),
ENQUEUED,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(TestWorker.class.getName()));
assertThat(captor.getValue(), containsInAnyOrder(workStatus0, workStatus1));
WorkSpecDao workSpecDao = mDatabase.workSpecDao();
@@ -860,7 +872,7 @@
work0.getId(),
RUNNING,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(TestWorker.class.getName()));
assertThat(captor.getValue(), containsInAnyOrder(workStatus0, workStatus1));
clearInvocations(mockObserver);
@@ -874,7 +886,7 @@
work1.getId(),
RUNNING,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(TestWorker.class.getName()));
assertThat(captor.getValue(), containsInAnyOrder(workStatus0, workStatus1));
liveData.removeObservers(testLifecycleOwner);
@@ -907,17 +919,17 @@
work0.getId(),
RUNNING,
Data.EMPTY,
- Arrays.asList(firstTag, secondTag));
+ Arrays.asList(TestWorker.class.getName(), firstTag, secondTag));
WorkStatus workStatus1 = new WorkStatus(
work1.getId(),
BLOCKED,
Data.EMPTY,
- Collections.singletonList(firstTag));
+ Arrays.asList(TestWorker.class.getName(), firstTag));
WorkStatus workStatus2 = new WorkStatus(
work2.getId(),
SUCCEEDED,
Data.EMPTY,
- Collections.singletonList(secondTag));
+ Arrays.asList(TestWorker.class.getName(), secondTag));
List<WorkStatus> workStatuses = mWorkManagerImpl.getStatusesByTagSync(firstTag);
assertThat(workStatuses, containsInAnyOrder(workStatus0, workStatus1));
@@ -969,12 +981,12 @@
work0.getId(),
RUNNING,
Data.EMPTY,
- Arrays.asList(firstTag, secondTag));
+ Arrays.asList(TestWorker.class.getName(), firstTag, secondTag));
WorkStatus workStatus1 = new WorkStatus(
work1.getId(),
BLOCKED,
Data.EMPTY,
- Collections.singletonList(firstTag));
+ Arrays.asList(TestWorker.class.getName(), firstTag));
assertThat(captor.getValue(), containsInAnyOrder(workStatus0, workStatus1));
workSpecDao.setState(ENQUEUED, work0.getStringId());
@@ -987,7 +999,7 @@
work0.getId(),
ENQUEUED,
Data.EMPTY,
- Arrays.asList(firstTag, secondTag));
+ Arrays.asList(TestWorker.class.getName(), firstTag, secondTag));
assertThat(captor.getValue(), containsInAnyOrder(workStatus0, workStatus1));
liveData.removeObservers(testLifecycleOwner);
@@ -1015,17 +1027,17 @@
work0.getId(),
RUNNING,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(InfiniteTestWorker.class.getName()));
WorkStatus workStatus1 = new WorkStatus(
work1.getId(),
BLOCKED,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(InfiniteTestWorker.class.getName()));
WorkStatus workStatus2 = new WorkStatus(
work2.getId(),
BLOCKED,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(InfiniteTestWorker.class.getName()));
List<WorkStatus> workStatuses = mWorkManagerImpl.getStatusesForUniqueWorkSync(uniqueName);
assertThat(workStatuses, containsInAnyOrder(workStatus0, workStatus1, workStatus2));
@@ -1069,17 +1081,17 @@
work0.getId(),
RUNNING,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(InfiniteTestWorker.class.getName()));
WorkStatus workStatus1 = new WorkStatus(
work1.getId(),
BLOCKED,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(InfiniteTestWorker.class.getName()));
WorkStatus workStatus2 = new WorkStatus(
work2.getId(),
BLOCKED,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(InfiniteTestWorker.class.getName()));
assertThat(captor.getValue(), containsInAnyOrder(workStatus0, workStatus1, workStatus2));
workSpecDao.setState(ENQUEUED, work0.getStringId());
@@ -1092,7 +1104,7 @@
work0.getId(),
ENQUEUED,
Data.EMPTY,
- Collections.<String>emptyList());
+ Collections.singletonList(InfiniteTestWorker.class.getName()));
assertThat(captor.getValue(), containsInAnyOrder(workStatus0, workStatus1, workStatus2));
liveData.removeObservers(testLifecycleOwner);
diff --git a/work/workmanager/src/main/java/androidx/work/WorkRequest.java b/work/workmanager/src/main/java/androidx/work/WorkRequest.java
index c1eae64..cfb72b8 100644
--- a/work/workmanager/src/main/java/androidx/work/WorkRequest.java
+++ b/work/workmanager/src/main/java/androidx/work/WorkRequest.java
@@ -121,6 +121,7 @@
public Builder(@NonNull Class<? extends Worker> workerClass) {
mId = UUID.randomUUID();
mWorkSpec = new WorkSpec(mId.toString(), workerClass.getName());
+ addTag(workerClass.getName());
}
/**
diff --git a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
index f5e67bf..82a26ac 100644
--- a/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
+++ b/work/workmanager/src/main/java/androidx/work/impl/WorkDatabaseMigrations.java
@@ -59,10 +59,10 @@
private static final String REMOVE_ALARM_INFO = "DROP TABLE IF EXISTS alarmInfo";
private static final String REMOVE_SYSTEM_ID_INFO = "DROP TABLE IF EXISTS SystemIdInfo";
-
/**
* Removes the {@code alarmInfo} table and substitutes it for a more general
* {@code SystemIdInfo} table.
+ * Adds implicit work tags for all work (a tag with the worker class name).
*/
public static Migration MIGRATION_1_2 = new Migration(VERSION_1, VERSION_2) {
@Override
@@ -70,6 +70,8 @@
database.execSQL(CREATE_SYSTEM_ID_INFO);
database.execSQL(MIGRATE_ALARM_INFO_TO_SYSTEM_ID_INFO);
database.execSQL(REMOVE_ALARM_INFO);
+ database.execSQL("INSERT INTO worktag(tag, work_spec_id) "
+ + "SELECT worker_class_name AS tag, id AS work_spec_id FROM workspec");
}
};
@@ -83,6 +85,7 @@
database.execSQL(CREATE_ALARM_INFO);
database.execSQL(MIGRATE_SYSTEM_ID_INFO_TO_ALARM_INFO);
database.execSQL(REMOVE_SYSTEM_ID_INFO);
+ // Don't remove implicit tags; they may have been added by the developer.
}
};
}