1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.widget; 18 19 import android.content.Context; 20 import android.util.AttributeSet; 21 import android.view.View; 22 23 import androidx.preference.PreferenceViewHolder; 24 25 import com.android.settings.R; 26 import com.android.settingslib.RestrictedPreference; 27 28 /** 29 * A preference with a Gear on the side 30 */ 31 public class GearPreference extends RestrictedPreference implements View.OnClickListener { 32 // Default true for gear available even if the preference itself is disabled. 33 protected boolean mGearState = true; 34 private OnGearClickListener mOnGearClickListener; 35 GearPreference(Context context, AttributeSet attrs)36 public GearPreference(Context context, AttributeSet attrs) { 37 super(context, attrs); 38 } 39 setOnGearClickListener(OnGearClickListener l)40 public void setOnGearClickListener(OnGearClickListener l) { 41 mOnGearClickListener = l; 42 notifyChanged(); 43 } 44 45 /** Sets state of gear button. */ setGearEnabled(boolean enabled)46 public void setGearEnabled(boolean enabled) { 47 mGearState = enabled; 48 } 49 50 /** Gets state of gear button. */ isGearEnabled()51 public boolean isGearEnabled() { 52 return mGearState; 53 } 54 55 @Override getSecondTargetResId()56 protected int getSecondTargetResId() { 57 return R.layout.preference_widget_gear; 58 } 59 60 @Override shouldHideSecondTarget()61 protected boolean shouldHideSecondTarget() { 62 return mOnGearClickListener == null; 63 } 64 65 @Override onBindViewHolder(PreferenceViewHolder holder)66 public void onBindViewHolder(PreferenceViewHolder holder) { 67 super.onBindViewHolder(holder); 68 final View gear = holder.findViewById(R.id.settings_button); 69 if (mOnGearClickListener != null) { 70 gear.setVisibility(View.VISIBLE); 71 gear.setOnClickListener(this); 72 } else { 73 gear.setVisibility(View.GONE); 74 gear.setOnClickListener(null); 75 } 76 // Make gear available even if the preference itself is disabled. 77 gear.setEnabled(mGearState); 78 } 79 80 @Override onClick(View v)81 public void onClick(View v) { 82 if (v.getId() == R.id.settings_button) { 83 if (mOnGearClickListener != null) { 84 mOnGearClickListener.onGearClick(this); 85 } 86 } 87 } 88 89 public interface OnGearClickListener { onGearClick(GearPreference p)90 void onGearClick(GearPreference p); 91 } 92 } 93