From 6cd27ab096d9dbb36adc672428c399a355058ec7 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Thu, 2 Apr 2020 19:07:38 +0200 Subject: [PATCH] Merged DataSourceManager into TrackDataHub. --- .../opentracks/content/DataSourceManager.java | 109 ------------------ .../opentracks/content/TrackDataHub.java | 87 +++++++------- 2 files changed, 47 insertions(+), 149 deletions(-) delete mode 100644 src/main/java/de/dennisguse/opentracks/content/DataSourceManager.java diff --git a/src/main/java/de/dennisguse/opentracks/content/DataSourceManager.java b/src/main/java/de/dennisguse/opentracks/content/DataSourceManager.java deleted file mode 100644 index 863650cc3..000000000 --- a/src/main/java/de/dennisguse/opentracks/content/DataSourceManager.java +++ /dev/null @@ -1,109 +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; - -import android.content.ContentResolver; -import android.content.Context; -import android.database.ContentObserver; -import android.os.Handler; - -import de.dennisguse.opentracks.content.data.TrackPointsColumns; -import de.dennisguse.opentracks.content.data.TracksColumns; -import de.dennisguse.opentracks.content.data.WaypointsColumns; - -/** - * Creates observers/listeners and manages their registration. - * The observers/listeners calls {@link DataSourceListener} when data changes. - * - * @author Rodrigo Damazio - */ -class DataSourceManager { - - private static final String TAG = DataSourceManager.class.getSimpleName(); - - private final ContentResolver contentResolver; - - // Registered listeners - private final ContentObserver tracksTableObserver; - private final ContentObserver waypointsTableObserver; - private final ContentObserver trackPointsTableObserver; - - DataSourceManager(Context context, final DataSourceListener dataSourceListener) { - contentResolver = context.getContentResolver(); - - Handler handler = new Handler(); - tracksTableObserver = new ContentObserver(handler) { - @Override - public void onChange(boolean selfChange) { - dataSourceListener.notifyTracksTableUpdated(); - } - }; - waypointsTableObserver = new ContentObserver(handler) { - @Override - public void onChange(boolean selfChange) { - dataSourceListener.notifyWaypointsTableUpdated(); - } - }; - trackPointsTableObserver = new ContentObserver(handler) { - @Override - public void onChange(boolean selfChange) { - dataSourceListener.notifyTrackPointsTableUpdated(); - } - }; - } - - /** - * Registers for content changes. - */ - public void start() { - contentResolver.registerContentObserver(TracksColumns.CONTENT_URI, false, tracksTableObserver); - contentResolver.registerContentObserver(WaypointsColumns.CONTENT_URI, false, waypointsTableObserver); - contentResolver.registerContentObserver(TrackPointsColumns.CONTENT_URI_BY_ID, false, trackPointsTableObserver); - } - - /** - * Unregisters from content changes. - */ - public void stop() { - contentResolver.unregisterContentObserver(tracksTableObserver); - contentResolver.unregisterContentObserver(waypointsTableObserver); - contentResolver.unregisterContentObserver(trackPointsTableObserver); - } - - /** - * Listener to be invoked when observed data changes changes. - * - * @author Jimmy Shih - */ - interface DataSourceListener { - - /** - * Notifies when the tracks table is updated. - */ - void notifyTracksTableUpdated(); - - /** - * Notifies when the waypoints table is updated. - */ - void notifyWaypointsTableUpdated(); - - /** - * Notifies when the track points table is updated. - */ - void notifyTrackPointsTableUpdated(); - } -} diff --git a/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java b/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java index 8290a25b2..c9213e9c9 100644 --- a/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java +++ b/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java @@ -16,8 +16,10 @@ package de.dennisguse.opentracks.content; +import android.content.ContentResolver; import android.content.Context; import android.content.SharedPreferences; +import android.database.ContentObserver; import android.database.Cursor; import android.os.Handler; import android.os.HandlerThread; @@ -32,18 +34,21 @@ import java.util.Set; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.content.data.Track; import de.dennisguse.opentracks.content.data.TrackPoint; +import de.dennisguse.opentracks.content.data.TrackPointsColumns; +import de.dennisguse.opentracks.content.data.TracksColumns; import de.dennisguse.opentracks.content.data.Waypoint; +import de.dennisguse.opentracks.content.data.WaypointsColumns; import de.dennisguse.opentracks.content.provider.ContentProviderUtils; import de.dennisguse.opentracks.content.provider.TrackPointIterator; import de.dennisguse.opentracks.util.LocationUtils; import de.dennisguse.opentracks.util.PreferencesUtils; /** - * Track data hub. Receives data from {@link de.dennisguse.opentracks.content.DataSourceManager} and distributes it to {@link TrackDataListener} after some processing. + * Track data hub. Receives data from {@link de.dennisguse.opentracks.content.provider.CustomContentProvider} and distributes it to {@link TrackDataListener} after some processing. * * @author Rodrigo Damazio */ -public class TrackDataHub implements DataSourceManager.DataSourceListener, SharedPreferences.OnSharedPreferenceChangeListener { +public class TrackDataHub implements SharedPreferences.OnSharedPreferenceChangeListener { /** * Target number of track points displayed by the map overlay. @@ -69,7 +74,6 @@ public class TrackDataHub implements DataSourceManager.DataSourceListener, Share private boolean started; private HandlerThread handlerThread; private Handler handler; - private DataSourceManager dataSourceManager; // Preference values private long selectedTrackId; @@ -81,6 +85,11 @@ public class TrackDataHub implements DataSourceManager.DataSourceListener, Share private long firstSeenTrackPointId; private long lastSeenTrackPointId; + // Registered listeners + private ContentObserver tracksTableObserver; + private ContentObserver waypointsTableObserver; + private ContentObserver trackPointsTableObserver; + public TrackDataHub(Context context) { this(context, new TrackDataManager(), new ContentProviderUtils(context), TARGET_DISPLAYED_TRACK_POINTS); } @@ -103,15 +112,40 @@ public class TrackDataHub implements DataSourceManager.DataSourceListener, Share handlerThread = new HandlerThread(TAG); handlerThread.start(); handler = new Handler(handlerThread.getLooper()); - dataSourceManager = new DataSourceManager(context, this); + + //register listeners + ContentResolver contentResolver = context.getContentResolver(); + tracksTableObserver = new ContentObserver(handler) { + @Override + public void onChange(boolean selfChange) { + notifyTracksTableUpdate(trackDataManager.getListeners(TrackDataType.TRACKS_TABLE)); + } + }; + contentResolver.registerContentObserver(TracksColumns.CONTENT_URI, false, tracksTableObserver); + + waypointsTableObserver = new ContentObserver(handler) { + @Override + public void onChange(boolean selfChange) { + notifyWaypointsTableUpdate(trackDataManager.getListeners(TrackDataType.WAYPOINTS_TABLE)); + } + }; + contentResolver.registerContentObserver(WaypointsColumns.CONTENT_URI, false, waypointsTableObserver); + + trackPointsTableObserver = new ContentObserver(handler) { + @Override + public void onChange(boolean selfChange) { + notifyTrackPointsTableUpdate(true, trackDataManager.getListeners(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE), trackDataManager.getListeners(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE)); + } + }; + contentResolver.registerContentObserver(TrackPointsColumns.CONTENT_URI_BY_ID, false, trackPointsTableObserver); + PreferencesUtils.register(context, this); onSharedPreferenceChanged(null, null); runInHandlerThread(new Runnable() { @Override public void run() { - if (dataSourceManager != null) { - dataSourceManager.start(); + if (started) { loadDataForAll(); } } @@ -128,13 +162,17 @@ public class TrackDataHub implements DataSourceManager.DataSourceListener, Share started = false; - dataSourceManager.stop(); + //Unregister listeners + ContentResolver contentResolver = context.getContentResolver(); + contentResolver.unregisterContentObserver(tracksTableObserver); + contentResolver.unregisterContentObserver(waypointsTableObserver); + contentResolver.unregisterContentObserver(trackPointsTableObserver); + if (handlerThread != null) { handlerThread.getLooper().quit(); handlerThread = null; } handler = null; - dataSourceManager = null; } public void loadTrack(final long trackId) { @@ -162,7 +200,7 @@ public class TrackDataHub implements DataSourceManager.DataSourceListener, Share @Override public void run() { trackDataManager.registerListener(trackDataListener, trackDataTypes); - if (dataSourceManager != null) { + if (started) { loadDataForListener(trackDataListener); } } @@ -209,37 +247,6 @@ public class TrackDataHub implements DataSourceManager.DataSourceListener, Share return selectedTrackId == recordingTrackId && recordingTrackPaused; } - @Override - public void notifyTracksTableUpdated() { - runInHandlerThread(new Runnable() { - @Override - public void run() { - notifyTracksTableUpdate(trackDataManager.getListeners(TrackDataType.TRACKS_TABLE)); - } - }); - } - - @Override - public void notifyWaypointsTableUpdated() { - runInHandlerThread(new Runnable() { - @Override - public void run() { - notifyWaypointsTableUpdate(trackDataManager.getListeners(TrackDataType.WAYPOINTS_TABLE)); - } - }); - } - - @Override - public void notifyTrackPointsTableUpdated() { - runInHandlerThread(new Runnable() { - @Override - public void run() { - notifyTrackPointsTableUpdate(true, trackDataManager.getListeners(TrackDataType.SAMPLED_IN_TRACK_POINTS_TABLE), - trackDataManager.getListeners(TrackDataType.SAMPLED_OUT_TRACK_POINTS_TABLE)); - } - }); - } - @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, final String key) { runInHandlerThread(new Runnable() {