private String summarizeAutoBackupSettings() { final List<String> enabled = new ArrayList<String>(); for (DataType dataType : preferences.getDataTypePreferences().enabled()) { enabled.add(getString(dataType.resId)); } StringBuilder summary = new StringBuilder(); if (!enabled.isEmpty()) { summary.append(getString(R.string.ui_enable_auto_sync_summary, TextUtils.join(", ", enabled))); if (App.isInstalledOnSDCard(getContext())) { summary.append(' ').append(getString(R.string.sd_card_disclaimer)); } } else { summary.append(getString(R.string.ui_enable_auto_sync_no_enabled_summary)); } return summary.toString(); }
public long getMostRecentSyncedDate() { return Math.max(Math.max( getMaxSyncedDate(DataType.SMS), getMaxSyncedDate(DataType.CALLLOG)), getMaxSyncedDate(DataType.MMS)); }
public EnumSet<DataType> enabled() { List<DataType> enabledTypes = new ArrayList<DataType>(); for (DataType t : DataType.values()) { if (isBackupEnabled(t)) { enabledTypes.add(t); } } return enabledTypes.isEmpty() ? EnumSet.noneOf(DataType.class) : EnumSet.copyOf(enabledTypes); }
private void importSms(final Message message) throws IOException, MessagingException { if (LOCAL_LOGV) Log.v(TAG, "importSms(" + message + ")"); final ContentValues values = converter.messageToContentValues(message); final Integer type = values.getAsInteger(Telephony.TextBasedSmsColumns.TYPE); // only restore inbox messages and sent messages - otherwise sms might get sent on restore if (type != null && (type == Telephony.TextBasedSmsColumns.MESSAGE_TYPE_INBOX || type == Telephony.TextBasedSmsColumns.MESSAGE_TYPE_SENT) && !smsExists(values)) { final Uri uri = resolver.insert(Consts.SMS_PROVIDER, values); if (uri != null) { smsIds.add(uri.getLastPathSegment()); Long timestamp = values.getAsLong(Telephony.TextBasedSmsColumns.DATE); if (timestamp != null && preferences.getDataTypePreferences().getMaxSyncedDate(SMS) < timestamp) { preferences.getDataTypePreferences().setMaxSyncedDate(SMS, timestamp); } if (LOCAL_LOGV) Log.v(TAG, "inserted " + uri); } } else { if (LOCAL_LOGV) Log.d(TAG, "ignoring sms"); } }
private BackupState skip(Iterable<DataType> types) { appLog(R.string.app_log_skip_backup_skip_messages); for (DataType type : types) { try { preferences.getDataTypePreferences().setMaxSyncedDate(type, fetcher.getMostRecentTimestamp(type)); } catch (SecurityException e ) { return new BackupState(ERROR, 0, 0, MANUAL, type, e); } } Log.i(TAG, "All messages skipped."); return new BackupState(FINISHED_BACKUP, 0, 0, MANUAL, null, null); }
public BackupFolder getFolder(DataType type, DataTypePreferences preferences) throws MessagingException { BackupFolder folder = openFolders.get(type); if (folder == null) { String label = preferences.getFolder(type); if (label == null) throw new IllegalStateException("label is null"); folder = createAndOpenFolder(type, label); openFolders.put(type, folder); } return folder; }
@Subscribe public void onSettingsReset(SettingsResetEvent event) { preferences.getDataTypePreferences().clearLastSyncData(); preferences.reset(); updateConnected(); }
@Override public void onStop() { super.onStop(); preferences.getDataTypePreferences().registerDataTypeListener(null); }
public Preferences(Context context, SharedPreferences preferences) { this.context = context; this.preferences = preferences; this.dataTypePreferences = new DataTypePreferences(preferences); }
private void idle() { syncDetailsLabel.setText(getLastSyncText(preferences.getDataTypePreferences().getMostRecentSyncedDate())); statusLabel.setText(R.string.status_idle); statusLabel.setTextColor(idleColor); statusIcon.setImageDrawable(idle); }
final boolean restoreCallLog = getPreferences().getDataTypePreferences().isRestoreEnabled(CALLLOG); final boolean restoreSms = getPreferences().getDataTypePreferences().isRestoreEnabled(SMS);
@Test public void shouldSkipItems() throws Exception { when(fetcher.getMostRecentTimestamp(any(DataType.class))).thenReturn(-23L); BackupState finalState = task.doInBackground(new BackupConfig( store, 0, 100, new ContactGroup(-1), BackupType.SKIP, EnumSet.of(SMS), false ) ); verify(dataTypePreferences).setMaxSyncedDate(DataType.SMS, -23); verifyZeroInteractions(dataTypePreferences); assertThat(finalState).isNotNull(); assertThat(finalState.isFinished()).isTrue(); }
private String getSubject(@NonNull DataType type, @NonNull PersonRecord record) { return prefix ? String.format(Locale.ENGLISH, "[%s] %s", dataTypePreferences.getFolder(type), record.getName()) : context.getString(type.withField, record.getName()); }
@Subscribe public void onAccountRemoved(AccountRemovedEvent event) { authPreferences.clearOauth2Data(); preferences.getDataTypePreferences().clearLastSyncData(); findAutoBackupPreference().setChecked(false); updateConnected(); updateAutoBackupPreferences(); }
preferences.getDataTypePreferences().registerDataTypeListener(new DataTypePreferences.DataTypeListener() { @Override public void onChanged(DataType dataType, DataTypePreferences preferences) {
private Query getQueryForCallLog(int max) { return new Query( Consts.CALLLOG_PROVIDER, CALLLOG_PROJECTION, String.format(Locale.ENGLISH, "%s > ?", CallLog.Calls.DATE), new String[] { String.valueOf(preferences.getMaxSyncedDate(CALLLOG)) }, max); }
@Test public void shouldTestForFirstBackupCallLog() throws Exception { preferences.getDataTypePreferences().setMaxSyncedDate(CALLLOG, 1234); assertThat(preferences.isFirstBackup()).isFalse(); } }
@Override public void onChanged(DataType dataType, DataTypePreferences preferences) { if (dataType == DataType.CALLLOG) { findPreference(AdvancedSettings.Backup.CallLog.class.getName()) .setEnabled(preferences.isBackupEnabled(dataType)); } } });
private EnumSet<DataType> getEnabledBackupTypes() throws BackupDisabledException { EnumSet<DataType> dataTypes = getPreferences().getDataTypePreferences().enabled(); if (dataTypes.isEmpty()) { throw new BackupDisabledException(); } return dataTypes; }
private void updateImapFolderLabelFromPref() { String imapFolder = preferences.getDataTypePreferences().getFolder(SMS); findPreference(SMS.folderPreference).setTitle(imapFolder); }