diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb6828..5d19981 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -37,7 +37,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index babf626..5fd1f7b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ android { defaultConfig { applicationId "nonphatic.quoz" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 24 versionCode 1 versionName "1.0" diff --git a/app/src/main/java/nonphatic/quoz/MainActivity.java b/app/src/main/java/nonphatic/quoz/MainActivity.java index 3a7a775..b0ffd6d 100644 --- a/app/src/main/java/nonphatic/quoz/MainActivity.java +++ b/app/src/main/java/nonphatic/quoz/MainActivity.java @@ -9,6 +9,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Color; import android.media.MediaPlayer; +import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; import android.support.design.widget.FloatingActionButton; @@ -58,6 +59,10 @@ public class MainActivity extends AppCompatActivity { private TimerTask timerTask; private MediaPlayer mediaPlayer; private Random random; + + private int saturationPercent; + private String changeMode; + private final Runnable mHidePart2Runnable = new Runnable() { @SuppressLint("InlinedApi") @Override @@ -98,6 +103,7 @@ public class MainActivity extends AppCompatActivity { setContentView(R.layout.activity_main); + getPreferences(); mContentView = findViewById(R.id.fullscreen_content); mFab = (FloatingActionButton)findViewById(R.id.fab); mainView = findViewById(R.id.main_layout); @@ -179,9 +185,8 @@ public class MainActivity extends AppCompatActivity { mHideHandler.postDelayed(mHideRunnable, delayMillis); } - /** - * Directs swipe events to toggle and click events to colour change - */ + + //region OVERRIDES private float yPosOnDown; private float yDelta; private boolean isSwiping; @@ -209,20 +214,14 @@ public class MainActivity extends AppCompatActivity { return super.dispatchTouchEvent(event); } - /** - * Sets a random background colour when activity resumes - * Adds setting background regularly based on preference - */ @Override public void onResume() { super.onResume(); + getPreferences(); setBackgroundToRandomColour(); setTimer(); } - /** - * Release the media player when not in use - */ @Override public void onPause() { super.onPause(); @@ -232,45 +231,39 @@ public class MainActivity extends AppCompatActivity { mediaPlayer = null; } } + //endregion - /** - * Sets background colour to a randomly-generated pastel colour - */ - private void setBackgroundToRandomColour() { - int randomColour = generateRandomColour(); - mainView.setBackgroundColor(randomColour); - ((TextView)mContentView).setText(String.format("#%s", Integer.toHexString(randomColour).substring(2))); - - // Set the text colour to something more readable given the colour type + //region HELPERS + public void getPreferences() { SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - String currentColourType = preferences.getString("colour_type", "0.3"); - switch (currentColourType) { - case "0.3": - ((TextView)mContentView).setTextColor(ContextCompat.getColor(this, R.color.colorPastelBackground)); - break; - case "0.5": - ((TextView)mContentView).setTextColor(ContextCompat.getColor(this, R.color.colorPastelNeonBackground)); - break; - case "0.7": - ((TextView)mContentView).setTextColor(ContextCompat.getColor(this, R.color.colorNeonBackground)); - break; - } + saturationPercent = preferences.getInt("saturation", 30); + changeMode = preferences.getString("change_mode", "tap"); } - /** - * Generates a random pastel colour - */ - private int generateRandomColour() { - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - float saturation = Float.parseFloat(preferences.getString("colour_type", "0.3")); + public void resetPreferences(Context context) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + preferences.edit().clear().commit(); + PreferenceManager.setDefaultValues(context, R.xml.preferences, true); + } + private void setBackgroundToRandomColour() { + float[] hsv = generateRandomColour(); + float[] hsvText = new float[] { 0, 0, hsv[1] / 2 + 0.25f }; + int randomColour = Color.HSVToColor(hsv); + int textColour = Color.HSVToColor(hsvText); + + mainView.setBackgroundColor(randomColour); + ((TextView)mContentView).setText(String.format("#%s", Integer.toHexString(randomColour).substring(2))); + ((TextView)mContentView).setTextColor(textColour); + } + + private float[] generateRandomColour() { float phiRecip = Float.parseFloat(getResources().getText(R.string.phiRecip).toString()); - float[] hsv = { - (random.nextFloat() + phiRecip) % 1 * 360, // random, nicely spaced hue - saturation, + return new float[] { + (random.nextFloat() + phiRecip) % 1 * 360, // random, nicely-spaced hue + saturationPercent / 100f, // saturation 1.0f // value }; - return Color.HSVToColor(hsv); } private void setTimer() { @@ -278,8 +271,6 @@ public class MainActivity extends AppCompatActivity { timerTask.cancel(); } - SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); - String changeMode = preferences.getString("change_mode", "tap"); switch (changeMode) { case "tap": break; @@ -309,18 +300,38 @@ public class MainActivity extends AppCompatActivity { }); } }; - timer.schedule(timerTask, 0, 556); + timer.schedule(timerTask, 350, 555); mediaPlayer = MediaPlayer.create(this, R.raw.ievan_polkka); mediaPlayer.setLooping(true); mediaPlayer.start(); break; + case "nyan": + timerTask = new TimerTask() { + @Override + public void run() { + runOnUiThread(new Runnable() { + @Override + public void run() { + setBackgroundToRandomColour(); + } + }); + } + }; + timer.schedule(timerTask, 200, 424); + mediaPlayer = MediaPlayer.create(this, R.raw.nyan); + mediaPlayer.setLooping(true); + mediaPlayer.start(); + break; } } + //endregion + //region ACTIVITIES public void openSettings(View view) { Intent intent = new Intent(this, SettingsActivity.class); intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, SettingsActivity.PreferencesFragment.class.getName()); intent.putExtra(SettingsActivity.EXTRA_NO_HEADERS, true); startActivity(intent); } + //endregion } diff --git a/app/src/main/java/nonphatic/quoz/SettingsActivity.java b/app/src/main/java/nonphatic/quoz/SettingsActivity.java index bfd60fb..b393cf1 100644 --- a/app/src/main/java/nonphatic/quoz/SettingsActivity.java +++ b/app/src/main/java/nonphatic/quoz/SettingsActivity.java @@ -4,6 +4,7 @@ package nonphatic.quoz; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.content.res.Configuration; import android.media.Ringtone; import android.media.RingtoneManager; @@ -13,6 +14,7 @@ import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceActivity; +import android.support.v4.app.FragmentTransaction; import android.support.v7.app.ActionBar; import android.preference.PreferenceFragment; import android.preference.PreferenceManager; @@ -90,10 +92,18 @@ public class SettingsActivity extends AppCompatPreferenceActivity { // Trigger the listener immediately with the preference's // current value. - sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, - PreferenceManager - .getDefaultSharedPreferences(preference.getContext()) - .getString(preference.getKey(), "")); + try { + sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, + PreferenceManager + .getDefaultSharedPreferences(preference.getContext()) + .getString(preference.getKey(), "")); + } + catch (ClassCastException e) { + sBindPreferenceSummaryToValueListener.onPreferenceChange(preference, + PreferenceManager + .getDefaultSharedPreferences(preference.getContext()) + .getInt(preference.getKey(), 0)); + } } @Override @@ -146,13 +156,26 @@ public class SettingsActivity extends AppCompatPreferenceActivity { @TargetApi(Build.VERSION_CODES.HONEYCOMB) public static class PreferencesFragment extends PreferenceFragment { @Override - public void onCreate(Bundle savedInstanceState) { + public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); setHasOptionsMenu(true); - bindPreferenceSummaryToValue(findPreference("colour_type")); + Preference resetButton = findPreference("reset_button"); + resetButton.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext()); + preferences.edit().clear().commit(); + PreferenceManager.setDefaultValues(getContext(), R.xml.preferences, true); + onStop(); + onCreate(savedInstanceState); + return true; + } + }); + bindPreferenceSummaryToValue(findPreference("change_mode")); + bindPreferenceSummaryToValue(findPreference("saturation")); } @Override diff --git a/app/src/main/res/raw/nyan.mp3 b/app/src/main/res/raw/nyan.mp3 new file mode 100644 index 0000000..fe406b8 Binary files /dev/null and b/app/src/main/res/raw/nyan.mp3 differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 528ea9a..f60db50 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -4,9 +4,5 @@ #555 #777 - #666 - #777 - #888 - #66000000 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d9298f1..b9e9fc2 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,10 +23,12 @@ Tap Cycle Leekspin + Nyan tap cycle leekspin + nyan diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 9ce8221..ffa053b 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -1,19 +1,20 @@ - - + + + \ No newline at end of file