summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java54
-rw-r--r--app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java62
2 files changed, 116 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
index 30b336457..5a59cda01 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/MainActivity.java
@@ -6,6 +6,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
@@ -13,6 +14,7 @@ import android.os.Looper;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
+import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@@ -23,6 +25,7 @@ import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
+import androidx.core.content.ContextCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -34,6 +37,8 @@ import com.google.android.material.snackbar.Snackbar;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.event.MessageEvent;
import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.receiver.MediaButtonReceiver;
+import de.danoeh.antennapod.core.service.playback.PlaybackService;
import de.danoeh.antennapod.core.util.StorageUtils;
import de.danoeh.antennapod.core.util.ThemeUtils;
import de.danoeh.antennapod.core.util.download.AutoUpdateManager;
@@ -517,4 +522,53 @@ public class MainActivity extends CastEnabledActivity {
public Snackbar showSnackbarAbovePlayer(int text, int duration) {
return showSnackbarAbovePlayer(getResources().getText(text), duration);
}
+
+ //Hardware keyboard support
+ @Override
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
+ Integer customKeyCode = null;
+
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_P:
+ customKeyCode = KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
+ break;
+ case KeyEvent.KEYCODE_J: //Fallthrough
+ case KeyEvent.KEYCODE_A:
+ case KeyEvent.KEYCODE_COMMA:
+ customKeyCode = KeyEvent.KEYCODE_MEDIA_REWIND;
+ break;
+ case KeyEvent.KEYCODE_K: //Fallthrough
+ case KeyEvent.KEYCODE_D:
+ case KeyEvent.KEYCODE_PERIOD:
+ customKeyCode = KeyEvent.KEYCODE_MEDIA_FAST_FORWARD;
+ break;
+ case KeyEvent.KEYCODE_PLUS: //Fallthrough
+ case KeyEvent.KEYCODE_W:
+ audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
+ AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
+ return true;
+ case KeyEvent.KEYCODE_MINUS: //Fallthrough
+ case KeyEvent.KEYCODE_S:
+ audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
+ AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
+ return true;
+ case KeyEvent.KEYCODE_M:
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
+ AudioManager.ADJUST_TOGGLE_MUTE, AudioManager.FLAG_SHOW_UI);
+ return true;
+ }
+ break;
+ }
+
+ if (customKeyCode != null) {
+ Intent intent = new Intent(this, PlaybackService.class);
+ intent.putExtra(MediaButtonReceiver.EXTRA_KEYCODE, customKeyCode);
+ ContextCompat.startForegroundService(this, intent);
+ return true;
+ }
+ return super.onKeyUp(keyCode, event);
+ }
+
}
diff --git a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
index c3cb6b0ba..2d4510e8f 100644
--- a/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
+++ b/app/src/main/java/de/danoeh/antennapod/activity/VideoplayerActivity.java
@@ -3,14 +3,18 @@ package de.danoeh.antennapod.activity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
+import android.media.AudioManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
+import android.view.KeyEvent;
import android.view.animation.AlphaAnimation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.widget.ImageView;
+
+import androidx.appcompat.view.menu.ActionMenuItem;
import androidx.core.view.WindowCompat;
import androidx.appcompat.app.ActionBar;
import android.text.TextUtils;
@@ -481,4 +485,62 @@ public class VideoplayerActivity extends MediaplayerActivity {
}
+
+ //Hardware keyboard support
+ @Override
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
+
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_P: //Fallthrough
+ case KeyEvent.KEYCODE_SPACE:
+ onPlayPause();
+ toggleVideoControlsVisibility();
+ return true;
+ case KeyEvent.KEYCODE_J: //Fallthrough
+ case KeyEvent.KEYCODE_A:
+ case KeyEvent.KEYCODE_COMMA:
+ onRewind();
+ showSkipAnimation(false);
+ return true;
+ case KeyEvent.KEYCODE_K: //Fallthrough
+ case KeyEvent.KEYCODE_D:
+ case KeyEvent.KEYCODE_PERIOD:
+ onFastForward();
+ showSkipAnimation(true);
+ return true;
+ case KeyEvent.KEYCODE_F: //Fallthrough
+ case KeyEvent.KEYCODE_ESCAPE:
+ //Exit fullscreen mode
+ onBackPressed();
+ return true;
+ case KeyEvent.KEYCODE_I:
+ compatEnterPictureInPicture();
+ return true;
+ case KeyEvent.KEYCODE_PLUS: //Fallthrough
+ case KeyEvent.KEYCODE_W:
+ audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
+ AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
+ return true;
+ case KeyEvent.KEYCODE_MINUS: //Fallthrough
+ case KeyEvent.KEYCODE_S:
+ audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
+ AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
+ return true;
+ case KeyEvent.KEYCODE_M:
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ audioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,
+ AudioManager.ADJUST_TOGGLE_MUTE, AudioManager.FLAG_SHOW_UI);
+ return true;
+ }
+ break;
+ }
+
+ //Go to x% of video:
+ if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) {
+ controller.seekTo((int) (0.1f * (keyCode - KeyEvent.KEYCODE_0) * controller.getDuration()));
+ return true;
+ }
+ return super.onKeyUp(keyCode, event);
+ }
}