forked from upstream-mirrors/OpenTracks
Removed ControlRecordingService.
It was implemented to enable other apps to start and stop track recordings.
This commit is contained in:
-98
@@ -1,98 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2012 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.services;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
|
||||||
import androidx.test.rule.GrantPermissionRule;
|
|
||||||
import androidx.test.rule.ServiceTestRule;
|
|
||||||
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
|
||||||
import org.junit.runner.RunWith;
|
|
||||||
import org.mockito.Mock;
|
|
||||||
import org.mockito.junit.MockitoJUnitRunner;
|
|
||||||
|
|
||||||
import java.util.concurrent.TimeoutException;
|
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
|
||||||
|
|
||||||
import static org.mockito.Mockito.verify;
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests {@link ControlRecordingService}.
|
|
||||||
*
|
|
||||||
* @author Youtao Liu
|
|
||||||
*/
|
|
||||||
@RunWith(MockitoJUnitRunner.class)
|
|
||||||
public class ControlRecordingServiceTest {
|
|
||||||
|
|
||||||
private Context context = ApplicationProvider.getApplicationContext();
|
|
||||||
|
|
||||||
@Rule
|
|
||||||
public final ServiceTestRule mServiceRule = new ServiceTestRule();
|
|
||||||
|
|
||||||
@Rule
|
|
||||||
public GrantPermissionRule mRuntimePermissionRule = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION);
|
|
||||||
|
|
||||||
@Mock
|
|
||||||
private ITrackRecordingService iTrackRecordingServiceMock;
|
|
||||||
|
|
||||||
private ControlRecordingService subject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests the start of {@link ControlRecordingService} and tests the method {@link ControlRecordingService#onHandleIntent(Intent, ITrackRecordingService)} to start a track recording.
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void testStartRecording() throws TimeoutException {
|
|
||||||
Assert.assertNull(subject);
|
|
||||||
Intent intent = startControlRecordingService(context.getString(R.string.track_action_start));
|
|
||||||
Assert.assertNotNull(subject);
|
|
||||||
|
|
||||||
when(iTrackRecordingServiceMock.startNewTrack()).thenReturn(1L);
|
|
||||||
subject.onHandleIntent(intent, iTrackRecordingServiceMock);
|
|
||||||
verify(iTrackRecordingServiceMock).startNewTrack();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests the method {@link ControlRecordingService#onHandleIntent(Intent, ITrackRecordingService)} to stop a track recording.
|
|
||||||
*/
|
|
||||||
@Test
|
|
||||||
public void testStopRecording() throws TimeoutException {
|
|
||||||
Intent intent = startControlRecordingService(context.getString(R.string.track_action_end));
|
|
||||||
|
|
||||||
subject.onHandleIntent(intent, iTrackRecordingServiceMock);
|
|
||||||
verify(iTrackRecordingServiceMock).endCurrentTrack();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts a ControlRecordingService with a specified action.
|
|
||||||
*
|
|
||||||
* @param action the action string in the start intent
|
|
||||||
*/
|
|
||||||
private Intent startControlRecordingService(String action) throws TimeoutException {
|
|
||||||
Intent intent = new Intent(context, ControlRecordingService.class);
|
|
||||||
intent.setAction(action);
|
|
||||||
mServiceRule.startService(intent);
|
|
||||||
subject = ((ControlRecordingService.LocalBinder) mServiceRule.bindService(intent)).getService();
|
|
||||||
return intent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -128,9 +128,6 @@ limitations under the License.
|
|||||||
</receiver>
|
</receiver>
|
||||||
|
|
||||||
<!-- Providers -->
|
<!-- Providers -->
|
||||||
<service
|
|
||||||
android:name=".services.ControlRecordingService"
|
|
||||||
android:exported="false" />
|
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name=".services.TrackRecordingService"
|
android:name=".services.TrackRecordingService"
|
||||||
|
|||||||
@@ -1,144 +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.services;
|
|
||||||
|
|
||||||
import android.app.IntentService;
|
|
||||||
import android.content.ComponentName;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.ServiceConnection;
|
|
||||||
import android.os.Binder;
|
|
||||||
import android.os.IBinder;
|
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
|
||||||
|
|
||||||
import de.dennisguse.opentracks.R;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A service to control starting and stopping of a recording.
|
|
||||||
* This service, through the AndroidManifest.xml, is configured to only allow components of the same application to invoke it.
|
|
||||||
* This application delegates starting and stopping a recording to {@link TrackRecordingService} using RPC calls.
|
|
||||||
*
|
|
||||||
* @author Jimmy Shih
|
|
||||||
*/
|
|
||||||
public class ControlRecordingService extends IntentService implements ServiceConnection {
|
|
||||||
|
|
||||||
private static final String TAG = ControlRecordingService.class.getSimpleName();
|
|
||||||
|
|
||||||
private ITrackRecordingService trackRecordingService;
|
|
||||||
private boolean connected = false;
|
|
||||||
|
|
||||||
public ControlRecordingService() {
|
|
||||||
super(ControlRecordingService.class.getSimpleName());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate() {
|
|
||||||
super.onCreate();
|
|
||||||
|
|
||||||
Intent newIntent = new Intent(this, TrackRecordingService.class);
|
|
||||||
startService(newIntent);
|
|
||||||
bindService(newIntent, this, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
@Override
|
|
||||||
public IBinder onBind(@Nullable Intent intent) {
|
|
||||||
return new LocalBinder();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles the intent to start or stop a recording.
|
|
||||||
*
|
|
||||||
* @param intent to be handled
|
|
||||||
* @param service the trackRecordingService
|
|
||||||
*/
|
|
||||||
@VisibleForTesting
|
|
||||||
void onHandleIntent(Intent intent, ITrackRecordingService service) {
|
|
||||||
String action = intent.getAction();
|
|
||||||
if (action != null) {
|
|
||||||
if (action.equals(getString(R.string.track_action_start))) {
|
|
||||||
service.startNewTrack();
|
|
||||||
} else if (action.equals(getString(R.string.track_action_end))) {
|
|
||||||
service.endCurrentTrack();
|
|
||||||
} else if (action.equals(getString(R.string.track_action_pause))) {
|
|
||||||
service.pauseCurrentTrack();
|
|
||||||
} else if (action.equals(getString(R.string.track_action_resume))) {
|
|
||||||
service.resumeCurrentTrack();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (connected) {
|
|
||||||
unbindService(this);
|
|
||||||
connected = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onServiceConnected(ComponentName name, IBinder service) {
|
|
||||||
trackRecordingService = (ITrackRecordingService) service;
|
|
||||||
notifyConnected();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onServiceDisconnected(ComponentName name) {
|
|
||||||
connected = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Notifies all threads that connection to {@link TrackRecordingService} is available.
|
|
||||||
*/
|
|
||||||
private synchronized void notifyConnected() {
|
|
||||||
connected = true;
|
|
||||||
notifyAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Waits until the connection to {@link TrackRecordingService} is available.
|
|
||||||
*/
|
|
||||||
private synchronized void waitConnected() {
|
|
||||||
while (!connected) {
|
|
||||||
try {
|
|
||||||
wait();
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
// can safely ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onHandleIntent(Intent intent) {
|
|
||||||
waitConnected();
|
|
||||||
onHandleIntent(intent, trackRecordingService);
|
|
||||||
}
|
|
||||||
|
|
||||||
@VisibleForTesting
|
|
||||||
class LocalBinder extends Binder {
|
|
||||||
ControlRecordingService getService() {
|
|
||||||
return ControlRecordingService.this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
if (connected) {
|
|
||||||
unbindService(this);
|
|
||||||
connected = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user