package com.android.settings; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.support.v7.preference.PreferenceViewHolder; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; /** * An AppListPreference with optional settings button. */ public class AppListPreferenceWithSettings extends AppListPreference { private View mSettingsIcon; private ComponentName mSettingsComponent; public AppListPreferenceWithSettings(Context context, AttributeSet attrs) { super(context, attrs); setWidgetLayoutResource(R.layout.preference_widget_settings); } @Override public void onBindViewHolder(PreferenceViewHolder view) { super.onBindViewHolder(view); mSettingsIcon = view.findViewById(R.id.settings_button); mSettingsIcon.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(mSettingsComponent); getContext().startActivity(new Intent(intent)); } }); ViewGroup container = (ViewGroup) mSettingsIcon.getParent(); container.setPaddingRelative(0, 0, 0, 0); updateSettingsVisibility(); } private void updateSettingsVisibility() { if (mSettingsIcon == null) { return; } if (mSettingsComponent == null) { mSettingsIcon.setVisibility(View.GONE); } else { mSettingsIcon.setVisibility(View.VISIBLE); } } protected void setSettingsComponent(ComponentName settings) { mSettingsComponent = settings; updateSettingsVisibility(); } }