Skip to content

Commit

Permalink
Remove key listener from BaseActivity
Browse files Browse the repository at this point in the history
  • Loading branch information
nielsvanvelzen committed Sep 29, 2022
1 parent fe6fcbe commit ab3710f
Show file tree
Hide file tree
Showing 12 changed files with 193 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@
import org.jellyfin.androidtv.ui.presentation.CardPresenter;
import org.jellyfin.androidtv.ui.presentation.HorizontalGridPresenter;
import org.jellyfin.androidtv.ui.shared.BaseActivity;
import org.jellyfin.androidtv.ui.shared.KeyListener;
import org.jellyfin.androidtv.ui.shared.MessageListener;
import org.jellyfin.androidtv.util.CoroutineUtils;
import org.jellyfin.androidtv.util.ImageUtils;
Expand All @@ -80,7 +79,7 @@
import kotlinx.serialization.json.Json;
import timber.log.Timber;

public class BrowseGridFragment extends Fragment {
public class BrowseGridFragment extends Fragment implements View.OnKeyListener {
private final static int CHUNK_SIZE_MINIMUM = 25;

private String mainTitle;
Expand Down Expand Up @@ -218,6 +217,18 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
addTools();
}

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) return false;

if (keyCode == KeyEvent.KEYCODE_MEDIA_PLAY || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) {
mediaManager.getValue().setCurrentMediaAdapter(mAdapter);
mediaManager.getValue().setCurrentMediaPosition(mCurrentItem.getIndex());
mediaManager.getValue().setCurrentMediaTitle(mFolder.getName());
}
return KeyProcessor.HandleKey(keyCode, mCurrentItem, mActivity);
}

