forked from upstream-mirrors/OpenTracks
Allow starting the Dashboard API automatically from the StartRecording API
Fixes #1116.
This commit is contained in:
committed by
Dennis Guse
parent
7ca6925e7d
commit
1e4e7b8c15
@@ -1,11 +1,25 @@
|
||||
package de.dennisguse.opentracks.publicapi;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import de.dennisguse.opentracks.data.models.Track;
|
||||
import de.dennisguse.opentracks.services.TrackRecordingService;
|
||||
import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||
import de.dennisguse.opentracks.util.IntentDashboardUtils;
|
||||
|
||||
public class StartRecording extends AbstractAPIActivity {
|
||||
private static final String TAG = StartRecording.class.getSimpleName();
|
||||
|
||||
protected void execute(TrackRecordingService service) {
|
||||
service.startNewTrack();
|
||||
Track.Id trackId = service.startNewTrack();
|
||||
if ((trackId != null) && (PreferencesUtils.isPublicAPIDashboardEnabled())) {
|
||||
Bundle bundle = getIntent().getExtras();
|
||||
if (bundle != null) {
|
||||
String targetPackage = bundle.getString("STATS_TARGET_PACKAGE", null);
|
||||
String targetClass = bundle.getString("STATS_TARGET_CLASS", null);
|
||||
IntentDashboardUtils.startDashboard(this, true, targetPackage, targetClass, trackId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -57,6 +57,11 @@ public class MainSettingsFragment extends PreferenceFragmentCompat {
|
||||
return true;
|
||||
});
|
||||
|
||||
findPreference(getString(R.string.settings_api_key)).setOnPreferenceClickListener(preference -> {
|
||||
((SettingsActivity) getActivity()).openScreen(getString(R.string.settings_api_key));
|
||||
return true;
|
||||
});
|
||||
|
||||
findPreference(getString(R.string.settings_open_tracks_key)).setOnPreferenceClickListener(preference -> {
|
||||
((SettingsActivity) getActivity()).openScreen(getString(R.string.settings_open_tracks_key));
|
||||
return true;
|
||||
|
||||
@@ -182,6 +182,10 @@ public class PreferencesUtils {
|
||||
return getBoolean(R.string.publicapi_enabled_key, resources.getBoolean(R.bool.publicapi_enabled_default));
|
||||
}
|
||||
|
||||
public static boolean isPublicAPIDashboardEnabled() {
|
||||
return getBoolean(R.string.publicapi_dashboard_enabled_key, resources.getBoolean(R.bool.publicapi_dashboard_enabled_default));
|
||||
}
|
||||
|
||||
public static boolean isMetricUnits() {
|
||||
final String STATS_UNIT = resources.getString(R.string.stats_units_default);
|
||||
return STATS_UNIT.equals(getString(R.string.stats_units_key, STATS_UNIT));
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
package de.dennisguse.opentracks.settings;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
|
||||
import de.dennisguse.opentracks.R;
|
||||
|
||||
public class PublicAPISettingsFragment extends PreferenceFragmentCompat {
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
addPreferencesFromResource(R.xml.settings_public_api);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
super.onStart();
|
||||
((SettingsActivity) getActivity()).getSupportActionBar().setTitle(R.string.settings_api_title);
|
||||
}
|
||||
}
|
||||
@@ -84,6 +84,8 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity
|
||||
fragment = new AnnouncementsSettingsFragment();
|
||||
} else if (key.equals(getString(R.string.settings_import_export_key))) {
|
||||
fragment = new ImportExportSettingsFragment();
|
||||
} else if (key.equals(getString(R.string.settings_api_key))) {
|
||||
fragment = new PublicAPISettingsFragment();
|
||||
} else if (key.equals(getString(R.string.settings_open_tracks_key))) {
|
||||
fragment = new OpenTracksSettingsFragment();
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.content.ClipData;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
@@ -23,6 +24,7 @@ import de.dennisguse.opentracks.settings.PreferencesUtils;
|
||||
* The receiving {@link android.app.Activity} gets temporary access to the {@link TracksColumns} and the {@link TrackPointsColumns} (incl. update).
|
||||
*/
|
||||
public class IntentDashboardUtils {
|
||||
private static final String TAG = IntentDashboardUtils.class.getSimpleName();
|
||||
|
||||
private static final String ACTION_DASHBOARD = "Intent.OpenTracks-Dashboard";
|
||||
|
||||
@@ -58,6 +60,15 @@ public class IntentDashboardUtils {
|
||||
* @param trackIds the track ids
|
||||
*/
|
||||
public static void startDashboard(Context context, boolean isRecording, Track.Id... trackIds) {
|
||||
startDashboard(context, isRecording, null, null, trackIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send intent to show tracks on a map (needs an another app) as resource URIs.
|
||||
* By providing a targetPackage and targetClass an explicit intent can be sent,
|
||||
* thus bypassing the need for the user to select an app.
|
||||
*/
|
||||
public static void startDashboard(Context context, boolean isRecording, String targetPackage, String targetClass, Track.Id... trackIds) {
|
||||
if (trackIds.length == 0) {
|
||||
return;
|
||||
}
|
||||
@@ -87,6 +98,13 @@ public class IntentDashboardUtils {
|
||||
clipData.addItem(new ClipData.Item(uris.get(MARKERS_URI_INDEX)));
|
||||
intent.setClipData(clipData);
|
||||
|
||||
if ((targetPackage != null) && (targetClass != null)) {
|
||||
Log.i(TAG, "Starting dashboard activity with explicit intent (package=" + targetPackage + ", class=" + targetClass + ")");
|
||||
intent.setClassName(targetPackage, targetClass);
|
||||
} else {
|
||||
Log.i(TAG, "Starting dashboard activity with generic intent (package=" + targetPackage + ", class=" + targetClass + ")");
|
||||
}
|
||||
|
||||
context.startActivity(intent);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="?attr/colorControlNormal"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M14,12l-2,2l-2,-2l2,-2L14,12zM12,6l2.12,2.12l2.5,-2.5L12,1L7.38,5.62l2.5,2.5L12,6zM6,12l2.12,-2.12l-2.5,-2.5L1,12l4.62,4.62l2.5,-2.5L6,12zM18,12l-2.12,2.12l2.5,2.5L23,12l-4.62,-4.62l-2.5,2.5L18,12zM12,18l-2.12,-2.12l-2.5,2.5L12,23l4.62,-4.62l-2.5,-2.5L12,18z"/>
|
||||
</vector>
|
||||
@@ -291,8 +291,11 @@
|
||||
<string name="import_prevent_reimport_key" translatable="false">preventReimportTrackKey</string>
|
||||
<bool name="import_prevent_reimport_default">true</bool>
|
||||
|
||||
<string name="settings_api_key">settingsAPI</string>
|
||||
<string name="publicapi_enabled_key" translatable="false">apiEnabledKey</string>
|
||||
<bool name="publicapi_enabled_default">false</bool>
|
||||
<string name="publicapi_dashboard_enabled_key" translatable="false">apiDashboardEnabledKey</string>
|
||||
<bool name="publicapi_dashboard_enabled_default">false</bool>
|
||||
|
||||
<integer name="buttonDelayMillis">1500</integer>
|
||||
|
||||
|
||||
@@ -447,10 +447,14 @@ limitations under the License.
|
||||
<string name="settings_stats_units_title">Preferred units</string>
|
||||
|
||||
<!-- Settings public api -->
|
||||
<string name="settings_api_title">Public API</string>
|
||||
<string name="settings_public_api_enabled_title">Public API</string>
|
||||
<string name="settings_public_api_enabled_summary_on">Other installed applications can start or stop recordings.</string>
|
||||
<string name="settings_public_api_enabled_summary_off">Only OpenTracks can start and stop recordings.</string>
|
||||
<string name="settings_public_api_disabled_toast">OpenTracks Public API is disabled: it can be enabled in the settings.</string>
|
||||
<string name="settings_public_api_dashboard_enabled_title">Automatic data transfer</string>
|
||||
<string name="settings_public_api_dashboard_enabled_summary_on">An application that started a recording can also access the recorded data.</string>
|
||||
<string name="settings_public_api_dashboard_enabled_summary_off">Recorded data will not be shared automatically with other applications.</string>
|
||||
|
||||
<!-- Settings import/export -->
|
||||
<string name="settings_import_section">Import</string>
|
||||
|
||||
@@ -50,12 +50,11 @@
|
||||
android:summary="@string/settings_reset_summary"
|
||||
android:title="@string/settings_all_reset" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:title="@string/settings_public_api_enabled_title"
|
||||
android:summaryOn="@string/settings_public_api_enabled_summary_on"
|
||||
android:summaryOff="@string/settings_public_api_enabled_summary_off"
|
||||
android:defaultValue="@bool/publicapi_enabled_default"
|
||||
android:key="@string/publicapi_enabled_key" />
|
||||
<Preference
|
||||
android:icon="@drawable/ic_baseline_api_24"
|
||||
android:key="@string/settings_api_key"
|
||||
android:summary="Remote control and statistics API for other apps"
|
||||
android:title="@string/settings_api_title"/>
|
||||
|
||||
<Preference
|
||||
android:icon="@drawable/ic_baseline_info_24"
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:title="@string/settings_api_title">
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:title="@string/settings_public_api_enabled_title"
|
||||
android:summaryOn="@string/settings_public_api_enabled_summary_on"
|
||||
android:summaryOff="@string/settings_public_api_enabled_summary_off"
|
||||
android:defaultValue="@bool/publicapi_enabled_default"
|
||||
android:key="@string/publicapi_enabled_key" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:title="@string/settings_public_api_dashboard_enabled_title"
|
||||
android:summaryOn="@string/settings_public_api_dashboard_enabled_summary_on"
|
||||
android:summaryOff="@string/settings_public_api_dashboard_enabled_summary_off"
|
||||
android:defaultValue="@bool/publicapi_dashboard_enabled_default"
|
||||
android:key="@string/publicapi_dashboard_enabled_key" />
|
||||
|
||||
</PreferenceScreen>
|
||||
Reference in New Issue
Block a user