├── .gitattributes
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── FilterApps.gif
├── LICENSE.md
├── Navigation.gif
├── README.md
├── SearchingApps.gif
├── UWPAppLauncherMonochromeWideBranding.png
├── appLauncher.sln
├── appLauncher
├── App.xaml
├── App.xaml.cs
├── Core
│ ├── Animations
│ │ └── IndicatorAnimation.cs
│ ├── AppViewCommands.cs
│ ├── Assets
│ │ ├── LargeTile.scale-100.png
│ │ ├── LargeTile.scale-125.png
│ │ ├── LargeTile.scale-150.png
│ │ ├── LargeTile.scale-200.png
│ │ ├── LargeTile.scale-400.png
│ │ ├── LockScreenLogo.scale-200.png
│ │ ├── SmallTile.scale-100.png
│ │ ├── SmallTile.scale-125.png
│ │ ├── SmallTile.scale-150.png
│ │ ├── SmallTile.scale-200.png
│ │ ├── SmallTile.scale-400.png
│ │ ├── SplashScreen.scale-100.png
│ │ ├── SplashScreen.scale-125.png
│ │ ├── SplashScreen.scale-150.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── SplashScreen.scale-400.png
│ │ ├── Square150x150Logo.scale-100.png
│ │ ├── Square150x150Logo.scale-125.png
│ │ ├── Square150x150Logo.scale-150.png
│ │ ├── Square150x150Logo.scale-200.png
│ │ ├── Square150x150Logo.scale-400.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-16.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-256.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-32.png
│ │ ├── Square44x44Logo.altform-unplated_targetsize-48.png
│ │ ├── Square44x44Logo.scale-100.png
│ │ ├── Square44x44Logo.scale-125.png
│ │ ├── Square44x44Logo.scale-150.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-400.png
│ │ ├── Square44x44Logo.targetsize-16.png
│ │ ├── Square44x44Logo.targetsize-24.png
│ │ ├── Square44x44Logo.targetsize-24_altform-unplated.png
│ │ ├── Square44x44Logo.targetsize-256.png
│ │ ├── Square44x44Logo.targetsize-32.png
│ │ ├── Square44x44Logo.targetsize-48.png
│ │ ├── StoreLogo.backup.png
│ │ ├── StoreLogo.scale-100.png
│ │ ├── StoreLogo.scale-125.png
│ │ ├── StoreLogo.scale-150.png
│ │ ├── StoreLogo.scale-200.png
│ │ ├── StoreLogo.scale-400.png
│ │ ├── Wide310x150Logo.scale-100.png
│ │ ├── Wide310x150Logo.scale-125.png
│ │ ├── Wide310x150Logo.scale-150.png
│ │ ├── Wide310x150Logo.scale-200.png
│ │ └── Wide310x150Logo.scale-400.png
│ ├── Brushes
│ │ ├── MaskedBrush.cs
│ │ └── PageImageBrush.cs
│ ├── CustomEvent
│ │ └── CustomEvents.cs
│ ├── DataTemplateSelectors
│ │ └── ApporFolderTemplateSelector.cs
│ ├── Enums
│ │ ├── DeviceType.cs
│ │ └── FilterType.cs
│ ├── Extensions
│ │ └── ExtentionsMethods.cs
│ ├── Helpers
│ │ ├── InstallorRemoveApplication.cs
│ │ ├── Logging.cs
│ │ ├── imageHelper.cs
│ │ ├── packageHelper.cs
│ │ └── settingsHelper.cs
│ ├── Interfaces
│ │ └── IApporFolder.cs
│ ├── Model
│ │ ├── AppFolder.cs
│ │ ├── AppPaginationObservableCollection.cs
│ │ ├── ColorComboItem.cs
│ │ ├── DraggedItem.cs
│ │ ├── FinalTiles.cs
│ │ ├── GlobalAppSettings.cs
│ │ ├── Modelbase.cs
│ │ ├── PageBackgrounds.cs
│ │ ├── PageChangingVariables.cs
│ │ ├── PaginatedCollection.cs
│ │ ├── PaginatedObservableCollection.cs
│ │ └── pageIndicators.cs
│ ├── Pages
│ │ ├── AboutPage.xaml
│ │ ├── AboutPage.xaml.cs
│ │ ├── AppBackgroundSettings.xaml
│ │ ├── AppBackgroundSettings.xaml.cs
│ │ ├── AppInformation.xaml
│ │ ├── AppInformation.xaml.cs
│ │ ├── AppLoading.xaml
│ │ ├── AppLoading.xaml.cs
│ │ ├── AppSettings.xaml
│ │ ├── AppSettings.xaml.cs
│ │ ├── AppTilesSettings.xaml
│ │ ├── AppTilesSettings.xaml.cs
│ │ ├── AppsListPage.xaml
│ │ ├── AppsListPage.xaml.cs
│ │ ├── ContentDialog1.xaml
│ │ ├── ContentDialog1.xaml.cs
│ │ ├── CreateFolders.xaml
│ │ ├── CreateFolders.xaml.cs
│ │ ├── EditApp.xaml
│ │ ├── EditApp.xaml.cs
│ │ ├── EditFolder.xaml
│ │ ├── EditFolder.xaml.cs
│ │ ├── FirstPage.xaml
│ │ ├── FirstPage.xaml.cs
│ │ ├── FolderInfo.xaml
│ │ ├── FolderInfo.xaml.cs
│ │ ├── FolderNamePage.xaml
│ │ ├── FolderNamePage.xaml.cs
│ │ ├── FolderView.xaml
│ │ ├── FolderView.xaml.cs
│ │ ├── InitialPage.xaml
│ │ ├── InitialPage.xaml.cs
│ │ ├── InstallApps.xaml
│ │ ├── InstallApps.xaml.cs
│ │ ├── MainPage.xaml
│ │ ├── MainPage.xaml.cs
│ │ ├── RemoveApps.xaml
│ │ ├── RemoveApps.xaml.cs
│ │ ├── RemoveFolder.xaml
│ │ ├── RemoveFolder.xaml.cs
│ │ ├── SettingsPage.xaml
│ │ └── SettingsPage.xaml.cs
│ ├── Serializers
│ │ └── ApporFolderSerializer.cs
│ ├── ViewModels
│ │ └── AppsViewViewModel.cs
│ └── Views
│ │ ├── AppsView.xaml
│ │ └── AppsView.xaml.cs
├── Package.appxmanifest
├── Properties
│ ├── AssemblyInfo.cs
│ └── Default.rd.xml
├── appLauncher.csproj
└── appLauncher.ruleset
├── appLauncherDemo.gif
└── appLauncherGIFSupport.gif
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 |
4 | # User-specific files
5 | *.suo
6 | *.user
7 | *.userosscache
8 | *.sln.docstates
9 |
10 | # User-specific files (MonoDevelop/Xamarin Studio)
11 | *.userprefs
12 |
13 | # Build results
14 | [Dd]ebug/
15 | [Dd]ebugPublic/
16 | [Rr]elease/
17 | [Rr]eleases/
18 | x64/
19 | x86/
20 | bld/
21 | [Bb]in/
22 | [Oo]bj/
23 | [Ll]og/
24 |
25 | # Visual Studio 2015 cache/options directory
26 | .vs/
27 | # Uncomment if you have tasks that create the project's static files in wwwroot
28 | #wwwroot/
29 |
30 | # MSTest test Results
31 | [Tt]est[Rr]esult*/
32 | [Bb]uild[Ll]og.*
33 |
34 | # NUNIT
35 | *.VisualState.xml
36 | TestResult.xml
37 |
38 | # Build Results of an ATL Project
39 | [Dd]ebugPS/
40 | [Rr]eleasePS/
41 | dlldata.c
42 |
43 | # DNX
44 | project.lock.json
45 | project.fragment.lock.json
46 | artifacts/
47 |
48 | *_i.c
49 | *_p.c
50 | *_i.h
51 | *.ilk
52 | *.meta
53 | *.obj
54 | *.pch
55 | *.pdb
56 | *.pgc
57 | *.pgd
58 | *.rsp
59 | *.sbr
60 | *.tlb
61 | *.tli
62 | *.tlh
63 | *.tmp
64 | *.tmp_proj
65 | *.log
66 | *.vspscc
67 | *.vssscc
68 | .builds
69 | *.pidb
70 | *.svclog
71 | *.scc
72 |
73 | # Chutzpah Test files
74 | _Chutzpah*
75 |
76 | # Visual C++ cache files
77 | ipch/
78 | *.aps
79 | *.ncb
80 | *.opendb
81 | *.opensdf
82 | *.sdf
83 | *.cachefile
84 | *.VC.db
85 | *.VC.VC.opendb
86 |
87 | # Visual Studio profiler
88 | *.psess
89 | *.vsp
90 | *.vspx
91 | *.sap
92 |
93 | # TFS 2012 Local Workspace
94 | $tf/
95 |
96 | # Guidance Automation Toolkit
97 | *.gpState
98 |
99 | # ReSharper is a .NET coding add-in
100 | _ReSharper*/
101 | *.[Rr]e[Ss]harper
102 | *.DotSettings.user
103 |
104 | # JustCode is a .NET coding add-in
105 | .JustCode
106 |
107 | # TeamCity is a build add-in
108 | _TeamCity*
109 |
110 | # DotCover is a Code Coverage Tool
111 | *.dotCover
112 |
113 | # NCrunch
114 | _NCrunch_*
115 | .*crunch*.local.xml
116 | nCrunchTemp_*
117 |
118 | # MightyMoose
119 | *.mm.*
120 | AutoTest.Net/
121 |
122 | # Web workbench (sass)
123 | .sass-cache/
124 |
125 | # Installshield output folder
126 | [Ee]xpress/
127 |
128 | # DocProject is a documentation generator add-in
129 | DocProject/buildhelp/
130 | DocProject/Help/*.HxT
131 | DocProject/Help/*.HxC
132 | DocProject/Help/*.hhc
133 | DocProject/Help/*.hhk
134 | DocProject/Help/*.hhp
135 | DocProject/Help/Html2
136 | DocProject/Help/html
137 |
138 | # Click-Once directory
139 | publish/
140 |
141 | # Publish Web Output
142 | *.[Pp]ublish.xml
143 | *.azurePubxml
144 | # TODO: Comment the next line if you want to checkin your web deploy settings
145 | # but database connection strings (with potential passwords) will be unencrypted
146 | #*.pubxml
147 | *.publishproj
148 |
149 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
150 | # checkin your Azure Web App publish settings, but sensitive information contained
151 | # in these scripts will be unencrypted
152 | PublishScripts/
153 |
154 | # NuGet Packages
155 | *.nupkg
156 | # The packages folder can be ignored because of Package Restore
157 | **/packages/*
158 | # except build/, which is used as an MSBuild target.
159 | !**/packages/build/
160 | # Uncomment if necessary however generally it will be regenerated when needed
161 | #!**/packages/repositories.config
162 | # NuGet v3's project.json files produces more ignoreable files
163 | *.nuget.props
164 | *.nuget.targets
165 |
166 | # Microsoft Azure Build Output
167 | csx/
168 | *.build.csdef
169 |
170 | # Microsoft Azure Emulator
171 | ecf/
172 | rcf/
173 |
174 | # Windows Store app package directories and files
175 | AppPackages/
176 | BundleArtifacts/
177 | Package.StoreAssociation.xml
178 | _pkginfo.txt
179 |
180 | # Visual Studio cache files
181 | # files ending in .cache can be ignored
182 | *.[Cc]ache
183 | # but keep track of directories ending in .cache
184 | !*.[Cc]ache/
185 |
186 | # Others
187 | ClientBin/
188 | ~$*
189 | *~
190 | *.dbmdl
191 | *.dbproj.schemaview
192 | *.jfm
193 | *.pfx
194 | *.publishsettings
195 | node_modules/
196 | orleans.codegen.cs
197 |
198 | # Since there are multiple workflows, uncomment next line to ignore bower_components
199 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
200 | #bower_components/
201 |
202 | # RIA/Silverlight projects
203 | Generated_Code/
204 |
205 | # Backup & report files from converting an old project file
206 | # to a newer Visual Studio version. Backup files are not needed,
207 | # because we have git ;-)
208 | _UpgradeReport_Files/
209 | Backup*/
210 | UpgradeLog*.XML
211 | UpgradeLog*.htm
212 |
213 | # SQL Server files
214 | *.mdf
215 | *.ldf
216 |
217 | # Business Intelligence projects
218 | *.rdl.data
219 | *.bim.layout
220 | *.bim_*.settings
221 |
222 | # Microsoft Fakes
223 | FakesAssemblies/
224 |
225 | # GhostDoc plugin setting file
226 | *.GhostDoc.xml
227 |
228 | # Node.js Tools for Visual Studio
229 | .ntvs_analysis.dat
230 |
231 | # Visual Studio 6 build log
232 | *.plg
233 |
234 | # Visual Studio 6 workspace options file
235 | *.opt
236 |
237 | # Visual Studio LightSwitch build output
238 | **/*.HTMLClient/GeneratedArtifacts
239 | **/*.DesktopClient/GeneratedArtifacts
240 | **/*.DesktopClient/ModelManifest.xml
241 | **/*.Server/GeneratedArtifacts
242 | **/*.Server/ModelManifest.xml
243 | _Pvt_Extensions
244 |
245 | # Paket dependency manager
246 | .paket/paket.exe
247 | paket-files/
248 |
249 | # FAKE - F# Make
250 | .fake/
251 |
252 | # JetBrains Rider
253 | .idea/
254 | *.sln.iml
255 |
256 | # CodeRush
257 | .cr/
258 |
259 | # Python Tools for Visual Studio (PTVS)
260 | __pycache__/
261 | *.pyc
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6 |
7 | ## Our Standards
8 |
9 | Examples of behavior that contributes to creating a positive environment include:
10 |
11 | * Using welcoming and inclusive language
12 | * Being respectful of differing viewpoints and experiences
13 | * Gracefully accepting constructive criticism
14 | * Focusing on what is best for the community
15 | * Showing empathy towards other community members
16 |
17 | Examples of unacceptable behavior by participants include:
18 |
19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances
20 | * Trolling, insulting/derogatory comments, and personal or political attacks
21 | * Public or private harassment
22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission
23 | * Other conduct which could reasonably be considered inappropriate in a professional setting
24 |
25 | ## Our Responsibilities
26 |
27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28 |
29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30 |
31 | ## Scope
32 |
33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34 |
35 | ## Enforcement
36 |
37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at morris.isaac@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38 |
39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40 |
41 | ## Attribution
42 |
43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
44 |
45 | [homepage]: http://contributor-covenant.org
46 | [version]: http://contributor-covenant.org/version/1/4/
47 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 | If you want to help out, you can fork the project to work on issues or add your own features that you'd think would be nice to include. I suggest that you add any suggestions as an issue so to make it easier for people to collaborate. Make sure that you do all your work and submit your pull requests to the Testing branch please.
3 |
4 | It's completely fine if you take this code and use it to make your own app launcher or for something different!
5 |
--------------------------------------------------------------------------------
/FilterApps.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/FilterApps.gif
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Colin Kiama
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Navigation.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/Navigation.gif
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # UWP-App-Launcher
2 | *Background image by Sebastian Muller on Unsplash*
3 | 
4 |
5 |
6 |
7 | The whole point of this project is to provide the best traditional home screen experience as possible for Windows 10 devices. Some people don't like Live Tiles so this is an alternative for them. Also, apps load faster when opened with this launcher.
8 |
9 | Need help or have questions? Contact me at morris.isaac@gmail.com
10 |
11 | 
12 |
13 | 
14 |
15 | 
16 |
17 | 
18 |
19 |
20 |
21 | Download the app here: https://github.com/IsaacMorris1980/UWP-App-Launcher-Mobile/releases
22 |
23 | ## System Requirements
24 | Any Windows 10 device running the Build 15063 or higher.
25 |
26 | ## Contributing and using code:
27 | We would really appreciate it if you contribute! Even if your are a first time contributer, there is something in the issues tab for you to handle. If you have your own ideas, you can make your own issues and even complete them yourself.
28 | [Start contributing here today!](https://github.com/IsaacMorris1980/UWP-App-Launcher-Mobile/issues)
29 |
30 | More information about contributing to the project is here: [How to contribute to the project and guidelines on reusing code](https://github.com/IsaacMorris1980/UWP-App-Launcher-Mobile/blob/oldversion/CONTRIBUTING.md)
31 |
32 | Latest Features Merged to Testing Branch and builds will be made from Testing branch before being merged to master
33 | ## Here are a list of awesome features currently available:
34 | • Add/change background image in settings
35 | • GIF Backgrounds
36 | • Search
37 | * Filter applications
38 | * Pagination
39 | * About screen
40 | * Adding Folders
41 | * Installing and Removing Applications
42 | ## Features in development:
43 | * Context menu on tiles
44 | * Localization
45 | * Adding Accessibility
46 | * Fix or reconfigure Animated Splash Screen
47 | ## Features under Investigation
48 | * Parallax Wallpaper
49 | * Allow creating app folders without new screen
50 | * Create automatic device settings sync over wifi or cellular with the ability to make it wifi only
51 | * mp4 backgrounds
52 | * Ability to add application certificate dynamically
53 |
54 | ## Features removed
55 | * Enable and Disable Features
56 |
--------------------------------------------------------------------------------
/SearchingApps.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/SearchingApps.gif
--------------------------------------------------------------------------------
/UWPAppLauncherMonochromeWideBranding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/UWPAppLauncherMonochromeWideBranding.png
--------------------------------------------------------------------------------
/appLauncher.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.8.34330.188
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "appLauncher", "appLauncher\appLauncher.csproj", "{825249DF-2022-4222-96A1-69A32AA4E16C}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|ARM = Debug|ARM
11 | Debug|x64 = Debug|x64
12 | Debug|x86 = Debug|x86
13 | Release|ARM = Release|ARM
14 | Release|x64 = Release|x64
15 | Release|x86 = Release|x86
16 | EndGlobalSection
17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Debug|ARM.ActiveCfg = Debug|ARM
19 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Debug|ARM.Build.0 = Debug|ARM
20 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Debug|ARM.Deploy.0 = Debug|ARM
21 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Debug|x64.ActiveCfg = Debug|x64
22 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Debug|x64.Build.0 = Debug|x64
23 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Debug|x64.Deploy.0 = Debug|x64
24 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Debug|x86.ActiveCfg = Debug|x86
25 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Debug|x86.Build.0 = Debug|x86
26 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Debug|x86.Deploy.0 = Debug|x86
27 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Release|ARM.ActiveCfg = Release|ARM
28 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Release|ARM.Build.0 = Release|ARM
29 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Release|ARM.Deploy.0 = Release|ARM
30 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Release|x64.ActiveCfg = Release|x64
31 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Release|x64.Build.0 = Release|x64
32 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Release|x64.Deploy.0 = Release|x64
33 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Release|x86.ActiveCfg = Release|x86
34 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Release|x86.Build.0 = Release|x86
35 | {825249DF-2022-4222-96A1-69A32AA4E16C}.Release|x86.Deploy.0 = Release|x86
36 | EndGlobalSection
37 | GlobalSection(SolutionProperties) = preSolution
38 | HideSolutionNode = FALSE
39 | EndGlobalSection
40 | GlobalSection(ExtensibilityGlobals) = postSolution
41 | SolutionGuid = {10449081-8D0A-452A-9AF4-83D6A46E7815}
42 | EndGlobalSection
43 | EndGlobal
44 |
--------------------------------------------------------------------------------
/appLauncher/App.xaml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/appLauncher/Core/Animations/IndicatorAnimation.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI.Xaml.Shapes;
2 |
3 | namespace appLauncher.Core.Animations
4 | {
5 | public class IndicatorAnimation
6 | {
7 | public static Ellipse oldAnimatedEllipse;
8 | public static Ellipse newAnimatedEllipse;
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/appLauncher/Core/AppViewCommands.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI.Xaml;
2 |
3 | namespace appLauncher.Core.ViewModels
4 | {
5 | internal class AppViewCommands
6 | {
7 | public void dragEvent(object sender, DragEventArgs e)
8 | {
9 |
10 | }
11 |
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/LargeTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/LargeTile.scale-100.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/LargeTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/LargeTile.scale-125.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/LargeTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/LargeTile.scale-150.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/LargeTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/LargeTile.scale-200.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/LargeTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/LargeTile.scale-400.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/LockScreenLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/LockScreenLogo.scale-200.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SmallTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SmallTile.scale-100.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SmallTile.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SmallTile.scale-125.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SmallTile.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SmallTile.scale-150.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SmallTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SmallTile.scale-200.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SmallTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SmallTile.scale-400.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SplashScreen.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SplashScreen.scale-100.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SplashScreen.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SplashScreen.scale-125.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SplashScreen.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SplashScreen.scale-150.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/SplashScreen.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/SplashScreen.scale-400.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square150x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square150x150Logo.scale-100.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square150x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square150x150Logo.scale-125.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square150x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square150x150Logo.scale-150.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square150x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square150x150Logo.scale-400.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.altform-unplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.altform-unplated_targetsize-16.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.altform-unplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.altform-unplated_targetsize-256.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.altform-unplated_targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.altform-unplated_targetsize-32.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.altform-unplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.altform-unplated_targetsize-48.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.scale-100.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.scale-125.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.scale-150.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.scale-400.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.targetsize-16.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.targetsize-24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.targetsize-24.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.targetsize-24_altform-unplated.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.targetsize-256.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.targetsize-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.targetsize-32.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Square44x44Logo.targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Square44x44Logo.targetsize-48.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/StoreLogo.backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/StoreLogo.backup.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/StoreLogo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/StoreLogo.scale-100.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/StoreLogo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/StoreLogo.scale-125.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/StoreLogo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/StoreLogo.scale-150.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/StoreLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/StoreLogo.scale-200.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/StoreLogo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/StoreLogo.scale-400.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Wide310x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Wide310x150Logo.scale-100.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Wide310x150Logo.scale-125.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Wide310x150Logo.scale-125.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Wide310x150Logo.scale-150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Wide310x150Logo.scale-150.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/appLauncher/Core/Assets/Wide310x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncher/Core/Assets/Wide310x150Logo.scale-400.png
--------------------------------------------------------------------------------
/appLauncher/Core/Brushes/MaskedBrush.cs:
--------------------------------------------------------------------------------
1 | using Windows.Storage.Streams;
2 | using Windows.UI;
3 | using Windows.UI.Composition;
4 | using Windows.UI.Xaml;
5 | using Windows.UI.Xaml.Media;
6 |
7 | namespace appLauncher.Core.Brushes
8 | {
9 | public class MaskedBrush : XamlCompositionBrushBase
10 | {
11 | public MaskedBrush(IRandomAccessStream stream, Color color)
12 | {
13 | this._logo = stream;
14 | base.FallbackColor = Colors.Transparent;
15 | this.overlayColor = color;
16 | }
17 | public MaskedBrush() { }
18 | private IRandomAccessStream _logo;
19 | private CompositionMaskBrush _maskedBrush;
20 | private Color overlayColor { get; set; }
21 | protected override void OnConnected()
22 | {
23 | if (CompositionBrush == null)
24 | {
25 |
26 |
27 | // Get a reference to the Compositor
28 | Compositor compositor = Window.Current.Compositor;
29 | CompositionColorBrush colorbrush;
30 | // Use LoadedImageSurface API to get ICompositionSurface from image uri provided
31 | colorbrush = compositor.CreateColorBrush(overlayColor);
32 | _maskedBrush = compositor.CreateMaskBrush();
33 | _maskedBrush.Source = colorbrush;
34 |
35 | LoadedImageSurface loadedSurface = LoadedImageSurface.StartLoadFromStream(_logo);
36 | _maskedBrush.Mask = compositor.CreateSurfaceBrush(loadedSurface);
37 | CompositionBrush = _maskedBrush;
38 | }
39 | }
40 |
41 | protected override void OnDisconnected()
42 | {
43 | // Dispose Surface and CompositionBrushes if XamlCompBrushBase is removed from tree
44 | _maskedBrush?.Dispose();
45 | _maskedBrush = null;
46 |
47 | CompositionBrush?.Dispose();
48 | CompositionBrush = null;
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/appLauncher/Core/Brushes/PageImageBrush.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using Windows.Storage.Streams;
4 | using Windows.UI.Composition;
5 | using Windows.UI.Xaml;
6 | using Windows.UI.Xaml.Media;
7 |
8 | namespace appLauncher.Core.Brushes
9 | {
10 | public class PageImageBrush : XamlCompositionBrushBase
11 | {
12 | public PageImageBrush()
13 | {
14 | }
15 |
16 | public PageImageBrush(IRandomAccessStream stream)
17 | {
18 | this._backImage = stream;
19 |
20 | }
21 | public IRandomAccessStream _backImage;
22 | private CompositionSurfaceBrush _backImageBrush;
23 | private SpriteVisual spriteVisual;
24 | protected override void OnConnected()
25 | {
26 | if (CompositionBrush == null)
27 | {
28 |
29 |
30 | // Get a reference to the Compositor
31 | Compositor compositor = Window.Current.Compositor;
32 |
33 | // Use LoadedImageSurface API to get ICompositionSurface from image uri provided
34 |
35 | _backImageBrush = compositor.CreateSurfaceBrush();
36 | spriteVisual = compositor.CreateSpriteVisual();
37 |
38 | LoadedImageSurface loadedSurface = LoadedImageSurface.StartLoadFromStream(_backImage);
39 | _backImageBrush.Surface = loadedSurface;
40 | spriteVisual.Brush = _backImageBrush;
41 | _backImageBrush.Stretch = CompositionStretch.UniformToFill;
42 | CompositionBrush = _backImageBrush;
43 | }
44 | }
45 |
46 | protected override void OnDisconnected()
47 | {
48 | // Dispose Surface and CompositionBrushes if XamlCompBrushBase is removed from tree
49 | _backImageBrush?.Dispose();
50 | _backImageBrush = null;
51 |
52 | CompositionBrush?.Dispose();
53 | CompositionBrush = null;
54 | GC.WaitForPendingFinalizers();
55 | }
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/appLauncher/Core/CustomEvent/CustomEvents.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace appLauncher.Core.CustomEvent
4 | {
5 | public delegate void PageSizeChangedDelegate(PageSizeEventArgs e);
6 | public delegate void PageChangedDelegate(PageChangedEventArgs e);
7 | public delegate void PageNumChangedDelegate(PageNumChangedArgs e);
8 | public class PageSizeEventArgs : EventArgs
9 | {
10 | private int _appPageSize;
11 | public PageSizeEventArgs(int appPageSize)
12 | {
13 | _appPageSize = appPageSize;
14 | }
15 | public int AppPageSize { get { return _appPageSize; } }
16 | }
17 | public class PageChangedEventArgs : EventArgs
18 | {
19 | private int _pageIndex;
20 |
21 |
22 | public PageChangedEventArgs(int pageIndex)
23 | {
24 | _pageIndex = pageIndex;
25 |
26 | }
27 |
28 | public int PageIndex { get { return _pageIndex; } }
29 | }
30 | public class PageNumChangedArgs : EventArgs
31 | {
32 | public int numofpages;
33 | public PageNumChangedArgs(int numofpages)
34 | {
35 | this.numofpages = numofpages;
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/appLauncher/Core/DataTemplateSelectors/ApporFolderTemplateSelector.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Model;
2 |
3 | using Windows.UI.Xaml;
4 | using Windows.UI.Xaml.Controls;
5 |
6 | namespace appLauncher.Core.DataTemplateSelectors
7 | {
8 | public class TileorFolderTemplateSelector : DataTemplateSelector
9 | {
10 | public DataTemplate TileTemplate { get; set; }
11 | public DataTemplate FolderTemplate { get; set; }
12 |
13 | protected override DataTemplate SelectTemplateCore(object item)
14 | {
15 | if (item is FinalTiles)
16 | {
17 | return TileTemplate;
18 | }
19 | if (item is AppFolder)
20 | {
21 | return FolderTemplate;
22 | }
23 |
24 | return base.SelectTemplateCore(item);
25 | }
26 | protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
27 | {
28 | return SelectTemplateCore(item);
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/appLauncher/Core/Enums/DeviceType.cs:
--------------------------------------------------------------------------------
1 | namespace appLauncher.Core.Enums
2 | {
3 | public enum DeviceType
4 | {
5 | Phone,
6 | Desktop,
7 | Other
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/appLauncher/Core/Enums/FilterType.cs:
--------------------------------------------------------------------------------
1 | namespace appLauncher.Core.Enums
2 | {
3 | public enum FilterType
4 | {
5 | AppsAtoZ,
6 | AppsZtoA,
7 | DevAtoZ,
8 | DevZtoA,
9 | InstallNewtoOld,
10 | InstallOldtoNew
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/appLauncher/Core/Extensions/ExtentionsMethods.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Collections.ObjectModel;
4 | using System.Linq;
5 |
6 | namespace appLauncher.Core.Extensions
7 | {
8 | public static class ExtensionMethods
9 | {
10 | public static int Remove(
11 | this ObservableCollection coll, Func condition)
12 | {
13 | var itemsToRemove = coll.Where(condition).ToList();
14 | foreach (var itemToRemove in itemsToRemove)
15 | {
16 | coll.Remove(itemToRemove);
17 | }
18 | return itemsToRemove.Count;
19 | }
20 | public static int Remove(
21 | this List coll, Func condition)
22 | {
23 | List itemsToRemove = coll.Where(condition).ToList();
24 | foreach (var itemToRemove in itemsToRemove)
25 | {
26 | coll.Remove(itemToRemove);
27 | }
28 | return itemsToRemove.Count;
29 | }
30 |
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/appLauncher/Core/Helpers/InstallorRemoveApplication.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Diagnostics;
4 | using System.Security.Cryptography.X509Certificates;
5 | using System.Threading;
6 | using System.Threading.Tasks;
7 |
8 | using Windows.Foundation;
9 | using Windows.Management.Deployment;
10 |
11 | namespace appLauncher.Core.Helpers
12 | {
13 | public static class InstallorRemoveApplication
14 | {
15 | private static PackageManager pkgMgr = new PackageManager();
16 | //Idea and code from https://github.com/colinkiama/EasyCertInstall/blob/master/EasyCertInstall/Program.cs
17 | public static async Task InstallCertificate()
18 | {
19 | try
20 | {
21 | var picker = new Windows.Storage.Pickers.FileOpenPicker();
22 | picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
23 | picker.FileTypeFilter.Add(".cer");
24 | var files = await picker.PickSingleFileAsync();
25 | X509Certificate2 cert = new X509Certificate2(files.Path);
26 | using (X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.CurrentUser))
27 | {
28 | store.Open(OpenFlags.MaxAllowed);
29 | store.Add(cert);
30 | }
31 | return "Certficate Installed";
32 | }
33 | catch (Exception ex)
34 | {
35 | return ex.Message;
36 | }
37 | }
38 | //Idea and code from https://github.com/colinkiama/UWP-Package-Installer
39 | public static async Task LoadDependancies()
40 | {
41 | try
42 | {
43 | var picker = new Windows.Storage.Pickers.FileOpenPicker();
44 | List depuris = new List();
45 | picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
46 | picker.FileTypeFilter.Add(".appx");
47 | picker.FileTypeFilter.Add(".appxbundle");
48 |
49 | var files = await picker.PickMultipleFilesAsync();
50 | if (files != null)
51 | {
52 |
53 | foreach (var dependency in files)
54 | {
55 | await pkgMgr.AddPackageAsync(new Uri(dependency.Path), null, DeploymentOptions.None);
56 | }
57 | return "Success";
58 | }
59 | }
60 | catch (Exception ex)
61 | {
62 | return ex.Message;
63 | }
64 | return string.Empty;
65 | }
66 | //Idea and code from https://github.com/colinkiama/UWP-Package-Installer
67 | public static async Task InstallApplication()
68 | {
69 | try
70 | {
71 | var picker = new Windows.Storage.Pickers.FileOpenPicker();
72 | List depuris = new List();
73 | picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
74 | picker.FileTypeFilter.Add(".appx");
75 | picker.FileTypeFilter.Add(".appxbundle");
76 |
77 | var files = await picker.PickSingleFileAsync();
78 | if (files != null)
79 | {
80 | await pkgMgr.AddPackageAsync(new Uri(files.Path), null, DeploymentOptions.None);
81 | }
82 | return "Success";
83 | }
84 | catch (Exception ex)
85 | {
86 | return $"Failed to install {ex.Message}";
87 | }
88 |
89 | }
90 | public static async Task RemoveApplication(string fullname)
91 | {
92 | string returnValue = string.Empty;
93 | IAsyncOperationWithProgress deploymentOperation =
94 | pkgMgr.RemovePackageAsync(fullname, RemovalOptions.None);
95 |
96 | ManualResetEvent opCompletedEvent = new ManualResetEvent(false);
97 |
98 | // Define the delegate using a statement lambda
99 | deploymentOperation.Completed = (depProgress, status) => { opCompletedEvent.Set(); };
100 |
101 | // Wait until the operation completes
102 | opCompletedEvent.WaitOne();
103 |
104 | // Check the status of the operation
105 | if (deploymentOperation.Status == AsyncStatus.Error)
106 | {
107 | DeploymentResult deploymentResult = deploymentOperation.GetResults();
108 | Debug.WriteLine("Error code: {0}", deploymentOperation.ErrorCode);
109 | Debug.WriteLine("Error text: {0}", deploymentResult.ErrorText);
110 | returnValue = $"Error code {deploymentOperation.ErrorCode} Error text: {deploymentResult.ErrorText} ";
111 | }
112 | else if (deploymentOperation.Status == AsyncStatus.Canceled)
113 | {
114 | Debug.WriteLine("Removal canceled");
115 | returnValue = "Removal Canceled";
116 | }
117 | else if (deploymentOperation.Status == AsyncStatus.Completed)
118 | {
119 | Debug.WriteLine("Removal succeeded");
120 | PackageHelper.Apps.RemoveApp(fullname);
121 |
122 | PackageHelper.RemoveFromSearch(fullname);
123 |
124 | await PackageHelper.SaveCollectionAsync();
125 | returnValue = "Removal Succeeded";
126 | }
127 | else
128 | {
129 | returnValue = "Removal status unknown";
130 | Debug.WriteLine("Removal status unknown");
131 | }
132 |
133 | return returnValue;
134 | }
135 |
136 |
137 | }
138 | }
139 |
--------------------------------------------------------------------------------
/appLauncher/Core/Helpers/Logging.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 |
3 | using System;
4 | using System.Threading.Tasks;
5 |
6 | using Windows.Storage;
7 |
8 | namespace appLauncher.Core.Helpers
9 | {
10 | public static class Logging
11 | {
12 | public static async Task Log(Exception e)
13 | {
14 | string saveappsstring = JsonConvert.SerializeObject(e.ToString(), Formatting.Indented);
15 | StorageFile appsFile = (StorageFile)await ApplicationData.Current.LocalFolder.CreateFileAsync("erros.json", CreationCollisionOption.OpenIfExists);
16 | await FileIO.AppendTextAsync(appsFile, saveappsstring);
17 |
18 | }
19 |
20 |
21 |
22 |
23 |
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/appLauncher/Core/Helpers/imageHelper.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Brushes;
2 | using appLauncher.Core.Extensions;
3 | using appLauncher.Core.Model;
4 |
5 | using Newtonsoft.Json;
6 |
7 | using System;
8 | using System.Collections.Generic;
9 | using System.Collections.ObjectModel;
10 | using System.Diagnostics;
11 | using System.IO;
12 | using System.Linq;
13 | using System.Runtime.InteropServices.WindowsRuntime;
14 | using System.Threading.Tasks;
15 |
16 | using Windows.ApplicationModel.Core;
17 | using Windows.Storage;
18 | using Windows.System.Threading;
19 | using Windows.UI.Core;
20 | using Windows.UI.Xaml.Media;
21 | using Windows.UI.Xaml.Media.Imaging;
22 |
23 |
24 | namespace appLauncher.Core.Helpers
25 | {
26 | public static class ImageHelper
27 | {
28 |
29 | public static ObservableCollection backgroundImage { get; set; } = new ObservableCollection();
30 | private static int _imageCurrentSelection = 0;
31 | public static ThreadPoolTimer threadpoolTimer;
32 | private static int _imageLastSelection = 0;
33 | private static ImageBrush imaged = new ImageBrush();
34 | private static PageImageBrush _images;
35 | public static event EventHandler ImagesRetreived;
36 | private static Brush _imagesBrush;
37 | private static SolidColorBrush _backColor = new SolidColorBrush();
38 | private static BitmapImage _bitmap = new BitmapImage();
39 | public static Brush GetBackbrush
40 | {
41 | get
42 | {
43 | return _imagesBrush;
44 | }
45 | }
46 | public static async Task SetBackImage()
47 | {
48 | await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
49 | {
50 |
51 | if (backgroundImage.Count > 0)
52 | {
53 | Debug.WriteLine(backgroundImage.Count);
54 | _images = new PageImageBrush(backgroundImage[_imageCurrentSelection = (_imageCurrentSelection >= backgroundImage.Count - 1) ? 0 : _imageCurrentSelection + 1].BackgroundImageBytes.AsBuffer().AsStream().AsRandomAccessStream());
55 | _imagesBrush = _images;
56 |
57 | }
58 | else
59 | {
60 | _backColor.Color = SettingsHelper.totalAppSettings.AppBackgroundColor;
61 | _imagesBrush = _backColor;
62 | }
63 | });
64 | GC.WaitForPendingFinalizers();
65 | }
66 | public static void AddPageBackround(PageBackgrounds pageBackgrounds)
67 | {
68 | if (backgroundImage.Any(x => x.BackgroundImageDisplayName == pageBackgrounds.BackgroundImageDisplayName))
69 | {
70 | return;
71 | }
72 | else
73 | {
74 | backgroundImage.Add(pageBackgrounds);
75 | }
76 | }
77 | public static void RemovePageBackground(string pageBackgrounds)
78 | {
79 | backgroundImage.Remove(x => x.BackgroundImageDisplayName == pageBackgrounds);
80 | }
81 | public static async Task LoadBackgroundImages()
82 | {
83 | List imagesList = new List();
84 | if (await IsFilePresent("images.json"))
85 | {
86 | try
87 | {
88 | StorageFile item = (StorageFile)await ApplicationData.Current.LocalFolder.TryGetItemAsync("images.json");
89 | string apps = await Windows.Storage.FileIO.ReadTextAsync(item);
90 | backgroundImage = new ObservableCollection(JsonConvert.DeserializeObject>(apps));
91 | }
92 | catch (Exception es)
93 | {
94 |
95 |
96 | }
97 |
98 |
99 | }
100 | await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
101 | {
102 | threadpoolTimer = ThreadPoolTimer.CreatePeriodicTimer(async (source) =>
103 | {
104 | await SetBackImage();
105 | }, SettingsHelper.totalAppSettings.ImageRotationTime.Subtract(TimeSpan.FromSeconds(2)));
106 | });
107 | backgroundImage = new ObservableCollection(imagesList);
108 | ImagesRetreived?.Invoke(true, EventArgs.Empty);
109 | }
110 | public static async Task SaveImageOrder()
111 | {
112 | try
113 | {
114 | if (backgroundImage.Count() > 0)
115 | {
116 | string imageOrder = JsonConvert.SerializeObject(backgroundImage.ToList(), Formatting.Indented);
117 | StorageFile item = (StorageFile)await ApplicationData.Current.LocalFolder.CreateFileAsync("images.json", CreationCollisionOption.ReplaceExisting);
118 | await FileIO.WriteTextAsync(item, imageOrder);
119 | }
120 | }
121 | catch (Exception es)
122 | {
123 |
124 | }
125 | }
126 | public static async Task IsFilePresent(string fileName, string folderPath = "")
127 | {
128 | IStorageItem item;
129 | if (folderPath == "")
130 | {
131 | item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
132 | }
133 | else
134 | {
135 | StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(folderPath);
136 | item = await folder.TryGetItemAsync(fileName);
137 | }
138 |
139 | return item != null;
140 |
141 | }
142 | public static async Task ConvertImageFiletoByteArrayAsync(StorageFile fileName)
143 | {
144 | using (var inputStream = await fileName.OpenSequentialReadAsync())
145 | {
146 | var readStream = inputStream.AsStreamForRead();
147 | byte[] buffer = new byte[readStream.Length];
148 |
149 | await readStream.ReadAsync(buffer, 0, buffer.Length);
150 | return buffer;
151 | }
152 | }
153 | //public static IRandomAccessStream GetStreamWithStreamWriter(string sampleString, Encoding encoding = null)
154 | //{
155 | // Encoding encoded = encoding == null ? Encoding.UTF8 : encoding;
156 |
157 | // MemoryStream stream = new MemoryStream(encoded.GetByteCount(sampleString));
158 | // using (StreamWriter writer = new StreamWriter(stream, encoded, 1, true))
159 | // {
160 | // writer.Write(sampleString);
161 | // writer.Flush();
162 | // stream.Position = 0;
163 | // }
164 |
165 | // return stream.AsRandomAccessStream();
166 | //}
167 | //public static async Task ConvertfromByteArraytoRandomAccessStream(byte[] imageByte)
168 | //{
169 | // using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
170 | // {
171 | // await stream.WriteAsync(imageByte.AsBuffer());
172 | // stream.Seek(0);
173 | // return stream;
174 | // }
175 | //}
176 | }
177 | }
178 |
--------------------------------------------------------------------------------
/appLauncher/Core/Helpers/settingsHelper.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Model;
2 |
3 | using Microsoft.Toolkit.Uwp.Helpers;
4 |
5 | using Newtonsoft.Json;
6 |
7 | using System;
8 | using System.Collections.Generic;
9 | using System.Reflection;
10 | using System.Threading.Tasks;
11 |
12 | using Windows.Storage;
13 | using Windows.UI;
14 | using Windows.UI.Xaml;
15 |
16 | namespace appLauncher.Core.Helpers
17 | {
18 | public static class SettingsHelper
19 | {
20 | public static GlobalAppSettings totalAppSettings { get; set; } = new GlobalAppSettings();
21 | public static async Task IsFilePresent(string fileName, string folderpath = "")
22 | {
23 | IStorageItem item;
24 | if (folderpath == "")
25 | {
26 | item = await ApplicationData.Current.LocalFolder.TryGetItemAsync(fileName);
27 | }
28 | else
29 | {
30 | StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(folderpath);
31 | item = await folder.TryGetItemAsync(fileName);
32 | }
33 | return item != null;
34 | }
35 | public static async Task LoadAppSettingsAsync()
36 | {
37 | if (await SettingsHelper.IsFilePresent("globalappsettings.json"))
38 | {
39 | try
40 | {
41 | StorageFile item = (StorageFile)await ApplicationData.Current.LocalFolder.TryGetItemAsync("globalappsettings.json");
42 | string apps = await Windows.Storage.FileIO.ReadTextAsync(item);
43 | totalAppSettings = JsonConvert.DeserializeObject(apps);
44 | totalAppSettings.AppColors = GetStaticPropertyBag(typeof(Colors));
45 | }
46 | catch (Exception es)
47 | {
48 |
49 | }
50 | }
51 | else
52 | {
53 | totalAppSettings = new GlobalAppSettings();
54 | totalAppSettings.AppColors = GetStaticPropertyBag(typeof(Colors));
55 | }
56 | }
57 | public static async Task SaveAppSettingsAsync()
58 | {
59 | try
60 | {
61 | var te = JsonConvert.SerializeObject(totalAppSettings, Formatting.Indented);
62 | StorageFile item = (StorageFile)await ApplicationData.Current.LocalFolder.CreateFileAsync("globalappsettings.json", CreationCollisionOption.ReplaceExisting);
63 | await FileIO.WriteTextAsync(item, te);
64 | }
65 | catch (Exception es)
66 | {
67 |
68 | }
69 | }
70 | public static List GetStaticPropertyBag(Type t)
71 | {
72 |
73 | const BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
74 | List map = new List();
75 | foreach (var prop in t.GetProperties(flags))
76 | {
77 | ColorComboItem colorItem = new ColorComboItem();
78 | colorItem.ColorName = prop.Name;
79 | colorItem.ColorBrush = new Windows.UI.Xaml.Media.SolidColorBrush(prop.Name.ToColor());
80 | map.Add(colorItem);
81 | }
82 | return map;
83 | }
84 | public static ColorComboItem MatchColor(Color c)
85 | {
86 | const BindingFlags flags = BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
87 | Type t = typeof(Colors);
88 | List a = GetStaticPropertyBag(typeof(Colors));
89 | ColorComboItem colorItem = new ColorComboItem();
90 | foreach (var prop in t.GetProperties(flags))
91 | {
92 | if (prop.Name.ToColor() == c)
93 | {
94 |
95 | colorItem.ColorName = prop.Name;
96 | colorItem.ColorBrush = new Windows.UI.Xaml.Media.SolidColorBrush(prop.Name.ToColor());
97 |
98 | }
99 |
100 |
101 | }
102 | return colorItem;
103 | }
104 | public static void SetApplicationResources()
105 | {
106 | Application.Current.Resources["AppBarButtonForegroundPointerOver"] = SettingsHelper.totalAppSettings.AppForegroundColorBrush;
107 | Application.Current.Resources["AppBarButtonBackgroundPointerOver"] = SettingsHelper.totalAppSettings.AppBackgroundColorBrush;
108 | Application.Current.Resources["ComboBoxBackground"] = SettingsHelper.totalAppSettings.AppBackgroundColorBrush;
109 | Application.Current.Resources["ComboBoxBackgroundPointerOver"] = SettingsHelper.totalAppSettings.AppBackgroundColorBrush;
110 | Application.Current.Resources["ComboBoxForeground"] = SettingsHelper.totalAppSettings.AppForegroundColorBrush;
111 | Application.Current.Resources["ComboBoxDropDownBackground"] = SettingsHelper.totalAppSettings.AppBackgroundColorBrush;
112 | Application.Current.Resources["ComboBoxPlaceHolderForeground"] = SettingsHelper.totalAppSettings.AppForegroundColorBrush;
113 | }
114 |
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/appLauncher/Core/Interfaces/IApporFolder.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI;
2 | using Windows.UI.Xaml.Media;
3 |
4 | namespace appLauncher.Core.Interfaces
5 | {
6 | public interface IApporFolder
7 | {
8 | string Name { get; set; }
9 | string Description { get; set; }
10 | bool Favorite { get; set; }
11 | int ListPos { get; set; }
12 | int LaunchedCount { get; set; }
13 | Color TextColor { get; set; }
14 | Color BackColor { get; set; }
15 | SolidColorBrush TextBrush { get; }
16 | SolidColorBrush BackBrush { get; }
17 |
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/appLauncher/Core/Model/AppFolder.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Interfaces;
2 |
3 | using Newtonsoft.Json;
4 | using Newtonsoft.Json.Serialization;
5 |
6 | using System;
7 | using System.Collections.Generic;
8 |
9 | using Windows.UI;
10 | using Windows.UI.Xaml.Media;
11 |
12 | namespace appLauncher.Core.Model
13 | {
14 | [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
15 | public class AppFolder : ModelBase, IApporFolder
16 | {
17 | private string _name;
18 | private string _description;
19 | private List _folderapps = new List();
20 | private Color _textcolor = Colors.Orange;
21 | private Color _backcolor = Colors.Black;
22 | private bool _favorite = false;
23 | private long _createdDate = 0;
24 | private int _launchedcount = 0;
25 | [JsonProperty]
26 | public string Name
27 | {
28 | get
29 | {
30 | if (string.IsNullOrEmpty(_name))
31 | {
32 | return string.Empty;
33 | }
34 | return _name;
35 | }
36 | set
37 | {
38 | SetProperty(ref _name, value);
39 | }
40 | }
41 | [JsonProperty]
42 | public bool Favorite
43 | {
44 | get
45 | {
46 | return _favorite;
47 | }
48 | set
49 | {
50 | SetProperty(ref _favorite, value);
51 | }
52 | }
53 | [JsonProperty]
54 | public string Description
55 | {
56 | get
57 | {
58 | if (string.IsNullOrEmpty(_description))
59 | {
60 | return string.Empty;
61 | }
62 | return _description;
63 | }
64 | set
65 | {
66 | SetProperty(ref _description, value);
67 | }
68 | }
69 | [JsonProperty]
70 | public List FolderApps
71 | {
72 | get
73 | {
74 | return _folderapps;
75 | }
76 | set
77 | {
78 | SetProperty(ref _folderapps, value);
79 | }
80 | }
81 | [JsonProperty]
82 | public int ListPos { get; set; }
83 | [JsonProperty]
84 | public int LaunchedCount
85 | {
86 | get
87 | {
88 | return _launchedcount;
89 | }
90 | set
91 | {
92 | SetProperty(ref _launchedcount, value);
93 | }
94 | }
95 | [JsonIgnore]
96 | public SolidColorBrush TextBrush
97 | {
98 | get
99 | {
100 | return new SolidColorBrush(TextColor);
101 | }
102 | }
103 | [JsonIgnore]
104 | public SolidColorBrush BackBrush { get { return new SolidColorBrush(BackColor); } }
105 | [JsonProperty]
106 | public Color TextColor { get; set; } = Colors.Red;
107 | [JsonProperty]
108 | public Color BackColor { get; set; } = Colors.Blue;
109 | [JsonProperty]
110 | public DateTimeOffset InstalledDate
111 | {
112 | get
113 | {
114 | return DateTimeOffset.FromUnixTimeSeconds(_createdDate);
115 | }
116 | set
117 | {
118 | SetProperty(ref _createdDate, value.ToUnixTimeSeconds());
119 | }
120 | }
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/appLauncher/Core/Model/ColorComboItem.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI.Xaml.Media;
2 |
3 | namespace appLauncher.Core.Model
4 | {
5 | public class ColorComboItem
6 | {
7 | public ColorComboItem() { }
8 | private string _colorname;
9 | private SolidColorBrush _colorbrush;
10 | public string ColorName
11 | {
12 | get
13 | {
14 | return _colorname;
15 | }
16 | set
17 | {
18 | _colorname = value;
19 | }
20 | }
21 | public SolidColorBrush ColorBrush
22 | {
23 | get
24 | {
25 | return _colorbrush;
26 | }
27 | set
28 | {
29 | _colorbrush = value;
30 | }
31 | }
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/appLauncher/Core/Model/DraggedItem.cs:
--------------------------------------------------------------------------------
1 | namespace appLauncher.Core.Model
2 | {
3 | public class DraggedItem
4 | {
5 | public int InitialIndex { get; set; }
6 | public int IndexOnNewPage { get; set; }
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/appLauncher/Core/Model/GlobalAppSettings.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.CustomEvent;
2 | using appLauncher.Core.Pages;
3 |
4 | using Microsoft.Toolkit.Uwp.Helpers;
5 |
6 | using Newtonsoft.Json;
7 |
8 | using System;
9 | using System.Collections.Generic;
10 | using System.Net;
11 |
12 | using Windows.ApplicationModel;
13 | using Windows.UI;
14 | using Windows.UI.Xaml.Media;
15 |
16 | namespace appLauncher.Core.Model
17 | {
18 | public class GlobalAppSettings : ModelBase
19 | {
20 | private string _appForegroundColor = "Orange";
21 | private string _appBackgroundColor = "Green";
22 | private TimeSpan _imageRotationTime = TimeSpan.FromSeconds(15);
23 | private int _appsPerScreen = 0;
24 | private int _lastPageNum = 0;
25 | private string _appVersion = string.Empty;
26 | private List _appColors = new List();
27 | private IPEndPoint _remoteIP = null;
28 | private bool _sync = false;
29 | private int _numofPages = 1;
30 | public bool CanEnablePreLaunch
31 | {
32 | get
33 | {
34 | return Windows.Foundation.Metadata.ApiInformation.IsMethodPresent("Windows.ApplicationModel.Core.CoreApplication", "EnablePrelaunch");
35 | }
36 | }
37 | public bool Sync
38 | {
39 | get
40 | {
41 | return _sync;
42 | }
43 | set
44 | {
45 | _sync = value;
46 | }
47 | }
48 | [JsonIgnore]
49 | public IPEndPoint RemoteIP
50 | {
51 | get
52 | {
53 | return _remoteIP;
54 | }
55 | set
56 | {
57 | _remoteIP = value;
58 | }
59 | }
60 |
61 | public GlobalAppSettings()
62 | {
63 | MainPage.pageSizeChanged += SetPageSize;
64 | MainPage.pageChanged += SetPageNumber;
65 | MainPage.numofPagesChanged += MainPage_numofPagesChanged;
66 | Package pack = Package.Current;
67 | PackageVersion version = new PackageVersion();
68 | version = pack.Id.Version;
69 | _appVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build);
70 |
71 | }
72 |
73 | private void MainPage_numofPagesChanged(PageNumChangedArgs e)
74 | {
75 | NumOfPages = e.numofpages;
76 | }
77 |
78 | [JsonIgnore]
79 | public List AppColors
80 | {
81 | get
82 | {
83 | return _appColors;
84 | }
85 | set
86 | {
87 | _appColors = value;
88 | }
89 | }
90 | [JsonIgnore]
91 | public string AppVersion
92 | {
93 | get
94 | {
95 | return _appVersion;
96 | }
97 | }
98 | public void SetPageSize(PageSizeEventArgs e)
99 | {
100 | AppsPerPage = e.AppPageSize;
101 | }
102 | public void SetPageNumber(PageChangedEventArgs e)
103 | {
104 | LastPageNumber = e.PageIndex;
105 | }
106 | public int NumOfPages
107 | {
108 | get
109 | {
110 | return _numofPages;
111 | }
112 | set
113 | {
114 | _numofPages = value;
115 | }
116 | }
117 | public int LastPageNumber
118 | {
119 | get
120 | {
121 | return _lastPageNum;
122 | }
123 | set
124 | {
125 | _lastPageNum = value;
126 | }
127 | }
128 | public int AppsPerPage
129 | {
130 | get
131 | {
132 | return _appsPerScreen;
133 | }
134 | set
135 | {
136 | _appsPerScreen = value;
137 | }
138 | }
139 | public TimeSpan ImageRotationTime
140 | {
141 | get { return _imageRotationTime; }
142 | set { SetProperty(ref _imageRotationTime, value); }
143 | }
144 | public Color AppBackgroundColor
145 | {
146 | get
147 | {
148 | if (string.IsNullOrEmpty(_appBackgroundColor))
149 | {
150 | return "Transparent".ToColor();
151 | }
152 | return _appBackgroundColor.ToColor();
153 | }
154 | set
155 | {
156 | SetProperty(ref _appBackgroundColor, value.ToString(), "AppBackgroundColorBrush");
157 | }
158 | }
159 | public Color AppForgroundColor
160 | {
161 | get
162 | {
163 | if (string.IsNullOrEmpty(_appForegroundColor))
164 | {
165 | return "Blue".ToColor();
166 | }
167 | return _appForegroundColor.ToColor();
168 | }
169 | set
170 | {
171 | SetProperty(ref _appForegroundColor, value.ToString(), "AppForegroundColorBrush");
172 | }
173 | }
174 | [JsonIgnore]
175 | public SolidColorBrush AppForegroundColorBrush
176 |
177 | {
178 | get
179 | {
180 | return new SolidColorBrush(AppForgroundColor);
181 |
182 |
183 |
184 | }
185 | }
186 | [JsonIgnore]
187 | public SolidColorBrush AppBackgroundColorBrush
188 | {
189 | get
190 | {
191 |
192 | return new SolidColorBrush(AppBackgroundColor);
193 |
194 | }
195 | }
196 |
197 | }
198 | }
199 |
--------------------------------------------------------------------------------
/appLauncher/Core/Model/Modelbase.cs:
--------------------------------------------------------------------------------
1 | using System.Collections.Generic;
2 | using System.ComponentModel;
3 | using System.Runtime.CompilerServices;
4 |
5 | namespace appLauncher.Core.Model
6 | {
7 | public class ModelBase : INotifyPropertyChanged
8 | {
9 | public event PropertyChangedEventHandler PropertyChanged;
10 | protected bool SetProperty(ref T field, T value, [CallerMemberName] string name = null)
11 | {
12 | bool propertyChanged = false;
13 |
14 | //If we have a different value, do stuff
15 | if (!EqualityComparer.Default.Equals(field, value))
16 | {
17 | field = value;
18 | OnPropertyChanged(name);
19 | propertyChanged = true;
20 | }
21 |
22 | return propertyChanged;
23 | }
24 |
25 | //The C#6 version of the common implementation
26 | protected void OnPropertyChanged([CallerMemberName] string name = null)
27 | {
28 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/appLauncher/Core/Model/PageBackgrounds.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Brushes;
2 |
3 | using Newtonsoft.Json;
4 |
5 | using System.IO;
6 | using System.Runtime.InteropServices.WindowsRuntime;
7 |
8 | namespace appLauncher.Core.Model
9 | {
10 | public class PageBackgrounds : ModelBase
11 | {
12 | private string _backgroundDisplayName;
13 | private byte[] _backgroundImage;
14 | private string _imagepath;
15 | public string BackgroundImageDisplayName
16 | {
17 | get
18 | {
19 | if (string.IsNullOrEmpty(_backgroundDisplayName))
20 | {
21 | return "";
22 | }
23 | return _backgroundDisplayName;
24 | }
25 | set
26 | {
27 | SetProperty(ref _backgroundDisplayName, value);
28 | }
29 | }
30 | public string FilePath
31 | {
32 | get
33 | {
34 | return _imagepath;
35 | }
36 | set
37 | {
38 | SetProperty(ref _imagepath, value);
39 | }
40 | }
41 | [JsonIgnore]
42 | public PageImageBrush BackImage
43 | {
44 | get
45 | {
46 | return new PageImageBrush(stream: BackgroundImageBytes.AsBuffer().AsStream().AsRandomAccessStream());
47 | }
48 | }
49 | public byte[] BackgroundImageBytes
50 | {
51 | get
52 | {
53 |
54 | if (_backgroundImage == null)
55 | {
56 | return new byte[1];
57 | }
58 | return _backgroundImage;
59 | }
60 | set
61 | {
62 | SetProperty(ref _backgroundImage, value);
63 | }
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/appLauncher/Core/Model/PageChangingVariables.cs:
--------------------------------------------------------------------------------
1 | using System.Diagnostics;
2 |
3 | namespace appLauncher.Core.Model
4 | {
5 | public class PageChangingVariables : ModelBase
6 | {
7 | private bool _isNext = false;
8 | private bool _isPrevious = false;
9 | public bool IsNext
10 | {
11 | get
12 | {
13 | Debug.WriteLine($"Getting is Next {_isNext}");
14 | return _isNext;
15 | }
16 | set
17 | {
18 | SetProperty(ref _isNext, value);
19 | Debug.WriteLine($"Is Next set: {value}");
20 |
21 | }
22 | }
23 | public bool IsPrevious
24 | {
25 | get
26 | {
27 | Debug.WriteLine($"Is Previous is acccessed: {_isPrevious}");
28 | return _isPrevious;
29 |
30 | }
31 | set
32 | {
33 | SetProperty(ref _isPrevious, value);
34 | Debug.WriteLine($"Is Previous set: {value}");
35 | }
36 | }
37 | }
38 | }
--------------------------------------------------------------------------------
/appLauncher/Core/Model/PaginatedCollection.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Collections.ObjectModel;
4 | using System.ComponentModel;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 |
9 | namespace appLauncher.Model
10 | {
11 |
12 | [Serializable]
13 | public class PaginationObservableCollection : ObservableCollection
14 | {
15 | private ObservableCollection originalCollection;
16 | [NonSerialized]
17 | private int Page;
18 | [NonSerialized]
19 | private int CountPerPage;
20 |
21 | public PaginationObservableCollection(IEnumerable collection) : base(collection)
22 | {
23 |
24 | Page = 0;
25 | CountPerPage = 1;
26 | originalCollection = new ObservableCollection(collection);
27 | RecalculateThePageItems();
28 | }
29 |
30 |
31 | private void RecalculateThePageItems()
32 | {
33 | ClearItems();
34 |
35 | int startIndex = Page * CountPerPage;
36 | int endIndex = startIndex + CountPerPage;
37 | for (int i = startIndex; i < endIndex; i++)
38 | {
39 | if (originalCollection.Count > i)
40 | base.InsertItem(i - startIndex, originalCollection[i]);
41 | }
42 | }
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | protected override void InsertItem(int index, finalAppItem item)
53 | {
54 | int startIndex = Page * CountPerPage;
55 | int endIndex = startIndex + CountPerPage;
56 |
57 | //Check if the Index is with in the current Page then add to the collection as bellow. And add to the originalCollection also
58 | if ((index >= startIndex) && (index < endIndex))
59 | {
60 | base.InsertItem(index - startIndex, item);
61 |
62 | if (Count > CountPerPage)
63 | base.RemoveItem(endIndex);
64 | }
65 |
66 | if (index >= Count)
67 | originalCollection.Add(item);
68 | else
69 | originalCollection.Insert(index, item);
70 | }
71 |
72 | protected override void RemoveItem(int index)
73 | {
74 | int startIndex = Page * CountPerPage;
75 | int endIndex = startIndex + CountPerPage;
76 | //Check if the Index is with in the current Page range then remove from the collection as bellow. And remove from the originalCollection also
77 | if ((index >= startIndex) && (index < endIndex))
78 | {
79 | this.RemoveAt(index - startIndex);
80 |
81 | if (Count <= CountPerPage)
82 | base.InsertItem(endIndex - 1, originalCollection[index + 1]);
83 | }
84 |
85 | originalCollection.RemoveAt(index);
86 | }
87 | public ObservableCollection GetFinalAppItems()
88 | {
89 |
90 | }
91 | public int PageSize
92 | {
93 | get { return Count; }
94 | set
95 | {
96 | if (value >= 0)
97 | {
98 | CountPerPage = value;
99 | RecalculateThePageItems();
100 | OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("PageSize"));
101 | }
102 | }
103 | }
104 |
105 | public int CurrentPage
106 | {
107 | get { return Page; }
108 | set
109 | {
110 | if (value >= 0)
111 | {
112 | Page = value;
113 | RecalculateThePageItems();
114 | OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("CurrentPage"));
115 | }
116 | }
117 | }
118 | }
119 | }
--------------------------------------------------------------------------------
/appLauncher/Core/Model/PaginatedObservableCollection.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.CustomEvent;
2 | using appLauncher.Core.Helpers;
3 |
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Collections.ObjectModel;
7 | using System.Linq;
8 |
9 | namespace appLauncher.Core.Model
10 | {
11 | [Serializable]
12 | public class PaginationObservableCollection : ObservableCollection
13 | {
14 | private ObservableCollection originalCollection;
15 | [NonSerialized]
16 | private int Page;
17 | [NonSerialized]
18 | private int CountPerPage;
19 | private int startIndex;
20 | private int endIndex;
21 |
22 | public PaginationObservableCollection(IEnumerable collection) : base(collection)
23 | {
24 |
25 | startIndex = Page = 0;
26 | endIndex = CountPerPage = 1;
27 | originalCollection = new ObservableCollection(collection);
28 | GlobalVariables.PageNumChanged += PageChanged;
29 | GlobalVariables.NumofApps += SizedChanged;
30 | RecalculateThePageItems();
31 | }
32 |
33 | private void RecalculateThePageItems()
34 | {
35 | ClearItems();
36 | for (int i = startIndex; i < endIndex; i++)
37 | {
38 | if (originalCollection.Count > i)
39 | base.InsertItem(i - startIndex, originalCollection[i]);
40 | }
41 | }
42 | public int GetIndexApp(Apps app)
43 | {
44 | return originalCollection.IndexOf(app);
45 | }
46 | public void MoveApp(DraggedItem item)
47 | {
48 | originalCollection.Move(item.initialindex, item.indexonnewpage);
49 | RecalculateThePageItems();
50 | this.OnCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Replace));
51 |
52 | }
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | protected override void InsertItem(int index, Apps item)
61 | {
62 |
63 |
64 | //Check if the Index is with in the current Page then add to the collection as bellow. And add to the originalCollection also
65 | if ((index >= startIndex) && (index < endIndex))
66 | {
67 | base.InsertItem(index - startIndex, item);
68 |
69 | if (Count > CountPerPage)
70 | base.RemoveItem(endIndex);
71 | }
72 |
73 | if (index >= Count)
74 | {
75 | originalCollection.Add(item);
76 | }
77 | else
78 | {
79 | originalCollection.Insert(index, item);
80 | }
81 |
82 | OnCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Add));
83 | }
84 |
85 |
86 | protected override void RemoveItem(int index)
87 | {
88 |
89 | //Check if the Index is with in the current Page range then remove from the collection as bellow. And remove from the originalCollection also
90 | if ((index >= startIndex) && (index < endIndex))
91 | {
92 | this.RemoveAt(index - startIndex);
93 |
94 | if (Count <= CountPerPage)
95 | base.InsertItem(endIndex - 1, originalCollection[index + 1]);
96 | }
97 |
98 | originalCollection.RemoveAt(index);
99 | OnCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Remove));
100 | }
101 | public ObservableCollection GetOriginalCollection()
102 | {
103 | return originalCollection;
104 | }
105 | public void GetFilteredApps(string selected)
106 | {
107 |
108 | ObservableCollection orderlist;
109 | switch (selected)
110 | {
111 | case "AtoZ":
112 | orderlist = originalCollection.OrderBy(y => y.Name).ToObservableCollection();
113 | originalCollection = orderlist;
114 | break;
115 | case "Developer":
116 | orderlist = originalCollection.OrderBy(x => x.Developer).ToObservableCollection();
117 | originalCollection = orderlist;
118 | break;
119 | case "Installed":
120 | orderlist = originalCollection.OrderBy(x => x.InstalledDate).ToObservableCollection();
121 | originalCollection = orderlist;// new ObservableCollection(orderlist);
122 | break;
123 |
124 | default:
125 | return;
126 |
127 |
128 | }
129 | RecalculateThePageItems();
130 | this.OnCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Reset));
131 | }
132 | public void PageChanged(PageChangedEventArgs e)
133 | {
134 | Page = e.PageIndex;
135 | startIndex = Page * CountPerPage;
136 | endIndex = startIndex + CountPerPage;
137 | RecalculateThePageItems();
138 | OnCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Reset));
139 | }
140 | public void SizedChanged(AppPageSizeChangedEventArgs e)
141 | {
142 | CountPerPage = e.AppPageSize;
143 | startIndex = Page * CountPerPage;
144 | endIndex = startIndex + CountPerPage;
145 | RecalculateThePageItems();
146 | OnCollectionChanged(new System.Collections.Specialized.NotifyCollectionChangedEventArgs(System.Collections.Specialized.NotifyCollectionChangedAction.Reset));
147 | }
148 |
149 | }
150 | public static class Extensions
151 | {
152 | public static ObservableCollection ToObservableCollection(this IEnumerable col)
153 | {
154 | return new ObservableCollection(col);
155 | }
156 | }
157 | }
158 |
--------------------------------------------------------------------------------
/appLauncher/Core/Model/pageIndicators.cs:
--------------------------------------------------------------------------------
1 | using System.Diagnostics;
2 |
3 | using Windows.UI;
4 | using Windows.UI.Xaml.Media;
5 |
6 | namespace appLauncher.Core.Model
7 | {
8 | public class PageIndicators : ModelBase
9 | {
10 | private int _pageNumb;
11 | private int _displayPageNum;
12 | private bool _selected;
13 | private Color _displayColor = Colors.Gray;
14 | private string _tip = "Unknown Page Selected";
15 | public PageIndicators()
16 | {
17 |
18 | }
19 | public Color DisplayColor
20 | {
21 | get
22 | {
23 | return _displayColor;
24 | }
25 | set
26 | {
27 | SetProperty(ref _displayColor, value, "FillColor");
28 | }
29 | }
30 | public bool Selected
31 | {
32 | get
33 | {
34 | return _selected;
35 | }
36 | set
37 | {
38 | SetProperty(ref _selected, value);
39 | }
40 | }
41 | public string Tip
42 | {
43 | get
44 | {
45 | return Tip;
46 | }
47 | set
48 | {
49 | SetProperty(ref _tip, value);
50 | }
51 |
52 | }
53 | public Brush FillColor
54 |
55 | {
56 | get
57 | {
58 | Debug.WriteLine(Selected);
59 | if (!_selected)
60 | {
61 | Debug.WriteLine(DisplayColor);
62 | return new SolidColorBrush(DisplayColor);
63 | }
64 | Debug.WriteLine(DisplayColor);
65 | return new SolidColorBrush(DisplayColor);
66 | }
67 | }
68 | public int PageNum
69 | {
70 | get
71 | {
72 | return _pageNumb;
73 | }
74 | set
75 |
76 | {
77 | SetProperty(ref _pageNumb, value);
78 | }
79 | }
80 | public int DisplayPageNum
81 | {
82 | get
83 | {
84 | return PageNum + 1;
85 | }
86 | }
87 |
88 |
89 |
90 |
91 | }
92 |
93 | }
94 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AboutPage.xaml:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AboutPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI.Xaml.Controls;
2 | using Windows.UI.Xaml.Input;
3 |
4 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
5 |
6 | namespace appLauncher.Core.Pages
7 | {
8 | ///
9 | /// An empty page that can be used on its own or navigated to within a Frame.
10 | ///
11 | public sealed partial class AboutPage : Page
12 | {
13 | private string appversion = $"App Version: {Helpers.SettingsHelper.totalAppSettings.AppVersion}";
14 | public AboutPage()
15 | {
16 | this.InitializeComponent();
17 | this.Loaded += AboutPage_Loaded;
18 | }
19 |
20 | private void AboutPage_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
21 | {
22 |
23 |
24 | }
25 |
26 | private void Home_Tapped(object sender, TappedRoutedEventArgs e)
27 | {
28 | Frame.Navigate(typeof(MainPage));
29 | }
30 |
31 | private void SettingsPage_Tapped(object sender, TappedRoutedEventArgs e)
32 | {
33 | Frame.Navigate(typeof(SettingsPage));
34 | }
35 |
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppBackgroundSettings.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
18 |
19 |
26 |
27 |
28 |
29 |
30 |
34 |
37 |
38 |
39 |
45 |
46 |
47 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppBackgroundSettings.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Model;
3 |
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Diagnostics;
7 | using System.IO;
8 | using System.Linq;
9 | using System.Runtime.InteropServices.WindowsRuntime;
10 |
11 | using Windows.Foundation;
12 | using Windows.Foundation.Collections;
13 | using Windows.Storage;
14 | using Windows.UI.Xaml;
15 | using Windows.UI.Xaml.Controls;
16 | using Windows.UI.Xaml.Controls.Primitives;
17 | using Windows.UI.Xaml.Data;
18 | using Windows.UI.Xaml.Input;
19 | using Windows.UI.Xaml.Media;
20 | using Windows.UI.Xaml.Navigation;
21 |
22 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
23 |
24 | namespace appLauncher.Core.Pages
25 | {
26 | ///
27 | /// An empty page that can be used on its own or navigated to within a Frame.
28 | ///
29 | public sealed partial class AppBackgroundSettings : Page
30 | {
31 | public AppBackgroundSettings()
32 | {
33 | this.InitializeComponent();
34 | }
35 |
36 | private async void AddButton_TappedAsync(object sender, TappedRoutedEventArgs e)
37 | {
38 | try
39 | {
40 |
41 | var picker = new Windows.Storage.Pickers.FileOpenPicker
42 | {
43 | ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail,
44 | SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary
45 | };
46 | //Standard Image Support
47 | picker.FileTypeFilter.Add(".jpg");
48 | picker.FileTypeFilter.Add(".jpeg");
49 | picker.FileTypeFilter.Add(".jpe");
50 | picker.FileTypeFilter.Add(".png");
51 | picker.FileTypeFilter.Add(".svg");
52 | picker.FileTypeFilter.Add(".tif");
53 | picker.FileTypeFilter.Add(".tiff");
54 | picker.FileTypeFilter.Add(".bmp");
55 | //JFIF Support
56 | picker.FileTypeFilter.Add(".jif");
57 | picker.FileTypeFilter.Add(".jfif");
58 | //GIF Support
59 | picker.FileTypeFilter.Add(".gif");
60 | picker.FileTypeFilter.Add(".gifv");
61 | IReadOnlyList file = await picker.PickMultipleFilesAsync();
62 | if (file.Any())
63 | {
64 | foreach (StorageFile item in file)
65 | {
66 | ImageHelper.AddPageBackround(pageBackgrounds: new PageBackgrounds
67 | {
68 | BackgroundImageDisplayName = item.DisplayName,
69 | FilePath = item.Path,
70 | BackgroundImageBytes = await ImageHelper.ConvertImageFiletoByteArrayAsync(fileName: item)
71 | });
72 | }
73 | }
74 | else
75 | {
76 | Debug.WriteLine("Operation cancelled.");
77 | }
78 | }
79 | catch (Exception)
80 | {
81 |
82 | }
83 | }
84 |
85 | private void RemoveButton_Tapped(object sender, TappedRoutedEventArgs e)
86 | {
87 | try
88 | {
89 |
90 | ImageHelper.RemovePageBackground(((PageBackgrounds)imagelist.SelectedItem).BackgroundImageDisplayName);
91 |
92 | }
93 | catch (Exception)
94 | {
95 |
96 | }
97 | }
98 | }
99 | }
100 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppInformation.xaml:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppInformation.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Model;
3 |
4 | using System.Linq;
5 |
6 | using Windows.UI.Xaml.Controls;
7 | using Windows.UI.Xaml.Navigation;
8 |
9 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
10 |
11 | namespace appLauncher.Core.Pages
12 | {
13 | ///
14 | /// An empty page that can be used on its own or navigated to within a Frame.
15 | ///
16 | public sealed partial class AppInformation : Page
17 |
18 | {
19 | private FinalTiles _tiles;
20 | public AppInformation()
21 | {
22 | this.InitializeComponent();
23 | }
24 |
25 | protected override void OnNavigatedTo(NavigationEventArgs e)
26 | {
27 | _tiles = e.Parameter as FinalTiles;
28 | }
29 |
30 | private void Page_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
31 | {
32 | Favorited.IsChecked = _tiles.Favorite;
33 | }
34 |
35 | private void Favorited_Checked(object sender, Windows.UI.Xaml.RoutedEventArgs e)
36 | {
37 | _tiles.Favorite = (bool)Favorited.IsChecked;
38 | var a = PackageHelper.Apps.GetOriginalCollection().ToList();
39 | var b = a.OfType().ToList();
40 | if (b.Any(x => x.Name == _tiles.Name))
41 | {
42 | b[b.IndexOf(b.First(x => x.Name == _tiles.Name))] = _tiles;
43 | }
44 |
45 | }
46 |
47 |
48 | private void Favorited_Unchecked(object sender, Windows.UI.Xaml.RoutedEventArgs e)
49 | {
50 | _tiles.Favorite = (bool)Favorited.IsChecked;
51 | var a = PackageHelper.Apps.GetOriginalCollection().ToList();
52 | var b = a.OfType().ToList();
53 | if (b.Any(x => x.Name == _tiles.Name))
54 | {
55 | b[b.IndexOf(b.First(x => x.Name == _tiles.Name))] = _tiles;
56 | }
57 | }
58 |
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppLoading.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppLoading.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Model;
3 |
4 | using System;
5 | using System.Diagnostics;
6 | using System.Linq;
7 |
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 |
11 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
12 |
13 | namespace appLauncher.Core.Pages
14 | {
15 | ///
16 | /// An empty page that can be used on its own or navigated to within a Frame.
17 | ///
18 | public sealed partial class AppLoading : Page
19 | {
20 | public AppLoading()
21 | {
22 | this.InitializeComponent();
23 | PackageHelper.AppsRetreived += PackageHelper_AppsRetreived;
24 | ImageHelper.ImagesRetreived += ImageHelper_ImagesRetreived;
25 | }
26 |
27 | private void ImageHelper_ImagesRetreived(object sender, EventArgs e)
28 | {
29 | FirstPage.appFolders = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
30 | FirstPage.tiles = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
31 |
32 | FirstPage.navFrame.Navigate(typeof(MainPage));
33 | FirstPage.navFrame.BackStack.RemoveAt(0);
34 |
35 | }
36 |
37 | private async void PackageHelper_AppsRetreived(object sender, EventArgs e)
38 | {
39 | Debug.WriteLine($"amount of tiles {PackageHelper.Apps.GetOriginalCollection().Count()}");
40 |
41 | await ImageHelper.LoadBackgroundImages();
42 | }
43 |
44 | private async void Page_Loaded(object sender, RoutedEventArgs e)
45 | {
46 | await PackageHelper.LoadCollectionAsync();
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppSettings.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
18 |
19 |
26 |
27 |
28 |
29 |
30 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
49 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
68 |
69 |
70 |
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppSettings.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Model;
3 |
4 | using Microsoft.Toolkit.Uwp.Helpers;
5 |
6 | using System;
7 | using System.Collections.Generic;
8 | using System.IO;
9 | using System.Linq;
10 | using System.Runtime.InteropServices.WindowsRuntime;
11 |
12 | using Windows.Foundation;
13 | using Windows.Foundation.Collections;
14 | using Windows.UI;
15 | using Windows.UI.Xaml;
16 | using Windows.UI.Xaml.Controls;
17 | using Windows.UI.Xaml.Controls.Primitives;
18 | using Windows.UI.Xaml.Data;
19 | using Windows.UI.Xaml.Input;
20 | using Windows.UI.Xaml.Media;
21 | using Windows.UI.Xaml.Navigation;
22 |
23 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
24 |
25 | namespace appLauncher.Core.Pages
26 | {
27 | ///
28 | /// An empty page that can be used on its own or navigated to within a Frame.
29 | ///
30 | public sealed partial class AppSettings : Page
31 | {
32 | public AppSettings()
33 | {
34 | this.InitializeComponent();
35 | }
36 |
37 | private void ApplicationTextColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
38 | {
39 | SettingsHelper.totalAppSettings.AppForgroundColor = (((ColorComboItem)((ComboBox)sender).SelectedItem).ColorName).ToColor();
40 | }
41 |
42 | private void ApplicationBackColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
43 | {
44 | SettingsHelper.totalAppSettings.AppBackgroundColor = (((ColorComboItem)((ComboBox)sender).SelectedItem).ColorName).ToColor();
45 | }
46 |
47 | private void ApplicationTextOpacity_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
48 | {
49 | Color f = Color.FromArgb(Convert.ToByte((((double)e.NewValue / 10) * 255)), SettingsHelper.totalAppSettings.AppForgroundColor.R, SettingsHelper.totalAppSettings.AppForgroundColor.G, SettingsHelper.totalAppSettings.AppForgroundColor.B);
50 | SettingsHelper.totalAppSettings.AppForgroundColor = f;
51 | }
52 |
53 | private void ApplicationBackOpacity_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
54 | {
55 | Color f = Color.FromArgb(Convert.ToByte((((double)e.NewValue / 10) * 255)), SettingsHelper.totalAppSettings.AppBackgroundColor.R, SettingsHelper.totalAppSettings.AppBackgroundColor.G, SettingsHelper.totalAppSettings.AppBackgroundColor.B);
56 | SettingsHelper.totalAppSettings.AppBackgroundColor = f;
57 | }
58 | private void SaveSettings_Tapped(object sender, TappedRoutedEventArgs e)
59 | {
60 | int time;
61 | int.TryParse(ChangeTime.Text, out time);
62 | SettingsHelper.totalAppSettings.ImageRotationTime = (time <= 0) ? TimeSpan.FromSeconds(15) : TimeSpan.FromSeconds(time);
63 | SettingsHelper.SetApplicationResources();
64 | SettingsHelper.SaveAppSettingsAsync().ConfigureAwait(true);
65 | }
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppTilesSettings.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Model;
3 |
4 | using Microsoft.Toolkit.Uwp.Helpers;
5 |
6 | using System;
7 | using System.Collections.Generic;
8 | using System.IO;
9 | using System.Linq;
10 | using System.Runtime.InteropServices.WindowsRuntime;
11 |
12 | using Windows.Foundation;
13 | using Windows.Foundation.Collections;
14 | using Windows.UI;
15 | using Windows.UI.Xaml;
16 | using Windows.UI.Xaml.Controls;
17 | using Windows.UI.Xaml.Controls.Primitives;
18 | using Windows.UI.Xaml.Data;
19 | using Windows.UI.Xaml.Input;
20 | using Windows.UI.Xaml.Media;
21 | using Windows.UI.Xaml.Navigation;
22 |
23 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
24 |
25 | namespace appLauncher.Core.Pages
26 | {
27 | ///
28 | /// An empty page that can be used on its own or navigated to within a Frame.
29 | ///
30 | public sealed partial class AppTilesSettings : Page
31 | {
32 | private bool allapps = false;
33 | private FinalTiles selectedapp;
34 | private string sectionofapp;
35 | private string Appscolor;
36 | private string apptextcolor;
37 | private string appbackcolor;
38 | private string AppToggleTip = "Change settings for all app or specific app";
39 | public AppTilesSettings()
40 | {
41 | this.InitializeComponent();
42 | }
43 |
44 | private void TileLogoColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
45 | {
46 | selectedapp.LogoColor = (((ColorComboItem)((ComboBox)sender).SelectedItem).ColorName).ToColor();
47 | }
48 |
49 | private void LogoOpacity_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
50 | {
51 | Color c = Color.FromArgb(Convert.ToByte((((double)e.NewValue / 10) * 255)), selectedapp.LogoColor.R, selectedapp.LogoColor.G, selectedapp.LogoColor.B);
52 | selectedapp.LogoColor = c;
53 | }
54 |
55 | private void TileBackColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
56 | {
57 | selectedapp.BackColor = (((ColorComboItem)((ComboBox)sender).SelectedItem).ColorName).ToColor();
58 | }
59 |
60 | private void TileBackOpacity_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
61 | {
62 | Color backcolor = Color.FromArgb(Convert.ToByte((((double)e.NewValue / 10) * 255)), selectedapp.BackColor.R, selectedapp.BackColor.G, selectedapp.BackColor.B);
63 | selectedapp.BackColor = backcolor;
64 | }
65 |
66 | private void TileTextColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
67 | {
68 | selectedapp.TextColor = (((ColorComboItem)((ComboBox)sender).SelectedItem).ColorName).ToColor();
69 | }
70 |
71 | private void TileTextOpacity_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
72 | {
73 | Color f = Color.FromArgb(Convert.ToByte(((double)e.NewValue / 10) * 255), selectedapp.TextColor.R, selectedapp.TextColor.G, selectedapp.TextColor.B);
74 | selectedapp.TextColor = f;
75 | }
76 |
77 | private void Preview_Tapped(object sender, TappedRoutedEventArgs e)
78 | {
79 | TestApps.Items.Clear();
80 | TestApps.Items.Add(selectedapp);
81 | }
82 |
83 | private void SaveChanges_Tapped(object sender, TappedRoutedEventArgs e)
84 | {
85 | if (allapps)
86 | {
87 | for (int i = 0; i < PackageHelper.Apps.GetOriginalCollection().Count; i++)
88 | {
89 | ((FinalTiles)PackageHelper.Apps.GetOriginalCollection()[i]).TextColor = selectedapp.TextColor;
90 | ((FinalTiles)PackageHelper.Apps.GetOriginalCollection()[i]).LogoColor = selectedapp.LogoColor;
91 | ((FinalTiles)PackageHelper.Apps.GetOriginalCollection()[i]).BackColor = selectedapp.BackColor;
92 | }
93 | ResetAppTilePage();
94 | return;
95 | }
96 | int appselected = PackageHelper.Apps.IndexOf(PackageHelper.Apps.FirstOrDefault(x => x.Name == selectedapp.Name));
97 | if (appselected > -1)
98 | {
99 | PackageHelper.Apps.GetOriginalCollection()[appselected] = selectedapp;
100 | }
101 | ResetAppTilePage();
102 | }
103 | private void ResetAppTilePage()
104 | {
105 | Preview.IsHitTestVisible = false;
106 | SaveChanges.IsHitTestVisible = false;
107 | TileLogoColor.IsHitTestVisible = false;
108 | TileTextColor.IsHitTestVisible = false;
109 | TileBackColor.IsHitTestVisible = false;
110 | TileBackOpacity.IsHitTestVisible = false;
111 | LogoOpacity.IsHitTestVisible = false;
112 | TileTextOpacity.IsHitTestVisible = false;
113 | TestApps.Items.Clear();
114 | }
115 |
116 | private void Page_Loaded(object sender, RoutedEventArgs e)
117 | {
118 | selectedapp = PackageHelper.Apps.GetOriginalCollection().OfType().FirstOrDefault();
119 | }
120 |
121 | private void Appslist_SelectionChanged(object sender, SelectionChangedEventArgs e)
122 | {
123 | if (Appslist.SelectedIndex > -1)
124 | {
125 | selectedapp = (FinalTiles)Appslist.SelectedItem;
126 | }
127 | }
128 |
129 | private void AppSettings_Toggled(object sender, RoutedEventArgs e)
130 | {
131 | allapps = ((ToggleSwitch)sender).IsOn;
132 | Appslist.Visibility = (((ToggleSwitch)sender).IsOn==true)?Visibility.Collapsed:Visibility.Visible;
133 | }
134 | }
135 | }
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppsListPage.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/AppsListPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 |
7 | using Windows.Foundation;
8 | using Windows.Foundation.Collections;
9 | using Windows.UI.Xaml;
10 | using Windows.UI.Xaml.Controls;
11 | using Windows.UI.Xaml.Controls.Primitives;
12 | using Windows.UI.Xaml.Data;
13 | using Windows.UI.Xaml.Input;
14 | using Windows.UI.Xaml.Media;
15 | using Windows.UI.Xaml.Navigation;
16 |
17 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
18 |
19 | namespace appLauncher.Core.Pages
20 | {
21 | ///
22 | /// An empty page that can be used on its own or navigated to within a Frame.
23 | ///
24 | public sealed partial class AppsListPage : Page
25 | {
26 | public AppsListPage()
27 | {
28 | this.InitializeComponent();
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/ContentDialog1.xaml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/ContentDialog1.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 |
7 | using Windows.Foundation;
8 | using Windows.Foundation.Collections;
9 | using Windows.UI.Xaml;
10 | using Windows.UI.Xaml.Controls;
11 | using Windows.UI.Xaml.Controls.Primitives;
12 | using Windows.UI.Xaml.Data;
13 | using Windows.UI.Xaml.Input;
14 | using Windows.UI.Xaml.Media;
15 | using Windows.UI.Xaml.Navigation;
16 |
17 | // The Content Dialog item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
18 |
19 | namespace appLauncher.Core.Pages
20 | {
21 | public sealed partial class ContentDialog1 : ContentDialog
22 | {
23 | public ContentDialog1()
24 | {
25 | this.InitializeComponent();
26 | }
27 |
28 | private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
29 | {
30 | }
31 |
32 | private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
33 | {
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/CreateFolders.xaml:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 |
18 |
19 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/CreateFolders.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Model;
3 |
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Linq;
7 |
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Input;
11 |
12 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
13 |
14 | namespace appLauncher.Core.Pages
15 | {
16 | ///
17 | /// An empty page that can be used on its own or navigated to within a Frame.
18 | ///
19 | public sealed partial class CreateFolders : Page
20 | {
21 | private AppFolder _createdFolder = new AppFolder();
22 | private List tiles = new List();
23 | private List folders = new List();
24 | public CreateFolders()
25 | {
26 | this.InitializeComponent();
27 | }
28 |
29 | private async void Page_Loaded(object sender, RoutedEventArgs e)
30 | {
31 | var dialog = new FolderNamePage();
32 | var result = await dialog.ShowAsync();
33 | if (result == ContentDialogResult.Primary)
34 | {
35 | _createdFolder.Name = dialog.FolderName;
36 | }
37 | folders = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
38 | tiles = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
39 | }
40 |
41 | private void AllTiles_SelectionChanged(object sender, SelectionChangedEventArgs e)
42 | {
43 | this.FindName("addApp");
44 | this.UnloadObject(removeApp);
45 | }
46 |
47 | private void AppsinFolders_SelectionChanged(object sender, SelectionChangedEventArgs e)
48 | {
49 | this.FindName("removeApp");
50 | this.UnloadObject(addApp);
51 | }
52 |
53 | private void addApp_Tapped(object sender, TappedRoutedEventArgs e)
54 | {
55 | FinalTiles app = (FinalTiles)AllTiles.SelectedItem;
56 | _createdFolder.FolderApps.Add((FinalTiles)AllTiles.SelectedItem);
57 | tiles.Remove((FinalTiles)AllTiles.SelectedItem);
58 | AppsinFolders.ItemsSource = _createdFolder.FolderApps;
59 | this.UnloadObject(addApp);
60 | //Bindings.Update();
61 |
62 | }
63 |
64 | private void removeApp_Tapped(object sender, TappedRoutedEventArgs e)
65 | {
66 | FinalTiles tile = (FinalTiles)AppsinFolders.SelectedItem;
67 | _createdFolder.FolderApps.Remove(tile);
68 | tiles.Add(tile);
69 | this.UnloadObject(removeApp);
70 | //Bindings.Update();
71 |
72 | }
73 |
74 | private void SaveButton_Tapped(object sender, TappedRoutedEventArgs e)
75 | {
76 |
77 | }
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/EditApp.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
16 |
23 |
24 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
63 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
92 |
93 |
94 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
116 |
117 |
118 |
119 |
120 |
121 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/EditApp.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Model;
3 |
4 | using Microsoft.Toolkit.Uwp.Helpers;
5 |
6 | using System;
7 | using System.Collections.Generic;
8 | using System.Linq;
9 |
10 | using Windows.UI;
11 | using Windows.UI.Xaml;
12 | using Windows.UI.Xaml.Controls;
13 | using Windows.UI.Xaml.Navigation;
14 |
15 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
16 |
17 | namespace appLauncher.Core.Pages
18 | {
19 | ///
20 | /// An empty page that can be used on its own or navigated to within a Frame.
21 | ///
22 | public sealed partial class EditApp : Page
23 | {
24 | private FinalTiles _tile;
25 | private ColorComboItem _color;
26 | private Color _logoColor;
27 | private Color _backColor;
28 | private Color _textColor;
29 | private int _tileOpacity = 0;
30 | public EditApp()
31 | {
32 | this.InitializeComponent();
33 | }
34 | protected override void OnNavigatedTo(NavigationEventArgs e)
35 | {
36 | _tile = e.Parameter as FinalTiles;
37 | }
38 |
39 | private void Page_Loaded(object sender, RoutedEventArgs e)
40 | {
41 | TestApps.Items.Add(_tile);
42 | _color = SettingsHelper.MatchColor(_tile.BackColor);
43 | TileBackOpacity.Value = ReturnOpacity((int)_tile.BackColor.A);
44 | List a = TileBackColor.Items.Cast().ToList();
45 | TileBackColor.SelectedIndex = a.FindIndex(x => x.ColorName == _color.ColorName);
46 | _color = SettingsHelper.MatchColor(_tile.TextColor);
47 | TileTextOpacity.Value = ReturnOpacity((int)_tile.TextColor.A);
48 | List b = TileTextColor.Items.Cast().ToList();
49 | TileTextColor.SelectedIndex = b.FindIndex(x => x.ColorName == _color.ColorName);
50 | _color = SettingsHelper.MatchColor(_tile.LogoColor);
51 | LogoOpacity.Value = ReturnOpacity((int)_tile.LogoColor.A);
52 | List d = TileLogoColor.Items.Cast().ToList();
53 | TileLogoColor.SelectedIndex = d.FindIndex(x => x.ColorName == _color.ColorName);
54 | }
55 |
56 | private void TileBackColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
57 | {
58 | _tile.BackColor = (((ColorComboItem)((ComboBox)sender).SelectedItem).ColorName).ToColor();
59 | Preview_Tapped();
60 | }
61 |
62 | private void TileLogoColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
63 | {
64 | _tile.LogoColor = (((ColorComboItem)((ComboBox)sender).SelectedItem).ColorName).ToColor();
65 | Preview_Tapped();
66 | }
67 |
68 | private void TileTextColor_SelectionChanged(object sender, SelectionChangedEventArgs e)
69 | {
70 | _tile.TextColor = (((ColorComboItem)((ComboBox)sender).SelectedItem).ColorName).ToColor();
71 | Preview_Tapped();
72 |
73 | }
74 |
75 | private void LogoOpacity_ValueChanged(object sender, Windows.UI.Xaml.Controls.Primitives.RangeBaseValueChangedEventArgs e)
76 | {
77 | byte opacity = Convert.ToByte(((double)e.NewValue / 10) * 255);
78 | _tile.LogoColor = Color.FromArgb(opacity, _tile.LogoColor.R, _tile.LogoColor.G, _tile.LogoColor.B);
79 | Preview_Tapped();
80 | }
81 |
82 | private void TileBackOpacity_ValueChanged(object sender, Windows.UI.Xaml.Controls.Primitives.RangeBaseValueChangedEventArgs e)
83 | {
84 | byte opacity = Convert.ToByte(((double)e.NewValue / 10) * 255);
85 | _tile.BackColor = Color.FromArgb(opacity, _tile.BackColor.R, _tile.BackColor.G, _tile.BackColor.B);
86 | Preview_Tapped();
87 | }
88 |
89 | private void TileTextOpacity_ValueChanged(object sender, Windows.UI.Xaml.Controls.Primitives.RangeBaseValueChangedEventArgs e)
90 | {
91 | byte opacity = Convert.ToByte(((double)e.NewValue / 10) * 255);
92 | _tile.TextColor = Color.FromArgb(opacity, _tile.TextColor.R, _tile.TextColor.G, _tile.TextColor.B);
93 | Preview_Tapped();
94 | }
95 |
96 | private void Preview_Tapped()
97 | {
98 | TestApps.Items.Clear();
99 | TestApps.Items.Add(_tile);
100 | }
101 |
102 | private void SaveChanges_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
103 | {
104 | PackageHelper.Apps.UpdateApp(_tile);
105 | }
106 | private int ReturnOpacity(int opacity)
107 | {
108 | return (opacity / 255) * 10;
109 | }
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/EditFolder.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
15 |
16 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/EditFolder.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Extensions;
2 | using appLauncher.Core.Helpers;
3 | using appLauncher.Core.Interfaces;
4 | using appLauncher.Core.Model;
5 |
6 | using System.Collections.Generic;
7 | using System.Linq;
8 |
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Navigation;
11 |
12 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
13 |
14 | namespace appLauncher.Core.Pages
15 | {
16 | ///
17 | /// An empty page that can be used on its own or navigated to within a Frame.
18 | ///
19 | public sealed partial class EditFolder : Page
20 | {
21 | private AppFolder _createEditFolder;
22 | private List _tiles = new List();
23 | private FinalTiles _selectedApp;
24 |
25 | public EditFolder()
26 | {
27 | this.InitializeComponent();
28 | }
29 | protected override void OnNavigatedTo(NavigationEventArgs e)
30 | {
31 | _createEditFolder = e.Parameter as AppFolder;
32 | _tiles = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
33 | titleTextBlock.Text = (PackageHelper.Apps.GetOriginalCollection().OfType().Any(x => x.Name == _createEditFolder.Name)) ? $"Edit \"{_createEditFolder.Name}\" Folder" : $"Create \"{_createEditFolder.Name}\" Folder";
34 |
35 | }
36 |
37 | private void AppsinFolders_SelectionChanged(object sender, SelectionChangedEventArgs e)
38 | {
39 | this.UnloadObject(addApp);
40 | this.FindName("removeApp");
41 | _selectedApp = (FinalTiles)AppsinFolders.SelectedItem;
42 | }
43 |
44 | private void SaveButton_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
45 | {
46 | var folders = PackageHelper.Apps.OfType().ToList();
47 | var apps = PackageHelper.Apps.OfType().ToList();
48 | List combinedlist = new List();
49 | folders.Add(_createEditFolder);
50 | apps.Clear();
51 | apps.AddRange(_tiles);
52 | combinedlist.AddRange(folders);
53 | combinedlist.AddRange(apps);
54 | PackageHelper.Apps = new AppPaginationObservableCollection(combinedlist.OrderBy(x => x.Name));
55 |
56 | }
57 |
58 | private void AllTiles_SelectionChanged(object sender, SelectionChangedEventArgs e)
59 | {
60 | this.FindName("addApp");
61 | this.UnloadObject(removeApp);
62 | _selectedApp = (FinalTiles)AllTiles.SelectedItem;
63 | }
64 |
65 | private void removeApp_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
66 | {
67 | this.UnloadObject(addApp);
68 | _selectedApp = (FinalTiles)AppsinFolders.SelectedItem;
69 | _createEditFolder.FolderApps.Remove(_selectedApp);
70 | if (_createEditFolder.FolderApps.Count() <= 0)
71 | {
72 | this.UnloadObject(AppsinFolders);
73 | this.UnloadObject(InFolder);
74 | }
75 | _tiles.Add(_selectedApp);
76 | Bindings.Update();
77 | }
78 |
79 | private void addApp_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
80 | {
81 | _createEditFolder.FolderApps.Add(_selectedApp);
82 | this.FindName("AppsinFolders");
83 | this.FindName("InFolder");
84 | _tiles.Remove(x => x.FullName == _selectedApp.FullName);
85 | AllTiles.ItemsSource = _tiles;
86 | Bindings.Update();
87 | }
88 |
89 | private void Page_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
90 | {
91 | if (_createEditFolder.FolderApps.Count() > 0)
92 | {
93 | this.FindName("InFolder");
94 | this.FindName("AppsinFolders");
95 | AppsinFolders.ItemsSource = _createEditFolder.FolderApps;
96 | }
97 | else
98 | {
99 | this.UnloadObject(InFolder);
100 | this.UnloadObject(AppsinFolders);
101 | }
102 | if (PackageHelper.Apps.GetOriginalCollection().OfType().Count() > 0)
103 | {
104 | this.FindName("AllTilesText");
105 | this.FindName("AllTiles");
106 | AllTiles.ItemsSource = _tiles;
107 | }
108 | else
109 | {
110 | this.UnloadObject(AllTiles);
111 | this.UnloadObject(AllTilesText);
112 | }
113 | }
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/FolderInfo.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/FolderInfo.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Model;
2 |
3 | using Windows.UI.Xaml.Controls;
4 | using Windows.UI.Xaml.Navigation;
5 |
6 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
7 |
8 | namespace appLauncher.Core.Pages
9 | {
10 | ///
11 | /// An empty page that can be used on its own or navigated to within a Frame.
12 | ///
13 | public sealed partial class FolderInfo : Page
14 | {
15 | public FolderInfo()
16 | {
17 | this.InitializeComponent();
18 | }
19 | private AppFolder _folder;
20 |
21 | protected override void OnNavigatedTo(NavigationEventArgs e)
22 | {
23 | _folder = e.Content as AppFolder;
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/FolderNamePage.xaml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/FolderNamePage.xaml.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI.Xaml.Controls;
2 |
3 | // The Content Dialog item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
4 |
5 | namespace appLauncher.Core.Pages
6 | {
7 | public sealed partial class FolderNamePage : ContentDialog
8 | {
9 | public FolderNamePage()
10 | {
11 | this.InitializeComponent();
12 |
13 | }
14 | public string FolderName { get; set; }
15 |
16 | private void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
17 | {
18 | FolderName = SetFolderName.Text;
19 | }
20 |
21 | private void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)
22 | {
23 | this.Hide();
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/FolderView.xaml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
19 |
21 |
22 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/FolderView.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Model;
3 |
4 | using System;
5 | using System.Collections.Generic;
6 | using System.Linq;
7 |
8 | using Windows.System.Threading;
9 | using Windows.UI.Xaml;
10 | using Windows.UI.Xaml.Controls;
11 | using Windows.UI.Xaml.Input;
12 | using Windows.UI.Xaml.Navigation;
13 |
14 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
15 |
16 | namespace appLauncher.Core.Pages
17 | {
18 | ///
19 | /// An empty page that can be used on its own or navigated to within a Frame.
20 | ///
21 | public sealed partial class FolderView : Page
22 | {
23 | private AppFolder displayfolder;
24 | private ThreadPoolTimer threadPoolTimer;
25 | private bool isFirstRun = true;
26 |
27 | public FolderView()
28 | {
29 | try
30 | {
31 |
32 | this.InitializeComponent();
33 |
34 | }
35 | catch (Exception es)
36 | {
37 |
38 | }
39 | }
40 |
41 | private async void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
42 | {
43 | FinalTiles selecteditem = (FinalTiles)AppsinFolders.SelectedItem;
44 | await selecteditem.Launch();
45 | }
46 | protected override void OnNavigatedTo(NavigationEventArgs e)
47 | {
48 | displayfolder = (AppFolder)e.Parameter;
49 | }
50 |
51 |
52 |
53 | private void Page_Loaded(object sender, RoutedEventArgs e)
54 | {
55 |
56 | if (displayfolder.Name == "Favorites")
57 | {
58 | displayfolder.FolderApps.Clear();
59 | List folders = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
60 | List tiles = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
61 | foreach (var item in folders)
62 | {
63 | tiles.AddRange(item.FolderApps);
64 | }
65 | var nonorderedtiles = tiles.Where(x => x.Favorite == true).ToList();
66 | for (int i = 0; i < nonorderedtiles.Count; i++)
67 | {
68 | nonorderedtiles[i].FolderListPos = i;
69 | }
70 | displayfolder.FolderApps = new List(nonorderedtiles.OrderBy(x => x.FolderListPos).ToList());
71 | }
72 | if (displayfolder.Name == "Most Used")
73 | {
74 | // displayfolder.FolderApps.Clear();
75 | List tiles = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
76 | List folders = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
77 | foreach (var item in folders)
78 | {
79 | tiles.AddRange(item.FolderApps);
80 | }
81 | var nonorderedlist = tiles.Where(x => x.LaunchedCount > 5).ToList();
82 | for (int i = 0; i < nonorderedlist.Count; i++)
83 | {
84 | nonorderedlist[i].FolderListPos = i;
85 | }
86 | displayfolder.FolderApps = new List(nonorderedlist.OrderBy(x => x.FolderListPos).ToList());
87 |
88 | }
89 | if (displayfolder.FolderApps.Count == 0)
90 | {
91 | PackageHelper.Apps.Removefolder(displayfolder);
92 | FirstPage.showMessage.Show($"Removing empty folder {displayfolder.Name}", 1000);
93 | FirstPage.navFrame.Navigate(typeof(MainPage));
94 | }
95 | Bindings.Update();
96 |
97 | }
98 |
99 |
100 |
101 | private void SearchField_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)
102 | {
103 | if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)
104 | {
105 | var auto = sender;
106 | if (PackageHelper.Search.Count > 0)
107 | {
108 | sender.ItemsSource = displayfolder.FolderApps.Where(p => p.Name.ToLower().Contains(((AutoSuggestBox)sender).Text.ToLower())).ToList();
109 |
110 | }
111 | }
112 | }
113 |
114 | private void SearchField_SuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)
115 | {
116 | FinalTiles ap = (FinalTiles)args.SelectedItem;
117 | PackageHelper.LaunchApp(ap.FullName).ConfigureAwait(false);
118 |
119 | sender.ItemsSource = displayfolder.FolderApps;
120 | sender.Text = String.Empty;
121 | }
122 |
123 | private void Grid_RightTapped(object sender, RightTappedRoutedEventArgs e)
124 | {
125 | Grid grids = (Grid)sender;
126 | Object item = (e.OriginalSource as FrameworkElement)?.DataContext;
127 | if (item != null & grids != null)
128 | {
129 | if (item.GetType() == typeof(FinalTiles))
130 | {
131 | Frame.Navigate(typeof(AppInformation), (FinalTiles)item);
132 | }
133 | }
134 | }
135 | }
136 | }
137 |
138 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/InitialPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 |
7 | using Windows.Foundation;
8 | using Windows.Foundation.Collections;
9 | using Windows.UI.Xaml;
10 | using Windows.UI.Xaml.Controls;
11 | using Windows.UI.Xaml.Controls.Primitives;
12 | using Windows.UI.Xaml.Data;
13 | using Windows.UI.Xaml.Input;
14 | using Windows.UI.Xaml.Media;
15 | using Windows.UI.Xaml.Navigation;
16 |
17 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
18 |
19 | namespace appLauncher.Core.Pages
20 | {
21 | ///
22 | /// An empty page that can be used on its own or navigated to within a Frame.
23 | ///
24 | public sealed partial class InitialPage : Page
25 | {
26 | public InitialPage()
27 | {
28 | this.InitializeComponent();
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/InstallApps.xaml:
--------------------------------------------------------------------------------
1 |
10 |
11 |
12 |
13 |
15 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/InstallApps.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 |
3 | using System;
4 | using System.Collections.Generic;
5 | using System.Security.Cryptography.X509Certificates;
6 | using System.Threading.Tasks;
7 |
8 | using Windows.Management.Deployment;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Input;
11 |
12 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
13 |
14 | namespace appLauncher.Core.Pages
15 | {
16 | ///
17 | /// An empty page that can be used on its own or navigated to within a Frame.
18 | ///
19 | public sealed partial class InstallApps : Page
20 | {
21 | private static PackageManager pkgMgr = new PackageManager();
22 | private string results;
23 | public InstallApps()
24 | {
25 | this.InitializeComponent();
26 | }
27 | private async void Deps_Tapped(object sender, TappedRoutedEventArgs e)
28 | {
29 |
30 | results = await InstallorRemoveApplication.LoadDependancies();
31 | if (results != "Success")
32 | {
33 | DepsInstalled.IsChecked = false;
34 | }
35 | DepsInstalled.IsChecked = true;
36 | DepsInstalled.Content = "Deps Installed";
37 | }
38 |
39 | private async void Certs_Tapped(object sender, TappedRoutedEventArgs e)
40 | {
41 | results = await InstallorRemoveApplication.InstallCertificate();
42 | if (results != "Success")
43 | {
44 | CertisInstalled.IsChecked = false;
45 | }
46 | CertisInstalled.IsChecked = true;
47 | CertisInstalled.Content = "Cert is installed";
48 | }
49 | private async void Install_Tapped(object sender, TappedRoutedEventArgs e)
50 | {
51 | results = await InstallorRemoveApplication.InstallCertificate();
52 | if (results == "Certficate Installed")
53 | {
54 | CertisInstalled.IsChecked = true;
55 | }
56 | results = await InstallorRemoveApplication.LoadDependancies();
57 | if (results == "Success")
58 | {
59 | DepsInstalled.IsChecked = true;
60 |
61 | }
62 | results = await InstallorRemoveApplication.InstallApplication();
63 | if (results != "Success")
64 | {
65 | ErrororSuccess.Text = results;
66 | InstallInfo.Text = "Retry to install application";
67 | CertisInstalled.IsChecked = false;
68 | DepsInstalled.IsChecked = false;
69 | AppisInstalled.IsChecked = false;
70 | }
71 | else
72 | {
73 | AppisInstalled.IsChecked = true;
74 | ErrororSuccess.Text = results;
75 | await Task.Delay(1500);
76 | CertisInstalled.IsChecked = false;
77 | DepsInstalled.IsChecked = false;
78 | AppisInstalled.IsChecked = false;
79 | InstallInfo.Text = "Install another application?";
80 | }
81 | }
82 |
83 |
84 |
85 |
86 |
87 | public static async Task InstallCertificate()
88 | {
89 | try
90 | {
91 | var picker = new Windows.Storage.Pickers.FileOpenPicker();
92 | picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
93 | picker.FileTypeFilter.Add(".cer");
94 | var files = await picker.PickSingleFileAsync();
95 | X509Certificate2 cert = new X509Certificate2(files.Path);
96 | using (X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.CurrentUser))
97 | {
98 | store.Open(OpenFlags.MaxAllowed);
99 | store.Add(cert);
100 | }
101 | return "Certficate Installed";
102 | }
103 | catch (Exception ex)
104 | {
105 | return ex.Message;
106 | }
107 | }
108 | //Idea and code from https://github.com/colinkiama/UWP-Package-Installer
109 | public static async Task LoadDependancies()
110 | {
111 | try
112 | {
113 | var picker = new Windows.Storage.Pickers.FileOpenPicker();
114 | List depuris = new List();
115 | picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
116 | picker.FileTypeFilter.Add(".appx");
117 | picker.FileTypeFilter.Add(".appxbundle");
118 |
119 | var files = await picker.PickMultipleFilesAsync();
120 | if (files != null)
121 | {
122 |
123 | foreach (var dependency in files)
124 | {
125 | await pkgMgr.AddPackageAsync(new Uri(dependency.Path), null, DeploymentOptions.None);
126 | }
127 | return "Success";
128 | }
129 | }
130 | catch (Exception ex)
131 | {
132 | return ex.Message;
133 | }
134 | return string.Empty;
135 | }
136 | //Idea and code from https://github.com/colinkiama/UWP-Package-Installer
137 | public static async Task InstallApplication()
138 | {
139 | try
140 | {
141 | var picker = new Windows.Storage.Pickers.FileOpenPicker();
142 | List depuris = new List();
143 | picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.List;
144 | picker.FileTypeFilter.Add(".appx");
145 | picker.FileTypeFilter.Add(".appxbundle");
146 |
147 | var files = await picker.PickSingleFileAsync();
148 | if (files != null)
149 | {
150 | await pkgMgr.AddPackageAsync(new Uri(files.Path), null, DeploymentOptions.None);
151 | }
152 | return "Success";
153 | }
154 | catch (Exception ex)
155 | {
156 | return $"Failed to install {ex.Message}";
157 | }
158 |
159 | }
160 |
161 |
162 | private void Install_Tapped_1(object sender, TappedRoutedEventArgs e)
163 | {
164 |
165 | }
166 | }
167 | }
168 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
65 |
66 |
68 |
69 |
70 |
71 |
72 |
73 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/RemoveApps.xaml:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/RemoveApps.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Interfaces;
3 | using appLauncher.Core.Model;
4 |
5 | using System;
6 | using System.Collections.Generic;
7 | using System.Linq;
8 |
9 | using Windows.Management.Deployment;
10 | using Windows.UI.Xaml;
11 | using Windows.UI.Xaml.Controls;
12 | using Windows.UI.Xaml.Input;
13 |
14 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
15 |
16 | namespace appLauncher.Core.Pages
17 | {
18 |
19 | ///
20 | /// An empty page that can be used on its own or navigated to within a Frame.
21 | ///
22 | public sealed partial class RemoveApps : Page
23 | {
24 | private PackageManager pm = new PackageManager();
25 | private List finalTiles = new List();
26 | private List appFolders = new List();
27 | private List displaytiles = new List();
28 | public RemoveApps()
29 | {
30 | this.InitializeComponent();
31 | finalTiles = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
32 | appFolders = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
33 | }
34 |
35 | private void Page_Loaded(object sender, RoutedEventArgs e)
36 | {
37 | displaytiles.AddRange(finalTiles);
38 | foreach (var item in appFolders)
39 | {
40 | displaytiles.AddRange(item.FolderApps.OfType().ToList());
41 | }
42 | Apps.ItemsSource = displaytiles;
43 | }
44 |
45 | private async void AppBarButton_Tapped(object sender, TappedRoutedEventArgs e)
46 | {
47 | List a = Apps.SelectedItems.Cast().ToList();
48 | foreach (FinalTiles tile in a)
49 | {
50 | if (finalTiles.Contains(tile))
51 | {
52 | finalTiles.Remove(tile);
53 | }
54 | foreach (var item in appFolders)
55 | {
56 | if (item.FolderApps.Contains(tile))
57 | {
58 | item.FolderApps.Remove(tile);
59 | }
60 | }
61 | await pm.RemovePackageAsync(tile.FullName);
62 | List recombinedlist = new List();
63 | recombinedlist.AddRange(finalTiles);
64 | recombinedlist.AddRange(appFolders);
65 | PackageHelper.Apps = new AppPaginationObservableCollection(recombinedlist);
66 | PackageHelper.Apps.RecalculateThePageItems();
67 | }
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/RemoveFolder.xaml:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
17 |
18 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/appLauncher/Core/Pages/RemoveFolder.xaml.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Helpers;
2 | using appLauncher.Core.Interfaces;
3 | using appLauncher.Core.Model;
4 |
5 | using System.Collections.Generic;
6 | using System.Linq;
7 |
8 | using Windows.UI.Xaml.Controls;
9 | using Windows.UI.Xaml.Input;
10 | using Windows.UI.Xaml.Navigation;
11 |
12 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
13 |
14 | namespace appLauncher.Core.Pages
15 | {
16 | ///
17 | /// An empty page that can be used on its own or navigated to within a Frame.
18 | ///
19 | public sealed partial class RemoveFolder : Page
20 | {
21 | private List allFolders;
22 | private List allTiles;
23 | private AppFolder selectedFolder;
24 | public RemoveFolder()
25 | {
26 | this.InitializeComponent();
27 |
28 | allFolders = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
29 | allTiles = PackageHelper.Apps.GetOriginalCollection().OfType().ToList();
30 |
31 | }
32 |
33 | private void Page_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
34 | {
35 | if (allFolders != null)
36 | {
37 | Folderslist.ItemsSource = allFolders;
38 | if (selectedFolder != null)
39 | {
40 | Folderslist.SelectedItem = selectedFolder;
41 | }
42 | }
43 |
44 | //AllTiles.ItemsSource = allTiles;
45 | //Folderslist.ItemsSource = allFolders;
46 | //restoreFolder = selectedFolder;
47 |
48 | }
49 |
50 |
51 |
52 |
53 |
54 | private void AppBarButton_Tapped(object sender, TappedRoutedEventArgs e)
55 | {
56 | AppFolder removeFolder = (AppFolder)Folderslist.SelectedItem;
57 | allTiles.AddRange(removeFolder.FolderApps);
58 | allFolders.Remove(removeFolder);
59 | List recombine = new List();
60 | recombine.AddRange(allFolders);
61 | recombine.AddRange(allTiles);
62 | PackageHelper.Apps = new AppPaginationObservableCollection(recombine.OrderBy(x => x.ListPos));
63 | PackageHelper.Apps.RecalculateThePageItems();
64 | Bindings.Update();
65 | }
66 | protected override void OnNavigatedTo(NavigationEventArgs e)
67 | {
68 | if (e.Parameter != null)
69 | {
70 | selectedFolder = (AppFolder)e.Parameter;
71 | }
72 | }
73 |
74 |
75 |
76 |
77 |
78 |
79 | private void Folderslist_SelectionChanged(object sender, SelectionChangedEventArgs e)
80 | {
81 | if (Folderslist.SelectedIndex < 0)
82 | {
83 | return;
84 | }
85 | this.FindName("AppsinFolder");
86 | AppFolder selfolder = allFolders.First(x => x.Name == ((AppFolder)Folderslist.SelectedItem).Name);
87 | selectedFolder = selfolder;
88 |
89 | AppsinFolder.ItemsSource = selfolder.FolderApps;
90 | }
91 |
92 |
93 | ////private async void SaveEdits_Tapped(object sender, TappedRoutedEventArgs e)
94 | ////{
95 | //// if (!IsEditing)
96 | //// {
97 | //// selectedFolder = restoreFolder;
98 | //// allFolders[allFolders.IndexOf(allFolders.First(x => x.Name == restoreFolder.Name))] = restoreFolder;
99 |
100 | //// }
101 | //// else
102 | //// {
103 | //// var intsel = allFolders.IndexOf(allFolders.First(x => x.Name == restoreFolder.Name));
104 | //// selectedFolder.Name = FolderName.Text;
105 | //// allFolders[intsel] = selectedFolder;
106 | //// }
107 | //// List recombinedlist = new List();
108 | //// recombinedlist.AddRange(allFolders);
109 | //// recombinedlist.AddRange(allTiles);
110 | //// this.UnloadObject(Edits);
111 | //// this.UnloadObject(SaveEdits);
112 | //// this.UnloadObject(CancelEdits);
113 |
114 | //// PackageHelper.Apps = new AppPaginationObservableCollection(recombinedlist.OrderBy(x => x.ListPos));
115 | //// Bindings.Update();
116 | ////}
117 |
118 |
119 |
120 |
121 |
122 |
123 | }
124 | }
125 |
--------------------------------------------------------------------------------
/appLauncher/Core/Serializers/ApporFolderSerializer.cs:
--------------------------------------------------------------------------------
1 | using appLauncher.Core.Interfaces;
2 | using appLauncher.Core.Model;
3 |
4 | using Newtonsoft.Json;
5 | using Newtonsoft.Json.Linq;
6 |
7 | using System;
8 |
9 | namespace appLauncher.Core.Serializers
10 | {
11 | public class ApporFolderConverter : JsonConverter
12 | {
13 | public override bool CanConvert(Type objectType)
14 | {
15 | return objectType == typeof(IApporFolder);
16 | }
17 |
18 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
19 | {
20 | // Read the type name from the JSON
21 | JObject jo = JObject.Load(reader);
22 | string typeName = jo["$type"].Value();
23 |
24 | // Create an instance of the appropriate class based on the type name
25 | IApporFolder animal = null;
26 | switch (typeName)
27 | {
28 | case "FinalTiles":
29 | animal = new FinalTiles();
30 | break;
31 | case "AppFolder":
32 | animal = new AppFolder();
33 | break;
34 | default:
35 | throw new JsonSerializationException("Unknown animal type: " + typeName);
36 | }
37 |
38 | // Populate the properties from the JSON
39 | serializer.Populate(jo.CreateReader(), animal);
40 |
41 | return animal;
42 | }
43 |
44 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
45 | {
46 | // Write the type name and the properties to the JSON
47 | JObject jo = new JObject();
48 | jo.Add("$type", value.GetType().Name);
49 | jo.Add("Name", ((IApporFolder)value).Name);
50 | jo.WriteTo(writer);
51 | }
52 | public override bool CanWrite => true;
53 | public override bool CanRead => true;
54 | }
55 |
56 | }
57 |
--------------------------------------------------------------------------------
/appLauncher/Core/ViewModels/AppsViewViewModel.cs:
--------------------------------------------------------------------------------
1 | using Windows.UI.Xaml;
2 | using Windows.UI.Xaml.Controls;
3 | using Windows.UI.Xaml.Input;
4 | using Windows.UI.Xaml.Shapes;
5 |
6 | namespace appLauncher.Core.ViewModels
7 | {
8 | public class AppsViewViewModel
9 | {
10 | private int maxRows;
11 | private int maxColumns;
12 | bool firstrun { get; set; } = true;
13 | public int Maxicons { get; private set; }
14 | DispatcherTimer sizeChangeTimer = new DispatcherTimer();
15 | int currentTimeLeft = 0;
16 | const int updateTimerLength = 100; // milliseconds;
17 | private Button oldAnimatedButton;
18 | private Button buttontoanimate;
19 | private Ellipse ellipseToAnimate;
20 | private int previousSelectedIndex = 0;
21 |
22 | public void dragEvent(object sender, DragEventArgs e)
23 | {
24 |
25 | }
26 | public void dragDrop(object sender, DragEventArgs e)
27 | {
28 |
29 | }
30 | public void dragStarting(object sender, DragStartingEventArgs e)
31 | {
32 |
33 | }
34 | public void mouseWheel(object sender, PointerRoutedEventArgs e)
35 | {
36 |
37 | }
38 | public void Btn_Tapped(object sender, TappedRoutedEventArgs e)
39 | {
40 |
41 | }
42 |
43 |
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/appLauncher/Core/Views/AppsView.xaml:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/appLauncher/Core/Views/AppsView.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Linq;
5 | using System.Runtime.InteropServices.WindowsRuntime;
6 |
7 | using Windows.Foundation;
8 | using Windows.Foundation.Collections;
9 | using Windows.UI.Xaml;
10 | using Windows.UI.Xaml.Controls;
11 | using Windows.UI.Xaml.Controls.Primitives;
12 | using Windows.UI.Xaml.Data;
13 | using Windows.UI.Xaml.Input;
14 | using Windows.UI.Xaml.Media;
15 | using Windows.UI.Xaml.Navigation;
16 |
17 | // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238
18 |
19 | namespace appLauncher.Core.Views
20 | {
21 | ///
22 | /// An empty page that can be used on its own or navigated to within a Frame.
23 | ///
24 | public sealed partial class AppsView : Page
25 | {
26 | public AppsView()
27 | {
28 | this.InitializeComponent();
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/appLauncher/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | appLauncher
7 | morris.isaac
8 | Core\Assets\StoreLogo.png
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/appLauncher/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("appLauncher")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("appLauncher")]
13 | [assembly: AssemblyCopyright("Copyright © 2017")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Version information for an assembly consists of the following four values:
18 | //
19 | // Major Version
20 | // Minor Version
21 | // Build Number
22 | // Revision
23 | //
24 | // You can specify all the values or you can default the Build and Revision Numbers
25 | // by using the '*' as shown below:
26 | // [assembly: AssemblyVersion("1.0.*")]
27 | [assembly: AssemblyVersion("1.0.0.0")]
28 | [assembly: AssemblyFileVersion("1.0.0.0")]
29 | [assembly: ComVisible(false)]
--------------------------------------------------------------------------------
/appLauncher/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/appLauncher/appLauncher.ruleset:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/appLauncherDemo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncherDemo.gif
--------------------------------------------------------------------------------
/appLauncherGIFSupport.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/IsaacMorris1980/appLauncher/a69645018b086e1ee304d8558ccc2db74000919d/appLauncherGIFSupport.gif
--------------------------------------------------------------------------------