UI theme can be changed

This commit is contained in:
2025-10-27 00:13:08 +01:00
parent 914f5c033b
commit a30a47f67a
53 changed files with 97 additions and 21 deletions

View File

@@ -41,6 +41,7 @@ public class ActivityControlCenter extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_control_center);

View File

@@ -22,6 +22,7 @@ public class ActivityDisplayLongMessage extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_display_long_message);
tvMessageTitle = (TextView)findViewById(R.id.tvMessageTitle);

View File

@@ -14,6 +14,7 @@ public class ActivityHelp extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(layout.activity_help_text);
TextView tvHelpTextEnergySaving = (TextView) findViewById(R.id.tvHelpTextEnergySaving);

View File

@@ -45,6 +45,7 @@ public class ActivityMainPoi extends ActivityGeneric
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.main_poi_layout);
instance = this;

View File

@@ -41,6 +41,7 @@ public class ActivityMainProfiles extends ActivityGeneric
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.main_profile_layout);
instance = this;

View File

@@ -49,6 +49,7 @@ public class ActivityMainRules extends ActivityGeneric
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.main_rule_layout);
instance = this;

View File

@@ -57,6 +57,7 @@ public class ActivityMainScreen extends ActivityGeneric
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.main_overview_layout);
activityMainScreenInstance = this;

View File

@@ -24,8 +24,7 @@ public class ActivityMainTabLayout extends TabActivity
super.onCreate(savedInstanceState);
Settings.readFromPersistentStorage(ActivityMainTabLayout.this);
Miscellaneous.setDisplayLanguage(this);
this.setTheme(R.style.AppThemeCompat);
Miscellaneous.setUiTheme(this);
if(Settings.tabsPlacement == 1)
setContentView(R.layout.main_tab_layout_tabs_at_bottom);

View File

@@ -27,6 +27,7 @@ public class ActivityManageActionBrightnessSetting extends Activity
{
setContentView(R.layout.activity_manage_action_brightness_settings);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
super.onCreate(savedInstanceState);
chkAutoBrightness = (CheckBox)findViewById(R.id.chkAutoBrightness);

View File

@@ -260,6 +260,7 @@ public class ActivityManageActionCloseNotification extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_close_notification);
etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle);

View File

@@ -20,6 +20,7 @@ public class ActivityManageActionControlMedia extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_control_media);
rbMediaPlayPause = (RadioButton)findViewById(R.id.rbMediaPlayPause);

View File

@@ -20,6 +20,7 @@ public class ActivityManageActionCopyToClipboard extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
this.setContentView(R.layout.activity_manage_action_copy_to_clipboard);
bSaveCopyToClipboard = (Button) findViewById(R.id.bSaveCopyToClipboard);

View File

@@ -25,6 +25,7 @@ public class ActivityManageActionCreateNotification extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_create_notification);
etNotificationTitle = (EditText) findViewById(R.id.etNotificationTitle);

View File

@@ -20,6 +20,7 @@ public class ActivityManageActionLocationService extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_location_service);
rbActionLocationServiceOff = (RadioButton) findViewById(R.id.rbActionLocationServiceOff);

View File

@@ -22,6 +22,7 @@ public class ActivityManageActionMakePhoneCall extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_make_phone_call);
etTargetPhoneNumber = (EditText)findViewById(R.id.etTargetPhoneNumber);

View File

@@ -27,6 +27,7 @@ public class ActivityManageActionPlaySound extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_play_sound);
chkPlaySoundAlwaysPlay = (CheckBox)findViewById(R.id.chkPlaySoundAlwaysPlay);

View File

@@ -29,6 +29,7 @@ public class ActivityManageActionRunExecutable extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_run_executable);
chkRunExecAsRoot = (CheckBox)findViewById(R.id.chkRunExecAsRoot);

View File

@@ -38,6 +38,7 @@ public class ActivityManageActionSendBroadcast extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_send_broadcast);
etBroadcastToSend = (EditText)findViewById(R.id.etBroadcastToSend);

View File

@@ -49,6 +49,7 @@ public class ActivityManageActionSendTextMessage extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
this.setContentView(R.layout.activity_manage_action_send_textmessage);
etSendTextMessage = (EditText)findViewById(R.id.etSendTextMessage);

