Add graceful migration of the old boolean setting to the new String setting

This commit is contained in:
Christoph Loy 2020-02-26 19:00:37 +01:00
parent 2dbd7e303b
commit 84fdfc7ea3
No known key found for this signature in database
GPG key ID: 9179970615A6E7C9
6 changed files with 52 additions and 14 deletions

View file

@ -42,7 +42,7 @@ public class NoteListWidget extends AppWidgetProvider {
}
String category = sp.getString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, null);
darkTheme = sp.getString(NoteListWidget.DARK_THEME_KEY + appWidgetId, DarkModeSetting.SYSTEM_DEFAULT.name());
darkTheme = getDarkThemeSetting(sp, appWidgetId);
Intent serviceIntent = new Intent(context, NoteListWidgetService.class);
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
@ -158,4 +158,14 @@ public class NoteListWidget extends AppWidgetProvider {
return null;
}
public static String getDarkThemeSetting(SharedPreferences sharedPreferences, int appWidgetId) {
try {
return sharedPreferences.getString(DARK_THEME_KEY + appWidgetId, DarkModeSetting.SYSTEM_DEFAULT.name());
} catch (ClassCastException e) {
//DARK_THEME was a boolean in older versions of the app. We thereofre have to still support the old setting.
boolean isDarkTheme = sharedPreferences.getBoolean(DARK_THEME_KEY + appWidgetId, false);
return isDarkTheme ? DarkModeSetting.DARK.name() : DarkModeSetting.LIGHT.name();
}
}
}

View file

@ -34,7 +34,7 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact
AppWidgetManager.INVALID_APPWIDGET_ID);
final SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this.context);
displayMode = sp.getInt(NoteListWidget.WIDGET_MODE_KEY + appWidgetId, -1);
String themeName = sp.getString(NoteListWidget.DARK_THEME_KEY + appWidgetId, DarkModeSetting.SYSTEM_DEFAULT.name());
String themeName = NoteListWidget.getDarkThemeSetting(sp, appWidgetId);
DarkModeSetting theme = DarkModeSetting.valueOf(themeName);
darkTheme = Notes.isDarkThemeActive(context, theme);
category = sp.getString(NoteListWidget.WIDGET_CATEGORY_KEY + appWidgetId, "");

View file

@ -34,12 +34,11 @@ public class SingleNoteWidget extends AppWidgetProvider {
return;
}
String darkThemeName = sp.getString(DARK_THEME_KEY + appWidgetId, DarkModeSetting.SYSTEM_DEFAULT.name());
DarkModeSetting darkTheme = DarkModeSetting.valueOf(darkThemeName);
DarkModeSetting darkTheme = getDarkThemeSetting(sp, appWidgetId);
templateIntent.putExtra(BaseNoteFragment.PARAM_ACCOUNT_ID, sp.getLong(ACCOUNT_ID_KEY + appWidgetId, -1));
PendingIntent templatePendingIntent = PendingIntent.getActivity(context, appWidgetId, templateIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent.FLAG_UPDATE_CURRENT);
Intent serviceIntent = new Intent(context, SingleNoteWidgetService.class);
serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
@ -76,7 +75,7 @@ public class SingleNoteWidget extends AppWidgetProvider {
AppWidgetManager awm = AppWidgetManager.getInstance(context);
updateAppWidget(context, AppWidgetManager.getInstance(context),
(awm.getAppWidgetIds(new ComponentName(context, SingleNoteWidget.class))));
(awm.getAppWidgetIds(new ComponentName(context, SingleNoteWidget.class))));
}
@Override
@ -93,4 +92,15 @@ public class SingleNoteWidget extends AppWidgetProvider {
editor.apply();
super.onDeleted(context, appWidgetIds);
}
public static DarkModeSetting getDarkThemeSetting(SharedPreferences sharedPreferences, int appWidgetId) {
try {
String themeName = sharedPreferences.getString(DARK_THEME_KEY + appWidgetId, DarkModeSetting.SYSTEM_DEFAULT.name());
return DarkModeSetting.valueOf(themeName);
} catch (ClassCastException e) {
//DARK_THEME was a boolean in older versions of the app. We thereofre have to still support the old setting.
boolean isDarkTheme = sharedPreferences.getBoolean(DARK_THEME_KEY + appWidgetId, false);
return isDarkTheme ? DarkModeSetting.DARK : DarkModeSetting.LIGHT;
}
}
}

View file

