package com.termux.shared.settings.preferences; import android.content.Context; import android.content.SharedPreferences; import android.util.TypedValue; import com.termux.shared.termux.TermuxConstants; import com.termux.shared.logger.Logger; import com.termux.shared.termux.TermuxUtils; import com.termux.shared.data.DataUtils; import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_APP; import javax.annotation.Nonnull; public class TermuxAppSharedPreferences { private final Context mContext; private final SharedPreferences mSharedPreferences; private int MIN_FONTSIZE; private int MAX_FONTSIZE; private int DEFAULT_FONTSIZE; private static final String LOG_TAG = "TermuxAppSharedPreferences"; public TermuxAppSharedPreferences(@Nonnull Context context) { // We use the default context if failed to get termux package context mContext = DataUtils.getDefaultIfNull(TermuxUtils.getTermuxPackageContext(context), context); mSharedPreferences = getPrivateSharedPreferences(mContext); setFontVariables(context); } private static SharedPreferences getPrivateSharedPreferences(Context context) { return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION); } public boolean getShowTerminalToolbar() { return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_SHOW_TERMINAL_TOOLBAR, TERMUX_APP.DEFAULT_VALUE_SHOW_TERMINAL_TOOLBAR); } public void setShowTerminalToolbar(boolean value) { SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_APP.KEY_SHOW_TERMINAL_TOOLBAR, value, false); } public boolean toogleShowTerminalToolbar() { boolean currentValue = getShowTerminalToolbar(); setShowTerminalToolbar(!currentValue); return !currentValue; } public boolean getSoftKeyboardEnabled() { return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_SOFT_KEYBOARD_ENABLED, TERMUX_APP.DEFAULT_VALUE_KEY_SOFT_KEYBOARD_ENABLED); } public void setSoftKeyboardEnabled(boolean value) { SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_APP.KEY_SOFT_KEYBOARD_ENABLED, value, false); } public boolean getKeepScreenOn() { return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_KEEP_SCREEN_ON, TERMUX_APP.DEFAULT_VALUE_KEEP_SCREEN_ON); } public void setKeepScreenOn(boolean value) { SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_APP.KEY_KEEP_SCREEN_ON, value, false); } private void setFontVariables(Context context) { float dipInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, context.getResources().getDisplayMetrics()); // This is a bit arbitrary and sub-optimal. We want to give a sensible default for minimum font size // to prevent invisible text due to zoom be mistake: MIN_FONTSIZE = (int) (4f * dipInPixels); // http://www.google.com/design/spec/style/typography.html#typography-line-height int defaultFontSize = Math.round(12 * dipInPixels); // Make it divisible by 2 since that is the minimal adjustment step: if (defaultFontSize % 2 == 1) defaultFontSize--; DEFAULT_FONTSIZE = defaultFontSize; MAX_FONTSIZE = 256; } public int getFontSize() { int fontSize = SharedPreferenceUtils.getIntStoredAsString(mSharedPreferences, TERMUX_APP.KEY_FONTSIZE, DEFAULT_FONTSIZE); return DataUtils.clamp(fontSize, MIN_FONTSIZE, MAX_FONTSIZE); } public void setFontSize(int value) { SharedPreferenceUtils.setIntStoredAsString(mSharedPreferences, TERMUX_APP.KEY_FONTSIZE, value, false); } public void changeFontSize(boolean increase) { int fontSize = getFontSize(); fontSize += (increase ? 1 : -1) * 2; fontSize = Math.max(MIN_FONTSIZE, Math.min(fontSize, MAX_FONTSIZE)); setFontSize(fontSize); } public String getCurrentSession() { return SharedPreferenceUtils.getString(mSharedPreferences, TERMUX_APP.KEY_CURRENT_SESSION, null); } public void setCurrentSession(String value) { SharedPreferenceUtils.setString(mSharedPreferences, TERMUX_APP.KEY_CURRENT_SESSION, value, false); } public int getLogLevel() { return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL); } public void setLogLevel(Context context, int logLevel) { logLevel = Logger.setLogLevel(context, logLevel); SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_APP.KEY_LOG_LEVEL, logLevel, false); } public int getLastNotificationId() { return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_APP.KEY_LAST_NOTIFICATION_ID, TERMUX_APP.DEFAULT_VALUE_KEY_LAST_NOTIFICATION_ID); } public void setLastNotificationId(int notificationId) { SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_APP.KEY_LAST_NOTIFICATION_ID, notificationId, false); } public boolean getTerminalViewKeyLoggingEnabled() { return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_TERMINAL_VIEW_KEY_LOGGING_ENABLED, TERMUX_APP.DEFAULT_VALUE_TERMINAL_VIEW_KEY_LOGGING_ENABLED); } public void setTerminalViewKeyLoggingEnabled(boolean value) { SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_APP.KEY_TERMINAL_VIEW_KEY_LOGGING_ENABLED, value, false); } public boolean getPluginErrorNotificationsEnabled() { return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_PLUGIN_ERROR_NOTIFICATIONS_ENABLED, TERMUX_APP.DEFAULT_VALUE_PLUGIN_ERROR_NOTIFICATIONS_ENABLED); } public void setPluginErrorNotificationsEnabled(boolean value) { SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_APP.KEY_PLUGIN_ERROR_NOTIFICATIONS_ENABLED, value, false); } public boolean getCrashReportNotificationsEnabled() { return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_CRASH_REPORT_NOTIFICATIONS_ENABLED, TERMUX_APP.DEFAULT_VALUE_CRASH_REPORT_NOTIFICATIONS_ENABLED); } public void setCrashReportNotificationsEnabled(boolean value) { SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_APP.KEY_CRASH_REPORT_NOTIFICATIONS_ENABLED, value, false); } }