@Override
public void onDestroyView() {
super.onDestroyView();
Expand Down Expand Up @@ -913,18 +924,6 @@ else if (mGridPresenter instanceof VerticalGridPresenter)
mSelectedListener.registerListener(new ItemViewSelectedListener());

if (mActivity != null) {
mActivity.registerKeyListener(new KeyListener() {
@Override
public boolean onKeyUp(int key, KeyEvent event) {
if (key == KeyEvent.KEYCODE_MEDIA_PLAY || key == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE) {
mediaManager.getValue().setCurrentMediaAdapter(mAdapter);
mediaManager.getValue().setCurrentMediaPosition(mCurrentItem.getIndex());
mediaManager.getValue().setCurrentMediaTitle(mFolder.getName());
}
return KeyProcessor.HandleKey(key, mCurrentItem, mActivity);
}
});

mActivity.registerMessageListener(new MessageListener() {
@Override
public void onMessageReceived(CustomMessage message) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
package org.jellyfin.androidtv.ui.browsing

import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.ui.shared.BaseActivity

class BrowseRecordingsActivity : BaseActivity() {
class BrowseRecordingsActivity : BaseActivity(R.layout.fragment_content_view) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

supportFragmentManager
.beginTransaction()
.replace(android.R.id.content, BrowseRecordingsFragment())
.commit()
supportFragmentManager.commit {
replace<BrowseRecordingsFragment>(R.id.content_view)
}
}

// Forward key events to fragments
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean = supportFragmentManager.fragments
.filter { it.isVisible }
.filterIsInstance<View.OnKeyListener>()
.any { it.onKey(currentFocus, keyCode, event) }

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyDown(keyCode, event)

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyUp(keyCode, event)
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
package org.jellyfin.androidtv.ui.browsing

import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.ui.shared.BaseActivity

class BrowseScheduleActivity : BaseActivity() {
class BrowseScheduleActivity : BaseActivity(R.layout.fragment_content_view) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

supportFragmentManager
.beginTransaction()
.replace(android.R.id.content, BrowseScheduleFragment())
.commit()
supportFragmentManager.commit {
replace<BrowseScheduleFragment>(R.id.content_view)
}
}

// Forward key events to fragments
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean = supportFragmentManager.fragments
.filter { it.isVisible }
.filterIsInstance<View.OnKeyListener>()
.any { it.onKey(currentFocus, keyCode, event) }

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyDown(keyCode, event)

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyUp(keyCode, event)
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
package org.jellyfin.androidtv.ui.browsing

import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.ui.shared.BaseActivity

class CollectionActivity : BaseActivity() {
class CollectionActivity : BaseActivity(R.layout.fragment_content_view) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

supportFragmentManager
.beginTransaction()
.replace(android.R.id.content, CollectionFragment())
.commit()
supportFragmentManager.commit {
replace<CollectionFragment>(R.id.content_view)
}
}

// Forward key events to fragments
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean = supportFragmentManager.fragments
.filter { it.isVisible }
.filterIsInstance<View.OnKeyListener>()
.any { it.onKey(currentFocus, keyCode, event) }

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyDown(keyCode, event)

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyUp(keyCode, event)
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
import org.jellyfin.androidtv.ui.presentation.MutableObjectAdapter;
import org.jellyfin.androidtv.ui.presentation.PositionableListRowPresenter;
import org.jellyfin.androidtv.ui.shared.BaseActivity;
import org.jellyfin.androidtv.ui.shared.KeyListener;
import org.jellyfin.androidtv.ui.shared.MessageListener;
import org.jellyfin.androidtv.util.InfoLayoutHelper;
import org.jellyfin.androidtv.util.KeyProcessor;
Expand All @@ -70,7 +69,7 @@
import kotlin.Lazy;
import kotlinx.serialization.json.Json;

public class EnhancedBrowseFragment extends Fragment implements RowLoader {
public class EnhancedBrowseFragment extends Fragment implements RowLoader, View.OnKeyListener {
protected FragmentActivity mActivity;

protected TextView mTitle;
Expand Down Expand Up @@ -332,13 +331,6 @@ protected void setupEventListeners() {
mRowsFragment.setOnItemViewSelectedListener(mSelectedListener);
mSelectedListener.registerListener(new ItemViewSelectedListener());
if (mActivity != null && mActivity instanceof BaseActivity) {
((BaseActivity) mActivity).registerKeyListener(new KeyListener() {
@Override
public boolean onKeyUp(int key, KeyEvent event) {
return KeyProcessor.HandleKey(key, mCurrentItem, ((BaseActivity) mActivity));
}
});

((BaseActivity) mActivity).registerMessageListener(new MessageListener() {
@Override
public void onMessageReceived(CustomMessage message) {
Expand All @@ -352,6 +344,12 @@ public void onMessageReceived(CustomMessage message) {
}
}

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() != KeyEvent.ACTION_DOWN) return false;
return KeyProcessor.HandleKey(keyCode, mCurrentItem, mActivity);
}

private void refreshCurrentItem() {
if (mCurrentItem != null &&
mCurrentItem.getBaseItemType() != BaseItemKind.PHOTO &&
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
package org.jellyfin.androidtv.ui.browsing

import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.ui.shared.BaseActivity

class GenericFolderActivity : BaseActivity() {
class GenericFolderActivity : BaseActivity(R.layout.fragment_content_view) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

supportFragmentManager
.beginTransaction()
.replace(android.R.id.content, GenericFolderFragment())
.commit()
supportFragmentManager.commit {
replace<GenericFolderFragment>(R.id.content_view)
}
}

// Forward key events to fragments
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean = supportFragmentManager.fragments
.filter { it.isVisible }
.filterIsInstance<View.OnKeyListener>()
.any { it.onKey(currentFocus, keyCode, event) }

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyDown(keyCode, event)

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyUp(keyCode, event)
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
package org.jellyfin.androidtv.ui.browsing

import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.add
import androidx.fragment.app.commit
import org.jellyfin.androidtv.R

class GenericGridActivity : FragmentActivity() {
class GenericGridActivity : FragmentActivity(R.layout.fragment_content_view) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

supportFragmentManager
.beginTransaction()
.replace(android.R.id.content, BrowseGridFragment())
.commit()
supportFragmentManager.commit {
add<BrowseGridFragment>(R.id.content_view)
}
}

// Forward key events to fragments
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean = supportFragmentManager.fragments
.filter { it.isVisible }
.filterIsInstance<View.OnKeyListener>()
.any { it.onKey(currentFocus, keyCode, event) }

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyDown(keyCode, event)

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyUp(keyCode, event)
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package org.jellyfin.androidtv.ui.browsing

import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.fragment.app.add
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.data.service.BackgroundService
Expand All @@ -16,12 +19,23 @@ class MainActivity : BaseActivity(R.layout.fragment_content_view) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

supportFragmentManager
.beginTransaction()
.replace<HomeToolbarFragment>(R.id.content_view)
.add<HomeFragment>(R.id.content_view)
.commit()
supportFragmentManager.commit {
replace<HomeToolbarFragment>(R.id.content_view)
add<HomeFragment>(R.id.content_view)
}

backgroundService.attach(this)
}

// Forward key events to fragments
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean = supportFragmentManager.fragments
.filter { it.isVisible }
.filterIsInstance<View.OnKeyListener>()
.any { it.onKey(currentFocus, keyCode, event) }

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyDown(keyCode, event)

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyUp(keyCode, event)
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
package org.jellyfin.androidtv.ui.browsing

import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.ui.shared.BaseActivity

class SuggestedMoviesActivity : BaseActivity() {
class SuggestedMoviesActivity : BaseActivity(R.layout.fragment_content_view) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

supportFragmentManager
.beginTransaction()
.replace(android.R.id.content, SuggestedMoviesFragment())
.commit()
supportFragmentManager.commit {
replace<SuggestedMoviesFragment>(R.id.content_view)
}
}

// Forward key events to fragments
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean = supportFragmentManager.fragments
.filter { it.isVisible }
.filterIsInstance<View.OnKeyListener>()
.any { it.onKey(currentFocus, keyCode, event) }

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyDown(keyCode, event)

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyUp(keyCode, event)
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
package org.jellyfin.androidtv.ui.browsing

import android.os.Bundle
import android.view.KeyEvent
import android.view.View
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import org.jellyfin.androidtv.R
import org.jellyfin.androidtv.ui.shared.BaseActivity

class UserViewActivity : BaseActivity() {
class UserViewActivity : BaseActivity(R.layout.fragment_content_view) {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

supportFragmentManager
.beginTransaction()
.replace(android.R.id.content, BrowseViewFragment())
.commit()
supportFragmentManager.commit {
replace<BrowseViewFragment>(R.id.content_view)
}
}

// Forward key events to fragments
private fun onKeyEvent(keyCode: Int, event: KeyEvent?): Boolean = supportFragmentManager.fragments
.filter { it.isVisible }
.filterIsInstance<View.OnKeyListener>()
.any { it.onKey(currentFocus, keyCode, event) }

override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyDown(keyCode, event)

override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean =
onKeyEvent(keyCode, event) || super.onKeyUp(keyCode, event)
}
Loading

0 comments on commit ab3710f

Please sign in to comment.