Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Squeezer/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,11 @@
android:theme="@style/Theme.MaterialComponents.NoActionBar">
</activity>

<activity
android:name=".screensaver.BlackScreensaver"
android:theme="@style/Theme.MaterialComponents.NoActionBar">
</activity>

<service android:exported="false" android:label="Squeezer Service"
android:foregroundServiceType="mediaPlayback"
android:name=".service.SqueezeService">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -527,6 +527,8 @@ public boolean onSwipeUp() {
@UiThread
private void updatePlayPauseIcon(@PlayerState.PlayState String playStatus) {
playPauseButton.setIconResource((PlayerState.PLAY_STATE_PLAY.equals(playStatus)) ? R.drawable.ic_action_pause : R.drawable.ic_action_play);
// send a signal to the screensaver timers to start or stop count down
mActivity.setNotplayingTimer((PlayerState.PLAY_STATE_PLAY.equals(playStatus)) ? false : true);
}

@UiThread
Expand Down
18 changes: 16 additions & 2 deletions Squeezer/src/main/java/uk/org/ngo/squeezer/Preferences.java
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,9 @@ public final class Preferences {
// Preferred UI theme.
static final String KEY_ON_THEME_SELECT_ACTION = "squeezer.theme";

// Behavior of NowPlaying screen
public static final String KEY_ON_NOW_PLAYING_SELECT = "squeezer.always_to_nowplaying";

// Screensaver
public static final String KEY_SCREENSAVER = "squeezer.screensaver";

Expand Down Expand Up @@ -536,6 +539,14 @@ public void setTheme(ThemeManager.Theme theme) {
sharedPreferences.edit().putString(Preferences.KEY_ON_THEME_SELECT_ACTION, theme.name()).apply();
}

public boolean isNowPlayingSwitching() {
return sharedPreferences.getBoolean(KEY_ON_NOW_PLAYING_SELECT, false);
}

public void setNowPlayingSwitching(boolean b) {
sharedPreferences.edit().putBoolean(Preferences.KEY_ON_NOW_PLAYING_SELECT, b).apply();
}

public ScreensaverMode getScreensaverMode() {
String string = sharedPreferences.getString(KEY_SCREENSAVER, null);
return string == null ? ScreensaverMode.OFF : ScreensaverMode.valueOf(string);
Expand Down Expand Up @@ -892,9 +903,12 @@ public boolean isAll() {
}

public enum ScreensaverMode implements EnumWithText {
OFF(R.string.settings_screensaver_off),
ON(R.string.settings_screensaver_on),
CLOCK(R.string.settings_screensaver_clock);
OFF(R.string.settings_screensaver_off),
OFF_NOTPLAYING(R.string.settings_screensaver_off_whenNotPlaying),
CLOCK(R.string.settings_screensaver_clock),
CLOCK_NOTPLAYING(R.string.settings_screensaver_clock_whenNotPlaying);


private final int labelId;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,9 @@ private void fillDisplayPreferences(Preferences preferences) {
}
onSelectThemePref.setOnPreferenceChangeListener(this);

final SwitchPreferenceCompat alwaysSwitchToNowPlaying = findPreference(Preferences.KEY_ON_NOW_PLAYING_SELECT);
alwaysSwitchToNowPlaying.setChecked(preferences.isNowPlayingSwitching());

ListPreference screensaverPref = findPreference(Preferences.KEY_SCREENSAVER);
fillEnumPreference(screensaverPref, Preferences.ScreensaverMode.class, preferences.getScreensaverMode());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import uk.org.ngo.squeezer.model.Action;
import uk.org.ngo.squeezer.model.DisplayMessage;
import uk.org.ngo.squeezer.model.JiveItem;
import uk.org.ngo.squeezer.screensaver.BlackScreensaver;
import uk.org.ngo.squeezer.screensaver.Screensaver;
import uk.org.ngo.squeezer.service.ISqueezeService;
import uk.org.ngo.squeezer.service.SqueezeService;
Expand Down Expand Up @@ -160,6 +161,32 @@ protected void addActionBar() {
}
}

private static final int INACTIVITY_TIME = 5 * 60 * 1000;
Handler inactivityHandler = null;
Runnable inactivityAction;

Handler notplayingHandler = null;
Runnable notplayingAction;

private void setInactivityTimer(boolean b) {
if (inactivityHandler != null) {
inactivityHandler.removeCallbacks(inactivityAction);
if (b) {
inactivityHandler.postDelayed(inactivityAction, INACTIVITY_TIME);
}
}
}

public void setNotplayingTimer(boolean b) {
if (notplayingHandler != null) {
notplayingHandler.removeCallbacks(notplayingAction);
if (b) {
notplayingHandler.postDelayed(notplayingAction, INACTIVITY_TIME);
}
}
}


@Override
@CallSuper
protected void onCreate(Bundle savedInstanceState) {
Expand All @@ -184,7 +211,19 @@ protected void onCreate(Bundle savedInstanceState) {
if (preferences.getScreensaverMode() == Preferences.ScreensaverMode.CLOCK) {
inactivityHandler = new Handler();
inactivityAction = () -> startActivity(new Intent(this, Screensaver.class));
setInactivityTimer();
setInactivityTimer(true);
}
if (preferences.getScreensaverMode() == Preferences.ScreensaverMode.CLOCK_NOTPLAYING ) {
notplayingHandler = new Handler();
notplayingAction = () -> startActivity(new Intent(this, Screensaver.class));
// do not yet start timer, because player state (playing or paused) is not known here
setNotplayingTimer(false);
}
if (preferences.getScreensaverMode() == Preferences.ScreensaverMode.OFF_NOTPLAYING ) {
notplayingHandler = new Handler();
notplayingAction = () -> startActivity(new Intent(this, BlackScreensaver.class));
// do not yet start timer, because player state (playing or paused) is not known here
setNotplayingTimer(false);
}
}
});
Expand Down Expand Up @@ -212,9 +251,7 @@ public void onResume() {
maybeRegisterOnEventBus(mService);
}

if (inactivityHandler != null) {
setInactivityTimer();
}
setInactivityTimer(true);

// If SqueezePlayer is installed, start it
squeezePlayer = SqueezePlayer.maybeStartControllingSqueezePlayer(this);
Expand All @@ -223,17 +260,12 @@ public void onResume() {
ImageFetcher.getInstance(this).setExitTasksEarly(false);
}

private void setInactivityTimer() {
inactivityHandler.removeCallbacks(inactivityAction);
inactivityHandler.postDelayed(inactivityAction, INACTIVITY_TIME);
}

@Override
@CallSuper
public void onPause() {
if (inactivityHandler != null) {
inactivityHandler.removeCallbacks(inactivityAction);
}
setInactivityTimer(false);
setNotplayingTimer(false);

if (squeezePlayer != null) {
squeezePlayer.stopControllingSqueezePlayer();
Expand Down Expand Up @@ -366,16 +398,19 @@ public void setNotifyVolumePanel(boolean notifyVolumePanel) {
this.notifyVolumePanel = notifyVolumePanel;
}

private static final int INACTIVITY_TIME = 5 * 60 * 1000;
Handler inactivityHandler;
Runnable inactivityAction;

@Override
public void onUserInteraction() {
super.onUserInteraction();

if (inactivityHandler != null) {
setInactivityTimer();
setInactivityTimer(true);

if (notplayingHandler != null) {
// If playing is paused and there is some user interaction,
// the waiting time until screensaver comes is "charged up" again.
if (notplayingHandler.hasCallbacks(notplayingAction)) {
setNotplayingTimer(true);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,11 @@ private void nextWindow(Action.NextWindow nextWindow, int alreadyPopped) {
switch (nextWindow.nextWindow) {
case nowPlaying:
// Do nothing as now playing is always available in Squeezer (maybe toast the action)
// only if set by special preference
Preferences preferences = Squeezer.getPreferences();
if (preferences.isNowPlayingSwitching()) {
NowPlayingActivity.show(this);
}
break;
case playlist:
CurrentPlaylistActivity.show(this);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package uk.org.ngo.squeezer.screensaver;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.WindowManager;


public class BlackScreensaver extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 0;
params.flags &= ~ WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
getWindow().setAttributes(params);

}

@Override
public void onUserInteraction() {
super.onUserInteraction();
WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = -1;
params.flags |= WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
finish();
}

}
11 changes: 8 additions & 3 deletions Squeezer/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -257,9 +257,14 @@
<string name="RANDOM_PLAY_STARTED">Zufallswiedergabe gestartet</string>
<string name="minutes">Minuten</string>
<string name="settings_screensaver_title">Display aktiviert lassen</string>
<string name="settings_screensaver_off">Nein</string>
<string name="settings_screensaver_on">Ja</string>
<string name="settings_screensaver_clock">Uhr zeigen bei Inaktivität</string>
<string name="settings_screensaver_off">bei Aktivität</string>
<string name="settings_screensaver_on">Immer</string>
<string name="settings_screensaver_clock">bei Aktivität, dann Uhr zeigen</string>
<string name="settings_screensaver_clock_whenNotPlaying">während abgespielt wird, dann Uhr zeigen</string>
<string name="settings_screensaver_off_whenNotPlaying">während abgespielt wird</string>
<string name="settings_switch_to_nowplaying_title">NowPlaying-Bildschirm Verhalten</string>
<string name="settings_switch_to_nowplaying_on">Immer auf NowPlaying wechseln wenn ein Item ausgewählt wurde</string>
<string name="settings_switch_to_nowplaying_off">Bildschirm nicht automatisch wechseln</string>
<string name="settings_volume_title">Einstellungen für Lautstärkeregelung</string>
<string name="settings_restore_after_call">Nach Beendigung wieder starten</string>
<string name="call_state_permission_message">Bei einem Anruf kann Squeezer die Wiedergabe pausieren.</string>
Expand Down
3 changes: 3 additions & 0 deletions Squeezer/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@
<string name="settings_fadeinsecs_title">Temps d\'ouverture en fondu</string>
<string name="settings_fadeinsecs_summary">Entrez la durée d\'ouverture en fondu, en secondes, quand en pause. Entrez 0 pour désactiver l\'ouverture en fondu.</string>

<string name="settings_switch_to_nowplaying_title">Comportement du vue NowPlaying</string>
<string name="settings_switch_to_nowplaying_on">Toujours alterner à la vue NowPlaying quand on a choisi un élément</string>
<string name="settings_switch_to_nowplaying_off">Pas alterner la vue</string>
<string name="settings_scrobble_title">Faire du scrobble par Last.fm</string>
<string name="settings_scrobble_on">Les informations sur le morceau sont envoyées à Last.fm</string>
<string name="settings_scrobble_off">Les informations sur le morceau ne sont pas envoyées à Last.fm</string>
Expand Down
11 changes: 8 additions & 3 deletions Squeezer/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,14 @@
<string name="settings_theme_dark">Dark</string>
<string name="settings_theme_light_dark">Light, dark action bar</string>
<string name="settings_screensaver_title">Keep screen on</string>
<string name="settings_screensaver_off">No</string>
<string name="settings_screensaver_on">Yes</string>
<string name="settings_screensaver_clock">Show clock when idle</string>
<string name="settings_screensaver_off">while active</string>
<string name="settings_screensaver_on">always</string>
<string name="settings_screensaver_clock">while active, then show clock</string>
<string name="settings_screensaver_clock_whenNotPlaying">while playing, then show clock</string>
<string name="settings_screensaver_off_whenNotPlaying">while playing</string>
<string name="settings_switch_to_nowplaying_title">NowPlaying screen behavior</string>
<string name="settings_switch_to_nowplaying_on">Always switch to NowPlaying screen when item has been chosen</string>
<string name="settings_switch_to_nowplaying_off">Remain on current screen</string>
<string name="settings_add_composer_line">Show composer</string>
<string name="settings_band_instead_album">Classical music information</string>
<string name="settings_add_conductor_line">Show band and conductor</string>
Expand Down
6 changes: 6 additions & 0 deletions Squeezer/src/main/res/xml/preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@
android:title="@string/settings_theme_title"
android:summary="%s"/>

<SwitchPreferenceCompat
android:key="squeezer.always_to_nowplaying"
android:summaryOff="@string/settings_switch_to_nowplaying_off"
android:summaryOn="@string/settings_switch_to_nowplaying_on"
android:title="@string/settings_switch_to_nowplaying_title"/>

<ListPreference
android:key="squeezer.screensaver"
android:title="@string/settings_screensaver_title"
Expand Down