View File

@@ -25,6 +25,7 @@ public class ActivityManageActionSetVariable extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
this.setContentView(R.layout.activity_manage_action_set_variable);
etVariableSetKey = (EditText)findViewById(R.id.etVariableSetKey);

View File

@@ -23,6 +23,7 @@ public class ActivityManageActionSpeakText extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
this.setContentView(R.layout.activity_manage_action_speak_text);
etSpeakText = (EditText)findViewById(R.id.etTextToSpeak);

View File

@@ -70,6 +70,7 @@ public class ActivityManageActionStartActivity extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_start_activity);
lvIntentPairs = (ListView)findViewById(R.id.lvIntentPairs);

View File

@@ -54,6 +54,7 @@ public class ActivityManageActionTriggerUrl extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
this.setContentView(R.layout.activity_manage_action_trigger_url);
etTriggerUrl = (EditText)findViewById(R.id.etTriggerUrl);

View File

@@ -28,6 +28,7 @@ public class ActivityManageActionVibrate extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_vibrate);
etVibratePattern = (EditText)findViewById(R.id.etVibratePattern);

View File

@@ -28,6 +28,7 @@ public class ActivityManageActionWakeLock extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_wakelock);
rbWakeLockActivate = (RadioButton)findViewById(R.id.rbWakeLockActivate);

View File

@@ -24,6 +24,7 @@ public class ActivityManageActionWifi extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_action_wifi);
chkWifiRunAsRoot = (CheckBox)findViewById(R.id.chkWifiRunAsRoot);

View File

@@ -66,6 +66,7 @@ public class ActivityManagePoi extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
this.setContentView(R.layout.activity_manage_specific_poi);
myLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

View File

@@ -85,6 +85,7 @@ public class ActivityManageProfile extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
this.setContentView(R.layout.activity_manage_specific_profile);
checkBoxChangeSoundMode = (CheckBox)findViewById(R.id.checkBoxChangeSoundMode);

View File

@@ -160,8 +160,8 @@ public class ActivityManageRule extends Activity
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setTheme(R.style.AppThemeCompat);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_specific_rule);

View File

@@ -33,6 +33,7 @@ public class ActivityManageTriggerBluetooth extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_bluetooth);
radioAnyBluetoothDevice = (RadioButton)findViewById(R.id.radioAnyBluetoothDevice);

View File

@@ -29,6 +29,7 @@ public class ActivityManageTriggerBroadcast extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_broadcasts);
bBroadcastShowSuggestions = findViewById(R.id.bBroadcastShowSuggestions);

View File

@@ -51,6 +51,7 @@ public class ActivityManageTriggerCalendar extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_calendar);
chkCalendarEventActive = (CheckBox) findViewById(R.id.chkCalendarEventActive);

View File

@@ -22,6 +22,7 @@ public class ActivityManageTriggerCharging extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_charging);
rbChargingOn = (RadioButton) findViewById(R.id.rbChargingOn);

View File

@@ -24,6 +24,7 @@ public class ActivityManageTriggerCheckVariable extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_check_variable);
etVariableKeyTrigger = (EditText) findViewById(R.id.etVariableKeyTrigger);

View File

@@ -105,6 +105,7 @@ public class ActivityManageTriggerDeviceOrientation extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_device_orientation);
currentAzimuth = (TextView) findViewById(R.id.tvCurrentAzimuth);

View File

@@ -40,6 +40,7 @@ public class ActivityManageTriggerNfc extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_nfc);
etNewNfcIdValue = (EditText)findViewById(R.id.etNewNfcIdValue);

View File

@@ -259,6 +259,7 @@ public class ActivityManageTriggerNotification extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_notification);
etNotificationTitle = (EditText)findViewById(R.id.etNotificationTitle);

View File

@@ -36,6 +36,7 @@ public class ActivityManageTriggerPhoneCall extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_phone_call);
etTriggerPhoneCallPhoneNumber = (EditText)findViewById(R.id.etTriggerPhoneCallPhoneNumber);

View File

