From 4b27759c9f5b442c02b60d6728141257c89ffab8 Mon Sep 17 00:00:00 2001 From: Emil Ivov Date: Wed, 16 Jul 2008 21:08:16 +0000 Subject: [PATCH] Moving the AutoAway configuration to the general configuration form. (Patch by Damien Roth). Improved the text of Exception messages in OpSetBasicTelephonySipImpl Cosmetic fixes in the media package Reduced default logging level --- lib/logging.properties | 23 +- resources/languages/resources.properties | 8 +- .../impl/media/ProcessorUtility.java | 7 +- .../media/device/DeviceConfiguration.java | 3 +- .../impl/media/device/JmfDeviceDetector.java | 62 +++--- .../OperationSetBasicTelephonySipImpl.java | 5 +- .../statusupdate/ConfigurationDialog.java | 200 ------------------ .../plugin/statusupdate/Resources.java | 2 - .../statusupdate/SettingsWindowMenuEntry.java | 68 ------ .../plugin/statusupdate/StatusConfigForm.java | 189 +++++++++++++++++ .../statusupdate/StatusUpdateActivator.java | 35 +-- .../statusupdate/statusupdate.manifest.mf | 4 +- 12 files changed, 253 insertions(+), 353 deletions(-) create mode 100644 src/net/java/sip/communicator/plugin/statusupdate/StatusConfigForm.java diff --git a/lib/logging.properties b/lib/logging.properties index 4f5a7672b..85b86d01e 100644 --- a/lib/logging.properties +++ b/lib/logging.properties @@ -57,25 +57,26 @@ java.util.logging.ConsoleHandler.formatter = net.java.sip.communicator.util.ScLo # We don't want trace logs from joscar and joustsim net.kano.level = INFO -ymsg.network.level = FINEST +ymsg.network.level = INFO # We don't want trace logs from java-jml net.sf.cindy.impl.level = INFO # But we want everything coming from the sip-comm net.java.sip.communicator.impl.level = INFO -net.java.sip.communicator.impl.protocol.level = FINEST -net.java.sip.communicator.impl.shutdown.level = FINEST -net.java.sip.communicator.impl.contactlist.level = FINEST -net.java.sip.communicator.slick.level = FINEST -net.java.sip.communicator.impl.level = FINEST -net.java.sip.communicator.service.level = FINEST -net.java.sip.communicator.util.level = FINEST -net.java.sip.communicator.service.configuration.level = FINEST -net.java.sip.communicator.impl.configuration.level = FINEST +net.java.sip.communicator.impl.protocol.level = INFO +net.java.sip.communicator.impl.shutdown.level = INFO +net.java.sip.communicator.impl.contactlist.level = INFO +net.java.sip.communicator.slick.level = INFO +net.java.sip.communicator.impl.level = INFO +net.java.sip.communicator.service.level = INFO +net.java.sip.communicator.util.level = INFO +net.java.sip.communicator.service.configuration.level = INFO +net.java.sip.communicator.impl.configuration.level = INFO net.java.sip.communicator.impl.history.level = INFO net.java.sip.communicator.impl.gui.level = INFO -net.java.sip.communicator.impl.protocol.zeroconf.jmdns.level=INFO +net.java.sip.communicator.impl.protocol.zeroconf.jmdns.level = WARN +net.java.sip.communicator.impl.media.level = WARN # For example, set the com.xyz.foo logger to only log SEVERE # messages: diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index a00edb07e..b5f218ad1 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -578,12 +578,10 @@ knownHosts=Known Hosts: accountDetails=SSH Account Details # status update -cancel=Cancel -enable=Enable -info=Information +automaticStatus=Automatic Status +enableChangeStatus=Change status while away +awayMinutes=Minutes before being away : infotext=Set "Idle", when your computer is not used for X minutes. The status is reset to the status before, when activity is detected. -menuEntry=Automatic Status -minutes=Minutes # updatechecker dialogTitle=New version available diff --git a/src/net/java/sip/communicator/impl/media/ProcessorUtility.java b/src/net/java/sip/communicator/impl/media/ProcessorUtility.java index ff5ab7ad3..ace645a70 100644 --- a/src/net/java/sip/communicator/impl/media/ProcessorUtility.java +++ b/src/net/java/sip/communicator/impl/media/ProcessorUtility.java @@ -94,10 +94,11 @@ public void controllerUpdate(ControllerEvent ce) { * indicating success or failure of the operation. * * @param processor Processor - * @param state int - * @return boolean + * @param state one of the Processor.XXXed sate vars + * @return boolean true if the state has been reached and false otherwise */ - public synchronized boolean waitForState(Processor processor, int state) { + public synchronized boolean waitForState(Processor processor, int state) + { processor.addControllerListener(this); setFailed(false); diff --git a/src/net/java/sip/communicator/impl/media/device/DeviceConfiguration.java b/src/net/java/sip/communicator/impl/media/device/DeviceConfiguration.java index ce8fc5c0d..d49aaa961 100644 --- a/src/net/java/sip/communicator/impl/media/device/DeviceConfiguration.java +++ b/src/net/java/sip/communicator/impl/media/device/DeviceConfiguration.java @@ -80,7 +80,8 @@ private void extractConfiguredCaptureDevices() { logger.info("Scanning for configured Audio Devices."); Vector audioCaptureDevices = CaptureDeviceManager.getDeviceList(new - AudioFormat(AudioFormat.LINEAR, 44100, 16, 1)); + AudioFormat(AudioFormat.LINEAR, 44100, 16, + 1));//1 means 1 channel for mono if (audioCaptureDevices.size() < 1) { logger.error("No Audio Device was found."); audioCaptureDevice = null; diff --git a/src/net/java/sip/communicator/impl/media/device/JmfDeviceDetector.java b/src/net/java/sip/communicator/impl/media/device/JmfDeviceDetector.java index 67265e70f..0a4ab91b4 100644 --- a/src/net/java/sip/communicator/impl/media/device/JmfDeviceDetector.java +++ b/src/net/java/sip/communicator/impl/media/device/JmfDeviceDetector.java @@ -78,38 +78,38 @@ public JmfDeviceDetector() */ private void initialize() { - if (FMJConditionals.USE_JMF_INTERNAL_REGISTRY) - { - // This uses JMF internals: - // see if the registry has already been "tagged" by us, skip auto-detection if - // it has. - // This was probably done because JMF auto-detection is very slow, especially - // for video devices. FMJ does this quickly, so there is no need for this - // kind of workaround (besides the fact that these internal functions are not - // implemented in FMJ). - String author = (String)Registry.get(PROP_REGISTRY_AUTHOR); - - if(author != null) - { - return; - } - - Registry.set(PROP_ALLOW_CAPTURE_FROM_APPLETS, new Boolean(true)); - Registry.set(PROP_ALLOW_SAVE_FILE_FROM_APPLETS, new Boolean(true)); - - Registry.set(PROP_REGISTRY_AUTHOR, PROP_REGISTRY_AUTHOR_VALUE); + if (FMJConditionals.USE_JMF_INTERNAL_REGISTRY) + { + // This uses JMF internals: + // see if the registry has already been "tagged" by us, skip auto-detection if + // it has. + // This was probably done because JMF auto-detection is very slow, especially + // for video devices. FMJ does this quickly, so there is no need for this + // kind of workaround (besides the fact that these internal functions are not + // implemented in FMJ). + String author = (String)Registry.get(PROP_REGISTRY_AUTHOR); + + if(author != null) + { + return; + } + + Registry.set(PROP_ALLOW_CAPTURE_FROM_APPLETS, new Boolean(true)); + Registry.set(PROP_ALLOW_SAVE_FILE_FROM_APPLETS, new Boolean(true)); + + Registry.set(PROP_REGISTRY_AUTHOR, PROP_REGISTRY_AUTHOR_VALUE); - try - { - Registry.commit(); - } - catch (Exception exc) - { - logger.error( - "Failed to initially commit JMFRegistry. Ignoring err." - , exc); - } - } + try + { + Registry.commit(); + } + catch (Exception exc) + { + logger.error( + "Failed to initially commit JMFRegistry. Ignoring err." + , exc); + } + } detectDirectAudio(); detectS8DirectAudio(); diff --git a/src/net/java/sip/communicator/impl/protocol/sip/OperationSetBasicTelephonySipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/OperationSetBasicTelephonySipImpl.java index 3ea5a51d8..59d9108dd 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/OperationSetBasicTelephonySipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/OperationSetBasicTelephonySipImpl.java @@ -233,7 +233,6 @@ private CallSipImpl createOutgoingCall(Address calleeAddress) CallParticipantSipImpl callParticipant = createCallParticipantFor(inviteTransaction, jainSipProvider); - //invite content try { @@ -279,10 +278,10 @@ private CallSipImpl createOutgoingCall(Address calleeAddress) catch (MediaException ex) { logger.error( - "Failed to parse sdp data while creating invite request!" + "Could not access media devices!" , ex); throw new OperationFailedException( - "Failed to parse sdp data while creating invite request!" + "Could not access media devices!" , OperationFailedException.INTERNAL_ERROR , ex); } diff --git a/src/net/java/sip/communicator/plugin/statusupdate/ConfigurationDialog.java b/src/net/java/sip/communicator/plugin/statusupdate/ConfigurationDialog.java index 4ca1a1c52..e69de29bb 100644 --- a/src/net/java/sip/communicator/plugin/statusupdate/ConfigurationDialog.java +++ b/src/net/java/sip/communicator/plugin/statusupdate/ConfigurationDialog.java @@ -1,200 +0,0 @@ -/* - * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ -package net.java.sip.communicator.plugin.statusupdate; - -import java.awt.*; -import java.awt.event.*; - -import javax.swing.*; - -import net.java.sip.communicator.service.configuration.*; - -/** - * The configuration Dialog for the Mail Notification Plugin - * - * @author Thomas Hofer - * - */ -public class ConfigurationDialog extends JDialog -{ - /** - * - */ - private static final long serialVersionUID = -3850044618335728627L; - - private JCheckBox enable; - private JSpinner timer; - - /** - * Default Constructor - */ - public ConfigurationDialog() - { - super(); - init(); - initValues(); - - getContentPane().setPreferredSize(new Dimension(400, 200)); - getContentPane().setLayout(new GridLayout(1, 1)); - - // move window to middle of screen - setLocationRelativeTo(null); - - // Set title - setTitle(Resources.getString("menuEntry")); - - // Set closing system - addWindowListener(new WindowAdapter() - { - public void windowClosing(WindowEvent e) - { - dispose(); - } - }); - } - - /** - * Initialize the ui-components - */ - private void init() - { - // Main panel - JPanel mainPanel = new JPanel(); - mainPanel.setLayout(new GridBagLayout()); - mainPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); - - // Description - JTextArea infoLabel = new JTextArea(Resources.getString("infotext")); - infoLabel.setBorder(BorderFactory.createTitledBorder(Resources - .getString("info"))); - infoLabel.setEditable(false); - infoLabel.setWrapStyleWord(true); - infoLabel.setLineWrap(true); - - // Checkbox - enable = new JCheckBox(Resources.getString("enable")); - enable.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - timer.setEnabled(enable.isSelected()); - } - }); - - // Spinner - timer = new JSpinner(new SpinnerNumberModel(15, 1, 180, 1)); - - // Button panel : OK and Cancel button - JPanel okCancelPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT)); - JButton ok = new JButton(Resources.getString("ok")); - ok.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - saveData(); - dispose(); - } - }); - JButton cancel = new JButton(Resources.getString("cancel")); - cancel.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - dispose(); - } - }); - - okCancelPanel.add(ok); - okCancelPanel.add(cancel); - - GridBagConstraints mainGBC = new GridBagConstraints(); - mainGBC.gridx = 0; - mainGBC.gridy = 0; - mainGBC.weightx = 1; - mainGBC.fill = GridBagConstraints.BOTH; - mainGBC.anchor = GridBagConstraints.NORTHWEST; - mainGBC.weighty = 1; - mainGBC.gridwidth = 3; - - mainPanel.add(infoLabel, mainGBC); - - mainGBC.fill = GridBagConstraints.HORIZONTAL; - mainGBC.gridwidth = 1; - mainGBC.gridy++; - mainGBC.weightx = 1; - mainGBC.weighty = 0; - mainGBC.gridx = 0; - mainPanel.add(enable, mainGBC); - - mainGBC.weightx = 0; - mainGBC.gridx++; - mainPanel.add(timer, mainGBC); - mainGBC.weightx = 1; - mainGBC.gridx++; - mainPanel.add(new JLabel(Resources.getString("minutes")), mainGBC); - - mainGBC.gridwidth = 3; - mainGBC.gridx = 0; - mainGBC.gridy++; - mainGBC.weighty = 0; - mainPanel.add(okCancelPanel, mainGBC); - - this.getContentPane().add(mainPanel); - } - - /** - * (Re-)Initializes the values of the settings dependent on the selected - * account - */ - private void initValues() - { - ConfigurationService configService = StatusUpdateActivator - .getConfigService(); - - String e = (String) configService.getProperty(Preferences.ENABLE); - if (e != null) - { - try - { - enable.setSelected(Boolean.parseBoolean(e)); - timer.setEnabled(Boolean.parseBoolean(e)); - } catch (NumberFormatException ex) - { - enable.setSelected(false); - timer.setEnabled(false); - } - } - else - { - enable.setSelected(false); - timer.setEnabled(false); - } - - String t = (String) configService.getString(Preferences.TIMER); - if (t != null) - { - try - { - timer.setValue(Integer.parseInt(t)); - } - catch (NumberFormatException ex) - { - } - } - } - - private void saveData() - { - ConfigurationService configService = StatusUpdateActivator - .getConfigService(); - - configService.setProperty(Preferences.ENABLE, Boolean - .toString(enable.isSelected())); - Integer interval = (Integer) timer.getValue(); - configService.setProperty(Preferences.TIMER, interval); - } -} diff --git a/src/net/java/sip/communicator/plugin/statusupdate/Resources.java b/src/net/java/sip/communicator/plugin/statusupdate/Resources.java index 7b7490219..ccb15f570 100644 --- a/src/net/java/sip/communicator/plugin/statusupdate/Resources.java +++ b/src/net/java/sip/communicator/plugin/statusupdate/Resources.java @@ -6,8 +6,6 @@ */ package net.java.sip.communicator.plugin.statusupdate; -import java.util.*; - import net.java.sip.communicator.service.resources.*; import org.osgi.framework.*; diff --git a/src/net/java/sip/communicator/plugin/statusupdate/SettingsWindowMenuEntry.java b/src/net/java/sip/communicator/plugin/statusupdate/SettingsWindowMenuEntry.java index 364c6901b..e69de29bb 100644 --- a/src/net/java/sip/communicator/plugin/statusupdate/SettingsWindowMenuEntry.java +++ b/src/net/java/sip/communicator/plugin/statusupdate/SettingsWindowMenuEntry.java @@ -1,68 +0,0 @@ -package net.java.sip.communicator.plugin.statusupdate; - -import java.awt.Dialog.*; -import java.awt.event.*; - -import javax.swing.JMenuItem; - -import net.java.sip.communicator.service.contactlist.*; -import net.java.sip.communicator.service.gui.*; - -public class SettingsWindowMenuEntry implements PluginComponent -{ - - private JMenuItem settingsMenuEntry = new JMenuItem(Resources - .getString("menuEntry")); - - private Container container; - - public SettingsWindowMenuEntry(Container container) - { - settingsMenuEntry.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - ConfigurationDialog dialog = new ConfigurationDialog(); - dialog.pack(); - dialog.setModal(true); - dialog.setVisible(true); - - StatusUpdateActivator.startThread(); - } - }); - this.container = container; - } - - public Object getComponent() - { - return settingsMenuEntry; - } - - public String getConstraints() - { - return null; - } - - public Container getContainer() - { - return container; - } - - public String getName() - { - return Resources.getString("aboutMenuEntry"); - } - - public void setCurrentContact(MetaContact metaContact) - { - } - - public void setCurrentContactGroup(MetaContactGroup metaGroup) - { - } - - public int getPositionIndex() - { - return -1; - } -} diff --git a/src/net/java/sip/communicator/plugin/statusupdate/StatusConfigForm.java b/src/net/java/sip/communicator/plugin/statusupdate/StatusConfigForm.java new file mode 100644 index 000000000..903653c93 --- /dev/null +++ b/src/net/java/sip/communicator/plugin/statusupdate/StatusConfigForm.java @@ -0,0 +1,189 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.plugin.statusupdate; + +import java.awt.*; +import java.awt.event.*; + +import javax.swing.*; +import javax.swing.event.*; + +import net.java.sip.communicator.service.configuration.*; +import net.java.sip.communicator.service.gui.*; + +/** + * The ConfigurationForm that would be added in the user interface + * configuration window. + * + * @author ROTH Damien + */ +public class StatusConfigForm + extends JPanel + implements ConfigurationForm +{ + private JPanel mainPanel; + + private JCheckBox enable; + + private JSpinner timer; + + /** + * Create an instance of StatusConfigForm + */ + public StatusConfigForm() + { + super(new BorderLayout(10, 10)); + + mainPanel = new JPanel(); + mainPanel.setLayout(new BorderLayout()); + + init(); + initValues(); + + this.add(mainPanel); + } + + /** + * Init the widgets + */ + private void init() + { + JPanel autoStatusPanel = new JPanel(new BorderLayout()); + + // Title : automatic status + JLabel autoStatusLabel = new JLabel(Resources.getString("automaticStatus")); + + + Font bold = autoStatusLabel.getFont().deriveFont(Font.BOLD); + autoStatusLabel.setFont(bold); + + JPanel fieldsPanel = new JPanel(new BorderLayout(5, 5)); + fieldsPanel.setBorder(BorderFactory.createEmptyBorder(10,30,0,0)); + + enable = new JCheckBox(Resources.getString("enableChangeStatus")); + fieldsPanel.add(enable, BorderLayout.NORTH); + enable.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) + { + timer.setEnabled(enable.isSelected()); + saveData(); + } + }); + + + JPanel timerPanel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + // Texte + timerPanel.add(new JLabel(Resources.getString("awayMinutes"))); + // Spinner + timer = new JSpinner(new SpinnerNumberModel(15, 1, 180, 1)); + timerPanel.add(timer); + timer.addChangeListener(new ChangeListener() + { + public void stateChanged(ChangeEvent e) + { + saveData(); + } + }); + + fieldsPanel.add(timerPanel, BorderLayout.WEST); + autoStatusPanel.add(autoStatusLabel, BorderLayout.NORTH); + autoStatusPanel.add(fieldsPanel, BorderLayout.CENTER); + + mainPanel.add(autoStatusPanel, BorderLayout.NORTH); + } + + /** + * Init the values of the widgets + */ + private void initValues() + { + ConfigurationService configService = StatusUpdateActivator + .getConfigService(); + + String e = (String) configService.getProperty(Preferences.ENABLE); + if (e != null) + { + try + { + this.enable.setSelected(Boolean.parseBoolean(e)); + this.timer.setEnabled(Boolean.parseBoolean(e)); + } + catch (NumberFormatException ex) + { + this.enable.setSelected(false); + this.timer.setEnabled(false); + } + } + else + { + this.enable.setSelected(false); + this.timer.setEnabled(false); + } + + String t = (String) configService.getString(Preferences.TIMER); + if (t != null) + { + try + { + this.timer.setValue(Integer.parseInt(t)); + } + catch (NumberFormatException ex) + { + } + } + } + + /** + * Save data in the configuration file + */ + private void saveData() + { + ConfigurationService configService = StatusUpdateActivator + .getConfigService(); + + configService.setProperty(Preferences.ENABLE, Boolean + .toString(enable.isSelected())); + Integer interval = (Integer) timer.getValue(); + configService.setProperty(Preferences.TIMER, interval); + } + + /** + * Implements the ConfigurationForm.getForm() method. Returns the + * component corresponding to this configuration form. + */ + public Object getForm() + { + return this; + } + + /** + * Implements the ConfigurationForm.getIcon() method. Returns the + * icon of this configuration form. + */ + public byte[] getIcon() + { + return null; + } + + /** + * Implements the ConfigurationForm.getIndex() method. + */ + public int getIndex() + { + return -1; + } + + /** + * Implements the ConfigurationForm.getIcon() method. Returns the + * icon of this configuration form. + */ + public String getTitle() + { + return Resources.getString("automaticStatus"); + } + +} diff --git a/src/net/java/sip/communicator/plugin/statusupdate/StatusUpdateActivator.java b/src/net/java/sip/communicator/plugin/statusupdate/StatusUpdateActivator.java index faaf19e8d..58cd6215e 100644 --- a/src/net/java/sip/communicator/plugin/statusupdate/StatusUpdateActivator.java +++ b/src/net/java/sip/communicator/plugin/statusupdate/StatusUpdateActivator.java @@ -31,8 +31,6 @@ public class StatusUpdateActivator implements BundleActivator private static Thread thread = null; private static StatusUpdateThread runner = null; - private ServiceRegistration menuRegistration; - /** * Starts this bundle * @@ -43,6 +41,15 @@ public class StatusUpdateActivator implements BundleActivator public void start(BundleContext bc) throws Exception { bundleContext = bc; + + + + // Set config form + StatusConfigForm statusCF = new StatusConfigForm(); + bundleContext.registerService(ConfigurationForm.class.getName(), + statusCF, + null); + new Thread(new Runnable() { @@ -58,7 +65,6 @@ public void run() startThread(); } }).start(); - registerMenuEntry(); } static void startThread() @@ -104,7 +110,6 @@ static void startThread() public void stop(BundleContext bundleContext) throws Exception { stopThread(); - unRegisterMenuEntry(); } static void stopThread() @@ -171,26 +176,4 @@ static ConfigurationService getConfigService() return (ConfigurationService) bundleContext.getService(confServiceRefs); } - - private void registerMenuEntry() - { - SettingsWindowMenuEntry menuEntry = new SettingsWindowMenuEntry( - Container.CONTAINER_TOOLS_MENU); - - Hashtable toolsMenuFilter = new Hashtable(); - toolsMenuFilter.put(Container.CONTAINER_ID, - Container.CONTAINER_TOOLS_MENU.getID()); - - menuRegistration = bundleContext.registerService(PluginComponent.class - .getName(), menuEntry, toolsMenuFilter); - } - - private void unRegisterMenuEntry() - { - if (menuRegistration != null) - { - menuRegistration.unregister(); - } - } - } \ No newline at end of file diff --git a/src/net/java/sip/communicator/plugin/statusupdate/statusupdate.manifest.mf b/src/net/java/sip/communicator/plugin/statusupdate/statusupdate.manifest.mf index 24d261759..d76b4a10c 100644 --- a/src/net/java/sip/communicator/plugin/statusupdate/statusupdate.manifest.mf +++ b/src/net/java/sip/communicator/plugin/statusupdate/statusupdate.manifest.mf @@ -10,7 +10,5 @@ Import-Package: org.osgi.framework, net.java.sip.communicator.service.configuration, net.java.sip.communicator.service.gui, javax.swing, + javax.swing.event, javax.swing.border, - - - \ No newline at end of file