mirror of
https://github.com/fankes/termux-app.git
synced 2025-09-09 20:14:04 +08:00
Changed!: Move Termux specific classes to com.termux.shared.termux package
This will allow segregation of Termux utils/classes from general ones and also allow easier management of GPLv3 License for Termux classes
This commit is contained in:
@@ -1,87 +0,0 @@
|
||||
package com.termux.shared.settings.preferences;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.termux.shared.logger.Logger;
|
||||
import com.termux.shared.packages.PackageUtils;
|
||||
import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_API_APP;
|
||||
import com.termux.shared.termux.TermuxConstants;
|
||||
|
||||
public class TermuxAPIAppSharedPreferences {
|
||||
|
||||
private final Context mContext;
|
||||
private final SharedPreferences mSharedPreferences;
|
||||
private final SharedPreferences mMultiProcessSharedPreferences;
|
||||
|
||||
|
||||
private static final String LOG_TAG = "TermuxAPIAppSharedPreferences";
|
||||
|
||||
private TermuxAPIAppSharedPreferences(@NonNull Context context) {
|
||||
mContext = context;
|
||||
mSharedPreferences = getPrivateSharedPreferences(mContext);
|
||||
mMultiProcessSharedPreferences = getPrivateAndMultiProcessSharedPreferences(mContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Context} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_API_PACKAGE_NAME}.
|
||||
* @return Returns the {@link TermuxAPIAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
@Nullable
|
||||
public static TermuxAPIAppSharedPreferences build(@NonNull final Context context) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_API_PACKAGE_NAME);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxAPIAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Activity} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_API_PACKAGE_NAME}.
|
||||
* @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
|
||||
* be shown which when dismissed will exit the app.
|
||||
* @return Returns the {@link TermuxAPIAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
public static TermuxAPIAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_API_PACKAGE_NAME, exitAppOnError);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxAPIAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_API_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateAndMultiProcessSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateAndMultiProcessSharedPreferences(context, TermuxConstants.TERMUX_API_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int getLogLevel(boolean readFromFile) {
|
||||
if (readFromFile)
|
||||
return SharedPreferenceUtils.getInt(mMultiProcessSharedPreferences, TERMUX_API_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
else
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_API_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
}
|
||||
|
||||
public void setLogLevel(Context context, int logLevel, boolean commitToFile) {
|
||||
logLevel = Logger.setLogLevel(context, logLevel);
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_API_APP.KEY_LOG_LEVEL, logLevel, commitToFile);
|
||||
}
|
||||
|
||||
}
|
@@ -1,237 +0,0 @@
|
||||
package com.termux.shared.settings.preferences;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.util.TypedValue;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.termux.shared.packages.PackageUtils;
|
||||
import com.termux.shared.termux.TermuxConstants;
|
||||
import com.termux.shared.logger.Logger;
|
||||
import com.termux.shared.data.DataUtils;
|
||||
import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_APP;
|
||||
|
||||
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";
|
||||
|
||||
private TermuxAppSharedPreferences(@NonNull Context context) {
|
||||
mContext = context;
|
||||
mSharedPreferences = getPrivateSharedPreferences(mContext);
|
||||
|
||||
setFontVariables(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Context} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_PACKAGE_NAME}.
|
||||
* @return Returns the {@link TermuxAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
@Nullable
|
||||
public static TermuxAppSharedPreferences build(@NonNull final Context context) {
|
||||
Context termuxPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_PACKAGE_NAME);
|
||||
if (termuxPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxAppSharedPreferences(termuxPackageContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Activity} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_PACKAGE_NAME}.
|
||||
* @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
|
||||
* be shown which when dismissed will exit the app.
|
||||
* @return Returns the {@link TermuxAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
public static TermuxAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
|
||||
Context termuxPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_PACKAGE_NAME, exitAppOnError);
|
||||
if (termuxPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxAppSharedPreferences(termuxPackageContext);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public boolean shouldShowTerminalToolbar() {
|
||||
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 = shouldShowTerminalToolbar();
|
||||
setShowTerminalToolbar(!currentValue);
|
||||
return !currentValue;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public boolean isTerminalMarginAdjustmentEnabled() {
|
||||
return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_TERMINAL_MARGIN_ADJUSTMENT, TERMUX_APP.DEFAULT_TERMINAL_MARGIN_ADJUSTMENT);
|
||||
}
|
||||
|
||||
public void setTerminalMarginAdjustment(boolean value) {
|
||||
SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_APP.KEY_TERMINAL_MARGIN_ADJUSTMENT, value, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public boolean isSoftKeyboardEnabled() {
|
||||
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 isSoftKeyboardEnabledOnlyIfNoHardware() {
|
||||
return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_APP.KEY_SOFT_KEYBOARD_ENABLED_ONLY_IF_NO_HARDWARE, TERMUX_APP.DEFAULT_VALUE_KEY_SOFT_KEYBOARD_ENABLED_ONLY_IF_NO_HARDWARE);
|
||||
}
|
||||
|
||||
public void setSoftKeyboardEnabledOnlyIfNoHardware(boolean value) {
|
||||
SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_APP.KEY_SOFT_KEYBOARD_ENABLED_ONLY_IF_NO_HARDWARE, value, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public boolean shouldKeepScreenOn() {
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static int[] getDefaultFontSizes(Context context) {
|
||||
float dipInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 1, context.getResources().getDisplayMetrics());
|
||||
|
||||
int[] sizes = new int[3];
|
||||
|
||||
// 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:
|
||||
sizes[1] = (int) (4f * dipInPixels); // min
|
||||
|
||||
// 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--;
|
||||
|
||||
sizes[0] = defaultFontSize; // default
|
||||
|
||||
sizes[2] = 256; // max
|
||||
|
||||
return sizes;
|
||||
}
|
||||
|
||||
public void setFontVariables(Context context) {
|
||||
int[] sizes = getDefaultFontSizes(context);
|
||||
|
||||
DEFAULT_FONTSIZE = sizes[0];
|
||||
MIN_FONTSIZE = sizes[1];
|
||||
MAX_FONTSIZE = sizes[2];
|
||||
}
|
||||
|
||||
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, true);
|
||||
}
|
||||
|
||||
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 isTerminalViewKeyLoggingEnabled() {
|
||||
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 arePluginErrorNotificationsEnabled() {
|
||||
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 areCrashReportNotificationsEnabled() {
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
@@ -1,87 +0,0 @@
|
||||
package com.termux.shared.settings.preferences;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.termux.shared.logger.Logger;
|
||||
import com.termux.shared.packages.PackageUtils;
|
||||
import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_BOOT_APP;
|
||||
import com.termux.shared.termux.TermuxConstants;
|
||||
|
||||
public class TermuxBootAppSharedPreferences {
|
||||
|
||||
private final Context mContext;
|
||||
private final SharedPreferences mSharedPreferences;
|
||||
private final SharedPreferences mMultiProcessSharedPreferences;
|
||||
|
||||
|
||||
private static final String LOG_TAG = "TermuxBootAppSharedPreferences";
|
||||
|
||||
private TermuxBootAppSharedPreferences(@NonNull Context context) {
|
||||
mContext = context;
|
||||
mSharedPreferences = getPrivateSharedPreferences(mContext);
|
||||
mMultiProcessSharedPreferences = getPrivateAndMultiProcessSharedPreferences(mContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Context} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_BOOT_PACKAGE_NAME}.
|
||||
* @return Returns the {@link TermuxBootAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
@Nullable
|
||||
public static TermuxBootAppSharedPreferences build(@NonNull final Context context) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_BOOT_PACKAGE_NAME);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxBootAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Activity} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_BOOT_PACKAGE_NAME}.
|
||||
* @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
|
||||
* be shown which when dismissed will exit the app.
|
||||
* @return Returns the {@link TermuxBootAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
public static TermuxBootAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_BOOT_PACKAGE_NAME, exitAppOnError);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxBootAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_BOOT_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateAndMultiProcessSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateAndMultiProcessSharedPreferences(context, TermuxConstants.TERMUX_BOOT_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int getLogLevel(boolean readFromFile) {
|
||||
if (readFromFile)
|
||||
return SharedPreferenceUtils.getInt(mMultiProcessSharedPreferences, TERMUX_BOOT_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
else
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_BOOT_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
}
|
||||
|
||||
public void setLogLevel(Context context, int logLevel, boolean commitToFile) {
|
||||
logLevel = Logger.setLogLevel(context, logLevel);
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_BOOT_APP.KEY_LOG_LEVEL, logLevel, commitToFile);
|
||||
}
|
||||
|
||||
}
|
@@ -1,172 +0,0 @@
|
||||
package com.termux.shared.settings.preferences;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.termux.shared.data.DataUtils;
|
||||
import com.termux.shared.logger.Logger;
|
||||
import com.termux.shared.packages.PackageUtils;
|
||||
import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_FLOAT_APP;
|
||||
import com.termux.shared.termux.TermuxConstants;
|
||||
|
||||
public class TermuxFloatAppSharedPreferences {
|
||||
|
||||
private final Context mContext;
|
||||
private final SharedPreferences mSharedPreferences;
|
||||
private final SharedPreferences mMultiProcessSharedPreferences;
|
||||
|
||||
private int MIN_FONTSIZE;
|
||||
private int MAX_FONTSIZE;
|
||||
private int DEFAULT_FONTSIZE;
|
||||
|
||||
private static final String LOG_TAG = "TermuxFloatAppSharedPreferences";
|
||||
|
||||
private TermuxFloatAppSharedPreferences(@NonNull Context context) {
|
||||
mContext = context;
|
||||
mSharedPreferences = getPrivateSharedPreferences(mContext);
|
||||
mMultiProcessSharedPreferences = getPrivateAndMultiProcessSharedPreferences(mContext);
|
||||
|
||||
setFontVariables(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Context} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_FLOAT_PACKAGE_NAME}.
|
||||
* @return Returns the {@link TermuxFloatAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
@Nullable
|
||||
public static TermuxFloatAppSharedPreferences build(@NonNull final Context context) {
|
||||
Context termuxFloatPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_FLOAT_PACKAGE_NAME);
|
||||
if (termuxFloatPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxFloatAppSharedPreferences(termuxFloatPackageContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Activity} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_FLOAT_PACKAGE_NAME}.
|
||||
* @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
|
||||
* be shown which when dismissed will exit the app.
|
||||
* @return Returns the {@link TermuxFloatAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
public static TermuxFloatAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
|
||||
Context termuxFloatPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_FLOAT_PACKAGE_NAME, exitAppOnError);
|
||||
if (termuxFloatPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxFloatAppSharedPreferences(termuxFloatPackageContext);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_FLOAT_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateAndMultiProcessSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateAndMultiProcessSharedPreferences(context, TermuxConstants.TERMUX_FLOAT_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int getWindowX() {
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_WINDOW_X, 200);
|
||||
|
||||
}
|
||||
|
||||
public void setWindowX(int value) {
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_WINDOW_X, value, false);
|
||||
}
|
||||
|
||||
public int getWindowY() {
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_WINDOW_Y, 200);
|
||||
|
||||
}
|
||||
|
||||
public void setWindowY(int value) {
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_WINDOW_Y, value, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int getWindowWidth() {
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_WINDOW_WIDTH, 500);
|
||||
|
||||
}
|
||||
|
||||
public void setWindowWidth(int value) {
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_WINDOW_WIDTH, value, false);
|
||||
}
|
||||
|
||||
public int getWindowHeight() {
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_WINDOW_HEIGHT, 500);
|
||||
|
||||
}
|
||||
|
||||
public void setWindowHeight(int value) {
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_WINDOW_HEIGHT, value, false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void setFontVariables(Context context) {
|
||||
int[] sizes = TermuxAppSharedPreferences.getDefaultFontSizes(context);
|
||||
|
||||
DEFAULT_FONTSIZE = sizes[0];
|
||||
MIN_FONTSIZE = sizes[1];
|
||||
MAX_FONTSIZE = sizes[2];
|
||||
}
|
||||
|
||||
public int getFontSize() {
|
||||
int fontSize = SharedPreferenceUtils.getIntStoredAsString(mSharedPreferences, TERMUX_FLOAT_APP.KEY_FONTSIZE, DEFAULT_FONTSIZE);
|
||||
return DataUtils.clamp(fontSize, MIN_FONTSIZE, MAX_FONTSIZE);
|
||||
}
|
||||
|
||||
public void setFontSize(int value) {
|
||||
SharedPreferenceUtils.setIntStoredAsString(mSharedPreferences, TERMUX_FLOAT_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 int getLogLevel(boolean readFromFile) {
|
||||
if (readFromFile)
|
||||
return SharedPreferenceUtils.getInt(mMultiProcessSharedPreferences, TERMUX_FLOAT_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
else
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
}
|
||||
|
||||
public void setLogLevel(Context context, int logLevel, boolean commitToFile) {
|
||||
logLevel = Logger.setLogLevel(context, logLevel);
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_FLOAT_APP.KEY_LOG_LEVEL, logLevel, commitToFile);
|
||||
}
|
||||
|
||||
|
||||
public boolean isTerminalViewKeyLoggingEnabled(boolean readFromFile) {
|
||||
if (readFromFile)
|
||||
return SharedPreferenceUtils.getBoolean(mMultiProcessSharedPreferences, TERMUX_FLOAT_APP.KEY_TERMINAL_VIEW_KEY_LOGGING_ENABLED, TERMUX_FLOAT_APP.DEFAULT_VALUE_TERMINAL_VIEW_KEY_LOGGING_ENABLED);
|
||||
else
|
||||
return SharedPreferenceUtils.getBoolean(mSharedPreferences, TERMUX_FLOAT_APP.KEY_TERMINAL_VIEW_KEY_LOGGING_ENABLED, TERMUX_FLOAT_APP.DEFAULT_VALUE_TERMINAL_VIEW_KEY_LOGGING_ENABLED);
|
||||
}
|
||||
|
||||
public void setTerminalViewKeyLoggingEnabled(boolean value, boolean commitToFile) {
|
||||
SharedPreferenceUtils.setBoolean(mSharedPreferences, TERMUX_FLOAT_APP.KEY_TERMINAL_VIEW_KEY_LOGGING_ENABLED, value, commitToFile);
|
||||
}
|
||||
|
||||
}
|
@@ -1,294 +0,0 @@
|
||||
package com.termux.shared.settings.preferences;
|
||||
|
||||
/*
|
||||
* Version: v0.15.0
|
||||
*
|
||||
* Changelog
|
||||
*
|
||||
* - 0.1.0 (2021-03-12)
|
||||
* - Initial Release.
|
||||
*
|
||||
* - 0.2.0 (2021-03-13)
|
||||
* - Added `KEY_LOG_LEVEL` and `KEY_TERMINAL_VIEW_LOGGING_ENABLED`.
|
||||
*
|
||||
* - 0.3.0 (2021-03-16)
|
||||
* - Changed to per app scoping of variables so that the same file can store all constants of
|
||||
* Termux app and its plugins. This will allow {@link com.termux.app.TermuxSettings} to
|
||||
* manage preferences of plugins as well if they don't have launcher activity themselves
|
||||
* and also allow plugin apps to make changes to preferences from background.
|
||||
* - Added following to `TERMUX_TASKER_APP`:
|
||||
* `KEY_LOG_LEVEL`.
|
||||
*
|
||||
* - 0.4.0 (2021-03-13)
|
||||
* - Added following to `TERMUX_APP`:
|
||||
* `KEY_PLUGIN_ERROR_NOTIFICATIONS_ENABLED` and `DEFAULT_VALUE_PLUGIN_ERROR_NOTIFICATIONS_ENABLED`.
|
||||
*
|
||||
* - 0.5.0 (2021-03-24)
|
||||
* - Added following to `TERMUX_APP`:
|
||||
* `KEY_LAST_NOTIFICATION_ID` and `DEFAULT_VALUE_KEY_LAST_NOTIFICATION_ID`.
|
||||
*
|
||||
* - 0.6.0 (2021-03-24)
|
||||
* - Change `DEFAULT_VALUE_KEEP_SCREEN_ON` value to `false` in `TERMUX_APP`.
|
||||
*
|
||||
* - 0.7.0 (2021-03-27)
|
||||
* - Added following to `TERMUX_APP`:
|
||||
* `KEY_SOFT_KEYBOARD_ENABLED` and `DEFAULT_VALUE_KEY_SOFT_KEYBOARD_ENABLED`.
|
||||
*
|
||||
* - 0.8.0 (2021-04-06)
|
||||
* - Added following to `TERMUX_APP`:
|
||||
* `KEY_CRASH_REPORT_NOTIFICATIONS_ENABLED` and `DEFAULT_VALUE_CRASH_REPORT_NOTIFICATIONS_ENABLED`.
|
||||
*
|
||||
* - 0.9.0 (2021-04-07)
|
||||
* - Updated javadocs.
|
||||
*
|
||||
* - 0.10.0 (2021-05-12)
|
||||
* - Added following to `TERMUX_APP`:
|
||||
* `KEY_SOFT_KEYBOARD_ENABLED_ONLY_IF_NO_HARDWARE` and `DEFAULT_VALUE_KEY_SOFT_KEYBOARD_ENABLED_ONLY_IF_NO_HARDWARE`.
|
||||
*
|
||||
* - 0.11.0 (2021-07-08)
|
||||
* - Added following to `TERMUX_APP`:
|
||||
* `KEY_DISABLE_TERMINAL_MARGIN_ADJUSTMENT`.
|
||||
*
|
||||
* - 0.12.0 (2021-08-27)
|
||||
* - Added `TERMUX_API_APP.KEY_LOG_LEVEL`, `TERMUX_BOOT_APP.KEY_LOG_LEVEL`,
|
||||
* `TERMUX_FLOAT_APP.KEY_LOG_LEVEL`, `TERMUX_STYLING_APP.KEY_LOG_LEVEL`,
|
||||
* `TERMUX_Widget_APP.KEY_LOG_LEVEL`.
|
||||
*
|
||||
* - 0.13.0 (2021-09-02)
|
||||
* - Added following to `TERMUX_FLOAT_APP`:
|
||||
* `KEY_WINDOW_X`, `KEY_WINDOW_Y`, `KEY_WINDOW_WIDTH`, `KEY_WINDOW_HEIGHT`, `KEY_FONTSIZE`,
|
||||
* `KEY_TERMINAL_VIEW_KEY_LOGGING_ENABLED`.
|
||||
*
|
||||
* - 0.14.0 (2021-09-04)
|
||||
* - Added `TERMUX_WIDGET_APP.KEY_TOKEN`.
|
||||
*
|
||||
* - 0.15.0 (2021-09-05)
|
||||
* - Added following to `TERMUX_TASKER_APP`:
|
||||
* `KEY_LAST_PENDING_INTENT_REQUEST_CODE` and `DEFAULT_VALUE_KEY_LAST_PENDING_INTENT_REQUEST_CODE`.
|
||||
*/
|
||||
|
||||
/**
|
||||
* A class that defines shared constants of the SharedPreferences used by Termux app and its plugins.
|
||||
* This class will be hosted by termux-shared lib and should be imported by other termux plugin
|
||||
* apps as is instead of copying constants to random classes. The 3rd party apps can also import
|
||||
* it for interacting with termux apps. If changes are made to this file, increment the version number
|
||||
* and add an entry in the Changelog section above.
|
||||
*/
|
||||
public final class TermuxPreferenceConstants {
|
||||
|
||||
/**
|
||||
* Termux app constants.
|
||||
*/
|
||||
public static final class TERMUX_APP {
|
||||
|
||||
/**
|
||||
* Defines the key for whether terminal view margin adjustment that is done to prevent soft
|
||||
* keyboard from covering bottom part of terminal view on some devices is enabled or not.
|
||||
* Margin adjustment may cause screen flickering on some devices and so should be disabled.
|
||||
*/
|
||||
public static final String KEY_TERMINAL_MARGIN_ADJUSTMENT = "terminal_margin_adjustment";
|
||||
public static final boolean DEFAULT_TERMINAL_MARGIN_ADJUSTMENT = true;
|
||||
|
||||
|
||||
/**
|
||||
* Defines the key for whether to show terminal toolbar containing extra keys and text input field.
|
||||
*/
|
||||
public static final String KEY_SHOW_TERMINAL_TOOLBAR = "show_extra_keys";
|
||||
public static final boolean DEFAULT_VALUE_SHOW_TERMINAL_TOOLBAR = true;
|
||||
|
||||
|
||||
/**
|
||||
* Defines the key for whether the soft keyboard will be enabled, for cases where users want
|
||||
* to use a hardware keyboard instead.
|
||||
*/
|
||||
public static final String KEY_SOFT_KEYBOARD_ENABLED = "soft_keyboard_enabled";
|
||||
public static final boolean DEFAULT_VALUE_KEY_SOFT_KEYBOARD_ENABLED = true;
|
||||
|
||||
/**
|
||||
* Defines the key for whether the soft keyboard will be enabled only if no hardware keyboard
|
||||
* attached, for cases where users want to use a hardware keyboard instead.
|
||||
*/
|
||||
public static final String KEY_SOFT_KEYBOARD_ENABLED_ONLY_IF_NO_HARDWARE = "soft_keyboard_enabled_only_if_no_hardware";
|
||||
public static final boolean DEFAULT_VALUE_KEY_SOFT_KEYBOARD_ENABLED_ONLY_IF_NO_HARDWARE = false;
|
||||
|
||||
|
||||
/**
|
||||
* Defines the key for whether to always keep screen on.
|
||||
*/
|
||||
public static final String KEY_KEEP_SCREEN_ON = "screen_always_on";
|
||||
public static final boolean DEFAULT_VALUE_KEEP_SCREEN_ON = false;
|
||||
|
||||
|
||||
/**
|
||||
* Defines the key for font size of termux terminal view.
|
||||
*/
|
||||
public static final String KEY_FONTSIZE = "fontsize";
|
||||
|
||||
|
||||
/**
|
||||
* Defines the key for current termux terminal session.
|
||||
*/
|
||||
public static final String KEY_CURRENT_SESSION = "current_session";
|
||||
|
||||
|
||||
/**
|
||||
* Defines the key for current log level.
|
||||
*/
|
||||
public static final String KEY_LOG_LEVEL = "log_level";
|
||||
|
||||
|
||||
/**
|
||||
* Defines the key for last used notification id.
|
||||
*/
|
||||
public static final String KEY_LAST_NOTIFICATION_ID = "last_notification_id";
|
||||
public static final int DEFAULT_VALUE_KEY_LAST_NOTIFICATION_ID = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Defines the key for whether termux terminal view key logging is enabled or not
|
||||
*/
|
||||
public static final String KEY_TERMINAL_VIEW_KEY_LOGGING_ENABLED = "terminal_view_key_logging_enabled";
|
||||
public static final boolean DEFAULT_VALUE_TERMINAL_VIEW_KEY_LOGGING_ENABLED = false;
|
||||
|
||||
/**
|
||||
* Defines the key for whether flashes and notifications for plugin errors are enabled or not.
|
||||
*/
|
||||
public static final String KEY_PLUGIN_ERROR_NOTIFICATIONS_ENABLED = "plugin_error_notifications_enabled";
|
||||
public static final boolean DEFAULT_VALUE_PLUGIN_ERROR_NOTIFICATIONS_ENABLED = true;
|
||||
|
||||
/**
|
||||
* Defines the key for whether notifications for crash reports are enabled or not.
|
||||
*/
|
||||
public static final String KEY_CRASH_REPORT_NOTIFICATIONS_ENABLED = "crash_report_notifications_enabled";
|
||||
public static final boolean DEFAULT_VALUE_CRASH_REPORT_NOTIFICATIONS_ENABLED = true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Termux:API app constants.
|
||||
*/
|
||||
public static final class TERMUX_API_APP {
|
||||
|
||||
/**
|
||||
* Defines the key for current log level.
|
||||
*/
|
||||
public static final String KEY_LOG_LEVEL = "log_level";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Termux:Boot app constants.
|
||||
*/
|
||||
public static final class TERMUX_BOOT_APP {
|
||||
|
||||
/**
|
||||
* Defines the key for current log level.
|
||||
*/
|
||||
public static final String KEY_LOG_LEVEL = "log_level";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Termux:Float app constants.
|
||||
*/
|
||||
public static final class TERMUX_FLOAT_APP {
|
||||
|
||||
/**
|
||||
* The float window x coordinate.
|
||||
*/
|
||||
public static final String KEY_WINDOW_X = "window_x";
|
||||
|
||||
/**
|
||||
* The float window y coordinate.
|
||||
*/
|
||||
public static final String KEY_WINDOW_Y = "window_y";
|
||||
|
||||
/**
|
||||
* The float window width.
|
||||
*/
|
||||
public static final String KEY_WINDOW_WIDTH = "window_width";
|
||||
|
||||
/**
|
||||
* The float window height.
|
||||
*/
|
||||
public static final String KEY_WINDOW_HEIGHT = "window_height";
|
||||
|
||||
/**
|
||||
* Defines the key for font size of termux terminal view.
|
||||
*/
|
||||
public static final String KEY_FONTSIZE = "fontsize";
|
||||
|
||||
/**
|
||||
* Defines the key for current log level.
|
||||
*/
|
||||
public static final String KEY_LOG_LEVEL = "log_level";
|
||||
|
||||
/**
|
||||
* Defines the key for whether termux terminal view key logging is enabled or not
|
||||
*/
|
||||
public static final String KEY_TERMINAL_VIEW_KEY_LOGGING_ENABLED = "terminal_view_key_logging_enabled";
|
||||
public static final boolean DEFAULT_VALUE_TERMINAL_VIEW_KEY_LOGGING_ENABLED = false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Termux:Styling app constants.
|
||||
*/
|
||||
public static final class TERMUX_STYLING_APP {
|
||||
|
||||
/**
|
||||
* Defines the key for current log level.
|
||||
*/
|
||||
public static final String KEY_LOG_LEVEL = "log_level";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Termux:Tasker app constants.
|
||||
*/
|
||||
public static final class TERMUX_TASKER_APP {
|
||||
|
||||
/**
|
||||
* Defines the key for current log level.
|
||||
*/
|
||||
public static final String KEY_LOG_LEVEL = "log_level";
|
||||
|
||||
|
||||
/**
|
||||
* Defines the key for last used PendingIntent request code.
|
||||
*/
|
||||
public static final String KEY_LAST_PENDING_INTENT_REQUEST_CODE = "last_pending_intent_request_code";
|
||||
public static final int DEFAULT_VALUE_KEY_LAST_PENDING_INTENT_REQUEST_CODE = 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Termux:Widget app constants.
|
||||
*/
|
||||
public static final class TERMUX_WIDGET_APP {
|
||||
|
||||
/**
|
||||
* Defines the key for current log level.
|
||||
*/
|
||||
public static final String KEY_LOG_LEVEL = "log_level";
|
||||
|
||||
/**
|
||||
* Defines the key for current token for shortcuts.
|
||||
*/
|
||||
public static final String KEY_TOKEN = "token";
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -1,87 +0,0 @@
|
||||
package com.termux.shared.settings.preferences;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.termux.shared.logger.Logger;
|
||||
import com.termux.shared.packages.PackageUtils;
|
||||
import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_STYLING_APP;
|
||||
import com.termux.shared.termux.TermuxConstants;
|
||||
|
||||
public class TermuxStylingAppSharedPreferences {
|
||||
|
||||
private final Context mContext;
|
||||
private final SharedPreferences mSharedPreferences;
|
||||
private final SharedPreferences mMultiProcessSharedPreferences;
|
||||
|
||||
|
||||
private static final String LOG_TAG = "TermuxStylingAppSharedPreferences";
|
||||
|
||||
private TermuxStylingAppSharedPreferences(@NonNull Context context) {
|
||||
mContext = context;
|
||||
mSharedPreferences = getPrivateSharedPreferences(mContext);
|
||||
mMultiProcessSharedPreferences = getPrivateAndMultiProcessSharedPreferences(mContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Context} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_STYLING_PACKAGE_NAME}.
|
||||
* @return Returns the {@link TermuxStylingAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
@Nullable
|
||||
public static TermuxStylingAppSharedPreferences build(@NonNull final Context context) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_STYLING_PACKAGE_NAME);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxStylingAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Activity} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_STYLING_PACKAGE_NAME}.
|
||||
* @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
|
||||
* be shown which when dismissed will exit the app.
|
||||
* @return Returns the {@link TermuxStylingAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
public static TermuxStylingAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_STYLING_PACKAGE_NAME, exitAppOnError);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxStylingAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_STYLING_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateAndMultiProcessSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateAndMultiProcessSharedPreferences(context, TermuxConstants.TERMUX_STYLING_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int getLogLevel(boolean readFromFile) {
|
||||
if (readFromFile)
|
||||
return SharedPreferenceUtils.getInt(mMultiProcessSharedPreferences, TERMUX_STYLING_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
else
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_STYLING_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
}
|
||||
|
||||
public void setLogLevel(Context context, int logLevel, boolean commitToFile) {
|
||||
logLevel = Logger.setLogLevel(context, logLevel);
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_STYLING_APP.KEY_LOG_LEVEL, logLevel, commitToFile);
|
||||
}
|
||||
|
||||
}
|
@@ -1,97 +0,0 @@
|
||||
package com.termux.shared.settings.preferences;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.termux.shared.packages.PackageUtils;
|
||||
import com.termux.shared.termux.TermuxConstants;
|
||||
import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_TASKER_APP;
|
||||
import com.termux.shared.logger.Logger;
|
||||
|
||||
public class TermuxTaskerAppSharedPreferences {
|
||||
|
||||
private final Context mContext;
|
||||
private final SharedPreferences mSharedPreferences;
|
||||
private final SharedPreferences mMultiProcessSharedPreferences;
|
||||
|
||||
|
||||
private static final String LOG_TAG = "TermuxTaskerAppSharedPreferences";
|
||||
|
||||
private TermuxTaskerAppSharedPreferences(@NonNull Context context) {
|
||||
mContext = context;
|
||||
mSharedPreferences = getPrivateSharedPreferences(mContext);
|
||||
mMultiProcessSharedPreferences = getPrivateAndMultiProcessSharedPreferences(mContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Context} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_TASKER_PACKAGE_NAME}.
|
||||
* @return Returns the {@link TermuxTaskerAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
@Nullable
|
||||
public static TermuxTaskerAppSharedPreferences build(@NonNull final Context context) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_TASKER_PACKAGE_NAME);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxTaskerAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Activity} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_TASKER_PACKAGE_NAME}.
|
||||
* @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
|
||||
* be shown which when dismissed will exit the app.
|
||||
* @return Returns the {@link TermuxTaskerAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
public static TermuxTaskerAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_TASKER_PACKAGE_NAME, exitAppOnError);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxTaskerAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_TASKER_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateAndMultiProcessSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateAndMultiProcessSharedPreferences(context, TermuxConstants.TERMUX_TASKER_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int getLogLevel(boolean readFromFile) {
|
||||
if (readFromFile)
|
||||
return SharedPreferenceUtils.getInt(mMultiProcessSharedPreferences, TERMUX_TASKER_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
else
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_TASKER_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
}
|
||||
|
||||
public void setLogLevel(Context context, int logLevel, boolean commitToFile) {
|
||||
logLevel = Logger.setLogLevel(context, logLevel);
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_TASKER_APP.KEY_LOG_LEVEL, logLevel, commitToFile);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int getLastPendingIntentRequestCode() {
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_TASKER_APP.KEY_LAST_PENDING_INTENT_REQUEST_CODE, TERMUX_TASKER_APP.DEFAULT_VALUE_KEY_LAST_PENDING_INTENT_REQUEST_CODE);
|
||||
}
|
||||
|
||||
public void setLastPendingIntentRequestCode(int lastPendingIntentRequestCode) {
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_TASKER_APP.KEY_LAST_PENDING_INTENT_REQUEST_CODE, lastPendingIntentRequestCode, false);
|
||||
}
|
||||
|
||||
}
|
@@ -1,106 +0,0 @@
|
||||
package com.termux.shared.settings.preferences;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.termux.shared.logger.Logger;
|
||||
import com.termux.shared.packages.PackageUtils;
|
||||
import com.termux.shared.settings.preferences.TermuxPreferenceConstants.TERMUX_WIDGET_APP;
|
||||
import com.termux.shared.termux.TermuxConstants;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public class TermuxWidgetAppSharedPreferences {
|
||||
|
||||
private final Context mContext;
|
||||
private final SharedPreferences mSharedPreferences;
|
||||
private final SharedPreferences mMultiProcessSharedPreferences;
|
||||
|
||||
|
||||
private static final String LOG_TAG = "TermuxWidgetAppSharedPreferences";
|
||||
|
||||
private TermuxWidgetAppSharedPreferences(@NonNull Context context) {
|
||||
mContext = context;
|
||||
mSharedPreferences = getPrivateSharedPreferences(mContext);
|
||||
mMultiProcessSharedPreferences = getPrivateAndMultiProcessSharedPreferences(mContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Context} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_WIDGET_PACKAGE_NAME}.
|
||||
* @return Returns the {@link TermuxWidgetAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
@Nullable
|
||||
public static TermuxWidgetAppSharedPreferences build(@NonNull final Context context) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackage(context, TermuxConstants.TERMUX_WIDGET_PACKAGE_NAME);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxWidgetAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link Context} for a package name.
|
||||
*
|
||||
* @param context The {@link Activity} to use to get the {@link Context} of the
|
||||
* {@link TermuxConstants#TERMUX_WIDGET_PACKAGE_NAME}.
|
||||
* @param exitAppOnError If {@code true} and failed to get package context, then a dialog will
|
||||
* be shown which when dismissed will exit the app.
|
||||
* @return Returns the {@link TermuxWidgetAppSharedPreferences}. This will {@code null} if an exception is raised.
|
||||
*/
|
||||
public static TermuxWidgetAppSharedPreferences build(@NonNull final Context context, final boolean exitAppOnError) {
|
||||
Context termuxTaskerPackageContext = PackageUtils.getContextForPackageOrExitApp(context, TermuxConstants.TERMUX_WIDGET_PACKAGE_NAME, exitAppOnError);
|
||||
if (termuxTaskerPackageContext == null)
|
||||
return null;
|
||||
else
|
||||
return new TermuxWidgetAppSharedPreferences(termuxTaskerPackageContext);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateSharedPreferences(context, TermuxConstants.TERMUX_WIDGET_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
private static SharedPreferences getPrivateAndMultiProcessSharedPreferences(Context context) {
|
||||
if (context == null) return null;
|
||||
return SharedPreferenceUtils.getPrivateAndMultiProcessSharedPreferences(context, TermuxConstants.TERMUX_WIDGET_DEFAULT_PREFERENCES_FILE_BASENAME_WITHOUT_EXTENSION);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static String getGeneratedToken(@NonNull Context context) {
|
||||
TermuxWidgetAppSharedPreferences preferences = TermuxWidgetAppSharedPreferences.build(context, true);
|
||||
if (preferences == null) return null;
|
||||
return preferences.getGeneratedToken();
|
||||
}
|
||||
|
||||
public String getGeneratedToken() {
|
||||
String token = SharedPreferenceUtils.getString(mSharedPreferences, TERMUX_WIDGET_APP.KEY_TOKEN, null, true);
|
||||
if (token == null) {
|
||||
token = UUID.randomUUID().toString();
|
||||
SharedPreferenceUtils.setString(mSharedPreferences, TERMUX_WIDGET_APP.KEY_TOKEN, token, true);
|
||||
}
|
||||
return token;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int getLogLevel(boolean readFromFile) {
|
||||
if (readFromFile)
|
||||
return SharedPreferenceUtils.getInt(mMultiProcessSharedPreferences, TERMUX_WIDGET_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
else
|
||||
return SharedPreferenceUtils.getInt(mSharedPreferences, TERMUX_WIDGET_APP.KEY_LOG_LEVEL, Logger.DEFAULT_LOG_LEVEL);
|
||||
}
|
||||
|
||||
public void setLogLevel(Context context, int logLevel, boolean commitToFile) {
|
||||
logLevel = Logger.setLogLevel(context, logLevel);
|
||||
SharedPreferenceUtils.setInt(mSharedPreferences, TERMUX_WIDGET_APP.KEY_LOG_LEVEL, logLevel, commitToFile);
|
||||
}
|
||||
|
||||
}
|
@@ -1,469 +0,0 @@
|
||||
package com.termux.shared.settings.properties;
|
||||
|
||||
import com.google.common.collect.ImmutableBiMap;
|
||||
import com.termux.shared.file.FileUtils;
|
||||
import com.termux.shared.file.filesystem.FileType;
|
||||
import com.termux.shared.termux.TermuxConstants;
|
||||
import com.termux.shared.logger.Logger;
|
||||
import com.termux.terminal.TerminalEmulator;
|
||||
import com.termux.view.TerminalView;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/*
|
||||
* Version: v0.15.0
|
||||
*
|
||||
* Changelog
|
||||
*
|
||||
* - 0.1.0 (2021-03-11)
|
||||
* - Initial Release.
|
||||
*
|
||||
* - 0.2.0 (2021-03-11)
|
||||
* - Renamed `HOME_PATH` to `TERMUX_HOME_DIR_PATH`.
|
||||
* - Renamed `TERMUX_PROPERTIES_PRIMARY_PATH` to `TERMUX_PROPERTIES_PRIMARY_FILE_PATH`.
|
||||
* - Renamed `TERMUX_PROPERTIES_SECONDARY_FILE_PATH` to `TERMUX_PROPERTIES_SECONDARY_FILE_PATH`.
|
||||
*
|
||||
* - 0.3.0 (2021-03-16)
|
||||
* - Add `*TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR*`.
|
||||
*
|
||||
* - 0.4.0 (2021-03-16)
|
||||
* - Removed `MAP_GENERIC_BOOLEAN` and `MAP_GENERIC_INVERTED_BOOLEAN`.
|
||||
*
|
||||
* - 0.5.0 (2021-03-25)
|
||||
* - Add `KEY_HIDE_SOFT_KEYBOARD_ON_STARTUP`.
|
||||
*
|
||||
* - 0.6.0 (2021-04-07)
|
||||
* - Updated javadocs.
|
||||
*
|
||||
* - 0.7.0 (2021-05-09)
|
||||
* - Add `*SOFT_KEYBOARD_TOGGLE_BEHAVIOUR*`.
|
||||
*
|
||||
* - 0.8.0 (2021-05-10)
|
||||
* - Change the `KEY_USE_BACK_KEY_AS_ESCAPE_KEY` and `KEY_VIRTUAL_VOLUME_KEYS_DISABLED` booleans
|
||||
* to `KEY_BACK_KEY_BEHAVIOUR` and `KEY_VOLUME_KEYS_BEHAVIOUR` String internal values.
|
||||
* - Renamed `SOFT_KEYBOARD_TOGGLE_BEHAVIOUR` to `KEY_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR`.
|
||||
*
|
||||
* - 0.9.0 (2021-05-14)
|
||||
* - Add `*KEY_TERMINAL_CURSOR_BLINK_RATE*`.
|
||||
*
|
||||
* - 0.10.0 (2021-05-15)
|
||||
* - Add `MAP_BACK_KEY_BEHAVIOUR`, `MAP_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR`, `MAP_VOLUME_KEYS_BEHAVIOUR`.
|
||||
*
|
||||
* - 0.11.0 (2021-06-10)
|
||||
* - Add `*KEY_TERMINAL_TRANSCRIPT_ROWS*`.
|
||||
*
|
||||
* - 0.12.0 (2021-06-10)
|
||||
* - Add `*KEY_TERMINAL_CURSOR_STYLE*`.
|
||||
*
|
||||
* - 0.13.0 (2021-08-25)
|
||||
* - Add `*KEY_TERMINAL_MARGIN_HORIZONTAL*` and `*KEY_TERMINAL_MARGIN_VERTICAL*`.
|
||||
*
|
||||
* - 0.14.0 (2021-09-02)
|
||||
* - Add `getTermuxFloatPropertiesFile()`.
|
||||
*
|
||||
* - 0.15.0 (2021-09-05)
|
||||
* - Add `KEY_EXTRA_KEYS_TEXT_ALL_CAPS`.
|
||||
*/
|
||||
|
||||
/**
|
||||
* A class that defines shared constants of the SharedProperties used by Termux app and its plugins.
|
||||
* This class will be hosted by termux-shared lib and should be imported by other termux plugin
|
||||
* apps as is instead of copying constants to random classes. The 3rd party apps can also import
|
||||
* it for interacting with termux apps. If changes are made to this file, increment the version number
|
||||
* and add an entry in the Changelog section above.
|
||||
*
|
||||
* The properties are loaded from the first file found at
|
||||
* {@link TermuxConstants#TERMUX_PROPERTIES_PRIMARY_FILE_PATH} or
|
||||
* {@link TermuxConstants#TERMUX_PROPERTIES_SECONDARY_FILE_PATH}
|
||||
*/
|
||||
public final class TermuxPropertyConstants {
|
||||
|
||||
private static final String LOG_TAG = "TermuxPropertyConstants";
|
||||
|
||||
/* boolean */
|
||||
|
||||
/** Defines the key for whether hardware keyboard shortcuts are enabled. */
|
||||
public static final String KEY_DISABLE_HARDWARE_KEYBOARD_SHORTCUTS = "disable-hardware-keyboard-shortcuts"; // Default: "disable-hardware-keyboard-shortcuts"
|
||||
|
||||
|
||||
/** Defines the key for whether a toast will be shown when user changes the terminal session */
|
||||
public static final String KEY_DISABLE_TERMINAL_SESSION_CHANGE_TOAST = "disable-terminal-session-change-toast"; // Default: "disable-terminal-session-change-toast"
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether to enforce character based input to fix the issue where for some devices like Samsung, the letters might not appear until enter is pressed */
|
||||
public static final String KEY_ENFORCE_CHAR_BASED_INPUT = "enforce-char-based-input"; // Default: "enforce-char-based-input"
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether text for the extra keys buttons should be all capitalized automatically */
|
||||
public static final String KEY_EXTRA_KEYS_TEXT_ALL_CAPS = "extra-keys-text-all-caps"; // Default: "extra-keys-text-all-caps"
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether to hide soft keyboard when termux app is started */
|
||||
public static final String KEY_HIDE_SOFT_KEYBOARD_ON_STARTUP = "hide-soft-keyboard-on-startup"; // Default: "hide-soft-keyboard-on-startup"
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether url links in terminal transcript will automatically open on click or on tap */
|
||||
public static final String KEY_TERMINAL_ONCLICK_URL_OPEN = "terminal-onclick-url-open"; // Default: "terminal-onclick-url-open"
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether to use black UI */
|
||||
public static final String KEY_USE_BLACK_UI = "use-black-ui"; // Default: "use-black-ui"
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether to use ctrl space workaround to fix the issue where ctrl+space does not work on some ROMs */
|
||||
public static final String KEY_USE_CTRL_SPACE_WORKAROUND = "ctrl-space-workaround"; // Default: "ctrl-space-workaround"
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether to use fullscreen */
|
||||
public static final String KEY_USE_FULLSCREEN = "fullscreen"; // Default: "fullscreen"
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether to use fullscreen workaround */
|
||||
public static final String KEY_USE_FULLSCREEN_WORKAROUND = "use-fullscreen-workaround"; // Default: "use-fullscreen-workaround"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* int */
|
||||
|
||||
/** Defines the key for the bell behaviour */
|
||||
public static final String KEY_BELL_BEHAVIOUR = "bell-character"; // Default: "bell-character"
|
||||
|
||||
public static final String VALUE_BELL_BEHAVIOUR_VIBRATE = "vibrate";
|
||||
public static final String VALUE_BELL_BEHAVIOUR_BEEP = "beep";
|
||||
public static final String VALUE_BELL_BEHAVIOUR_IGNORE = "ignore";
|
||||
public static final String DEFAULT_VALUE_BELL_BEHAVIOUR = VALUE_BELL_BEHAVIOUR_VIBRATE;
|
||||
|
||||
public static final int IVALUE_BELL_BEHAVIOUR_VIBRATE = 1;
|
||||
public static final int IVALUE_BELL_BEHAVIOUR_BEEP = 2;
|
||||
public static final int IVALUE_BELL_BEHAVIOUR_IGNORE = 3;
|
||||
public static final int DEFAULT_IVALUE_BELL_BEHAVIOUR = IVALUE_BELL_BEHAVIOUR_VIBRATE;
|
||||
|
||||
/** Defines the bidirectional map for bell behaviour values and their internal values */
|
||||
public static final ImmutableBiMap<String, Integer> MAP_BELL_BEHAVIOUR =
|
||||
new ImmutableBiMap.Builder<String, Integer>()
|
||||
.put(VALUE_BELL_BEHAVIOUR_VIBRATE, IVALUE_BELL_BEHAVIOUR_VIBRATE)
|
||||
.put(VALUE_BELL_BEHAVIOUR_BEEP, IVALUE_BELL_BEHAVIOUR_BEEP)
|
||||
.put(VALUE_BELL_BEHAVIOUR_IGNORE, IVALUE_BELL_BEHAVIOUR_IGNORE)
|
||||
.build();
|
||||
|
||||
|
||||
|
||||
/** Defines the key for the terminal cursor blink rate */
|
||||
public static final String KEY_TERMINAL_CURSOR_BLINK_RATE = "terminal-cursor-blink-rate"; // Default: "terminal-cursor-blink-rate"
|
||||
public static final int IVALUE_TERMINAL_CURSOR_BLINK_RATE_MIN = TerminalView.TERMINAL_CURSOR_BLINK_RATE_MIN;
|
||||
public static final int IVALUE_TERMINAL_CURSOR_BLINK_RATE_MAX = TerminalView.TERMINAL_CURSOR_BLINK_RATE_MAX;
|
||||
public static final int DEFAULT_IVALUE_TERMINAL_CURSOR_BLINK_RATE = 0;
|
||||
|
||||
|
||||
|
||||
/** Defines the key for the terminal cursor style */
|
||||
public static final String KEY_TERMINAL_CURSOR_STYLE = "terminal-cursor-style"; // Default: "terminal-cursor-style"
|
||||
|
||||
public static final String VALUE_TERMINAL_CURSOR_STYLE_BLOCK = "block";
|
||||
public static final String VALUE_TERMINAL_CURSOR_STYLE_UNDERLINE = "underline";
|
||||
public static final String VALUE_TERMINAL_CURSOR_STYLE_BAR = "bar";
|
||||
|
||||
public static final int IVALUE_TERMINAL_CURSOR_STYLE_BLOCK = TerminalEmulator.TERMINAL_CURSOR_STYLE_BLOCK;
|
||||
public static final int IVALUE_TERMINAL_CURSOR_STYLE_UNDERLINE = TerminalEmulator.TERMINAL_CURSOR_STYLE_UNDERLINE;
|
||||
public static final int IVALUE_TERMINAL_CURSOR_STYLE_BAR = TerminalEmulator.TERMINAL_CURSOR_STYLE_BAR;
|
||||
public static final int DEFAULT_IVALUE_TERMINAL_CURSOR_STYLE = TerminalEmulator.DEFAULT_TERMINAL_CURSOR_STYLE;
|
||||
|
||||
/** Defines the bidirectional map for terminal cursor styles and their internal values */
|
||||
public static final ImmutableBiMap<String, Integer> MAP_TERMINAL_CURSOR_STYLE =
|
||||
new ImmutableBiMap.Builder<String, Integer>()
|
||||
.put(VALUE_TERMINAL_CURSOR_STYLE_BLOCK, IVALUE_TERMINAL_CURSOR_STYLE_BLOCK)
|
||||
.put(VALUE_TERMINAL_CURSOR_STYLE_UNDERLINE, IVALUE_TERMINAL_CURSOR_STYLE_UNDERLINE)
|
||||
.put(VALUE_TERMINAL_CURSOR_STYLE_BAR, IVALUE_TERMINAL_CURSOR_STYLE_BAR)
|
||||
.build();
|
||||
|
||||
|
||||
|
||||
/** Defines the key for the terminal margin on left and right in dp units */
|
||||
public static final String KEY_TERMINAL_MARGIN_HORIZONTAL = "terminal-margin-horizontal"; // Default: "terminal-margin-horizontal"
|
||||
public static final int IVALUE_TERMINAL_MARGIN_HORIZONTAL_MIN = 0;
|
||||
public static final int IVALUE_TERMINAL_MARGIN_HORIZONTAL_MAX = 100;
|
||||
public static final int DEFAULT_IVALUE_TERMINAL_HORIZONTAL_MARGIN = 3;
|
||||
|
||||
/** Defines the key for the terminal margin on top and bottom in dp units */
|
||||
public static final String KEY_TERMINAL_MARGIN_VERTICAL = "terminal-margin-vertical"; // Default: "terminal-margin-vertical"
|
||||
public static final int IVALUE_TERMINAL_MARGIN_VERTICAL_MIN = 0;
|
||||
public static final int IVALUE_TERMINAL_MARGIN_VERTICAL_MAX = 100;
|
||||
public static final int DEFAULT_IVALUE_TERMINAL_VERTICAL_MARGIN = 0;
|
||||
|
||||
|
||||
|
||||
/** Defines the key for the terminal transcript rows */
|
||||
public static final String KEY_TERMINAL_TRANSCRIPT_ROWS = "terminal-transcript-rows"; // Default: "terminal-transcript-rows"
|
||||
public static final int IVALUE_TERMINAL_TRANSCRIPT_ROWS_MIN = TerminalEmulator.TERMINAL_TRANSCRIPT_ROWS_MIN;
|
||||
public static final int IVALUE_TERMINAL_TRANSCRIPT_ROWS_MAX = TerminalEmulator.TERMINAL_TRANSCRIPT_ROWS_MAX;
|
||||
public static final int DEFAULT_IVALUE_TERMINAL_TRANSCRIPT_ROWS = TerminalEmulator.DEFAULT_TERMINAL_TRANSCRIPT_ROWS;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* float */
|
||||
|
||||
/** Defines the key for the terminal toolbar height */
|
||||
public static final String KEY_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR = "terminal-toolbar-height"; // Default: "terminal-toolbar-height"
|
||||
public static final float IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR_MIN = 0.4f;
|
||||
public static final float IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR_MAX = 3;
|
||||
public static final float DEFAULT_IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR = 1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Integer */
|
||||
|
||||
/** Defines the key for create session shortcut */
|
||||
public static final String KEY_SHORTCUT_CREATE_SESSION = "shortcut.create-session"; // Default: "shortcut.create-session"
|
||||
/** Defines the key for next session shortcut */
|
||||
public static final String KEY_SHORTCUT_NEXT_SESSION = "shortcut.next-session"; // Default: "shortcut.next-session"
|
||||
/** Defines the key for previous session shortcut */
|
||||
public static final String KEY_SHORTCUT_PREVIOUS_SESSION = "shortcut.previous-session"; // Default: "shortcut.previous-session"
|
||||
/** Defines the key for rename session shortcut */
|
||||
public static final String KEY_SHORTCUT_RENAME_SESSION = "shortcut.rename-session"; // Default: "shortcut.rename-session"
|
||||
|
||||
public static final int ACTION_SHORTCUT_CREATE_SESSION = 1;
|
||||
public static final int ACTION_SHORTCUT_NEXT_SESSION = 2;
|
||||
public static final int ACTION_SHORTCUT_PREVIOUS_SESSION = 3;
|
||||
public static final int ACTION_SHORTCUT_RENAME_SESSION = 4;
|
||||
|
||||
/** Defines the bidirectional map for session shortcut values and their internal actions */
|
||||
public static final ImmutableBiMap<String, Integer> MAP_SESSION_SHORTCUTS =
|
||||
new ImmutableBiMap.Builder<String, Integer>()
|
||||
.put(KEY_SHORTCUT_CREATE_SESSION, ACTION_SHORTCUT_CREATE_SESSION)
|
||||
.put(KEY_SHORTCUT_NEXT_SESSION, ACTION_SHORTCUT_NEXT_SESSION)
|
||||
.put(KEY_SHORTCUT_PREVIOUS_SESSION, ACTION_SHORTCUT_PREVIOUS_SESSION)
|
||||
.put(KEY_SHORTCUT_RENAME_SESSION, ACTION_SHORTCUT_RENAME_SESSION)
|
||||
.build();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* String */
|
||||
|
||||
/** Defines the key for whether back key will behave as escape key or literal back key */
|
||||
public static final String KEY_BACK_KEY_BEHAVIOUR = "back-key"; // Default: "back-key"
|
||||
|
||||
public static final String IVALUE_BACK_KEY_BEHAVIOUR_BACK = "back";
|
||||
public static final String IVALUE_BACK_KEY_BEHAVIOUR_ESCAPE = "escape";
|
||||
public static final String DEFAULT_IVALUE_BACK_KEY_BEHAVIOUR = IVALUE_BACK_KEY_BEHAVIOUR_BACK;
|
||||
|
||||
/** Defines the bidirectional map for back key behaviour values and their internal values */
|
||||
public static final ImmutableBiMap<String, String> MAP_BACK_KEY_BEHAVIOUR =
|
||||
new ImmutableBiMap.Builder<String, String>()
|
||||
.put(IVALUE_BACK_KEY_BEHAVIOUR_BACK, IVALUE_BACK_KEY_BEHAVIOUR_BACK)
|
||||
.put(IVALUE_BACK_KEY_BEHAVIOUR_ESCAPE, IVALUE_BACK_KEY_BEHAVIOUR_ESCAPE)
|
||||
.build();
|
||||
|
||||
|
||||
|
||||
/** Defines the key for the default working directory */
|
||||
public static final String KEY_DEFAULT_WORKING_DIRECTORY = "default-working-directory"; // Default: "default-working-directory"
|
||||
/** Defines the default working directory */
|
||||
public static final String DEFAULT_IVALUE_DEFAULT_WORKING_DIRECTORY = TermuxConstants.TERMUX_HOME_DIR_PATH;
|
||||
|
||||
|
||||
|
||||
/** Defines the key for extra keys */
|
||||
public static final String KEY_EXTRA_KEYS = "extra-keys"; // Default: "extra-keys"
|
||||
//public static final String DEFAULT_IVALUE_EXTRA_KEYS = "[[ESC, TAB, CTRL, ALT, {key: '-', popup: '|'}, DOWN, UP]]"; // Single row
|
||||
public static final String DEFAULT_IVALUE_EXTRA_KEYS = "[['ESC','/',{key: '-', popup: '|'},'HOME','UP','END','PGUP'], ['TAB','CTRL','ALT','LEFT','DOWN','RIGHT','PGDN']]"; // Double row
|
||||
|
||||
/** Defines the key for extra keys style */
|
||||
public static final String KEY_EXTRA_KEYS_STYLE = "extra-keys-style"; // Default: "extra-keys-style"
|
||||
public static final String DEFAULT_IVALUE_EXTRA_KEYS_STYLE = "default";
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether toggle soft keyboard request will show/hide or enable/disable keyboard */
|
||||
public static final String KEY_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR = "soft-keyboard-toggle-behaviour"; // Default: "soft-keyboard-toggle-behaviour"
|
||||
|
||||
public static final String IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR_SHOW_HIDE = "show/hide";
|
||||
public static final String IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR_ENABLE_DISABLE = "enable/disable";
|
||||
public static final String DEFAULT_IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR = IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR_SHOW_HIDE;
|
||||
|
||||
/** Defines the bidirectional map for toggle soft keyboard behaviour values and their internal values */
|
||||
public static final ImmutableBiMap<String, String> MAP_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR =
|
||||
new ImmutableBiMap.Builder<String, String>()
|
||||
.put(IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR_SHOW_HIDE, IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR_SHOW_HIDE)
|
||||
.put(IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR_ENABLE_DISABLE, IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR_ENABLE_DISABLE)
|
||||
.build();
|
||||
|
||||
|
||||
|
||||
/** Defines the key for whether volume keys will behave as virtual or literal volume keys */
|
||||
public static final String KEY_VOLUME_KEYS_BEHAVIOUR = "volume-keys"; // Default: "volume-keys"
|
||||
|
||||
public static final String IVALUE_VOLUME_KEY_BEHAVIOUR_VIRTUAL = "virtual";
|
||||
public static final String IVALUE_VOLUME_KEY_BEHAVIOUR_VOLUME = "volume";
|
||||
public static final String DEFAULT_IVALUE_VOLUME_KEYS_BEHAVIOUR = IVALUE_VOLUME_KEY_BEHAVIOUR_VIRTUAL;
|
||||
|
||||
/** Defines the bidirectional map for volume keys behaviour values and their internal values */
|
||||
public static final ImmutableBiMap<String, String> MAP_VOLUME_KEYS_BEHAVIOUR =
|
||||
new ImmutableBiMap.Builder<String, String>()
|
||||
.put(IVALUE_VOLUME_KEY_BEHAVIOUR_VIRTUAL, IVALUE_VOLUME_KEY_BEHAVIOUR_VIRTUAL)
|
||||
.put(IVALUE_VOLUME_KEY_BEHAVIOUR_VOLUME, IVALUE_VOLUME_KEY_BEHAVIOUR_VOLUME)
|
||||
.build();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Defines the set for keys loaded by termux
|
||||
* Setting this to {@code null} will make {@link SharedProperties} throw an exception.
|
||||
* */
|
||||
public static final Set<String> TERMUX_PROPERTIES_LIST = new HashSet<>(Arrays.asList(
|
||||
/* boolean */
|
||||
KEY_DISABLE_HARDWARE_KEYBOARD_SHORTCUTS,
|
||||
KEY_DISABLE_TERMINAL_SESSION_CHANGE_TOAST,
|
||||
KEY_ENFORCE_CHAR_BASED_INPUT,
|
||||
KEY_EXTRA_KEYS_TEXT_ALL_CAPS,
|
||||
KEY_HIDE_SOFT_KEYBOARD_ON_STARTUP,
|
||||
KEY_TERMINAL_ONCLICK_URL_OPEN,
|
||||
KEY_USE_BLACK_UI,
|
||||
KEY_USE_CTRL_SPACE_WORKAROUND,
|
||||
KEY_USE_FULLSCREEN,
|
||||
KEY_USE_FULLSCREEN_WORKAROUND,
|
||||
TermuxConstants.PROP_ALLOW_EXTERNAL_APPS,
|
||||
|
||||
/* int */
|
||||
KEY_BELL_BEHAVIOUR,
|
||||
KEY_TERMINAL_CURSOR_BLINK_RATE,
|
||||
KEY_TERMINAL_CURSOR_STYLE,
|
||||
KEY_TERMINAL_MARGIN_HORIZONTAL,
|
||||
KEY_TERMINAL_MARGIN_VERTICAL,
|
||||
KEY_TERMINAL_TRANSCRIPT_ROWS,
|
||||
|
||||
/* float */
|
||||
KEY_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR,
|
||||
|
||||
/* Integer */
|
||||
KEY_SHORTCUT_CREATE_SESSION,
|
||||
KEY_SHORTCUT_NEXT_SESSION,
|
||||
KEY_SHORTCUT_PREVIOUS_SESSION,
|
||||
KEY_SHORTCUT_RENAME_SESSION,
|
||||
|
||||
/* String */
|
||||
KEY_BACK_KEY_BEHAVIOUR,
|
||||
KEY_DEFAULT_WORKING_DIRECTORY,
|
||||
KEY_EXTRA_KEYS,
|
||||
KEY_EXTRA_KEYS_STYLE,
|
||||
KEY_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR,
|
||||
KEY_VOLUME_KEYS_BEHAVIOUR
|
||||
));
|
||||
|
||||
/** Defines the set for keys loaded by termux that have default boolean behaviour with false as default.
|
||||
* "true" -> true
|
||||
* "false" -> false
|
||||
* default: false
|
||||
*/
|
||||
public static final Set<String> TERMUX_DEFAULT_FALSE_BOOLEAN_BEHAVIOUR_PROPERTIES_LIST = new HashSet<>(Arrays.asList(
|
||||
KEY_DISABLE_HARDWARE_KEYBOARD_SHORTCUTS,
|
||||
KEY_DISABLE_TERMINAL_SESSION_CHANGE_TOAST,
|
||||
KEY_ENFORCE_CHAR_BASED_INPUT,
|
||||
KEY_HIDE_SOFT_KEYBOARD_ON_STARTUP,
|
||||
KEY_TERMINAL_ONCLICK_URL_OPEN,
|
||||
KEY_USE_CTRL_SPACE_WORKAROUND,
|
||||
KEY_USE_FULLSCREEN,
|
||||
KEY_USE_FULLSCREEN_WORKAROUND,
|
||||
TermuxConstants.PROP_ALLOW_EXTERNAL_APPS
|
||||
));
|
||||
|
||||
/** Defines the set for keys loaded by termux that have default boolean behaviour with true as default.
|
||||
* "true" -> true
|
||||
* "false" -> false
|
||||
* default: true
|
||||
*/
|
||||
public static final Set<String> TERMUX_DEFAULT_TRUE_BOOLEAN_BEHAVIOUR_PROPERTIES_LIST = new HashSet<>(Arrays.asList(
|
||||
KEY_EXTRA_KEYS_TEXT_ALL_CAPS
|
||||
));
|
||||
|
||||
/** Defines the set for keys loaded by termux that have default inverted boolean behaviour with false as default.
|
||||
* "false" -> true
|
||||
* "true" -> false
|
||||
* default: false
|
||||
*/
|
||||
public static final Set<String> TERMUX_DEFAULT_INVERETED_FALSE_BOOLEAN_BEHAVIOUR_PROPERTIES_LIST = new HashSet<>(Arrays.asList(
|
||||
));
|
||||
|
||||
/** Defines the set for keys loaded by termux that have default inverted boolean behaviour with true as default.
|
||||
* "false" -> true
|
||||
* "true" -> false
|
||||
* default: true
|
||||
*/
|
||||
public static final Set<String> TERMUX_DEFAULT_INVERETED_TRUE_BOOLEAN_BEHAVIOUR_PROPERTIES_LIST = new HashSet<>(Arrays.asList(
|
||||
));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/** Returns the first {@link File} found in
|
||||
* {@link TermuxConstants#TERMUX_PROPERTIES_FILE_PATHS_LIST} via a call to
|
||||
* {@link #getPropertiesFile(List)}.
|
||||
*
|
||||
* @return Returns the {@link File} object for Termux app properties.
|
||||
*/
|
||||
public static File getTermuxPropertiesFile() {
|
||||
return getPropertiesFile(TermuxConstants.TERMUX_PROPERTIES_FILE_PATHS_LIST);
|
||||
}
|
||||
|
||||
/** Returns the first {@link File} found in
|
||||
* {@link TermuxConstants#TERMUX_FLOAT_PROPERTIES_FILE_PATHS_LIST} via a call to
|
||||
* {@link #getPropertiesFile(List)}.
|
||||
*
|
||||
* @return Returns the {@link File} object for Termux:Float app properties.
|
||||
*/
|
||||
public static File getTermuxFloatPropertiesFile() {
|
||||
return getPropertiesFile(TermuxConstants.TERMUX_FLOAT_PROPERTIES_FILE_PATHS_LIST);
|
||||
}
|
||||
|
||||
/** Returns the first {@link File} found in
|
||||
* {@code propertiesFilePaths} from which app properties can be loaded. If the {@link File} found
|
||||
* is not a regular file or is not readable, then {@code null} is returned. Symlinks **will not**
|
||||
* be followed for potential security reasons.
|
||||
*
|
||||
* @return Returns the {@link File} object for Termux:Float app properties.
|
||||
*/
|
||||
public static File getPropertiesFile(List<String> propertiesFilePaths) {
|
||||
if (propertiesFilePaths == null || propertiesFilePaths.size() == 0)
|
||||
return null;
|
||||
|
||||
for(String propertiesFilePath : propertiesFilePaths) {
|
||||
File propertiesFile = new File(propertiesFilePath);
|
||||
|
||||
// Symlinks **will not** be followed.
|
||||
FileType fileType = FileUtils.getFileType(propertiesFilePath, false);
|
||||
if (fileType == FileType.REGULAR) {
|
||||
if (propertiesFile.canRead())
|
||||
return propertiesFile;
|
||||
else
|
||||
Logger.logWarn(LOG_TAG, "Ignoring properties file at \"" + propertiesFilePath + "\" since it is not readable");
|
||||
} else if (fileType != FileType.NO_EXIST) {
|
||||
Logger.logWarn(LOG_TAG, "Ignoring properties file at \"" + propertiesFilePath + "\" of type: \"" + fileType.getName() + "\"");
|
||||
}
|
||||
}
|
||||
|
||||
Logger.logDebug(LOG_TAG, "No readable properties file found at: " + propertiesFilePaths);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@@ -1,632 +0,0 @@
|
||||
package com.termux.shared.settings.properties;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.termux.shared.logger.Logger;
|
||||
import com.termux.shared.data.DataUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
public abstract class TermuxSharedProperties {
|
||||
|
||||
protected final Context mContext;
|
||||
protected final String mLabel;
|
||||
protected final File mPropertiesFile;
|
||||
protected final SharedProperties mSharedProperties;
|
||||
|
||||
public static final String LOG_TAG = "TermuxSharedProperties";
|
||||
|
||||
public TermuxSharedProperties(@NonNull Context context, @NonNull String label, File propertiesFile,
|
||||
@NonNull Set<String> propertiesList, @NonNull SharedPropertiesParser sharedPropertiesParser) {
|
||||
mContext = context;
|
||||
mLabel = label;
|
||||
mPropertiesFile = propertiesFile;
|
||||
mSharedProperties = new SharedProperties(context, mPropertiesFile, propertiesList, sharedPropertiesParser);
|
||||
loadTermuxPropertiesFromDisk();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reload the termux properties from disk into an in-memory cache.
|
||||
*/
|
||||
public void loadTermuxPropertiesFromDisk() {
|
||||
mSharedProperties.loadPropertiesFromDisk();
|
||||
dumpPropertiesToLog();
|
||||
dumpInternalPropertiesToLog();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get the {@link Properties} from the {@link #mPropertiesFile} file.
|
||||
*
|
||||
* @param cached If {@code true}, then the {@link Properties} in-memory cache is returned.
|
||||
* Otherwise the {@link Properties} object is read directly from the
|
||||
* {@link #mPropertiesFile} file.
|
||||
* @return Returns the {@link Properties} object. It will be {@code null} if an exception is
|
||||
* raised while reading the file.
|
||||
*/
|
||||
public Properties getProperties(boolean cached) {
|
||||
return mSharedProperties.getProperties(cached);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the {@link String} value for the key passed from the {@link #mPropertiesFile} file.
|
||||
*
|
||||
* @param key The key to read.
|
||||
* @param def The default value.
|
||||
* @param cached If {@code true}, then the value is returned from the the {@link Properties} in-memory cache.
|
||||
* Otherwise the {@link Properties} object is read directly from the file
|
||||
* and value is returned from it against the key.
|
||||
* @return Returns the {@link String} object. This will be {@code null} if key is not found.
|
||||
*/
|
||||
public String getPropertyValue(String key, String def, boolean cached) {
|
||||
return SharedProperties.getDefaultIfNull(mSharedProperties.getProperty(key, cached), def);
|
||||
}
|
||||
|
||||
/**
|
||||
* A function to check if the value is {@code true} for {@link Properties} key read from
|
||||
* the {@link #mPropertiesFile} file.
|
||||
*
|
||||
* @param key The key to read.
|
||||
* @param cached If {@code true}, then the value is checked from the the {@link Properties} in-memory cache.
|
||||
* Otherwise the {@link Properties} object is read directly from the file
|
||||
* and value is checked from it.
|
||||
* @param logErrorOnInvalidValue If {@code true}, then an error will be logged if key value
|
||||
* was found in {@link Properties} but was invalid.
|
||||
* @return Returns the {@code true} if the {@link Properties} key {@link String} value equals "true",
|
||||
* regardless of case. If the key does not exist in the file or does not equal "true", then
|
||||
* {@code false} will be returned.
|
||||
*/
|
||||
public boolean isPropertyValueTrue(String key, boolean cached, boolean logErrorOnInvalidValue) {
|
||||
return (boolean) SharedProperties.getBooleanValueForStringValue(key, (String) getPropertyValue(key, null, cached), false, logErrorOnInvalidValue, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* A function to check if the value is {@code false} for {@link Properties} key read from
|
||||
* the {@link #mPropertiesFile} file.
|
||||
*
|
||||
* @param key The key to read.
|
||||
* @param cached If {@code true}, then the value is checked from the the {@link Properties} in-memory cache.
|
||||
* Otherwise the {@link Properties} object is read directly from the file
|
||||
* and value is checked from it.
|
||||
* @param logErrorOnInvalidValue If {@code true}, then an error will be logged if key value
|
||||
* was found in {@link Properties} but was invalid.
|
||||
* @return Returns {@code true} if the {@link Properties} key {@link String} value equals "false",
|
||||
* regardless of case. If the key does not exist in the file or does not equal "false", then
|
||||
* {@code true} will be returned.
|
||||
*/
|
||||
public boolean isPropertyValueFalse(String key, boolean cached, boolean logErrorOnInvalidValue) {
|
||||
return (boolean) SharedProperties.getInvertedBooleanValueForStringValue(key, (String) getPropertyValue(key, null, cached), true, logErrorOnInvalidValue, LOG_TAG);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get the internal value {@link Object} {@link HashMap <>} in-memory cache for the
|
||||
* {@link #mPropertiesFile} file. A call to {@link #loadTermuxPropertiesFromDisk()} must be made
|
||||
* before this.
|
||||
*
|
||||
* @return Returns a copy of {@link Map} object.
|
||||
*/
|
||||
public Map<String, Object> getInternalProperties() {
|
||||
return mSharedProperties.getInternalProperties();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the internal {@link Object} value for the key passed from the {@link #mPropertiesFile} file.
|
||||
* If cache is {@code true}, then value is returned from the {@link HashMap <>} in-memory cache,
|
||||
* so a call to {@link #loadTermuxPropertiesFromDisk()} must be made before this.
|
||||
*
|
||||
* @param key The key to read from the {@link HashMap<>} in-memory cache.
|
||||
* @param cached If {@code true}, then the value is returned from the the {@link HashMap <>} in-memory cache,
|
||||
* but if the value is null, then an attempt is made to return the default value.
|
||||
* If {@code false}, then the {@link Properties} object is read directly from the file
|
||||
* and internal value is returned for the property value against the key.
|
||||
* @return Returns the {@link Object} object. This will be {@code null} if key is not found or
|
||||
* the object stored against the key is {@code null}.
|
||||
*/
|
||||
public Object getInternalPropertyValue(String key, boolean cached) {
|
||||
Object value;
|
||||
if (cached) {
|
||||
value = mSharedProperties.getInternalProperty(key);
|
||||
// If the value is not null since key was found or if the value was null since the
|
||||
// object stored for the key was itself null, we detect the later by checking if the key
|
||||
// exists in the map.
|
||||
if (value != null || mSharedProperties.getInternalProperties().containsKey(key)) {
|
||||
return value;
|
||||
} else {
|
||||
// This should not happen normally unless mMap was modified after the
|
||||
// {@link #loadTermuxPropertiesFromDisk()} call
|
||||
// A null value can still be returned by
|
||||
// {@link #getInternalPropertyValueFromValue(Context,String,String)} for some keys
|
||||
value = getInternalTermuxPropertyValueFromValue(mContext, key, null);
|
||||
Logger.logWarn(LOG_TAG, "The value for \"" + key + "\" not found in SharedProperties cache, force returning default value: `" + value + "`");
|
||||
return value;
|
||||
}
|
||||
} else {
|
||||
// We get the property value directly from file and return its internal value
|
||||
return getInternalTermuxPropertyValueFromValue(mContext, key, mSharedProperties.getProperty(key, false));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get the internal {@link Object} value for the key passed from the file returned by
|
||||
* {@code propertiesFile}. The {@link Properties} object is
|
||||
* read directly from the file and internal value is returned for the property value against the key.
|
||||
*
|
||||
* @param context The context for operations.
|
||||
* @param key The key for which the internal object is required.
|
||||
* @return Returns the {@link Object} object. This will be {@code null} if key is not found or
|
||||
* the object stored against the key is {@code null}.
|
||||
*/
|
||||
public static Object getInternalPropertyValue(Context context, File propertiesFile, String key,
|
||||
@NonNull SharedPropertiesParser sharedPropertiesParser) {
|
||||
return SharedProperties.getInternalProperty(context, propertiesFile, key, sharedPropertiesParser);
|
||||
}
|
||||
|
||||
/**
|
||||
* The class that implements the {@link SharedPropertiesParser} interface.
|
||||
*/
|
||||
public static class SharedPropertiesParserClient implements SharedPropertiesParser {
|
||||
/**
|
||||
* Override the
|
||||
* {@link SharedPropertiesParser#getInternalPropertyValueFromValue(Context,String,String)}
|
||||
* interface function.
|
||||
*/
|
||||
@Override
|
||||
public Object getInternalPropertyValueFromValue(Context context, String key, String value) {
|
||||
return getInternalTermuxPropertyValueFromValue(context, key, value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A static function that should return the internal termux {@link Object} for a key/value pair
|
||||
* read from properties file.
|
||||
*
|
||||
* @param context The context for operations.
|
||||
* @param key The key for which the internal object is required.
|
||||
* @param value The literal value for the property found is the properties file.
|
||||
* @return Returns the internal termux {@link Object} object.
|
||||
*/
|
||||
public static Object getInternalTermuxPropertyValueFromValue(Context context, String key, String value) {
|
||||
if (key == null) return null;
|
||||
/*
|
||||
For keys where a MAP_* is checked by respective functions. Note that value to this function
|
||||
would actually be the key for the MAP_*:
|
||||
- If the value is currently null, then searching MAP_* should also return null and internal default value will be used.
|
||||
- If the value is not null and does not exist in MAP_*, then internal default value will be used.
|
||||
- If the value is not null and does exist in MAP_*, then internal value returned by map will be used.
|
||||
*/
|
||||
switch (key) {
|
||||
/* boolean */
|
||||
case TermuxPropertyConstants.KEY_USE_BLACK_UI:
|
||||
return (boolean) getUseBlackUIInternalPropertyValueFromValue(context, value);
|
||||
|
||||
/* int */
|
||||
case TermuxPropertyConstants.KEY_BELL_BEHAVIOUR:
|
||||
return (int) getBellBehaviourInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_TERMINAL_CURSOR_BLINK_RATE:
|
||||
return (int) getTerminalCursorBlinkRateInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_TERMINAL_CURSOR_STYLE:
|
||||
return (int) getTerminalCursorStyleInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_TERMINAL_MARGIN_HORIZONTAL:
|
||||
return (int) getTerminalMarginHorizontalInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_TERMINAL_MARGIN_VERTICAL:
|
||||
return (int) getTerminalMarginVerticalInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_TERMINAL_TRANSCRIPT_ROWS:
|
||||
return (int) getTerminalTranscriptRowsInternalPropertyValueFromValue(value);
|
||||
|
||||
/* float */
|
||||
case TermuxPropertyConstants.KEY_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR:
|
||||
return (float) getTerminalToolbarHeightScaleFactorInternalPropertyValueFromValue(value);
|
||||
|
||||
/* Integer (may be null) */
|
||||
case TermuxPropertyConstants.KEY_SHORTCUT_CREATE_SESSION:
|
||||
case TermuxPropertyConstants.KEY_SHORTCUT_NEXT_SESSION:
|
||||
case TermuxPropertyConstants.KEY_SHORTCUT_PREVIOUS_SESSION:
|
||||
case TermuxPropertyConstants.KEY_SHORTCUT_RENAME_SESSION:
|
||||
return (Integer) getCodePointForSessionShortcuts(key, value);
|
||||
|
||||
/* String (may be null) */
|
||||
case TermuxPropertyConstants.KEY_BACK_KEY_BEHAVIOUR:
|
||||
return (String) getBackKeyBehaviourInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_DEFAULT_WORKING_DIRECTORY:
|
||||
return (String) getDefaultWorkingDirectoryInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_EXTRA_KEYS:
|
||||
return (String) getExtraKeysInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_EXTRA_KEYS_STYLE:
|
||||
return (String) getExtraKeysStyleInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR:
|
||||
return (String) getSoftKeyboardToggleBehaviourInternalPropertyValueFromValue(value);
|
||||
case TermuxPropertyConstants.KEY_VOLUME_KEYS_BEHAVIOUR:
|
||||
return (String) getVolumeKeysBehaviourInternalPropertyValueFromValue(value);
|
||||
|
||||
default:
|
||||
// default false boolean behaviour
|
||||
if (TermuxPropertyConstants.TERMUX_DEFAULT_FALSE_BOOLEAN_BEHAVIOUR_PROPERTIES_LIST.contains(key))
|
||||
return (boolean) SharedProperties.getBooleanValueForStringValue(key, value, false, true, LOG_TAG);
|
||||
// default true boolean behaviour
|
||||
if (TermuxPropertyConstants.TERMUX_DEFAULT_TRUE_BOOLEAN_BEHAVIOUR_PROPERTIES_LIST.contains(key))
|
||||
return (boolean) SharedProperties.getBooleanValueForStringValue(key, value, true, true, LOG_TAG);
|
||||
// default inverted false boolean behaviour
|
||||
//else if (TermuxPropertyConstants.TERMUX_DEFAULT_INVERETED_FALSE_BOOLEAN_BEHAVIOUR_PROPERTIES_LIST.contains(key))
|
||||
// return (boolean) SharedProperties.getInvertedBooleanValueForStringValue(key, value, false, true, LOG_TAG);
|
||||
// default inverted true boolean behaviour
|
||||
// else if (TermuxPropertyConstants.TERMUX_DEFAULT_INVERETED_TRUE_BOOLEAN_BEHAVIOUR_PROPERTIES_LIST.contains(key))
|
||||
// return (boolean) SharedProperties.getInvertedBooleanValueForStringValue(key, value, true, true, LOG_TAG);
|
||||
// just use String object as is (may be null)
|
||||
else
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Returns {@code true} or {@code false} if value is the literal string "true" or "false" respectively regardless of case.
|
||||
* Otherwise returns {@code true} if the night mode is currently enabled in the system.
|
||||
*
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static boolean getUseBlackUIInternalPropertyValueFromValue(Context context, String value) {
|
||||
int nightMode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
||||
return SharedProperties.getBooleanValueForStringValue(TermuxPropertyConstants.KEY_USE_BLACK_UI, value, nightMode == Configuration.UI_MODE_NIGHT_YES, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the internal value after mapping it based on
|
||||
* {@code TermuxPropertyConstants#MAP_BELL_BEHAVIOUR} if the value is not {@code null}
|
||||
* and is valid, otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_BELL_BEHAVIOUR}.
|
||||
*
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static int getBellBehaviourInternalPropertyValueFromValue(String value) {
|
||||
return (int) SharedProperties.getDefaultIfNotInMap(TermuxPropertyConstants.KEY_BELL_BEHAVIOUR, TermuxPropertyConstants.MAP_BELL_BEHAVIOUR, SharedProperties.toLowerCase(value), TermuxPropertyConstants.DEFAULT_IVALUE_BELL_BEHAVIOUR, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the int for the value if its not null and is between
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_CURSOR_BLINK_RATE_MIN} and
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_CURSOR_BLINK_RATE_MAX},
|
||||
* otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_TERMINAL_CURSOR_BLINK_RATE}.
|
||||
*
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static int getTerminalCursorBlinkRateInternalPropertyValueFromValue(String value) {
|
||||
return SharedProperties.getDefaultIfNotInRange(TermuxPropertyConstants.KEY_TERMINAL_CURSOR_BLINK_RATE,
|
||||
DataUtils.getIntFromString(value, TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_CURSOR_BLINK_RATE),
|
||||
TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_CURSOR_BLINK_RATE,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_CURSOR_BLINK_RATE_MIN,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_CURSOR_BLINK_RATE_MAX,
|
||||
true, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the internal value after mapping it based on
|
||||
* {@link TermuxPropertyConstants#MAP_TERMINAL_CURSOR_STYLE} if the value is not {@code null}
|
||||
* and is valid, otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_TERMINAL_CURSOR_STYLE}.
|
||||
*
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static int getTerminalCursorStyleInternalPropertyValueFromValue(String value) {
|
||||
return (int) SharedProperties.getDefaultIfNotInMap(TermuxPropertyConstants.KEY_TERMINAL_CURSOR_STYLE, TermuxPropertyConstants.MAP_TERMINAL_CURSOR_STYLE, SharedProperties.toLowerCase(value), TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_CURSOR_STYLE, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the int for the value if its not null and is between
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_MARGIN_HORIZONTAL_MIN} and
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_MARGIN_HORIZONTAL_MAX},
|
||||
* otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_TERMINAL_HORIZONTAL_MARGIN}.
|
||||
*
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static int getTerminalMarginHorizontalInternalPropertyValueFromValue(String value) {
|
||||
return SharedProperties.getDefaultIfNotInRange(TermuxPropertyConstants.KEY_TERMINAL_MARGIN_HORIZONTAL,
|
||||
DataUtils.getIntFromString(value, TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_HORIZONTAL_MARGIN),
|
||||
TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_HORIZONTAL_MARGIN,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_MARGIN_HORIZONTAL_MIN,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_MARGIN_HORIZONTAL_MAX,
|
||||
true, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the int for the value if its not null and is between
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_MARGIN_VERTICAL_MIN} and
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_MARGIN_VERTICAL_MAX},
|
||||
* otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_TERMINAL_VERTICAL_MARGIN}.
|
||||
*
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static int getTerminalMarginVerticalInternalPropertyValueFromValue(String value) {
|
||||
return SharedProperties.getDefaultIfNotInRange(TermuxPropertyConstants.KEY_TERMINAL_MARGIN_VERTICAL,
|
||||
DataUtils.getIntFromString(value, TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_VERTICAL_MARGIN),
|
||||
TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_VERTICAL_MARGIN,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_MARGIN_VERTICAL_MIN,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_MARGIN_VERTICAL_MAX,
|
||||
true, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the int for the value if its not null and is between
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_TRANSCRIPT_ROWS_MIN} and
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_TRANSCRIPT_ROWS_MAX},
|
||||
* otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_TERMINAL_TRANSCRIPT_ROWS}.
|
||||
*
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static int getTerminalTranscriptRowsInternalPropertyValueFromValue(String value) {
|
||||
return SharedProperties.getDefaultIfNotInRange(TermuxPropertyConstants.KEY_TERMINAL_TRANSCRIPT_ROWS,
|
||||
DataUtils.getIntFromString(value, TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_TRANSCRIPT_ROWS),
|
||||
TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_TRANSCRIPT_ROWS,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_TRANSCRIPT_ROWS_MIN,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_TRANSCRIPT_ROWS_MAX,
|
||||
true, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the int for the value if its not null and is between
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR_MIN} and
|
||||
* {@link TermuxPropertyConstants#IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR_MAX},
|
||||
* otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR}.
|
||||
*
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static float getTerminalToolbarHeightScaleFactorInternalPropertyValueFromValue(String value) {
|
||||
return SharedProperties.getDefaultIfNotInRange(TermuxPropertyConstants.KEY_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR,
|
||||
DataUtils.getFloatFromString(value, TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR),
|
||||
TermuxPropertyConstants.DEFAULT_IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR_MIN,
|
||||
TermuxPropertyConstants.IVALUE_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR_MAX,
|
||||
true, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the code point for the value if key is not {@code null} and value is not {@code null} and is valid,
|
||||
* otherwise returns {@code null}.
|
||||
*
|
||||
* @param key The key for session shortcut.
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static Integer getCodePointForSessionShortcuts(String key, String value) {
|
||||
if (key == null) return null;
|
||||
if (value == null) return null;
|
||||
String[] parts = value.toLowerCase().trim().split("\\+");
|
||||
String input = parts.length == 2 ? parts[1].trim() : null;
|
||||
if (!(parts.length == 2 && parts[0].trim().equals("ctrl")) || input.isEmpty() || input.length() > 2) {
|
||||
Logger.logError(LOG_TAG, "Keyboard shortcut '" + key + "' is not Ctrl+<something>");
|
||||
return null;
|
||||
}
|
||||
|
||||
char c = input.charAt(0);
|
||||
int codePoint = c;
|
||||
if (Character.isLowSurrogate(c)) {
|
||||
if (input.length() != 2 || Character.isHighSurrogate(input.charAt(1))) {
|
||||
Logger.logError(LOG_TAG, "Keyboard shortcut '" + key + "' is not Ctrl+<something>");
|
||||
return null;
|
||||
} else {
|
||||
codePoint = Character.toCodePoint(input.charAt(1), c);
|
||||
}
|
||||
}
|
||||
|
||||
return codePoint;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value itself if it is not {@code null}, otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_BACK_KEY_BEHAVIOUR}.
|
||||
*
|
||||
* @param value {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static String getBackKeyBehaviourInternalPropertyValueFromValue(String value) {
|
||||
return (String) SharedProperties.getDefaultIfNotInMap(TermuxPropertyConstants.KEY_BACK_KEY_BEHAVIOUR, TermuxPropertyConstants.MAP_BACK_KEY_BEHAVIOUR, SharedProperties.toLowerCase(value), TermuxPropertyConstants.DEFAULT_IVALUE_BACK_KEY_BEHAVIOUR, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the path itself if a directory exists at it and is readable, otherwise returns
|
||||
* {@link TermuxPropertyConstants#DEFAULT_IVALUE_DEFAULT_WORKING_DIRECTORY}.
|
||||
*
|
||||
* @param path The {@link String} path to check.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static String getDefaultWorkingDirectoryInternalPropertyValueFromValue(String path) {
|
||||
if (path == null || path.isEmpty()) return TermuxPropertyConstants.DEFAULT_IVALUE_DEFAULT_WORKING_DIRECTORY;
|
||||
File workDir = new File(path);
|
||||
if (!workDir.exists() || !workDir.isDirectory() || !workDir.canRead()) {
|
||||
// Fallback to default directory if user configured working directory does not exist,
|
||||
// is not a directory or is not readable.
|
||||
Logger.logError(LOG_TAG, "The path \"" + path + "\" for the key \"" + TermuxPropertyConstants.KEY_DEFAULT_WORKING_DIRECTORY + "\" does not exist, is not a directory or is not readable. Using default value \"" + TermuxPropertyConstants.DEFAULT_IVALUE_DEFAULT_WORKING_DIRECTORY + "\" instead.");
|
||||
return TermuxPropertyConstants.DEFAULT_IVALUE_DEFAULT_WORKING_DIRECTORY;
|
||||
} else {
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value itself if it is not {@code null}, otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_EXTRA_KEYS}.
|
||||
*
|
||||
* @param value The {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static String getExtraKeysInternalPropertyValueFromValue(String value) {
|
||||
return SharedProperties.getDefaultIfNullOrEmpty(value, TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value itself if it is not {@code null}, otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_EXTRA_KEYS_STYLE}.
|
||||
*
|
||||
* @param value {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static String getExtraKeysStyleInternalPropertyValueFromValue(String value) {
|
||||
return SharedProperties.getDefaultIfNullOrEmpty(value, TermuxPropertyConstants.DEFAULT_IVALUE_EXTRA_KEYS_STYLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value itself if it is not {@code null}, otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR}.
|
||||
*
|
||||
* @param value {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static String getSoftKeyboardToggleBehaviourInternalPropertyValueFromValue(String value) {
|
||||
return (String) SharedProperties.getDefaultIfNotInMap(TermuxPropertyConstants.KEY_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR, TermuxPropertyConstants.MAP_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR, SharedProperties.toLowerCase(value), TermuxPropertyConstants.DEFAULT_IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR, true, LOG_TAG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value itself if it is not {@code null}, otherwise returns {@link TermuxPropertyConstants#DEFAULT_IVALUE_VOLUME_KEYS_BEHAVIOUR}.
|
||||
*
|
||||
* @param value {@link String} value to convert.
|
||||
* @return Returns the internal value for value.
|
||||
*/
|
||||
public static String getVolumeKeysBehaviourInternalPropertyValueFromValue(String value) {
|
||||
return (String) SharedProperties.getDefaultIfNotInMap(TermuxPropertyConstants.KEY_VOLUME_KEYS_BEHAVIOUR, TermuxPropertyConstants.MAP_VOLUME_KEYS_BEHAVIOUR, SharedProperties.toLowerCase(value), TermuxPropertyConstants.DEFAULT_IVALUE_VOLUME_KEYS_BEHAVIOUR, true, LOG_TAG);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public boolean areHardwareKeyboardShortcutsDisabled() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_DISABLE_HARDWARE_KEYBOARD_SHORTCUTS, true);
|
||||
}
|
||||
|
||||
public boolean areTerminalSessionChangeToastsDisabled() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_DISABLE_TERMINAL_SESSION_CHANGE_TOAST, true);
|
||||
}
|
||||
|
||||
public boolean isEnforcingCharBasedInput() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_ENFORCE_CHAR_BASED_INPUT, true);
|
||||
}
|
||||
|
||||
public boolean shouldExtraKeysTextBeAllCaps() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_EXTRA_KEYS_TEXT_ALL_CAPS, true);
|
||||
}
|
||||
|
||||
public boolean shouldSoftKeyboardBeHiddenOnStartup() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_HIDE_SOFT_KEYBOARD_ON_STARTUP, true);
|
||||
}
|
||||
|
||||
public boolean shouldOpenTerminalTranscriptURLOnClick() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_TERMINAL_ONCLICK_URL_OPEN, true);
|
||||
}
|
||||
|
||||
public boolean isUsingBlackUI() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_USE_BLACK_UI, true);
|
||||
}
|
||||
|
||||
public boolean isUsingCtrlSpaceWorkaround() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_USE_CTRL_SPACE_WORKAROUND, true);
|
||||
}
|
||||
|
||||
public boolean isUsingFullScreen() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_USE_FULLSCREEN, true);
|
||||
}
|
||||
|
||||
public boolean isUsingFullScreenWorkAround() {
|
||||
return (boolean) getInternalPropertyValue(TermuxPropertyConstants.KEY_USE_FULLSCREEN_WORKAROUND, true);
|
||||
}
|
||||
|
||||
public int getBellBehaviour() {
|
||||
return (int) getInternalPropertyValue(TermuxPropertyConstants.KEY_BELL_BEHAVIOUR, true);
|
||||
}
|
||||
|
||||
public int getTerminalCursorBlinkRate() {
|
||||
return (int) getInternalPropertyValue(TermuxPropertyConstants.KEY_TERMINAL_CURSOR_BLINK_RATE, true);
|
||||
}
|
||||
|
||||
public int getTerminalCursorStyle() {
|
||||
return (int) getInternalPropertyValue(TermuxPropertyConstants.KEY_TERMINAL_CURSOR_STYLE, true);
|
||||
}
|
||||
|
||||
public int getTerminalMarginHorizontal() {
|
||||
return (int) getInternalPropertyValue(TermuxPropertyConstants.KEY_TERMINAL_MARGIN_HORIZONTAL, true);
|
||||
}
|
||||
|
||||
public int getTerminalMarginVertical() {
|
||||
return (int) getInternalPropertyValue(TermuxPropertyConstants.KEY_TERMINAL_MARGIN_VERTICAL, true);
|
||||
}
|
||||
|
||||
public int getTerminalTranscriptRows() {
|
||||
return (int) getInternalPropertyValue(TermuxPropertyConstants.KEY_TERMINAL_TRANSCRIPT_ROWS, true);
|
||||
}
|
||||
|
||||
public float getTerminalToolbarHeightScaleFactor() {
|
||||
return (float) getInternalPropertyValue(TermuxPropertyConstants.KEY_TERMINAL_TOOLBAR_HEIGHT_SCALE_FACTOR, true);
|
||||
}
|
||||
|
||||
public boolean isBackKeyTheEscapeKey() {
|
||||
return (boolean) TermuxPropertyConstants.IVALUE_BACK_KEY_BEHAVIOUR_ESCAPE.equals(getInternalPropertyValue(TermuxPropertyConstants.KEY_BACK_KEY_BEHAVIOUR, true));
|
||||
}
|
||||
|
||||
public String getDefaultWorkingDirectory() {
|
||||
return (String) getInternalPropertyValue(TermuxPropertyConstants.KEY_DEFAULT_WORKING_DIRECTORY, true);
|
||||
}
|
||||
|
||||
public boolean shouldEnableDisableSoftKeyboardOnToggle() {
|
||||
return (boolean) TermuxPropertyConstants.IVALUE_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR_ENABLE_DISABLE.equals(getInternalPropertyValue(TermuxPropertyConstants.KEY_SOFT_KEYBOARD_TOGGLE_BEHAVIOUR, true));
|
||||
}
|
||||
|
||||
public boolean areVirtualVolumeKeysDisabled() {
|
||||
return (boolean) TermuxPropertyConstants.IVALUE_VOLUME_KEY_BEHAVIOUR_VOLUME.equals(getInternalPropertyValue(TermuxPropertyConstants.KEY_VOLUME_KEYS_BEHAVIOUR, true));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public void dumpPropertiesToLog() {
|
||||
Properties properties = getProperties(true);
|
||||
StringBuilder propertiesDump = new StringBuilder();
|
||||
|
||||
propertiesDump.append(mLabel).append(" Termux Properties:");
|
||||
if (properties != null) {
|
||||
for (String key : properties.stringPropertyNames()) {
|
||||
propertiesDump.append("\n").append(key).append(": `").append(properties.get(key)).append("`");
|
||||
}
|
||||
} else {
|
||||
propertiesDump.append(" null");
|
||||
}
|
||||
|
||||
Logger.logVerbose(LOG_TAG, propertiesDump.toString());
|
||||
}
|
||||
|
||||
public void dumpInternalPropertiesToLog() {
|
||||
HashMap<String, Object> internalProperties = (HashMap<String, Object>) getInternalProperties();
|
||||
StringBuilder internalPropertiesDump = new StringBuilder();
|
||||
|
||||
internalPropertiesDump.append(mLabel).append(" Internal Properties:");
|
||||
if (internalProperties != null) {
|
||||
for (String key : internalProperties.keySet()) {
|
||||
internalPropertiesDump.append("\n").append(key).append(": `").append(internalProperties.get(key)).append("`");
|
||||
}
|
||||
}
|
||||
|
||||
Logger.logVerbose(LOG_TAG, internalPropertiesDump.toString());
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user