Skip to content

Commit

Permalink
Added loop mode switcher to the notification
Browse files Browse the repository at this point in the history
Added system dark mode support for notification
Some other fixes
  • Loading branch information
nt4f04uNd committed Dec 29, 2019
1 parent 2f11364 commit 2e2ed55
Show file tree
Hide file tree
Showing 181 changed files with 3,646 additions and 567 deletions.
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -72,4 +72,3 @@
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
ios/Flutter/flutter_export_environment.sh
70 changes: 37 additions & 33 deletions android/app/src/main/java/com/nt4f04uNd/sweyer/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
package com.nt4f04uNd.sweyer;

public class Constants {
public static final String PACKAGE_NAME = "com.nt4f04und.sweyer.";
public static final String PACKAGE_NAME = "com.nt4f04und.sweyer";
public static final String DOTTED_PACKAGE_NAME = "com.nt4f04und.sweyer.";
public static final String LogTag = PACKAGE_NAME;

public static final class player {
Expand All @@ -18,77 +19,80 @@ public static final class channels {

//****************PLAYER***************************************************************************************
public static final class player {
public static final String CHANNEL_NAME = PACKAGE_NAME + "PLAYER_CHANNEL";
public static final String CHANNEL_NAME = DOTTED_PACKAGE_NAME + "PLAYER_CHANNEL";
}


//****************EVENTS***************************************************************************************
public static final class events {
public static final String CHANNEL_NAME = PACKAGE_NAME + "EVENT_CHANNEL";
public static final String CHANNEL_NAME = DOTTED_PACKAGE_NAME + "EVENT_CHANNEL";

public static final String BECOME_NOISY = PACKAGE_NAME + "EVENT_BECAME_NOISY";
public static final String BECOME_NOISY = DOTTED_PACKAGE_NAME + "EVENT_BECAME_NOISY";

// Notification
public static final String NOTIFICATION_CHANNEL_ID = PACKAGE_NAME + "EVENT_NOTIFICATION_CHANNEL";
public static final String NOTIFICATION_INTENT_PLAY = PACKAGE_NAME + "EVENT_NOTIFICATION_PLAY";
public static final String NOTIFICATION_INTENT_PAUSE = PACKAGE_NAME + "EVENT_NOTIFICATION_PAUSE";
public static final String NOTIFICATION_INTENT_NEXT = PACKAGE_NAME + "EVENT_NOTIFICATION_NEXT";
public static final String NOTIFICATION_INTENT_PREV = PACKAGE_NAME + "EVENT_NOTIFICATION_PREV";
public static final String NOTIFICATION_CHANNEL_ID = DOTTED_PACKAGE_NAME + "EVENT_NOTIFICATION_CHANNEL";
public static final String NOTIFICATION_INTENT_PLAY = DOTTED_PACKAGE_NAME + "EVENT_NOTIFICATION_PLAY";
public static final String NOTIFICATION_INTENT_PAUSE = DOTTED_PACKAGE_NAME + "EVENT_NOTIFICATION_PAUSE";
public static final String NOTIFICATION_INTENT_NEXT = DOTTED_PACKAGE_NAME + "EVENT_NOTIFICATION_NEXT";
public static final String NOTIFICATION_INTENT_PREV = DOTTED_PACKAGE_NAME + "EVENT_NOTIFICATION_PREV";
public static final String NOTIFICATION_INTENT_KILL_SERVICE = DOTTED_PACKAGE_NAME + "EVENT_NOTIFICATION_KILL_SERVICE";
public static final String NOTIFICATION_INTENT_LOOP = DOTTED_PACKAGE_NAME + "EVENT_NOTIFICATION_LOOP";
public static final String NOTIFICATION_INTENT_LOOP_ON = DOTTED_PACKAGE_NAME + "EVENT_NOTIFICATION_LOOP_ON";


// Audio focus
public static final String AUDIOFOCUS_GAIN = PACKAGE_NAME + "EVENT_AUDIOFOCUS_GAIN";
public static final String AUDIOFOCUS_LOSS = PACKAGE_NAME + "EVENT_AUDIOFOCUS_LOSS";
public static final String AUDIOFOCUS_LOSS_TRANSIENT = PACKAGE_NAME + "EVENT_AUDIOFOCUS_LOSS_TRANSIENT";
public static final String AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK = PACKAGE_NAME + "EVENT_AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK";
public static final String AUDIOFOCUS_GAIN = DOTTED_PACKAGE_NAME + "EVENT_AUDIOFOCUS_GAIN";
public static final String AUDIOFOCUS_LOSS = DOTTED_PACKAGE_NAME + "EVENT_AUDIOFOCUS_LOSS";
public static final String AUDIOFOCUS_LOSS_TRANSIENT = DOTTED_PACKAGE_NAME + "EVENT_AUDIOFOCUS_LOSS_TRANSIENT";
public static final String AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK = DOTTED_PACKAGE_NAME + "EVENT_AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK";

// Media button events
// see
// https://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_MEDIA_AUDIO_TRACK
// for key codes docs
public static final String MEDIABUTTON_AUDIO_TRACK = PACKAGE_NAME + "EVENT_MEDIABUTTON_AUDIO_TRACK";
public static final String MEDIABUTTON_FAST_FORWARD = PACKAGE_NAME + "EVENT_MEDIABUTTON_FAST_FORWARD";
public static final String MEDIABUTTON_REWIND = PACKAGE_NAME + "EVENT_MEDIABUTTON_REWIND";
public static final String MEDIABUTTON_NEXT = PACKAGE_NAME + "EVENT_MEDIABUTTON_NEXT";
public static final String MEDIABUTTON_PREVIOUS = PACKAGE_NAME + "EVENT_MEDIABUTTON_PREVIOUS";
public static final String MEDIABUTTON_PLAY_PAUSE = PACKAGE_NAME + "EVENT_MEDIABUTTON_PLAY_PAUSE";
public static final String MEDIABUTTON_PLAY = PACKAGE_NAME + "EVENT_MEDIABUTTON_PLAY";
public static final String MEDIABUTTON_STOP = PACKAGE_NAME + "EVENT_MEDIABUTTON_STOP";
public static final String MEDIABUTTON_AUDIO_TRACK = DOTTED_PACKAGE_NAME + "EVENT_MEDIABUTTON_AUDIO_TRACK";
public static final String MEDIABUTTON_FAST_FORWARD = DOTTED_PACKAGE_NAME + "EVENT_MEDIABUTTON_FAST_FORWARD";
public static final String MEDIABUTTON_REWIND = DOTTED_PACKAGE_NAME + "EVENT_MEDIABUTTON_REWIND";
public static final String MEDIABUTTON_NEXT = DOTTED_PACKAGE_NAME + "EVENT_MEDIABUTTON_NEXT";
public static final String MEDIABUTTON_PREVIOUS = DOTTED_PACKAGE_NAME + "EVENT_MEDIABUTTON_PREVIOUS";
public static final String MEDIABUTTON_PLAY_PAUSE = DOTTED_PACKAGE_NAME + "EVENT_MEDIABUTTON_PLAY_PAUSE";
public static final String MEDIABUTTON_PLAY = DOTTED_PACKAGE_NAME + "EVENT_MEDIABUTTON_PLAY";
public static final String MEDIABUTTON_STOP = DOTTED_PACKAGE_NAME + "EVENT_MEDIABUTTON_STOP";
// Bare hook event
public static final String MEDIABUTTON_HOOK = PACKAGE_NAME + "EVENT_MEDIABUTTON_HOOK";
public static final String MEDIABUTTON_HOOK = DOTTED_PACKAGE_NAME + "EVENT_MEDIABUTTON_HOOK";

// Composed hook events
/** When pressed hook once */
public static final String HOOK_PLAY_PAUSE = PACKAGE_NAME + "EVENT_HOOK_PLAY_PAUSE";
public static final String HOOK_PLAY_PAUSE = DOTTED_PACKAGE_NAME + "EVENT_HOOK_PLAY_PAUSE";
/** When pressed hook twice */
public static final String HOOK_PLAY_NEXT = PACKAGE_NAME + "EVENT_HOOK_PLAY_NEXT";
public static final String HOOK_PLAY_NEXT = DOTTED_PACKAGE_NAME + "EVENT_HOOK_PLAY_NEXT";
/** When pressed hook thrice */
public static final String HOOK_PLAY_PREV = PACKAGE_NAME + "EVENT_HOOK_PLAY_PREV";
public static final String HOOK_PLAY_PREV = DOTTED_PACKAGE_NAME + "EVENT_HOOK_PLAY_PREV";
}


//****************GENERAL***************************************************************************************
public static final class general {
public static final String CHANNEL_NAME = PACKAGE_NAME + "GENERAL_CHANNEL";
public static final String CHANNEL_NAME = DOTTED_PACKAGE_NAME + "GENERAL_CHANNEL";

public static final String METHOD_INTENT_ACTION_VIEW = PACKAGE_NAME + "GENERAL_METHOD_INTENT_ACTION_VIEW";
public static final String METHOD_INTENT_ACTION_VIEW = DOTTED_PACKAGE_NAME + "GENERAL_METHOD_INTENT_ACTION_VIEW";
}

//****************SERVICE***************************************************************************************
public static final class service {
public static final String CHANNEL_NAME = PACKAGE_NAME + "SERVICE_CHANNEL";
public static final String CHANNEL_NAME = DOTTED_PACKAGE_NAME + "SERVICE_CHANNEL";

public static final String METHOD_STOP_SERVICE = PACKAGE_NAME + "SERVICE_METHOD_STOP_SERVICE";
public static final String METHOD_SEND_SONG = PACKAGE_NAME + "SERVICE_METHOD_SEND_SONG";
public static final String METHOD_STOP_SERVICE = DOTTED_PACKAGE_NAME + "SERVICE_METHOD_STOP_SERVICE";
public static final String METHOD_SEND_SONG = DOTTED_PACKAGE_NAME + "SERVICE_METHOD_SEND_SONG";

}

//****************SONGS***************************************************************************************
public static final class songs {
public static final String CHANNEL_NAME = PACKAGE_NAME + "SONGS_CHANNEL";
public static final String CHANNEL_NAME = DOTTED_PACKAGE_NAME + "SONGS_CHANNEL";

public static final String METHOD_RETRIEVE_SONGS = PACKAGE_NAME + "SONGS_METHOD_RETRIEVE_SONGS";
public static final String METHOD_SEND_SONGS = PACKAGE_NAME + "SONGS_METHOD_SEND_SONGS";
public static final String METHOD_RETRIEVE_SONGS = DOTTED_PACKAGE_NAME + "SONGS_METHOD_RETRIEVE_SONGS";
public static final String METHOD_SEND_SONGS = DOTTED_PACKAGE_NAME + "SONGS_METHOD_SEND_SONGS";
}
}
}
11 changes: 7 additions & 4 deletions android/app/src/main/java/com/nt4f04uNd/sweyer/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@
import com.nt4f04uNd.sweyer.channels.SongChannel;
import com.nt4f04uNd.sweyer.handlers.AudioFocusHandler;
import com.nt4f04uNd.sweyer.handlers.GeneralHandler;
import com.nt4f04uNd.sweyer.handlers.MediaButtonHandler;
import com.nt4f04uNd.sweyer.handlers.MediaSessionHandler;
import com.nt4f04uNd.sweyer.handlers.NotificationHandler;
import com.nt4f04uNd.sweyer.handlers.PlayerHandler;
import com.nt4f04uNd.sweyer.handlers.PlaylistHandler;
import com.nt4f04uNd.sweyer.handlers.ServiceHandler;

Expand All @@ -29,20 +30,22 @@ protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);

