package com.amaze.filemanager.ui.views.preference;
import android.content.Context;
import android.preference.Preference;
import android.support.annotation.IdRes;
import android.support.v7.app.AppCompatDelegate;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Switch;
import com.amaze.filemanager.R;
/**
* @author Emmanuel
* on 17/4/2017, at 22:22.
*/
public class PathSwitchPreference extends Preference {
public static final int EDIT = 0, SWITCH = 1, DELETE = 2;
private int lastItemClicked = -1;
private Switch switchView;
private View.OnClickListener switchListener;
/**
* shouldEnable is the same thing as enabled, but is used before super.onBindView(view) has been called
* enabled is the current state of this Preference (check this.updateSwitch())
*/
private boolean shouldEnable = true, enabled = true;
public PathSwitchPreference(Context context) {
super(context);
}
@Override
protected View onCreateView(ViewGroup parent) {
setWidgetLayoutResource(R.layout.namepathswitch_preference);
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);//selector in srcCompat isn't supported without this
return super.onCreateView(parent);
}
@Override
protected void onBindView(View view) {
setListener(view, R.id.edit, EDIT);
switchListener = setListener(view, R.id.switch_button, SWITCH);
setListener(view, R.id.delete, DELETE);
super.onBindView(view);//Keep this before things that need changing what's on screen
switchView = (Switch) view.findViewById(R.id.switch_button);
switchView.setChecked(shouldEnable);
updateSwitch(view);
}
public void setChecked(boolean checked) {
if(switchView != null) {
switchView.setChecked(checked);
switchListener.onClick(switchView);
} else shouldEnable = checked;
}
public boolean isChecked() {
return enabled;
}
public int getLastItemClicked() {
return lastItemClicked;
}
private View.OnClickListener setListener(final View v, @IdRes int id, final int elem) {
final PathSwitchPreference t = this;
View.OnClickListener l = new View.OnClickListener() {
@Override
public void onClick(View view) {
lastItemClicked = elem;
if(lastItemClicked == SWITCH) {
updateSwitch(v);
}
if(enabled || lastItemClicked != EDIT) {
getOnPreferenceClickListener().onPreferenceClick(t);
}
}
};
v.findViewById(id).setOnClickListener(l);
return l;
}
/**
* Updates this Preference's state to coincide with the switch's state
* (after the switch has changed state)
* @param v the view witch contains the switch
*/
private void updateSwitch(View v) {
Switch s = (Switch) v.findViewById(R.id.switch_button);
enabled = s.isChecked();
v.findViewById(android.R.id.title).setEnabled(enabled);
v.findViewById(android.R.id.summary).setEnabled(enabled);
v.findViewById(R.id.edit).setEnabled(enabled);
}
}