forked from upstream-mirrors/OpenTracks
Removed TrackDataType and simplified TrackDataManager.
This commit is contained in:
@@ -28,7 +28,6 @@ import android.util.Log;
|
|||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.EnumSet;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
import de.dennisguse.opentracks.R;
|
||||||
@@ -118,7 +117,7 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
tracksTableObserver = new ContentObserver(handler) {
|
tracksTableObserver = new ContentObserver(handler) {
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange) {
|
public void onChange(boolean selfChange) {
|
||||||
notifyTracksTableUpdate(trackDataManager.getListeners(TrackDataType.TRACKS_TABLE));
|
notifyTracksTableUpdate(trackDataManager.getListenerTracks());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
contentResolver.registerContentObserver(TracksColumns.CONTENT_URI, false, tracksTableObserver);
|
contentResolver.registerContentObserver(TracksColumns.CONTENT_URI, false, tracksTableObserver);
|
||||||
@@ -126,7 +125,7 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
waypointsTableObserver = new ContentObserver(handler) {
|
waypointsTableObserver = new ContentObserver(handler) {
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange) {
|
public void onChange(boolean selfChange) {
|
||||||
notifyWaypointsTableUpdate(trackDataManager.getListeners(TrackDataType.WAYPOINTS_TABLE));
|
notifyWaypointsTableUpdate(trackDataManager.getListenerWaypoints());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
contentResolver.registerContentObserver(WaypointsColumns.CONTENT_URI, false, waypointsTableObserver);
|
contentResolver.registerContentObserver(WaypointsColumns.CONTENT_URI, false, waypointsTableObserver);
|
||||||
@@ -134,7 +133,7 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
trackPointsTableObserver = new ContentObserver(handler) {
|
trackPointsTableObserver = new ContentObserver(handler) {
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange) {
|
public void onChange(boolean selfChange) {
|
||||||
notifyTrackPointsTableUpdate(true, trackDataManager.getListeners(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE), trackDataManager.getListeners(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE));
|
notifyTrackPointsTableUpdate(true, trackDataManager.getListenerTrackPoints_SampledIn(), trackDataManager.getListenerTrackPoints_SampledOut());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
contentResolver.registerContentObserver(TrackPointsColumns.CONTENT_URI_BY_ID, false, trackPointsTableObserver);
|
contentResolver.registerContentObserver(TrackPointsColumns.CONTENT_URI_BY_ID, false, trackPointsTableObserver);
|
||||||
@@ -194,17 +193,11 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
*
|
*
|
||||||
* @param trackDataListener the track data listener
|
* @param trackDataListener the track data listener
|
||||||
*/
|
*/
|
||||||
public void registerTrackDataListener(final TrackDataListener trackDataListener, boolean tracksTable, boolean waypointTable, boolean trackPointsTable_SampleIn, boolean trackPointsTable_SampleOut) {
|
public void registerTrackDataListener(final TrackDataListener trackDataListener, final boolean tracksTable, final boolean waypointsTable, final boolean trackPointsTable_SampleIn, final boolean trackPointsTable_SampleOut) {
|
||||||
final EnumSet<TrackDataType> types = EnumSet.noneOf(TrackDataType.class);
|
|
||||||
if (tracksTable) types.add(TrackDataType.TRACKS_TABLE);
|
|
||||||
if (waypointTable) types.add(TrackDataType.WAYPOINTS_TABLE);
|
|
||||||
if (trackPointsTable_SampleIn) types.add(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE);
|
|
||||||
if (trackPointsTable_SampleOut) types.add(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE);
|
|
||||||
|
|
||||||
runInHandlerThread(new Runnable() {
|
runInHandlerThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
trackDataManager.registerListener(trackDataListener, types);
|
trackDataManager.registerTrackDataListener(trackDataListener, tracksTable, waypointsTable, trackPointsTable_SampleIn, trackPointsTable_SampleOut);
|
||||||
if (started) {
|
if (started) {
|
||||||
loadDataForListener(trackDataListener);
|
loadDataForListener(trackDataListener);
|
||||||
}
|
}
|
||||||
@@ -221,7 +214,7 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
runInHandlerThread(new Runnable() {
|
runInHandlerThread(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
trackDataManager.unregisterListener(trackDataListener);
|
trackDataManager.unregisterTrackDataListener(trackDataListener);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -272,19 +265,17 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
*/
|
*/
|
||||||
private void loadDataForAll() {
|
private void loadDataForAll() {
|
||||||
resetSamplingState();
|
resetSamplingState();
|
||||||
if (trackDataManager.getNumberOfListeners() == 0) {
|
if (!trackDataManager.hasListeners()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
notifyTracksTableUpdate(trackDataManager.getListeners(TrackDataType.TRACKS_TABLE));
|
notifyTracksTableUpdate(trackDataManager.getListenerTracks());
|
||||||
|
|
||||||
for (TrackDataListener listener : trackDataManager.getListeners(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE)) {
|
for (TrackDataListener listener : trackDataManager.getListenerTrackPoints_SampledIn()) {
|
||||||
listener.clearTrackPoints();
|
listener.clearTrackPoints();
|
||||||
}
|
}
|
||||||
notifyTrackPointsTableUpdate(true,
|
notifyTrackPointsTableUpdate(true, trackDataManager.getListenerTrackPoints_SampledIn(), trackDataManager.getListenerTrackPoints_SampledOut());
|
||||||
trackDataManager.getListeners(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE),
|
notifyWaypointsTableUpdate(trackDataManager.getListenerWaypoints());
|
||||||
trackDataManager.getListeners(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE));
|
|
||||||
notifyWaypointsTableUpdate(trackDataManager.getListeners(TrackDataType.WAYPOINTS_TABLE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -294,14 +285,13 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
*/
|
*/
|
||||||
private void loadDataForListener(TrackDataListener trackDataListener) {
|
private void loadDataForListener(TrackDataListener trackDataListener) {
|
||||||
Set<TrackDataListener> trackDataListeners = Collections.singleton(trackDataListener);
|
Set<TrackDataListener> trackDataListeners = Collections.singleton(trackDataListener);
|
||||||
EnumSet<TrackDataType> trackDataTypes = trackDataManager.getTrackDataTypes(trackDataListener);
|
|
||||||
|
|
||||||
if (trackDataTypes.contains(TrackDataType.TRACKS_TABLE)) {
|
if (trackDataManager.listensForTracks(trackDataListener)) {
|
||||||
notifyTracksTableUpdate(trackDataListeners);
|
notifyTracksTableUpdate(trackDataListeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hasSampledIn = trackDataTypes.contains(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE);
|
boolean hasSampledIn = trackDataManager.listensForTrackPoints_SampledIn(trackDataListener);
|
||||||
boolean hasSampledOut = trackDataTypes.contains(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE);
|
boolean hasSampledOut = trackDataManager.listensForTrackPoints_SampledOut(trackDataListener);
|
||||||
if (hasSampledIn || hasSampledOut) {
|
if (hasSampledIn || hasSampledOut) {
|
||||||
trackDataListener.clearTrackPoints();
|
trackDataListener.clearTrackPoints();
|
||||||
boolean isOnlyListener = trackDataManager.getNumberOfListeners() == 1;
|
boolean isOnlyListener = trackDataManager.getNumberOfListeners() == 1;
|
||||||
@@ -312,7 +302,7 @@ public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeL
|
|||||||
notifyTrackPointsTableUpdate(isOnlyListener, trackDataListeners, sampledOutListeners);
|
notifyTrackPointsTableUpdate(isOnlyListener, trackDataListeners, sampledOutListeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trackDataTypes.contains(TrackDataType.WAYPOINTS_TABLE)) {
|
if (trackDataManager.listensForWaypoints(trackDataListener)) {
|
||||||
notifyWaypointsTableUpdate(trackDataListeners);
|
notifyWaypointsTableUpdate(trackDataListeners);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,7 @@
|
|||||||
|
|
||||||
package de.dennisguse.opentracks.content;
|
package de.dennisguse.opentracks.content;
|
||||||
|
|
||||||
import android.util.Log;
|
import java.util.HashSet;
|
||||||
|
|
||||||
import java.util.EnumMap;
|
|
||||||
import java.util.EnumSet;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,84 +28,68 @@ class TrackDataManager {
|
|||||||
|
|
||||||
private static final String TAG = TrackDataManager.class.getSimpleName();
|
private static final String TAG = TrackDataManager.class.getSimpleName();
|
||||||
|
|
||||||
private final Map<TrackDataListener, EnumSet<TrackDataType>> listenerToTypesMap = new HashMap<>();
|
private final Set<TrackDataListener> dataListenerTracks = new HashSet<>();
|
||||||
|
private final Set<TrackDataListener> dataListenerWaypoints = new HashSet<>();
|
||||||
|
private final Set<TrackDataListener> dataListenerTrackPoints_SampledIn = new HashSet<>();
|
||||||
|
private final Set<TrackDataListener> dataListenerTrackPoints_SampledOut = new HashSet<>();
|
||||||
|
|
||||||
private final Map<TrackDataType, Set<TrackDataListener>> typeToListenersMap = new EnumMap<>(TrackDataType.class);
|
void registerTrackDataListener(final TrackDataListener trackDataListener, boolean tracksTable, boolean waypointsTable, boolean trackPointsTable_SampleIn, boolean trackPointsTable_SampleOut) {
|
||||||
|
if (tracksTable) dataListenerTracks.add(trackDataListener);
|
||||||
TrackDataManager() {
|
if (waypointsTable) dataListenerWaypoints.add(trackDataListener);
|
||||||
for (TrackDataType trackDataType : TrackDataType.values()) {
|
if (trackPointsTable_SampleIn) dataListenerTrackPoints_SampledIn.add(trackDataListener);
|
||||||
typeToListenersMap.put(trackDataType, new LinkedHashSet<TrackDataListener>());
|
if (trackPointsTable_SampleOut) dataListenerTrackPoints_SampledOut.add(trackDataListener);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void unregisterTrackDataListener(TrackDataListener trackDataListener) {
|
||||||
* Registers a listener.
|
dataListenerTracks.add(trackDataListener);
|
||||||
*
|
dataListenerWaypoints.add(trackDataListener);
|
||||||
* @param listener the listener
|
dataListenerTrackPoints_SampledIn.add(trackDataListener);
|
||||||
* @param trackDataTypes the track data types the listener is interested
|
dataListenerTrackPoints_SampledOut.add(trackDataListener);
|
||||||
*/
|
|
||||||
void registerListener(TrackDataListener listener, EnumSet<TrackDataType> trackDataTypes) {
|
|
||||||
if (listenerToTypesMap.containsKey(listener)) {
|
|
||||||
Log.w(TAG, "Tried to register a listener that is already registered. Ignore.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
listenerToTypesMap.put(listener, trackDataTypes);
|
|
||||||
for (TrackDataType trackDataType : trackDataTypes) {
|
|
||||||
typeToListenersMap.get(trackDataType).add(listener);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
boolean hasListeners() {
|
||||||
* Unregisters a listener.
|
return dataListenerTracks.size() + dataListenerWaypoints.size() + dataListenerTrackPoints_SampledIn.size() + dataListenerTrackPoints_SampledOut.size() > 0;
|
||||||
*
|
|
||||||
* @param listener the listener
|
|
||||||
*/
|
|
||||||
void unregisterListener(TrackDataListener listener) {
|
|
||||||
EnumSet<TrackDataType> removedTypes = listenerToTypesMap.remove(listener);
|
|
||||||
if (removedTypes == null) {
|
|
||||||
Log.w(TAG, "Tried to unregister a listener that is not registered. Ignore.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the listener from the typeToListenersMap
|
|
||||||
for (TrackDataType trackDataType : removedTypes) {
|
|
||||||
typeToListenersMap.get(trackDataType).remove(listener);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the number of {@link TrackDataListener}.
|
|
||||||
*/
|
|
||||||
int getNumberOfListeners() {
|
int getNumberOfListeners() {
|
||||||
return listenerToTypesMap.size();
|
Set<TrackDataListener> listener = new HashSet<>();
|
||||||
|
listener.addAll(dataListenerTracks);
|
||||||
|
listener.addAll(dataListenerWaypoints);
|
||||||
|
listener.addAll(dataListenerTrackPoints_SampledIn);
|
||||||
|
listener.addAll(dataListenerTrackPoints_SampledOut);
|
||||||
|
|
||||||
|
return listener.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
boolean listensForTracks(TrackDataListener listener) {
|
||||||
* Gets the track data types for a listener.
|
return dataListenerTracks.contains(listener);
|
||||||
*
|
|
||||||
* @param listener the listener
|
|
||||||
*/
|
|
||||||
EnumSet<TrackDataType> getTrackDataTypes(TrackDataListener listener) {
|
|
||||||
return listenerToTypesMap.get(listener);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
boolean listensForWaypoints(TrackDataListener listener) {
|
||||||
* Gets the listeners for a {@link TrackDataType}.
|
return dataListenerWaypoints.contains(listener);
|
||||||
*
|
|
||||||
* @param type the type
|
|
||||||
*/
|
|
||||||
Set<TrackDataListener> getListeners(TrackDataType type) {
|
|
||||||
return typeToListenersMap.get(type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
boolean listensForTrackPoints_SampledIn(TrackDataListener listener) {
|
||||||
* Gets all the registered {@link TrackDataType}.
|
return dataListenerTrackPoints_SampledIn.contains(listener);
|
||||||
*/
|
}
|
||||||
EnumSet<TrackDataType> getRegisteredTrackDataTypes() {
|
|
||||||
EnumSet<TrackDataType> types = EnumSet.noneOf(TrackDataType.class);
|
boolean listensForTrackPoints_SampledOut(TrackDataListener listener) {
|
||||||
for (EnumSet<TrackDataType> value : listenerToTypesMap.values()) {
|
return dataListenerTrackPoints_SampledOut.contains(listener);
|
||||||
types.addAll(value);
|
}
|
||||||
}
|
|
||||||
return types;
|
Set<TrackDataListener> getListenerTracks() {
|
||||||
|
return dataListenerTracks;
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<TrackDataListener> getListenerWaypoints() {
|
||||||
|
return dataListenerWaypoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<TrackDataListener> getListenerTrackPoints_SampledIn() {
|
||||||
|
return dataListenerTrackPoints_SampledIn;
|
||||||
|
}
|
||||||
|
|
||||||
|
Set<TrackDataListener> getListenerTrackPoints_SampledOut() {
|
||||||
|
return dataListenerTrackPoints_SampledOut;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,29 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2011 Google Inc.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
||||||
* use this file except in compliance with the License. You may obtain a copy of
|
|
||||||
* the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
* License for the specific language governing permissions and limitations under
|
|
||||||
* the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package de.dennisguse.opentracks.content;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Types of track data.
|
|
||||||
*
|
|
||||||
* @author Jimmy Shih
|
|
||||||
*/
|
|
||||||
enum TrackDataType {
|
|
||||||
TRACKS_TABLE, // tracks table changes
|
|
||||||
WAYPOINTS_TABLE, // waypoints table changes
|
|
||||||
SAMPLED_IN_TRACK_POINTS_TABLE, // sampled-in track points table changes
|
|
||||||
SAMPLED_OUT_TRACK_POINTS_TABLE, // sampled-out track points table changes
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user