From 8545bf6b71d4b524169edc34ab07adbdf018c554 Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 2 Nov 2023 22:11:31 +0800 Subject: [PATCH] [leanback] support launcher --- app/src/leanback/AndroidManifest.xml | 21 +++++ .../java/com/fongmi/android/tv/Product.java | 2 +- .../java/com/fongmi/android/tv/bean/Info.java | 48 ++++++++++ .../tv/ui/activity/LauncherActivity.java | 65 ++++++++++++++ .../android/tv/ui/adapter/AppAdapter.java | 88 +++++++++++++++++++ .../leanback/res/layout/activity_launcher.xml | 17 ++++ app/src/leanback/res/layout/adapter_app.xml | 38 ++++++++ 7 files changed, 278 insertions(+), 1 deletion(-) create mode 100644 app/src/leanback/java/com/fongmi/android/tv/bean/Info.java create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/activity/LauncherActivity.java create mode 100644 app/src/leanback/java/com/fongmi/android/tv/ui/adapter/AppAdapter.java create mode 100644 app/src/leanback/res/layout/activity_launcher.xml create mode 100644 app/src/leanback/res/layout/adapter_app.xml diff --git a/app/src/leanback/AndroidManifest.xml b/app/src/leanback/AndroidManifest.xml index 5625c82e6..61650fe9c 100644 --- a/app/src/leanback/AndroidManifest.xml +++ b/app/src/leanback/AndroidManifest.xml @@ -17,6 +17,14 @@ + + + + + + + + @@ -28,6 +36,19 @@ android:name="design_height_in_dp" android:value="540" /> + + + + + + + + { + + private final OnClickListener mListener; + private final List mItems; + private int[] size; + + public AppAdapter(OnClickListener listener) { + this.mItems = new ArrayList<>(); + this.mListener = listener; + setSize(); + } + + public interface OnClickListener { + + void onItemClick(Info item); + + boolean onLongClick(Info item); + } + + private void setSize() { + int column = 5; + int space = ResUtil.dp2px(48) + ResUtil.dp2px(16 * (column - 1)); + this.size = Product.getSpec(space, column, Style.rect()); + } + + public void add(Info item) { + if (item.getPack().equals(App.get().getPackageName())) { + mItems.add(0, item); + notifyItemInserted(0); + } else { + mItems.add(item); + notifyItemInserted(mItems.size() - 1); + } + } + + @Override + public int getItemCount() { + return mItems.size(); + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new ViewHolder(AdapterAppBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)).size(size); + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + Info item = mItems.get(position); + holder.binding.name.setText(item.getName()); + holder.binding.icon.setImageDrawable(item.getIcon()); + holder.binding.getRoot().setOnClickListener(v -> mListener.onItemClick(item)); + holder.binding.getRoot().setOnLongClickListener(v -> mListener.onLongClick(item)); + } + + public static class ViewHolder extends RecyclerView.ViewHolder { + + private final AdapterAppBinding binding; + + public ViewHolder(@NonNull AdapterAppBinding binding) { + super(binding.getRoot()); + this.binding = binding; + } + + public ViewHolder size(int[] size) { + binding.getRoot().getLayoutParams().width = size[0]; + return this; + } + } +} diff --git a/app/src/leanback/res/layout/activity_launcher.xml b/app/src/leanback/res/layout/activity_launcher.xml new file mode 100644 index 000000000..65fe69515 --- /dev/null +++ b/app/src/leanback/res/layout/activity_launcher.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/src/leanback/res/layout/adapter_app.xml b/app/src/leanback/res/layout/adapter_app.xml new file mode 100644 index 000000000..36bb3e700 --- /dev/null +++ b/app/src/leanback/res/layout/adapter_app.xml @@ -0,0 +1,38 @@ + + + + + + + + \ No newline at end of file