/*
* Light Controller, to Control wifi LED Lighting
* Copyright (C) 2014 Eliot Stocker
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package tv.piratemedia.lightcontroler;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.appwidget.AppWidgetManager;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.preference.*;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import android.support.v4.app.NavUtils;
import tv.piratemedia.lightcontroler.api.ControlProviders;
import tv.piratemedia.lightcontroler.api.Provider;
import java.util.regex.Pattern;
public class controlPreferences extends ActionBarActivity {
private Toolbar mActionBarToolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.control_prefs);
// Display the fragment as the main content.
FragmentManager mFragmentManager = getFragmentManager();
FragmentTransaction mFragmentTransaction = mFragmentManager
.beginTransaction();
PrefsFragment mPrefsFragment = new PrefsFragment();
mFragmentTransaction.add(R.id.prefs_layout, mPrefsFragment);
mFragmentTransaction.commit();
if(Build.VERSION.SDK_INT == 21) {
getWindow().setStatusBarColor(getResources().getColor(R.color.colorPrimaryDark));
}
mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mActionBarToolbar);
mActionBarToolbar.setNavigationIcon(R.drawable.ic_ab_back_material);
mActionBarToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
controlPreferences.this.finish();
}
});
}
public static class PrefsFragment extends PreferenceFragment {
private static final Pattern PARTIAl_IP_ADDRESS =
Pattern.compile("^((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])\\.){3}"+
"((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])){1}$");
private Provider[] availableProviders;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.control_preferences);
availableProviders = ControlProviders.listProviders(getActivity());
ListPreference providers = (ListPreference) findPreference("pref_selected_provider");
if(availableProviders.length < 1) {
getPreferenceScreen().removePreference(findPreference("cat_providers"));
} else {
String[] entries = new String[availableProviders.length + 1];
String[] values = new String[availableProviders.length + 1];
entries[0] = "Built in MiiLight Control";
values[0] = "";
int i = 1;
for(Provider p : availableProviders) {
entries[i] = p.Name;
values[i] = p.Package;
}
providers.setEntries(entries);
providers.setEntryValues(values);
//Log.d("providers", providers.getValue());
if(providers.getValue() == null) {
providers.setValueIndex(0);
}
providers.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if(!newValue.equals("")) {
Provider provider = ControlProviders.getProvider((String) newValue, getActivity());
ControlProviders.sendCommand(provider, "Select", getActivity());
}
return true;
}
});
}
EditTextPreference controllerIP = (EditTextPreference) findPreference("pref_light_controller_ip");
CheckBoxPreference rgbEnable = (CheckBoxPreference) findPreference("rgbw_enabled");
final EditTextPreference zone1 = (EditTextPreference) findPreference("pref_zone1");
final EditTextPreference zone2 = (EditTextPreference) findPreference("pref_zone2");
final EditTextPreference zone3 = (EditTextPreference) findPreference("pref_zone3");
final EditTextPreference zone4 = (EditTextPreference) findPreference("pref_zone4");
CheckBoxPreference whiteEnable = (CheckBoxPreference) findPreference("white_enabled");
final EditTextPreference zone5 = (EditTextPreference) findPreference("pref_zone5");
final EditTextPreference zone6 = (EditTextPreference) findPreference("pref_zone6");
final EditTextPreference zone7 = (EditTextPreference) findPreference("pref_zone7");
final EditTextPreference zone8 = (EditTextPreference) findPreference("pref_zone8");
if(!rgbEnable.isChecked()) {
zone1.setEnabled(false);
zone2.setEnabled(false);
zone3.setEnabled(false);
zone4.setEnabled(false);
}
rgbEnable.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
zone1.setEnabled((Boolean) newValue);
zone2.setEnabled((Boolean) newValue);
zone3.setEnabled((Boolean) newValue);
zone4.setEnabled((Boolean) newValue);
return true;
}
});
if(!whiteEnable.isChecked()) {
zone5.setEnabled(false);
zone6.setEnabled(false);
zone7.setEnabled(false);
zone8.setEnabled(false);
}
whiteEnable.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
zone5.setEnabled((Boolean) newValue);
zone6.setEnabled((Boolean) newValue);
zone7.setEnabled((Boolean) newValue);
zone8.setEnabled((Boolean) newValue);
return true;
}
});
zone1.setSummary(zone1.getText());
zone2.setSummary(zone2.getText());
zone3.setSummary(zone3.getText());
zone4.setSummary(zone4.getText());
zone5.setSummary(zone5.getText());
zone6.setSummary(zone6.getText());
zone7.setSummary(zone7.getText());
zone8.setSummary(zone8.getText());
zone1.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((CharSequence)newValue);
return true;
}
});
zone2.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((CharSequence)newValue);
return true;
}
});
zone3.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((CharSequence)newValue);
return true;
}
});
zone4.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((CharSequence)newValue);
return true;
}
});
zone5.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((CharSequence)newValue);
return true;
}
});
zone6.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((CharSequence)newValue);
return true;
}
});
zone7.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((CharSequence)newValue);
return true;
}
});
zone8.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary((CharSequence)newValue);
return true;
}
});
final Activity app = (controlPreferences)getActivity();
try {
controllerIP.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String oldValue = preference.getSharedPreferences().getString(preference.getKey(), "192.168.0.255");
String nv = newValue.toString();
if (PARTIAl_IP_ADDRESS.matcher(nv).matches()) {
return true;
} else {
if(utils.validHost(nv)) {
return true;
}
Toast toast = Toast.makeText(app.getApplicationContext(), String.format(getResources().getString(R.string.ip_invalid_error),nv,oldValue), Toast.LENGTH_SHORT);
toast.show();
return false;
}
}
});
} catch(NullPointerException e) {
e.printStackTrace();
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Intent intent = new Intent(this,controlWidgetProvider.class);
intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
int[] ids = {R.xml.control_appwidget_info};
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
sendBroadcast(intent);
startActivity(NavUtils.getParentActivityIntent(this));
}
}