[mobile] add control dialog

pull/123/head
FongMi 3 years ago
parent b0c7a9bd49
commit e009c54738
  1. 40
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 1
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/SiteAdapter.java
  3. 18
      app/src/mobile/java/com/fongmi/android/tv/ui/custom/Pip.java
  4. BIN
      app/src/mobile/res/drawable-nodpi/ic_logo.png
  5. 2
      app/src/mobile/res/drawable/shape_accent_normal.xml
  6. 1
      app/src/mobile/res/values/styles.xml

@ -49,6 +49,7 @@ import com.fongmi.android.tv.ui.custom.CustomKeyDownVod;
import com.fongmi.android.tv.ui.custom.Pip;
import com.fongmi.android.tv.ui.custom.SpaceItemDecoration;
import com.fongmi.android.tv.ui.custom.ViewType;
import com.fongmi.android.tv.ui.custom.dialog.ControlDialog;
import com.fongmi.android.tv.ui.custom.dialog.EpisodeDialog;
import com.fongmi.android.tv.ui.custom.dialog.TrackDialog;
import com.fongmi.android.tv.utils.Clock;
@ -72,19 +73,18 @@ import java.util.concurrent.Executors;
import tv.danmaku.ijk.media.player.ui.IjkVideoView;
public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, Clock.Callback, FlagAdapter.OnClickListener, EpisodeAdapter.OnClickListener, ParseAdapter.OnClickListener {
public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ControlDialog.Listener, Clock.Callback, FlagAdapter.OnClickListener, EpisodeAdapter.OnClickListener, ParseAdapter.OnClickListener {
private ViewGroup.LayoutParams mFrameParams;
private ActivityDetailBinding mBinding;
private EpisodeAdapter mEpisodeAdapter;
private SearchAdapter mSearchAdapter;
private EpisodeDialog mEpisodeDialog;
private ControlDialog mControlDialog;
private ParseAdapter mParseAdapter;
private CustomKeyDownVod mKeyDown;
private ExecutorService mExecutor;
private SiteViewModel mViewModel;
private FlagAdapter mFlagAdapter;
private TrackDialog mTrackDialog;
private PipReceiver mReceiver;
private History mHistory;
private Players mPlayers;
@ -255,6 +255,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mBinding.control.action.player.setText(mPlayers.getPlayerText());
getExo().setVisibility(mPlayers.isExo() ? View.VISIBLE : View.GONE);
getIjk().setVisibility(mPlayers.isIjk() ? View.VISIBLE : View.GONE);
mBinding.video.addOnLayoutChangeListener((view, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> mPip.update(getActivity(), view));
}
private void setDecodeView() {
@ -291,7 +292,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
});
mViewModel.episode.observe(this, episode -> {
onItemClick(episode);
hideEpisode();
hideSheet();
});
}
@ -412,8 +413,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void onMore() {
for (Fragment fragment : getSupportFragmentManager().getFragments()) if (fragment instanceof BottomSheetDialogFragment) return;
mEpisodeDialog = EpisodeDialog.create().reverse(mHistory.isRevSort()).episodes(mEpisodeAdapter.getItems());
mEpisodeDialog.show(getSupportFragmentManager(), null);
EpisodeDialog.create().reverse(mHistory.isRevSort()).episodes(mEpisodeAdapter.getItems()).show(getSupportFragmentManager(), null);
}
private void onContent() {
@ -490,14 +490,14 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void onSetting() {
mBinding.control.action.getRoot().setVisibility(View.VISIBLE);
setR1Callback();
for (Fragment fragment : getSupportFragmentManager().getFragments()) if (fragment instanceof BottomSheetDialogFragment) return;
mControlDialog = ControlDialog.create(this).detail(mBinding).players(mPlayers);
mControlDialog.show(getSupportFragmentManager(), null);
}
private void onTrack(View view) {
for (Fragment fragment : getSupportFragmentManager().getFragments()) if (fragment instanceof BottomSheetDialogFragment) return;
mTrackDialog = TrackDialog.create().player(mPlayers).type(Integer.parseInt(view.getTag().toString())).listener(this);
mTrackDialog.show(getSupportFragmentManager(), null);
TrackDialog.create().player(mPlayers).type(Integer.parseInt(view.getTag().toString())).listener(this).show(getSupportFragmentManager(), null);
hideControl();
}
@ -669,14 +669,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
App.removeCallbacks(mR1);
}
private void hideTrack() {
if (mTrackDialog != null) mTrackDialog.dismissAllowingStateLoss();
mTrackDialog = null;
}
private void hideEpisode() {
if (mEpisodeDialog != null) mEpisodeDialog.dismissAllowingStateLoss();
mEpisodeDialog = null;
private void hideSheet() {
for (Fragment fragment : getSupportFragmentManager().getFragments()) if (fragment instanceof BottomSheetDialogFragment) ((BottomSheetDialogFragment) fragment).dismiss();
}
private void setTraffic() {
@ -818,6 +812,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mBinding.control.action.text.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_TEXT) ? View.VISIBLE : View.GONE);
mBinding.control.action.audio.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_AUDIO) ? View.VISIBLE : View.GONE);
mBinding.control.action.video.setVisibility(visible && mPlayers.haveTrack(C.TRACK_TYPE_VIDEO) ? View.VISIBLE : View.GONE);
if (mControlDialog != null && mControlDialog.isVisible()) mControlDialog.setTrackVisible();
}
private void setDefaultTrack() {
@ -1010,6 +1005,12 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
adapter.notifyItemRangeChanged(0, adapter.getItemCount());
}
@Override
public void onScale(int tag) {
mHistory.setScale(tag);
setScale(tag);
}
@Override
public void onSpeedUp() {
mBinding.control.action.speed.setText(mPlayers.setSpeed(mPlayers.getSpeed() < 3 ? 3 : 5));
@ -1101,8 +1102,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mReceiver.register(this);
enterFullscreen();
hideControl();
hideEpisode();
hideTrack();
hideSheet();
} else {
exitFullscreen();
mReceiver.unregister(this);

@ -66,7 +66,6 @@ public class SiteAdapter extends RecyclerView.Adapter<SiteAdapter.ViewHolder> {
holder.binding.text.setEnabled(!search || change);
holder.binding.text.setFocusable(!search || change);
holder.binding.text.setActivated(item.isActivated());
holder.binding.search.setActivated(item.isActivated());
holder.binding.search.setImageResource(item.getSearchIcon());
holder.binding.change.setImageResource(item.getChangeIcon());
holder.binding.search.setVisibility(search ? View.VISIBLE : View.GONE);

@ -5,8 +5,11 @@ import android.app.PendingIntent;
import android.app.PictureInPictureParams;
import android.app.RemoteAction;
import android.content.Intent;
import android.graphics.Rect;
import android.graphics.drawable.Icon;
import android.os.Build;
import android.util.Rational;
import android.view.View;
import com.fongmi.android.tv.utils.Utils;
@ -29,20 +32,29 @@ public class Pip {
this.builder = new PictureInPictureParams.Builder();
}
public void update(Activity activity, View view) {
if (!Utils.hasPIP()) return;
Rect sourceRectHint = new Rect();
view.getGlobalVisibleRect(sourceRectHint);
builder.setSourceRectHint(sourceRectHint);
activity.setPictureInPictureParams(builder.build());
}
public void update(Activity activity, boolean play) {
if (!Utils.hasPIP()) return;
List<RemoteAction> actions = new ArrayList<>();
actions.add(new RemoteAction(Icon.createWithResource(activity, com.google.android.exoplayer2.ui.R.drawable.exo_icon_previous), "", "", PendingIntent.getBroadcast(activity, CONTROL_TYPE_PREV, new Intent(ACTION_MEDIA_CONTROL).putExtra(EXTRA_CONTROL_TYPE, CONTROL_TYPE_PREV), 0)));
actions.add(new RemoteAction(Icon.createWithResource(activity, play ? com.google.android.exoplayer2.ui.R.drawable.exo_icon_pause : com.google.android.exoplayer2.ui.R.drawable.exo_icon_play), "", "", PendingIntent.getBroadcast(activity, CONTROL_TYPE_PLAY, new Intent(ACTION_MEDIA_CONTROL).putExtra(EXTRA_CONTROL_TYPE, CONTROL_TYPE_PLAY), 0)));
actions.add(new RemoteAction(Icon.createWithResource(activity, com.google.android.exoplayer2.ui.R.drawable.exo_icon_next), "", "", PendingIntent.getBroadcast(activity, CONTROL_TYPE_NEXT, new Intent(ACTION_MEDIA_CONTROL).putExtra(EXTRA_CONTROL_TYPE, CONTROL_TYPE_NEXT), 0)));
builder.setActions(actions);
activity.setPictureInPictureParams(builder.build());
activity.setPictureInPictureParams(builder.setActions(actions).build());
}
public void enter(Activity activity, boolean four) {
try {
if (!Utils.hasPIP() || activity.isInPictureInPictureMode()) return;
builder.setAspectRatio(new Rational(four ? 4 : 16, four ? 3 : 9)).build();
builder.setAspectRatio(new Rational(four ? 4 : 16, four ? 3 : 9));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) builder.setAutoEnterEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) builder.setSeamlessResizeEnabled(true);
activity.enterPictureInPictureMode(builder.build());
} catch (Exception e) {
e.printStackTrace();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 109 KiB

@ -2,7 +2,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/grey_700" />
<solid android:color="@color/black_50" />
<corners android:radius="4dp" />

@ -25,6 +25,7 @@
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:background">?attr/selectableItemBackgroundBorderless</item>
<item name="android:padding">4dp</item>
<item name="android:layout_marginEnd">16dp</item>
<item name="android:shadowColor">@color/grey_200</item>
<item name="android:shadowDx">1</item>

Loading…
Cancel
Save