mirror of
https://github.com/vanitasvitae/EnigmAndroid.git
synced 2025-09-09 18:29:44 +02:00
Added Settings Activity and new Color Scheme
This commit is contained in:
parent
965aee43dd
commit
656a25d944
21 changed files with 366 additions and 24 deletions
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="de.vanitasvitae.enigmandroid">
|
||||
package="de.vanitasvitae.enigmandroid" >
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
|
@ -16,6 +16,10 @@
|
|||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".SettingsActivity"
|
||||
android:label="@string/title_activity_settings" >
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
|
|
@ -3,6 +3,7 @@ package de.vanitasvitae.enigmandroid;
|
|||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.Menu;
|
||||
|
@ -71,6 +72,11 @@ public class MainActivity extends Activity
|
|||
showRingsettingsDialog();
|
||||
return true;
|
||||
}
|
||||
else if (id == R.id.action_settings)
|
||||
{
|
||||
Intent i = new Intent(this, SettingsActivity.class);
|
||||
startActivityForResult(i, 0);
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,181 @@
|
|||
package de.vanitasvitae.enigmandroid;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.media.Ringtone;
|
||||
import android.media.RingtoneManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceCategory;
|
||||
import android.preference.PreferenceFragment;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.preference.RingtonePreference;
|
||||
import android.text.TextUtils;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A {@link PreferenceActivity} that presents a set of application settings. On
|
||||
* handset devices, settings are presented as a single list. On tablets,
|
||||
* settings are split by category, with category headers shown to the left of
|
||||
* the list of settings.
|
||||
* <p/>
|
||||
* See <a href="http://developer.android.com/design/patterns/settings.html">
|
||||
* Android Design: Settings</a> for design guidelines and the <a
|
||||
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings
|
||||
* API Guide</a> for more information on developing a Settings UI.
|
||||
*/
|
||||
public class SettingsActivity extends PreferenceActivity
|
||||
{
|
||||
/**
|
||||
* Determines whether to always show the simplified settings UI, where
|
||||
* settings are presented in a single list. When false, settings are shown
|
||||
* as a master/detail two-pane view on tablets. When true, a single pane is
|
||||
* shown on tablets.
|
||||
*/
|
||||
private static final boolean ALWAYS_SIMPLE_PREFS = false;
|
||||
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onPostCreate(savedInstanceState);
|
||||
|
||||
setupSimplePreferencesScreen();
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows the simplified settings UI if the device configuration if the
|
||||
* device configuration dictates that a simplified, single-pane UI should be
|
||||
* shown.
|
||||
*/
|
||||
private void setupSimplePreferencesScreen()
|
||||
{
|
||||
if (!isSimplePreferences(this))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// In the simplified UI, fragments are not used at all and we instead
|
||||
// use the older PreferenceActivity APIs.
|
||||
|
||||
// Add 'simulation' preferences.
|
||||
addPreferencesFromResource(R.xml.pref_simulation);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public boolean onIsMultiPane()
|
||||
{
|
||||
return isXLargeTablet(this) && !isSimplePreferences(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to determine if the device has an extra-large screen. For
|
||||
* example, 10" tablets are extra-large.
|
||||
*/
|
||||
private static boolean isXLargeTablet(Context context)
|
||||
{
|
||||
return (context.getResources().getConfiguration().screenLayout
|
||||
& Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the simplified settings UI should be shown. This is
|
||||
* true if this is forced via {@link #ALWAYS_SIMPLE_PREFS}, or the device
|
||||
* doesn't have newer APIs like {@link PreferenceFragment}, or the device
|
||||
* doesn't have an extra-large screen. In these cases, a single-pane
|
||||
* "simplified" settings UI should be shown.
|
||||
*/
|
||||
private static boolean isSimplePreferences(Context context)
|
||||
{
|
||||
return ALWAYS_SIMPLE_PREFS
|
||||
|| Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB
|
||||
|| !isXLargeTablet(context);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
public void onBuildHeaders(List<Header> target)
|
||||
{
|
||||
if (!isSimplePreferences(this))
|
||||
{
|
||||
loadHeadersFromResource(R.xml.pref_headers, target);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* A preference value change listener that updates the preference's summary
|
||||
* to reflect its new value.
|
||||
*/
|
||||
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener()
|
||||
{
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object value)
|
||||
{
|
||||
String stringValue = value.toString();
|
||||
// For all other preferences, set the summary to the value's
|
||||
// simple string representation.
|
||||
preference.setSummary(stringValue);
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Binds a preference's summary to its value. More specifically, when the
|
||||
* preference's value is changed, its summary (line of text below the
|
||||
* preference title) is updated to reflect the value. The summary is also
|
||||
* immediately updated upon calling this method. The exact display format is
|
||||
* dependent on the type of preference.
|
||||
*
|
||||
* @see #sBindPreferenceSummaryToValueListener
|
||||
*/
|
||||
private static void bindPreferenceSummaryToValue(Preference preference)
|
||||
{
|
||||
// Set the listener to watch for value changes.
|
||||
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
|
||||
|
||||
// Trigger the listener immediately with the preference's
|
||||
// current value.
|
||||
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
|
||||
PreferenceManager
|
||||
.getDefaultSharedPreferences(preference.getContext())
|
||||
.getString(preference.getKey(), ""));
|
||||
}
|
||||
|
||||
/**
|
||||
* This fragment shows simulation preferences only. It is used when the
|
||||
* activity is showing a two-pane settings UI.
|
||||
*/
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
public static class SimulationPreferenceFragment extends PreferenceFragment
|
||||
{
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.xml.pref_simulation);
|
||||
|
||||
// Bind the summaries of EditText/List/Dialog/Ringtone preferences
|
||||
// to their values. When their values change, their summaries are
|
||||
// updated to reflect the new value, per the Android Design
|
||||
// guidelines.
|
||||
bindPreferenceSummaryToValue(findPreference("example_text"));
|
||||
bindPreferenceSummaryToValue(findPreference("example_list"));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
39
app/src/main/res/drawable/button.xml
Normal file
39
app/src/main/res/drawable/button.xml
Normal file
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content">
|
||||
<item android:state_pressed="true" >
|
||||
<shape>
|
||||
<solid
|
||||
android:color="#ffff843b" />
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="#222222" />
|
||||
<corners
|
||||
android:radius="4dp" />
|
||||
<padding
|
||||
android:left="10dp"
|
||||
android:top="10dp"
|
||||
android:right="10dp"
|
||||
android:bottom="10dp" />
|
||||
</shape>
|
||||
</item>
|
||||
<item>
|
||||
<shape>
|
||||
<gradient
|
||||
android:startColor="#FF5C28"
|
||||
android:endColor="#FF7549"
|
||||
android:angle="270" />
|
||||
<stroke
|
||||
android:width="1dp"
|
||||
android:color="#ffd43900" />
|
||||
<corners
|
||||
android:radius="4dp" />
|
||||
<padding
|
||||
android:left="10dp"
|
||||
android:top="10dp"
|
||||
android:right="10dp"
|
||||
android:bottom="10dp" />
|
||||
</shape>
|
||||
</item>
|
||||
</selector>
|
|
@ -181,7 +181,9 @@
|
|||
android:layout_below="@+id/text_layer"
|
||||
android:id="@+id/button_crypt"
|
||||
android:onClick="doCrypto"
|
||||
android:text="@string/button_crypt"/>
|
||||
android:text="@string/button_crypt"
|
||||
android:background="@drawable/button"
|
||||
/>
|
||||
</LinearLayout>
|
||||
|
||||
</RelativeLayout>
|
||||
|
|
|
@ -7,11 +7,15 @@
|
|||
android:orderInCategory="100"
|
||||
android:showAsAction="never" />
|
||||
<item android:id="@+id/action_reset"
|
||||
android:orderInCategory="98"
|
||||
android:orderInCategory="97"
|
||||
android:showAsAction="ifRoom"
|
||||
android:title="@string/action_reset" />
|
||||
<item android:id="@+id/action_choose_ringstellung"
|
||||
android:title="@string/action_choose_ringsettings"
|
||||
android:orderInCategory="99"
|
||||
android:orderInCategory="98"
|
||||
android:showAsAction="never" />
|
||||
<item android:id="@+id/action_settings"
|
||||
android:title="@string/action_settings"
|
||||
android:orderInCategory="99"
|
||||
android:showAsAction="never" />
|
||||
</menu>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<string name="app_name">EnigmAndroid</string>
|
||||
<string name="action_version">Version</string>
|
||||
<string name="action_reset">Zurücksetzen</string>
|
||||
<string name="action_settings">Version</string>
|
||||
<string name="action_settings">Einstellungen</string>
|
||||
<string name="action_choose_ringsettings">Ringstellung</string>
|
||||
<string name="message_choose_ringsettings">Wähle die Ringstellungen für die Walzen:</string>
|
||||
<string name="hint_enigma_type_here">Hier Tippen</string>
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
<string name="action_version">Version</string>
|
||||
<string name="action_reset">Reset</string>
|
||||
<string name="action_choose_ringsettings">Ringsettings</string>
|
||||
<string name="action_settings">Settings</string>
|
||||
<string name="message_choose_ringsettings">Choose ringsettings for the rotors:</string>
|
||||
<string name="hint_enigma_type_here">Type here</string>
|
||||
<string name="hint_enigma_code">EnigmaCode</string>
|
||||
|
|
14
app/src/main/res/values/strings_activity_settings.xml
Normal file
14
app/src/main/res/values/strings_activity_settings.xml
Normal file
|
@ -0,0 +1,14 @@
|
|||
<resources>
|
||||
<string name="title_activity_settings">Settings</string>
|
||||
|
||||
<!-- Strings related to Settings -->
|
||||
|
||||
<!-- Settings for simulation -->
|
||||
<string name="pref_header_simulation">Simulation</string>
|
||||
|
||||
<string name="pref_title_simulate_anomaly">Simulate Anomaly</string>
|
||||
<string name="pref_description_simulate_anomaly">The double step anomaly causes the middle rotor
|
||||
to rotate twice, if one step from turnover point.
|
||||
</string>
|
||||
|
||||
</resources>
|
|
@ -1,7 +1,7 @@
|
|||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
|
||||
<style name="AppTheme" parent="android:Theme.Holo">
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
|
|
9
app/src/main/res/xml/pref_headers.xml
Normal file
9
app/src/main/res/xml/pref_headers.xml
Normal file
|
@ -0,0 +1,9 @@
|
|||
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- These settings headers are only used on tablets. -->
|
||||
|
||||
<header
|
||||
android:fragment="de.vanitasvitae.enigmandroid.SettingsActivity$SimulationPreferenceFragment"
|
||||
android:title="@string/pref_header_simulation"/>
|
||||
|
||||
</preference-headers>
|
8
app/src/main/res/xml/pref_simulation.xml
Normal file
8
app/src/main/res/xml/pref_simulation.xml
Normal file
|
@ -0,0 +1,8 @@
|
|||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="example_checkbox"
|
||||
android:title="@string/pref_title_simulate_anomaly"
|
||||
android:summary="@string/pref_description_simulate_anomaly"
|
||||
android:defaultValue="true" />
|
||||
</PreferenceScreen>
|
Loading…
Add table
Add a link
Reference in a new issue