add cast button to important activities
This commit is contained in:
parent
afbae2a7ef
commit
6224f80c89
@ -0,0 +1,97 @@
|
|||||||
|
package de.danoeh.antennapod.activity;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import android.support.v7.app.AppCompatActivity;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
|
||||||
|
import com.google.android.libraries.cast.companionlibrary.cast.VideoCastManager;
|
||||||
|
|
||||||
|
import de.danoeh.antennapod.R;
|
||||||
|
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activity that allows for showing the MediaRouter button whenever there's a cast device in the
|
||||||
|
* network.
|
||||||
|
*/
|
||||||
|
public abstract class CastEnabledActivity extends AppCompatActivity
|
||||||
|
implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
|
protected VideoCastManager mCastManager;
|
||||||
|
private int castUICounter;
|
||||||
|
protected MenuItem mMediaRouteMenuItem;
|
||||||
|
protected boolean isCastEnabled;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(this).
|
||||||
|
registerOnSharedPreferenceChangeListener(this);
|
||||||
|
|
||||||
|
castUICounter = 0;
|
||||||
|
mCastManager = VideoCastManager.getInstance();
|
||||||
|
isCastEnabled = UserPreferences.isCastEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
super.onCreateOptionsMenu(menu);
|
||||||
|
getMenuInflater().inflate(R.menu.cast_enabled, menu);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPrepareOptionsMenu(Menu menu) {
|
||||||
|
super.onPrepareOptionsMenu(menu);
|
||||||
|
mMediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item);
|
||||||
|
mMediaRouteMenuItem.setEnabled(isCastEnabled);
|
||||||
|
mMediaRouteMenuItem = mCastManager.addMediaRouterButton(menu, R.id.media_route_menu_item);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
castUICounter++;
|
||||||
|
if (isCastEnabled) {
|
||||||
|
mCastManager.incrementUiCounter();
|
||||||
|
castUICounter++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
castUICounter--;
|
||||||
|
if (isCastEnabled) {
|
||||||
|
mCastManager.decrementUiCounter();
|
||||||
|
castUICounter--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//This whole method might just be useless because it's assumed that the cast button
|
||||||
|
//won't show where the user actually has the power to change the preference.
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
|
if (key.equals(UserPreferences.PREF_CAST_ENABLED)) {
|
||||||
|
isCastEnabled = UserPreferences.isCastEnabled();
|
||||||
|
mMediaRouteMenuItem.setEnabled(isCastEnabled);
|
||||||
|
if (isCastEnabled) {
|
||||||
|
//Test if activity is resumed but without UI counter incremented
|
||||||
|
if (castUICounter==1) {
|
||||||
|
mCastManager.incrementUiCounter();
|
||||||
|
castUICounter++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (castUICounter > 1) {
|
||||||
|
mCastManager.decrementUiCounter();
|
||||||
|
castUICounter--;
|
||||||
|
}
|
||||||
|
//TODO disable any current casting (or possibly do it within the PlaybackService)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -17,7 +17,6 @@ import android.support.v4.app.FragmentTransaction;
|
|||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
import android.support.v7.app.ActionBarDrawerToggle;
|
import android.support.v7.app.ActionBarDrawerToggle;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
@ -70,7 +69,7 @@ import rx.schedulers.Schedulers;
|
|||||||
/**
|
/**
|
||||||
* The activity that is shown when the user launches the app.
|
* The activity that is shown when the user launches the app.
|
||||||
*/
|
*/
|
||||||
public class MainActivity extends AppCompatActivity implements NavDrawerActivity {
|
public class MainActivity extends CastEnabledActivity implements NavDrawerActivity {
|
||||||
|
|
||||||
private static final String TAG = "MainActivity";
|
private static final String TAG = "MainActivity";
|
||||||
|
|
||||||
|
@ -12,7 +12,6 @@ import android.os.Build;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.view.ViewCompat;
|
import android.support.v4.view.ViewCompat;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
import android.view.MenuInflater;
|
import android.view.MenuInflater;
|
||||||
@ -58,7 +57,7 @@ import rx.schedulers.Schedulers;
|
|||||||
* Provides general features which are both needed for playing audio and video
|
* Provides general features which are both needed for playing audio and video
|
||||||
* files.
|
* files.
|
||||||
*/
|
*/
|
||||||
public abstract class MediaplayerActivity extends AppCompatActivity implements OnSeekBarChangeListener {
|
public abstract class MediaplayerActivity extends CastEnabledActivity implements OnSeekBarChangeListener {
|
||||||
private static final String TAG = "MediaplayerActivity";
|
private static final String TAG = "MediaplayerActivity";
|
||||||
private static final String PREFS = "MediaPlayerActivityPreferences";
|
private static final String PREFS = "MediaPlayerActivityPreferences";
|
||||||
private static final String PREF_SHOW_TIME_LEFT = "showTimeLeft";
|
private static final String PREF_SHOW_TIME_LEFT = "showTimeLeft";
|
||||||
|
11
app/src/main/res/menu/cast_enabled.xml
Normal file
11
app/src/main/res/menu/cast_enabled.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:custom="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
|
<item
|
||||||
|
android:id="@+id/media_route_menu_item"
|
||||||
|
android:title="@string/media_route_menu_title"
|
||||||
|
android:enabled="false"
|
||||||
|
custom:actionProviderClass="android.support.v7.app.MediaRouteActionProvider"
|
||||||
|
custom:showAsAction="always"/>
|
||||||
|
</menu>
|
@ -616,4 +616,7 @@
|
|||||||
<string name="proxy_host_invalid_error">Host is not a valid IP address or domain</string>
|
<string name="proxy_host_invalid_error">Host is not a valid IP address or domain</string>
|
||||||
<string name="proxy_port_invalid_error">Port not valid</string>
|
<string name="proxy_port_invalid_error">Port not valid</string>
|
||||||
|
|
||||||
|
<!-- Casting -->
|
||||||
|
<string name="media_route_menu_title">Play on…</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user