Support track db - part 1

pull/123/head
FongMi 3 years ago
parent a24ce66bea
commit 04f2386f20
  1. 12
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 71
      app/src/main/java/com/fongmi/android/tv/bean/Track.java
  3. 8
      app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
  4. 27
      app/src/main/java/com/fongmi/android/tv/db/dao/TrackDao.java
  5. 4
      app/src/main/java/com/fongmi/android/tv/ui/adapter/TrackAdapter.java
  6. 24
      app/src/main/java/com/fongmi/android/tv/ui/custom/TrackSelectionDialog.java

@ -29,6 +29,7 @@ import com.fongmi.android.tv.bean.Parse;
import com.fongmi.android.tv.bean.Part;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Track;
import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.databinding.ActivityDetailBinding;
import com.fongmi.android.tv.db.AppDatabase;
@ -74,7 +75,7 @@ import okhttp3.Call;
import okhttp3.Response;
import tv.danmaku.ijk.media.player.ui.IjkVideoView;
public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, ArrayPresenter.OnClickListener, Clock.Callback {
public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackSelectionDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback {
private ActivityDetailBinding mBinding;
private ViewGroup.LayoutParams mFrameParams;
@ -597,7 +598,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void onTrack(View view) {
int type = Integer.parseInt(view.getTag().toString());
TrackSelectionDialog.create(this).player(mPlayers).type(type).show();
TrackSelectionDialog.create(this).player(mPlayers).type(type).listener(this).show();
hideControl();
}
@ -733,6 +734,13 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
keep.save();
}
@Override
public void onTrackClick(Track item) {
item.setPlayer(mPlayers.getPlayer());
item.setKey(getHistoryKey());
item.save();
}
@Override
public void onTimeChanged() {
long current = mPlayers.getPosition();

@ -1,22 +1,46 @@
package com.fongmi.android.tv.bean;
import androidx.annotation.NonNull;
import androidx.room.Entity;
import androidx.room.Index;
import androidx.room.PrimaryKey;
import com.fongmi.android.tv.db.AppDatabase;
import java.util.List;
@Entity(indices = @Index(value = {"key", "player", "type"}, unique = true))
public class Track {
@PrimaryKey(autoGenerate = true)
private int id;
private int type;
private int group;
private int track;
private int player;
private String key;
private String name;
private boolean selected;
public Track(String name) {
public Track(int type, String name) {
this.type = type;
this.name = name;
}
public String getName() {
return name;
public int getId() {
return id;
}
public void setName(String name) {
this.name = name;
public void setId(int id) {
this.id = id;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getGroup() {
@ -35,6 +59,30 @@ public class Track {
this.track = track;
}
public int getPlayer() {
return player;
}
public void setPlayer(int player) {
this.player = player;
}
public String getKey() {
return key;
}
public void setKey(@NonNull String key) {
this.key = key;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isSelected() {
return selected;
}
@ -42,4 +90,17 @@ public class Track {
public void setSelected(boolean selected) {
this.selected = selected;
}
public Track toggle() {
setSelected(!isSelected());
return this;
}
public void save() {
AppDatabase.get().getTrackDao().insertOrUpdate(this);
}
public static List<Track> find(String key) {
return AppDatabase.get().getTrackDao().find(key);
}
}

@ -14,15 +14,17 @@ import com.fongmi.android.tv.bean.Config;
import com.fongmi.android.tv.bean.History;
import com.fongmi.android.tv.bean.Keep;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Track;
import com.fongmi.android.tv.db.dao.ConfigDao;
import com.fongmi.android.tv.db.dao.HistoryDao;
import com.fongmi.android.tv.db.dao.KeepDao;
import com.fongmi.android.tv.db.dao.SiteDao;
import com.fongmi.android.tv.db.dao.TrackDao;
@Database(entities = {Config.class, Site.class, History.class, Keep.class}, version = AppDatabase.VERSION, exportSchema = false)
@Database(entities = {Keep.class, Site.class, Track.class, Config.class, History.class}, version = AppDatabase.VERSION, exportSchema = false)
public abstract class AppDatabase extends RoomDatabase {
public static final int VERSION = 16;
public static final int VERSION = 17;
public static final String SYMBOL = "@@@";
private static volatile AppDatabase instance;
@ -48,6 +50,8 @@ public abstract class AppDatabase extends RoomDatabase {
public abstract SiteDao getSiteDao();
public abstract TrackDao getTrackDao();
public abstract ConfigDao getConfigDao();
public abstract HistoryDao getHistoryDao();

@ -0,0 +1,27 @@
package com.fongmi.android.tv.db.dao;
import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Transaction;
import com.fongmi.android.tv.bean.Track;
import java.util.List;
@Dao
public abstract class TrackDao extends BaseDao<Track> {
@Query("SELECT * FROM Track WHERE `key` = :key")
public abstract List<Track> find(String key);
@Insert(onConflict = OnConflictStrategy.REPLACE)
public abstract Long insert(Track item);
@Transaction
public void insertOrUpdate(Track item) {
long id = insert(item);
if (id == -1) update(item);
}
}

@ -69,9 +69,7 @@ public class TrackAdapter extends RecyclerView.Adapter<TrackAdapter.ViewHolder>
@Override
public void onClick(View view) {
for (int i = 0; i < mItems.size(); i++) mItems.get(i).setSelected(i == getLayoutPosition());
mListener.onItemClick(mItems.get(getLayoutPosition()));
notifyItemRangeChanged(0, mItems.size());
mListener.onItemClick(mItems.get(getLayoutPosition()).toggle());
}
}
}

@ -27,6 +27,7 @@ public final class TrackSelectionDialog implements TrackAdapter.OnClickListener
private final TrackNameProvider provider;
private final TrackAdapter adapter;
private final AlertDialog dialog;
private Listener listener;
private Players player;
private int type;
@ -51,6 +52,11 @@ public final class TrackSelectionDialog implements TrackAdapter.OnClickListener
return this;
}
public TrackSelectionDialog listener(Listener listener) {
this.listener = listener;
return this;
}
public void show() {
setRecyclerView();
setDialog();
@ -84,7 +90,7 @@ public final class TrackSelectionDialog implements TrackAdapter.OnClickListener
Tracks.Group trackGroup = groups.get(i);
if (trackGroup.getType() != type) continue;
for (int j = 0; j < trackGroup.length; j++) {
Track item = new Track(provider.getTrackName(trackGroup.getTrackFormat(j)));
Track item = new Track(type, provider.getTrackName(trackGroup.getTrackFormat(j)));
item.setSelected(trackGroup.isTrackSelected(j));
item.setGroup(i);
item.setTrack(j);
@ -99,7 +105,7 @@ public final class TrackSelectionDialog implements TrackAdapter.OnClickListener
for (int i = 0; i < trackInfos.length; i++) {
IjkTrackInfo trackInfo = trackInfos[i];
if (trackInfo.getTrackType() != type) continue;
Track item = new Track(provider.getTrackName(trackInfo));
Track item = new Track(type, provider.getTrackName(trackInfo));
item.setSelected(track == i);
item.setTrack(i);
items.add(item);
@ -108,24 +114,30 @@ public final class TrackSelectionDialog implements TrackAdapter.OnClickListener
private void setExoTrack(Track item) {
if (item.isSelected()) {
player.exo().setTrackSelectionParameters(player.exo().getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(player.exo().getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), ImmutableList.of())).build());
} else {
player.exo().setTrackSelectionParameters(player.exo().getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(player.exo().getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), item.getTrack())).build());
} else {
player.exo().setTrackSelectionParameters(player.exo().getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(player.exo().getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), ImmutableList.of())).build());
}
}
private void setIjkTrack(Track item) {
if (item.isSelected()) {
player.ijk().deselectTrack(item.getTrack());
} else {
player.ijk().selectTrack(item.getTrack());
} else {
player.ijk().deselectTrack(item.getTrack());
}
}
@Override
public void onItemClick(Track item) {
if (listener != null) listener.onTrackClick(item);
if (player.isExo()) setExoTrack(item);
if (player.isIjk()) setIjkTrack(item);
dialog.dismiss();
}
public interface Listener {
void onTrackClick(Track item);
}
}
Loading…
Cancel
Save