Remove hardcoded and duplicate strings, use exoplayer ones
This commit is contained in:
parent
7317737e90
commit
11e048abb1
|
@ -6,9 +6,9 @@ import android.content.SharedPreferences;
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.IntDef;
|
import androidx.annotation.IntDef;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.StringRes;
|
|
||||||
|
|
||||||
import org.schabi.newpipe.R;
|
import org.schabi.newpipe.R;
|
||||||
|
import org.schabi.newpipe.util.Localization;
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
@ -41,22 +41,6 @@ public final class NotificationConstants {
|
||||||
PLAY_PAUSE, PLAY_PAUSE_BUFFERING, REPEAT, SHUFFLE, CLOSE})
|
PLAY_PAUSE, PLAY_PAUSE_BUFFERING, REPEAT, SHUFFLE, CLOSE})
|
||||||
public @interface Action { }
|
public @interface Action { }
|
||||||
|
|
||||||
@StringRes
|
|
||||||
public static final int[] ACTION_SUMMARIES = {
|
|
||||||
R.string.notification_action_nothing,
|
|
||||||
R.string.notification_action_previous,
|
|
||||||
R.string.notification_action_next,
|
|
||||||
R.string.notification_action_rewind,
|
|
||||||
R.string.notification_action_forward,
|
|
||||||
R.string.notification_action_smart_rewind_previous,
|
|
||||||
R.string.notification_action_smart_forward_next,
|
|
||||||
R.string.notification_action_play_pause,
|
|
||||||
R.string.notification_action_play_pause_buffering,
|
|
||||||
R.string.notification_action_repeat,
|
|
||||||
R.string.notification_action_shuffle,
|
|
||||||
R.string.close,
|
|
||||||
};
|
|
||||||
|
|
||||||
@DrawableRes
|
@DrawableRes
|
||||||
public static final int[] ACTION_ICONS = {
|
public static final int[] ACTION_ICONS = {
|
||||||
0,
|
0,
|
||||||
|
@ -110,6 +94,46 @@ public final class NotificationConstants {
|
||||||
R.string.notification_slot_compact_2_key,
|
R.string.notification_slot_compact_2_key,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
public static String getActionName(@NonNull final Context context, @Action final int action) {
|
||||||
|
switch (action) {
|
||||||
|
case PREVIOUS:
|
||||||
|
return context.getString(R.string.exo_controls_previous_description);
|
||||||
|
case NEXT:
|
||||||
|
return context.getString(R.string.exo_controls_next_description);
|
||||||
|
case REWIND:
|
||||||
|
return context.getString(R.string.exo_controls_rewind_description);
|
||||||
|
case FORWARD:
|
||||||
|
return context.getString(R.string.exo_controls_fastforward_description);
|
||||||
|
case SMART_REWIND_PREVIOUS:
|
||||||
|
return Localization.concatenateStrings(
|
||||||
|
context.getString(R.string.exo_controls_rewind_description),
|
||||||
|
context.getString(R.string.exo_controls_previous_description));
|
||||||
|
case SMART_FORWARD_NEXT:
|
||||||
|
return Localization.concatenateStrings(
|
||||||
|
context.getString(R.string.exo_controls_fastforward_description),
|
||||||
|
context.getString(R.string.exo_controls_next_description));
|
||||||
|
case PLAY_PAUSE:
|
||||||
|
return Localization.concatenateStrings(
|
||||||
|
context.getString(R.string.exo_controls_play_description),
|
||||||
|
context.getString(R.string.exo_controls_pause_description));
|
||||||
|
case PLAY_PAUSE_BUFFERING:
|
||||||
|
return Localization.concatenateStrings(
|
||||||
|
context.getString(R.string.exo_controls_play_description),
|
||||||
|
context.getString(R.string.exo_controls_pause_description),
|
||||||
|
context.getString(R.string.notification_action_buffering));
|
||||||
|
case REPEAT:
|
||||||
|
return context.getString(R.string.notification_action_repeat);
|
||||||
|
case SHUFFLE:
|
||||||
|
return context.getString(R.string.notification_action_shuffle);
|
||||||
|
case CLOSE:
|
||||||
|
return context.getString(R.string.close);
|
||||||
|
case NOTHING: default:
|
||||||
|
return context.getString(R.string.notification_action_nothing);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param context the context to use
|
* @param context the context to use
|
||||||
* @param sharedPreferences the shared preferences to query values from
|
* @param sharedPreferences the shared preferences to query values from
|
||||||
|
|
|
@ -12,6 +12,7 @@ import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.annotation.StringRes;
|
||||||
import androidx.core.app.NotificationCompat;
|
import androidx.core.app.NotificationCompat;
|
||||||
import androidx.core.app.NotificationManagerCompat;
|
import androidx.core.app.NotificationManagerCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
|
@ -214,75 +215,89 @@ public final class NotificationUtil {
|
||||||
final int baseActionIcon = NotificationConstants.ACTION_ICONS[selectedAction];
|
final int baseActionIcon = NotificationConstants.ACTION_ICONS[selectedAction];
|
||||||
switch (selectedAction) {
|
switch (selectedAction) {
|
||||||
case NotificationConstants.PREVIOUS:
|
case NotificationConstants.PREVIOUS:
|
||||||
return getAction(player, baseActionIcon, "Previous", ACTION_PLAY_PREVIOUS);
|
return getAction(player, baseActionIcon,
|
||||||
|
R.string.exo_controls_previous_description, ACTION_PLAY_PREVIOUS);
|
||||||
|
|
||||||
case NotificationConstants.NEXT:
|
case NotificationConstants.NEXT:
|
||||||
return getAction(player, baseActionIcon, "Next", ACTION_PLAY_NEXT);
|
return getAction(player, baseActionIcon,
|
||||||
|
R.string.exo_controls_next_description, ACTION_PLAY_NEXT);
|
||||||
|
|
||||||
case NotificationConstants.REWIND:
|
case NotificationConstants.REWIND:
|
||||||
return getAction(player, baseActionIcon, "Rewind", ACTION_FAST_REWIND);
|
return getAction(player, baseActionIcon,
|
||||||
|
R.string.exo_controls_rewind_description, ACTION_FAST_REWIND);
|
||||||
|
|
||||||
case NotificationConstants.FORWARD:
|
case NotificationConstants.FORWARD:
|
||||||
return getAction(player, baseActionIcon, "Forward", ACTION_FAST_FORWARD);
|
return getAction(player, baseActionIcon,
|
||||||
|
R.string.exo_controls_fastforward_description, ACTION_FAST_FORWARD);
|
||||||
|
|
||||||
case NotificationConstants.SMART_REWIND_PREVIOUS:
|
case NotificationConstants.SMART_REWIND_PREVIOUS:
|
||||||
if (player.playQueue != null && player.playQueue.size() > 1) {
|
if (player.playQueue != null && player.playQueue.size() > 1) {
|
||||||
return getAction(player, R.drawable.exo_notification_previous,
|
return getAction(player, R.drawable.exo_notification_previous,
|
||||||
"Previous", ACTION_PLAY_PREVIOUS);
|
R.string.exo_controls_previous_description, ACTION_PLAY_PREVIOUS);
|
||||||
} else {
|
} else {
|
||||||
return getAction(player, R.drawable.exo_controls_rewind,
|
return getAction(player, R.drawable.exo_controls_rewind,
|
||||||
"Rewind", ACTION_FAST_REWIND);
|
R.string.exo_controls_rewind_description, ACTION_FAST_REWIND);
|
||||||
}
|
}
|
||||||
|
|
||||||
case NotificationConstants.SMART_FORWARD_NEXT:
|
case NotificationConstants.SMART_FORWARD_NEXT:
|
||||||
if (player.playQueue != null && player.playQueue.size() > 1) {
|
if (player.playQueue != null && player.playQueue.size() > 1) {
|
||||||
return getAction(player, R.drawable.exo_notification_next,
|
return getAction(player, R.drawable.exo_notification_next,
|
||||||
"Next", ACTION_PLAY_NEXT);
|
R.string.exo_controls_next_description, ACTION_PLAY_NEXT);
|
||||||
} else {
|
} else {
|
||||||
return getAction(player, R.drawable.exo_controls_fastforward,
|
return getAction(player, R.drawable.exo_controls_fastforward,
|
||||||
"Forward", ACTION_FAST_FORWARD);
|
R.string.exo_controls_fastforward_description, ACTION_FAST_FORWARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
case NotificationConstants.PLAY_PAUSE:
|
case NotificationConstants.PLAY_PAUSE:
|
||||||
final boolean pauseOrPlay = player.isPlaying()
|
if (player.isPlaying()
|
||||||
|| player.getCurrentState() == BasePlayer.STATE_PREFLIGHT
|
|| player.getCurrentState() == BasePlayer.STATE_PREFLIGHT
|
||||||
|| player.getCurrentState() == BasePlayer.STATE_BLOCKED
|
|| player.getCurrentState() == BasePlayer.STATE_BLOCKED
|
||||||
|| player.getCurrentState() == BasePlayer.STATE_BUFFERING;
|
|| player.getCurrentState() == BasePlayer.STATE_BUFFERING) {
|
||||||
return getAction(player,
|
return getAction(player, R.drawable.exo_notification_pause,
|
||||||
pauseOrPlay ? R.drawable.exo_notification_pause
|
R.string.exo_controls_pause_description, ACTION_PLAY_PAUSE);
|
||||||
: R.drawable.exo_notification_play,
|
} else {
|
||||||
pauseOrPlay ? "Pause" : "Play",
|
return getAction(player, R.drawable.exo_notification_play,
|
||||||
ACTION_PLAY_PAUSE);
|
R.string.exo_controls_play_description, ACTION_PLAY_PAUSE);
|
||||||
|
}
|
||||||
|
|
||||||
case NotificationConstants.PLAY_PAUSE_BUFFERING:
|
case NotificationConstants.PLAY_PAUSE_BUFFERING:
|
||||||
if (player.getCurrentState() == BasePlayer.STATE_PREFLIGHT
|
if (player.getCurrentState() == BasePlayer.STATE_PREFLIGHT
|
||||||
|| player.getCurrentState() == BasePlayer.STATE_BLOCKED
|
|| player.getCurrentState() == BasePlayer.STATE_BLOCKED
|
||||||
|| player.getCurrentState() == BasePlayer.STATE_BUFFERING) {
|
|| player.getCurrentState() == BasePlayer.STATE_BUFFERING) {
|
||||||
return getAction(player, R.drawable.ic_hourglass_top_white_24dp_png,
|
return getAction(player, R.drawable.ic_hourglass_top_white_24dp_png,
|
||||||
"Buffering", ACTION_BUFFERING);
|
R.string.notification_action_buffering, ACTION_BUFFERING);
|
||||||
|
} else if (player.isPlaying()) {
|
||||||
|
return getAction(player, R.drawable.exo_notification_pause,
|
||||||
|
R.string.exo_controls_pause_description, ACTION_PLAY_PAUSE);
|
||||||
} else {
|
} else {
|
||||||
return getAction(player,
|
return getAction(player, R.drawable.exo_notification_play,
|
||||||
player.isPlaying() ? R.drawable.exo_notification_pause
|
R.string.exo_controls_play_description, ACTION_PLAY_PAUSE);
|
||||||
: R.drawable.exo_notification_play,
|
|
||||||
player.isPlaying() ? "Pause" : "Play",
|
|
||||||
ACTION_PLAY_PAUSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case NotificationConstants.REPEAT:
|
case NotificationConstants.REPEAT:
|
||||||
return getAction(player, getRepeatModeDrawable(player.getRepeatMode()),
|
if (player.getRepeatMode() == REPEAT_MODE_ALL) {
|
||||||
getRepeatModeTitle(player.getRepeatMode()), ACTION_REPEAT);
|
return getAction(player, R.drawable.exo_media_action_repeat_all,
|
||||||
|
R.string.exo_controls_repeat_all_description, ACTION_REPEAT);
|
||||||
|
} else if (player.getRepeatMode() == REPEAT_MODE_ONE) {
|
||||||
|
return getAction(player, R.drawable.exo_media_action_repeat_one,
|
||||||
|
R.string.exo_controls_repeat_one_description, ACTION_REPEAT);
|
||||||
|
} else /* player.getRepeatMode() == REPEAT_MODE_OFF */ {
|
||||||
|
return getAction(player, R.drawable.exo_media_action_repeat_off,
|
||||||
|
R.string.exo_controls_repeat_off_description, ACTION_REPEAT);
|
||||||
|
}
|
||||||
|
|
||||||
case NotificationConstants.SHUFFLE:
|
case NotificationConstants.SHUFFLE:
|
||||||
final boolean shuffled = player.playQueue != null && player.playQueue.isShuffled();
|
if (player.playQueue != null && player.playQueue.isShuffled()) {
|
||||||
return getAction(player,
|
return getAction(player, R.drawable.exo_controls_shuffle_on,
|
||||||
shuffled ? R.drawable.exo_controls_shuffle_on
|
R.string.exo_controls_shuffle_on_description, ACTION_SHUFFLE);
|
||||||
: R.drawable.exo_controls_shuffle_off,
|
} else {
|
||||||
shuffled ? "ShuffleOn" : "ShuffleOff",
|
return getAction(player, R.drawable.exo_controls_shuffle_off,
|
||||||
ACTION_SHUFFLE);
|
R.string.exo_controls_shuffle_off_description, ACTION_SHUFFLE);
|
||||||
|
}
|
||||||
|
|
||||||
case NotificationConstants.CLOSE:
|
case NotificationConstants.CLOSE:
|
||||||
return getAction(player, R.drawable.ic_close_white_24dp_png,
|
return getAction(player, R.drawable.ic_close_white_24dp_png,
|
||||||
"Close", ACTION_CLOSE);
|
R.string.close, ACTION_CLOSE);
|
||||||
|
|
||||||
case NotificationConstants.NOTHING:
|
case NotificationConstants.NOTHING:
|
||||||
default:
|
default:
|
||||||
|
@ -293,31 +308,11 @@ public final class NotificationUtil {
|
||||||
|
|
||||||
private NotificationCompat.Action getAction(final VideoPlayerImpl player,
|
private NotificationCompat.Action getAction(final VideoPlayerImpl player,
|
||||||
@DrawableRes final int drawable,
|
@DrawableRes final int drawable,
|
||||||
final String title,
|
@StringRes final int title,
|
||||||
final String intentAction) {
|
final String intentAction) {
|
||||||
return new NotificationCompat.Action(drawable, title, PendingIntent.getBroadcast(
|
return new NotificationCompat.Action(drawable, player.context.getString(title),
|
||||||
player.context, NOTIFICATION_ID, new Intent(intentAction), FLAG_UPDATE_CURRENT));
|
PendingIntent.getBroadcast(player.context, NOTIFICATION_ID,
|
||||||
}
|
new Intent(intentAction), FLAG_UPDATE_CURRENT));
|
||||||
|
|
||||||
@DrawableRes
|
|
||||||
private int getRepeatModeDrawable(final int repeatMode) {
|
|
||||||
if (repeatMode == REPEAT_MODE_ALL) {
|
|
||||||
return R.drawable.exo_controls_repeat_all;
|
|
||||||
} else if (repeatMode == REPEAT_MODE_ONE) {
|
|
||||||
return R.drawable.exo_controls_repeat_one;
|
|
||||||
} else /* repeatMode == REPEAT_MODE_OFF */ {
|
|
||||||
return R.drawable.exo_controls_repeat_off;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getRepeatModeTitle(final int repeatMode) {
|
|
||||||
if (repeatMode == REPEAT_MODE_ALL) {
|
|
||||||
return "RepeatAll";
|
|
||||||
} else if (repeatMode == REPEAT_MODE_ONE) {
|
|
||||||
return "RepeatOne";
|
|
||||||
} else /* repeatMode == REPEAT_MODE_OFF */ {
|
|
||||||
return "RepeatOff";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Intent getIntentForNotification(final VideoPlayerImpl player) {
|
private Intent getIntentForNotification(final VideoPlayerImpl player) {
|
||||||
|
|
|
@ -209,7 +209,7 @@ public class NotificationSettingsFragment extends Fragment {
|
||||||
NotificationConstants.ACTION_ICONS[selectedAction]));
|
NotificationConstants.ACTION_ICONS[selectedAction]));
|
||||||
}
|
}
|
||||||
|
|
||||||
summary.setText(NotificationConstants.ACTION_SUMMARIES[selectedAction]);
|
summary.setText(NotificationConstants.getActionName(requireContext(), selectedAction));
|
||||||
}
|
}
|
||||||
|
|
||||||
void openActionChooserDialog() {
|
void openActionChooserDialog() {
|
||||||
|
@ -225,8 +225,7 @@ public class NotificationSettingsFragment extends Fragment {
|
||||||
.create();
|
.create();
|
||||||
|
|
||||||
final View.OnClickListener radioButtonsClickListener = v -> {
|
final View.OnClickListener radioButtonsClickListener = v -> {
|
||||||
final int id = ((RadioButton) v).getId();
|
selectedAction = NotificationConstants.SLOT_ALLOWED_ACTIONS[i][v.getId()];
|
||||||
selectedAction = NotificationConstants.SLOT_ALLOWED_ACTIONS[i][id];
|
|
||||||
updateInfo();
|
updateInfo();
|
||||||
alertDialog.dismiss();
|
alertDialog.dismiss();
|
||||||
};
|
};
|
||||||
|
@ -253,7 +252,7 @@ public class NotificationSettingsFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
radioButton.setText(NotificationConstants.ACTION_SUMMARIES[action]);
|
radioButton.setText(NotificationConstants.getActionName(requireContext(), action));
|
||||||
radioButton.setChecked(action == selectedAction);
|
radioButton.setChecked(action == selectedAction);
|
||||||
radioButton.setId(id);
|
radioButton.setId(id);
|
||||||
radioButton.setLayoutParams(new RadioGroup.LayoutParams(
|
radioButton.setLayoutParams(new RadioGroup.LayoutParams(
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginLeft="12dp"
|
android:layout_marginLeft="12dp"
|
||||||
android:layout_alignBaseline="@+id/autoplay_switch"
|
android:layout_alignBaseline="@+id/autoplay_switch"
|
||||||
android:text="@string/next_video_title"
|
android:text="@string/exo_controls_next_description"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
tools:ignore="RtlHardcoded" />
|
tools:ignore="RtlHardcoded" />
|
||||||
|
|
|
@ -69,16 +69,9 @@
|
||||||
<string name="notification_actions_summary">Edit each notification action below by tapping on it.\nSelect up to three of them to be shown in the compact notification by using the checkboxes on the right.</string>
|
<string name="notification_actions_summary">Edit each notification action below by tapping on it.\nSelect up to three of them to be shown in the compact notification by using the checkboxes on the right.</string>
|
||||||
<string name="notification_actions_at_most_three">You can select at most three actions to show in the compact notification!</string>
|
<string name="notification_actions_at_most_three">You can select at most three actions to show in the compact notification!</string>
|
||||||
|
|
||||||
<string name="notification_action_previous">Previous</string>
|
|
||||||
<string name="notification_action_next">Next</string>
|
|
||||||
<string name="notification_action_rewind">Rewind</string>
|
|
||||||
<string name="notification_action_forward">Forward</string>
|
|
||||||
<string name="notification_action_smart_rewind_previous">Rewind / Previous</string>
|
|
||||||
<string name="notification_action_smart_forward_next">Forward / Next</string>
|
|
||||||
<string name="notification_action_play_pause_buffering">Play / Pause / Buffering</string>
|
|
||||||
<string name="notification_action_play_pause">Play / Pause</string>
|
|
||||||
<string name="notification_action_repeat">Repeat</string>
|
<string name="notification_action_repeat">Repeat</string>
|
||||||
<string name="notification_action_shuffle">Shuffle</string>
|
<string name="notification_action_shuffle">Shuffle</string>
|
||||||
|
<string name="notification_action_buffering">Buffering</string>
|
||||||
<string name="notification_action_nothing">Nothing</string>
|
<string name="notification_action_nothing">Nothing</string>
|
||||||
|
|
||||||
<string name="play_audio">Audio</string>
|
<string name="play_audio">Audio</string>
|
||||||
|
@ -126,7 +119,6 @@
|
||||||
<string name="resume_on_audio_focus_gain_title">Resume playing</string>
|
<string name="resume_on_audio_focus_gain_title">Resume playing</string>
|
||||||
<string name="resume_on_audio_focus_gain_summary">Continue playing after interruptions (e.g. phonecalls)</string>
|
<string name="resume_on_audio_focus_gain_summary">Continue playing after interruptions (e.g. phonecalls)</string>
|
||||||
<string name="download_dialog_title">Download</string>
|
<string name="download_dialog_title">Download</string>
|
||||||
<string name="next_video_title">Next</string>
|
|
||||||
<string name="autoplay_title">Autoplay</string>
|
<string name="autoplay_title">Autoplay</string>
|
||||||
<string name="show_next_and_similar_title">Show \'Next\' and \'Similar\' videos</string>
|
<string name="show_next_and_similar_title">Show \'Next\' and \'Similar\' videos</string>
|
||||||
<string name="show_hold_to_append_title">Show \"Hold to append\" tip</string>
|
<string name="show_hold_to_append_title">Show \"Hold to append\" tip</string>
|
||||||
|
@ -159,7 +151,6 @@
|
||||||
<string name="background_player_append">Queued on background player</string>
|
<string name="background_player_append">Queued on background player</string>
|
||||||
<string name="popup_playing_append">Queued on popup player</string>
|
<string name="popup_playing_append">Queued on popup player</string>
|
||||||
<string name="c3s_url" translatable="false">https://www.c3s.cc/</string>
|
<string name="c3s_url" translatable="false">https://www.c3s.cc/</string>
|
||||||
<string name="play_btn_text">Play</string>
|
|
||||||
<string name="content">Content</string>
|
<string name="content">Content</string>
|
||||||
<string name="show_age_restricted_content_title">Age restricted content</string>
|
<string name="show_age_restricted_content_title">Age restricted content</string>
|
||||||
<string name="video_is_age_restricted">Show age restricted video. Future changes are possible from the settings.</string>
|
<string name="video_is_age_restricted">Show age restricted video. Future changes are possible from the settings.</string>
|
||||||
|
|
Loading…
Reference in New Issue