// Setup handlers
// Setup handlers and channels
// ----------------------------------------------------------------------------------
// Clear playlist kept in memory for background playing
// All the handling for playback now is delegated to a dart side
PlaylistHandler.resetPlaylist();
GeneralHandler.init(getApplicationContext()); // The most important, as it contains app context
PlayerHandler.init(); // Create player
GeneralChannel.init(getFlutterView(), this); // Inits general channel
NotificationHandler.init();
AudioFocusHandler.init();
NativeEventsChannel.init(getFlutterView()); // Inits event channel
PlayerChannel.init(getFlutterView()); // Inits player channel
MediaButtonHandler.init();
MediaSessionHandler.init();
ServiceHandler.init(); // Contains intent to start service
ServiceChannel.init(getFlutterView());
SongChannel.init(getFlutterView());
// ----------------------------------------------------------------------------------
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,14 @@ private static void handleMethodCall(final MethodCall call, final MethodChannel.
result.success(PlayerHandler.isPlaying());
return;
}
case "isLooping": {
result.success(PlayerHandler.isLooping());
return;
}
case "switchLoopMode": {
PlayerHandler.switchLoopMode();
return;
}
case "getDuration": {
result.success(PlayerHandler.getDuration());
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,57 @@

import androidx.annotation.NonNull;

public class MediaButtonHandler {
public class MediaSessionHandler {
public static void init() {
if (audioSession == null) {
// TODO: change tag maybe and move it to Constants
audioSession = new MediaSession(GeneralHandler.getAppContext(), "TAG");
audioSession.setCallback(new MediaSession.Callback() {
if (mediaSession == null) {
mediaSession = new MediaSession(GeneralHandler.getAppContext(), Constants.PACKAGE_NAME);
mediaSession.setCallback(new MediaSession.Callback() {

// TODO: implement remaining methods
final String prefix = "PREFIX PREFIX PREFIX PREFIX PREFIX";
@Override
public void onFastForward() {
GeneralHandler.print(prefix+"FAST_FORWARD");
}

@Override
public void onPause() {
GeneralHandler.print(prefix+"PAUSE");
}

@Override
public void onPlay() {
GeneralHandler.print(prefix+"PLAY");
}

@Override
public void onRewind() {
GeneralHandler.print(prefix+"REWIND");
}

@Override
public void onSeekTo(long pos) {
GeneralHandler.print(prefix+"SEEK");
}

@Override
public void onSkipToNext() {
GeneralHandler.print(prefix+"SKIP_NEXT");
}

@Override
public void onSkipToPrevious() {
GeneralHandler.print(prefix+"SKIP_PREV");
}

@Override
public void onStop() {
GeneralHandler.print(prefix+"STOP");
}

@Override
public boolean onMediaButtonEvent(@NonNull final Intent mediaButtonIntent) {

String intentAction = mediaButtonIntent.getAction();
if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
KeyEvent event = mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
Expand All @@ -42,23 +85,23 @@ public boolean onMediaButtonEvent(@NonNull final Intent mediaButtonIntent) {
}
});

audioSession.setActive(true);
mediaSession.setActive(true);

addListener(new ImplementedOnMediaButtonListener());
}
}

private static MediaSession audioSession;
private static MediaSession mediaSession;
private static ArrayList<OnMediaButtonListener> listeners = new ArrayList<>(0);

public static void addListener(OnMediaButtonListener listener) {
listeners.add(listener);
}

public static void release() {
if (audioSession != null) {
audioSession.release();
audioSession = null;
if (mediaSession != null) {
mediaSession.release();
mediaSession = null;
listeners = new ArrayList<>(0);
}
}
Expand Down
Loading

0 comments on commit 2e2ed55

Please sign in to comment.