@ -14,7 +14,6 @@ import com.yydcdut.markdown.MarkdownProcessor;
import com.yydcdut.markdown.syntax.text.TextFactory;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.android.DarkModeSetting;
import it.niedermann.owncloud.notes.android.activity.EditNoteActivity;
import it.niedermann.owncloud.notes.model.DBNote;
import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper;
@ -39,8 +38,7 @@ public class SingleNoteWidgetFactory implements RemoteViewsService.RemoteViewsFa
appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
sp = PreferenceManager.getDefaultSharedPreferences(this.context);
String themeName = sp.getString(SingleNoteWidget.DARK_THEME_KEY + appWidgetId, DarkModeSetting.SYSTEM_DEFAULT.name());
darkModeActive = Notes.isDarkThemeActive(context, DarkModeSetting.valueOf(themeName));
darkModeActive = Notes.isDarkThemeActive(context, SingleNoteWidget.getDarkThemeSetting(sp, appWidgetId));
markdownProcessor = new MarkdownProcessor(this.context);
markdownProcessor.factory(TextFactory.create());
markdownProcessor.config(MarkDownUtil.getMarkDownConfiguration(this.context, darkModeActive).build());

View file

@ -38,16 +38,17 @@ import java.util.Map;
import java.util.Set;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.android.DarkModeSetting;
import it.niedermann.owncloud.notes.android.activity.EditNoteActivity;
import it.niedermann.owncloud.notes.android.appwidget.NoteListWidget;
import it.niedermann.owncloud.notes.android.appwidget.SingleNoteWidget;
import it.niedermann.owncloud.notes.model.CloudNote;
import it.niedermann.owncloud.notes.model.DBNote;
import it.niedermann.owncloud.notes.model.DBStatus;
import it.niedermann.owncloud.notes.model.ISyncCallback;
import it.niedermann.owncloud.notes.model.LocalAccount;
import it.niedermann.owncloud.notes.model.NavigationAdapter;
import it.niedermann.owncloud.notes.util.DatabaseIndexUtil;
import it.niedermann.owncloud.notes.model.ISyncCallback;
import it.niedermann.owncloud.notes.util.NoteUtil;
import static it.niedermann.owncloud.notes.android.activity.EditNoteActivity.ACTION_SHORTCUT;
@ -59,7 +60,7 @@ public class NoteSQLiteOpenHelper extends SQLiteOpenHelper {
private static final String TAG = NoteSQLiteOpenHelper.class.getSimpleName();
private static final int database_version = 10;
private static final int database_version = 11;
private static final String database_name = "OWNCLOUD_NOTES";
private static final String table_notes = "NOTES";
@ -290,6 +291,19 @@ public class NoteSQLiteOpenHelper extends SQLiteOpenHelper {
}
cursor.close();
}
if (oldVersion < 11) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
Map<String, ?> prefs = sharedPreferences.getAll();
for (Map.Entry<String, ?> pref : prefs.entrySet()) {
String key = pref.getKey();
if (key.equals("darkTheme") || key.startsWith(NoteListWidget.DARK_THEME_KEY) || key.startsWith(SingleNoteWidget.DARK_THEME_KEY)) {
Boolean darkTheme = (Boolean) pref.getValue();
editor.putString(pref.getKey(), darkTheme ? DarkModeSetting.DARK.name() : DarkModeSetting.LIGHT.name());
}
}
editor.apply();
}
}
@Override
@ -369,7 +383,7 @@ public class NoteSQLiteOpenHelper extends SQLiteOpenHelper {
deleteNoteAndSync(ssoAccount, note.getId());
notifyNotesChanged();
getNoteServerSyncHelper().scheduleSync(ssoAccount,true);
getNoteServerSyncHelper().scheduleSync(ssoAccount, true);
}
/**
@ -686,7 +700,7 @@ public class NoteSQLiteOpenHelper extends SQLiteOpenHelper {
if (callback != null) {
serverSyncHelper.addCallbackPush(ssoAccount, callback);
}
serverSyncHelper.scheduleSync(ssoAccount,true);
serverSyncHelper.scheduleSync(ssoAccount, true);
}
/**

View file

@ -25,7 +25,13 @@ public class Notes extends Application {
public static DarkModeSetting getAppTheme(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String mode = prefs.getString(DARK_THEME, DarkModeSetting.SYSTEM_DEFAULT.name());
String mode;
try {
mode = prefs.getString(DARK_THEME, DarkModeSetting.SYSTEM_DEFAULT.name());
} catch (ClassCastException e) {
boolean darkModeEnabled = prefs.getBoolean(DARK_THEME, false);
mode = darkModeEnabled ? DarkModeSetting.DARK.name() : DarkModeSetting.LIGHT.name();
}
return DarkModeSetting.valueOf(mode);
}