Complete push logic.

pull/1/head
SDL 4 years ago
parent cc27b751b5
commit e3b0bb8191
  1. 7
      app/src/main/AndroidManifest.xml
  2. 1
      app/src/main/java/com/github/tvbox/osc/event/RefreshEvent.java
  3. 28
      app/src/main/java/com/github/tvbox/osc/receiver/ProjectionReceiver.java
  4. 5
      app/src/main/java/com/github/tvbox/osc/server/ControlManager.java
  5. 2
      app/src/main/java/com/github/tvbox/osc/server/DataReceiver.java
  6. 2
      app/src/main/java/com/github/tvbox/osc/server/InputRequestProcess.java
  7. 8
      app/src/main/java/com/github/tvbox/osc/ui/activity/HomeActivity.java
  8. 180
      app/src/main/java/com/github/tvbox/osc/ui/activity/ProjectionPlayActivity.java
  9. 68
      app/src/main/java/com/github/tvbox/osc/ui/activity/PushActivity.java
  10. 9
      app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java
  11. 8
      app/src/main/java/com/github/tvbox/osc/ui/tv/QRCodeGen.java
  12. 47
      app/src/main/res/layout/activity_push.xml

@ -44,7 +44,7 @@
android:name=".ui.activity.PlayActivity"
android:screenOrientation="landscape" />
<activity
android:name=".ui.activity.ProjectionPlayActivity"
android:name=".ui.activity.PushActivity"
android:screenOrientation="landscape" />
<activity
android:name=".ui.activity.SearchActivity"
@ -66,11 +66,6 @@
<action android:name="android.content.movie.custom.web.Action" />
</intent-filter>
</receiver>
<receiver android:name=".receiver.ProjectionReceiver">
<intent-filter>
<action android:name="android.content.movie.projection.Action" />
</intent-filter>
</receiver>
<provider
android:name="androidx.core.content.FileProvider"

@ -15,6 +15,7 @@ public class RefreshEvent {
public static final int TYPE_SEARCH_RESULT = 6;
public static final int TYPE_QUICK_SEARCH_RESULT = 7;
public static final int TYPE_API_URL_CHANGE = 8;
public static final int TYPE_PUSH_URL = 9;
public int type;
public Object obj;

@ -1,28 +0,0 @@
package com.github.tvbox.osc.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import com.github.tvbox.osc.ui.activity.ProjectionPlayActivity;
import com.github.tvbox.osc.util.AppManager;
/**
* @author pj567
* @date :2021/3/5
* @description:
*/
public class ProjectionReceiver extends BroadcastReceiver {
public static String action = "android.content.movie.projection.Action";
@Override
public void onReceive(Context context, Intent intent) {
if (action.equals(intent.getAction()) && intent.getExtras() != null) {
AppManager.getInstance().finishActivity(ProjectionPlayActivity.class);
Intent newIntent = new Intent(context, ProjectionPlayActivity.class);
newIntent.putExtra("html", intent.getExtras().getString("html"));
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(newIntent);
}
}
}

@ -74,6 +74,11 @@ public class ControlManager {
Hawk.put(HawkConfig.API_URL, url);
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_API_URL_CHANGE, url));
}
@Override
public void onPushReceived(String url) {
EventBus.getDefault().post(new RefreshEvent(RefreshEvent.TYPE_PUSH_URL, url));
}
});
try {
mServer.start();

@ -14,4 +14,6 @@ public interface DataReceiver {
void onApiReceived(String url);
void onPushReceived(String url);
}

@ -47,6 +47,8 @@ public class InputRequestProcess implements RequestProcess {
}
case "push": {
// 暂未实现
mDataReceiver.onPushReceived(params.get("url").trim());
break;
}
}
}

