mirror of https://github.com/FongMi/TV.git
parent
40324d49f4
commit
23727ffc2a
@ -0,0 +1,70 @@ |
||||
package com.fongmi.android.tv.ui.adapter; |
||||
|
||||
import android.graphics.drawable.GradientDrawable; |
||||
import android.view.LayoutInflater; |
||||
import android.view.View; |
||||
import android.view.ViewGroup; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.recyclerview.widget.RecyclerView; |
||||
|
||||
import com.fongmi.android.tv.databinding.AdapterThemeBinding; |
||||
|
||||
public class ThemeAdapter extends RecyclerView.Adapter<ThemeAdapter.ViewHolder> { |
||||
|
||||
private final OnClickListener listener; |
||||
private final int[] mItems; |
||||
private int selected; |
||||
|
||||
public ThemeAdapter(OnClickListener listener, int[] items, int selected) { |
||||
this.listener = listener; |
||||
this.mItems = items; |
||||
this.selected = selected; |
||||
} |
||||
|
||||
public interface OnClickListener { |
||||
void onItemClick(int color); |
||||
} |
||||
|
||||
public void setSelected(int color) { |
||||
selected = color; |
||||
notifyItemRangeChanged(0, getItemCount()); |
||||
} |
||||
|
||||
@Override |
||||
public int getItemCount() { |
||||
return mItems.length; |
||||
} |
||||
|
||||
@NonNull |
||||
@Override |
||||
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { |
||||
return new ViewHolder(AdapterThemeBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); |
||||
} |
||||
|
||||
@Override |
||||
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { |
||||
int color = mItems[position]; |
||||
GradientDrawable circle = new GradientDrawable(); |
||||
circle.setShape(GradientDrawable.OVAL); |
||||
if (color == 0) { |
||||
circle.setColors(new int[]{0xFFE53935, 0xFF2196F3, 0xFF4CAF50, 0xFFE53935}); |
||||
circle.setGradientType(GradientDrawable.SWEEP_GRADIENT); |
||||
} else { |
||||
circle.setColor(color); |
||||
} |
||||
holder.binding.circle.setBackground(circle); |
||||
holder.binding.check.setVisibility(selected == color ? View.VISIBLE : View.INVISIBLE); |
||||
holder.binding.getRoot().setOnClickListener(v -> listener.onItemClick(color)); |
||||
} |
||||
|
||||
public class ViewHolder extends RecyclerView.ViewHolder { |
||||
|
||||
private final AdapterThemeBinding binding; |
||||
|
||||
ViewHolder(@NonNull AdapterThemeBinding binding) { |
||||
super(binding.getRoot()); |
||||
this.binding = binding; |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,47 @@ |
||||
package com.fongmi.android.tv.ui.dialog; |
||||
|
||||
import android.app.Dialog; |
||||
import android.os.Bundle; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.annotation.Nullable; |
||||
import androidx.fragment.app.Fragment; |
||||
|
||||
import com.fongmi.android.tv.R; |
||||
import com.fongmi.android.tv.databinding.DialogThemeBinding; |
||||
import com.fongmi.android.tv.setting.Setting; |
||||
import com.fongmi.android.tv.ui.adapter.ThemeAdapter; |
||||
|
||||
public class ThemeDialog extends BaseAlertDialog implements ThemeAdapter.OnClickListener { |
||||
|
||||
private static final int[] COLORS = {0, 0xFF6750A4, 0xFF3949AB, 0xFF1E88E5, 0xFF00ACC1, 0xFF00897B, 0xFF43A047, 0xFF7CB342, 0xFFFB8C00, 0xFFE53935, 0xFFD81B60, 0xFF8E24AA, 0xFF6D4C41,}; |
||||
private DialogThemeBinding binding; |
||||
|
||||
public static void show(Fragment fragment) { |
||||
new ThemeDialog().show(fragment.getChildFragmentManager(), null); |
||||
} |
||||
|
||||
@NonNull |
||||
@Override |
||||
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { |
||||
setBinding(); |
||||
initView(); |
||||
return builder().setTitle(R.string.setting_theme_color).setView(binding.getRoot()).create(); |
||||
} |
||||
|
||||
private void setBinding() { |
||||
binding = DialogThemeBinding.inflate(getLayoutInflater()); |
||||
} |
||||
|
||||
private void initView() { |
||||
binding.recycler.setAdapter(new ThemeAdapter(this, COLORS, Setting.getThemeColor())); |
||||
} |
||||
|
||||
@Override |
||||
public void onItemClick(int color) { |
||||
Setting.putThemeColor(color); |
||||
requireActivity().recreate(); |
||||
dismiss(); |
||||
} |
||||
} |
||||
|
||||
@ -0,0 +1,7 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"> |
||||
<item android:color="?attr/colorPrimary" android:state_activated="true" /> |
||||
<item android:color="?attr/colorPrimary" android:state_selected="true" /> |
||||
<item android:color="?attr/colorPrimary" android:state_checked="true" /> |
||||
<item android:color="@color/white" /> |
||||
</selector> |
||||
@ -0,0 +1,7 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"> |
||||
<item android:color="?attr/colorPrimaryContainer" android:state_activated="true" /> |
||||
<item android:color="?attr/colorPrimaryContainer" android:state_selected="true" /> |
||||
<item android:color="?attr/colorPrimaryContainer" android:state_checked="true" /> |
||||
<item android:color="@color/white" /> |
||||
</selector> |
||||
@ -1,5 +1,5 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"> |
||||
<item android:color="?attr/colorControlActivated" android:state_checked="true" /> |
||||
<item android:color="?attr/colorPrimary" android:state_checked="true" /> |
||||
<item android:color="@color/white" android:state_checked="false" /> |
||||
</selector> |
||||
@ -0,0 +1,7 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<selector xmlns:android="http://schemas.android.com/apk/res/android"> |
||||
<item android:color="@color/yellow_500" android:state_activated="true" /> |
||||
<item android:color="@color/yellow_500" android:state_selected="true" /> |
||||
<item android:color="@color/yellow_500" android:state_checked="true" /> |
||||
<item android:color="@color/white" /> |
||||
</selector> |
||||
@ -0,0 +1,13 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android" |
||||
android:shape="rectangle"> |
||||
|
||||
<solid android:color="?attr/colorPrimaryContainer" /> |
||||
|
||||
<padding |
||||
android:bottom="4dp" |
||||
android:left="4dp" |
||||
android:right="4dp" |
||||
android:top="4dp" /> |
||||
|
||||
</shape> |
||||
@ -0,0 +1,10 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
||||
android:width="24dp" |
||||
android:height="24dp" |
||||
android:viewportWidth="24" |
||||
android:viewportHeight="24"> |
||||
<path |
||||
android:fillColor="@android:color/white" |
||||
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z" /> |
||||
</vector> |
||||
@ -0,0 +1,20 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:padding="8dp"> |
||||
|
||||
<View |
||||
android:id="@+id/circle" |
||||
android:layout_width="40dp" |
||||
android:layout_height="40dp" |
||||
android:layout_gravity="center" /> |
||||
|
||||
<androidx.appcompat.widget.AppCompatImageView |
||||
android:id="@+id/check" |
||||
android:layout_width="24dp" |
||||
android:layout_height="24dp" |
||||
android:layout_gravity="center" |
||||
android:src="@drawable/ic_action_check" /> |
||||
|
||||
</FrameLayout> |
||||
@ -0,0 +1,11 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" |
||||
xmlns:app="http://schemas.android.com/apk/res-auto" |
||||
android:id="@+id/recycler" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:clipChildren="false" |
||||
android:clipToPadding="false" |
||||
android:orientation="horizontal" |
||||
android:padding="24dp" |
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> |
||||
@ -0,0 +1,5 @@ |
||||
<resources> |
||||
|
||||
<style name="Widget.App.Fab" parent="Widget.Material3.FloatingActionButton.Primary" /> |
||||
|
||||
</resources> |
||||
Loading…
Reference in new issue