@@ -32,6 +32,7 @@ public class ActivityManageTriggerProfile extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_profile);
bSaveTriggerProfile = (Button)findViewById(R.id.bSaveTriggerProfile);

View File

@@ -22,6 +22,7 @@ public class ActivityManageTriggerSubSystemState extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_subsystemstate);
rbSubSystemStateWifi = (RadioButton)findViewById(R.id.rbSubSystemStateWifi);

View File

@@ -27,6 +27,7 @@ public class ActivityManageTriggerTethering extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_tethering);
rbTetheringOn = (RadioButton) findViewById(R.id.rbTetheringOn);

View File

@@ -36,8 +36,14 @@ public class ActivityManageTriggerTimeFrame extends Activity
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.setTheme(R.style.AppThemeCompat);
Miscellaneous.setDisplayLanguage(this);
/*
A modern theme is required for this activity. Classic theme can cause crashes with the TimePicker.
The value configured in settings is ignored.
*/
this.setTheme(R.style.AppThemeCompat);
setContentView(R.layout.activity_manage_trigger_timeframe);
if(Build.VERSION.SDK_INT == 34)

View File

@@ -53,6 +53,7 @@ public class ActivityManageTriggerWifi extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_manage_trigger_wifi);
rbTriggerWifiConnected = (RadioButton) findViewById(R.id.rbTriggerWifiConnected);

View File

@@ -84,6 +84,7 @@ public class ActivityPermissions extends Activity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.permissions_activity);
bCancelPermissions = (Button)findViewById(R.id.bCancelPermissions);

View File

