Added option to pause playback on incoming call (enabled by default).
This commit is contained in:
parent
38815cae34
commit
e90039e7e8
6 changed files with 55 additions and 4 deletions
|
@ -8,7 +8,8 @@
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
|
||||||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
|
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
|
||||||
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
|
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
|
||||||
|
|
||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:minSdkVersion="8"
|
android:minSdkVersion="8"
|
||||||
|
|
|
@ -10,7 +10,7 @@ Android 2.2 (Gingerbread) or higher is required.
|
||||||
|
|
||||||
[Download](http://f-droid.org/repository/browse/?fdid=com.github.nutomic.controldlna)
|
[Download](http://f-droid.org/repository/browse/?fdid=com.github.nutomic.controldlna)
|
||||||
|
|
||||||
Note about permissions: All permissions are required for UPNP (for the necessary wifi access). The app does not connect to the internet at all.
|
Permissions: READ_PHONE_STATE is required to pause playback on phone call. All other permissions are required for UPnP functionality. ControlDLNA does not access the internet.
|
||||||
|
|
||||||
## Building
|
## Building
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,9 @@
|
||||||
<!-- Title for the SettingsActivity -->
|
<!-- Title for the SettingsActivity -->
|
||||||
<string name="settings_title">Preferences</string>
|
<string name="settings_title">Preferences</string>
|
||||||
|
|
||||||
|
<!-- Title for the pause playback on call preference -->
|
||||||
|
<string name="incoming_phone_call_pause">Pause playback on incoming phone call</string>
|
||||||
|
|
||||||
<!-- Title for the contact developer preference -->
|
<!-- Title for the contact developer preference -->
|
||||||
<string name="contact_dev_title">Contact Developer</string>
|
<string name="contact_dev_title">Contact Developer</string>
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,11 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:key="incoming_phone_call_pause"
|
||||||
|
android:title="@string/incoming_phone_call_pause"
|
||||||
|
android:defaultValue="true" />
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="contact_dev"
|
android:key="contact_dev"
|
||||||
android:title="@string/contact_dev_title" />
|
android:title="@string/contact_dev_title" />
|
||||||
|
|
|
@ -41,6 +41,7 @@ import com.github.nutomic.controldlna.R;
|
||||||
|
|
||||||
public class PreferencesActivity extends PreferenceActivity {
|
public class PreferencesActivity extends PreferenceActivity {
|
||||||
|
|
||||||
|
public static final String KEY_INCOMING_PHONE_CALL_PAUSE = "incoming_phone_call_pause";
|
||||||
private static final String KEY_CONTACT_DEV = "contact_dev";
|
private static final String KEY_CONTACT_DEV = "contact_dev";
|
||||||
|
|
||||||
private Preference mContactDev;
|
private Preference mContactDev;
|
||||||
|
|
|
@ -41,12 +41,14 @@ import org.teleal.cling.support.model.item.MusicTrack;
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.app.NotificationCompat;
|
import android.support.v4.app.NotificationCompat;
|
||||||
import android.support.v7.media.MediaControlIntent;
|
import android.support.v7.media.MediaControlIntent;
|
||||||
import android.support.v7.media.MediaItemStatus;
|
import android.support.v7.media.MediaItemStatus;
|
||||||
|
@ -54,10 +56,13 @@ import android.support.v7.media.MediaRouteSelector;
|
||||||
import android.support.v7.media.MediaRouter;
|
import android.support.v7.media.MediaRouter;
|
||||||
import android.support.v7.media.MediaRouter.ControlRequestCallback;
|
import android.support.v7.media.MediaRouter.ControlRequestCallback;
|
||||||
import android.support.v7.media.MediaRouter.RouteInfo;
|
import android.support.v7.media.MediaRouter.RouteInfo;
|
||||||
|
import android.telephony.PhoneStateListener;
|
||||||
|
import android.telephony.TelephonyManager;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.github.nutomic.controldlna.R;
|
import com.github.nutomic.controldlna.R;
|
||||||
import com.github.nutomic.controldlna.gui.MainActivity;
|
import com.github.nutomic.controldlna.gui.MainActivity;
|
||||||
|
import com.github.nutomic.controldlna.gui.PreferencesActivity;
|
||||||
import com.github.nutomic.controldlna.gui.RouteFragment;
|
import com.github.nutomic.controldlna.gui.RouteFragment;
|
||||||
import com.github.nutomic.controldlna.utility.LoadImageTask;
|
import com.github.nutomic.controldlna.utility.LoadImageTask;
|
||||||
|
|
||||||
|
@ -144,7 +149,7 @@ public class MediaRouterPlayService extends Service {
|
||||||
intent.setAction("showRouteFragment");
|
intent.setAction("showRouteFragment");
|
||||||
Notification notification = new NotificationCompat.Builder(MediaRouterPlayService.this)
|
Notification notification = new NotificationCompat.Builder(MediaRouterPlayService.this)
|
||||||
.setContentIntent(PendingIntent.getActivity(MediaRouterPlayService.this, 0,
|
.setContentIntent(PendingIntent.getActivity(MediaRouterPlayService.this, 0,
|
||||||
intent, 0))
|
intent, 0))
|
||||||
.setContentTitle(title)
|
.setContentTitle(title)
|
||||||
.setContentText(artist)
|
.setContentText(artist)
|
||||||
.setLargeIcon(result)
|
.setLargeIcon(result)
|
||||||
|
@ -156,11 +161,47 @@ public class MediaRouterPlayService extends Service {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Listens for incoming phone calls and pauses playback then.
|
||||||
|
*/
|
||||||
|
private class PhoneCallListener extends PhoneStateListener {
|
||||||
|
|
||||||
|
private boolean mPausedForCall = false;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCallStateChanged(int state, String incomingNumber) {
|
||||||
|
|
||||||
|
if (!PreferenceManager.getDefaultSharedPreferences(MediaRouterPlayService.this)
|
||||||
|
.getBoolean(PreferencesActivity.KEY_INCOMING_PHONE_CALL_PAUSE, true)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TelephonyManager.CALL_STATE_RINGING == state ||
|
||||||
|
TelephonyManager.CALL_STATE_OFFHOOK == state) {
|
||||||
|
// phone ringing or call active
|
||||||
|
pause();
|
||||||
|
mPausedForCall = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mPausedForCall && TelephonyManager.CALL_STATE_IDLE == state) {
|
||||||
|
// run when class initial and phone call ended
|
||||||
|
resume();
|
||||||
|
mPausedForCall = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate() {
|
public void onCreate() {
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
mMediaRouter = MediaRouter.getInstance(this);
|
mMediaRouter = MediaRouter.getInstance(this);
|
||||||
pollStatus();
|
pollStatus();
|
||||||
|
|
||||||
|
PhoneCallListener phoneListener = new PhoneCallListener();
|
||||||
|
TelephonyManager telephonyManager = (TelephonyManager) this
|
||||||
|
.getSystemService(Context.TELEPHONY_SERVICE);
|
||||||
|
telephonyManager.listen(phoneListener,
|
||||||
|
PhoneStateListener.LISTEN_CALL_STATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Reference in a new issue