Add theme selector to settings, fix action-bar text color.

This commit is contained in:
Dmitry Isaenko 2020-10-11 04:00:34 +03:00
parent 59c1e4afa8
commit 5e3193744d
5 changed files with 114 additions and 25 deletions

View file

@ -5,16 +5,29 @@ import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; import android.text.Editable;
import android.text.InputFilter; import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Spinner;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.SwitchCompat;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO;
import static androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES;
public class SettingsActivity extends AppCompatActivity { public class SettingsActivity extends AppCompatActivity {
private static final int SYSTEM_DEFAULT = 0;
private static final int DAY_THEME = 1;
private static final int NIGHT_THEME = 2;
private Spinner themeSpinner;
private EditText nsIp; private EditText nsIp;
private EditText servAddr; private EditText servAddr;
private EditText servPort; private EditText servPort;
@ -34,6 +47,22 @@ public class SettingsActivity extends AppCompatActivity {
Toolbar toolbar = findViewById(R.id.toolbar); Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
themeSpinner = findViewById(R.id.applicationThemeSpinner);
themeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int selectedItemPosition, long selectedItemId) {
setApplicationTheme(selectedItemPosition);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) { }
});
ArrayAdapter<CharSequence> themeAdapter = ArrayAdapter.createFromResource(this,
R.array.dayNightSelector, android.R.layout.simple_spinner_item);
themeAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
themeSpinner.setAdapter(themeAdapter);
// Set NS IP field // Set NS IP field
nsIp = findViewById(R.id.nsIpEditText); nsIp = findViewById(R.id.nsIpEditText);
servAddr = findViewById(R.id.servAddrTextEdit); servAddr = findViewById(R.id.servAddrTextEdit);
@ -47,11 +76,12 @@ public class SettingsActivity extends AppCompatActivity {
// TODO: Disable controls // TODO: Disable controls
if (savedInstanceState == null){ if (savedInstanceState == null){
SharedPreferences sp = getSharedPreferences("NSUSBloader", MODE_PRIVATE); //.getInt("PROTOCOL", NsConstants.PROTO_TF_USB); SharedPreferences preferences = getSharedPreferences("NSUSBloader", MODE_PRIVATE); //.getInt("PROTOCOL", NsConstants.PROTO_TF_USB);
nsIp.setText(sp.getString("SNsIP", "192.168.1.42")); themeSpinner.setSelection(preferences.getInt("ApplicationTheme", 0));
autoDetectIp.setChecked(sp.getBoolean("SAutoIP", true)); nsIp.setText(preferences.getString("SNsIP", "192.168.1.42"));
servAddr.setText(sp.getString("SServerIP", "192.168.1.142")); autoDetectIp.setChecked(preferences.getBoolean("SAutoIP", true));
servPort.setText(String.valueOf(sp.getInt("SServerPort", 6042))); servAddr.setText(preferences.getString("SServerIP", "192.168.1.142"));
servPort.setText(String.valueOf(preferences.getInt("SServerPort", 6042)));
} }
// else { } // not needed // else { } // not needed
@ -108,12 +138,26 @@ public class SettingsActivity extends AppCompatActivity {
}); });
// Shitcode practices end // Shitcode practices end
} }
private void setApplicationTheme(int itemId){
switch (itemId){
case SYSTEM_DEFAULT:
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_FOLLOW_SYSTEM);
break;
case DAY_THEME:
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO);
break;
case NIGHT_THEME:
AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES);
}
}
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
SharedPreferences.Editor spEditor = getSharedPreferences("NSUSBloader", MODE_PRIVATE).edit(); SharedPreferences.Editor spEditor = getSharedPreferences("NSUSBloader", MODE_PRIVATE).edit();
spEditor.putInt("ApplicationTheme", themeSpinner.getSelectedItemPosition());
if (nsIp.getText().toString().matches("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}")) if (nsIp.getText().toString().matches("^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"))
spEditor.putString("SNsIP", nsIp.getText().toString()); spEditor.putString("SNsIP", nsIp.getText().toString());
@ -149,9 +193,7 @@ public class SettingsActivity extends AppCompatActivity {
return null; return null;
}; };
private static InputFilter inputFilterForPort = new InputFilter() { private static InputFilter inputFilterForPort = (charSequence, start, end, destination, dStart, dEnd) -> {
@Override
public CharSequence filter(CharSequence charSequence, int start, int end, Spanned destination, int dStart, int dEnd) {
if (end > start) { if (end > start) {
String destTxt = destination.toString(); String destTxt = destination.toString();
String resultingTxt = destTxt.substring(0, dStart) + String resultingTxt = destTxt.substring(0, dStart) +
@ -163,7 +205,5 @@ public class SettingsActivity extends AppCompatActivity {
return ""; return "";
} }
return null; return null;
}
}; };
} }

View file

