126 lines
5.7 KiB
Java
126 lines
5.7 KiB
Java
package androidx.work.impl;
|
|
|
|
import android.content.Context;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.RestrictTo;
|
|
import androidx.room.Database;
|
|
import androidx.room.Room;
|
|
import androidx.room.RoomDatabase;
|
|
import androidx.room.TypeConverters;
|
|
import androidx.sqlite.db.SupportSQLiteDatabase;
|
|
import androidx.sqlite.db.SupportSQLiteOpenHelper;
|
|
import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory;
|
|
import androidx.work.Data;
|
|
import androidx.work.impl.WorkDatabaseMigrations;
|
|
import androidx.work.impl.model.Dependency;
|
|
import androidx.work.impl.model.DependencyDao;
|
|
import androidx.work.impl.model.Preference;
|
|
import androidx.work.impl.model.PreferenceDao;
|
|
import androidx.work.impl.model.RawWorkInfoDao;
|
|
import androidx.work.impl.model.SystemIdInfo;
|
|
import androidx.work.impl.model.SystemIdInfoDao;
|
|
import androidx.work.impl.model.WorkName;
|
|
import androidx.work.impl.model.WorkNameDao;
|
|
import androidx.work.impl.model.WorkProgress;
|
|
import androidx.work.impl.model.WorkProgressDao;
|
|
import androidx.work.impl.model.WorkSpec;
|
|
import androidx.work.impl.model.WorkSpecDao;
|
|
import androidx.work.impl.model.WorkTag;
|
|
import androidx.work.impl.model.WorkTagDao;
|
|
import androidx.work.impl.model.WorkTypeConverters;
|
|
import c.d.b.a.a;
|
|
import java.util.concurrent.Executor;
|
|
import java.util.concurrent.TimeUnit;
|
|
@TypeConverters({Data.class, WorkTypeConverters.class})
|
|
@Database(entities = {Dependency.class, WorkSpec.class, WorkTag.class, SystemIdInfo.class, WorkName.class, WorkProgress.class, Preference.class}, version = 11)
|
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP})
|
|
public abstract class WorkDatabase extends RoomDatabase {
|
|
private static final String PRUNE_SQL_FORMAT_PREFIX = "DELETE FROM workspec WHERE state IN (2, 3, 5) AND (period_start_time + minimum_retention_duration) < ";
|
|
private static final String PRUNE_SQL_FORMAT_SUFFIX = " AND (SELECT COUNT(*)=0 FROM dependency WHERE prerequisite_id=id AND work_spec_id NOT IN (SELECT id FROM workspec WHERE state IN (2, 3, 5)))";
|
|
private static final long PRUNE_THRESHOLD_MILLIS = TimeUnit.DAYS.toMillis(7);
|
|
|
|
/* renamed from: androidx.work.impl.WorkDatabase$1 reason: invalid class name */
|
|
public class AnonymousClass1 implements SupportSQLiteOpenHelper.Factory {
|
|
public final /* synthetic */ Context val$context;
|
|
|
|
public AnonymousClass1(Context context) {
|
|
this.val$context = context;
|
|
}
|
|
|
|
@Override // androidx.sqlite.db.SupportSQLiteOpenHelper.Factory
|
|
@NonNull
|
|
public SupportSQLiteOpenHelper create(@NonNull SupportSQLiteOpenHelper.Configuration configuration) {
|
|
SupportSQLiteOpenHelper.Configuration.Builder builder = SupportSQLiteOpenHelper.Configuration.builder(this.val$context);
|
|
builder.name(configuration.name).callback(configuration.callback).noBackupDirectory(true);
|
|
return new FrameworkSQLiteOpenHelperFactory().create(builder.build());
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.work.impl.WorkDatabase$2 reason: invalid class name */
|
|
public class AnonymousClass2 extends RoomDatabase.Callback {
|
|
@Override // androidx.room.RoomDatabase.Callback
|
|
public void onOpen(@NonNull SupportSQLiteDatabase supportSQLiteDatabase) {
|
|
super.onOpen(supportSQLiteDatabase);
|
|
supportSQLiteDatabase.beginTransaction();
|
|
try {
|
|
supportSQLiteDatabase.execSQL(WorkDatabase.getPruneSQL());
|
|
supportSQLiteDatabase.setTransactionSuccessful();
|
|
} finally {
|
|
supportSQLiteDatabase.endTransaction();
|
|
}
|
|
}
|
|
}
|
|
|
|
@NonNull
|
|
public static WorkDatabase create(@NonNull Context context, @NonNull Executor executor, boolean z2) {
|
|
RoomDatabase.Builder builder;
|
|
if (z2) {
|
|
builder = Room.inMemoryDatabaseBuilder(context, WorkDatabase.class).allowMainThreadQueries();
|
|
} else {
|
|
builder = Room.databaseBuilder(context, WorkDatabase.class, WorkDatabasePathHelper.getWorkDatabaseName());
|
|
builder.openHelperFactory(new AnonymousClass1(context));
|
|
}
|
|
return (WorkDatabase) builder.setQueryExecutor(executor).addCallback(generateCleanupCallback()).addMigrations(WorkDatabaseMigrations.MIGRATION_1_2).addMigrations(new WorkDatabaseMigrations.RescheduleMigration(context, 2, 3)).addMigrations(WorkDatabaseMigrations.MIGRATION_3_4).addMigrations(WorkDatabaseMigrations.MIGRATION_4_5).addMigrations(new WorkDatabaseMigrations.RescheduleMigration(context, 5, 6)).addMigrations(WorkDatabaseMigrations.MIGRATION_6_7).addMigrations(WorkDatabaseMigrations.MIGRATION_7_8).addMigrations(WorkDatabaseMigrations.MIGRATION_8_9).addMigrations(new WorkDatabaseMigrations.WorkMigration9To10(context)).addMigrations(new WorkDatabaseMigrations.RescheduleMigration(context, 10, 11)).fallbackToDestructiveMigration().build();
|
|
}
|
|
|
|
public static RoomDatabase.Callback generateCleanupCallback() {
|
|
return new AnonymousClass2();
|
|
}
|
|
|
|
public static long getPruneDate() {
|
|
return System.currentTimeMillis() - PRUNE_THRESHOLD_MILLIS;
|
|
}
|
|
|
|
@NonNull
|
|
public static String getPruneSQL() {
|
|
StringBuilder K = a.K(PRUNE_SQL_FORMAT_PREFIX);
|
|
K.append(getPruneDate());
|
|
K.append(PRUNE_SQL_FORMAT_SUFFIX);
|
|
return K.toString();
|
|
}
|
|
|
|
@NonNull
|
|
public abstract DependencyDao dependencyDao();
|
|
|
|
@NonNull
|
|
public abstract PreferenceDao preferenceDao();
|
|
|
|
@NonNull
|
|
public abstract RawWorkInfoDao rawWorkInfoDao();
|
|
|
|
@NonNull
|
|
public abstract SystemIdInfoDao systemIdInfoDao();
|
|
|
|
@NonNull
|
|
public abstract WorkNameDao workNameDao();
|
|
|
|
@NonNull
|
|
public abstract WorkProgressDao workProgressDao();
|
|
|
|
@NonNull
|
|
public abstract WorkSpecDao workSpecDao();
|
|
|
|
@NonNull
|
|
public abstract WorkTagDao workTagDao();
|
|
}
|