persist regatta configuration in preference file on login

This commit is contained in:
Peter Siegmund committed 2016-05-10 12:20:05 +02:00
1 parent 10934ab707
commit 5a25054b44
5 files changed
+94 -141

No files matched your search

@@ -1,15 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<preference-headers xmlns:android="http://schemas.android.com/apk/res/android">
<header
android:fragment="com.sap.sailing.racecommittee.app.ui.fragments.preference.GeneralPreferenceFragment"
android:title="@string/settings_category_general" />
<header
android:fragment="com.sap.sailing.racecommittee.app.ui.fragments.preference.RegattaPreferenceFragment"
android:title="@string/settings_category_regatta_defaults"/>
<header
android:fragment="com.sap.sailing.racecommittee.app.ui.fragments.preference.RegattaSpecificPreferenceFragment"
android:title="@string/settings_category_regattas"/>
<header
android:fragment="com.sap.sailing.racecommittee.app.ui.fragments.preference.CourseDesignerPreferenceFragment"
android:title="@string/settings_category_course_designer" />
</preference-headers>
@@ -11,69 +11,36 @@ import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.AppUtils;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.racecommittee.app.AppPreferences;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.domain.configuration.impl.PreferencesRegattaConfigurationLoader;
import com.sap.sailing.racecommittee.app.ui.fragments.MainPreferenceFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.preference.RegattaPreferenceFragment;
import com.sap.sailing.racecommittee.app.utils.PreferenceHelper;
public class PreferenceActivity extends AppCompatActivity {
public static final String SPECIFIC_REGATTA_PREFERENCES_NAME = "TEMP_PREFERENCES";
public static final String SPECIFIC_REGATTA_PREFERENCES_NAME = "REGATTA_PREFERENCES_";
public static final String EXTRA_SPECIFIC_REGATTA_NAME = "EXTRA_SPECIFIC_REGATTA_NAME";
public static final String EXTRA_SPECIFIC_REGATTA_PREFERENCES_NAME = "EXTRA_SPECIFIC_REGATTA_PREFERENCE_KEY";
public static final String EXTRA_SHOW_FRAGMENT = "SHOW_FRAGMENT";
public static final String EXTRA_SHOW_FRAGMENT_ARGUMENTS = "SHOW_FRAGMENT_ARGUMENTS";
private static final String TAG = PreferenceActivity.class.getName();
private boolean mIsRedirected = false;
public static void openSpecificRegattaConfiguration(Context context, RaceGroup raceGroup) {
// reset temp preferences
PreferenceHelper helper = new PreferenceHelper(context, SPECIFIC_REGATTA_PREFERENCES_NAME);
helper.clearPreferences();
helper.resetPreferences(true);
// store local configuration in temp preferences
RegattaConfiguration configuration = raceGroup.getRegattaConfiguration();
AppPreferences preferences = AppPreferences.on(context, SPECIFIC_REGATTA_PREFERENCES_NAME);
PreferencesRegattaConfigurationLoader preferencesLoader = new PreferencesRegattaConfigurationLoader(configuration, preferences);
preferencesLoader.store();
String regattaPreference = PreferenceHelper.getRegattaPrefFileName(raceGroup.getName());
Intent intent = new Intent(context, PreferenceActivity.class);
Bundle info = new Bundle();
intent.putExtra(EXTRA_SHOW_FRAGMENT, RegattaPreferenceFragment.class.getName());
info.putString(EXTRA_SPECIFIC_REGATTA_PREFERENCES_NAME, SPECIFIC_REGATTA_PREFERENCES_NAME);
info.putString(EXTRA_SPECIFIC_REGATTA_PREFERENCES_NAME, regattaPreference);
info.putString(EXTRA_SPECIFIC_REGATTA_NAME, raceGroup.getName());
intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, info);
context.startActivity(intent);
}
public static void commitSpecificRegattaConfiguration(Context context, String preferencesName,
String raceGroupName) {
ReadonlyDataManager dataManager = DataManager.create(context);
RaceGroup group = dataManager.getDataStore().getRaceGroup(raceGroupName);
if (group != null) {
RegattaConfiguration localConfiguration = group.getRegattaConfiguration();
AppPreferences preferences = AppPreferences.on(context, preferencesName);
PreferencesRegattaConfigurationLoader loader = new PreferencesRegattaConfigurationLoader(localConfiguration, preferences);
loader.load();
} else {
String toastText = context.getString(R.string.no_fitting_race_group_found);
Toast.makeText(context, toastText, Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -111,7 +78,6 @@ public class PreferenceActivity extends AppCompatActivity {
if (bundle.containsKey(EXTRA_SHOW_FRAGMENT_ARGUMENTS)) {
Bundle info = bundle.getBundle(PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
if (info != null) {
mIsRedirected = true;
String raceGroupName = info.getString(EXTRA_SPECIFIC_REGATTA_NAME);
String title = getString(R.string.preference_regatta_specific_title, raceGroupName);
getSupportActionBar().setTitle(title);
@@ -169,8 +135,4 @@ public class PreferenceActivity extends AppCompatActivity {
super.onBackPressed();
}
}
public boolean isRedirected() {
return mIsRedirected;
}
}
@@ -3,50 +3,10 @@ package com.sap.sailing.racecommittee.app.ui.activities;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.AppUtils;
import com.sap.sailing.android.shared.util.BitmapHelper;
import com.sap.sailing.android.shared.util.BroadcastManager;
import com.sap.sailing.android.shared.util.CollectionUtils;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinderResult;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleet;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.DataStore;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
import com.sap.sailing.racecommittee.app.data.loaders.DataLoaderResult;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.logging.LogEvent;
import com.sap.sailing.racecommittee.app.services.RaceStateService;
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.RaceListDataType;
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.RaceListDataTypeHeader;
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.RaceListDataTypeRace;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceInfoFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceListFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceListFragment.RaceListCallbacks;
import com.sap.sailing.racecommittee.app.ui.fragments.WelcomeFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.BaseFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFinishingFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFlagViewerFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceSummaryFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.TrackingListFragment;
import com.sap.sailing.racecommittee.app.ui.views.PanelButton;
import com.sap.sailing.racecommittee.app.utils.RaceHelper;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import java.util.Set;
import android.annotation.TargetApi;
import android.app.Fragment;
@@ -81,6 +41,53 @@ import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.android.shared.util.AppUtils;
import com.sap.sailing.android.shared.util.BitmapHelper;
import com.sap.sailing.android.shared.util.BroadcastManager;
import com.sap.sailing.android.shared.util.CollectionUtils;
import com.sap.sailing.android.shared.util.ViewHelper;
import com.sap.sailing.domain.abstractlog.race.SimpleRaceLogIdentifier;
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinderResult;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
import com.sap.sailing.domain.base.racegroup.RaceGroup;
import com.sap.sailing.domain.base.racegroup.RaceGroupSeriesFleet;
import com.sap.sailing.domain.common.Wind;
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
import com.sap.sailing.racecommittee.app.AppConstants;
import com.sap.sailing.racecommittee.app.AppPreferences;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.data.DataManager;
import com.sap.sailing.racecommittee.app.data.DataStore;
import com.sap.sailing.racecommittee.app.data.ReadonlyDataManager;
import com.sap.sailing.racecommittee.app.data.clients.LoadClient;
import com.sap.sailing.racecommittee.app.data.loaders.DataLoaderResult;
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.configuration.impl.PreferencesRegattaConfigurationLoader;
import com.sap.sailing.racecommittee.app.logging.LogEvent;
import com.sap.sailing.racecommittee.app.services.RaceStateService;
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.RaceListDataType;
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.RaceListDataTypeHeader;
import com.sap.sailing.racecommittee.app.ui.adapters.racelist.RaceListDataTypeRace;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceInfoFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceListFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.RaceListFragment.RaceListCallbacks;
import com.sap.sailing.racecommittee.app.ui.fragments.WelcomeFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.BaseFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFinishingFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceFlagViewerFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceSummaryFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.TrackingListFragment;
import com.sap.sailing.racecommittee.app.ui.views.PanelButton;
import com.sap.sailing.racecommittee.app.utils.PreferenceHelper;
import com.sap.sailing.racecommittee.app.utils.RaceHelper;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
public class RacingActivity extends SessionActivity implements RaceListCallbacks {
private static final String TAG = RacingActivity.class.getName();
private static final String WIND = "wind";
@@ -543,9 +550,8 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks
TintImageView overflow = (TintImageView) outViews.get(0);
overflow.setMinimumWidth(getResources().getDimensionPixelSize(R.dimen.bigger_over_flow_width));
overflow.setMinimumHeight(getResources().getDimensionPixelSize(R.dimen.bigger_over_flow_height));
Bitmap bitmap = BitmapHelper
.decodeSampledBitmapFromResource(getResources(), R.drawable.ic_more_vert_white_48dp,
ViewCompat.getMinimumWidth(overflow), ViewCompat.getMinimumHeight(overflow));
Bitmap bitmap = BitmapHelper.decodeSampledBitmapFromResource(getResources(), R.drawable.ic_more_vert_white_48dp,
ViewCompat.getMinimumWidth(overflow), ViewCompat.getMinimumHeight(overflow));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
overflow.setScaleType(ImageView.ScaleType.FIT_END);
}
@@ -636,14 +642,14 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks
transaction.remove(extra);
}
}
}
}
if (AppConstants.INTENT_ACTION_SHOW_WELCOME.equals(action)) {
loadWelcomeFragment();
}
if (AppConstants.INTENT_ACTION_SHOW_WELCOME.equals(action)) {
loadWelcomeFragment();
}
if (AppConstants.INTENT_ACTION_RELOAD_RACES.equals(action)) {
loadRaces(dataManager.getDataStore().getCourseArea(getCourseAreaIdFromIntent()));
if (AppConstants.INTENT_ACTION_RELOAD_RACES.equals(action)) {
loadRaces(dataManager.getDataStore().getCourseArea(getCourseAreaIdFromIntent()));
}
transaction.commit();
@@ -653,6 +659,29 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks
}).start();
}
private void setupRegattaSpecificConfiguration() {
Set<RaceGroup> raceGroups = new HashSet<>();
for (ManagedRace race : lastSeenRaces) {
if (!raceGroups.contains(race.getRaceGroup())) {
raceGroups.add(race.getRaceGroup());
}
}
for (RaceGroup raceGroup : raceGroups) {
String regattaPreference = PreferenceHelper.getRegattaPrefFileName(raceGroup.getName());
// reset temp preferences
PreferenceHelper helper = new PreferenceHelper(this, regattaPreference);
helper.clearPreferences();
helper.resetPreferences(true);
RegattaConfiguration configuration = raceGroup.getRegattaConfiguration();
AppPreferences preferences = AppPreferences.on(this, regattaPreference);
PreferencesRegattaConfigurationLoader preferencesLoader = new PreferencesRegattaConfigurationLoader(configuration, preferences);
preferencesLoader.store();
}
}
private class RaceLoadClient implements LoadClient<Collection<ManagedRace>> {
private CourseArea courseArea;
@@ -691,6 +720,7 @@ public class RacingActivity extends SessionActivity implements RaceListCallbacks
lastSeenRaces = data;
registerOnService(data);
mRaceList.setupOn(data);
setupRegattaSpecificConfiguration();
Toast.makeText(RacingActivity.this, String.format(getString(R.string.racing_load_success), data.size()), Toast.LENGTH_SHORT).show();
}
setProgressSpinnerVisibility(false);
@@ -5,12 +5,10 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
import android.app.Activity;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.MultiSelectListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.text.TextUtils;
import com.sap.sailing.android.shared.ui.fragments.preference.BasePreferenceFragment;
import com.sap.sailing.domain.base.configuration.RegattaConfiguration;
@@ -22,7 +20,7 @@ import com.sap.sailing.racecommittee.app.ui.activities.PreferenceActivity;
/**
* <p>
* This preference fragment can be redirected to display the {@link RegattaConfiguration} of a specifc regatta.
* This preference fragment can be redirected to display the {@link RegattaConfiguration} of a specific regatta.
* </p>
* <p/>
* <p/>
@@ -30,26 +28,15 @@ import com.sap.sailing.racecommittee.app.ui.activities.PreferenceActivity;
*/
public class RegattaPreferenceFragment extends BasePreferenceFragment {
private boolean isRedirected = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Activity activity = getActivity();
if (activity instanceof PreferenceActivity) {
PreferenceActivity settingsActivity = (PreferenceActivity) activity;
isRedirected = settingsActivity.isRedirected();
}
if (isRedirected) {
if (getArguments() != null && !TextUtils.isEmpty(getArguments().getString(PreferenceActivity.EXTRA_SPECIFIC_REGATTA_PREFERENCES_NAME))) {
getPreferenceManager().setSharedPreferencesName(getArguments().getString(PreferenceActivity.EXTRA_SPECIFIC_REGATTA_PREFERENCES_NAME));
addPreferencesFromResource(R.xml.preference_regatta_specific);
}
addPreferencesFromResource(R.xml.preference_regatta_defaults);
if (isRedirected) {
setupSaveButton();
}
bindPreferenceSummaryToValue(findPreference(R.string.preference_racing_procedure_rrs26_classflag_key));
bindPreferenceSummaryToSet(findPreference(R.string.preference_racing_procedure_rrs26_startmode_flags_key));
bindPreferenceSummaryToValue(findPreference(R.string.preference_racing_procedure_gatestart_classflag_key));
@@ -65,24 +52,6 @@ public class RegattaPreferenceFragment extends BasePreferenceFragment {
setupLeague();
}
private void setupSaveButton() {
final String preferencesName = getArguments().getString(PreferenceActivity.EXTRA_SPECIFIC_REGATTA_PREFERENCES_NAME);
final String raceGroupName = getArguments().getString(PreferenceActivity.EXTRA_SPECIFIC_REGATTA_NAME);
Preference preference = findPreference(R.string.preference_regatta_specific_save_key);
preference.setTitle(getString(R.string.preference_regatta_specific_save_title, raceGroupName));
preference.setSummary(getString(R.string.preference_regatta_specific_save_description, raceGroupName));
preference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
PreferenceActivity.commitSpecificRegattaConfiguration(getActivity(), preferencesName, raceGroupName);
getActivity().finish();
return false;
}
});
}
private void setupRRS26() {
setupRRS26StartmodeFlagsList();
setupClassFlagList(this.<ListPreference>findPreference(R.string.preference_racing_procedure_rrs26_classflag_key));
@@ -2,10 +2,12 @@ package com.sap.sailing.racecommittee.app.utils;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;
import android.preference.PreferenceManager;
import com.sap.sailing.android.shared.logging.ExLog;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.ui.activities.PreferenceActivity;
/**
* Helps you with maintaining preferences over different app builds
@@ -94,4 +96,9 @@ public class PreferenceHelper {
private SharedPreferences getSharedPreferences(String preferenceName) {
return context.getSharedPreferences(preferenceName, Context.MODE_PRIVATE);
}
public static String getRegattaPrefFileName(String regattaName) {
String fileName = PreferenceActivity.SPECIFIC_REGATTA_PREFERENCES_NAME + regattaName;
return Uri.encode(fileName);
}
}