@ -19,11 +19,42 @@
tools:context=".SettingsActivity" tools:context=".SettingsActivity"
tools:showIn="@layout/activity_settings"> tools:showIn="@layout/activity_settings">
<TextView
android:id="@+id/textView7"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="3dp"
android:paddingBottom="3dp"
android:text="@string/settings_application_settings"
android:textStyle="bold|italic" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView8"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="@string/settings_app_theme" />
<Spinner
android:id="@+id/applicationThemeSpinner"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="wrap_content" />
</LinearLayout>
<TextView <TextView
android:id="@+id/textView" android:id="@+id/textView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/tf_net" /> android:paddingTop="3dp"
android:paddingBottom="3dp"
android:text="@string/tf_net"
android:textStyle="bold|italic" />
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
@ -45,7 +76,8 @@
android:digits="0123456789." android:digits="0123456789."
android:ems="10" android:ems="10"
android:hint="xxx.xxx.xxx.xxx" android:hint="xxx.xxx.xxx.xxx"
android:inputType="number" /> android:inputType="number"
android:importantForAutofill="no" />
</LinearLayout> </LinearLayout>
<androidx.appcompat.widget.SwitchCompat <androidx.appcompat.widget.SwitchCompat
@ -74,6 +106,7 @@
android:digits="0123456789." android:digits="0123456789."
android:ems="10" android:ems="10"
android:hint="xxx.xxx.xxx.xxx" android:hint="xxx.xxx.xxx.xxx"
android:importantForAutofill="no"
android:inputType="number" /> android:inputType="number" />
</LinearLayout> </LinearLayout>
@ -98,6 +131,7 @@
android:digits="0123456789" android:digits="0123456789"
android:ems="10" android:ems="10"
android:hint="1024-65535" android:hint="1024-65535"
android:importantForAutofill="no"
android:inputType="number" /> android:inputType="number" />
</LinearLayout> </LinearLayout>

View file

@ -39,4 +39,11 @@
<string name="notification_transfer_in_progress">Идет передача данных</string> <string name="notification_transfer_in_progress">Идет передача данных</string>
<string name="notification_chan_desc_progress">Уведомление демонстрирует прогресс передачи данных</string> <string name="notification_chan_desc_progress">Уведомление демонстрирует прогресс передачи данных</string>
<string name="notification_chan_name_progress">Передача данных</string> <string name="notification_chan_name_progress">Передача данных</string>
<string-array name="dayNightSelector">
<item>Системная</item>
<item>Светлая тема</item>
<item>Ночная тема</item>
</string-array>
<string name="settings_application_settings">Настройки приложения</string>
<string name="settings_app_theme">Тема:</string>
</resources> </resources>

View file

@ -16,9 +16,9 @@
<string name="interrupt_btn">Interrupt</string> <string name="interrupt_btn">Interrupt</string>
<string name="navigation_drawer_open">Open navigation drawer</string> <string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string> <string name="navigation_drawer_close">Close navigation drawer</string>
<string name="tf_usb" translatable="false">TinFoil USB</string> <string name="tf_usb" translatable="false">Tinfoil USB</string>
<string name="gl" translatable="false">GoldLeaf v0.5</string> <string name="gl" translatable="false">GoldLeaf v0.5</string>
<string name="tf_net" translatable="false">TinFoil NET</string> <string name="tf_net" translatable="false">Tinfoil NET</string>
<string name="about_app">About this app</string> <string name="about_app">About this app</string>
<string name="other">Other</string> <string name="other">Other</string>
<string name="one_item_for_gl_notification">Only one file could be selected for GoldLeaf v0.5</string> <string name="one_item_for_gl_notification">Only one file could be selected for GoldLeaf v0.5</string>
@ -46,4 +46,11 @@
<string name="notification_chan_name_progress">Transfer in progress</string> <string name="notification_chan_name_progress">Transfer in progress</string>
<string name="notification_chan_desc_progress">Notification indicates transfer progress</string> <string name="notification_chan_desc_progress">Notification indicates transfer progress</string>
<string name="about_translators" translatable="false">* 中文(繁體) - <a href="https://github.com/qazrfv1234">qazrfv1234</a>\n* 中文(简体) - FFT9 <a href="http://www.xxgame.net">(XXGAME GROUP)</a></string> <string name="about_translators" translatable="false">* 中文(繁體) - <a href="https://github.com/qazrfv1234">qazrfv1234</a>\n* 中文(简体) - FFT9 <a href="http://www.xxgame.net">(XXGAME GROUP)</a></string>
<string-array name="dayNightSelector">
<item>System default</item>
<item>Day theme</item>
<item>Night theme</item>
</string-array>
<string name="settings_application_settings">Application settings</string>
<string name="settings_app_theme">Application theme:</string>
</resources> </resources>

View file

@ -15,6 +15,7 @@
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.DayNight.ActionBar"> <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.DayNight.ActionBar">
<item name="fontFamily">@font/play</item> <item name="fontFamily">@font/play</item>
<item name="android:textColorPrimary">@android:color/white</item>
</style> </style>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.DayNight" /> <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.DayNight" />