Utilities.cs CampusAppWP8::Utility::Utilities CampusAppWP8::Utility //----------------------------------------------------------------------- //<copyrightfile="Utilities.cs"company="BTU/IIT"> //TheMITLicense(MIT).Copyright(c)2013BTU/IIT. //</copyright> //<author>Stubbfel</author> //<date>14.10.2013</date> //<summary>Implementstheutilitiesclass</summary> //----------------------------------------------------------------------- namespaceCampusAppWP8.Utility { usingSystem; usingSystem.Collections.Generic; usingSystem.Device.Location; usingSystem.Globalization; usingSystem.Windows; usingSystem.Windows.Controls; usingSystem.Windows.Media; usingCampusAppWP8.Resources; usingCampusAppWPortalLib8.Model; usingCampusAppWPortalLib8.Model.Settings; usingCampusAppWPortalLib8.Utility; usingMicrosoft.Phone.Net.NetworkInformation; publicstaticclassUtilities { #regionmember privatestaticGeoCoordinatenorthCB=newGeoCoordinate(51.77670359509875,14.293908825617); privatestaticGeoCoordinatemidCB=newGeoCoordinate(51.76737987049448,14.324056352976152); privatestaticGeoCoordinatesouthCB=newGeoCoordinate(51.72668339740452,14.319497377197282); privatestaticGeoCoordinatemidSFB=newGeoCoordinate(51.522217168257356,13.986618441187698); #endregion #regionEnums publicenumDifferenceType { Equal, Less, LessEqual, Greater, GreaterEqual } #endregion #regionMethod publicstaticboolDayDifference(DifferenceTypetype,DateTimedate,doubletotalDiff) { boolretValue=false; TimeSpandiff=DateTime.Now.Subtract(date); if((DifferenceType.Less==type)||(DifferenceType.LessEqual==type)) { if(diff.TotalDays<totalDiff) { retValue=true; } } if((DifferenceType.Greater==type)||(DifferenceType.GreaterEqual==type)) { if(diff.TotalDays>totalDiff) { retValue=true; } } if((DifferenceType.Equal==type)||(DifferenceType.LessEqual==type)||(DifferenceType.GreaterEqual==type)) { if(diff.TotalDays==totalDiff) { retValue=true; } } returnretValue; } publicstaticList<DependencyObject>GetChild(DependencyObjectrootObj,stringelemName) { List<DependencyObject>retValue=newList<DependencyObject>(); for(intk=0;k<VisualTreeHelper.GetChildrenCount(rootObj);k++) { varchild=VisualTreeHelper.GetChild(rootObj,k); if((childasFrameworkElement).Name.Equals(elemName)) { retValue.Add(child); } else { retValue.AddRange(Utilities.GetChild(childasDependencyObject,elemName)); } } returnretValue; } publicstaticFrameworkElementGetElement(DependencyObjectrootObj,stringparentGridName,stringelemName,intindex=0) { List<DependencyObject>l=Utilities.GetChild(rootObj,parentGridName); if(index>l.Count-1) { thrownewIndexOutOfRangeException("index("+index+")outofrange(<"+l.Count+")"); } GridparentGrid=l[index]asGrid; FrameworkElementelem=null; foreach(FrameworkElementtempEleminparentGrid.Children) { if(tempElem.Name==elemName) { elem=tempElem; } } returnelem; } publicstaticvoidSetElementVisibility(DependencyObjectrootObj,stringparentGridName,stringelemName,Visibilityvis,intindex=0) { FrameworkElementelem=GetElement(rootObj,parentGridName,elemName,index); if(elem!=null) { elem.Visibility=vis; } } publicstaticVisibilityGetElementVisibility(DependencyObjectrootObj,stringparentGridName,stringelemName,intindex=0) { VisibilityretValue; FrameworkElementelem=GetElement(rootObj,parentGridName,elemName,index); if(elem!=null) { retValue=elem.Visibility; } else { thrownewNotImplementedException("CouldnotfindaUIElementwithname("+elemName+")"); } returnretValue; } publicstaticGeoPosition<GeoCoordinate>DetermineCurrentPosition() { if(!Settings.AppSetting.GeoWatchEnable) { returnnull; } GeoCoordinateWatcherwatcher=newGeoCoordinateWatcher(GeoPositionAccuracy.High); boolsuccess=watcher.TryStart(false,TimeSpan.FromMilliseconds(10000)); GeoPosition<GeoCoordinate>geoposition=null; if(success) { geoposition=watcher.Position; } elseif(watcher.Permission.Equals(GeoPositionPermission.Denied)) { //setto0point,ifaccesstodeviceisnotallow geoposition=newGeoPosition<GeoCoordinate>(); geoposition.Location=newGeoCoordinate(0,0); geoposition.Timestamp=DateTime.Now; } watcher.Stop(); returngeoposition; } publicstaticvoidSetGeoPositionToZero() { stringtime=DateTime.Now.Ticks.ToString(); App.SaveToAppState<string>(Constants.GeoWatch_CurrentPosition_Lat,"0"); App.SaveToAppState<string>(Constants.GeoWatch_CurrentPosition_Long,"0"); App.SaveToAppState<string>(Constants.GeoWatch_CurrentPosition_Time,time); } publicstaticvoidDetermineAndStoreCurrentPositionForce() { GeoPosition<GeoCoordinate>geoposition=Utilities.DetermineCurrentPosition(); if(geoposition!=null) { stringlat=geoposition.Location.Latitude.ToString(CultureInfo.InvariantCulture); stringlog=geoposition.Location.Longitude.ToString(CultureInfo.InvariantCulture); stringtime=geoposition.Timestamp.Ticks.ToString(); try { App.SaveToAppState<string>(Constants.GeoWatch_CurrentPosition_Lat,lat); App.SaveToAppState<string>(Constants.GeoWatch_CurrentPosition_Long,log); App.SaveToAppState<string>(Constants.GeoWatch_CurrentPosition_Time,time); } catch(Exceptionex) { Logger.LogException(ex); } } } publicstaticvoidDetermineAndStoreCurrentPosition() { stringlat=App.LoadFromAppState<string>(Constants.GeoWatch_CurrentPosition_Lat); stringlog=App.LoadFromAppState<string>(Constants.GeoWatch_CurrentPosition_Long); stringtime=App.LoadFromAppState<string>(Constants.GeoWatch_CurrentPosition_Time); if(lat==null||log==null||time==null||lat.Equals(string.Empty)||log.Equals(string.Empty)||time.Equals(string.Empty)) { Utilities.DetermineAndStoreCurrentPositionForce(); } else { longlongTime=0; if(!long.TryParse(time,outlongTime)) { return; } DateTimeexpired=newDateTime(longTime).AddMinutes(15); if(DateTime.Now.Ticks>expired.Ticks) { Utilities.DetermineAndStoreCurrentPositionForce(); } } } publicstaticboolIsUniNetworkAvailable() { NetworkInterfaceListnetworkInterfaceList=newNetworkInterfaceList(); foreach(NetworkInterfaceInfonetworkInterfaceInfoinnetworkInterfaceList) { if(networkInterfaceInfo.InterfaceType==NetworkInterfaceType.Wireless80211 &&networkInterfaceInfo.InterfaceSubtype==NetworkInterfaceSubType.WiFi &&networkInterfaceInfo.InterfaceName.Equals(Constants.AppSetting_UniNetworkName) &&networkInterfaceInfo.Description.Equals(Constants.AppSetting_UniNetworkDesc) &&networkInterfaceInfo.InterfaceState==ConnectState.Connected) { returntrue; } } returnfalse; } publicstaticboolIsWifiAvailable() { NetworkInterfaceListnetworkInterfaceList=newNetworkInterfaceList(); foreach(NetworkInterfaceInfonetworkInterfaceInfoinnetworkInterfaceList) { if(networkInterfaceInfo.InterfaceType==NetworkInterfaceType.Wireless80211 &&networkInterfaceInfo.InterfaceSubtype==NetworkInterfaceSubType.WiFi &&networkInterfaceInfo.InterfaceState==ConnectState.Connected) { returntrue; } } returnfalse; } publicstaticForceTypeGetLoadModus<T>() { if(Settings.AppSetting.OnlyWifi&&!Settings.AppSetting.WifiEnable) { returnForceType.FORCE_FILE; } else { returnForceType.INVALID; } } publicstaticboolIsRoomId(stringplaceId) { if(Wp8StringManager.IsDigitsOnly(placeId)&&placeId.Length>7) { returntrue; } returnfalse; } publicstaticCampusDetermineCampus() { Campusresult=Campus.UserSettingCampus; Utilities.DetermineAndStoreCurrentPosition(); doublelat; doublelog; if(!double.TryParse(App.LoadFromAppState<string>(Constants.GeoWatch_CurrentPosition_Lat),NumberStyles.Number,CultureInfo.InvariantCulture,outlat) ||!double.TryParse(App.LoadFromAppState<string>(Constants.GeoWatch_CurrentPosition_Long),NumberStyles.Number,CultureInfo.InvariantCulture,outlog)) { returnresult; } PointcurrentPoint=newPoint(log,lat); doubleminDistance=Utilities.CalcDistance(currentPoint,newPoint(Utilities.northCB.Longitude,Utilities.northCB.Latitude)); if(minDistance<0.01) { result=Campus.CB_NORTH; } doubletmpDistance=Utilities.CalcDistance(currentPoint,newPoint(Utilities.midCB.Longitude,Utilities.midCB.Latitude)); if(tmpDistance<0.01&&tmpDistance<minDistance) { minDistance=tmpDistance; result=Campus.CB_MAIN; } tmpDistance=Utilities.CalcDistance(currentPoint,newPoint(Utilities.southCB.Longitude,Utilities.southCB.Latitude)); if(tmpDistance<0.01&&tmpDistance<minDistance) { minDistance=tmpDistance; result=Campus.CB_SOUTH; } tmpDistance=Utilities.CalcDistance(currentPoint,newPoint(Utilities.midSFB.Longitude,Utilities.midSFB.Latitude)); if(tmpDistance<0.01&&tmpDistance<minDistance) { minDistance=tmpDistance; result=Campus.SFB_MAIN; } returnresult; } publicstaticdoubleCalcDistance(Pointsrc,Pointdst) { doublexPow=Math.Pow(dst.X-src.X,2); doubleyPow=Math.Pow(dst.Y-src.Y,2); doubleresult=Math.Sqrt(xPow+yPow); returnMath.Sqrt(Math.Pow(dst.X-src.X,2)+Math.Pow(dst.Y-src.Y,2)); } #endregion } }