Add theme selector to settings, fix action-bar text color.
This commit is contained in:
parent
59c1e4afa8
commit
5e3193744d
5 changed files with 114 additions and 25 deletions
|
@ -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,21 +193,17 @@ 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
|
if (end > start) {
|
||||||
public CharSequence filter(CharSequence charSequence, int start, int end, Spanned destination, int dStart, int dEnd) {
|
String destTxt = destination.toString();
|
||||||
if (end > start) {
|
String resultingTxt = destTxt.substring(0, dStart) +
|
||||||
String destTxt = destination.toString();
|
charSequence.subSequence(start, end) +
|
||||||
String resultingTxt = destTxt.substring(0, dStart) +
|
destTxt.substring(dEnd);
|
||||||
charSequence.subSequence(start, end) +
|
if (!resultingTxt.matches ("^[0-9]+"))
|
||||||
destTxt.substring(dEnd);
|
return "";
|
||||||
if (!resultingTxt.matches ("^[0-9]+"))
|
if (Integer.parseInt(resultingTxt) > 65535)
|
||||||
return "";
|
return "";
|
||||||
if (Integer.parseInt(resultingTxt) > 65535)
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
|
@ -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" />
|
||||||
|
|
Loading…
Reference in a new issue