package co.smartreceipts.android.sync.drive.device;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.google.common.base.Preconditions;
import java.sql.Date;
import co.smartreceipts.android.sync.model.impl.Identifier;
public class GoogleDriveSyncMetadata {
private static final String PREFS_GOOGLE_DRIVE = "prefs_google_drive.xml";
private static final String KEY_DEVICE_IDENTIFIER = "key_device_identifier";
private static final String KEY_DRIVE_DATABASE_IDENTIFIER = "key_drive_database_identifier";
private static final String KEY_DRIVE_LAST_SYNC = "key_drive_last_sync";
private final SharedPreferences mSharedPreferences;
private final DeviceMetadata mDeviceMetadata;
public GoogleDriveSyncMetadata(@NonNull Context context) {
this(context.getSharedPreferences(PREFS_GOOGLE_DRIVE, Context.MODE_PRIVATE), new DeviceMetadata(context));
}
private GoogleDriveSyncMetadata(@NonNull SharedPreferences sharedPreferences, @NonNull DeviceMetadata deviceMetadata) {
mSharedPreferences = Preconditions.checkNotNull(sharedPreferences);
mDeviceMetadata = Preconditions.checkNotNull(deviceMetadata);
}
@NonNull
public synchronized Identifier getDeviceIdentifier() {
final String id = mSharedPreferences.getString(KEY_DEVICE_IDENTIFIER, null);
if (id != null) {
return new Identifier(id);
} else {
final String uniqueDeviceId = mDeviceMetadata.getUniqueDeviceId();
mSharedPreferences.edit().putString(KEY_DEVICE_IDENTIFIER, uniqueDeviceId).apply();
return new Identifier(uniqueDeviceId);
}
}
@Nullable
public synchronized Identifier getDatabaseSyncIdentifier() {
final String id = mSharedPreferences.getString(KEY_DRIVE_DATABASE_IDENTIFIER, null);
if (id != null) {
return new Identifier(id);
} else {
return null;
}
}
public synchronized void setDatabaseSyncIdentifier(@NonNull Identifier databaseSyncIdentifier) {
Preconditions.checkNotNull(databaseSyncIdentifier);
mSharedPreferences.edit().putString(KEY_DRIVE_DATABASE_IDENTIFIER, databaseSyncIdentifier.getId()).apply();
mSharedPreferences.edit().putLong(KEY_DRIVE_LAST_SYNC, System.currentTimeMillis()).apply();
}
@NonNull
public synchronized Date getLastDatabaseSyncTime() {
final long syncTime = mSharedPreferences.getLong(KEY_DRIVE_LAST_SYNC, 0L);
return new Date(syncTime);
}
public void clear() {
mSharedPreferences.edit().clear().apply();
}
}