├── .gitignore
├── CODE_OF_CONDUCT.md
├── CodeCapture.sln
├── CodeCapture
├── CodeCapture.Android
│ ├── Assets
│ │ └── AboutAssets.txt
│ ├── CodeCapture.Android.csproj
│ ├── CodeCapture.Android.csproj.user
│ ├── MainActivity.cs
│ ├── Properties
│ │ ├── AndroidManifest.xml
│ │ └── AssemblyInfo.cs
│ └── Resources
│ │ ├── AboutResources.txt
│ │ ├── Resource.designer.cs
│ │ ├── layout
│ │ ├── Tabbar.xml
│ │ └── Toolbar.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── icon.xml
│ │ └── icon_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ │ ├── mipmap-mdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ │ ├── mipmap-xhdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ │ ├── mipmap-xxhdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── icon.png
│ │ └── launcher_foreground.png
│ │ ├── values
│ │ ├── colors.xml
│ │ └── styles.xml
│ │ └── xml
│ │ └── file_paths.xml
├── CodeCapture.UWP
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Assets
│ │ ├── LargeTile.scale-100.png
│ │ ├── LargeTile.scale-200.png
│ │ ├── LargeTile.scale-400.png
│ │ ├── SmallTile.scale-100.png
│ │ ├── SmallTile.scale-200.png
│ │ ├── SmallTile.scale-400.png
│ │ ├── SplashScreen.scale-100.png
│ │ ├── SplashScreen.scale-200.png
│ │ ├── SplashScreen.scale-400.png
│ │ ├── Square150x150Logo.scale-100.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-48.png
│ │ ├── Square44x44Logo.scale-100.png
│ │ ├── Square44x44Logo.scale-200.png
│ │ ├── Square44x44Logo.scale-400.png
│ │ ├── Square44x44Logo.targetsize-16.png
│ │ ├── Square44x44Logo.targetsize-256.png
│ │ ├── Square44x44Logo.targetsize-48.png
│ │ ├── StoreLogo.backup.png
│ │ ├── StoreLogo.scale-100.png
│ │ ├── StoreLogo.scale-200.png
│ │ ├── StoreLogo.scale-400.png
│ │ ├── Wide310x150Logo.scale-100.png
│ │ ├── Wide310x150Logo.scale-200.png
│ │ ├── Wide310x150Logo.scale-400.png
│ │ └── logo.png
│ ├── CodeCapture.UWP.csproj
│ ├── MainPage.xaml
│ ├── MainPage.xaml.cs
│ ├── Package.appxmanifest
│ └── Properties
│ │ ├── AssemblyInfo.cs
│ │ └── Default.rd.xml
├── CodeCapture.iOS
│ ├── AppDelegate.cs
│ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── Icon1024.png
│ │ │ ├── Icon120.png
│ │ │ ├── Icon152.png
│ │ │ ├── Icon167.png
│ │ │ ├── Icon180.png
│ │ │ ├── Icon20.png
│ │ │ ├── Icon29.png
│ │ │ ├── Icon40.png
│ │ │ ├── Icon58.png
│ │ │ ├── Icon60.png
│ │ │ ├── Icon76.png
│ │ │ ├── Icon80.png
│ │ │ ├── Icon87.png
│ │ │ └── logo.png
│ ├── CodeCapture.iOS.csproj
│ ├── Entitlements.plist
│ ├── Info.plist
│ ├── Main.cs
│ ├── Properties
│ │ └── AssemblyInfo.cs
│ └── Resources
│ │ ├── Default-568h@2x.png
│ │ ├── Default-Portrait.png
│ │ ├── Default-Portrait@2x.png
│ │ ├── Default.png
│ │ ├── Default@2x.png
│ │ └── LaunchScreen.storyboard
└── CodeCapture
│ ├── AboutUs.xaml
│ ├── AboutUs.xaml.cs
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── AssemblyInfo.cs
│ ├── CodeCapture.csproj
│ ├── CompileCode.xaml
│ ├── CompileCode.xaml.cs
│ ├── ExtractText.xaml
│ ├── ExtractText.xaml.cs
│ ├── ImageCapture.xaml
│ ├── ImageCapture.xaml.cs
│ ├── LessonMenu.xaml
│ ├── LessonMenu.xaml.cs
│ ├── LessonView.xaml
│ ├── LessonView.xaml.cs
│ ├── MainPage.xaml
│ ├── MainPage.xaml.cs
│ ├── Models
│ ├── CompileModels
│ │ ├── Input.cs
│ │ └── Output.cs
│ ├── README.md
│ └── ReadModels
│ │ ├── AnalyzeResult.cs
│ │ ├── Line.cs
│ │ ├── ReadResult.cs
│ │ ├── Root.cs
│ │ └── Word.cs
│ ├── PracticeView.xaml
│ └── PracticeView.xaml.cs
├── LICENSE
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | .vs/
2 | CodeCapture/CodeCapture/bin
3 | CodeCapture/CodeCapture/obj
4 | CodeCapture/CodeCapture.Android/bin
5 | CodeCapture/CodeCapture.Android/obj
6 | CodeCapture/CodeCapture.iOS/bin
7 | CodeCapture/CodeCapture.iOS/obj
8 | CodeCapture/CodeCapture.UWP/bin
9 | CodeCapture/CodeCapture.UWP/obj
10 | CodeCapture/CodeCapture/Models/Secrets.cs
--------------------------------------------------------------------------------
/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
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, sex characteristics, gender identity and expression,
9 | level of experience, education, socio-economic status, nationality, personal
10 | appearance, race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at adityaoberai1@gmail.com. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72 |
73 | [homepage]: https://www.contributor-covenant.org
74 |
75 | For answers to common questions about this code of conduct, see
76 | https://www.contributor-covenant.org/faq
77 |
--------------------------------------------------------------------------------
/CodeCapture.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.30225.117
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCapture.UWP", "CodeCapture\CodeCapture.UWP\CodeCapture.UWP.csproj", "{FEE82C4F-EB80-4CC4-B175-49B849BC7436}"
7 | EndProject
8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCapture.Android", "CodeCapture\CodeCapture.Android\CodeCapture.Android.csproj", "{00C48694-D112-47BE-B11C-4DA84E38E4B7}"
9 | EndProject
10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCapture.iOS", "CodeCapture\CodeCapture.iOS\CodeCapture.iOS.csproj", "{8024EA52-0676-493C-ABA2-065B98BCECEA}"
11 | EndProject
12 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CodeCapture", "CodeCapture\CodeCapture\CodeCapture.csproj", "{66D0E395-D85D-447D-A6D1-47D677C1343A}"
13 | EndProject
14 | Global
15 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
16 | Debug|Any CPU = Debug|Any CPU
17 | Debug|ARM = Debug|ARM
18 | Debug|iPhone = Debug|iPhone
19 | Debug|iPhoneSimulator = Debug|iPhoneSimulator
20 | Debug|x64 = Debug|x64
21 | Debug|x86 = Debug|x86
22 | Release|Any CPU = Release|Any CPU
23 | Release|ARM = Release|ARM
24 | Release|iPhone = Release|iPhone
25 | Release|iPhoneSimulator = Release|iPhoneSimulator
26 | Release|x64 = Release|x64
27 | Release|x86 = Release|x86
28 | EndGlobalSection
29 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
30 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|Any CPU.ActiveCfg = Debug|x86
31 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|Any CPU.Build.0 = Debug|x86
32 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|Any CPU.Deploy.0 = Debug|x86
33 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|ARM.ActiveCfg = Debug|ARM
34 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|ARM.Build.0 = Debug|ARM
35 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|ARM.Deploy.0 = Debug|ARM
36 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|iPhone.ActiveCfg = Debug|x86
37 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|iPhone.Build.0 = Debug|x86
38 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|iPhone.Deploy.0 = Debug|x86
39 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
40 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|iPhoneSimulator.Build.0 = Debug|x86
41 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|iPhoneSimulator.Deploy.0 = Debug|x86
42 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|x64.ActiveCfg = Debug|x64
43 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|x64.Build.0 = Debug|x64
44 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|x64.Deploy.0 = Debug|x64
45 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|x86.ActiveCfg = Debug|x86
46 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|x86.Build.0 = Debug|x86
47 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Debug|x86.Deploy.0 = Debug|x86
48 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|Any CPU.ActiveCfg = Release|x86
49 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|Any CPU.Build.0 = Release|x86
50 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|Any CPU.Deploy.0 = Release|x86
51 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|ARM.ActiveCfg = Release|ARM
52 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|ARM.Build.0 = Release|ARM
53 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|ARM.Deploy.0 = Release|ARM
54 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|iPhone.ActiveCfg = Release|x86
55 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|iPhone.Build.0 = Release|x86
56 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|iPhone.Deploy.0 = Release|x86
57 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|iPhoneSimulator.ActiveCfg = Release|x86
58 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|iPhoneSimulator.Build.0 = Release|x86
59 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|iPhoneSimulator.Deploy.0 = Release|x86
60 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|x64.ActiveCfg = Release|x64
61 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|x64.Build.0 = Release|x64
62 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|x64.Deploy.0 = Release|x64
63 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|x86.ActiveCfg = Release|x86
64 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|x86.Build.0 = Release|x86
65 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}.Release|x86.Deploy.0 = Release|x86
66 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
67 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
68 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
69 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|ARM.ActiveCfg = Debug|Any CPU
70 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|ARM.Build.0 = Debug|Any CPU
71 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|ARM.Deploy.0 = Debug|Any CPU
72 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|iPhone.ActiveCfg = Debug|Any CPU
73 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|iPhone.Build.0 = Debug|Any CPU
74 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|iPhone.Deploy.0 = Debug|Any CPU
75 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
76 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
77 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
78 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|x64.ActiveCfg = Debug|Any CPU
79 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|x64.Build.0 = Debug|Any CPU
80 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|x64.Deploy.0 = Debug|Any CPU
81 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|x86.ActiveCfg = Debug|Any CPU
82 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|x86.Build.0 = Debug|Any CPU
83 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Debug|x86.Deploy.0 = Debug|Any CPU
84 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
85 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|Any CPU.Build.0 = Release|Any CPU
86 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|Any CPU.Deploy.0 = Release|Any CPU
87 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|ARM.ActiveCfg = Release|Any CPU
88 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|ARM.Build.0 = Release|Any CPU
89 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|ARM.Deploy.0 = Release|Any CPU
90 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|iPhone.ActiveCfg = Release|Any CPU
91 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|iPhone.Build.0 = Release|Any CPU
92 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|iPhone.Deploy.0 = Release|Any CPU
93 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
94 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
95 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
96 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|x64.ActiveCfg = Release|Any CPU
97 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|x64.Build.0 = Release|Any CPU
98 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|x64.Deploy.0 = Release|Any CPU
99 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|x86.ActiveCfg = Release|Any CPU
100 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|x86.Build.0 = Release|Any CPU
101 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}.Release|x86.Deploy.0 = Release|Any CPU
102 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|Any CPU.ActiveCfg = Debug|iPhone
103 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|Any CPU.Build.0 = Debug|iPhone
104 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|Any CPU.Deploy.0 = Debug|iPhone
105 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|ARM.ActiveCfg = Debug|iPhone
106 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|ARM.Build.0 = Debug|iPhone
107 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|ARM.Deploy.0 = Debug|iPhone
108 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|iPhone.ActiveCfg = Debug|iPhone
109 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|iPhone.Build.0 = Debug|iPhone
110 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|iPhone.Deploy.0 = Debug|iPhone
111 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
112 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
113 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator
114 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|x64.ActiveCfg = Debug|iPhone
115 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|x64.Build.0 = Debug|iPhone
116 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|x64.Deploy.0 = Debug|iPhone
117 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|x86.ActiveCfg = Debug|iPhone
118 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|x86.Build.0 = Debug|iPhone
119 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Debug|x86.Deploy.0 = Debug|iPhone
120 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|Any CPU.ActiveCfg = Release|iPhone
121 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|Any CPU.Build.0 = Release|iPhone
122 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|Any CPU.Deploy.0 = Release|iPhone
123 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|ARM.ActiveCfg = Release|iPhone
124 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|ARM.Build.0 = Release|iPhone
125 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|ARM.Deploy.0 = Release|iPhone
126 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|iPhone.ActiveCfg = Release|iPhone
127 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|iPhone.Build.0 = Release|iPhone
128 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|iPhone.Deploy.0 = Release|iPhone
129 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
130 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
131 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator
132 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|x64.ActiveCfg = Release|iPhone
133 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|x64.Build.0 = Release|iPhone
134 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|x64.Deploy.0 = Release|iPhone
135 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|x86.ActiveCfg = Release|iPhone
136 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|x86.Build.0 = Release|iPhone
137 | {8024EA52-0676-493C-ABA2-065B98BCECEA}.Release|x86.Deploy.0 = Release|iPhone
138 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
139 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|Any CPU.Build.0 = Debug|Any CPU
140 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
141 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|ARM.ActiveCfg = Debug|Any CPU
142 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|ARM.Build.0 = Debug|Any CPU
143 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|ARM.Deploy.0 = Debug|Any CPU
144 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|iPhone.ActiveCfg = Debug|Any CPU
145 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|iPhone.Build.0 = Debug|Any CPU
146 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|iPhone.Deploy.0 = Debug|Any CPU
147 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
148 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
149 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
150 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|x64.ActiveCfg = Debug|Any CPU
151 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|x64.Build.0 = Debug|Any CPU
152 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|x64.Deploy.0 = Debug|Any CPU
153 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|x86.ActiveCfg = Debug|Any CPU
154 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|x86.Build.0 = Debug|Any CPU
155 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Debug|x86.Deploy.0 = Debug|Any CPU
156 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|Any CPU.ActiveCfg = Release|Any CPU
157 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|Any CPU.Build.0 = Release|Any CPU
158 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|Any CPU.Deploy.0 = Release|Any CPU
159 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|ARM.ActiveCfg = Release|Any CPU
160 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|ARM.Build.0 = Release|Any CPU
161 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|ARM.Deploy.0 = Release|Any CPU
162 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|iPhone.ActiveCfg = Release|Any CPU
163 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|iPhone.Build.0 = Release|Any CPU
164 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|iPhone.Deploy.0 = Release|Any CPU
165 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
166 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
167 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
168 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|x64.ActiveCfg = Release|Any CPU
169 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|x64.Build.0 = Release|Any CPU
170 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|x64.Deploy.0 = Release|Any CPU
171 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|x86.ActiveCfg = Release|Any CPU
172 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|x86.Build.0 = Release|Any CPU
173 | {66D0E395-D85D-447D-A6D1-47D677C1343A}.Release|x86.Deploy.0 = Release|Any CPU
174 | EndGlobalSection
175 | GlobalSection(SolutionProperties) = preSolution
176 | HideSolutionNode = FALSE
177 | EndGlobalSection
178 | GlobalSection(ExtensibilityGlobals) = postSolution
179 | SolutionGuid = {F408BAA4-6DC6-45C4-88BF-63AF7151BB68}
180 | EndGlobalSection
181 | EndGlobal
182 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Assets/AboutAssets.txt:
--------------------------------------------------------------------------------
1 | Any raw assets you want to be deployed with your application can be placed in
2 | this directory (and child directories) and given a Build Action of "AndroidAsset".
3 |
4 | These files will be deployed with your package and will be accessible using Android's
5 | AssetManager, like this:
6 |
7 | public class ReadAsset : Activity
8 | {
9 | protected override void OnCreate (Bundle bundle)
10 | {
11 | base.OnCreate (bundle);
12 |
13 | InputStream input = Assets.Open ("my_asset.txt");
14 | }
15 | }
16 |
17 | Additionally, some Android functions will automatically load asset files:
18 |
19 | Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
20 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/CodeCapture.Android.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | AnyCPU
6 | {00C48694-D112-47BE-B11C-4DA84E38E4B7}
7 | {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
8 | {c9e5eea5-ca05-42a1-839b-61506e0a37df}
9 | Library
10 | CodeCapture.Droid
11 | CodeCapture.Android
12 | True
13 | True
14 | Resources\Resource.designer.cs
15 | Resource
16 | Properties\AndroidManifest.xml
17 | Resources
18 | Assets
19 | false
20 | v9.0
21 | true
22 | true
23 | Xamarin.Android.Net.AndroidClientHandler
24 |
25 |
26 |
27 |
28 | true
29 | portable
30 | false
31 | bin\Debug
32 | DEBUG;
33 | prompt
34 | 4
35 | None
36 |
37 |
38 | true
39 | portable
40 | true
41 | bin\Release
42 | prompt
43 | 4
44 | true
45 | false
46 | SdkOnly
47 | false
48 | true
49 | apk
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 | 6.2.10
63 |
64 |
65 | 5.47.0
66 |
67 |
68 | 5.0.1
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | {66D0E395-D85D-447D-A6D1-47D677C1343A}
107 | CodeCapture
108 |
109 |
110 |
111 |
112 |
113 |
114 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/CodeCapture.Android.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Theme.AppCompat.Light.NoActionBar
5 | pixel_2_pie_9_0_-_api_28
6 | pixel_2_pie_9_0_-_api_28
7 |
8 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/MainActivity.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | using Android.App;
4 | using Android.Content.PM;
5 | using Android.Runtime;
6 | using Android.Views;
7 | using Android.Widget;
8 | using Android.OS;
9 | using Plugin.Media;
10 | using Android;
11 |
12 | namespace CodeCapture.Droid
13 | {
14 | [Activity(Label = "CodeCapture", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
15 | public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
16 | {
17 | readonly string[] permissionGroup =
18 | {
19 | Manifest.Permission.ReadExternalStorage,
20 | Manifest.Permission.WriteExternalStorage,
21 | Manifest.Permission.Camera
22 | };
23 | protected override async void OnCreate(Bundle savedInstanceState)
24 | {
25 | TabLayoutResource = Resource.Layout.Tabbar;
26 | ToolbarResource = Resource.Layout.Toolbar;
27 |
28 | base.OnCreate(savedInstanceState);
29 | RequestPermissions(permissionGroup,0);
30 | await CrossMedia.Current.Initialize();
31 |
32 | Xamarin.Essentials.Platform.Init(this, savedInstanceState);
33 | global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
34 | LoadApplication(new App());
35 | }
36 | public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
37 | {
38 | Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
39 |
40 | base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
41 | }
42 | }
43 | }
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Properties/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 | using Android.App;
5 |
6 | // General Information about an assembly is controlled through the following
7 | // set of attributes. Change these attribute values to modify the information
8 | // associated with an assembly.
9 | [assembly: AssemblyTitle("CodeCapture.Android")]
10 | [assembly: AssemblyDescription("")]
11 | [assembly: AssemblyConfiguration("")]
12 | [assembly: AssemblyCompany("")]
13 | [assembly: AssemblyProduct("CodeCapture.Android")]
14 | [assembly: AssemblyCopyright("Copyright © 2014")]
15 | [assembly: AssemblyTrademark("")]
16 | [assembly: AssemblyCulture("")]
17 | [assembly: ComVisible(false)]
18 |
19 | // Version information for an assembly consists of the following four values:
20 | //
21 | // Major Version
22 | // Minor Version
23 | // Build Number
24 | // Revision
25 | [assembly: AssemblyVersion("1.0.0.0")]
26 | [assembly: AssemblyFileVersion("1.0.0.0")]
27 |
28 | // Add some common permissions, these can be removed if not needed
29 | [assembly: UsesPermission(Android.Manifest.Permission.Internet)]
30 | [assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
31 | [assembly: UsesFeature("android.hardware.camera", Required = true)]
32 | [assembly: UsesFeature("android.hardware.camera.autofocus", Required = true)]
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/AboutResources.txt:
--------------------------------------------------------------------------------
1 | Images, layout descriptions, binary blobs and string dictionaries can be included
2 | in your application as resource files. Various Android APIs are designed to
3 | operate on the resource IDs instead of dealing with images, strings or binary blobs
4 | directly.
5 |
6 | For example, a sample Android app that contains a user interface layout (main.xml),
7 | an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
8 | would keep its resources in the "Resources" directory of the application:
9 |
10 | Resources/
11 | drawable-hdpi/
12 | icon.png
13 |
14 | drawable-ldpi/
15 | icon.png
16 |
17 | drawable-mdpi/
18 | icon.png
19 |
20 | layout/
21 | main.xml
22 |
23 | values/
24 | strings.xml
25 |
26 | In order to get the build system to recognize Android resources, set the build action to
27 | "AndroidResource". The native Android APIs do not operate directly with filenames, but
28 | instead operate on resource IDs. When you compile an Android application that uses resources,
29 | the build system will package the resources for distribution and generate a class called
30 | "Resource" that contains the tokens for each one of the resources included. For example,
31 | for the above Resources layout, this is what the Resource class would expose:
32 |
33 | public class Resource {
34 | public class drawable {
35 | public const int icon = 0x123;
36 | }
37 |
38 | public class layout {
39 | public const int main = 0x456;
40 | }
41 |
42 | public class strings {
43 | public const int first_string = 0xabc;
44 | public const int second_string = 0xbcd;
45 | }
46 | }
47 |
48 | You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main
49 | to reference the layout/main.xml file, or Resource.strings.first_string to reference the first
50 | string in the dictionary file values/strings.xml.
51 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/layout/Tabbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/layout/Toolbar.xml:
--------------------------------------------------------------------------------
1 |
9 |
10 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-anydpi-v26/icon.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-anydpi-v26/icon_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-hdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-hdpi/icon.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-hdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-hdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-mdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-mdpi/icon.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-mdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-mdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-xhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-xhdpi/icon.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-xhdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-xhdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-xxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-xxhdpi/icon.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-xxhdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-xxhdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-xxxhdpi/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-xxxhdpi/icon.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 | #3F51B5
5 | #303F9F
6 | #FF4081
7 |
8 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
26 |
27 |
30 |
31 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.Android/Resources/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/App.xaml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/App.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 | using Windows.ApplicationModel;
7 | using Windows.ApplicationModel.Activation;
8 | using Windows.Foundation;
9 | using Windows.Foundation.Collections;
10 | using Windows.UI.Xaml;
11 | using Windows.UI.Xaml.Controls;
12 | using Windows.UI.Xaml.Controls.Primitives;
13 | using Windows.UI.Xaml.Data;
14 | using Windows.UI.Xaml.Input;
15 | using Windows.UI.Xaml.Media;
16 | using Windows.UI.Xaml.Navigation;
17 |
18 | namespace CodeCapture.UWP
19 | {
20 | ///
21 | /// Provides application-specific behavior to supplement the default Application class.
22 | ///
23 | sealed partial class App : Application
24 | {
25 | ///
26 | /// Initializes the singleton application object. This is the first line of authored code
27 | /// executed, and as such is the logical equivalent of main() or WinMain().
28 | ///
29 | public App()
30 | {
31 | this.InitializeComponent();
32 | this.Suspending += OnSuspending;
33 | }
34 |
35 | ///
36 | /// Invoked when the application is launched normally by the end user. Other entry points
37 | /// will be used such as when the application is launched to open a specific file.
38 | ///
39 | /// Details about the launch request and process.
40 | protected override void OnLaunched(LaunchActivatedEventArgs e)
41 | {
42 | #if DEBUG
43 | if (System.Diagnostics.Debugger.IsAttached)
44 | {
45 | this.DebugSettings.EnableFrameRateCounter = true;
46 | }
47 | #endif
48 |
49 | Frame rootFrame = Window.Current.Content as Frame;
50 |
51 | // Do not repeat app initialization when the Window already has content,
52 | // just ensure that the window is active
53 | if (rootFrame == null)
54 | {
55 | // Create a Frame to act as the navigation context and navigate to the first page
56 | rootFrame = new Frame();
57 |
58 | rootFrame.NavigationFailed += OnNavigationFailed;
59 |
60 | Xamarin.Forms.Forms.Init(e);
61 |
62 | if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
63 | {
64 | //TODO: Load state from previously suspended application
65 | }
66 |
67 | // Place the frame in the current Window
68 | Window.Current.Content = rootFrame;
69 | }
70 |
71 | if (rootFrame.Content == null)
72 | {
73 | // When the navigation stack isn't restored navigate to the first page,
74 | // configuring the new page by passing required information as a navigation
75 | // parameter
76 | rootFrame.Navigate(typeof(MainPage), e.Arguments);
77 | }
78 | // Ensure the current window is active
79 | Window.Current.Activate();
80 | }
81 |
82 | ///
83 | /// Invoked when Navigation to a certain page fails
84 | ///
85 | /// The Frame which failed navigation
86 | /// Details about the navigation failure
87 | void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
88 | {
89 | throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
90 | }
91 |
92 | ///
93 | /// Invoked when application execution is being suspended. Application state is saved
94 | /// without knowing whether the application will be terminated or resumed with the contents
95 | /// of memory still intact.
96 | ///
97 | /// The source of the suspend request.
98 | /// Details about the suspend request.
99 | private void OnSuspending(object sender, SuspendingEventArgs e)
100 | {
101 | var deferral = e.SuspendingOperation.GetDeferral();
102 | //TODO: Save application state and stop any background activity
103 | deferral.Complete();
104 | }
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/LargeTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/LargeTile.scale-100.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/LargeTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/LargeTile.scale-200.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/LargeTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/LargeTile.scale-400.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/SmallTile.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/SmallTile.scale-100.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/SmallTile.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/SmallTile.scale-200.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/SmallTile.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/SmallTile.scale-400.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/SplashScreen.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/SplashScreen.scale-100.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/SplashScreen.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/SplashScreen.scale-200.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/SplashScreen.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/SplashScreen.scale-400.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square150x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square150x150Logo.scale-100.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square150x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square150x150Logo.scale-200.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square150x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square150x150Logo.scale-400.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-16.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-256.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.altform-unplated_targetsize-48.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.scale-100.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.scale-200.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.scale-400.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.targetsize-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.targetsize-16.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.targetsize-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.targetsize-256.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.targetsize-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Square44x44Logo.targetsize-48.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/StoreLogo.backup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/StoreLogo.backup.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/StoreLogo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/StoreLogo.scale-100.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/StoreLogo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/StoreLogo.scale-200.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/StoreLogo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/StoreLogo.scale-400.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Wide310x150Logo.scale-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Wide310x150Logo.scale-100.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Wide310x150Logo.scale-200.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Wide310x150Logo.scale-200.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/Wide310x150Logo.scale-400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/Wide310x150Logo.scale-400.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.UWP/Assets/logo.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/CodeCapture.UWP.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | x86
7 | {FEE82C4F-EB80-4CC4-B175-49B849BC7436}
8 | AppContainerExe
9 | Properties
10 | CodeCapture.UWP
11 | CodeCapture.UWP
12 | en-US
13 | UAP
14 | 10.0.18362.0
15 | 10.0.16299.0
16 | 14
17 | true
18 | 512
19 | {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
20 | false
21 |
22 |
23 | true
24 | bin\ARM\Debug\
25 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
26 | ;2008
27 | full
28 | ARM
29 | false
30 | prompt
31 | true
32 |
33 |
34 | bin\ARM\Release\
35 | TRACE;NETFX_CORE;WINDOWS_UWP
36 | true
37 | ;2008
38 | pdbonly
39 | ARM
40 | false
41 | prompt
42 | true
43 | true
44 |
45 |
46 | true
47 | bin\x64\Debug\
48 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
49 | ;2008
50 | full
51 | x64
52 | false
53 | prompt
54 | true
55 |
56 |
57 | bin\x64\Release\
58 | TRACE;NETFX_CORE;WINDOWS_UWP
59 | true
60 | ;2008
61 | pdbonly
62 | x64
63 | false
64 | prompt
65 | true
66 | true
67 |
68 |
69 | true
70 | bin\x86\Debug\
71 | DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
72 | ;2008
73 | full
74 | x86
75 | false
76 | prompt
77 | true
78 |
79 |
80 | bin\x86\Release\
81 | TRACE;NETFX_CORE;WINDOWS_UWP
82 | true
83 | ;2008
84 | none
85 | x86
86 | false
87 | prompt
88 | true
89 | true
90 |
91 |
92 |
93 | App.xaml
94 |
95 |
96 | MainPage.xaml
97 |
98 |
99 |
100 |
101 |
102 | Designer
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 | MSBuild:Compile
138 | Designer
139 |
140 |
141 | MSBuild:Compile
142 | Designer
143 |
144 |
145 |
146 |
147 | 2.0.3
148 |
149 |
150 | 12.0.3
151 |
152 |
153 | 5.47.0
154 |
155 |
156 | 5.0.1
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 | {66D0E395-D85D-447D-A6D1-47D677C1343A}
165 | CodeCapture
166 |
167 |
168 |
169 | 14.0
170 |
171 |
172 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/MainPage.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 | using Windows.Foundation;
7 | using Windows.Foundation.Collections;
8 | using Windows.UI.Xaml;
9 | using Windows.UI.Xaml.Controls;
10 | using Windows.UI.Xaml.Controls.Primitives;
11 | using Windows.UI.Xaml.Data;
12 | using Windows.UI.Xaml.Input;
13 | using Windows.UI.Xaml.Media;
14 | using Windows.UI.Xaml.Navigation;
15 |
16 | namespace CodeCapture.UWP
17 | {
18 | public sealed partial class MainPage
19 | {
20 | public MainPage()
21 | {
22 | this.InitializeComponent();
23 |
24 | LoadApplication(new CodeCapture.App());
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Package.appxmanifest:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
13 |
14 |
15 |
16 |
17 | CodeCapture
18 | 66047c87-bfde-4ba3-abee-151d086e9d7e
19 | Assets\StoreLogo.png
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
34 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/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("CodeCapture.UWP")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("CodeCapture.UWP")]
13 | [assembly: AssemblyCopyright("Copyright © 2015")]
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)]
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.UWP/Properties/Default.rd.xml:
--------------------------------------------------------------------------------
1 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/AppDelegate.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 |
5 | using Foundation;
6 | using UIKit;
7 |
8 | namespace CodeCapture.iOS
9 | {
10 | // The UIApplicationDelegate for the application. This class is responsible for launching the
11 | // User Interface of the application, as well as listening (and optionally responding) to
12 | // application events from iOS.
13 | [Register("AppDelegate")]
14 | public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
15 | {
16 | //
17 | // This method is invoked when the application has loaded and is ready to run. In this
18 | // method you should instantiate the window, load the UI into it and then make the window
19 | // visible.
20 | //
21 | // You have 17 seconds to return from this method, or iOS will terminate your application.
22 | //
23 | public override bool FinishedLaunching(UIApplication app, NSDictionary options)
24 | {
25 | global::Xamarin.Forms.Forms.Init();
26 | LoadApplication(new App());
27 |
28 | return base.FinishedLaunching(app, options);
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "scale": "2x",
5 | "size": "20x20",
6 | "idiom": "iphone",
7 | "filename": "Icon40.png"
8 | },
9 | {
10 | "scale": "3x",
11 | "size": "20x20",
12 | "idiom": "iphone",
13 | "filename": "Icon60.png"
14 | },
15 | {
16 | "scale": "2x",
17 | "size": "29x29",
18 | "idiom": "iphone",
19 | "filename": "Icon58.png"
20 | },
21 | {
22 | "scale": "3x",
23 | "size": "29x29",
24 | "idiom": "iphone",
25 | "filename": "Icon87.png"
26 | },
27 | {
28 | "scale": "2x",
29 | "size": "40x40",
30 | "idiom": "iphone",
31 | "filename": "Icon80.png"
32 | },
33 | {
34 | "scale": "3x",
35 | "size": "40x40",
36 | "idiom": "iphone",
37 | "filename": "Icon120.png"
38 | },
39 | {
40 | "scale": "2x",
41 | "size": "60x60",
42 | "idiom": "iphone",
43 | "filename": "Icon120.png"
44 | },
45 | {
46 | "scale": "3x",
47 | "size": "60x60",
48 | "idiom": "iphone",
49 | "filename": "Icon180.png"
50 | },
51 | {
52 | "scale": "1x",
53 | "size": "20x20",
54 | "idiom": "ipad",
55 | "filename": "Icon20.png"
56 | },
57 | {
58 | "scale": "2x",
59 | "size": "20x20",
60 | "idiom": "ipad",
61 | "filename": "Icon40.png"
62 | },
63 | {
64 | "scale": "1x",
65 | "size": "29x29",
66 | "idiom": "ipad",
67 | "filename": "Icon29.png"
68 | },
69 | {
70 | "scale": "2x",
71 | "size": "29x29",
72 | "idiom": "ipad",
73 | "filename": "Icon58.png"
74 | },
75 | {
76 | "scale": "1x",
77 | "size": "40x40",
78 | "idiom": "ipad",
79 | "filename": "Icon40.png"
80 | },
81 | {
82 | "scale": "2x",
83 | "size": "40x40",
84 | "idiom": "ipad",
85 | "filename": "Icon80.png"
86 | },
87 | {
88 | "scale": "1x",
89 | "size": "76x76",
90 | "idiom": "ipad",
91 | "filename": "Icon76.png"
92 | },
93 | {
94 | "scale": "2x",
95 | "size": "76x76",
96 | "idiom": "ipad",
97 | "filename": "Icon152.png"
98 | },
99 | {
100 | "scale": "2x",
101 | "size": "83.5x83.5",
102 | "idiom": "ipad",
103 | "filename": "Icon167.png"
104 | },
105 | {
106 | "scale": "1x",
107 | "size": "1024x1024",
108 | "idiom": "ios-marketing",
109 | "filename": "Icon1024.png"
110 | }
111 | ],
112 | "properties": {},
113 | "info": {
114 | "version": 1,
115 | "author": "xcode"
116 | }
117 | }
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Assets.xcassets/AppIcon.appiconset/logo.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/CodeCapture.iOS.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | iPhoneSimulator
6 | 8.0.30703
7 | 2.0
8 | {8024EA52-0676-493C-ABA2-065B98BCECEA}
9 | {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
10 | {6143fdea-f3c2-4a09-aafa-6e230626515e}
11 | Exe
12 | CodeCapture.iOS
13 | Resources
14 | CodeCapture.iOS
15 | true
16 | NSUrlSessionHandler
17 | automatic
18 |
19 |
20 | true
21 | full
22 | false
23 | bin\iPhoneSimulator\Debug
24 | DEBUG
25 | prompt
26 | 4
27 | x86_64
28 | None
29 | true
30 |
31 |
32 | none
33 | true
34 | bin\iPhoneSimulator\Release
35 | prompt
36 | 4
37 | None
38 | x86_64
39 |
40 |
41 | true
42 | full
43 | false
44 | bin\iPhone\Debug
45 | DEBUG
46 | prompt
47 | 4
48 | ARM64
49 | iPhone Developer
50 | true
51 | Entitlements.plist
52 | None
53 | -all
54 |
55 |
56 | none
57 | true
58 | bin\iPhone\Release
59 | prompt
60 | 4
61 | ARM64
62 | iPhone Developer
63 | Entitlements.plist
64 | None
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 | false
77 |
78 |
79 | false
80 |
81 |
82 | false
83 |
84 |
85 | false
86 |
87 |
88 | false
89 |
90 |
91 | false
92 |
93 |
94 | false
95 |
96 |
97 | false
98 |
99 |
100 | false
101 |
102 |
103 | false
104 |
105 |
106 | false
107 |
108 |
109 | false
110 |
111 |
112 | false
113 |
114 |
115 | false
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 | 6.2.10
129 |
130 |
131 | 2.0.3
132 |
133 |
134 | 12.0.3
135 |
136 |
137 | 5.47.0
138 |
139 |
140 | 5.0.1
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 | {66D0E395-D85D-447D-A6D1-47D677C1343A}
149 | CodeCapture
150 |
151 |
152 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Entitlements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | UIDeviceFamily
6 |
7 | 1
8 | 2
9 |
10 | UISupportedInterfaceOrientations
11 |
12 | UIInterfaceOrientationPortrait
13 | UIInterfaceOrientationLandscapeLeft
14 | UIInterfaceOrientationLandscapeRight
15 |
16 | UISupportedInterfaceOrientations~ipad
17 |
18 | UIInterfaceOrientationPortrait
19 | UIInterfaceOrientationPortraitUpsideDown
20 | UIInterfaceOrientationLandscapeLeft
21 | UIInterfaceOrientationLandscapeRight
22 |
23 | MinimumOSVersion
24 | 8.0
25 | CFBundleDisplayName
26 | CodeCapture
27 | CFBundleIdentifier
28 | com.companyname.CodeCapture
29 | CFBundleVersion
30 | 1.0
31 | UILaunchStoryboardName
32 | LaunchScreen
33 | CFBundleName
34 | CodeCapture
35 | XSAppIconAssets
36 | Assets.xcassets/AppIcon.appiconset
37 | NSCameraUsageDescription
38 | This app needs access to the camera to take photos.
39 | NSPhotoLibraryUsageDescription
40 | This app needs access to photos.
41 | NSMicrophoneUsageDescription
42 | This app needs access to microphone.
43 | NSPhotoLibraryAddUsageDescription
44 | This app needs access to the photo gallery.
45 |
46 |
47 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Main.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 |
5 | using Foundation;
6 | using UIKit;
7 |
8 | namespace CodeCapture.iOS
9 | {
10 | public class Application
11 | {
12 | // This is the main entry point of the application.
13 | static void Main(string[] args)
14 | {
15 | // if you want to use a different Application Delegate class from "AppDelegate"
16 | // you can specify it here.
17 | UIApplication.Main(args, null, "AppDelegate");
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/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("CodeCapture.iOS")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("CodeCapture.iOS")]
13 | [assembly: AssemblyCopyright("Copyright © 2014")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Resources/Default-568h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Resources/Default-568h@2x.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Resources/Default-Portrait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Resources/Default-Portrait.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Resources/Default-Portrait@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Resources/Default-Portrait@2x.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Resources/Default.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Resources/Default.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Resources/Default@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/code-capture/CodeCapture-Xamarin/bccacd4da6dfe6eba9405afabeb00b2ad13f3423/CodeCapture/CodeCapture.iOS/Resources/Default@2x.png
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture.iOS/Resources/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
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 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/AboutUs.xaml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
13 |
14 |
20 |
21 |
28 |
29 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/AboutUs.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | using Xamarin.Forms;
8 | using Xamarin.Forms.Xaml;
9 |
10 | namespace CodeCapture
11 | {
12 | [XamlCompilation(XamlCompilationOptions.Compile)]
13 | public partial class AboutUs : ContentPage
14 | {
15 | public string description;
16 | public AboutUs()
17 | {
18 | InitializeComponent();
19 |
20 | description = "\nCodeCapture is a cross-platform app that aims to assist remote learning experiences in Computer Science for students without computers by taking code from paper to mobile. CodeCapture has the functionality to extract code (C++, Java, JavaScript, or Python) from images of handwritten text and then allow the user to edit, compile, and share the result via email/SMS.\n\nWe also have various lessons on C++ (more languages coming soon) to assist with students' Computer Science education especially in times like these, where the COVID-19 pandemic and the enforced lockdown have kept students away from school.";
21 | aboutUs.Text = description;
22 | }
23 |
24 | private async void returnButton_Clicked(object sender, EventArgs e)
25 | {
26 | await Navigation.PopModalAsync();
27 | }
28 | }
29 | }
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/App.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/App.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using Xamarin.Forms;
3 | using Xamarin.Forms.Xaml;
4 |
5 | namespace CodeCapture
6 | {
7 | public partial class App : Application
8 | {
9 | public App()
10 | {
11 | InitializeComponent();
12 | MainPage = new NavigationPage(new CodeCapture.MainPage());
13 | }
14 |
15 | protected override void OnStart()
16 | {
17 | }
18 |
19 | protected override void OnSleep()
20 | {
21 | }
22 |
23 | protected override void OnResume()
24 | {
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using Xamarin.Forms.Xaml;
2 |
3 | [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/CodeCapture.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | netstandard2.0
5 | true
6 | CodeCapture
7 | CodeCapture
8 |
9 |
10 |
11 | portable
12 | true
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | MSBuild:UpdateDesignTimeXaml
27 |
28 |
29 | MSBuild:UpdateDesignTimeXaml
30 |
31 |
32 | MSBuild:UpdateDesignTimeXaml
33 |
34 |
35 | MSBuild:UpdateDesignTimeXaml
36 |
37 |
38 | MSBuild:UpdateDesignTimeXaml
39 |
40 |
41 | MSBuild:UpdateDesignTimeXaml
42 |
43 |
44 | MSBuild:UpdateDesignTimeXaml
45 |
46 |
47 |
48 |
49 |
50 | MSBuild:Compile
51 |
52 |
53 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/CompileCode.xaml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
14 |
15 |
24 |
25 |
37 |
38 |
50 |
51 |
65 |
66 |
74 |
75 |
86 |
87 |
98 |
99 |
100 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/CompileCode.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Net.Http;
5 | using System.Text;
6 | using System.Threading.Tasks;
7 |
8 | using Xamarin.Forms;
9 | using Xamarin.Forms.Xaml;
10 | using Newtonsoft.Json;
11 | using Newtonsoft.Json.Linq;
12 | using CodeCapture.Models;
13 | using CodeCapture.Models.CompileModels;
14 | using Xamarin.Essentials;
15 | using System.Diagnostics;
16 | using System.Net.Mail;
17 | using Twilio;
18 | using Twilio.Rest.Api.V2010.Account;
19 |
20 | namespace CodeCapture
21 | {
22 | [XamlCompilation(XamlCompilationOptions.Compile)]
23 | public partial class CompileCode : ContentPage
24 | {
25 | public string saveCode = "";
26 | public string saveStdin = "";
27 | public string result = "";
28 | public CompileCode(string code, string Stdin, string lang, string vers)
29 | {
30 | InitializeComponent();
31 | editor.IsReadOnly = false;
32 |
33 | saveCode = code;
34 | saveStdin = Stdin;
35 | compile(code, Stdin, lang, vers);
36 | }
37 |
38 | //Compile the code using JDoodle API
39 | public async void compile(string code, string Stdin, string lang, string vers)
40 | {
41 | string contentString;
42 | Models.Secrets secrets = new Models.Secrets();
43 | Models.CompileModels.Input input = new Models.CompileModels.Input()
44 | {
45 | clientId = secrets.JDOODLE_clientId,
46 | clientSecret = secrets.JDOODLE_clientSecret,
47 | script = code,
48 | stdin = Stdin,
49 | language = lang,
50 | versionIndex = vers,
51 | };
52 | HttpClient client = new HttpClient();
53 | string Url = "https://api.jdoodle.com/execute";
54 |
55 | var response = await client.PostAsync(Url,new StringContent(JsonConvert.SerializeObject(input),Encoding.UTF8, "application/json"));
56 |
57 | if (response.IsSuccessStatusCode)
58 | {
59 | //await DisplayAlert("POST Request Successful", "", "OK");
60 | contentString = await response.Content.ReadAsStringAsync();
61 | await DisplayTextAsync(JObject.Parse(contentString).ToString());
62 | }
63 | else await DisplayAlert("POST Request Failed", "", "OK");
64 | }
65 |
66 | async Task DisplayTextAsync(string content)
67 | {
68 | Models.CompileModels.Output output = JsonConvert.DeserializeObject(content);
69 | result = output.output;
70 | await DisplayAlert("Compiled Code", result, "Show In Editor");
71 | editor.Text = result;
72 | editor.IsReadOnly = true;
73 | }
74 |
75 | private async void returnButton_Clicked(object sender, EventArgs e)
76 | {
77 | await Navigation.PopModalAsync();
78 | }
79 |
80 | private async void menuButton_Clicked(object sender, EventArgs e)
81 | {
82 | var menu = new LessonMenu();
83 | await Navigation.PushModalAsync(menu);
84 | }
85 |
86 | private async void shareButton_Clicked(object sender, EventArgs e)
87 | {
88 | if (Connectivity.NetworkAccess == NetworkAccess.None)
89 | {
90 | await DisplayAlert("No Network Available", "Please Connect To Your Wifi Or Turn on Mobile Data", "OK");
91 | }
92 | else
93 | {
94 | string emailContentBody = "Thank you for using CodeCapture.\n\n-----\n\nThe Code you scanned was:\n\n" + saveCode + "\n\n-----\n\nYour Standard Input was:\n\n" + saveStdin + "\n\n-----\n\nThe Result you got was:\n\n" + result;
95 | string msgContentBody = "Thank you for using CodeCapture. The Result you got was:\n\n" + result;
96 |
97 | Models.Secrets secrets = new Models.Secrets();
98 |
99 | if (!string.IsNullOrEmpty(emailID.Text))
100 | {
101 | try
102 | {
103 | MailMessage mail = new MailMessage();
104 | SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
105 | mail.From = new MailAddress(secrets.EMAIL_address);
106 | mail.To.Add(emailID.Text.Trim());
107 | mail.Subject = "CodeCapture Scan";
108 | mail.Body = emailContentBody;
109 | SmtpServer.Port = 587;
110 | SmtpServer.Host = "smtp.gmail.com";
111 | SmtpServer.EnableSsl = true;
112 | SmtpServer.UseDefaultCredentials = false;
113 | SmtpServer.Credentials = new System.Net.NetworkCredential(secrets.EMAIL_address, secrets.EMAIL_password);
114 | SmtpServer.Send(mail);
115 | await DisplayAlert("Email Sent Succesfully", "", "OK");
116 | }
117 | catch (Exception err)
118 | {
119 | await DisplayAlert("Failed To Send Email", err.Message, "OK");
120 | }
121 | }
122 | if(!string.IsNullOrEmpty(phoneNumber.Text))
123 | {
124 | try
125 | {
126 | string accountSid = secrets.TWILIO_accountSID;
127 | string authToken = secrets.TWILIO_authToken;
128 |
129 | TwilioClient.Init(accountSid, authToken);
130 |
131 | var message = MessageResource.Create(
132 | body: msgContentBody,
133 | from: new Twilio.Types.PhoneNumber(secrets.TWILIO_phoneNumber),
134 | to: new Twilio.Types.PhoneNumber(phoneNumber.Text.Trim())
135 | );
136 |
137 | if (!(message.ErrorCode == null))
138 | {
139 | await DisplayAlert("Failed To Send SMS", "", "OK");
140 | }
141 | else
142 | {
143 | await DisplayAlert("SMS Sent Succesfully", "", "OK");
144 | }
145 | }
146 | catch(Exception err)
147 | {
148 | await DisplayAlert("Failed To Send SMS", err.Message, "OK");
149 | }
150 | }
151 | }
152 | }
153 | }
154 | }
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/ExtractText.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
18 |
19 |
28 |
29 |
36 |
37 |
47 |
48 |
62 |
63 |
77 |
78 |
88 |
89 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/ExtractText.xaml.cs:
--------------------------------------------------------------------------------
1 | using Newtonsoft.Json;
2 | using Newtonsoft.Json.Linq;
3 | using System;
4 | using System.Collections.Generic;
5 | using System.IO;
6 | using System.Linq;
7 | using System.Net.Http;
8 | using System.Net.Http.Headers;
9 | using System.Threading.Tasks;
10 | using Xamarin.Forms;
11 | using Xamarin.Forms.Xaml;
12 | using Xamarin.Essentials;
13 | using CodeCapture.Models;
14 | using CodeCapture.Models.CompileModels;
15 | using System.Diagnostics;
16 |
17 | namespace CodeCapture
18 | {
19 | [XamlCompilation(XamlCompilationOptions.Compile)]
20 | public partial class ExtractText : ContentPage
21 | {
22 | string extract = "";
23 | public ExtractText(string imagePath)
24 | {
25 | InitializeComponent();
26 |
27 | var langList = new List();
28 | langList.Add("C++ (GCC 9.1.0)");
29 | langList.Add("Java (JDK 11.0.4)");
30 | langList.Add("JavaScript(Node.js v12.11.1)");
31 | langList.Add("Python (v3.7.4)");
32 |
33 | langPicker.ItemsSource = langList;
34 |
35 | ReadText(imagePath);
36 | }
37 |
38 |
39 | //Uses the Read API on the image to extract text from images images
40 | public async void ReadText(string imageFilePath)
41 | {
42 | try
43 | {
44 | Models.Secrets secrets = new Models.Secrets();
45 | string subscriptionKey = secrets.READ_subscriptionKey;
46 | string uriBase = secrets.READ_endpoint + "/vision/v3.0/read/analyze";
47 |
48 | //await DisplayAlert("Start Read API", "Best Of Luck", "Thanks");
49 |
50 | HttpClient client = new HttpClient();
51 |
52 | client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", subscriptionKey);
53 |
54 | string url = uriBase;
55 |
56 | HttpResponseMessage response;
57 |
58 | string operationLocation;
59 |
60 | byte[] byteData = GetImageAsByteArray(imageFilePath);
61 |
62 | using (ByteArrayContent content = new ByteArrayContent(byteData))
63 | {
64 | content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
65 |
66 | response = await client.PostAsync(url, content);
67 | }
68 |
69 | if (response.IsSuccessStatusCode)
70 | {
71 | //await DisplayAlert("POST Request Successful", "", "OK");
72 | operationLocation = response.Headers.GetValues("Operation-Location").FirstOrDefault();
73 | }
74 | else
75 | {
76 | string errorString = await response.Content.ReadAsStringAsync();
77 | await DisplayAlert("\n\nResponse:\n{0}\n", JToken.Parse(errorString).ToString(), "OK");
78 | return;
79 | }
80 |
81 | string contentString;
82 | int i = 0;
83 | do
84 | {
85 | System.Threading.Thread.Sleep(1000);
86 | response = await client.GetAsync(operationLocation);
87 | contentString = await response.Content.ReadAsStringAsync();
88 | ++i;
89 | }
90 | while (i < 60 && contentString.IndexOf("\"status\":\"succeeded\"") == -1);
91 |
92 | if (i == 60 && contentString.IndexOf("\"status\":\"succeeded\"") == -1)
93 | {
94 | await DisplayAlert("\nTimeout error.\n", "", "OK");
95 | return;
96 | }
97 |
98 | await DisplayTextAsync(JObject.Parse(contentString).ToString());
99 | }
100 | catch (Exception e)
101 | {
102 | await DisplayAlert("Error", "\n" + e.Message, "OK");
103 | }
104 | }
105 |
106 |
107 | async Task DisplayTextAsync(string content)
108 | {
109 | Models.ReadModels.Root response = JsonConvert.DeserializeObject(content);
110 | foreach (var result in response.analyzeResult.readResults)
111 | {
112 | foreach (var line in result.lines)
113 | {
114 | extract += line.text + "\n";
115 | }
116 | }
117 | await DisplayAlert("Extracted Text", extract, "Show In Editor");
118 | editor.Text = extract;
119 | await DisplayAlert("Special Instructions", "For C++:\n\n\tDon't forget to add: \n\t\t#include \n\t\tusing namespace std;\n\nFor Java:\n\t\tMake sure that only the Main class is 'public'\n\t\tYou don't need to add a custom package name", "OK");
120 | }
121 |
122 | //Converts Image to Byte Array and return it
123 | public byte[] GetImageAsByteArray(string imageFilePath)
124 | {
125 | using (FileStream fileStream = new FileStream(imageFilePath, FileMode.Open, FileAccess.Read))
126 | {
127 | BinaryReader binaryReader = new BinaryReader(fileStream);
128 | return binaryReader.ReadBytes((int)fileStream.Length);
129 | }
130 | }
131 |
132 | private async void returnButton_ClickedAsync(object sender, EventArgs e)
133 | {
134 | await Navigation.PopModalAsync();
135 | }
136 |
137 | private async void compileButton_Clicked(object sender, EventArgs e)
138 | {
139 | string lang = "", vers = "";
140 |
141 | if(langPicker.SelectedItem!=null)
142 | {
143 | if (langPicker.SelectedIndex == 0)
144 | {
145 | lang = "cpp";
146 | vers = "4";
147 | }
148 |
149 | else if (langPicker.SelectedIndex == 1)
150 | {
151 | lang = "java";
152 | vers = "3";
153 | }
154 | else if (langPicker.SelectedIndex == 2)
155 | {
156 | lang = "nodejs";
157 | vers = "3";
158 | }
159 | else if (langPicker.SelectedIndex == 3)
160 | {
161 | lang = "python3";
162 | vers = "3";
163 | }
164 |
165 | if (Connectivity.NetworkAccess == NetworkAccess.None)
166 | {
167 | await DisplayAlert("No Network Available", "Please Connect To Your Wifi Or Turn on Mobile Data", "OK");
168 | }
169 |
170 | else await Navigation.PushModalAsync(new CompileCode(editor.Text, stdin.Text, lang, vers));
171 | }
172 | else
173 | {
174 | await DisplayAlert("Please select a language","", "OK");
175 | }
176 | }
177 | }
178 | }
179 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/ImageCapture.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
18 |
19 |
26 |
27 |
41 |
42 |
56 |
57 |
71 |
72 |
86 |
87 |
88 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/ImageCapture.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Diagnostics;
3 |
4 | using Xamarin.Forms;
5 | using Xamarin.Forms.Xaml;
6 | using Xamarin.Essentials;
7 | using Plugin.Media;
8 | using System.Threading.Tasks;
9 | using System.IO;
10 | using System.Net.Http;
11 | using System.Net.Http.Headers;
12 | using System.Linq;
13 | using Newtonsoft.Json.Linq;
14 | using Newtonsoft.Json;
15 | using CodeCapture.Models.ReadModels;
16 |
17 | namespace CodeCapture
18 | {
19 | [XamlCompilation(XamlCompilationOptions.Compile)]
20 | public partial class ImageCapture : ContentPage
21 | {
22 | private string imagePath;
23 |
24 | public ImageCapture()
25 | {
26 | InitializeComponent();
27 |
28 | extractText.IsEnabled = false;
29 | extractText.IsVisible = false;
30 | }
31 |
32 | //Captures images from user's camera
33 | private async void clickImage_Clicked(object sender, EventArgs e)
34 | {
35 | await CrossMedia.Current.Initialize();
36 |
37 | if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
38 | {
39 | await DisplayAlert("No Camera Available", "Function To Be Built Yet", "OK");
40 | return;
41 | }
42 |
43 | var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
44 | {
45 | SaveToAlbum = true,
46 | AllowCropping = false
47 | });
48 |
49 | if (file == null)
50 | return;
51 |
52 | imagePath = file.Path;
53 |
54 | extractText.IsEnabled = true;
55 | extractText.IsVisible = true;
56 |
57 | image.Source = ImageSource.FromStream(() =>
58 | {
59 | var stream = file.GetStream();
60 | return stream;
61 | });
62 | }
63 |
64 | //Selects images from the user's device
65 | private async void selectImage_Clicked(object sender, EventArgs e)
66 | {
67 | await CrossMedia.Current.Initialize();
68 |
69 | if (!CrossMedia.Current.IsPickPhotoSupported)
70 | {
71 | await DisplayAlert("Photos Not Supported", "Sorry! Permission not granted to photos.", "OK");
72 | return;
73 | }
74 |
75 | var file = await Plugin.Media.CrossMedia.Current.PickPhotoAsync(new
76 | Plugin.Media.Abstractions.PickMediaOptions
77 | {
78 | });
79 |
80 | if (file == null)
81 | return;
82 |
83 | imagePath = file.Path;
84 |
85 | extractText.IsEnabled = true;
86 | extractText.IsVisible = true;
87 |
88 | image.Source = ImageSource.FromStream(() =>
89 | {
90 | var stream = file.GetStream();
91 | return stream;
92 | });
93 | }
94 |
95 | //Sends the image to the Read API for the text to be extracted
96 | private async void extractText_Clicked(object sender, EventArgs e)
97 | {
98 | if (Connectivity.NetworkAccess == NetworkAccess.None)
99 | {
100 | await DisplayAlert("No Network Available", "Please Connect To Your Wifi Or Turn on Mobile Data", "OK");
101 | }
102 | else await Navigation.PushModalAsync(new ExtractText(imagePath));
103 | }
104 |
105 | private async void menuButton_Clicked(object sender, EventArgs e)
106 | {
107 | await Navigation.PushModalAsync(new LessonMenu());
108 | }
109 | }
110 | }
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/LessonMenu.xaml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
14 |
25 |
26 |
31 |
32 |
39 |
40 |
54 |
55 |
62 |
63 |
74 |
75 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/LessonMenu.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | using Xamarin.Forms;
8 | using Xamarin.Forms.Xaml;
9 | using Xamarin.Essentials;
10 |
11 | namespace CodeCapture
12 | {
13 | [XamlCompilation(XamlCompilationOptions.Compile)]
14 | public partial class LessonMenu : ContentPage
15 | {
16 | public LessonMenu()
17 | {
18 | InitializeComponent();
19 |
20 | string menuHeading = "We have our curated selection of\nC++ lessons that will help get beginners started. We will bring learning support for more languages soon.";
21 | menuLabel.Text = menuHeading;
22 |
23 | var lessonList = new List
24 | {
25 | "1: Setup (For Computer) And Tokens in C++",
26 | "2: User Input and Common Output",
27 | "3: Conditional Statements",
28 | "4: For Loops",
29 | "5: While And Do-While Loops",
30 | "6: Arrays",
31 | "7: Functions",
32 | "Want To Learn Further?"
33 | };
34 |
35 | lessonPicker.ItemsSource = lessonList;
36 | }
37 |
38 | private async void playgroundButton_Clicked(object sender, EventArgs e)
39 | {
40 | await Navigation.PushModalAsync(new ImageCapture());
41 | }
42 |
43 | private async void viewLessonButton_Clicked(object sender, EventArgs e)
44 | {
45 | if (lessonPicker.SelectedItem == null) await DisplayAlert("Select A Lesson", "", "OK");
46 | else
47 | {
48 | string lessonTitle = lessonPicker.SelectedItem.ToString(), lessonLink, question;
49 |
50 | switch (lessonPicker.SelectedIndex)
51 | {
52 | case 0:
53 | lessonLink = "https://www.youtube.com/embed/o6dT3kAWg6s";
54 | question = "Just to try your hands on the platform, write your first \"Hello World\" program! Write a program to display the phrase \"Hello World!\" on the console/\n\n\n Once you're comfortable with the concept of tokens, write a program to display your name, weight, height(in meters), and BMI. Use weight and height to compute BMI and Store all four values in appropriate datatypes.";
55 | break;
56 | case 1:
57 | lessonLink = "https://www.youtube.com/embed/uzvE7dpMjLQ";
58 | question = "Write a program to take the name and age (in years) of a user as input from the console. Compute and display the user's age in months and days.";
59 | break;
60 | case 2:
61 | lessonLink = "https://www.youtube.com/embed/cD4Vauq4lpw";
62 | question = "Write a program to check whether a given number is a multiple of 5 or not.";
63 | break;
64 | case 3:
65 | lessonLink = "https://www.youtube.com/embed/mKGCkZt8I_0";
66 | question = "Use a for loop to display all odd numbers between 1-100 (excluding 1 and 100)";
67 | break;
68 | case 4:
69 | lessonLink = "https://www.youtube.com/embed/xBgJmy-trAc";
70 | question = "Write a program to compute and display the factorial of a number (taken as input) using while or do while loop(s)";
71 | break;
72 | case 5:
73 | lessonLink = "https://www.youtube.com/embed/QAKmX809ePA";
74 | question = "Write a program to store the marks of all students in a class in an array and compute the average score. Take as input the number of students in the class and the scores of the students.";
75 | break;
76 | case 6:
77 | lessonLink = "https://www.youtube.com/embed/YGA1Sbd2c08";
78 | question = "Create a function to check whether a user-inputted string is a palindrome or not";
79 | break;
80 | default:
81 | await Browser.OpenAsync("https://www.youtube.com/playlist?list=PLKKfKV1b9e8qBh_LG02V8R8qGRQjloeBj", BrowserLaunchMode.SystemPreferred);
82 | lessonLink = "https://www.youtube.com/playlist?list=PLKKfKV1b9e8qBh_LG02V8R8qGRQjloeBj";
83 | question = "No questions for this selection";
84 | break;
85 | }
86 |
87 | if (lessonPicker.SelectedIndex != 7)
88 | {
89 | lessonTitle = "Concept " + lessonTitle;
90 | question = "Question:\n\n" + question;
91 | }
92 |
93 | await Navigation.PushModalAsync(new LessonView(lessonTitle, lessonLink, question));
94 | }
95 | }
96 | }
97 | }
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/LessonView.xaml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
15 |
21 |
32 |
43 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/LessonView.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 | using Xamarin.Essentials;
7 | using Xamarin.Forms;
8 | using Xamarin.Forms.Xaml;
9 |
10 | namespace CodeCapture
11 | {
12 | [XamlCompilation(XamlCompilationOptions.Compile)]
13 | public partial class LessonView : ContentPage
14 | {
15 | public string Link;
16 | public string question;
17 | public LessonView(string title, string link, string ques)
18 | {
19 | InitializeComponent();
20 | lessonTitle.Text = title;
21 | viewer.Source = link;
22 | Link = link;
23 | question = ques;
24 | }
25 |
26 | private async void returnBack()
27 | {
28 | await Navigation.PopModalAsync();
29 | }
30 |
31 | private void returnButton_Clicked(object sender, EventArgs e)
32 | {
33 | viewer.Source = "";
34 | returnBack();
35 | }
36 |
37 | private async void practiceButton_Clicked(object sender, EventArgs e)
38 | {
39 | viewer.Source = "";
40 | await Navigation.PushModalAsync(new PracticeView(question));
41 | }
42 |
43 | private async void youtubeButton_Clicked(object sender, EventArgs e)
44 | {
45 | await Browser.OpenAsync(Link, BrowserLaunchMode.SystemPreferred);
46 | }
47 | }
48 | }
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/MainPage.xaml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
20 |
21 |
32 |
33 |
46 |
47 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/MainPage.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.ComponentModel;
4 | using System.Diagnostics;
5 | using System.Linq;
6 | using System.Text;
7 | using System.Threading.Tasks;
8 | using Xamarin.Essentials;
9 | using Xamarin.Forms;
10 |
11 | namespace CodeCapture
12 | {
13 | // Learn more about making custom code visible in the Xamarin.Forms previewer
14 | // by visiting https://aka.ms/xamarinforms-previewer
15 | [DesignTimeVisible(false)]
16 | public partial class MainPage : ContentPage
17 | {
18 | public MainPage()
19 | {
20 | InitializeComponent();
21 | }
22 |
23 | private async void menuButton_Clicked(object sender, EventArgs e)
24 | {
25 | await Navigation.PushModalAsync(new LessonMenu());
26 | }
27 |
28 | private async void aboutButton_Clicked(object sender, EventArgs e)
29 | {
30 | await Navigation.PushModalAsync(new AboutUs());
31 | }
32 | }
33 | }
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/Models/CompileModels/Input.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace CodeCapture.Models.CompileModels
6 | {
7 | class Input
8 | {
9 | public string script { get; set; }
10 | public string language { get; set; }
11 | public string stdin { get; set; }
12 | public string versionIndex { get; set; }
13 | public string clientId { get; set; }
14 | public string clientSecret { get; set; }
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/Models/CompileModels/Output.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace CodeCapture.Models.CompileModels
6 | {
7 | class Output
8 | {
9 | public string output { get; set; }
10 | public int statusCode { get; set; }
11 | public string memory { get; set; }
12 | public string cpuTime { get; set; }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/Models/README.md:
--------------------------------------------------------------------------------
1 | You may have noticed that there are references to a file **Secrets** in **namespace CodeCapture.Models** at various instances. That file has not been added to the repository as it contains the following sensitive information:
2 |
3 | * Gmail Address
4 | * Gmail Password
5 | * Azure Computer Vision Read API Subscription Key
6 | * Azure Computer Vision Read API Endpoint
7 | * JDoodle Compiler API Client ID
8 | * JDoodle Compiler API Client Secret
9 | * Twilio Account SID
10 | * Twilio Auth Token
11 | * Twilio SMS-Capable Phone Number
12 |
13 | You can create your own version of the **Secrets.cs** in this folder in the following format:
14 |
15 | ```csharp
16 |
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Text;
20 |
21 | namespace CodeCapture.Models
22 | {
23 | class Secrets
24 | {
25 | public string EMAIL_address { get; set; } = ;
26 | public string EMAIL_password { get; set; } = ;
27 | public string READ_subscriptionKey { get; set; } = ;
28 | public string READ_endpoint { get; set; } = ;
29 | public string JDOODLE_clientId { get; set; } = ;
30 | public string JDOODLE_clientSecret { get; set; } = ;
31 | public string TWILIO_accountSID { get; set; } = ;
32 | public string TWILIO_authToken { get; set; } = ;
33 | public string TWILIO_phoneNumber { get; set; } = ;
34 | }
35 | }
36 |
37 | ```
38 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/Models/ReadModels/AnalyzeResult.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace CodeCapture.Models.ReadModels
6 | {
7 | public class AnalyzeResult
8 | {
9 | public string version { get; set; }
10 | public List readResults { get; set; }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/Models/ReadModels/Line.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace CodeCapture.Models.ReadModels
6 | {
7 | public class Line
8 | {
9 | public List boundingBox { get; set; }
10 | public string text { get; set; }
11 | public List words { get; set; }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/Models/ReadModels/ReadResult.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace CodeCapture.Models.ReadModels
6 | {
7 | public class ReadResult
8 | {
9 | public int page { get; set; }
10 | public string language { get; set; }
11 | public double angle { get; set; }
12 | public int width { get; set; }
13 | public int height { get; set; }
14 | public string unit { get; set; }
15 | public List lines { get; set; }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/Models/ReadModels/Root.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace CodeCapture.Models.ReadModels
6 | {
7 | public class Root
8 | {
9 | public string status { get; set; }
10 | public DateTime createdDateTime { get; set; }
11 | public DateTime lastUpdatedDateTime { get; set; }
12 | public AnalyzeResult analyzeResult { get; set; }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/Models/ReadModels/Word.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Text;
4 |
5 | namespace CodeCapture.Models.ReadModels
6 | {
7 | public class Word
8 | {
9 | public List boundingBox { get; set; }
10 | public string text { get; set; }
11 | public double confidence { get; set; }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/PracticeView.xaml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
16 |
17 |
27 |
28 |
35 |
36 |
48 |
49 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/CodeCapture/CodeCapture/PracticeView.xaml.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Linq;
4 | using System.Text;
5 | using System.Threading.Tasks;
6 |
7 | using Xamarin.Forms;
8 | using Xamarin.Forms.Xaml;
9 |
10 | namespace CodeCapture
11 | {
12 | [XamlCompilation(XamlCompilationOptions.Compile)]
13 | public partial class PracticeView : ContentPage
14 | {
15 | public PracticeView(string ques)
16 | {
17 | InitializeComponent();
18 | question.Text = ques;
19 | question.IsReadOnly = true;
20 | }
21 |
22 | private async void returnButton_Clicked(object sender, EventArgs e)
23 | {
24 | await Navigation.PopModalAsync();
25 | }
26 |
27 | private async void playgroundButton_Clicked(object sender, EventArgs e)
28 | {
29 | await Navigation.PushModalAsync(new ImageCapture());
30 | }
31 | }
32 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Aditya Oberai
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 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CodeCapture
2 |
3 | 
4 |
5 | ## About CodeCapture
6 |
7 | **CodeCapture** is a cross-platform app that aims to assist remote learning experiences in Computer Science for students without computers by taking code from paper to mobile. CodeCapture has the functionality to extract code (C++, Java, JavaScript, or Python) from images of handwritten text and then allow the user to edit, compile, and share the result via email/SMS. We also have various lessons on C++ (more languages coming soon) to assist with students' Computer Science education especially in times like these, where the COVID-19 pandemic and enforced lockdown have kept students away from school.
8 |
9 | *Try the Android version by downloading the* [APK file from here](https://github.com/code-capture/CodeCapture-Xamarin/releases/tag/v1.1-beta)
10 |
11 | *Check out the demo video of the application* [here on YouTube](https://youtu.be/fWh1jjOQNMM)
12 |
13 | #### **CodeCapture** was featured in the [Student Showcase at .NET Conf 2020](https://www.youtube.com/watch?v=6oxFB73VReI)
14 |
15 | ## Inspiration
16 |
17 | While in recent times, the world has started moving towards pro-CS education, the fact is that buying computers is a distant dream for most students and educational institutions across the globe even today. In most developing countries, the ratio of CS students versus the number of computers available is highly skewed and most students are still learning programming via pen-and-paper. At the same time, however, the number of people who own mobile phones has significantly increased. Bridging this gap between pen-and-paper coding and coding on a computer by using a technology that people already own can bring a significant difference in the adoption of Computer Science education today.
18 |
19 | ## Technologies Used
20 |
21 | * Application: Xamarin.Forms (C#, XAML, .NET)
22 | * Extracting Code: Azure Computer Vision (Read API)
23 | * Compiling Code: JDoodle Compiler API
24 | * Result SMS: Twilio Programmable SMS
25 |
26 | ## Dependencies
27 |
28 | The following **NuGet** packages are necessary to build and run this project:
29 |
30 | * [Xamarin.Forms](https://www.nuget.org/packages/Xamarin.Forms/4.8.0.1364?_src=template)
31 |
32 | * [Xamarin.Essentials](https://www.nuget.org/packages/Xamarin.Essentials/1.5.3.2?_src=template)
33 |
34 | * [Microsoft.NETCore.UniversalWindowsPlatform](https://www.nuget.org/packages/Microsoft.NETCore.UniversalWindowsPlatform/6.2.10?_src=template)
35 |
36 | * [Newtonsoft.Json](https://www.nuget.org/packages/Newtonsoft.Json/12.0.3?_src=template)
37 |
38 | * [Xam.Plugin.Media](https://www.nuget.org/packages/Xam.Plugin.Media/5.0.1?_src=template)
39 |
40 | * [Twilio](https://www.nuget.org/packages/Twilio/)
41 |
42 | * [NETStandard.Library](https://www.nuget.org/packages/NETStandard.Library/2.0.3?_src=template) (SDK)
43 |
44 |
45 | ## Steps To Run
46 |
47 | Please follow the following steps to run the project in **Visual Studio Community 2019**
48 |
49 | 1. Clone the repository to a location of your preference
50 |
51 | 2. Open the project in Visual Studio 2019 by clicking on **CodeCapture.sln**
52 |
53 | 3. Install all the dependencies mentioned above using the **NuGet Package Manager**
54 |
55 | 4. Go to the location **../CodeCapture/CodeCapture/Models** and create a **Secrets.cs** file based on the template in the **Readme.md** file
56 | (For more information on how to create the resources for Azure Computer Vision Read API and JDoodle Compiler API, scroll below)
57 |
58 | 5. Build the project
59 |
60 | 6. Run and enjoy :)
61 |
62 | ## UI Of The Application
63 |
64 | |  |  |  |  |
65 | |-|-|-|-|
66 | | Starting Page | About Us | Lessons Menu | Lesson View |
67 | |  |  |  |  |
68 | | Practice View | Capturing Image | Extracting Code | Displaying Output |
69 |
70 | The application consists of the various Content Pages that the user sees when they use the app. You can check out the [demo video of the app here too](https://youtu.be/fWh1jjOQNMM).
71 |
72 |
73 | ## Future Plans
74 |
75 | We do have various plans for the future, such as:
76 |
77 | 1. Gamifying the progress for users
78 | 2. Support for more languages
79 | 3. Custom lessons on more technologies
80 | 4. A web-based learning platform designed for educators
81 | 5. Improvements in UI
82 |
83 | ## Special Credits
84 |
85 | Special thanks to [Aman Dhattarwal](https://www.youtube.com/channel/UCmXZxX_qexEZxhb5_vQKPCw) for the amazing [C++ Course](https://www.youtube.com/playlist?list=PLKKfKV1b9e8qBh_LG02V8R8qGRQjloeBj) he has published on YouTube, which we have utilised in the application.
86 |
--------------------------------------------------------------------------------