Merge pull request #473 from okcaptain/dev

Dev
pull/475/head^2
okcaptain 2 years ago committed by GitHub
commit bcbe179e06
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 6
      app/build.gradle
  2. 12
      app/proguard-rules.pro
  3. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java
  4. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  5. 30
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  6. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  7. 2
      app/src/leanback/res/layout/activity_home.xml
  8. 4
      app/src/leanback/res/layout/view_widget_cast.xml
  9. 2
      app/src/leanback/res/layout/view_widget_display.xml
  10. 2
      app/src/leanback/res/layout/view_widget_live.xml
  11. 1
      app/src/main/java/com/fongmi/android/tv/bean/Catchup.java
  12. 5
      app/src/main/java/com/fongmi/android/tv/bean/Epg.java
  13. 67
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  14. 6
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  15. 31
      app/src/mobile/java/com/fongmi/android/tv/ui/custom/CustomKeyDownLive.java
  16. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ControlDialog.java
  17. 2
      app/src/mobile/res/layout/view_widget_display.xml
  18. 40
      app/src/mobile/res/layout/view_widget_live.xml
  19. 10
      build.gradle
  20. 2
      catvod/build.gradle
  21. 2
      forcetech/build.gradle
  22. 8
      gradle.properties
  23. 2
      gradle/wrapper/gradle-wrapper.properties
  24. 2
      hook/build.gradle
  25. 2
      ijkplayer/build.gradle
  26. 2
      jianpian/build.gradle
  27. 2
      pyramid/build.gradle
  28. 2
      quickjs/build.gradle
  29. 2
      thunder/build.gradle
  30. 1
      thunder/src/main/AndroidManifest.xml
  31. 2
      tvbus/build.gradle
  32. 2
      youtube/build.gradle

