| /* |
| * Copyright (C) 2020 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.settings.notification.app; |
| |
| import static android.app.NotificationManager.BUBBLE_PREFERENCE_ALL; |
| import static android.app.NotificationManager.BUBBLE_PREFERENCE_NONE; |
| import static android.app.NotificationManager.BUBBLE_PREFERENCE_SELECTED; |
| |
| import android.content.Context; |
| import android.content.res.ColorStateList; |
| import android.graphics.drawable.Drawable; |
| import android.util.AttributeSet; |
| import android.view.View; |
| import android.widget.ImageView; |
| import android.widget.TextView; |
| |
| import androidx.preference.Preference; |
| import androidx.preference.PreferenceViewHolder; |
| |
| import com.android.settings.Utils; |
| import com.android.settingslib.R; |
| import com.android.settingslib.RestrictedLockUtils; |
| import com.android.settingslib.RestrictedPreferenceHelper; |
| |
| /** |
| * A tri-state preference allowing a user to specify what gets to bubble. |
| */ |
| public class BubblePreference extends Preference implements View.OnClickListener { |
| RestrictedPreferenceHelper mHelper; |
| |
| private int mSelectedPreference; |
| |
| private Context mContext; |
| |
| private ButtonViewHolder mBubbleAllButton; |
| private ButtonViewHolder mBubbleSelectedButton; |
| private ButtonViewHolder mBubbleNoneButton; |
| |
| private boolean mSelectedVisible; |
| |
| public BubblePreference(Context context) { |
| this(context, null); |
| } |
| |
| public BubblePreference(Context context, AttributeSet attrs) { |
| this(context, attrs, 0); |
| } |
| |
| public BubblePreference(Context context, AttributeSet attrs, int defStyleAttr) { |
| this(context, attrs, defStyleAttr, 0); |
| } |
| |
| public BubblePreference(Context context, AttributeSet attrs, |
| int defStyleAttr, int defStyleRes) { |
| super(context, attrs, defStyleAttr, defStyleRes); |
| mHelper = new RestrictedPreferenceHelper(context, this, attrs); |
| mHelper.useAdminDisabledSummary(true); |
| mContext = context; |
| setLayoutResource(R.layout.bubble_preference); |
| } |
| |
| public void setSelectedPreference(int preference) { |
| mSelectedPreference = preference; |
| } |
| |
| public int getSelectedPreference() { |
| return mSelectedPreference; |
| } |
| |
| public void setDisabledByAdmin(RestrictedLockUtils.EnforcedAdmin admin) { |
| if (mHelper.setDisabledByAdmin(admin)) { |
| notifyChanged(); |
| } |
| } |
| |
| public void setSelectedVisibility(boolean visible) { |
| mSelectedVisible = visible; |
| notifyChanged(); |
| } |
| |
| @Override |
| public void onBindViewHolder(final PreferenceViewHolder holder) { |
| super.onBindViewHolder(holder); |
| |
| final boolean disabledByAdmin = mHelper.isDisabledByAdmin(); |
| View summary = holder.findViewById(android.R.id.summary); |
| if (disabledByAdmin) { |
| mHelper.onBindViewHolder(holder); |
| summary.setVisibility(View.VISIBLE); |
| } else { |
| summary.setVisibility(View.GONE); |
| } |
| holder.itemView.setClickable(false); |
| |
| View bubbleAll = holder.findViewById(R.id.bubble_all); |
| ImageView bubbleAllImage = (ImageView) holder.findViewById(R.id.bubble_all_icon); |
| TextView bubbleAllText = (TextView) holder.findViewById(R.id.bubble_all_label); |
| mBubbleAllButton = new ButtonViewHolder(bubbleAll, bubbleAllImage, bubbleAllText, |
| BUBBLE_PREFERENCE_ALL); |
| mBubbleAllButton.setSelected(mContext, mSelectedPreference == BUBBLE_PREFERENCE_ALL); |
| bubbleAll.setTag(BUBBLE_PREFERENCE_ALL); |
| bubbleAll.setOnClickListener(this); |
| bubbleAll.setVisibility(disabledByAdmin ? View.GONE : View.VISIBLE); |
| |
| View bubbleSelected = holder.findViewById(R.id.bubble_selected); |
| ImageView bubbleSelectedImage = (ImageView) holder.findViewById(R.id.bubble_selected_icon); |
| TextView bubbleSelectedText = (TextView) holder.findViewById(R.id.bubble_selected_label); |
| mBubbleSelectedButton = new ButtonViewHolder(bubbleSelected, bubbleSelectedImage, |
| bubbleSelectedText, BUBBLE_PREFERENCE_SELECTED); |
| mBubbleSelectedButton.setSelected(mContext, |
| mSelectedPreference == BUBBLE_PREFERENCE_SELECTED); |
| bubbleSelected.setTag(BUBBLE_PREFERENCE_SELECTED); |
| bubbleSelected.setOnClickListener(this); |
| bubbleSelected.setVisibility((!mSelectedVisible || disabledByAdmin) |
| ? View.GONE : View.VISIBLE); |
| |
| View bubbleNone = holder.findViewById(R.id.bubble_none); |
| ImageView bubbleNoneImage = (ImageView) holder.findViewById(R.id.bubble_none_icon); |
| TextView bubbleNoneText = (TextView) holder.findViewById(R.id.bubble_none_label); |
| mBubbleNoneButton = new ButtonViewHolder(bubbleNone, bubbleNoneImage, bubbleNoneText, |
| BUBBLE_PREFERENCE_NONE); |
| mBubbleNoneButton.setSelected(mContext, mSelectedPreference == BUBBLE_PREFERENCE_NONE); |
| bubbleNone.setTag(BUBBLE_PREFERENCE_NONE); |
| bubbleNone.setOnClickListener(this); |
| bubbleNone.setVisibility(disabledByAdmin ? View.GONE : View.VISIBLE); |
| } |
| |
| @Override |
| public void onClick(View v) { |
| final int selected = (int) v.getTag(); |
| callChangeListener(selected); |
| |
| mBubbleAllButton.setSelected(mContext, selected == BUBBLE_PREFERENCE_ALL); |
| mBubbleSelectedButton.setSelected(mContext, selected == BUBBLE_PREFERENCE_SELECTED); |
| mBubbleNoneButton.setSelected(mContext, selected == BUBBLE_PREFERENCE_NONE); |
| } |
| |
| private class ButtonViewHolder { |
| private View mView; |
| private ImageView mImageView; |
| private TextView mTextView; |
| private int mId; |
| |
| ButtonViewHolder(View v, ImageView iv, TextView tv, int identifier) { |
| mView = v; |
| mImageView = iv; |
| mTextView = tv; |
| mId = identifier; |
| } |
| |
| void setSelected(Context context, boolean selected) { |
| mView.setBackground(mContext.getDrawable(selected |
| ? R.drawable.button_border_selected |
| : R.drawable.button_border_unselected)); |
| mView.setSelected(selected); |
| |
| ColorStateList stateList = selected |
| ? Utils.getColorAccent(context) |
| : Utils.getColorAttr(context, android.R.attr.textColorPrimary); |
| mImageView.setImageTintList(stateList); |
| mTextView.setTextColor(stateList); |
| } |
| } |
| } |