|
1 /* |
|
2 Licensed under the Apache License, Version 2.0 (the "License"); |
|
3 you may not use this file except in compliance with the License. |
|
4 You may obtain a copy of the License at |
|
5 |
|
6 http://www.apache.org/licenses/LICENSE-2.0 |
|
7 |
|
8 Unless required by applicable law or agreed to in writing, software |
|
9 distributed under the License is distributed on an "AS IS" BASIS, |
|
10 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
11 See the License for the specific language governing permissions and |
|
12 limitations under the License. |
|
13 */ |
|
14 |
|
15 using System; |
|
16 using System.Net; |
|
17 using System.Windows; |
|
18 using System.Windows.Controls; |
|
19 using System.Windows.Documents; |
|
20 using System.Windows.Ink; |
|
21 using System.Windows.Input; |
|
22 using System.Windows.Media; |
|
23 using System.Windows.Media.Animation; |
|
24 using System.Windows.Shapes; |
|
25 using Microsoft.Phone.Info; |
|
26 using System.Windows.Controls.Primitives; |
|
27 using System.Diagnostics; |
|
28 using System.Windows.Media.Imaging; |
|
29 using System.Windows.Resources; |
|
30 using System.IO; |
|
31 using System.Xml.Linq; |
|
32 using System.Linq; |
|
33 using System.Windows.Threading; |
|
34 |
|
35 namespace WPCordovaClassLib.Cordova.Commands |
|
36 { |
|
37 /// <summary> |
|
38 /// Listens for changes to the state of the battery on the device. |
|
39 /// Currently only the "isPlugged" parameter available via native APIs. |
|
40 /// </summary> |
|
41 public class SplashScreen : BaseCommand |
|
42 { |
|
43 private Popup popup; |
|
44 private bool autohide = true; |
|
45 |
|
46 private static bool WasShown = false; |
|
47 |
|
48 public SplashScreen() |
|
49 { |
|
50 Image SplashScreen = new Image(); |
|
51 BitmapImage splash_image = new BitmapImage(); |
|
52 splash_image.SetSource(Application.GetResourceStream(new Uri(@"SplashScreenImage.jpg", UriKind.Relative)).Stream); |
|
53 SplashScreen.Source = splash_image; |
|
54 |
|
55 // Instansiate the popup and set the Child property of Popup to SplashScreen |
|
56 popup = new Popup() {IsOpen = false, Child = SplashScreen }; |
|
57 // Orient the popup accordingly |
|
58 popup.HorizontalAlignment = HorizontalAlignment.Stretch; |
|
59 popup.VerticalAlignment = VerticalAlignment.Center; |
|
60 |
|
61 |
|
62 LoadConfigValues(); |
|
63 } |
|
64 |
|
65 public override void OnInit() |
|
66 { |
|
67 // we only want to autoload the first time a page is loaded. |
|
68 if (!WasShown) |
|
69 { |
|
70 WasShown = true; |
|
71 show(); |
|
72 } |
|
73 } |
|
74 |
|
75 void LoadConfigValues() |
|
76 { |
|
77 StreamResourceInfo streamInfo = Application.GetResourceStream(new Uri("config.xml", UriKind.Relative)); |
|
78 |
|
79 if (streamInfo != null) |
|
80 { |
|
81 StreamReader sr = new StreamReader(streamInfo.Stream); |
|
82 //This will Read Keys Collection for the xml file |
|
83 XDocument document = XDocument.Parse(sr.ReadToEnd()); |
|
84 |
|
85 var preferences = from results in document.Descendants() |
|
86 where (string)results.Attribute("name") == "AutoHideSplashScreen" |
|
87 select (string)results.Attribute("value") == "true"; |
|
88 |
|
89 if (preferences.Count() > 0 && preferences.First() == false) |
|
90 { |
|
91 autohide = false; |
|
92 } |
|
93 } |
|
94 } |
|
95 |
|
96 public void show(string options = null) |
|
97 { |
|
98 Deployment.Current.Dispatcher.BeginInvoke(() => |
|
99 { |
|
100 if (popup.IsOpen) |
|
101 { |
|
102 return; |
|
103 } |
|
104 |
|
105 popup.Child.Opacity = 0; |
|
106 |
|
107 Storyboard story = new Storyboard(); |
|
108 DoubleAnimation animation; |
|
109 animation = new DoubleAnimation(); |
|
110 animation.From = 0.0; |
|
111 animation.To = 1.0; |
|
112 animation.Duration = new Duration(TimeSpan.FromSeconds(0.2)); |
|
113 |
|
114 Storyboard.SetTarget(animation, popup.Child); |
|
115 Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity")); |
|
116 story.Children.Add(animation); |
|
117 |
|
118 Debug.WriteLine("Fading the splash screen in"); |
|
119 |
|
120 story.Begin(); |
|
121 |
|
122 popup.IsOpen = true; |
|
123 |
|
124 if (autohide) |
|
125 { |
|
126 DispatcherTimer timer = new DispatcherTimer(); |
|
127 timer.Tick += (object sender, EventArgs e) => |
|
128 { |
|
129 hide(); |
|
130 }; |
|
131 timer.Interval = TimeSpan.FromSeconds(1.2); |
|
132 timer.Start(); |
|
133 } |
|
134 }); |
|
135 } |
|
136 |
|
137 |
|
138 public void hide(string options = null) |
|
139 { |
|
140 Deployment.Current.Dispatcher.BeginInvoke(() => |
|
141 { |
|
142 if (!popup.IsOpen) |
|
143 { |
|
144 return; |
|
145 } |
|
146 |
|
147 popup.Child.Opacity = 1.0; |
|
148 |
|
149 Storyboard story = new Storyboard(); |
|
150 DoubleAnimation animation; |
|
151 animation = new DoubleAnimation(); |
|
152 animation.From = 1.0; |
|
153 animation.To = 0.0; |
|
154 animation.Duration = new Duration(TimeSpan.FromSeconds(0.4)); |
|
155 |
|
156 Storyboard.SetTarget(animation, popup.Child); |
|
157 Storyboard.SetTargetProperty(animation, new PropertyPath("Opacity")); |
|
158 story.Children.Add(animation); |
|
159 story.Completed += (object sender, EventArgs e) => |
|
160 { |
|
161 popup.IsOpen = false; |
|
162 }; |
|
163 story.Begin(); |
|
164 }); |
|
165 } |
|
166 } |
|
167 } |