diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3f19051 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +JavaDesktopApp/MyHue.properties diff --git a/JavaDesktopApp/.classpath b/JavaDesktopApp/.classpath old mode 100644 new mode 100755 diff --git a/JavaDesktopApp/.project b/JavaDesktopApp/.project old mode 100644 new mode 100755 diff --git a/JavaDesktopApp/README.md b/JavaDesktopApp/README.md old mode 100644 new mode 100755 diff --git a/JavaDesktopApp/libs/huelocalsdk.jar b/JavaDesktopApp/libs/huelocalsdk.jar old mode 100644 new mode 100755 diff --git a/JavaDesktopApp/libs/sdkresources.jar b/JavaDesktopApp/libs/sdkresources.jar old mode 100644 new mode 100755 diff --git a/JavaDesktopApp/libs/tablelayout.jar b/JavaDesktopApp/libs/tablelayout.jar old mode 100644 new mode 100755 diff --git a/JavaDesktopApp/resources/pushlink_image.png b/JavaDesktopApp/resources/pushlink_image.png old mode 100644 new mode 100755 diff --git a/JavaDesktopApp/src/com/philips/lighting/Controller.java b/JavaDesktopApp/src/com/philips/lighting/Controller.java old mode 100644 new mode 100755 index 3ab2519..6ed7ec4 --- a/JavaDesktopApp/src/com/philips/lighting/Controller.java +++ b/JavaDesktopApp/src/com/philips/lighting/Controller.java @@ -3,11 +3,12 @@ import java.util.List; import java.util.Random; -import javax.swing.JDialog; +import javax.swing.WindowConstants; import com.philips.lighting.data.HueProperties; import com.philips.lighting.gui.AccessPointList; import com.philips.lighting.gui.DesktopView; +import com.philips.lighting.gui.LightColorChangeFrame; import com.philips.lighting.gui.LightColoursFrame; import com.philips.lighting.gui.PushLinkFrame; import com.philips.lighting.hue.sdk.PHAccessPoint; @@ -28,6 +29,7 @@ public class Controller { private PushLinkFrame pushLinkDialog; private LightColoursFrame lightColoursFrame; + private LightColorChangeFrame lightColorChangeFrame; private static final int MAX_HUE=65535; private Controller instance; @@ -61,7 +63,7 @@ public void onAuthenticationRequired(PHAccessPoint accessPoint) { phHueSDK.startPushlinkAuthentication(accessPoint); pushLinkDialog = new PushLinkFrame(instance); - pushLinkDialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + pushLinkDialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); pushLinkDialog.setModal(true); pushLinkDialog.setLocationRelativeTo(null); // Center the dialog. pushLinkDialog.setVisible(true); @@ -89,22 +91,26 @@ public void onBridgeConnected(PHBridge bridge) { pushLinkDialog.setVisible(false); } - // Enable the Buttons/Controls to change the hue bulbs.s + // Enable the Buttons/Controls to change the hue bulbs. desktopView.getRandomLightsButton().setEnabled(true); desktopView.getSetLightsButton().setEnabled(true); + desktopView.getLightColorChangeButton().setEnabled(true); } @Override public void onCacheUpdated(int arg0, PHBridge arg1) { + // Do something? } @Override public void onConnectionLost(PHAccessPoint arg0) { + // Do something? } @Override public void onConnectionResumed(PHBridge arg0) { + // Do something? } @Override @@ -194,4 +200,12 @@ public void enableFindBridgesButton() { public void showProgressBar() { desktopView.getFindingBridgeProgressBar().setVisible(true); } + + public void showLightColorChangeWindow() { + if (lightColorChangeFrame == null) { + lightColorChangeFrame = new LightColorChangeFrame(); + } + lightColorChangeFrame.setLocationRelativeTo(null); // Centre window + lightColorChangeFrame.setVisible(true); + } } diff --git a/JavaDesktopApp/src/com/philips/lighting/HueDesktop.java b/JavaDesktopApp/src/com/philips/lighting/HueDesktop.java old mode 100644 new mode 100755 index 333a356..b085ea3 --- a/JavaDesktopApp/src/com/philips/lighting/HueDesktop.java +++ b/JavaDesktopApp/src/com/philips/lighting/HueDesktop.java @@ -15,6 +15,8 @@ */ class HueDesktop { + // Constructor has side effects + @SuppressWarnings("unused") public static void main(String args[]) { new HueDesktop(); } diff --git a/JavaDesktopApp/src/com/philips/lighting/data/HueProperties.java b/JavaDesktopApp/src/com/philips/lighting/data/HueProperties.java old mode 100644 new mode 100755 diff --git a/JavaDesktopApp/src/com/philips/lighting/gui/AccessPointList.java b/JavaDesktopApp/src/com/philips/lighting/gui/AccessPointList.java old mode 100644 new mode 100755 index a667348..1d0990c --- a/JavaDesktopApp/src/com/philips/lighting/gui/AccessPointList.java +++ b/JavaDesktopApp/src/com/philips/lighting/gui/AccessPointList.java @@ -23,7 +23,8 @@ public class AccessPointList extends JFrame { private JList> listbox; - public AccessPointList(final List accessPointsList, final Controller controller) + @SuppressWarnings({ "rawtypes", "unchecked" }) +public AccessPointList(final List accessPointsList, final Controller controller) { // Set the frame characteristics setTitle( "PHAccess Points List" ); @@ -35,7 +36,7 @@ public AccessPointList(final List accessPointsList, final Control topPanel.setLayout( new BorderLayout() ); getContentPane().add( topPanel ); - DefaultListModel listModel = new DefaultListModel(); + DefaultListModel listModel = new DefaultListModel<>(); for (PHAccessPoint accessPoint: accessPointsList) { listModel.addElement(accessPoint.getIpAddress()); diff --git a/JavaDesktopApp/src/com/philips/lighting/gui/ColorChanger.java b/JavaDesktopApp/src/com/philips/lighting/gui/ColorChanger.java new file mode 100644 index 0000000..3df78b6 --- /dev/null +++ b/JavaDesktopApp/src/com/philips/lighting/gui/ColorChanger.java @@ -0,0 +1,40 @@ +package com.philips.lighting.gui; + +import java.awt.Color; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.DefaultListModel; +import javax.swing.JColorChooser; + +import com.philips.lighting.hue.sdk.utilities.PHUtilities; +import com.philips.lighting.model.PHLightState; + +public class ColorChanger implements ActionListener { + private Component contentPane; + private Color background; + private DefaultListModel lightStates; + + public ColorChanger(Component contentPane, Color backgroundColor, + DefaultListModel lightStates) { + this.contentPane = contentPane; + this.background = backgroundColor; + this.lightStates = lightStates; + } + + @Override + public void actionPerformed(ActionEvent e) { + Color lightColour = JColorChooser.showDialog(contentPane, + "Choose Bulb Color", background); + + if (lightColour != null) { + PHLightState lightState = new PHLightState(); + float[] xy = PHUtilities.calculateXYFromRGB(lightColour.getRed(), + lightColour.getGreen(), lightColour.getBlue(), "LCT001"); + lightState.setX(xy[0]); + lightState.setY(xy[1]); + lightStates.addElement(lightState); + } + } +} diff --git a/JavaDesktopApp/src/com/philips/lighting/gui/DesktopView.java b/JavaDesktopApp/src/com/philips/lighting/gui/DesktopView.java old mode 100644 new mode 100755 index f325eaf..36c7621 --- a/JavaDesktopApp/src/com/philips/lighting/gui/DesktopView.java +++ b/JavaDesktopApp/src/com/philips/lighting/gui/DesktopView.java @@ -1,6 +1,7 @@ package com.philips.lighting.gui; import java.awt.BorderLayout; +import java.awt.Component; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.ActionEvent; @@ -33,6 +34,7 @@ public class DesktopView extends JFrame { private JButton randomLightsButton; private JButton findBridgesButton; private JButton connectToLastBridgeButton; + private JButton lightColorChange; private JProgressBar findingBridgeProgressBar; private JTextField lastConnectedIP; @@ -110,10 +112,21 @@ public void actionPerformed(ActionEvent arg0) { } }); + lightColorChange = new JButton("Light Color Change"); + lightColorChange.setEnabled(false); + lightColorChange.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + controller.showLightColorChangeWindow(); + + } + }); + double border = 10; double size[][] = {{border, 160, 20, 300, 20, 160}, // Columns - {border, 26, 10, 26, 26, 26,6,26}}; // Rows + {border, 26, 10, 26, 26, 26,6,26, 26, 26}}; // Rows mainPanel.setLayout (new TableLayout(size)); @@ -132,6 +145,8 @@ public void actionPerformed(ActionEvent arg0) { mainPanel.add(randomLightsButton, " 5, 5"); mainPanel.add(setLightsButton, " 5, 7"); + mainPanel.add(this.lightColorChange, " 5, 9"); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setPreferredSize(new Dimension(700,270)); @@ -181,4 +196,8 @@ public JTextField getLastConnectedIP() { public JTextField getLastUserName() { return lastUserName; } + + public Component getLightColorChangeButton() { + return lightColorChange; + } } \ No newline at end of file diff --git a/JavaDesktopApp/src/com/philips/lighting/gui/LightChangeTimer.java b/JavaDesktopApp/src/com/philips/lighting/gui/LightChangeTimer.java new file mode 100644 index 0000000..0edf13b --- /dev/null +++ b/JavaDesktopApp/src/com/philips/lighting/gui/LightChangeTimer.java @@ -0,0 +1,57 @@ +package com.philips.lighting.gui; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; + +import javax.swing.DefaultListModel; +import javax.swing.Timer; + +import com.philips.lighting.hue.listener.PHLightListener; +import com.philips.lighting.hue.sdk.PHHueSDK; +import com.philips.lighting.model.PHBridge; +import com.philips.lighting.model.PHLight; +import com.philips.lighting.model.PHLightState; + +public class LightChangeTimer implements ActionListener { + + private Timer timer; + private int currentIndex; + + public LightChangeTimer(final DefaultListModel lightStates) { + + // The the HueSDK singleton. + final PHHueSDK phHueSDK = PHHueSDK.getInstance(); + + // Get the selected bridge. + PHBridge bridge = phHueSDK.getSelectedBridge(); + + // To get lights use the Resource Cache. + final List lights = bridge.getResourceCache().getAllLights(); + + this.currentIndex = 0; + this.timer = new Timer(15000, new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + currentIndex = (currentIndex + 1) % lightStates.size(); + for (PHLight light : lights) { + // Null is used here because we don't care about bridge response. + final PHLightListener nullListener = null; + phHueSDK.getSelectedBridge().updateLightState(light.getIdentifier(), + lightStates.get(currentIndex), nullListener); + } + timer.restart(); + } + }); + } + + public void stopTimer() { + this.timer.stop(); + } + + @Override + public void actionPerformed(ActionEvent e) { + this.timer.start(); + } +} diff --git a/JavaDesktopApp/src/com/philips/lighting/gui/LightColorChangeFrame.java b/JavaDesktopApp/src/com/philips/lighting/gui/LightColorChangeFrame.java new file mode 100644 index 0000000..f1d3198 --- /dev/null +++ b/JavaDesktopApp/src/com/philips/lighting/gui/LightColorChangeFrame.java @@ -0,0 +1,98 @@ +package com.philips.lighting.gui; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.DefaultListModel; +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.border.Border; + +import com.philips.lighting.model.PHLightState; + +public class LightColorChangeFrame extends JFrame { + + /** + * Serial Version UID + */ + private static final long serialVersionUID = 1807091262601041714L; + + private final DefaultListModel lightStates; + private final JList colorList; + + public LightColorChangeFrame() { + super("Lights color change"); + lightStates = new DefaultListModel<>(); + + JPanel buttonPanel = new JPanel(); + + JButton addColorButton = new JButton("Add Bulb Color"); + ColorChanger color = new ColorChanger(getContentPane(), getBackground(), + lightStates); + addColorButton.addActionListener(color); + buttonPanel.add(addColorButton); + + JButton setColorButton = new JButton("Start Colors"); + final LightChangeTimer lightChangeTimer = new LightChangeTimer(lightStates); + setColorButton.addActionListener(lightChangeTimer); + buttonPanel.add(setColorButton); + + JButton stopButton = new JButton("Stop Colors"); + stopButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + lightChangeTimer.stopTimer(); + } + }); + buttonPanel.add(stopButton); + + Container content = getContentPane(); + content.add(buttonPanel); + + colorList = new JList<>(lightStates); + colorList.setVisibleRowCount(4); + colorList.setSelectedIndex(0); + JScrollPane listPane = new JScrollPane(colorList); + listPane.setPreferredSize(new Dimension(300, 100)); + + JButton removeColorButton = new JButton("Add Bulb Color"); + removeColorButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (colorList.getSelectedIndex() != -1) { + colorList.remove(colorList.getSelectedIndex()); + } + } + }); + buttonPanel.add(removeColorButton); + + JPanel listPanel = new JPanel(); + listPanel.setBackground(Color.white); + + Border listPanelBorder = BorderFactory.createTitledBorder("Added colors"); + listPanel.setBorder(listPanelBorder); + listPanel.add(listPane); + content.add(listPanel, BorderLayout.CENTER); + + Border buttonPanelBorder = BorderFactory + .createTitledBorder("Change Selected"); + + buttonPanel.setBackground(Color.white); + buttonPanel.setBorder(buttonPanelBorder); + buttonPanel.add(addColorButton); + + content.add(buttonPanel, BorderLayout.SOUTH); + + setPreferredSize(new Dimension(400, 250)); + pack(); + setVisible(true); + } +} diff --git a/JavaDesktopApp/src/com/philips/lighting/gui/LightColoursFrame.java b/JavaDesktopApp/src/com/philips/lighting/gui/LightColoursFrame.java old mode 100644 new mode 100755 index 87309f4..0d1eb29 --- a/JavaDesktopApp/src/com/philips/lighting/gui/LightColoursFrame.java +++ b/JavaDesktopApp/src/com/philips/lighting/gui/LightColoursFrame.java @@ -32,9 +32,9 @@ public class LightColoursFrame extends JFrame { private static final long serialVersionUID = -3830092035262367974L; private PHHueSDK phHueSDK; + private List allLights; private JList lightIdentifiersList; - private List allLights; public LightColoursFrame() { super("Bulb Colour Changer"); @@ -50,13 +50,13 @@ public LightColoursFrame() { // To get lights use the Resource Cache. allLights = bridge.getResourceCache().getAllLights(); - DefaultListModel sampleModel = new DefaultListModel(); + DefaultListModel sampleModel = new DefaultListModel<>(); for (PHLight light : allLights) { - sampleModel.addElement(light.getIdentifier() + " " + light.getName() ); + sampleModel.addElement(light.getIdentifier() + " " + light.getName() ); } - lightIdentifiersList = new JList(sampleModel); + lightIdentifiersList = new JList<>(sampleModel); lightIdentifiersList.setVisibleRowCount(4); lightIdentifiersList.setSelectedIndex(0); @@ -87,6 +87,7 @@ public LightColoursFrame() { } private class ColourChanger implements ActionListener { + @Override public void actionPerformed(ActionEvent event) { Color lightColour = JColorChooser.showDialog(getContentPane(), "Choose Bulb Color", getBackground()); diff --git a/JavaDesktopApp/src/com/philips/lighting/gui/PushLinkFrame.java b/JavaDesktopApp/src/com/philips/lighting/gui/PushLinkFrame.java old mode 100644 new mode 100755 diff --git a/JavaDesktopApp/src/pushlink_image.png b/JavaDesktopApp/src/pushlink_image.png old mode 100644 new mode 100755