@ -408,6 +408,14 @@ public class HomeActivity extends BaseActivity {
public void refresh(RefreshEvent event) {
if (event.type == RefreshEvent.TYPE_API_URL_CHANGE) {
Toast.makeText(mContext, "配置地址设置为" + (String) event.obj + ",重启应用生效!", Toast.LENGTH_SHORT).show();
} else if (event.type == RefreshEvent.TYPE_PUSH_URL) {
if (ApiConfig.get().getSource("push_agent") != null) {
Intent newIntent = new Intent(mContext, DetailActivity.class);
newIntent.putExtra("id", (String) event.obj);
newIntent.putExtra("sourceKey", "push_agent");
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
HomeActivity.this.startActivity(newIntent);
}
}
}

@ -1,180 +0,0 @@
package com.github.tvbox.osc.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.Toast;
import com.github.tvbox.osc.R;
import com.github.tvbox.osc.base.BaseActivity;
import com.github.tvbox.osc.player.controller.BoxVideoController;
import com.github.tvbox.osc.player.controller.BoxVodControlView;
import com.github.tvbox.osc.ui.dialog.ParseDialog;
import com.github.tvbox.osc.util.HawkConfig;
import com.github.tvbox.osc.util.PlayerHelper;
import com.orhanobut.hawk.Hawk;
import xyz.doikki.videocontroller.component.GestureView;
import xyz.doikki.videoplayer.player.VideoView;
/**
* @author pj567
* @date :2021/3/5
* @description:
*/
public class ProjectionPlayActivity extends BaseActivity {
private VideoView mVideoView;
private BoxVideoController controller;
@Override
protected int getLayoutResID() {
return R.layout.activity_projection_play;
}
@Override
protected void init() {
initView();
initData();
}
private void initView() {
mVideoView = findViewById(R.id.mVideoView);
PlayerHelper.updateCfg(mVideoView);
// ViewGroup.LayoutParams layoutParams = mVideoView.getLayoutParams();
// layoutParams.width = 100;
// layoutParams.height = 50;
// mVideoView.setLayoutParams(layoutParams);
mVideoView.addOnStateChangeListener(new VideoView.SimpleOnStateChangeListener() {
@Override
public void onPlayStateChanged(int state) {
switch (state) {
case VideoView.STATE_IDLE:
case VideoView.STATE_PREPARED:
case VideoView.STATE_PLAYING:
case VideoView.STATE_BUFFERED:
case VideoView.STATE_PAUSED:
case VideoView.STATE_BUFFERING:
case VideoView.STATE_PREPARING:
break;
case VideoView.STATE_PLAYBACK_COMPLETED:
finish();
break;
case VideoView.STATE_ERROR:
finish();
tryDismissParse();
Toast.makeText(mContext, "播放错误", Toast.LENGTH_SHORT).show();
break;
}
}
});
controller = new BoxVideoController(this);
controller.addControlComponent(new GestureView(this));
BoxVodControlView boxVodControlView = new BoxVodControlView(this);
boxVodControlView.hideNextPre();
controller.addControlComponent(boxVodControlView);
controller.setCanChangePosition(true);
controller.setEnableInNormal(true);
controller.setGestureEnabled(true);
mVideoView.setVideoController(controller);
}
ParseDialog parseDialog = null;
void tryDismissParse() {
if (parseDialog != null) {
try {
parseDialog.dismiss();
} catch (Throwable th) {
th.printStackTrace();
}
}
}
private void initData() {
Intent intent = getIntent();
if (intent != null && intent.getExtras() != null) {
Bundle bundle = intent.getExtras();
String html = bundle.getString("html");
tryDismissParse();
parseDialog = new ParseDialog().build(this, new ParseDialog.BackPress() {
@Override
public void onBack() {
ProjectionPlayActivity.this.finish();
tryDismissParse();
}
});
parseDialog.show();
/* parseDialog.parse("", "", html, new ParseDialog.ParseCallback() {
@Override
public void success(String playUrl, Map<String, String> headers) {
controller.boxTVRefreshInfo(playUrl);
if (mVideoView != null) {
mVideoView.release();
mVideoView.setUrl(playUrl);
mVideoView.start();
}
tryDismissParse();
}
@Override
public void fail() {
ProjectionPlayActivity.this.finish();
tryDismissParse();
}
});*/
}
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
int action = event.getAction();
if (action == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT || keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
controller.boxTVSlideStart(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT ? 1 : -1);
} else if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE || (Hawk.get(HawkConfig.DEBUG_OPEN, false) && keyCode == KeyEvent.KEYCODE_0)) {
controller.boxTVTogglePlay();
}
} else if (action == KeyEvent.ACTION_UP) {
if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT || keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
controller.boxTVSlideStop();
}
}
return super.dispatchKeyEvent(event);
}
@Override
protected void onResume() {
super.onResume();
if (mVideoView != null) {
mVideoView.resume();
}
}
@Override
protected void onPause() {
super.onPause();
if (mVideoView != null) {
mVideoView.pause();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mVideoView != null) {
mVideoView.release();
mVideoView = null;
}
tryDismissParse();
}
}

@ -0,0 +1,68 @@
package com.github.tvbox.osc.ui.activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.github.tvbox.osc.R;
import com.github.tvbox.osc.base.BaseActivity;
import com.github.tvbox.osc.server.ControlManager;
import com.github.tvbox.osc.ui.tv.QRCodeGen;
import me.jessyan.autosize.utils.AutoSizeUtils;
public class PushActivity extends BaseActivity {
private ImageView ivQRCode;
private TextView tvAddress;
@Override
protected int getLayoutResID() {
return R.layout.activity_push;
}
@Override
protected void init() {
initView();
initData();
}
private void initView() {
ivQRCode = findViewById(R.id.ivQRCode);
tvAddress = findViewById(R.id.tvAddress);
refreshQRCode();
findViewById(R.id.pushLocal).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
ClipboardManager manager = (ClipboardManager) PushActivity.this.getSystemService(Context.CLIPBOARD_SERVICE);
if (manager != null) {
if (manager.hasPrimaryClip() && manager.getPrimaryClip() != null && manager.getPrimaryClip().getItemCount() > 0) {
ClipData.Item addedText = manager.getPrimaryClip().getItemAt(0);
Intent newIntent = new Intent(mContext, DetailActivity.class);
newIntent.putExtra("id", addedText.getText().toString().trim());
newIntent.putExtra("sourceKey", "push_agent");
newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
PushActivity.this.startActivity(newIntent);
}
}
} catch (Throwable th) {
}
}
});
}
private void refreshQRCode() {
String address = ControlManager.get().getAddress(false);
tvAddress.setText(String.format("手机/电脑扫描上方二维码或者直接浏览器访问地址\n%s", address));
ivQRCode.setImageBitmap(QRCodeGen.generateBitmap(address, AutoSizeUtils.mm2px(this, 300), AutoSizeUtils.mm2px(this, 300), 4));
}
private void initData() {
}
}

