diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/SearchActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/SearchActivity.java index 2f7be155..f039658a 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/SearchActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/SearchActivity.java @@ -347,6 +347,13 @@ public class SearchActivity extends BaseActivity { protected void onDestroy() { super.onDestroy(); cancel(); + try { + if (searchExecutorService != null) { + searchExecutorService.shutdownNow(); + } + } catch (Throwable th) { + th.printStackTrace(); + } EventBus.getDefault().unregister(this); } } \ No newline at end of file diff --git a/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java b/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java new file mode 100644 index 00000000..69c395c1 --- /dev/null +++ b/app/src/main/java/com/github/tvbox/osc/ui/adapter/HomeHotVodAdapter.java @@ -0,0 +1,65 @@ +package com.github.tvbox.osc.ui.adapter; + +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.github.tvbox.osc.R; +import com.github.tvbox.osc.picasso.RoundTransformation; +import com.github.tvbox.osc.util.MD5; +import com.squareup.picasso.Picasso; + +import java.util.ArrayList; + +import me.jessyan.autosize.utils.AutoSizeUtils; + +public class HomeHotVodAdapter extends BaseQuickAdapter { + public static class HotVod { + String name; + String rate; + String pic; + + public HotVod(String name, String rate, String pic) { + this.name = name; + this.rate = rate; + this.pic = pic; + } + + public String getName() { + return name; + } + } + + public HomeHotVodAdapter() { + super(R.layout.item_user_hot_vod, new ArrayList<>()); + } + + @Override + protected void convert(BaseViewHolder helper, HotVod item) { + TextView tvRate = helper.getView(R.id.tvRate); + if (item.rate == null || item.rate.isEmpty()) { + tvRate.setVisibility(View.GONE); + } else { + tvRate.setText(item.rate); + } + helper.setText(R.id.tvName, item.name); + ImageView ivThumb = helper.getView(R.id.ivThumb); + //由于部分电视机使用glide报错 + if (!TextUtils.isEmpty(item.pic)) { + Picasso.get() + .load(item.pic) + .transform(new RoundTransformation(MD5.string2MD5(item.pic + "position=" + helper.getLayoutPosition())) + .centerCorp(true) + .override(AutoSizeUtils.mm2px(mContext, 300), AutoSizeUtils.mm2px(mContext, 400)) + .roundRadius(AutoSizeUtils.mm2px(mContext, 10), RoundTransformation.RoundType.ALL)) + .placeholder(R.drawable.error_loading) + .error(R.drawable.error_loading) + .into(ivThumb); + } else { + ivThumb.setImageResource(R.drawable.error_loading); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java b/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java index c1219300..1b39f98a 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/dialog/ApiDialog.java @@ -58,6 +58,7 @@ public class ApiDialog extends BaseDialog { history.remove(10); Hawk.put(HawkConfig.API_HISTORY, history); listener.onchange(newApi); + dismiss(); } } }); @@ -76,7 +77,9 @@ public class ApiDialog extends BaseDialog { dialog.setAdapter(new ApiHistoryDialogAdapter.SelectDialogInterface() { @Override public void click(String value) { + inputApi.setText(value); listener.onchange(value); + dialog.dismiss(); } @Override diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java index bc4b3975..6b217791 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/UserFragment.java @@ -1,32 +1,47 @@ package com.github.tvbox.osc.ui.fragment; +import android.content.Intent; import android.view.View; import android.view.animation.BounceInterpolator; -import android.widget.FrameLayout; +import android.widget.LinearLayout; +import com.chad.library.adapter.base.BaseQuickAdapter; import com.github.tvbox.osc.R; +import com.github.tvbox.osc.api.ApiConfig; 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.SearchActivity; import com.github.tvbox.osc.ui.activity.SettingActivity; +import com.github.tvbox.osc.ui.adapter.HomeHotVodAdapter; import com.github.tvbox.osc.util.FastClickCheckUtil; +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.callback.AbsCallback; +import com.lzy.okgo.model.Response; +import com.orhanobut.hawk.Hawk; +import com.owen.tvrecyclerview.widget.TvRecyclerView; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import java.util.ArrayList; + /** * @author pj567 * @date :2021/3/9 * @description: */ public class UserFragment extends BaseLazyFragment implements View.OnClickListener { - private FrameLayout tvLive; - private FrameLayout tvSearch; - private FrameLayout tvSetting; - private FrameLayout tvHistory; + private LinearLayout tvLive; + private LinearLayout tvSearch; + private LinearLayout tvSetting; + private LinearLayout tvHistory; public static UserFragment newInstance() { return new UserFragment(); @@ -52,6 +67,88 @@ public class UserFragment extends BaseLazyFragment implements View.OnClickListen tvSearch.setOnFocusChangeListener(focusChangeListener); tvSetting.setOnFocusChangeListener(focusChangeListener); tvHistory.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()) + return; + String title = ((HomeHotVodAdapter.HotVod) adapter.getItem(position)).getName(); + Intent newIntent = new Intent(mContext, SearchActivity.class); + newIntent.putExtra("title", title); + newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); + mActivity.startActivity(newIntent); + } + }); + tvHotList.setOnItemListener(new TvRecyclerView.OnItemListener() { + @Override + public void onItemPreSelected(TvRecyclerView parent, View itemView, int position) { + itemView.animate().scaleX(1.0f).scaleY(1.0f).setDuration(300).setInterpolator(new BounceInterpolator()).start(); + } + + @Override + public void onItemSelected(TvRecyclerView parent, View itemView, int position) { + itemView.animate().scaleX(1.05f).scaleY(1.05f).setDuration(300).setInterpolator(new BounceInterpolator()).start(); + } + + @Override + public void onItemClick(TvRecyclerView parent, View itemView, int position) { + + } + }); + tvHotList.setAdapter(adapter); + + initHomeHotVod(adapter); + } + + private void initHomeHotVod(HomeHotVodAdapter adapter) { + try { + long time = Hawk.get("douban_hot_date", 0L); + if (System.currentTimeMillis() - time < 6 * 60 * 60 * 1000) { + String json = Hawk.get("douboan_hot", ""); + if (!json.isEmpty()) { + adapter.setNewData(loadHots(json)); + return; + } + } + OkGo.get("https://movie.douban.com/j/new_search_subjects?sort=R&range=0,10&tags=&playable=1&start=0").execute(new AbsCallback() { + @Override + public void onSuccess(Response response) { + String netJson = response.body(); + Hawk.put("douban_hot_date", System.currentTimeMillis()); + Hawk.put("douboan_hot", netJson); + mActivity.runOnUiThread(new Runnable() { + @Override + public void run() { + adapter.setNewData(loadHots(netJson)); + } + }); + } + + @Override + public String convertResponse(okhttp3.Response response) throws Throwable { + return response.body().string(); + } + }); + } catch (Throwable th) { + th.printStackTrace(); + } + } + + private ArrayList loadHots(String json) { + ArrayList result = new ArrayList<>(); + try { + JsonObject infoJson = new Gson().fromJson(json, JsonObject.class); + JsonArray array = infoJson.getAsJsonArray("data"); + for (JsonElement ele : array) { + JsonObject obj = (JsonObject) ele; + result.add(new HomeHotVodAdapter.HotVod(obj.get("title").getAsString(), obj.get("rate").getAsString(), obj.get("cover").getAsString())); + } + } catch (Throwable th) { + + } + return result; } private View.OnFocusChangeListener focusChangeListener = new View.OnFocusChangeListener() { diff --git a/app/src/main/res/drawable-xhdpi/main_bg.png b/app/src/main/res/drawable-xhdpi/main_bg.png deleted file mode 100644 index 564d492e..00000000 Binary files a/app/src/main/res/drawable-xhdpi/main_bg.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/search_icon.png b/app/src/main/res/drawable-xhdpi/search_icon.png deleted file mode 100644 index a2430f43..00000000 Binary files a/app/src/main/res/drawable-xhdpi/search_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/seek_layout_background.png b/app/src/main/res/drawable-xhdpi/seek_layout_background.png deleted file mode 100644 index 1912fcd8..00000000 Binary files a/app/src/main/res/drawable-xhdpi/seek_layout_background.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/setting_icon.png b/app/src/main/res/drawable-xhdpi/setting_icon.png deleted file mode 100644 index 4f92115f..00000000 Binary files a/app/src/main/res/drawable-xhdpi/setting_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable/bottom_shape.xml b/app/src/main/res/drawable/bottom_shape.xml index 2cb5fb76..c22b551e 100644 --- a/app/src/main/res/drawable/bottom_shape.xml +++ b/app/src/main/res/drawable/bottom_shape.xml @@ -1,7 +1,7 @@ - + android:bottomLeftRadius="@dimen/vs_10" + android:bottomRightRadius="@dimen/vs_10" /> + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_collect.xml b/app/src/main/res/drawable/ic_collect.xml new file mode 100644 index 00000000..94b07af0 --- /dev/null +++ b/app/src/main/res/drawable/ic_collect.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_history.png b/app/src/main/res/drawable/ic_history.png deleted file mode 100644 index 880a2241..00000000 Binary files a/app/src/main/res/drawable/ic_history.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_history.xml b/app/src/main/res/drawable/ic_history.xml new file mode 100644 index 00000000..acf8b392 --- /dev/null +++ b/app/src/main/res/drawable/ic_history.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_live.xml b/app/src/main/res/drawable/ic_live.xml new file mode 100644 index 00000000..bcfe6915 --- /dev/null +++ b/app/src/main/res/drawable/ic_live.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_push.xml b/app/src/main/res/drawable/ic_push.xml new file mode 100644 index 00000000..8eeff280 --- /dev/null +++ b/app/src/main/res/drawable/ic_push.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_search1.png b/app/src/main/res/drawable/ic_search1.png deleted file mode 100644 index 6ac01a7e..00000000 Binary files a/app/src/main/res/drawable/ic_search1.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_search1.xml b/app/src/main/res/drawable/ic_search1.xml new file mode 100644 index 00000000..1a5612a3 --- /dev/null +++ b/app/src/main/res/drawable/ic_search1.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_setting.png b/app/src/main/res/drawable/ic_setting.png deleted file mode 100644 index e905be53..00000000 Binary files a/app/src/main/res/drawable/ic_setting.png and /dev/null differ diff --git a/app/src/main/res/drawable/ic_setting.xml b/app/src/main/res/drawable/ic_setting.xml new file mode 100644 index 00000000..414d367b --- /dev/null +++ b/app/src/main/res/drawable/ic_setting.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_tv.png b/app/src/main/res/drawable/ic_tv.png deleted file mode 100644 index 65016c8b..00000000 Binary files a/app/src/main/res/drawable/ic_tv.png and /dev/null differ diff --git a/app/src/main/res/layout/fragment_user.xml b/app/src/main/res/layout/fragment_user.xml index 0ea5043c..400335c0 100644 --- a/app/src/main/res/layout/fragment_user.xml +++ b/app/src/main/res/layout/fragment_user.xml @@ -1,171 +1,275 @@ - + android:clipToPadding="false" + android:orientation="vertical" + android:padding="@dimen/vs_40"> - - - - + android:orientation="horizontal" + android:paddingLeft="@dimen/vs_20" + android:paddingTop="@dimen/vs_20" + android:paddingRight="@dimen/vs_20" + android:paddingBottom="@dimen/vs_20"> + + + + android:textSize="@dimen/ts_40" /> - - + - + android:orientation="horizontal" + android:paddingLeft="@dimen/vs_20" + android:paddingTop="@dimen/vs_20" + android:paddingRight="@dimen/vs_20" + android:paddingBottom="@dimen/vs_20"> + + + + android:textSize="@dimen/ts_40" /> - - + - + android:orientation="horizontal" + android:paddingLeft="@dimen/vs_20" + android:paddingTop="@dimen/vs_20" + android:paddingRight="@dimen/vs_20" + android:paddingBottom="@dimen/vs_20"> + + + + android:textSize="@dimen/ts_40" /> + + + + + + - + android:src="@drawable/ic_push" /> - + + + + + android:orientation="horizontal" + android:paddingLeft="@dimen/vs_20" + android:paddingTop="@dimen/vs_20" + android:paddingRight="@dimen/vs_20" + android:paddingBottom="@dimen/vs_20"> + + + + android:textSize="@dimen/ts_40" /> + + + + + + - + + + + + - - \ No newline at end of file + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_user_hot_vod.xml b/app/src/main/res/layout/item_user_hot_vod.xml new file mode 100644 index 00000000..aa29cb78 --- /dev/null +++ b/app/src/main/res/layout/item_user_hot_vod.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index c508712e..f0b0736c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,8 +15,8 @@ #BBFFFFFF #0CADE2 #6CFFFFFF - #99000000 #66000000 + #99000000 #CC000000 #02F8E1 #353744