PageRenderTime 49ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/BaconographyWP8Core/View/SettingsPageView.xaml.cs

https://github.com/hippiehunter/Baconography
C# | 391 lines | 368 code | 23 blank | 0 comment | 26 complexity | b9713d83d95f5e4bd5433766dfbcb1cf MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Navigation;
  8. using Microsoft.Phone.Controls;
  9. using Microsoft.Phone.Shell;
  10. using BaconographyWP8Core;
  11. using BaconographyWP8.ViewModel;
  12. using Microsoft.Practices.ServiceLocation;
  13. using BaconographyPortable.Services;
  14. using BaconographyWP8.Common;
  15. using GalaSoft.MvvmLight.Messaging;
  16. using BaconographyPortable.Messages;
  17. using BaconographyPortable.ViewModel;
  18. using System.Windows.Media.Imaging;
  19. using System.IO;
  20. using System.Windows.Media;
  21. using BaconographyWP8BackgroundControls.View;
  22. using System.Text;
  23. using Windows.ApplicationModel.Store;
  24. using BaconographyWP8Core.ViewModel;
  25. using System.IO.IsolatedStorage;
  26. namespace BaconographyWP8.View
  27. {
  28. [ViewUri("/BaconographyWP8Core;component/View/SettingsPageView.xaml")]
  29. public partial class SettingsPageView : PhoneApplicationPage
  30. {
  31. public SettingsPageView()
  32. {
  33. InitializeComponent();
  34. }
  35. protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
  36. {
  37. if (e.NavigationMode == NavigationMode.New && e.Uri.ToString() == "/BaconographyWP8Core;component/MainPage.xaml" && e.IsCancelable)
  38. e.Cancel = true;
  39. else
  40. base.OnNavigatingFrom(e);
  41. }
  42. protected override void OnNavigatedTo(NavigationEventArgs e)
  43. {
  44. base.OnNavigatedTo(e);
  45. if (e.NavigationMode == NavigationMode.New && this.NavigationContext.QueryString.ContainsKey("data") && !string.IsNullOrWhiteSpace(this.NavigationContext.QueryString["data"]))
  46. {
  47. pivot.SelectedIndex = 1;
  48. }
  49. if (e.NavigationMode == NavigationMode.Back)
  50. {
  51. CompletePickerTask();
  52. }
  53. UpdateLockScreenStatus();
  54. }
  55. private void UpdateLockScreenStatus()
  56. {
  57. var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication;
  58. if (isProvider)
  59. {
  60. lockStatus.IsChecked = true;
  61. lockStatus.IsEnabled = false;
  62. }
  63. else
  64. {
  65. lockStatus.IsChecked = false;
  66. lockStatus.IsEnabled = true;
  67. }
  68. }
  69. protected void OpenHelp(string topic, string content)
  70. {
  71. double height = LayoutRoot.ActualHeight - 24;
  72. double width = LayoutRoot.ActualWidth - 24;
  73. helpPopup.Height = height;
  74. helpPopup.Width = width;
  75. var child = helpPopup.Child as HelpView;
  76. if (child == null)
  77. child = new HelpView();
  78. child.Height = height;
  79. child.Width = width;
  80. child.Topic = topic;
  81. child.Content = content;
  82. helpPopup.Child = child;
  83. helpPopup.IsOpen = true;
  84. }
  85. protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
  86. {
  87. if (helpPopup.IsOpen == true)
  88. {
  89. helpPopup.IsOpen = false;
  90. e.Cancel = true;
  91. }
  92. else
  93. {
  94. base.OnBackKeyPress(e);
  95. }
  96. }
  97. protected override void OnNavigatedFrom(NavigationEventArgs e)
  98. {
  99. Messenger.Default.Send<SettingsChangedMessage>(new SettingsChangedMessage());
  100. var settingsService = ServiceLocator.Current.GetInstance<ISettingsService>();
  101. if (settingsService.InvertSystemTheme)
  102. {
  103. if (!IsolatedStorageSettings.ApplicationSettings.Contains("InvertTheme"))
  104. {
  105. IsolatedStorageSettings.ApplicationSettings.Add("InvertTheme", "");
  106. MessageBox.Show("Theme changes require you to restart the application before they take effect.");
  107. }
  108. }
  109. else
  110. {
  111. if (IsolatedStorageSettings.ApplicationSettings.Contains("InvertTheme"))
  112. {
  113. IsolatedStorageSettings.ApplicationSettings.Remove("InvertTheme");
  114. MessageBox.Show("Theme changes require you to restart the application before they take effect.");
  115. }
  116. }
  117. base.OnNavigatedFrom(e);
  118. }
  119. private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
  120. {
  121. var _navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
  122. var hyperlinkButton = e.OriginalSource as ContextDataButton;
  123. if (hyperlinkButton != null)
  124. {
  125. _navigationService.NavigateToExternalUri(new Uri((string)hyperlinkButton.ContextData));
  126. }
  127. }
  128. private void OrientationLock_Checked(object sender, RoutedEventArgs e)
  129. {
  130. var preferences = this.DataContext as ContentPreferencesViewModel;
  131. if (preferences != null)
  132. {
  133. preferences.Orientation = this.Orientation.ToString();
  134. }
  135. }
  136. private void OrientationLock_Unchecked(object sender, RoutedEventArgs e)
  137. {
  138. var preferences = this.DataContext as ContentPreferencesViewModel;
  139. if (preferences != null)
  140. {
  141. preferences.Orientation = this.Orientation.ToString();
  142. }
  143. }
  144. private async void ShowSystemLockScreenSettings(object sender, RoutedEventArgs e)
  145. {
  146. await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-lock:"));
  147. }
  148. private async void ShowLockScreenPreview(object sender, RoutedEventArgs e)
  149. {
  150. var userService = ServiceLocator.Current.GetInstance<IUserService>();
  151. var settingsService = ServiceLocator.Current.GetInstance<ISettingsService>();
  152. await Utility.DoActiveLockScreen(settingsService, ServiceLocator.Current.GetInstance<IRedditService>(), userService,
  153. ServiceLocator.Current.GetInstance<IImagesService>(), ServiceLocator.Current.GetInstance<INotificationService>(), true);
  154. var lockScreen = new ViewModelLocator().LockScreen;
  155. if (!settingsService.UseImagePickerForLockScreen)
  156. {
  157. lockScreen.ImageSource = Windows.Storage.ApplicationData.Current.LocalFolder.Path + "\\" + lockScreen.ImageSource;
  158. }
  159. var _navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
  160. _navigationService.Navigate<LockScreen>(null);
  161. }
  162. enum PickerTask
  163. {
  164. None,
  165. ImagesReddit,
  166. TopPostReddit,
  167. LiveTileReddit
  168. }
  169. private PickerTask _pickerTask = PickerTask.None;
  170. private async void CompletePickerTask()
  171. {
  172. var locator = new ViewModelLocator();
  173. var spvm = locator.SubredditPicker;
  174. var cpvm = locator.ContentPreferences;
  175. switch (_pickerTask)
  176. {
  177. case PickerTask.None:
  178. break;
  179. case PickerTask.ImagesReddit:
  180. _pickerTask = PickerTask.None;
  181. cpvm.ImagesSubreddit = spvm.GetSubredditString();
  182. SetLockScreen(null, null);
  183. break;
  184. case PickerTask.TopPostReddit:
  185. _pickerTask = PickerTask.None;
  186. cpvm.LockScreenReddit = spvm.GetSubredditString();
  187. SetLockScreen(null, null);
  188. break;
  189. case PickerTask.LiveTileReddit:
  190. _pickerTask = PickerTask.None;
  191. cpvm.LiveTileReddit = spvm.GetSubredditString();
  192. break;
  193. default:
  194. break;
  195. }
  196. }
  197. private void SelectLockScreenSubreddit(object sender, RoutedEventArgs e)
  198. {
  199. var locator = new ViewModelLocator();
  200. var spvm = locator.SubredditPicker;
  201. var cpvm = locator.ContentPreferences;
  202. _pickerTask = PickerTask.ImagesReddit;
  203. cpvm.UseImagePickerForLockScreen = false;
  204. spvm.SetSubredditList(cpvm.ImagesSubreddit);
  205. for (int i = 0; i < 10; i++)
  206. {
  207. if (File.Exists(Windows.Storage.ApplicationData.Current.LocalFolder.Path + string.Format("\\lockScreenCache{0}.jpg", i)))
  208. {
  209. File.Delete(Windows.Storage.ApplicationData.Current.LocalFolder.Path + string.Format("\\lockScreenCache{0}.jpg", i));
  210. }
  211. }
  212. var _navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
  213. _navigationService.Navigate<SubredditPickerPageView>(null);
  214. }
  215. private void SelectTopPostSubreddit(object sender, RoutedEventArgs e)
  216. {
  217. var locator = new ViewModelLocator();
  218. var spvm = locator.SubredditPicker;
  219. var cpvm = locator.ContentPreferences;
  220. _pickerTask = PickerTask.TopPostReddit;
  221. spvm.SetSubredditList(cpvm.LockScreenReddit);
  222. var _navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
  223. _navigationService.Navigate<SubredditPickerPageView>(null);
  224. }
  225. private void SelectLiveTileSubreddit(object sender, RoutedEventArgs e)
  226. {
  227. var locator = new ViewModelLocator();
  228. var spvm = locator.SubredditPicker;
  229. var cpvm = locator.ContentPreferences;
  230. _pickerTask = PickerTask.LiveTileReddit;
  231. spvm.SetSubredditList(cpvm.LiveTileReddit);
  232. var _navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
  233. _navigationService.Navigate<SubredditPickerPageView>(null);
  234. }
  235. private async void SetLockScreen(object sender, RoutedEventArgs e)
  236. {
  237. var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication;
  238. if (sender is CheckBox && isProvider)
  239. return;
  240. isProvider = await Utility.RequestLockAccess();
  241. UpdateLockScreenStatus();
  242. var userService = ServiceLocator.Current.GetInstance<IUserService>();
  243. var locator = new ViewModelLocator();
  244. var cpvm = locator.ContentPreferences;
  245. var settingsService = ServiceLocator.Current.GetInstance<ISettingsService>();
  246. if (cpvm.UseImagePickerForLockScreen && File.Exists(Windows.Storage.ApplicationData.Current.LocalFolder.Path + "\\lockScreenCache0.jpg"))
  247. {
  248. File.Delete(Windows.Storage.ApplicationData.Current.LocalFolder.Path + "\\lockScreenCache0.jpg");
  249. }
  250. cpvm.UseImagePickerForLockScreen = false;
  251. await Utility.DoActiveLockScreen(settingsService, ServiceLocator.Current.GetInstance<IRedditService>(), userService,
  252. ServiceLocator.Current.GetInstance<IImagesService>(), ServiceLocator.Current.GetInstance<INotificationService>(), false);
  253. }
  254. public static readonly DependencyProperty ImagePreviewProperty =
  255. DependencyProperty.Register(
  256. "ImagePreview",
  257. typeof(string),
  258. typeof(SettingsPageView),
  259. new PropertyMetadata(Windows.Storage.ApplicationData.Current.LocalFolder.Path + "\\lockScreenCache0.jpg")
  260. );
  261. private async void SelectLockScreenImage(object sender, RoutedEventArgs e)
  262. {
  263. var isProvider = await Utility.RequestLockAccess();
  264. UpdateLockScreenStatus();
  265. Microsoft.Phone.Tasks.PhotoChooserTask picker = new Microsoft.Phone.Tasks.PhotoChooserTask();
  266. picker.Completed += picker_Completed;
  267. picker.Show();
  268. }
  269. async void picker_Completed(object sender, Microsoft.Phone.Tasks.PhotoResult e)
  270. {
  271. var settingsService = ServiceLocator.Current.GetInstance<ISettingsService>();
  272. var userService = ServiceLocator.Current.GetInstance<IUserService>();
  273. var locator = new ViewModelLocator();
  274. var cpvm = locator.ContentPreferences;
  275. if (e.Error == null && e.ChosenPhoto != null)
  276. {
  277. BitmapImage image = new BitmapImage();
  278. image.CreateOptions = BitmapCreateOptions.None;
  279. image.SetSource(e.ChosenPhoto);
  280. Utility.MakeSingleLockScreenFromImage(0, image);
  281. cpvm.UseImagePickerForLockScreen = true;
  282. ClearValue(ImagePreviewProperty);
  283. SetValue(ImagePreviewProperty, Windows.Storage.ApplicationData.Current.LocalFolder.Path + "\\lockScreenCache0.jpg");
  284. await Utility.DoActiveLockScreen(settingsService, ServiceLocator.Current.GetInstance<IRedditService>(), userService,
  285. ServiceLocator.Current.GetInstance<IImagesService>(), ServiceLocator.Current.GetInstance<INotificationService>(), false);
  286. }
  287. else
  288. {
  289. subredditRadioButton.IsChecked = true;
  290. }
  291. }
  292. private void HelpOfflineButton_Tap(object sender, System.Windows.Input.GestureEventArgs e)
  293. {
  294. OpenHelp(
  295. "OFFLINE CONTENT",
  296. "The predictive offline cache aggregates usage statistics about the subreddits, links and comments that you click on. This data is stored only on your device and can be erased at any time. We use this data to intelligently guess which links you are likely to click in order to cache the relevant data locally on your device. When you then click on a cached link, the data is loaded very quickly from your device instead of from the web."
  297. + "\r\n\r\n" +
  298. "Overnight offline cache is an extension of the predictive cache. When your device is plugged in and connected to Wi-Fi, we can safely download more data at a faster rate. If you enable this option, we will run a background process during optimal conditions to download more reddit goodness."
  299. );
  300. }
  301. private async void AdFreeUpgrade_Click(object sender, RoutedEventArgs e)
  302. {
  303. var toggleSwitch = sender as ToggleSwitch;
  304. try
  305. {
  306. ListingInformation products = await CurrentApp.LoadListingInformationByProductIdsAsync(new[] { "BaconographyWP8Upgrade" });
  307. // get specific in-app product by ID
  308. ProductListing productListing = null;
  309. if (!products.ProductListings.TryGetValue("BaconographyWP8Upgrade", out productListing))
  310. {
  311. MessageBox.Show("Could not find product information");
  312. if (toggleSwitch != null)
  313. toggleSwitch.IsChecked = false;
  314. return;
  315. }
  316. // start product purchase
  317. await CurrentApp.RequestProductPurchaseAsync(productListing.ProductId, false);
  318. var enabledAds = !(CurrentApp.LicenseInformation != null && CurrentApp.LicenseInformation.ProductLicenses.ContainsKey("BaconographyWP8Upgrade"));
  319. ((Button)sender).IsEnabled = enabledAds;
  320. ServiceLocator.Current.GetInstance<ISettingsService>().AllowAdvertising = enabledAds;
  321. }
  322. catch (Exception)
  323. {
  324. MessageBox.Show("Could not complete in app purchase");
  325. if (toggleSwitch != null)
  326. toggleSwitch.IsChecked = false;
  327. }
  328. }
  329. }
  330. }