From dfc785f2fdc96e7e4aa48066ac8f016b5598d113 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 1 Apr 2020 20:53:16 +0200 Subject: [PATCH] Simplified internal data processing (class structure). --- .../opentracks/content/DataSource.java | 44 ------- .../content/DataSourceListener.java | 41 ------- .../opentracks/content/DataSourceManager.java | 111 ++++++++---------- .../opentracks/content/TrackDataHub.java | 17 +-- 4 files changed, 51 insertions(+), 162 deletions(-) delete mode 100644 src/main/java/de/dennisguse/opentracks/content/DataSource.java delete mode 100644 src/main/java/de/dennisguse/opentracks/content/DataSourceListener.java diff --git a/src/main/java/de/dennisguse/opentracks/content/DataSource.java b/src/main/java/de/dennisguse/opentracks/content/DataSource.java deleted file mode 100644 index 65ce6ec3c..000000000 --- a/src/main/java/de/dennisguse/opentracks/content/DataSource.java +++ /dev/null @@ -1,44 +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.net.Uri; - -/** - * Data source on the phone. - * - * @author Rodrigo Damazio - */ -class DataSource { - - private final ContentResolver contentResolver; - - DataSource(Context context) { - contentResolver = context.getContentResolver(); - } - - void registerContentObserver(Uri uri, ContentObserver observer) { - contentResolver.registerContentObserver(uri, false, observer); - } - - void unregisterContentObserver(ContentObserver observer) { - contentResolver.unregisterContentObserver(observer); - } -} \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/content/DataSourceListener.java b/src/main/java/de/dennisguse/opentracks/content/DataSourceListener.java deleted file mode 100644 index f5ef9a0f6..000000000 --- a/src/main/java/de/dennisguse/opentracks/content/DataSourceListener.java +++ /dev/null @@ -1,41 +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; - - -/** - * Listener to be invoked when {@link DataSource} changes. - * - * @author Jimmy Shih - */ -public 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(); -} \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/content/DataSourceManager.java b/src/main/java/de/dennisguse/opentracks/content/DataSourceManager.java index c15985cff..c3767c1d8 100644 --- a/src/main/java/de/dennisguse/opentracks/content/DataSourceManager.java +++ b/src/main/java/de/dennisguse/opentracks/content/DataSourceManager.java @@ -16,6 +16,8 @@ package de.dennisguse.opentracks.content; +import android.content.ContentResolver; +import android.content.Context; import android.database.ContentObserver; import android.os.Handler; import android.util.Log; @@ -28,7 +30,7 @@ import de.dennisguse.opentracks.content.data.TracksColumns; import de.dennisguse.opentracks.content.data.WaypointsColumns; /** - * Creates observers/listeners and manages their registration with {@link DataSource}. + * Creates observers/listeners and manages their registration. * The observers/listeners calls {@link DataSourceListener} when data changes. * * @author Rodrigo Damazio @@ -37,25 +39,36 @@ class DataSourceManager { private static final String TAG = DataSourceManager.class.getSimpleName(); - private final DataSource dataSource; - - private final DataSourceListener dataSourceListener; + private final ContentResolver contentResolver; // Registered listeners private final Set registeredListeners = EnumSet.noneOf(TrackDataType.class); - private final Handler handler; - private final TracksTableObserver tracksTableObserver; - private final WaypointsTableObserver waypointsTableObserver; - private final TrackPointsTableObserver trackPointsTableObserver; + private final ContentObserver tracksTableObserver; + private final ContentObserver waypointsTableObserver; + private final ContentObserver trackPointsTableObserver; - DataSourceManager(DataSource dataSource, DataSourceListener dataSourceListener) { - this.dataSource = dataSource; - this.dataSourceListener = dataSourceListener; + DataSourceManager(Context context, final DataSourceListener dataSourceListener) { + contentResolver = context.getContentResolver(); - handler = new Handler(); - tracksTableObserver = new TracksTableObserver(); - waypointsTableObserver = new WaypointsTableObserver(); - trackPointsTableObserver = new TrackPointsTableObserver(); + 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(); + } + }; } /** @@ -105,13 +118,13 @@ class DataSourceManager { private void registerListener(TrackDataType trackDataType) { switch (trackDataType) { case TRACKS_TABLE: - dataSource.registerContentObserver(TracksColumns.CONTENT_URI, tracksTableObserver); + contentResolver.registerContentObserver(TracksColumns.CONTENT_URI, false, tracksTableObserver); break; case WAYPOINTS_TABLE: - dataSource.registerContentObserver(WaypointsColumns.CONTENT_URI, waypointsTableObserver); + contentResolver.registerContentObserver(WaypointsColumns.CONTENT_URI, false, waypointsTableObserver); break; case SAMPLED_IN_TRACK_POINTS_TABLE: - dataSource.registerContentObserver(TrackPointsColumns.CONTENT_URI_BY_ID, trackPointsTableObserver); + contentResolver.registerContentObserver(TrackPointsColumns.CONTENT_URI_BY_ID, false, trackPointsTableObserver); break; case SAMPLED_OUT_TRACK_POINTS_TABLE: // Do nothing. SAMPLED_OUT_POINT_UPDATES is mapped to POINT_UPDATES. @@ -129,13 +142,13 @@ class DataSourceManager { private void unregisterListener(TrackDataType trackDataType) { switch (trackDataType) { case TRACKS_TABLE: - dataSource.unregisterContentObserver(tracksTableObserver); + contentResolver.unregisterContentObserver(tracksTableObserver); break; case WAYPOINTS_TABLE: - dataSource.unregisterContentObserver(waypointsTableObserver); + contentResolver.unregisterContentObserver(waypointsTableObserver); break; case SAMPLED_IN_TRACK_POINTS_TABLE: - dataSource.unregisterContentObserver(trackPointsTableObserver); + contentResolver.unregisterContentObserver(trackPointsTableObserver); break; case SAMPLED_OUT_TRACK_POINTS_TABLE: // Do nothing. SAMPLED_OUT_POINT_UPDATES is mapped to POINT_UPDATES. @@ -155,53 +168,25 @@ class DataSourceManager { } /** - * Observer when the tracks table is updated. + * Listener to be invoked when observed data changes changes. * * @author Jimmy Shih */ - private class TracksTableObserver extends ContentObserver { + public interface DataSourceListener { - TracksTableObserver() { - super(handler); - } + /** + * Notifies when the tracks table is updated. + */ + void notifyTracksTableUpdated(); - @Override - public void onChange(boolean selfChange) { - dataSourceListener.notifyTracksTableUpdated(); - } - } + /** + * Notifies when the waypoints table is updated. + */ + void notifyWaypointsTableUpdated(); - /** - * Observer when the waypoints table is updated. - * - * @author Jimmy Shih - */ - private class WaypointsTableObserver extends ContentObserver { - - WaypointsTableObserver() { - super(handler); - } - - @Override - public void onChange(boolean selfChange) { - dataSourceListener.notifyWaypointsTableUpdated(); - } - } - - /** - * Observer when the track points table is updated. - * - * @author Jimmy Shih - */ - private class TrackPointsTableObserver extends ContentObserver { - - TrackPointsTableObserver() { - super(handler); - } - - @Override - public void onChange(boolean selfChange) { - dataSourceListener.notifyTrackPointsTableUpdated(); - } + /** + * 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 994b02f57..7ef1e4525 100644 --- a/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java +++ b/src/main/java/de/dennisguse/opentracks/content/TrackDataHub.java @@ -39,11 +39,11 @@ import de.dennisguse.opentracks.util.LocationUtils; import de.dennisguse.opentracks.util.PreferencesUtils; /** - * Track data hub. Receives data from {@link DataSource} and distributes it to {@link TrackDataListener} after some processing. + * Track data hub. Receives data from {@link de.dennisguse.opentracks.content.DataSourceManager.DataSource} and distributes it to {@link TrackDataListener} after some processing. * * @author Rodrigo Damazio */ -public class TrackDataHub implements DataSourceListener, SharedPreferences.OnSharedPreferenceChangeListener { +public class TrackDataHub implements DataSourceManager.DataSourceListener, SharedPreferences.OnSharedPreferenceChangeListener { /** * Target number of track points displayed by the map overlay. @@ -69,7 +69,6 @@ public class TrackDataHub implements DataSourceListener, SharedPreferences.OnSha private boolean started; private HandlerThread handlerThread; private Handler handler; - private DataSource dataSource; private DataSourceManager dataSourceManager; // Preference values @@ -104,8 +103,7 @@ public class TrackDataHub implements DataSourceListener, SharedPreferences.OnSha handlerThread = new HandlerThread("TrackDataHubHandlerThread"); handlerThread.start(); handler = new Handler(handlerThread.getLooper()); - dataSource = newDataSource(); - dataSourceManager = new DataSourceManager(dataSource, this); + dataSourceManager = new DataSourceManager(context, this); PreferencesUtils.register(context, this); onSharedPreferenceChanged(null, null); @@ -136,7 +134,6 @@ public class TrackDataHub implements DataSourceListener, SharedPreferences.OnSha handlerThread = null; } handler = null; - dataSource = null; dataSourceManager = null; } @@ -452,14 +449,6 @@ public class TrackDataHub implements DataSourceListener, SharedPreferences.OnSha lastSeenLocationId = -1L; } - /** - * Creates a {@link DataSource}. - */ - @VisibleForTesting - private DataSource newDataSource() { - return new DataSource(context); - } - /** * Run in the handler thread. *