@ -3,12 +3,15 @@ plugins {
}
android {
namespace 'com.fongmi.android.tv'
compileSdk 34
flavorDimensions = ["mode", "api", "abi"]
defaultConfig {
applicationId "com.fongmi.android.tv"
minSdk 21
//noinspection ExpiredTargetSdkVersion
targetSdk 28
versionCode 235
versionName "0601"
@ -47,6 +50,7 @@ android {
}
buildFeatures {
buildConfig true
viewBinding true
}
@ -115,7 +119,6 @@ dependencies {
implementation project(':media-lib-ui')
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'androidx.biometric:biometric:1.1.0'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.7.0'
implementation 'androidx.room:room-runtime:2.6.1'
implementation 'androidx.media:media:1.7.0'
implementation 'cat.ereza:customactivityoncrash:2.4.0'
@ -134,6 +137,7 @@ dependencies {
implementation 'com.hierynomus:smbj:0.13.0'
implementation 'com.tencent.tbs:tbssdk:44286'
implementation 'com.github.YarikSOffice:lingver:1.3.0'
implementation 'javax.servlet:javax.servlet-api:3.1.0'
implementation 'org.chromium.net:cronet-embedded:76.3809.111'
implementation 'org.eclipse.jetty:jetty-client:8.1.21.v20160908'
implementation 'org.eclipse.jetty:jetty-server:8.1.21.v20160908'

@ -34,13 +34,23 @@
# Cling
-keep class org.fourthline.cling.** { *; }
-keep class javax.xml.** { *; }
-dontwarn org.ietf.jgss.**
-dontwarn com.sun.net.**
-dontwarn sun.net.**
-dontwarn java.awt.**
-dontwarn javax.**
# Cronet
-keep class org.chromium.net.** { *; }
-keep class com.google.net.cronet.** { *; }
# EXO
-keep class org.xmlpull.v1.** { *; }
-dontwarn org.xmlpull.v1.**
-dontwarn org.kxml2.io.**
-dontwarn android.content.res.**
-dontwarn org.slf4j.impl.StaticLoggerBinder
-keep class org.xmlpull.** { *; }
-keepclassmembers class org.xmlpull.** { *; }
-keep class androidx.media3.** { *; }
# IJK

@ -91,7 +91,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List
@Override
protected void initView() {
bindService(new Intent(this, DLNARendererService.class), this, Context.BIND_AUTO_CREATE);
mClock = Clock.create(mBinding.widget.time);
mClock = Clock.create(mBinding.widget.clock);
mKeyDown = CustomKeyDownCast.create(this);
mPlayers = new Players().init(this);
mParser = new DIDLParser();

@ -109,7 +109,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
@Override
protected void initView() {
DLNARendererService.Companion.start(this, R.drawable.ic_logo);
mClock = Clock.create(mBinding.time).format("MM/dd HH:mm:ss");
mClock = Clock.create(mBinding.clock).format("MM/dd HH:mm:ss");
Updater.get().release().start(this);
Server.get().start();
Tbs.init();
@ -154,10 +154,10 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
mBinding.homeSiteLock.setVisibility(Setting.isHomeSiteLock() ? View.VISIBLE : View.GONE);
if (Setting.getHomeUI() == 0) {
mBinding.title.setTextSize(24);
mBinding.time.setTextSize(24);
mBinding.clock.setTextSize(24);
} else {
mBinding.title.setTextSize(20);
mBinding.time.setTextSize(20);
mBinding.clock.setTextSize(20);
}
}

@ -140,7 +140,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP
@Override
protected void initView() {
mClock = Clock.create(Arrays.asList(mBinding.widget.time, mBinding.display.time));
mClock = Clock.create(Arrays.asList(mBinding.widget.clock, mBinding.display.clock));
mKeyDown = CustomKeyDownLive.create(this);
mPlayers = new Players().init(this);
mHides = new ArrayList<>();
@ -488,6 +488,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP
private void showControl(View view) {
mBinding.control.getRoot().setVisibility(View.VISIBLE);
mBinding.widget.top.setVisibility(View.VISIBLE);
App.post(view::requestFocus, 25);
view.requestFocus();
setR1Callback();
hideInfo();
@ -503,7 +504,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP
private void showDisplayInfo() {
boolean controlVisible = isVisible(mBinding.control.getRoot());
boolean visible = !controlVisible;
mBinding.display.time.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE);
mBinding.display.clock.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE);
mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && visible ? View.VISIBLE : View.GONE);
mBinding.display.duration.setVisibility(View.GONE);
}
@ -851,14 +852,14 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP
}
private void prevLine() {
if (mChannel == null) return;
if (mChannel == null || mChannel.isOnly()) return;
mChannel.prevLine();
showInfo();
fetch();
}
private void nextLine(boolean show) {
if (mChannel == null) return;
if (mChannel == null || mChannel.isOnly()) return;
mChannel.nextLine();
if (show) showInfo();
else setInfo();
@ -867,6 +868,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP
private void seekTo(int time) {
mPlayers.seekTo(time);
mKeyDown.resetTime();
showProgress();
hideCenter();
}
@ -936,7 +938,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP
@Override
public void onSeeking(int time) {
if (!mPlayers.isVod() || !mChannel.isOnly()) return;
if (!mPlayers.isVod()) return;
mBinding.widget.exoDuration.setText(mPlayers.getDurationTime());
mBinding.widget.exoPosition.setText(mPlayers.getPositionTime(time));
mBinding.widget.action.setImageResource(time > 0 ? R.drawable.ic_widget_forward : R.drawable.ic_widget_rewind);
@ -946,28 +948,26 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP
@Override
public void onKeyUp() {
prevChannel();
if (!mPlayers.isVod()) prevChannel();
else showControl(mBinding.control.player);
}
@Override
public void onKeyDown() {
nextChannel();
if (!mPlayers.isVod()) nextChannel();
else showControl(mBinding.control.player);
}
@Override
public void onKeyLeft(int time) {
if (mChannel == null) return;
if (mChannel.isOnly() && mPlayers.isVod()) App.post(() -> seekTo(time), 250);
else if (!mChannel.isOnly()) prevLine();
mKeyDown.resetTime();
if (!mPlayers.isVod()) prevLine();
else App.post(() -> seekTo(time), 250);
}
@Override
public void onKeyRight(int time) {
if (mChannel == null) return;
if (mChannel.isOnly() && mPlayers.isVod()) App.post(() -> seekTo(time), 250);
else if (!mChannel.isOnly()) nextLine(true);
mKeyDown.resetTime();
if (!mPlayers.isVod()) nextLine(true);
else App.post(() -> seekTo(time), 250);
}
@Override

@ -319,7 +319,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
protected void initView() {
mKeyDown = CustomKeyDownVod.create(this, mBinding.video);
mFrameParams = mBinding.video.getLayoutParams();
mClock = Clock.create(mBinding.display.time);
mClock = Clock.create(mBinding.display.clock);
mDanmakuContext = DanmakuContext.create();
mPlayers = new Players().init(this);
mBroken = new ArrayList<>();
@ -784,7 +784,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
}
private void showDisplayInfo() {
mBinding.display.time.setVisibility(Setting.isDisplayTime() || isVisible(mBinding.widget.info) ? View.VISIBLE : View.GONE);
mBinding.display.clock.setVisibility(Setting.isDisplayTime() || isVisible(mBinding.widget.info) ? View.VISIBLE : View.GONE);
mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && !isVisible(mBinding.control.getRoot()) ? View.VISIBLE : View.GONE);
mBinding.display.duration.setVisibility(Setting.isDisplayDuration() && !isVisible(mBinding.control.getRoot()) ? View.VISIBLE : View.GONE);
mBinding.display.progress.setVisibility(Setting.isDisplayMiniProgress() && !isVisible(mBinding.control.getRoot()) && (mPlayers.getDuration() > 60000) ? View.VISIBLE : View.GONE);
@ -1666,8 +1666,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
@Override
public void onSeekTo(int time) {
mKeyDown.resetTime();
mPlayers.seekTo(time);
mKeyDown.resetTime();
showProgress();
onPlay();
}

@ -71,7 +71,7 @@
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/time"
android:id="@+id/clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"

@ -16,7 +16,7 @@
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_toStartOf="@+id/time"
android:layout_toStartOf="@+id/clock"
android:letterSpacing="0.02"
android:shadowColor="@color/grey_900"
android:shadowDx="2"
@ -43,7 +43,7 @@
tools:text="1920 x 1080" />
<TextView
android:id="@+id/time"
android:id="@+id/clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"

@ -5,7 +5,7 @@
android:layout_height="match_parent">
<TextView
android:id="@+id/time"
android:id="@+id/clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"

@ -232,7 +232,7 @@
tools:text="來源 1" />
<TextView
android:id="@+id/time"
android:id="@+id/clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"

@ -94,6 +94,7 @@ public class Catchup {
public String format(String url, EpgData data) {
String result = getSource();
if (data.isInRange()) return url;
Matcher matcher = Pattern.compile("(\\$\\{[^}]*\\})").matcher(result);
while (matcher.find()) result = result.replace(matcher.group(1), data.format(matcher.group(1)));
return isDefault() ? result : format(url, result);

@ -90,4 +90,9 @@ public class Epg {
for (int i = 0; i < getList().size(); i++) if (getList().get(i).isSelected()) return i;
return -1;
}
public int getInRange() {
for (int i = 0; i < getList().size(); i++) if (getList().get(i).isInRange()) return i;
return -1;
}
}

@ -159,7 +159,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom
@Override
protected void initView(Bundle savedInstanceState) {
mKeyDown = CustomKeyDownLive.create(this, mBinding.video);
mClock = Clock.create(Arrays.asList(mBinding.widget.time, mBinding.display.time));
mClock = Clock.create(Arrays.asList(mBinding.widget.clock, mBinding.display.clock));
setPadding(mBinding.control.getRoot());
setPadding(mBinding.widget.epg, true);
setPadding(mBinding.recycler, true);
@ -551,7 +551,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom
private void showDisplayInfo() {
boolean controlVisible = isVisible(mBinding.control.getRoot()) || isVisible(mBinding.widget.info);
boolean visible = (!controlVisible && !isLock());
mBinding.display.time.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE);
mBinding.display.clock.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE);
mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && visible ? View.VISIBLE : View.GONE);
mBinding.display.duration.setVisibility(View.GONE);
}
@ -827,7 +827,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom
if (isVisible(mBinding.control.getRoot())) showControl();
break;
case Player.STATE_ENDED:
nextEpg();
checkNext();
break;
}
}
@ -934,33 +934,29 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom
if (!mGroup.isEmpty()) onItemClick(mGroup.current());
}
public void nextEpg() {
private void checkNext() {
int current = mChannel.getData().getInRange();
int position = mChannel.getData().getSelected() + 1;
boolean limit = position > mEpgDataAdapter.getItemCount() - 1;
if (!limit) onItemClick(mChannel.getData().getList().get(position));
boolean hasNext = position <= current && position > 0;
if (hasNext) onItemClick(mChannel.getData().getList().get(position));
else nextChannel();
}
private void prevLine() {
if (mChannel == null) return;
if (mChannel == null || mChannel.isOnly()) return;
mChannel.prevLine();
showInfo();
fetch();
}
private void nextLine(boolean show) {
if (mChannel == null) return;
if (mChannel == null || mChannel.isOnly()) return;
mChannel.nextLine();
if (show) showInfo();
else setInfo();
fetch();
}
private void seekTo() {
mPlayers.seekTo(Constant.INTERVAL_SEEK * 3);
showProgress();
}
private void onPaused() {
checkPlayImg(false);
mPlayers.pause();
@ -1036,6 +1032,21 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom
public void onCasted() {
}
@Override
public void onSpeedUp() {
if (!mPlayers.isVod() || !mPlayers.isPlaying() || !mPlayers.canAdjustSpeed()) return;
mBinding.control.action.speed.setText(mPlayers.setSpeed(mPlayers.getSpeed() < 3 ? 3 : 5));
mBinding.widget.speed.startAnimation(ResUtil.getAnim(R.anim.forward));
mBinding.widget.speed.setVisibility(View.VISIBLE);
}
@Override
public void onSpeedEnd() {
mBinding.control.action.speed.setText(mPlayers.setSpeed(1.0f));
mBinding.widget.speed.setVisibility(View.GONE);
mBinding.widget.speed.clearAnimation();
}
@Override
public void onBright(int progress) {
mBinding.widget.bright.setVisibility(View.VISIBLE);
@ -1066,26 +1077,40 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom
@Override
public void onFlingUp() {
prevChannel();
if (!mPlayers.isVod()) prevChannel();
}
@Override
public void onFlingDown() {
nextChannel();
if (!mPlayers.isVod()) nextChannel();
}
@Override
public void onFlingLeft() {
if (mChannel == null) return;
if (mChannel.isOnly() && mPlayers.isVod()) App.post(this::seekTo, 250);
else if (!mChannel.isOnly()) prevLine();
if (!mPlayers.isVod()) prevLine();
}
@Override
public void onFlingRight() {
if (mChannel == null) return;
if (mChannel.isOnly() && mPlayers.isVod()) App.post(this::seekTo, 250);
else if (!mChannel.isOnly()) nextLine(true);
if (!mPlayers.isVod()) nextLine(true);
}
@Override
public void onSeek(int time) {
if (!mPlayers.isVod()) return;
mBinding.widget.action.setImageResource(time > 0 ? R.drawable.ic_widget_forward : R.drawable.ic_widget_rewind);
mBinding.widget.time.setText(mPlayers.getPositionTime(time));
mBinding.widget.seek.setVisibility(View.VISIBLE);
hideProgress();
}
@Override
public void onSeekEnd(int time) {
if (!mPlayers.isVod()) return;
mBinding.widget.seek.setVisibility(View.GONE);
mPlayers.seekTo(time);
showProgress();
onPlay();
}
@Override

@ -311,7 +311,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
mObserveSearch = this::setSearch;
mDialogs = new ArrayList<>();
mBroken = new ArrayList<>();
mClock = Clock.create(Arrays.asList(mBinding.display.time, mBinding.control.time));
mClock = Clock.create(Arrays.asList(mBinding.display.clock, mBinding.control.time));
mR0 = this::stopService;
mR1 = this::hideControl;
mR2 = this::setTraffic;
@ -939,7 +939,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && isInPictureInPictureMode()) pictureMode = true;
boolean controlVisible = isVisible(mBinding.control.getRoot());
boolean visible = (!controlVisible || isLock()) && !pictureMode;
mBinding.display.time.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE);
mBinding.display.clock.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE);
mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && visible ? View.VISIBLE : View.GONE);
mBinding.display.duration.setVisibility(Setting.isDisplayDuration() && visible ? View.VISIBLE : View.GONE);
mBinding.display.progress.setVisibility(Setting.isDisplayMiniProgress() && visible && (mPlayers.getDuration() > 60000) ? View.VISIBLE : View.GONE);
@ -1645,8 +1645,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
@Override
public void onSeek(int time) {
mBinding.widget.action.setImageResource(time > 0 ? R.drawable.ic_widget_forward : R.drawable.ic_widget_rewind);
mBinding.widget.seek.setVisibility(View.VISIBLE);
mBinding.widget.time.setText(mPlayers.getPositionTime(time));
mBinding.widget.seek.setVisibility(View.VISIBLE);
hideProgress();
}

