From 1f1580d3e9684f4a3897a594bbd1f0b829da418c Mon Sep 17 00:00:00 2001 From: elpaablo Date: Sat, 15 Jun 2024 13:08:39 +0100 Subject: [PATCH] Introduce volume styles --- res/layout/volume_style_option.xml | 40 ++++ res/values/alpha_strings.xml | 5 + res/xml/alpha_settings_sound.xml | 8 + .../fragments/sound/VolumePanelStyles.java | 215 ++++++++++++++++++ 4 files changed, 268 insertions(+) create mode 100644 res/layout/volume_style_option.xml create mode 100644 src/com/alpha/settings/fragments/sound/VolumePanelStyles.java diff --git a/res/layout/volume_style_option.xml b/res/layout/volume_style_option.xml new file mode 100644 index 0000000..6347be9 --- /dev/null +++ b/res/layout/volume_style_option.xml @@ -0,0 +1,40 @@ + + + + + + + + + + diff --git a/res/values/alpha_strings.xml b/res/values/alpha_strings.xml index 2faa5a7..05cb831 100644 --- a/res/values/alpha_strings.xml +++ b/res/values/alpha_strings.xml @@ -137,6 +137,11 @@ Notifications style Set custom notifications style + + Volume panel style + Set custom volume panel style + + Big circle Big dotted circle diff --git a/res/xml/alpha_settings_sound.xml b/res/xml/alpha_settings_sound.xml index 2c183f3..2a2b5a5 100644 --- a/res/xml/alpha_settings_sound.xml +++ b/res/xml/alpha_settings_sound.xml @@ -44,6 +44,14 @@ android:summary="@string/volume_steps_summary" android:fragment="com.alpha.settings.fragments.sound.VolumeSteps" /> + + + mPkgs; + + @Override + public void onCreate(Bundle savedInstanceState) { + setCategory("android.theme.customization.volume_style"); + String title = getContext().getString(R.string.theme_customization_volume_panel_styles_title); + setTitle(title); + super.onCreate(savedInstanceState); + getActivity().setTitle(R.string.theme_customization_volume_panel_styles_title); + + mThemeUtils = new ThemeUtils(getActivity()); + mPkgs = mThemeUtils.getOverlayPackagesForCategory(mCategory, "com.android.systemui"); + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View view = inflater.inflate( + R.layout.item_view, container, false); + + mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view); + GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 1); + mRecyclerView.setLayoutManager(gridLayoutManager); + Adapter mAdapter = new Adapter(getActivity()); + mRecyclerView.setAdapter(mAdapter); + + return view; + } + + @Override + public int getMetricsCategory() { + return MetricsEvent.ALPHA; + } + + @Override + public void onResume() { + super.onResume(); + } + + public class Adapter extends RecyclerView.Adapter { + Context context; + String mSelectedPkg; + String mAppliedPkg; + + public Adapter(Context context) { + this.context = context; + } + + @Override + public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.volume_style_option, parent, false); + CustomViewHolder vh = new CustomViewHolder(v); + return vh; + } + + @Override + public void onBindViewHolder(CustomViewHolder holder, final int position) { + String navPkg = mPkgs.get(position); + + String currentPackageName = mThemeUtils.getOverlayInfos(mCategory, "com.android.systemui").stream() + .filter(info -> info.isEnabled()) + .map(info -> info.packageName) + .findFirst() + .orElse("com.android.systemui"); + + holder.name.setText("com.android.systemui".equals(navPkg) ? "Default" : getLabel(holder.name.getContext(), navPkg)); + + holder.name.setTextSize(24); + + if (currentPackageName.equals(navPkg)) { + mAppliedPkg = navPkg; + if (mSelectedPkg == null) { + mSelectedPkg = navPkg; + } + } + + holder.itemView.setActivated(navPkg == mSelectedPkg); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + updateActivatedStatus(mSelectedPkg, false); + updateActivatedStatus(navPkg, true); + mSelectedPkg = navPkg; + enableOverlays(position); + } + }); + } + + @Override + public int getItemCount() { + return mPkgs.size(); + } + + public class CustomViewHolder extends RecyclerView.ViewHolder { + TextView name; + public CustomViewHolder(View itemView) { + super(itemView); + name = (TextView) itemView.findViewById(R.id.option_label); + } + } + + private void updateActivatedStatus(String pkg, boolean isActivated) { + int index = mPkgs.indexOf(pkg); + if (index < 0) { + return; + } + RecyclerView.ViewHolder holder = mRecyclerView.findViewHolderForAdapterPosition(index); + if (holder != null && holder.itemView != null) { + holder.itemView.setActivated(isActivated); + } + } + } + + public Drawable getDrawable(Context context, String pkg, String drawableName) { + try { + PackageManager pm = context.getPackageManager(); + Resources res = pm.getResourcesForApplication(pkg); + int resId = res.getIdentifier(drawableName, "drawable", pkg); + return res.getDrawable(resId); + } + catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return null; + } + + public String getLabel(Context context, String pkg) { + PackageManager pm = context.getPackageManager(); + try { + return pm.getApplicationInfo(pkg, 0) + .loadLabel(pm).toString(); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + return pkg; + } + + public void enableOverlays(int position) { + mThemeUtils.setOverlayEnabled(mCategory, mPkgs.get(position), "com.android.systemui"); + } +}