@@ -17,6 +17,9 @@ public class ActivitySettings extends PreferenceActivity
{
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
if(Settings.uiTheme != 0)
this.setTheme(R.style.AppThemeCompatLight);
// Miscellaneous.setUiTheme(this);
addPreferencesFromResource(layout.activity_settings);
if(BuildConfig.FLAVOR.equals(AutomationService.flavor_name_apk))

View File

@@ -31,6 +31,7 @@ public class ActivityVolumeTest extends Activity
super.onCreate(savedInstanceState);
Miscellaneous.setDisplayLanguage(this);
Miscellaneous.setUiTheme(this);
setContentView(R.layout.activity_volume_calibration);
tvCurrentVolume = (TextView)findViewById(R.id.tvCurrentVolume);

View File

@@ -2195,6 +2195,22 @@ public class Miscellaneous extends Service
return context.getApplicationContext().getApplicationInfo().targetSdkVersion;
}
public static void setUiTheme(Context context)
{
switch(Settings.uiTheme)
{
case 0:
context.setTheme(R.style.AppTheme);
break;
case 1:
context.setTheme(R.style.AppThemeCompat);
break;
default:
context.setTheme(R.style.AppTheme);
break;
}
}
public static void setDisplayLanguage(Context context)
{
if(!Settings.displayLanguage.equals(Settings.default_displayLanguage))

View File

@@ -63,6 +63,7 @@ public class Settings implements SharedPreferences
public static int activityDetectionFrequency;
public static int activityDetectionRequiredProbability;
public static boolean privacyLocationing;
public static int uiTheme;
public static int startScreen;
public static int tabsPlacement;
public static boolean executeRulesAndProfilesWithSingleClick;
@@ -131,6 +132,7 @@ public class Settings implements SharedPreferences
public static final int default_activityDetectionFrequency = 60;
public static final int default_activityDetectionRequiredProbability = 75;
public static final boolean default_privacyLocationing = false;
public static final int default_uiTheme = 0;
public static final int default_startScreen = 0;
public static final int default_tabsPlacement = 0;
public static final boolean default_executeRulesAndProfilesWithSingleClick = false;
@@ -264,6 +266,7 @@ public class Settings implements SharedPreferences
activityDetectionRequiredProbability = Integer.parseInt(prefs.getString("activityDetectionRequiredProbability", String.valueOf(default_activityDetectionRequiredProbability)));
privacyLocationing = prefs.getBoolean("privacyLocationing", default_privacyLocationing);
uiTheme = Integer.parseInt(prefs.getString("uiTheme", String.valueOf(default_uiTheme)));
startScreen = Integer.parseInt(prefs.getString("startScreen", String.valueOf(default_startScreen)));
tabsPlacement = Integer.parseInt(prefs.getString("tabsPlacement", String.valueOf(default_tabsPlacement)));
@@ -460,6 +463,9 @@ public class Settings implements SharedPreferences
if(!prefs.contains("privacyLocationing") || force)
editor.putBoolean("privacyLocationing", default_privacyLocationing);
if(!prefs.contains("uiTheme") || force)
editor.putString("uiTheme", String.valueOf(default_uiTheme));
if(!prefs.contains("startScreen") || force)
editor.putString("startScreen", String.valueOf(default_startScreen));
@@ -560,6 +566,7 @@ public class Settings implements SharedPreferences
editor.putString("activityDetectionFrequency", String.valueOf(activityDetectionFrequency));
editor.putString("activityDetectionRequiredProbability", String.valueOf(activityDetectionRequiredProbability));
editor.putBoolean("privacyLocationing", privacyLocationing);
editor.putString("uiTheme", String.valueOf(uiTheme));
editor.putString("startScreen", String.valueOf(startScreen));
editor.putString("tabsPlacement", String.valueOf(tabsPlacement));
editor.putBoolean("executeRulesAndProfilesWithSingleClick", executeRulesAndProfilesWithSingleClick);

View File

@@ -46,11 +46,11 @@
android:inputType="number" />
<ListPreference
android:key="appTheme"
android:title="@string/startScreen"
android:summary="@string/startScreenSummary"
android:entries="@array/startScreenOptions"
android:entryValues="@array/startScreenOptionsValues" />
android:key="uiTheme"
android:title="@string/uiTheme"
android:summary="@string/uiThemeSummary"
android:entries="@array/uiThemeOptions"
android:entryValues="@array/uiThemeOptionsValues" />
<ListPreference
android:key="startScreen"

View File

@@ -9,18 +9,14 @@
<item name="1">1</item>
</string-array>
<!--<string-array name="appThemeOptions">
<item name="0">@string/overview</item>
<item name="1">@string/pois</item>
<item name="2">@string/rules</item>
<item name="3">@string/profiles</item>
<string-array name="uiThemeOptions">
<item name="0">@string/uiThemeClassic</item>
<item name="1">@string/uiThemeCompat</item>
</string-array>
<string-array name="uiThemeOptionsValues">
<item name="0">0</item> <!-- classic -->
<item name="1">1</item> <!-- AppThemeCompat -->
</string-array>
<string-array name="startScreenOptionsValues">
<item name="0">0</item>
<item name="1">1</item>
<item name="2">2</item>
<item name="3">3</item>
</string-array>-->
<string-array name="startScreenOptions">
<item name="0">@string/overview</item>
@@ -82,4 +78,6 @@
<string name="languageFrench">French</string>
<string name="languagePolish">Polish</string>
<string name="languageChineseChina">Chinese (China)</string>
<string name="uiThemeClassic">Classic UI theme</string>
<string name="uiThemeCompat">Material design UI theme</string>
</resources>

View File

@@ -960,4 +960,6 @@
<string name="disable">Disable</string>
<string name="enable">Enable</string>
<string name="permissionForegroundServiceTypeSpecialUseRequired">Permission FOREGROUND_SERVICE_TYPE_SPECIAL_USE is required to start.</string>
<string name="uiTheme">UI theme</string>
<string name="uiThemeSummary">The theme of the graphical user interface. Application required.</string>
</resources>

View File

@@ -4,5 +4,6 @@
<style name="AppThemeMaterial" parent="Theme.MaterialComponents.DayNight" /> <!-- very dark -->
<style name="AppThemeMaterial3" parent="Theme.Material3.DayNight" /> <!-- very dark -->
<style name="AppThemeCompat" parent="Theme.AppCompat.DayNight" /> <!-- greyish -->
<style name="AppThemeCompatLight" parent="Theme.AppCompat.Light" /> <!-- greyish -->
</resources>

View File

@@ -1 +1,3 @@
* Fixed: Crash in Play Store version when starting the service
* Fixed: Crash in Play Store version when starting the service
* Fixed: Crash when clicking +/- when creating/editing TimeFrame trigger
* Added Possibility to select UI theme, hence enabling modern UI designs