@ -26,11 +26,14 @@ public class CustomKeyDownLive extends GestureDetector.SimpleOnGestureListener {
private final View videoView;
private boolean changeBright;
private boolean changeVolume;
private boolean changeSpeed;
private boolean changeTime;
private boolean center;
private boolean touch;
private boolean lock;
private float bright;
private float volume;
private int time;
public static CustomKeyDownLive create(Activity activity, View videoView) {
return new CustomKeyDownLive(activity, videoView);
@ -45,6 +48,8 @@ public class CustomKeyDownLive extends GestureDetector.SimpleOnGestureListener {
}
public boolean onTouchEvent(MotionEvent e) {
if (changeTime && e.getAction() == MotionEvent.ACTION_UP) onSeekEnd();
if (changeSpeed && e.getAction() == MotionEvent.ACTION_UP) listener.onSpeedEnd();
if (changeBright && e.getAction() == MotionEvent.ACTION_UP) listener.onBrightEnd();
if (changeVolume && e.getAction() == MotionEvent.ACTION_UP) listener.onVolumeEnd();
return e.getPointerCount() == 1 && detector.onTouchEvent(e);
@ -65,16 +70,27 @@ public class CustomKeyDownLive extends GestureDetector.SimpleOnGestureListener {
bright = Util.getBrightness(activity);
changeBright = false;
changeVolume = false;
changeSpeed = false;
changeTime = false;
center = false;
touch = true;
return true;
}
@Override
public void onLongPress(@NonNull MotionEvent e) {
if (isEdge(e) || lock) return;
changeSpeed = true;
listener.onSpeedUp();
}
@Override
public boolean onScroll(@NonNull MotionEvent e1, @NonNull MotionEvent e2, float distanceX, float distanceY) {
if (isEdge(e1) || lock) return true;
float deltaX = e2.getX() - e1.getX();
float deltaY = e1.getY() - e2.getY();
if (touch) checkFunc(distanceX, distanceY, e2);
if (changeTime) listener.onSeek(time = (int) deltaX * 50);
if (changeBright) setBright(deltaY);
if (changeVolume) setVolume(deltaY);
return true;
@ -101,10 +117,17 @@ public class CustomKeyDownLive extends GestureDetector.SimpleOnGestureListener {
return true;
}
private void onSeekEnd() {
listener.onSeekEnd(time);
changeTime = false;
time = 0;
}
private void checkFunc(float distanceX, float distanceY, MotionEvent e2) {
int four = ResUtil.getScreenWidthNav() / 4;
if (e2.getX() > four && e2.getX() < four * 3) center = true;
else if (Math.abs(distanceX) < Math.abs(distanceY)) checkSide(e2);
if (Math.abs(distanceX) >= Math.abs(distanceY)) changeTime = true;
touch = false;
}
@ -153,6 +176,10 @@ public class CustomKeyDownLive extends GestureDetector.SimpleOnGestureListener {
public interface Listener {
void onSpeedUp();
void onSpeedEnd();
void onBright(int progress);
void onBrightEnd();
@ -169,6 +196,10 @@ public class CustomKeyDownLive extends GestureDetector.SimpleOnGestureListener {
void onFlingRight();
void onSeek(int time);
void onSeekEnd(int time);
void onSingleTap();
void onDoubleTap();

@ -129,7 +129,7 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
private void displayTime() {
boolean display = Setting.isDisplayTime();
parent.display.time.setVisibility(!display ? View.VISIBLE : View.GONE);
parent.display.clock.setVisibility(!display ? View.VISIBLE : View.GONE);
Setting.putDisplayTime(!display);
binding.dptime.setActivated(!display);
}

@ -5,7 +5,7 @@
android:layout_height="match_parent">
<TextView
android:id="@+id/time"
android:id="@+id/clock"
android:padding="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"

@ -56,6 +56,44 @@
</LinearLayout>
<LinearLayout
android:id="@+id/seek"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:layout_marginTop="24dp"
android:background="@drawable/shape_widget"
android:gravity="center"
android:orientation="horizontal"
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:id="@+id/action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:src="@drawable/ic_widget_rewind" />
<TextView
android:id="@+id/time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="14sp"
tools:text="00:00:00" />
</LinearLayout>
<ImageView
android:id="@+id/speed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|center"
android:layout_marginTop="24dp"
android:src="@drawable/ic_widget_forward"
android:visibility="gone" />
<LinearLayout
android:id="@+id/bright"
android:layout_width="wrap_content"
@ -173,7 +211,7 @@
tools:text="來源 1" />
<TextView
android:id="@+id/time"
android:id="@+id/clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"

@ -1,16 +1,16 @@
plugins {
id 'org.jetbrains.kotlin.android' version '1.8.20' apply false
id 'com.android.application' version '7.2.2' apply false
id 'com.android.library' version '7.2.2' apply false
id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
id 'com.android.application' version '8.0.1' apply false
id 'com.android.library' version '8.0.1' apply false
id 'com.chaquo.python' version '14.0.2' apply false
}
tasks.register('clean', Delete) {
delete rootProject.buildDir
delete rootProject.layout.buildDirectory
}
project.ext {
gsonVersion = '2.10.1'
gsonVersion = '2.11.0'
jsoupVersion = '1.15.3'
okhttpVersion = '4.12.0'
annotationVersion = '1.3.0'

@ -3,6 +3,8 @@ plugins {
}
android {
namespace 'com.github.catvod.crawler'
compileSdk 34
defaultConfig {

@ -3,6 +3,8 @@ plugins {
}
android {
namespace 'com.forcetech'
compileSdk 34
defaultConfig {

@ -6,13 +6,11 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app"s APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
@ -21,4 +19,6 @@ android.enableJetifier=true
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
android.useFullClasspathForDexingTransform=true
android.nonTransitiveRClass=true
android.nonFinalResIds=false

@ -1,6 +1,6 @@
#Wed Mar 29 12:54:35 CST 2023
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-all.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME

@ -3,6 +3,8 @@ plugins {
}
android {
namespace 'com.fongmi.hook'
compileSdk 34
defaultConfig {

@ -3,6 +3,8 @@ plugins {
}
android {
namespace 'tv.danmaku.ijk.media.player'
compileSdk 34
defaultConfig {

@ -3,6 +3,8 @@ plugins {
}
android {
namespace 'com.p2p'
compileSdk 34
defaultConfig {

@ -4,6 +4,8 @@ plugins {
}
android {
namespace 'com.undcover.freedom.pyramid'
compileSdk 34
flavorDimensions = ["abi"]

@ -3,6 +3,8 @@ plugins {
}
android {
namespace 'com.fongmi.android.tv.quickjs'
compileSdk 34
defaultConfig {

@ -3,6 +3,8 @@ plugins {
}
android {
namespace 'com.ghost.thunder'
compileSdk 34
defaultConfig {

@ -1 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.ghost.thunder" />

@ -3,6 +3,8 @@ plugins {
}
android {
namespace 'com.tvbus.engine'
compileSdk 34
defaultConfig {

@ -3,6 +3,8 @@ plugins {
}
android {
namespace 'com.github.kiulian.downloader'
compileSdk 34
defaultConfig {

Loading…
Cancel
Save