@ -12,6 +12,7 @@ import com.github.tvbox.osc.base.BaseLazyFragment;
import com.github.tvbox.osc.event.ServerEvent;
import com.github.tvbox.osc.ui.activity.HistoryActivity;
import com.github.tvbox.osc.ui.activity.LivePlayActivity;
import com.github.tvbox.osc.ui.activity.PushActivity;
import com.github.tvbox.osc.ui.activity.SearchActivity;
import com.github.tvbox.osc.ui.activity.SettingActivity;
import com.github.tvbox.osc.ui.adapter.HomeHotVodAdapter;
@ -42,6 +43,7 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
private LinearLayout tvSearch;
private LinearLayout tvSetting;
private LinearLayout tvHistory;
private LinearLayout tvPush;
public static UserFragment newInstance() {
return new UserFragment();
@ -59,20 +61,23 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
tvSearch = findViewById(R.id.tvSearch);
tvSetting = findViewById(R.id.tvSetting);
tvHistory = findViewById(R.id.tvHistory);
tvPush = findViewById(R.id.tvPush);
tvLive.setOnClickListener(this);
tvSearch.setOnClickListener(this);
tvSetting.setOnClickListener(this);
tvHistory.setOnClickListener(this);
tvPush.setOnClickListener(this);
tvLive.setOnFocusChangeListener(focusChangeListener);
tvSearch.setOnFocusChangeListener(focusChangeListener);
tvSetting.setOnFocusChangeListener(focusChangeListener);
tvHistory.setOnFocusChangeListener(focusChangeListener);
tvPush.setOnFocusChangeListener(focusChangeListener);
TvRecyclerView tvHotList = findViewById(R.id.tvHotList);
HomeHotVodAdapter adapter = new HomeHotVodAdapter();
adapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
if(ApiConfig.get().getSourceBeanList().isEmpty())
if (ApiConfig.get().getSourceBeanList().isEmpty())
return;
String title = ((HomeHotVodAdapter.HotVod) adapter.getItem(position)).getName();
Intent newIntent = new Intent(mContext, SearchActivity.class);
@ -172,6 +177,8 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen
jumpActivity(SettingActivity.class);
} else if (v.getId() == R.id.tvHistory) {
jumpActivity(HistoryActivity.class);
} else if (v.getId() == R.id.tvPush) {
jumpActivity(PushActivity.class);
}
}

@ -17,11 +17,11 @@ import java.util.Map;
* @description:
*/
public class QRCodeGen {
public static Bitmap generateBitmap(String content, int width, int height) {
public static Bitmap generateBitmap(String content, int width, int height, int padding) {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
Map<EncodeHintType, String> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.MARGIN, "0");
hints.put(EncodeHintType.MARGIN, padding + "");
try {
BitMatrix encode = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, width, height, hints);
int[] pixels = new int[width * height];
@ -40,4 +40,8 @@ public class QRCodeGen {
}
return null;
}
public static Bitmap generateBitmap(String content, int width, int height) {
return generateBitmap(content, width, height, 0);
}
}

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/ivQRCode"
android:layout_width="@dimen/vs_300"
android:layout_height="@dimen/vs_300"
android:layout_gravity="center" />
<TextView
android:id="@+id/tvAddress"
android:layout_width="@dimen/vs_480"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/vs_20"
android:gravity="center"
android:lineSpacingMultiplier="1.5"
android:textAlignment="gravity"
android:textColor="@color/color_FFFFFF"
android:textSize="@dimen/ts_24"
tools:text="1111111111111111111111111111111111111111111111111111" />
<TextView
android:id="@+id/pushLocal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/vs_20"
android:background="@drawable/user_focus"
android:focusable="true"
android:gravity="center"
android:padding="@dimen/vs_10"
android:text="推送剪贴板内容"
android:textColor="@color/color_FFFFFF"
android:textSize="@dimen/ts_24" />
</LinearLayout>
</FrameLayout>
Loading…
Cancel
Save