commit 6918522fea26c6db62028072864c84628fd4184c
parent b583f052765535e4d82a3ca8bf0177b4a78a0ada
Author: gstraube <gstraube@mailbox.org>
Date: Mon, 5 Feb 2018 14:44:07 +0100
Introduce night mode
Diffstat:
8 files changed, 73 insertions(+), 20 deletions(-)
diff --git a/app/src/main/java/com/github/cythara/CanvasPainter.java b/app/src/main/java/com/github/cythara/CanvasPainter.java
@@ -11,9 +11,10 @@ import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.text.TextPaint;
-import static android.content.Context.*;
+import static android.content.Context.MODE_PRIVATE;
import static com.github.cythara.ListenerFragment.IS_RECORDING;
-import static com.github.cythara.MainActivity.*;
+import static com.github.cythara.MainActivity.PREFS_FILE;
+import static com.github.cythara.MainActivity.USE_SCIENTIFIC_NOTATION;
class CanvasPainter {
@@ -57,6 +58,11 @@ class CanvasPainter {
this.canvas = canvas;
+ if (MainActivity.isNightModeEnabled()) {
+ int color = context.getResources().getColor(R.color.colorPrimaryDark);
+ this.canvas.drawColor(color);
+ }
+
gaugeWidth = 0.45F * canvas.getWidth();
x = canvas.getWidth() / 2F;
y = canvas.getHeight() / 2F;
diff --git a/app/src/main/java/com/github/cythara/MainActivity.java b/app/src/main/java/com/github/cythara/MainActivity.java
@@ -14,15 +14,18 @@ import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
+import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
+import android.view.ContextThemeWrapper;
import android.view.Menu;
import android.view.MenuItem;
import android.view.WindowManager;
-import android.widget.ArrayAdapter;
import com.jaredrummler.materialspinner.MaterialSpinner;
+import com.jaredrummler.materialspinner.MaterialSpinnerAdapter;
+
+import java.util.Arrays;
-import static android.widget.ArrayAdapter.createFromResource;
import static com.github.cythara.TuningMapper.getTuningFromPosition;
public class MainActivity extends AppCompatActivity implements ListenerFragment.TaskCallbacks,
@@ -33,12 +36,18 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment.
public static final String USE_SCIENTIFIC_NOTATION = "use_scientific_notation";
public static final String CURRENT_TUNING = "current_tuning";
private static final String TAG_LISTENER_FRAGMENT = "listener_fragment";
+ private static final String USE_NIGHT_MODE = "use_night_mode";
private static int tuningPosition = 0;
+ private static boolean isNightModeEnabled;
public static Tuning getCurrentTuning() {
return getTuningFromPosition(tuningPosition);
}
+ public static boolean isNightModeEnabled() {
+ return isNightModeEnabled;
+ }
+
@Override
protected void onCreate(Bundle savedInstanceState) {
int permissionCheck = ContextCompat.checkSelfPermission(this,
@@ -51,6 +60,8 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment.
startRecording();
}
+ enableTheme();
+
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@@ -88,7 +99,8 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment.
int checkedItem = useScientificNotation ? 0 : 1;
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this,
+ R.style.AppTheme));
builder.setTitle(R.string.choose_notation);
builder.setSingleChoiceItems(R.array.notations, checkedItem,
new DialogInterface.OnClickListener() {
@@ -105,6 +117,17 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment.
break;
}
+ case R.id.toggle_night_mode: {
+ final SharedPreferences preferences = getSharedPreferences(PREFS_FILE,
+ MODE_PRIVATE);
+ boolean currentlyUsingNightMode = preferences.getBoolean(USE_NIGHT_MODE, false);
+
+ SharedPreferences.Editor editor = preferences.edit();
+ editor.putBoolean(USE_NIGHT_MODE, !currentlyUsingNightMode);
+ editor.apply();
+
+ recreate();
+ }
}
return false;
@@ -183,12 +206,34 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment.
MODE_PRIVATE);
tuningPosition = preferences.getInt(CURRENT_TUNING, 0);
+ int textColorDark = getResources().getColor(R.color.colorTextDark);
+
MaterialSpinner spinner = findViewById(R.id.tuning);
- ArrayAdapter<CharSequence> adapter = createFromResource(this,
- R.array.tunings, android.R.layout.simple_spinner_item);
- adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ MaterialSpinnerAdapter<String> adapter = new MaterialSpinnerAdapter<>(this,
+ Arrays.asList(getResources().getStringArray(R.array.tunings)));
+
+ if (isNightModeEnabled) {
+ spinner.setTextColor(textColorDark);
+ spinner.setBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
+ spinner.setTextColor(textColorDark);
+ spinner.setArrowColor(textColorDark);
+ }
+
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(this);
spinner.setSelectedIndex(tuningPosition);
}
+
+ private void enableTheme() {
+ final SharedPreferences preferences = getSharedPreferences(PREFS_FILE,
+ MODE_PRIVATE);
+ isNightModeEnabled = preferences.getBoolean(USE_NIGHT_MODE, false);
+
+ int mode = AppCompatDelegate.MODE_NIGHT_NO;
+ if (isNightModeEnabled) {
+ mode = AppCompatDelegate.MODE_NIGHT_YES;
+ }
+
+ AppCompatDelegate.setDefaultNightMode(mode);
+ }
}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
@@ -13,8 +13,8 @@
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
- android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
- app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
+ android:theme="@style/AppTheme"
+ app:popupTheme="@style/AppTheme" />
<com.jaredrummler.materialspinner.MaterialSpinner
android:id="@+id/tuning"
@@ -24,6 +24,7 @@
<com.github.cythara.TunerView
android:id="@+id/pitch"
android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
+ android:layout_height="wrap_content"
+ android:theme="@style/AppTheme"/>
</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/menu/toolbar_menu.xml b/app/src/main/res/menu/toolbar_menu.xml
@@ -11,4 +11,9 @@
android:id="@+id/show_privacy_policy"
android:title="@string/privacy_policy"
app:showAsAction="never" />
+
+ <item
+ android:id="@+id/toggle_night_mode"
+ android:title="@string/toggle_night_mode"
+ app:showAsAction="never" />
</menu>
\ No newline at end of file
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
@@ -20,4 +20,5 @@
<item name="scientific">Notação de pitch científico</item>
<item name="sol">Solfège</item>
</string-array>
+ <string name="toggle_night_mode">Alternar modo noturno</string>
</resources>
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
- <color name="colorPrimary">#3F51B5</color>
- <color name="colorPrimaryDark">#303F9F</color>
- <color name="colorAccent">#FF4081</color>
+ <color name="colorPrimaryDark">#FF212121</color>
+ <color name="colorTextDark">#DDFFFFFF</color>
</resources>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
@@ -2,6 +2,7 @@
<string name="app_name">Cythara</string>
<string name="privacy_policy">Show privacy policy</string>
<string name="set_notation">Set notation</string>
+ <string name="toggle_night_mode">Toggle night mode</string>
<string name="choose_notation">Choose notation</string>
<string name="permission_required">Permission required</string>
<string-array name="tunings">
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
@@ -1,11 +1,6 @@
<resources>
<!-- Base application theme. -->
- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
- <!-- Customize your theme here. -->
- <item name="colorPrimary">@color/colorPrimary</item>
- <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
- <item name="colorAccent">@color/colorAccent</item>
- </style>
+ <style name="AppTheme" parent="Theme.AppCompat.DayNight"/>
</resources>