Override hiding the cast button whenever it's connected
This commit is contained in:
parent
e79a077313
commit
9b7edd5bfa
@ -112,8 +112,10 @@ public abstract class CastEnabledActivity extends AppCompatActivity
|
|||||||
|
|
||||||
private void onCastConnectionChanged(boolean connected) {
|
private void onCastConnectionChanged(boolean connected) {
|
||||||
if (connected) {
|
if (connected) {
|
||||||
|
castButtonVisibilityManager.onConnected();
|
||||||
setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);
|
setVolumeControlStream(AudioManager.USE_DEFAULT_STREAM_TYPE);
|
||||||
} else {
|
} else {
|
||||||
|
castButtonVisibilityManager.onDisconnected();
|
||||||
setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
setVolumeControlStream(AudioManager.STREAM_MUSIC);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -131,10 +133,12 @@ public abstract class CastEnabledActivity extends AppCompatActivity
|
|||||||
private volatile boolean prefEnabled = false;
|
private volatile boolean prefEnabled = false;
|
||||||
private volatile boolean viewRequested = false;
|
private volatile boolean viewRequested = false;
|
||||||
private volatile boolean resumed = false;
|
private volatile boolean resumed = false;
|
||||||
|
private volatile boolean connected = false;
|
||||||
|
private volatile int showAsAction = MenuItem.SHOW_AS_ACTION_IF_ROOM;
|
||||||
private Menu menu;
|
private Menu menu;
|
||||||
|
|
||||||
public synchronized void setPrefEnabled(boolean newValue) {
|
public synchronized void setPrefEnabled(boolean newValue) {
|
||||||
if (prefEnabled != newValue && resumed && viewRequested) {
|
if (prefEnabled != newValue && resumed && (viewRequested || connected)) {
|
||||||
if (newValue) {
|
if (newValue) {
|
||||||
castManager.incrementUiCounter();
|
castManager.incrementUiCounter();
|
||||||
} else {
|
} else {
|
||||||
@ -143,7 +147,7 @@ public abstract class CastEnabledActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
prefEnabled = newValue;
|
prefEnabled = newValue;
|
||||||
if (mediaRouteActionProvider != null) {
|
if (mediaRouteActionProvider != null) {
|
||||||
mediaRouteActionProvider.setEnabled(prefEnabled && viewRequested);
|
mediaRouteActionProvider.setEnabled(prefEnabled && (viewRequested || connected));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,7 +157,7 @@ public abstract class CastEnabledActivity extends AppCompatActivity
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
resumed = newValue;
|
resumed = newValue;
|
||||||
if (prefEnabled && viewRequested) {
|
if (prefEnabled && (viewRequested || connected)) {
|
||||||
if (resumed) {
|
if (resumed) {
|
||||||
castManager.incrementUiCounter();
|
castManager.incrementUiCounter();
|
||||||
} else {
|
} else {
|
||||||
@ -163,7 +167,7 @@ public abstract class CastEnabledActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setViewRequested(boolean newValue) {
|
public synchronized void setViewRequested(boolean newValue) {
|
||||||
if (viewRequested != newValue && resumed && prefEnabled) {
|
if (viewRequested != newValue && resumed && prefEnabled && !connected) {
|
||||||
if (newValue) {
|
if (newValue) {
|
||||||
castManager.incrementUiCounter();
|
castManager.incrementUiCounter();
|
||||||
} else {
|
} else {
|
||||||
@ -172,7 +176,21 @@ public abstract class CastEnabledActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
viewRequested = newValue;
|
viewRequested = newValue;
|
||||||
if (mediaRouteActionProvider != null) {
|
if (mediaRouteActionProvider != null) {
|
||||||
mediaRouteActionProvider.setEnabled(prefEnabled && viewRequested);
|
mediaRouteActionProvider.setEnabled(prefEnabled && (viewRequested || connected));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void setConnected(boolean newValue) {
|
||||||
|
if (connected != newValue && resumed && prefEnabled && !prefEnabled) {
|
||||||
|
if (newValue) {
|
||||||
|
castManager.incrementUiCounter();
|
||||||
|
} else {
|
||||||
|
castManager.decrementUiCounter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
connected = newValue;
|
||||||
|
if (mediaRouteActionProvider != null) {
|
||||||
|
mediaRouteActionProvider.setEnabled(prefEnabled && (viewRequested || connected));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -182,21 +200,38 @@ public abstract class CastEnabledActivity extends AppCompatActivity
|
|||||||
|
|
||||||
public void setMenu(Menu menu) {
|
public void setMenu(Menu menu) {
|
||||||
setViewRequested(false);
|
setViewRequested(false);
|
||||||
|
showAsAction = MenuItem.SHOW_AS_ACTION_IF_ROOM;
|
||||||
this.menu = menu;
|
this.menu = menu;
|
||||||
|
setShowAsAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void requestCastButton(int showAsAction) {
|
public void requestCastButton(int showAsAction) {
|
||||||
setViewRequested(true);
|
setViewRequested(true);
|
||||||
|
this.showAsAction = showAsAction;
|
||||||
|
setShowAsAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onConnected() {
|
||||||
|
setConnected(true);
|
||||||
|
setShowAsAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onDisconnected() {
|
||||||
|
setConnected(false);
|
||||||
|
setShowAsAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setShowAsAction() {
|
||||||
if (menu == null) {
|
if (menu == null) {
|
||||||
Log.e(TAG, "Cast button requested without a menu");
|
Log.d(TAG, "setShowAsAction() without a menu");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MenuItem item = menu.findItem(R.id.media_route_menu_item);
|
MenuItem item = menu.findItem(R.id.media_route_menu_item);
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
Log.e(TAG, "Cast button requested, but not inflated");
|
Log.e(TAG, "setShowAsAction(), but cast button not inflated");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MenuItemCompat.setShowAsAction(menu.findItem(R.id.media_route_menu_item), showAsAction);
|
MenuItemCompat.setShowAsAction(item, connected? MenuItem.SHOW_AS_ACTION_ALWAYS : showAsAction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user