diff --git a/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java b/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java index 0f2d9dbee..a5d0da58b 100644 --- a/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java +++ b/src/main/java/com/todoroo/astrid/activity/BeastModePreferences.java @@ -7,20 +7,25 @@ package com.todoroo.astrid.activity; import android.content.Context; import android.content.res.Resources; +import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.support.v4.graphics.drawable.DrawableCompat; +import android.support.v7.app.ActionBar; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; -import android.widget.Button; import android.widget.TextView; import com.commonsware.cwac.tlv.TouchListView; import com.commonsware.cwac.tlv.TouchListView.DropListener; import org.tasks.R; -import org.tasks.injection.InjectingListActivity; +import org.tasks.injection.InjectingAppCompatActivity; import org.tasks.preferences.ActivityPreferences; import org.tasks.preferences.Preferences; @@ -30,7 +35,13 @@ import java.util.HashMap; import javax.inject.Inject; -public class BeastModePreferences extends InjectingListActivity { +import butterknife.Bind; +import butterknife.ButterKnife; + +public class BeastModePreferences extends InjectingAppCompatActivity { + + @Bind(R.id.toolbar) Toolbar toolbar; + @Bind(android.R.id.list) TouchListView touchList; private ArrayAdapter adapter; @@ -47,14 +58,29 @@ public class BeastModePreferences extends InjectingListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - preferences.applyLightStatusBarColor(); + preferences.applyThemeAndStatusBarColor(); setContentView(R.layout.beast_mode_pref_activity); - setTitle(R.string.EPr_beastMode_desc); + ButterKnife.bind(this); + + setSupportActionBar(toolbar); + ActionBar supportActionBar = getSupportActionBar(); + if (supportActionBar != null) { + supportActionBar.setDisplayHomeAsUpEnabled(true); + supportActionBar.setDisplayShowTitleEnabled(false); + Drawable drawable = DrawableCompat.wrap(getResources().getDrawable(R.drawable.ic_arrow_back_24dp)); + DrawableCompat.setTint(drawable, getResources().getColor(android.R.color.white)); + supportActionBar.setHomeAsUpIndicator(drawable); + } + toolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); prefsToDescriptions = new HashMap<>(); buildDescriptionMap(getResources()); - TouchListView touchList = (TouchListView) getListView(); items = constructOrderedControlList(preferences, this); adapter = new ArrayAdapter(this, R.layout.preference_draggable_row, R.id.text, items) { @@ -73,7 +99,6 @@ public class BeastModePreferences extends InjectingListActivity { return false; } }); - touchList.setDropListener(new DropListener() { @Override public void drop(int from, int to) { @@ -82,14 +107,23 @@ public class BeastModePreferences extends InjectingListActivity { adapter.notifyDataSetChanged(); } }); + } - Button resetButton = (Button) findViewById(R.id.reset); - resetButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.beast_mode, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch(item.getItemId()) { + case R.id.menu_reset_to_defaults: resetToDefault(); - } - }); + return true; + default: + return super.onOptionsItemSelected(item); + } } private void buildDescriptionMap(Resources r) { @@ -111,12 +145,17 @@ public class BeastModePreferences extends InjectingListActivity { @Override public void finish() { - StringBuilder newSetting = new StringBuilder(30); + StringBuilder newSetting = new StringBuilder(); for (int i = 0; i < adapter.getCount(); i++) { newSetting.append(adapter.getItem(i)); newSetting.append(BEAST_MODE_PREF_ITEM_SEPARATOR); } - preferences.setString(BEAST_MODE_ORDER_PREF, newSetting.toString()); + String oldValue = preferences.getStringValue(BEAST_MODE_ORDER_PREF); + String newValue = newSetting.toString(); + if (!oldValue.equals(newValue)) { + preferences.setString(BEAST_MODE_ORDER_PREF, newSetting.toString()); + setResult(RESULT_OK); + } super.finish(); } @@ -126,7 +165,7 @@ public class BeastModePreferences extends InjectingListActivity { } ArrayList list = constructOrderedControlList(preferences, context); - StringBuilder newSetting = new StringBuilder(30); + StringBuilder newSetting = new StringBuilder(); for (String item : list) { newSetting.append(item); newSetting.append(BEAST_MODE_PREF_ITEM_SEPARATOR); @@ -163,5 +202,4 @@ public class BeastModePreferences extends InjectingListActivity { } return list; } - } diff --git a/src/main/java/org/tasks/preferences/AppearancePreferences.java b/src/main/java/org/tasks/preferences/AppearancePreferences.java index e88d1f8a1..94106b79c 100644 --- a/src/main/java/org/tasks/preferences/AppearancePreferences.java +++ b/src/main/java/org/tasks/preferences/AppearancePreferences.java @@ -4,33 +4,77 @@ import android.content.Intent; import android.os.Bundle; import android.preference.Preference; +import com.todoroo.astrid.activity.BeastModePreferences; + import org.tasks.R; import org.tasks.injection.InjectingPreferenceActivity; public class AppearancePreferences extends InjectingPreferenceActivity { - public static String FORCE_REFRESH = "force_refresh"; - public static String FILTERS_CHANGED = "filters_changed"; + private static final int REQUEST_CUSTOMIZE = 1004; + + private static final String EXTRA_BUNDLE = "extra_bundle"; + public static String EXTRA_RESTART = "extra_restart"; + public static String EXTRA_FILTERS_CHANGED = "extra_filters_changed"; + + private Bundle result; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + result = savedInstanceState == null + ? new Bundle() + : savedInstanceState.getBundle(EXTRA_BUNDLE); + addPreferencesFromResource(R.xml.preferences_appearance); - setExtraOnChange(R.string.p_use_dark_theme, FORCE_REFRESH); - setExtraOnChange(R.string.p_fontSize, FORCE_REFRESH); - setExtraOnChange(R.string.p_fullTaskTitle, FORCE_REFRESH); - setExtraOnChange(R.string.p_show_today_filter, FILTERS_CHANGED); - setExtraOnChange(R.string.p_show_recently_modified_filter, FILTERS_CHANGED); - setExtraOnChange(R.string.p_show_not_in_list_filter, FILTERS_CHANGED); + setExtraOnChange(R.string.p_use_dark_theme, EXTRA_RESTART); + setExtraOnChange(R.string.p_fontSize, EXTRA_RESTART); + setExtraOnChange(R.string.p_fullTaskTitle, EXTRA_RESTART); + setExtraOnChange(R.string.p_show_today_filter, EXTRA_FILTERS_CHANGED); + setExtraOnChange(R.string.p_show_recently_modified_filter, EXTRA_FILTERS_CHANGED); + setExtraOnChange(R.string.p_show_not_in_list_filter, EXTRA_FILTERS_CHANGED); + findPreference(getString(R.string.customize_edit_screen)).setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + startActivityForResult(new Intent(AppearancePreferences.this, BeastModePreferences.class), REQUEST_CUSTOMIZE); + return true; + } + }); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + outState.putBundle(EXTRA_BUNDLE, result); + } + + @Override + public void finish() { + setResult(RESULT_OK, new Intent() {{ + putExtras(result); + }}); + super.finish(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_CUSTOMIZE) { + if (resultCode == RESULT_OK) { + result.putBoolean(EXTRA_RESTART, true); + } + } else { + super.onActivityResult(requestCode, resultCode, data); + } } private void setExtraOnChange(int resId, final String extra) { findPreference(getString(resId)).setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { - setResult(RESULT_OK, new Intent().putExtra(extra, true)); + result.putBoolean(extra, true); return true; } }); diff --git a/src/main/java/org/tasks/ui/NavigationDrawerFragment.java b/src/main/java/org/tasks/ui/NavigationDrawerFragment.java index 038353812..ea936755c 100644 --- a/src/main/java/org/tasks/ui/NavigationDrawerFragment.java +++ b/src/main/java/org/tasks/ui/NavigationDrawerFragment.java @@ -82,10 +82,10 @@ public class NavigationDrawerFragment extends InjectingFragment { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == FilterAdapter.REQUEST_SETTINGS && resultCode == Activity.RESULT_OK && data != null) { - if (data.getBooleanExtra(AppearancePreferences.FILTERS_CHANGED, false)) { + if (data.getBooleanExtra(AppearancePreferences.EXTRA_FILTERS_CHANGED, false)) { refresh(); } - if (data.getBooleanExtra(AppearancePreferences.FORCE_REFRESH, false)) { + if (data.getBooleanExtra(AppearancePreferences.EXTRA_RESTART, false)) { getActivity().finish(); getActivity().startActivity(getActivity().getIntent()); refresh(); diff --git a/src/main/res/layout/beast_mode_pref_activity.xml b/src/main/res/layout/beast_mode_pref_activity.xml index d0c9f672d..a4754aaef 100644 --- a/src/main/res/layout/beast_mode_pref_activity.xml +++ b/src/main/res/layout/beast_mode_pref_activity.xml @@ -9,14 +9,11 @@ android:layout_height="match_parent" android:orientation="vertical" android:background="?asContentBackground"> - - - + + + + + - -