--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/globalindicators/src/CGlobalIndicators.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,220 @@
+/*
+* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Controls the native global indicators.
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <e32property.h> // Publish & Subscribe
+#include <coreapplicationuisdomainpskeys.h>
+#include "CGlobalIndicators.h"
+#include "com_nokia_mid_ui_GlobalIndicators.h"
+#include "logger.h"
+
+// CONSTANTS
+namespace
+{
+// These constants are from JNI header, just defined shorter names here
+// If any other values are used for the indicator or its value, they are
+// passed directly to P&S.
+const TInt KPropertyGlobalMailIndicator =
+ com_nokia_mid_ui_GlobalIndicators_MAIL_INDICATOR;
+
+const TInt KPropertyGlobalChatIndicator =
+ com_nokia_mid_ui_GlobalIndicators_CHAT_INDICATOR;
+
+const TInt KPropertyGlobalIndicatorUninitialized =
+ com_nokia_mid_ui_GlobalIndicators_INDICATOR_UNINITIALIZED;
+
+const TInt KPropertyGlobalIndicatorHide =
+ com_nokia_mid_ui_GlobalIndicators_INDICATOR_HIDE;
+
+const TInt KPropertyGlobalIndicatorShow =
+ com_nokia_mid_ui_GlobalIndicators_INDICATOR_SHOW;
+}
+
+// Required capabilites
+// WriteDeviceData // for setting the email status using RProperty::Set()
+// ReadDeviceData // for retrieving the email status using RProperty::Get()
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// SetGlobalIndicator
+// Sets the value for given global indicator.
+// -----------------------------------------------------------------------------
+//
+TInt CGlobalIndicators::SetGlobalIndicator(TInt aIndicator, TInt aValue)
+{
+
+ LOG2(EJavaGlobalInd, EInfo,
+ "GlobalIndicators::SetGlobalIndicator indicator:%d, value:%d",
+ aIndicator, aValue);
+
+
+ // Make sure that indicator JNI constants match into P&S definitions used
+ // in platform.
+ TUint32 convertedIndicator = aIndicator;
+ if (aIndicator == KPropertyGlobalMailIndicator)
+ {
+ convertedIndicator = KCoreAppUIsNewEmailStatus;
+ }
+ if (aIndicator == KPropertyGlobalChatIndicator)
+ {
+ convertedIndicator = KCoreAppUIsUipInd;
+ }
+
+ TInt readValue = KPropertyGlobalIndicatorUninitialized;
+ RProperty property;
+
+ TInt ret = property.Attach(KPSUidCoreApplicationUIs, convertedIndicator);
+ if (KErrNone == ret)
+ {
+ ret = property.Get(readValue);
+ TInt setValue = KPropertyGlobalIndicatorUninitialized;
+
+ // For Email and Chat indicators, use the specific known P&S values
+ if (convertedIndicator == KCoreAppUIsNewEmailStatus ||
+ convertedIndicator == KCoreAppUIsUipInd)
+ {
+ if (aValue == KPropertyGlobalIndicatorShow)
+ {
+ // Always ok to turn on - just check if is was already on
+ if (readValue != ECoreAppUIsNewEmail &&
+ readValue != ECoreAppUIsShow)
+ {
+ if (convertedIndicator == KCoreAppUIsNewEmailStatus)
+ {
+ setValue = ECoreAppUIsNewEmail;
+ }
+ if (convertedIndicator == KCoreAppUIsUipInd)
+ {
+ setValue = ECoreAppUIsShow;
+ }
+
+ ret = property.Set(setValue);
+ readValue = KPropertyGlobalIndicatorShow;
+ LOG1(EJavaGlobalInd, EInfo,
+ "GlobalIndicators::SetGlobalIndicator ON, value:%D",
+ setValue);
+ }
+ }
+ else if (aValue == KPropertyGlobalIndicatorHide)
+ {
+ // When turning email inficator off bear in mind that there is
+ // no way to know for sure if some other application still would
+ // like to have the indicator turned on.
+ if (readValue != ECoreAppUIsNoNewEmail &&
+ readValue != ECoreAppUIsDoNotShow)
+ {
+ if (convertedIndicator == KCoreAppUIsNewEmailStatus)
+ {
+ setValue = ECoreAppUIsNoNewEmail;
+ }
+ if (convertedIndicator == KCoreAppUIsUipInd)
+ {
+ setValue = ECoreAppUIsDoNotShow;
+ }
+
+ ret = property.Set(setValue);
+ readValue = KPropertyGlobalIndicatorHide;
+ LOG1(EJavaGlobalInd, EInfo,
+ "GlobalIndicators::SetGlobalIndicator OFF, value:%D",
+ setValue);
+ }
+ }
+ else
+ {
+ // Value is not HIDE or SHOW. Try to set it anyway.
+ ret = property.Set(aValue);
+ readValue = aValue;
+ LOG1(EJavaGlobalInd, EInfo,
+ "GlobalIndicators::SetGlobalIndicator value:%D",
+ aValue);
+ }
+ }
+
+ else // other than Email or Chat indicator
+ {
+ ret = property.Set(aValue);
+ readValue = aValue;
+ LOG1(EJavaGlobalInd, EInfo,
+ "GlobalIndicators::SetGlobalIndicator [user defined] value:%D",
+ aValue);
+ }
+
+ }
+ property.Close();
+ if (KErrNone != ret)
+ {
+ LOG1(EJavaGlobalInd, EInfo,
+ "GlobalIndicators::SetGlobalIndicator property error :%D",
+ ret);
+ readValue = ret;
+ }
+
+ // return the property value or an error code
+ return readValue;
+}
+
+// -----------------------------------------------------------------------------
+// GlobalIndicator
+// Gets the value of given global indicator.
+// -----------------------------------------------------------------------------
+//
+TInt CGlobalIndicators::GlobalIndicator(TInt aIndicator)
+{
+ LOG(EJavaGlobalInd, EInfo, "GlobalIndicators::GlobalIndicator");
+ RProperty property;
+ TInt readValue = 0;
+ TInt ret = KErrNotFound;
+
+ if (aIndicator == KPropertyGlobalMailIndicator)
+ {
+ ret = property.Attach(
+ KPSUidCoreApplicationUIs, KCoreAppUIsNewEmailStatus);
+ }
+ else if (aIndicator == KPropertyGlobalChatIndicator)
+ {
+ ret = property.Attach(
+ KPSUidCoreApplicationUIs, KCoreAppUIsUipInd);
+ }
+ else
+ {
+ // A specific indicator (other than mail or chat indicator)
+ ret = property.Attach(
+ KPSUidCoreApplicationUIs, aIndicator);
+ }
+
+ // If Attach has succeeded, try reading the Property value
+ if (KErrNone == ret)
+ {
+ ret = property.Get(readValue);
+ property.Close();
+ }
+
+ // If also reading has succeeded, return the Property value
+ if (KErrNone == ret)
+ {
+ return readValue ;
+ }
+ else
+ {
+ return ret;
+ }
+}
+
+// End of File