Compare commits
5 Commits
master
...
feature/pa
Author | SHA1 | Date | |
---|---|---|---|
|
9bb4888bab | ||
|
17e6ca60b1 | ||
|
1c14530139 | ||
|
8d69e7ffab | ||
|
d302425b88 |
@ -96,5 +96,20 @@
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\splash_screen.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\ic_home.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\ic_helpcircle.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\ic_settings.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\ic_folder.xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<AndroidResource Include="Resources\drawable\ic_logout.xml" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
|
||||
</Project>
|
91
MobileApp1.Android/Resources/Resource.designer.cs
generated
@ -11683,118 +11683,133 @@ namespace MobileApp1.Droid
|
||||
public const int design_snackbar_background = 2131165292;
|
||||
|
||||
// aapt resource value: 0x7F07006D
|
||||
public const int ic_mtrl_checked_circle = 2131165293;
|
||||
public const int ic_folder = 2131165293;
|
||||
|
||||
// aapt resource value: 0x7F07006E
|
||||
public const int ic_mtrl_chip_checked_black = 2131165294;
|
||||
public const int ic_helpcircle = 2131165294;
|
||||
|
||||
// aapt resource value: 0x7F07006F
|
||||
public const int ic_mtrl_chip_checked_circle = 2131165295;
|
||||
public const int ic_home = 2131165295;
|
||||
|
||||
// aapt resource value: 0x7F070070
|
||||
public const int ic_mtrl_chip_close_circle = 2131165296;
|
||||
public const int ic_logout = 2131165296;
|
||||
|
||||
// aapt resource value: 0x7F070071
|
||||
public const int material_ic_calendar_black_24dp = 2131165297;
|
||||
public const int ic_mtrl_checked_circle = 2131165297;
|
||||
|
||||
// aapt resource value: 0x7F070072
|
||||
public const int material_ic_clear_black_24dp = 2131165298;
|
||||
public const int ic_mtrl_chip_checked_black = 2131165298;
|
||||
|
||||
// aapt resource value: 0x7F070073
|
||||
public const int material_ic_edit_black_24dp = 2131165299;
|
||||
public const int ic_mtrl_chip_checked_circle = 2131165299;
|
||||
|
||||
// aapt resource value: 0x7F070074
|
||||
public const int material_ic_keyboard_arrow_left_black_24dp = 2131165300;
|
||||
public const int ic_mtrl_chip_close_circle = 2131165300;
|
||||
|
||||
// aapt resource value: 0x7F070075
|
||||
public const int material_ic_keyboard_arrow_right_black_24dp = 2131165301;
|
||||
public const int ic_settings = 2131165301;
|
||||
|
||||
// aapt resource value: 0x7F070076
|
||||
public const int material_ic_menu_arrow_down_black_24dp = 2131165302;
|
||||
public const int material_ic_calendar_black_24dp = 2131165302;
|
||||
|
||||
// aapt resource value: 0x7F070077
|
||||
public const int material_ic_menu_arrow_up_black_24dp = 2131165303;
|
||||
public const int material_ic_clear_black_24dp = 2131165303;
|
||||
|
||||
// aapt resource value: 0x7F070078
|
||||
public const int mtrl_dialog_background = 2131165304;
|
||||
public const int material_ic_edit_black_24dp = 2131165304;
|
||||
|
||||
// aapt resource value: 0x7F070079
|
||||
public const int mtrl_dropdown_arrow = 2131165305;
|
||||
public const int material_ic_keyboard_arrow_left_black_24dp = 2131165305;
|
||||
|
||||
// aapt resource value: 0x7F07007A
|
||||
public const int mtrl_ic_arrow_drop_down = 2131165306;
|
||||
public const int material_ic_keyboard_arrow_right_black_24dp = 2131165306;
|
||||
|
||||
// aapt resource value: 0x7F07007B
|
||||
public const int mtrl_ic_arrow_drop_up = 2131165307;
|
||||
public const int material_ic_menu_arrow_down_black_24dp = 2131165307;
|
||||
|
||||
// aapt resource value: 0x7F07007C
|
||||
public const int mtrl_ic_cancel = 2131165308;
|
||||
public const int material_ic_menu_arrow_up_black_24dp = 2131165308;
|
||||
|
||||
// aapt resource value: 0x7F07007D
|
||||
public const int mtrl_ic_error = 2131165309;
|
||||
public const int mtrl_dialog_background = 2131165309;
|
||||
|
||||
// aapt resource value: 0x7F07007E
|
||||
public const int mtrl_popupmenu_background = 2131165310;
|
||||
public const int mtrl_dropdown_arrow = 2131165310;
|
||||
|
||||
// aapt resource value: 0x7F07007F
|
||||
public const int mtrl_popupmenu_background_dark = 2131165311;
|
||||
public const int mtrl_ic_arrow_drop_down = 2131165311;
|
||||
|
||||
// aapt resource value: 0x7F070080
|
||||
public const int mtrl_tabs_default_indicator = 2131165312;
|
||||
public const int mtrl_ic_arrow_drop_up = 2131165312;
|
||||
|
||||
// aapt resource value: 0x7F070081
|
||||
public const int navigation_empty_icon = 2131165313;
|
||||
public const int mtrl_ic_cancel = 2131165313;
|
||||
|
||||
// aapt resource value: 0x7F070082
|
||||
public const int notification_action_background = 2131165314;
|
||||
public const int mtrl_ic_error = 2131165314;
|
||||
|
||||
// aapt resource value: 0x7F070083
|
||||
public const int notification_bg = 2131165315;
|
||||
public const int mtrl_popupmenu_background = 2131165315;
|
||||
|
||||
// aapt resource value: 0x7F070084
|
||||
public const int notification_bg_low = 2131165316;
|
||||
public const int mtrl_popupmenu_background_dark = 2131165316;
|
||||
|
||||
// aapt resource value: 0x7F070085
|
||||
public const int notification_bg_low_normal = 2131165317;
|
||||
public const int mtrl_tabs_default_indicator = 2131165317;
|
||||
|
||||
// aapt resource value: 0x7F070086
|
||||
public const int notification_bg_low_pressed = 2131165318;
|
||||
public const int navigation_empty_icon = 2131165318;
|
||||
|
||||
// aapt resource value: 0x7F070087
|
||||
public const int notification_bg_normal = 2131165319;
|
||||
public const int notification_action_background = 2131165319;
|
||||
|
||||
// aapt resource value: 0x7F070088
|
||||
public const int notification_bg_normal_pressed = 2131165320;
|
||||
public const int notification_bg = 2131165320;
|
||||
|
||||
// aapt resource value: 0x7F070089
|
||||
public const int notification_icon_background = 2131165321;
|
||||
public const int notification_bg_low = 2131165321;
|
||||
|
||||
// aapt resource value: 0x7F07008A
|
||||
public const int notification_template_icon_bg = 2131165322;
|
||||
public const int notification_bg_low_normal = 2131165322;
|
||||
|
||||
// aapt resource value: 0x7F07008B
|
||||
public const int notification_template_icon_low_bg = 2131165323;
|
||||
public const int notification_bg_low_pressed = 2131165323;
|
||||
|
||||
// aapt resource value: 0x7F07008C
|
||||
public const int notification_tile_bg = 2131165324;
|
||||
public const int notification_bg_normal = 2131165324;
|
||||
|
||||
// aapt resource value: 0x7F07008D
|
||||
public const int notify_panel_notification_icon_bg = 2131165325;
|
||||
public const int notification_bg_normal_pressed = 2131165325;
|
||||
|
||||
// aapt resource value: 0x7F07008E
|
||||
public const int splash_logo = 2131165326;
|
||||
public const int notification_icon_background = 2131165326;
|
||||
|
||||
// aapt resource value: 0x7F07008F
|
||||
public const int splash_screen = 2131165327;
|
||||
public const int notification_template_icon_bg = 2131165327;
|
||||
|
||||
// aapt resource value: 0x7F070090
|
||||
public const int test_custom_background = 2131165328;
|
||||
public const int notification_template_icon_low_bg = 2131165328;
|
||||
|
||||
// aapt resource value: 0x7F070091
|
||||
public const int tooltip_frame_dark = 2131165329;
|
||||
public const int notification_tile_bg = 2131165329;
|
||||
|
||||
// aapt resource value: 0x7F070092
|
||||
public const int tooltip_frame_light = 2131165330;
|
||||
public const int notify_panel_notification_icon_bg = 2131165330;
|
||||
|
||||
// aapt resource value: 0x7F070093
|
||||
public const int splash_logo = 2131165331;
|
||||
|
||||
// aapt resource value: 0x7F070094
|
||||
public const int splash_screen = 2131165332;
|
||||
|
||||
// aapt resource value: 0x7F070095
|
||||
public const int test_custom_background = 2131165333;
|
||||
|
||||
// aapt resource value: 0x7F070096
|
||||
public const int tooltip_frame_dark = 2131165334;
|
||||
|
||||
// aapt resource value: 0x7F070097
|
||||
public const int tooltip_frame_light = 2131165335;
|
||||
|
||||
static Drawable()
|
||||
{
|
||||
|
12
MobileApp1.Android/Resources/drawable/ic_folder.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z" />
|
||||
</vector>
|
19
MobileApp1.Android/Resources/drawable/ic_helpcircle.xml
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" />
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M 12 17 L 12.01 17" />
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M 12 2 C 17.5228474983 2 22 6.47715250169 22 12 C 22 17.5228474983 17.5228474983 22 12 22 C 6.47715250169 22 2 17.5228474983 2 12 C 2 6.47715250169 6.47715250169 2 12 2 Z" />
|
||||
</vector>
|
16
MobileApp1.Android/Resources/drawable/ic_home.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M 9 22 L 9 12 L 15 12 L 15 22 " />
|
||||
</vector>
|
20
MobileApp1.Android/Resources/drawable/ic_logout.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" />
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M 16 17 L 21 12 L 16 7 " />
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M 21 12 L 9 12" />
|
||||
</vector>
|
16
MobileApp1.Android/Resources/drawable/ic_settings.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M 12 9 C 13.6568542495 9 15 10.3431457505 15 12 C 15 13.6568542495 13.6568542495 15 12 15 C 10.3431457505 15 9 13.6568542495 9 12 C 9 10.3431457505 10.3431457505 9 12 9 Z" />
|
||||
<path
|
||||
android:strokeColor="#000000"
|
||||
android:strokeWidth="2"
|
||||
android:pathData="M19.4 15a1.65 1.65 0 0 0 0.33 1.82l0.06 0.06 a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-0.06-0.06a1.65 1.65 0 0 0-1.82-0.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-0.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82 0.33 l-0.06 0.06 a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l0.06-0.06a1.65 1.65 0 0 0 0.33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h0.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-0.33-1.82l-0.06-0.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l0.06 0.06 a1.65 1.65 0 0 0 1.82 0.33 H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v0.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-0.33l0.06-0.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-0.06 0.06 a1.65 1.65 0 0 0-0.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-0.09a1.65 1.65 0 0 0-1.51 1z" />
|
||||
</vector>
|
@ -18,6 +18,7 @@ namespace MobileApp1
|
||||
//MainPage = new AppShell();
|
||||
|
||||
MainPage = new NavigationPage(new LoginPage());
|
||||
//MainPage = new MainPage();
|
||||
}
|
||||
|
||||
protected override void OnStart()
|
||||
|
@ -1,9 +0,0 @@
|
||||
namespace MobileApp1
|
||||
{
|
||||
public class ServiceResult
|
||||
{
|
||||
public bool IsSuccess { get; set; }
|
||||
public string Message { get; set; }
|
||||
|
||||
}
|
||||
}
|
16
MobileApp1/DTO/ServiceResult.cs
Normal file
@ -0,0 +1,16 @@
|
||||
namespace MobileApp1
|
||||
{
|
||||
public class ServiceResult
|
||||
{
|
||||
public static ServiceResult Create(bool isSuccess, string message) => new ServiceResult()
|
||||
{
|
||||
IsSuccess = isSuccess,
|
||||
Message = message
|
||||
};
|
||||
|
||||
|
||||
public bool IsSuccess { get; set; }
|
||||
public string Message { get; set; }
|
||||
|
||||
}
|
||||
}
|
10
MobileApp1/DTO/WelcomePackResult.cs
Normal file
@ -0,0 +1,10 @@
|
||||
namespace MobileApp1
|
||||
{
|
||||
public class WelcomePackResult : ServiceResult
|
||||
{
|
||||
public int NoticesCount { get; set; } = 0;
|
||||
|
||||
public int MessagesCount { get; set; } = 0;
|
||||
|
||||
}
|
||||
}
|
@ -1,45 +1,101 @@
|
||||
using Xamarin.Forms;
|
||||
using System;
|
||||
using Xamarin.Forms;
|
||||
|
||||
namespace MobileApp1.Views
|
||||
{
|
||||
public class ContentPageHelper
|
||||
{
|
||||
|
||||
public static App GetApp(ContentPage view)
|
||||
public static App GetApp(ContentPage view) => (App)GetParentElement<App>(view);
|
||||
//{
|
||||
// if (view == null) return null;
|
||||
|
||||
// Element item = view.Parent;
|
||||
|
||||
// while (true)
|
||||
// {
|
||||
// if (item == null) break;
|
||||
// if (item is App) break;
|
||||
|
||||
// item = item.Parent;
|
||||
// }
|
||||
|
||||
// return (item as App);
|
||||
//}
|
||||
|
||||
public static Application GetApplication(ContentPage view) => (Application)GetParentElement<Application>(view);
|
||||
//{
|
||||
// if (view == null) return null;
|
||||
|
||||
// Element item = view.Parent;
|
||||
|
||||
// while (true)
|
||||
// {
|
||||
// if (item == null) break;
|
||||
// if (item is Application) break;
|
||||
|
||||
// item = item.Parent;
|
||||
// }
|
||||
|
||||
// return (item as Application);
|
||||
// }
|
||||
|
||||
public static MainPage GetMainPage(ContentPage view) => (MainPage)GetParentElement<MainPage>(view);
|
||||
|
||||
public static object GetParentElement<T>(ContentPage view)
|
||||
{
|
||||
if (view == null) return null;
|
||||
if (view == null) return default(T);
|
||||
|
||||
Element item = view.Parent;
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (item == null) break;
|
||||
if (item is App) break;
|
||||
if (item is T) break;
|
||||
|
||||
item = item.Parent;
|
||||
}
|
||||
|
||||
return (item as App);
|
||||
//try
|
||||
//{
|
||||
// return (T)Convert.ChangeType(item, typeof(T));
|
||||
//}
|
||||
//catch (InvalidCastException)
|
||||
//{
|
||||
// return default(T);
|
||||
//}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
public static Application GetApplication(ContentPage view)
|
||||
public static void SetDetailPage(ContentPage view, Type pageType, bool useNavigationPage = true) => SetDetailPage(view, (Page)Activator.CreateInstance(pageType), useNavigationPage);
|
||||
|
||||
public static void SetDetailPage(ContentPage view, Page page, bool useNavigationPage = true)
|
||||
{
|
||||
if (view == null) return null;
|
||||
if (view == null) return;
|
||||
if (view.Parent == null) return;
|
||||
if (page == null) return;
|
||||
|
||||
Element item = view.Parent;
|
||||
|
||||
while (true)
|
||||
MainPage rs = GetMainPage(view);
|
||||
if (rs == null)
|
||||
{
|
||||
if (item == null) break;
|
||||
if (item is Application) break;
|
||||
|
||||
item = item.Parent;
|
||||
return;
|
||||
}
|
||||
|
||||
return (item as Application);
|
||||
Device.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
if (useNavigationPage)
|
||||
{
|
||||
rs.Detail = new NavigationPage(page);
|
||||
}
|
||||
else
|
||||
{
|
||||
rs.Detail = page;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void SetMainPage(ContentPage view, Page page)
|
||||
public static void SetMainPage(ContentPage view, Page page, bool useNavigationPage = false)
|
||||
{
|
||||
if (view == null) return;
|
||||
if (view.Parent == null) return;
|
||||
@ -51,8 +107,17 @@ namespace MobileApp1.Views
|
||||
return;
|
||||
}
|
||||
|
||||
//rs.MainPage = new NavigationPage(new PasswordResetPage());
|
||||
rs.MainPage = page;
|
||||
Device.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
if (useNavigationPage)
|
||||
{
|
||||
rs.MainPage = new NavigationPage(page);
|
||||
}
|
||||
else
|
||||
{
|
||||
rs.MainPage = page;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static async void PushMainPageNavigation(ContentPage view, Page page)
|
||||
|
@ -6,24 +6,43 @@ namespace MobileApp1.Views
|
||||
public class ContentViewHelper
|
||||
{
|
||||
|
||||
public static ContentPage GetContentPage(ContentView view)
|
||||
{
|
||||
if (view == null) return null;
|
||||
public static App GetApp(ContentView view) => (App)GetParentElement<App>(view);
|
||||
//{
|
||||
// if (view == null) return null;
|
||||
|
||||
Element item = view.Parent;
|
||||
// Element item = view.Parent;
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (item == null) break;
|
||||
if (item is ContentPage) break;
|
||||
// while (true)
|
||||
// {
|
||||
// if (item == null) break;
|
||||
// if (item is App) break;
|
||||
|
||||
item = item.Parent;
|
||||
}
|
||||
// item = item.Parent;
|
||||
// }
|
||||
|
||||
return (item as ContentPage);
|
||||
}
|
||||
// return (item as App);
|
||||
//}
|
||||
|
||||
public static T GetContentPage<T>(ContentView view)
|
||||
public static Application GetApplication(ContentView view) => (Application)GetParentElement<Application>(view);
|
||||
//{
|
||||
// if (view == null) return null;
|
||||
|
||||
// Element item = view.Parent;
|
||||
|
||||
// while (true)
|
||||
// {
|
||||
// if (item == null) break;
|
||||
// if (item is Application) break;
|
||||
|
||||
// item = item.Parent;
|
||||
// }
|
||||
|
||||
// return (item as Application);
|
||||
//}
|
||||
|
||||
public static ContentPage GetContentPage(ContentView view) => (ContentPage)GetParentElement<ContentPage>(view);
|
||||
|
||||
public static object GetParentElement<T>(ContentView view)
|
||||
{
|
||||
if (view == null) return default(T);
|
||||
|
||||
@ -37,48 +56,16 @@ namespace MobileApp1.Views
|
||||
item = item.Parent;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return (T)Convert.ChangeType(item, typeof(T));
|
||||
}
|
||||
catch (InvalidCastException)
|
||||
{
|
||||
return default(T);
|
||||
}
|
||||
}
|
||||
//try
|
||||
//{
|
||||
// return (T)Convert.ChangeType(item, typeof(T));
|
||||
//}
|
||||
//catch (InvalidCastException)
|
||||
//{
|
||||
// return default(T);
|
||||
//}
|
||||
|
||||
public static App GetApp(ContentView view)
|
||||
{
|
||||
if (view == null) return null;
|
||||
|
||||
Element item = view.Parent;
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (item == null) break;
|
||||
if (item is App) break;
|
||||
|
||||
item = item.Parent;
|
||||
}
|
||||
|
||||
return (item as App);
|
||||
}
|
||||
|
||||
public static Application GetApplication(ContentView view)
|
||||
{
|
||||
if (view == null) return null;
|
||||
|
||||
Element item = view.Parent;
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (item == null) break;
|
||||
if (item is Application) break;
|
||||
|
||||
item = item.Parent;
|
||||
}
|
||||
|
||||
return (item as Application);
|
||||
return item;
|
||||
}
|
||||
|
||||
public static void SetMainPage(ContentView view, Page page)
|
||||
|
@ -13,6 +13,9 @@
|
||||
<Compile Remove="Views\ItemDetailPage.xaml.cs" />
|
||||
<Compile Remove="Views\ItemsPage.xaml.cs" />
|
||||
<Compile Remove="Views\LoginPage1.xaml.cs" />
|
||||
<Compile Remove="Views\MainPageDetail.xaml.cs" />
|
||||
<Compile Remove="Views\MainPageFlyout.xaml.cs" />
|
||||
<Compile Remove="Views\MainPageFlyoutMenuItem.cs" />
|
||||
<Compile Remove="Views\NewItemPage.xaml.cs" />
|
||||
</ItemGroup>
|
||||
|
||||
@ -21,6 +24,8 @@
|
||||
<EmbeddedResource Remove="Views\ItemDetailPage.xaml" />
|
||||
<EmbeddedResource Remove="Views\ItemsPage.xaml" />
|
||||
<EmbeddedResource Remove="Views\LoginPage1.xaml" />
|
||||
<EmbeddedResource Remove="Views\MainPageDetail.xaml" />
|
||||
<EmbeddedResource Remove="Views\MainPageFlyout.xaml" />
|
||||
<EmbeddedResource Remove="Views\NewItemPage.xaml" />
|
||||
</ItemGroup>
|
||||
|
||||
@ -30,12 +35,18 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Update="Views\AboutPage.xaml.cs">
|
||||
<DependentUpon>AboutPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Views\Content\LoadingIndicatorView.xaml.cs">
|
||||
<DependentUpon>LoadingIndicatorView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Views\Content\CompanyHeaderView.xaml.cs">
|
||||
<DependentUpon>CompanyHeaderView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Views\LogoutPage.xaml.cs">
|
||||
<DependentUpon>LogoutPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Views\PasswordResetPage.xaml.cs">
|
||||
<DependentUpon>PasswordResetPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
@ -51,14 +62,38 @@
|
||||
<Compile Update="Views\Content\Login\LoginView.xaml.cs">
|
||||
<DependentUpon>LoginView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Views\WelcomePage.xaml.cs">
|
||||
<DependentUpon>WelcomePage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Update="Views\MyFoldersPage.xaml.cs">
|
||||
<DependentUpon>MyFoldersPage.xaml</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Views\AboutPage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Views\FlyoutMenuPage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Views\LoginPage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Views\Content\Login\LoginView.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Views\MainPage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Views\WelcomePage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Views\SettingsPage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Update="Views\MyFoldersPage.xaml">
|
||||
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
</Project>
|
13
MobileApp1/Models/FlyoutPageItem.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using System;
|
||||
|
||||
namespace MobileApp1.Models
|
||||
{
|
||||
public class FlyoutPageItem
|
||||
{
|
||||
public string Title { get; set; }
|
||||
|
||||
public string Icon { get; set; }
|
||||
|
||||
public Type TargetType { get; set; }
|
||||
}
|
||||
}
|
@ -1,10 +1,15 @@
|
||||
namespace MobileApp1.Services
|
||||
using System;
|
||||
|
||||
namespace MobileApp1.Services
|
||||
{
|
||||
public class CorporationMockService : ICorporationService
|
||||
{
|
||||
private Random randy = null;
|
||||
|
||||
|
||||
public CorporationMockService()
|
||||
{
|
||||
|
||||
randy = new Random();
|
||||
}
|
||||
|
||||
|
||||
@ -19,41 +24,43 @@
|
||||
{
|
||||
System.Threading.Thread.Sleep(6000);
|
||||
|
||||
this.DisplayName = username;
|
||||
//this.DisplayName = username;
|
||||
this.DisplayName = "John";
|
||||
this.IsLoggedIn = true;
|
||||
|
||||
return new ServiceResult()
|
||||
{
|
||||
IsSuccess = true,
|
||||
Message = "Logged In"
|
||||
};
|
||||
return ServiceResult.Create(true, "Logged In");
|
||||
}
|
||||
|
||||
public ServiceResult Logout()
|
||||
{
|
||||
System.Threading.Thread.Sleep(6000);
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
|
||||
this.DisplayName = string.Empty;
|
||||
this.IsLoggedIn = false;
|
||||
|
||||
return new ServiceResult()
|
||||
{
|
||||
IsSuccess = true,
|
||||
Message = "Logged Out"
|
||||
};
|
||||
return ServiceResult.Create(true, "Logged Out");
|
||||
}
|
||||
|
||||
public ServiceResult RequestPasswordReset(string username)
|
||||
{
|
||||
System.Threading.Thread.Sleep(6000);
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
|
||||
this.DisplayName = string.Empty;
|
||||
this.IsLoggedIn = false;
|
||||
|
||||
return new ServiceResult()
|
||||
return ServiceResult.Create(true, "Password Reset Requested");
|
||||
}
|
||||
|
||||
public WelcomePackResult RetrieveWelcomePack()
|
||||
{
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
|
||||
return new WelcomePackResult()
|
||||
{
|
||||
IsSuccess = true,
|
||||
Message = "Password Reset Requested"
|
||||
Message = "",
|
||||
MessagesCount = randy.Next(0, 25),
|
||||
NoticesCount = randy.Next(0, 10)
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -20,11 +20,7 @@
|
||||
this.DisplayName = username;
|
||||
this.IsLoggedIn = true;
|
||||
|
||||
return new ServiceResult()
|
||||
{
|
||||
IsSuccess = true,
|
||||
Message = "Logged In"
|
||||
};
|
||||
return ServiceResult.Create(true, "Logged In");
|
||||
}
|
||||
|
||||
public ServiceResult Logout()
|
||||
@ -32,11 +28,7 @@
|
||||
this.DisplayName = string.Empty;
|
||||
this.IsLoggedIn = false;
|
||||
|
||||
return new ServiceResult()
|
||||
{
|
||||
IsSuccess = true,
|
||||
Message = "Logged Out"
|
||||
};
|
||||
return ServiceResult.Create(true, "Logged Out");
|
||||
}
|
||||
|
||||
public ServiceResult RequestPasswordReset(string username)
|
||||
@ -44,10 +36,19 @@
|
||||
this.DisplayName = string.Empty;
|
||||
this.IsLoggedIn = false;
|
||||
|
||||
return new ServiceResult()
|
||||
return ServiceResult.Create(true, "Password Reset Requested");
|
||||
}
|
||||
|
||||
public WelcomePackResult RetrieveWelcomePack()
|
||||
{
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
|
||||
return new WelcomePackResult()
|
||||
{
|
||||
IsSuccess = true,
|
||||
Message = "Password Reset Requested"
|
||||
Message = "",
|
||||
MessagesCount = 0,
|
||||
NoticesCount = 0
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -15,5 +15,7 @@
|
||||
|
||||
ServiceResult RequestPasswordReset(string username);
|
||||
|
||||
WelcomePackResult RetrieveWelcomePack();
|
||||
|
||||
}
|
||||
}
|
||||
|
12
MobileApp1/Views/AboutPage.xaml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:views="clr-namespace:MobileApp1.Views"
|
||||
x:Class="MobileApp1.Views.AboutPage"
|
||||
Title="About">
|
||||
<ContentPage.Content>
|
||||
<StackLayout Margin="20">
|
||||
<views:AboutView />
|
||||
</StackLayout>
|
||||
</ContentPage.Content>
|
||||
</ContentPage>
|
20
MobileApp1/Views/AboutPage.xaml.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace MobileApp1.Views
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class AboutPage : ContentPage
|
||||
{
|
||||
public AboutPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
@ -24,7 +24,7 @@ namespace MobileApp1.Views
|
||||
{
|
||||
isBusy = value;
|
||||
|
||||
LoginPage cp = ContentViewHelper.GetContentPage<LoginPage>(this);
|
||||
LoginPage cp = (LoginPage)ContentViewHelper.GetParentElement<LoginPage>(this);
|
||||
if (cp != null)
|
||||
{
|
||||
cp.IsBusy = value;
|
||||
@ -69,16 +69,15 @@ namespace MobileApp1.Views
|
||||
|
||||
this.IsBusy = false;
|
||||
|
||||
//ContentViewHelper.SetMainPage(this, new AppShell());
|
||||
|
||||
//await cp.DisplayAlert("Clicked", "Login", "OK");
|
||||
|
||||
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
/// part 2
|
||||
}
|
||||
|
||||
ContentViewHelper.SetMainPage(this, new MainPage());
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -24,7 +24,7 @@ namespace MobileApp1.Views
|
||||
{
|
||||
isBusy = value;
|
||||
|
||||
LoginPage cp = ContentViewHelper.GetContentPage<LoginPage>(this);
|
||||
LoginPage cp = (LoginPage)ContentViewHelper.GetParentElement<LoginPage>(this);
|
||||
if (cp != null)
|
||||
{
|
||||
cp.IsBusy = value;
|
||||
|
65
MobileApp1/Views/FlyoutMenuPage.xaml
Normal file
@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
xmlns:models="clr-namespace:MobileApp1.Models"
|
||||
xmlns:views="clr-namespace:MobileApp1.Views"
|
||||
x:Class="MobileApp1.Views.FlyoutMenuPage"
|
||||
Padding="0, 20, 0, 0"
|
||||
Title="Menu">
|
||||
<StackLayout>
|
||||
<Image Source="company_logo.png" WidthRequest="{OnPlatform iOS=180, Android=180}" HorizontalOptions="Center" Margin="0, 0, 0, 20" />
|
||||
|
||||
<ListView x:Name="listView1">
|
||||
<!--<ListView.Footer>
|
||||
<StackLayout VerticalOptions="Start">
|
||||
<Grid Padding="5, 10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="30" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Image Grid.Row="0" Grid.Column="0" Source="logout.png" Margin="3" />
|
||||
<Label Grid.Row="0" Grid.Column="1" Text="Logout" />
|
||||
</Grid>
|
||||
</StackLayout>
|
||||
</ListView.Footer>-->
|
||||
<ListView.ItemsSource>
|
||||
<x:Array Type="{x:Type models:FlyoutPageItem}">
|
||||
<models:FlyoutPageItem Title="Home" Icon="ic_home" TargetType="{x:Type views:WelcomePage}" />
|
||||
<models:FlyoutPageItem Title="My Folders" Icon="ic_folder" TargetType="{x:Type views:MyFoldersPage}" />
|
||||
<models:FlyoutPageItem Title="Settings" Icon="ic_settings" TargetType="{x:Type views:SettingsPage}" />
|
||||
<models:FlyoutPageItem Title="About" Icon="ic_helpcircle" TargetType="{x:Type views:AboutPage}" />
|
||||
<models:FlyoutPageItem Title="Logout" Icon="ic_logout" TargetType="{x:Type views:LogoutPage}" />
|
||||
</x:Array>
|
||||
</ListView.ItemsSource>
|
||||
<ListView.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<ViewCell>
|
||||
<Grid Padding="5, 10, 5, 10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="30" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Image Grid.Column="0" Source="{Binding Icon}" VerticalOptions="Center" />
|
||||
<Label Grid.Column="1" Text="{Binding Title}" VerticalTextAlignment="Center" />
|
||||
</Grid>
|
||||
</ViewCell>
|
||||
</DataTemplate>
|
||||
</ListView.ItemTemplate>
|
||||
</ListView>
|
||||
|
||||
<!--<ListView x:Name="listView" x:FieldModifier="Public" VerticalOptions="Start">
|
||||
<StackLayout>
|
||||
<Grid Padding="5, 10" VerticalOptions="Start">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="30"/>
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Image Grid.Column="0" Source="logout.png" />
|
||||
<Label Grid.Column="1" Text="Logout" />
|
||||
</Grid>
|
||||
</StackLayout>
|
||||
</ListView>-->
|
||||
|
||||
</StackLayout>
|
||||
</ContentPage>
|
47
MobileApp1/Views/FlyoutMenuPage.xaml.cs
Normal file
@ -0,0 +1,47 @@
|
||||
using MobileApp1.Models;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace MobileApp1.Views
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class FlyoutMenuPage : ContentPage
|
||||
{
|
||||
public FlyoutMenuPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
listView1.ItemSelected += listView1_ItemSelected;
|
||||
}
|
||||
|
||||
private async void listView1_ItemSelected(object sender, SelectedItemChangedEventArgs e)
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
var item = e.SelectedItem as FlyoutPageItem;
|
||||
if (item == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
MainPage mainPage = ContentPageHelper.GetMainPage(this);
|
||||
if (mainPage == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ContentPageHelper.SetDetailPage(this, item.TargetType);
|
||||
|
||||
Device.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
listView1.SelectedItem = null;
|
||||
|
||||
mainPage.IsPresented = false;
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
21
MobileApp1/Views/LogoutPage.xaml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:views="clr-namespace:MobileApp1.Views"
|
||||
x:Class="MobileApp1.Views.LogoutPage"
|
||||
Title="Logout">
|
||||
<ContentPage.Content>
|
||||
<ScrollView>
|
||||
<StackLayout Margin="20">
|
||||
<views:CompanyHeaderView />
|
||||
|
||||
<Label Text="Logout" FontSize="Body" />
|
||||
<Label Text="Logout of your account." />
|
||||
<Label Text="" Margin="0, 0, 0, 10" />
|
||||
|
||||
<Button x:Name="button1" Margin="0, 20, 0, 0" Text="Logout" Clicked="button1_Clicked" ></Button>
|
||||
|
||||
</StackLayout>
|
||||
</ScrollView>
|
||||
</ContentPage.Content>
|
||||
</ContentPage>
|
25
MobileApp1/Views/LogoutPage.xaml.cs
Normal file
@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace MobileApp1.Views
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class LogoutPage : ContentPage
|
||||
{
|
||||
public LogoutPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private async void button1_Clicked(object sender, EventArgs e)
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
ContentPageHelper.SetMainPage(this, new LoginPage());
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
15
MobileApp1/Views/MainPage.xaml
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<FlyoutPage xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:views="clr-namespace:MobileApp1.Views"
|
||||
x:Class="MobileApp1.Views.MainPage">
|
||||
<FlyoutPage.Flyout>
|
||||
<views:FlyoutMenuPage x:Name="flyoutPage" />
|
||||
</FlyoutPage.Flyout>
|
||||
<FlyoutPage.Detail>
|
||||
<NavigationPage>
|
||||
<x:Arguments>
|
||||
<views:WelcomePage />
|
||||
</x:Arguments>
|
||||
</NavigationPage>
|
||||
</FlyoutPage.Detail>
|
||||
</FlyoutPage>
|
15
MobileApp1/Views/MainPage.xaml.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace MobileApp1.Views
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class MainPage : FlyoutPage
|
||||
{
|
||||
public MainPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
16
MobileApp1/Views/MyFoldersPage.xaml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<TabbedPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
|
||||
x:Class="MobileApp1.Views.MyFoldersPage"
|
||||
Title="My Folders">
|
||||
<ContentPage
|
||||
Title="Folder 1"
|
||||
IconImageSource="ic_home" />
|
||||
<ContentPage
|
||||
Title="Folder 2"
|
||||
IconImageSource="ic_home" />
|
||||
<ContentPage
|
||||
Title="Folder 3"
|
||||
IconImageSource="ic_home" />
|
||||
</TabbedPage>
|
20
MobileApp1/Views/MyFoldersPage.xaml.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace MobileApp1.Views
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class MyFoldersPage : TabbedPage
|
||||
{
|
||||
public MyFoldersPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
61
MobileApp1/Views/SettingsPage.xaml
Normal file
@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:views="clr-namespace:MobileApp1.Views"
|
||||
x:Class="MobileApp1.Views.SettingsPage"
|
||||
Title="Settings">
|
||||
<ContentPage.Content>
|
||||
<ScrollView>
|
||||
<StackLayout Margin="20">
|
||||
<Grid Padding="0, 0, 0, 10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Grid.Row="0" Grid.Column="0" Text="CheckBox Setting" VerticalTextAlignment="Center" />
|
||||
<CheckBox Grid.Row="0" Grid.Column="1" x:Name="checkBox1" HorizontalOptions="EndAndExpand" />
|
||||
|
||||
<Label Grid.Row="1" Grid.Column="0" Text="Switch Setting" VerticalTextAlignment="Center" />
|
||||
<Switch Grid.Row="1" Grid.Column="1" x:Name="switchBox1" HorizontalOptions="EndAndExpand" />
|
||||
|
||||
<Label Grid.Row="2" Grid.Column="0" Text="Date Setting" VerticalTextAlignment="Center" />
|
||||
<DatePicker Grid.Row="2" Grid.Column="1" x:Name="datePicker1" HorizontalOptions="EndAndExpand" Format="dd/MM/yyyy" />
|
||||
|
||||
<Label Grid.Row="3" Grid.Column="0" Text="Time Setting" VerticalTextAlignment="Center" />
|
||||
<TimePicker Grid.Row="3" Grid.Column="1" x:Name="timePicker1" HorizontalOptions="EndAndExpand" Format="HH:mm" />
|
||||
|
||||
<!--<Label Grid.Row="3" Grid.Column="0" Text="TextBox Setting" VerticalTextAlignment="Center" />
|
||||
<Entry Grid.Row="3" Grid.Column="1" HorizontalOptions="EndAndExpand" />-->
|
||||
|
||||
<Label Grid.Row="4" Grid.Column="0" Text="Picker Setting" VerticalTextAlignment="Center" />
|
||||
<Picker Grid.Row="5" Grid.Column="1" x:Name="pickerBox1" HorizontalOptions="FillAndExpand">
|
||||
<Picker.Items>
|
||||
<x:String></x:String>
|
||||
<x:String>One</x:String>
|
||||
<x:String>Two</x:String>
|
||||
<x:String>Three</x:String>
|
||||
<x:String>Four</x:String>
|
||||
<x:String>Five</x:String>
|
||||
</Picker.Items>
|
||||
</Picker>
|
||||
|
||||
<!--<Label Grid.Row="5" Grid.Column="0" Text="TextBox Setting" VerticalTextAlignment="Center" />
|
||||
<RadioButton Grid.Row="5" Grid.Column="1" HorizontalOptions="EndAndExpand" />-->
|
||||
|
||||
<!--<Label Grid.Row="6" Grid.Column="0" Text="TextBox Setting" VerticalTextAlignment="Center" />
|
||||
<Slider Grid.Row="6" Grid.Column="1" HorizontalOptions="FillAndExpand" Minimum="0" Maximum="100" />-->
|
||||
|
||||
<!--<Label Grid.Row="5" Grid.Column="0" Text="TextBox Setting" VerticalTextAlignment="Center" />
|
||||
<Stepper Grid.Row="5" Grid.Column="1" HorizontalOptions="EndAndExpand" MinimumWidthRequest="100" />-->
|
||||
|
||||
</Grid>
|
||||
|
||||
<Button x:Name="button1" Margin="0, 20, 0, 0" Text="Save" Clicked="button1_Clicked"></Button>
|
||||
|
||||
<views:LoadingIndicatorView x:Name="loadingIndicatorView1" Margin="0, 20, 0, 0" />
|
||||
|
||||
</StackLayout>
|
||||
</ScrollView>
|
||||
</ContentPage.Content>
|
||||
</ContentPage>
|
87
MobileApp1/Views/SettingsPage.xaml.cs
Normal file
@ -0,0 +1,87 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace MobileApp1.Views
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class SettingsPage : ContentPage
|
||||
{
|
||||
protected bool isBusy = false;
|
||||
|
||||
public SettingsPage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
protected override void OnAppearing()
|
||||
{
|
||||
base.OnAppearing();
|
||||
|
||||
if (pickerBox1.Items.Count > 0) pickerBox1.SelectedIndex = 0;
|
||||
}
|
||||
|
||||
private bool IsBusy
|
||||
{
|
||||
get => isBusy;
|
||||
set
|
||||
{
|
||||
isBusy = value;
|
||||
|
||||
Device.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
loadingIndicatorView1.IsRunning = value;
|
||||
checkBox1.IsEnabled = switchBox1.IsEnabled = datePicker1.IsEnabled = pickerBox1.IsEnabled = timePicker1.IsEnabled = !value;
|
||||
button1.IsEnabled = !value;
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private async void button1_Clicked(object sender, EventArgs e)
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
//if (this.Parent == null)
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
|
||||
//ContentPage cp = ContentViewHelper.GetContentPage(this);
|
||||
//if (cp == null)
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
|
||||
//App ap = ContentViewHelper.GetApp(this);
|
||||
//if (ap == null)
|
||||
//{
|
||||
// return;
|
||||
//}
|
||||
|
||||
this.IsBusy = true;
|
||||
|
||||
//ServiceResult result = ap.CorporationService.Login(textbox1.Text, textbox2.Text);
|
||||
|
||||
loadingIndicatorView1.Message = "Saved";
|
||||
|
||||
Device.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
DisplayAlert("Settings", "Saved", "OK");
|
||||
});
|
||||
|
||||
this.IsBusy = false;
|
||||
|
||||
//ContentViewHelper.SetMainPage(this, new AppShell());
|
||||
|
||||
//if (result.IsSuccess)
|
||||
//{
|
||||
|
||||
//}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
33
MobileApp1/Views/WelcomePage.xaml
Normal file
@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ContentPage
|
||||
xmlns="http://xamarin.com/schemas/2014/forms"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:views="clr-namespace:MobileApp1.Views"
|
||||
x:Class="MobileApp1.Views.WelcomePage"
|
||||
Title="Home">
|
||||
<ContentPage.Content>
|
||||
<ScrollView>
|
||||
<StackLayout Margin="20">
|
||||
<views:CompanyHeaderView />
|
||||
|
||||
<StackLayout x:Name="panel1" Margin="0">
|
||||
<Label Text="Welcome to XYZ" FontSize="Body" />
|
||||
<Label x:Name="label1" Text="Hi, John." />
|
||||
<Label Text="" Margin="0, 0, 0, 10" />
|
||||
|
||||
<Label Text="Notices" FontSize="Body" />
|
||||
<Label x:Name="label2" Text="You have no notices" />
|
||||
<Label Text="" Margin="0, 0, 0, 10" />
|
||||
|
||||
<Label Text="Messages" FontSize="Body" />
|
||||
<Label x:Name="label3" Text="You have no messages" />
|
||||
<Label Text="" Margin="0, 0, 0, 10" />
|
||||
|
||||
<Button x:Name="button1" Margin="0, 20, 0, 0" Text="Let's Get Started" Clicked="button1_Clicked" ></Button>
|
||||
</StackLayout>
|
||||
|
||||
<views:LoadingIndicatorView x:Name="loadingIndicatorView1" Margin="0, 20, 0, 0" />
|
||||
|
||||
</StackLayout>
|
||||
</ScrollView>
|
||||
</ContentPage.Content>
|
||||
</ContentPage>
|
101
MobileApp1/Views/WelcomePage.xaml.cs
Normal file
@ -0,0 +1,101 @@
|
||||
using System;
|
||||
using System.Threading.Tasks;
|
||||
using Xamarin.Forms;
|
||||
using Xamarin.Forms.Xaml;
|
||||
|
||||
namespace MobileApp1.Views
|
||||
{
|
||||
[XamlCompilation(XamlCompilationOptions.Compile)]
|
||||
public partial class WelcomePage : ContentPage
|
||||
{
|
||||
protected bool isBusy = false;
|
||||
|
||||
|
||||
public WelcomePage()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
protected override void OnAppearing()
|
||||
{
|
||||
base.OnAppearing();
|
||||
|
||||
LoadPage();
|
||||
}
|
||||
|
||||
private bool IsBusy
|
||||
{
|
||||
get => isBusy;
|
||||
set
|
||||
{
|
||||
isBusy = value;
|
||||
|
||||
//LoginPage cp = (LoginPage)ContentViewHelper.GetParentElement<LoginPage>(this);
|
||||
//if (cp != null)
|
||||
//{
|
||||
// cp.IsBusy = value;
|
||||
//}
|
||||
|
||||
Device.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
loadingIndicatorView1.IsRunning = value;
|
||||
panel1.IsVisible = !value;
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private async void button1_Clicked(object sender, EventArgs e)
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
ContentPageHelper.SetDetailPage(this, typeof(MyFoldersPage));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private async void LoadPage()
|
||||
{
|
||||
await Task.Run(() =>
|
||||
{
|
||||
if (this.Parent == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
App ap = ContentPageHelper.GetApp(this);
|
||||
if (ap == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IsBusy = true;
|
||||
|
||||
WelcomePackResult result = ap.CorporationService.RetrieveWelcomePack();
|
||||
|
||||
loadingIndicatorView1.Message = result.Message;
|
||||
|
||||
IsBusy = false;
|
||||
|
||||
//ContentViewHelper.SetMainPage(this, new AppShell());
|
||||
|
||||
//await cp.DisplayAlert("Clicked", "Login", "OK");
|
||||
|
||||
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
|
||||
Device.BeginInvokeOnMainThread(() =>
|
||||
{
|
||||
label1.Text = string.Format("Hi, {0}.", ap.CorporationService.DisplayName);
|
||||
label2.Text = string.Format("You have {0} notice{1}", ((result.NoticesCount <= 0) ? "no": result.NoticesCount.ToString()), ((result.NoticesCount == 1) ? "" : "s"));
|
||||
label3.Text = string.Format("You have {0} message{1}", ((result.MessagesCount <= 0) ? "no": result.MessagesCount.ToString()), ((result.MessagesCount == 1) ? "" : "s"));
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 92 KiB |
1
Resources/ic/arrow-right-circle.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-arrow-right-circle"><circle cx="12" cy="12" r="10"></circle><polyline points="12 16 16 12 12 8"></polyline><line x1="8" y1="12" x2="16" y2="12"></line></svg>
|
After Width: | Height: | Size: 361 B |
60
Resources/ic/folder.svg
Normal file
@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="folder.svg"
|
||||
id="svg2518"
|
||||
version="1.1"
|
||||
class="feather feather-folder"
|
||||
stroke-linejoin="round"
|
||||
stroke-linecap="round"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
height="24"
|
||||
width="24">
|
||||
<metadata
|
||||
id="metadata2524">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs2522" />
|
||||
<sodipodi:namedview
|
||||
inkscape:current-layer="svg2518"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="845"
|
||||
inkscape:window-x="1072"
|
||||
inkscape:cy="12"
|
||||
inkscape:cx="12"
|
||||
inkscape:zoom="35.416667"
|
||||
showgrid="false"
|
||||
id="namedview2520"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-opacity:1"
|
||||
id="path2516"
|
||||
d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
54
Resources/ic/help-circle.svg
Normal file
@ -0,0 +1,54 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="feather feather-help-circle"
|
||||
version="1.1"
|
||||
id="svg909">
|
||||
<metadata
|
||||
id="metadata915">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs913" />
|
||||
<circle
|
||||
cx="12"
|
||||
cy="12"
|
||||
r="10"
|
||||
id="circle903"
|
||||
style="fill:none;stroke:#000000;stroke-opacity:1" />
|
||||
<g
|
||||
style="stroke:#000000;stroke-opacity:1;fill:none"
|
||||
id="g1915">
|
||||
<path
|
||||
style="stroke:#000000;stroke-opacity:1;fill:none"
|
||||
id="path905"
|
||||
d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-opacity:1"
|
||||
id="line907"
|
||||
y2="17"
|
||||
x2="12.01"
|
||||
y1="17"
|
||||
x1="12" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
41
Resources/ic/home.svg
Normal file
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg849"
|
||||
version="1.1"
|
||||
class="feather feather-home"
|
||||
stroke-linejoin="round"
|
||||
stroke-linecap="round"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
height="24"
|
||||
width="24">
|
||||
<metadata
|
||||
id="metadata855">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs853" />
|
||||
<path
|
||||
style="stroke:#000000;stroke-opacity:1;fill:none"
|
||||
id="path845"
|
||||
d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
|
||||
<polyline
|
||||
style="stroke:#000000;stroke-opacity:1;fill:none"
|
||||
id="polyline847"
|
||||
points="9 22 9 12 15 12 15 22" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.1 KiB |
71
Resources/ic/log-out.svg
Normal file
@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="log-out.svg"
|
||||
id="svg1937"
|
||||
version="1.1"
|
||||
class="feather feather-log-out"
|
||||
stroke-linejoin="round"
|
||||
stroke-linecap="round"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
height="24"
|
||||
width="24">
|
||||
<metadata
|
||||
id="metadata1943">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs1941" />
|
||||
<sodipodi:namedview
|
||||
inkscape:current-layer="svg1937"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="845"
|
||||
inkscape:window-x="1072"
|
||||
inkscape:cy="12"
|
||||
inkscape:cx="12"
|
||||
inkscape:zoom="35.416667"
|
||||
showgrid="false"
|
||||
id="namedview1939"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-opacity:1"
|
||||
id="path1931"
|
||||
d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4" />
|
||||
<polyline
|
||||
style="stroke:#000000;stroke-opacity:1;fill:none"
|
||||
id="polyline1933"
|
||||
points="16 17 21 12 16 7" />
|
||||
<line
|
||||
style="fill:none;stroke:#000000;stroke-opacity:1"
|
||||
id="line1935"
|
||||
y2="12"
|
||||
x2="9"
|
||||
y1="12"
|
||||
x1="21" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
66
Resources/ic/settings.svg
Normal file
@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
sodipodi:docname="settings.svg"
|
||||
id="svg881"
|
||||
version="1.1"
|
||||
class="feather feather-settings"
|
||||
stroke-linejoin="round"
|
||||
stroke-linecap="round"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
fill="none"
|
||||
viewBox="0 0 24 24"
|
||||
height="24"
|
||||
width="24">
|
||||
<metadata
|
||||
id="metadata887">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs885" />
|
||||
<sodipodi:namedview
|
||||
inkscape:current-layer="svg881"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="845"
|
||||
inkscape:window-x="1072"
|
||||
inkscape:cy="11.682978"
|
||||
inkscape:cx="6.3643096"
|
||||
inkscape:zoom="24.365721"
|
||||
showgrid="false"
|
||||
id="namedview883"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0"
|
||||
guidetolerance="10"
|
||||
gridtolerance="10"
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
<circle
|
||||
style="fill:none;stroke:#000000;stroke-opacity:1"
|
||||
id="circle877"
|
||||
r="3"
|
||||
cy="12"
|
||||
cx="12" />
|
||||
<path
|
||||
style="stroke:#000000;stroke-opacity:1;fill:none"
|
||||
id="path879"
|
||||
d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z" />
|
||||
</svg>
|
After Width: | Height: | Size: 2.5 KiB |