2018-09-05 02:54:17 +00:00
|
|
|
package org.schabi.newpipe.settings.tabs;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.SharedPreferences;
|
|
|
|
import android.preference.PreferenceManager;
|
|
|
|
import android.widget.Toast;
|
|
|
|
|
|
|
|
import org.schabi.newpipe.R;
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
2020-03-31 17:20:15 +00:00
|
|
|
public final class TabsManager {
|
2018-09-05 02:54:17 +00:00
|
|
|
private final SharedPreferences sharedPreferences;
|
|
|
|
private final String savedTabsKey;
|
|
|
|
private final Context context;
|
2020-03-31 17:20:15 +00:00
|
|
|
private SavedTabsChangeListener savedTabsChangeListener;
|
|
|
|
private SharedPreferences.OnSharedPreferenceChangeListener preferenceChangeListener;
|
2018-09-05 02:54:17 +00:00
|
|
|
|
2020-03-31 17:20:15 +00:00
|
|
|
private TabsManager(final Context context) {
|
2018-09-05 02:54:17 +00:00
|
|
|
this.context = context;
|
|
|
|
this.sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
|
|
|
this.savedTabsKey = context.getString(R.string.saved_tabs_key);
|
|
|
|
}
|
|
|
|
|
2020-03-31 17:20:15 +00:00
|
|
|
public static TabsManager getManager(final Context context) {
|
|
|
|
return new TabsManager(context);
|
|
|
|
}
|
|
|
|
|
2018-09-05 02:54:17 +00:00
|
|
|
public List<Tab> getTabs() {
|
|
|
|
final String savedJson = sharedPreferences.getString(savedTabsKey, null);
|
|
|
|
try {
|
|
|
|
return TabsJsonHelper.getTabsFromJson(savedJson);
|
|
|
|
} catch (TabsJsonHelper.InvalidJsonException e) {
|
|
|
|
Toast.makeText(context, R.string.saved_tabs_invalid_json, Toast.LENGTH_SHORT).show();
|
|
|
|
return getDefaultTabs();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-31 17:20:15 +00:00
|
|
|
public void saveTabs(final List<Tab> tabList) {
|
2018-09-05 02:54:17 +00:00
|
|
|
final String jsonToSave = TabsJsonHelper.getJsonToSave(tabList);
|
|
|
|
sharedPreferences.edit().putString(savedTabsKey, jsonToSave).apply();
|
|
|
|
}
|
|
|
|
|
2020-03-31 17:20:15 +00:00
|
|
|
/*//////////////////////////////////////////////////////////////////////////
|
|
|
|
// Listener
|
|
|
|
//////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
2018-09-05 02:54:17 +00:00
|
|
|
public void resetTabs() {
|
|
|
|
sharedPreferences.edit().remove(savedTabsKey).apply();
|
|
|
|
}
|
|
|
|
|
|
|
|
public List<Tab> getDefaultTabs() {
|
2019-03-10 21:38:30 +00:00
|
|
|
return TabsJsonHelper.getDefaultTabs();
|
2018-09-05 02:54:17 +00:00
|
|
|
}
|
|
|
|
|
2020-03-31 17:20:15 +00:00
|
|
|
public void setSavedTabsListener(final SavedTabsChangeListener listener) {
|
2018-09-05 02:54:17 +00:00
|
|
|
if (preferenceChangeListener != null) {
|
|
|
|
sharedPreferences.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener);
|
|
|
|
}
|
|
|
|
savedTabsChangeListener = listener;
|
|
|
|
preferenceChangeListener = getPreferenceChangeListener();
|
|
|
|
sharedPreferences.registerOnSharedPreferenceChangeListener(preferenceChangeListener);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void unsetSavedTabsListener() {
|
|
|
|
if (preferenceChangeListener != null) {
|
|
|
|
sharedPreferences.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener);
|
|
|
|
}
|
|
|
|
preferenceChangeListener = null;
|
|
|
|
savedTabsChangeListener = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
private SharedPreferences.OnSharedPreferenceChangeListener getPreferenceChangeListener() {
|
2020-03-31 17:20:15 +00:00
|
|
|
return (sp, key) -> {
|
2018-09-05 02:54:17 +00:00
|
|
|
if (key.equals(savedTabsKey)) {
|
2020-03-31 17:20:15 +00:00
|
|
|
if (savedTabsChangeListener != null) {
|
|
|
|
savedTabsChangeListener.onTabsChanged();
|
|
|
|
}
|
2018-09-05 02:54:17 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2020-03-31 17:20:15 +00:00
|
|
|
public interface SavedTabsChangeListener {
|
|
|
|
void onTabsChanged();
|
|
|
|
}
|
|
|
|
|
2018-09-05 02:54:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|