About and credit page implementation. Adjusted block screen and launch screen logo margins up some. Added decryption message to extension loading.

This commit is contained in:
Kyle Spearrin 2016-07-23 23:50:08 -04:00
parent 8ad2786bb0
commit b8c6e77fca
15 changed files with 188 additions and 23 deletions

View File

@ -271,6 +271,7 @@
<Compile Include="Controls\ExtendedEntryRenderer.cs" />
<Compile Include="MainApplication.cs" />
<Compile Include="Resources\Resource.Designer.cs" />
<Compile Include="Services\AppInfoService.cs" />
<Compile Include="Services\ClipboardService.cs" />
<Compile Include="Services\KeyStoreStorageService.cs" />
<Compile Include="MainActivity.cs" />

View File

@ -124,6 +124,7 @@ namespace Bit.Android
.RegisterType<IPasswordGenerationService, PasswordGenerationService>(new ContainerControlledLifetimeManager())
.RegisterType<IReflectionService, ReflectionService>(new ContainerControlledLifetimeManager())
.RegisterType<ILockService, LockService>(new ContainerControlledLifetimeManager())
.RegisterType<IAppInfoService, AppInfoService>(new ContainerControlledLifetimeManager())
// Repositories
.RegisterType<IFolderRepository, FolderRepository>(new ContainerControlledLifetimeManager())
.RegisterType<IFolderApiRepository, FolderApiRepository>(new ContainerControlledLifetimeManager())

View File

@ -0,0 +1,14 @@
using Bit.App.Abstractions;
using AndrodApp = Android.App.Application;
namespace Bit.Android.Services
{
public class AppInfoService : IAppInfoService
{
public string Version => AndrodApp.Context.ApplicationContext.PackageManager
.GetPackageInfo(AndrodApp.Context.PackageName, 0).VersionName;
public string Build => AndrodApp.Context.ApplicationContext.PackageManager
.GetPackageInfo(AndrodApp.Context.PackageName, 0).VersionCode.ToString();
}
}

View File

@ -0,0 +1,8 @@
namespace Bit.App.Abstractions
{
public interface IAppInfoService
{
string Build { get; }
string Version { get; }
}
}

View File

@ -37,6 +37,7 @@
<ItemGroup>
<Compile Include="Abstractions\Repositories\IAccountsApiRepository.cs" />
<Compile Include="Abstractions\Repositories\IDeviceApiRepository.cs" />
<Compile Include="Abstractions\Services\IAppInfoService.cs" />
<Compile Include="Abstractions\Services\IAppIdService.cs" />
<Compile Include="Abstractions\Services\IAuthService.cs" />
<Compile Include="Abstractions\Services\IClipboardService.cs" />
@ -113,6 +114,7 @@
<Compile Include="Pages\LoginTwoFactorPage.cs" />
<Compile Include="Pages\PasswordHintPage.cs" />
<Compile Include="Pages\RegisterPage.cs" />
<Compile Include="Pages\Settings\SettingsCreditsPage.cs" />
<Compile Include="Pages\Settings\SettingsHelpPage.cs" />
<Compile Include="Pages\Settings\SettingsPinPage.cs" />
<Compile Include="Pages\Lock\LockPinPage.cs" />

View File

@ -1,24 +1,56 @@
using System;
using Bit.App.Controls;
using Xamarin.Forms;
using Bit.App.Abstractions;
using XLabs.Ioc;
namespace Bit.App.Pages
{
public class SettingsAboutPage : ExtendedContentPage
{
private readonly IAppInfoService _appInfoService;
public SettingsAboutPage()
{
_appInfoService = Resolver.Resolve<IAppInfoService>();
Init();
}
public void Init()
{
// TODO: version, credits, etc
var logo = new Image
{
Source = "logo",
HorizontalOptions = LayoutOptions.Center
};
var stackLayout = new StackLayout { };
var versionLabel = new Label
{
Text = $@"Version {_appInfoService.Version}
© 8bit Solutions LLC 2015-{DateTime.Now.Year}",
HorizontalTextAlignment = TextAlignment.Center
};
var creditsButton = new Button
{
Text = "Credits",
Style = (Style)Application.Current.Resources["btn-primaryAccent"],
Margin = new Thickness(15, 0, 15, 25),
Command = new Command(async () => await Navigation.PushAsync(new SettingsCreditsPage())),
HorizontalOptions = LayoutOptions.Center
};
var stackLayout = new StackLayout
{
Children = { logo, versionLabel, creditsButton },
VerticalOptions = LayoutOptions.Center,
Spacing = 20,
Margin = new Thickness(0, 0, 0, 40)
};
Title = "About bitwarden";
Content = stackLayout;
Content = new ScrollView { Content = stackLayout };
NavigationPage.SetBackButtonTitle(this, "About");
}
}
}

View File

@ -0,0 +1,63 @@
using System;
using Bit.App.Controls;
using Xamarin.Forms;
namespace Bit.App.Pages
{
public class SettingsCreditsPage : ExtendedContentPage
{
public SettingsCreditsPage()
{
Init();
}
public void Init()
{
var table = new ExtendedTableView
{
EnableScrolling = true,
Intent = TableIntent.Menu,
HasUnevenRows = true,
EnableSelection = false,
Root = new TableRoot
{
new TableSection("Icons")
{
new CustomViewCell(@"Icon 1 - John Smith
Icon 2 - Jane Doe")
}
}
};
if(Device.OS == TargetPlatform.iOS)
{
table.RowHeight = -1;
table.EstimatedRowHeight = 100;
}
Title = "Thank You";
Content = table;
}
public class CustomViewCell : ViewCell
{
public CustomViewCell(string text)
{
var label = new Label
{
LineBreakMode = LineBreakMode.WordWrap,
Text = text,
FontSize = Device.GetNamedSize(NamedSize.Small, typeof(Label))
};
var layout = new StackLayout
{
Children = { label },
Padding = new Thickness(15, 20)
};
View = layout;
}
}
}
}

View File

@ -37,6 +37,10 @@ namespace Bit.iOS.Extension
View.BackgroundColor = new UIColor(red: 0.94f, green: 0.94f, blue: 0.96f, alpha: 1.0f);
_context.ExtContext = ExtensionContext;
var descriptor = UIFontDescriptor.PreferredBody;
DecryptingLabel.Font = UIFont.FromDescriptor(descriptor, descriptor.PointSize);
DecryptingLabel.TextColor = new UIColor(red: 0.47f, green: 0.47f, blue: 0.47f, alpha: 1.0f);
if(!Resolver.IsSet)
{
SetIoc();

View File

@ -11,11 +11,19 @@ using UIKit;
namespace Bit.iOS.Extension
{
[Register ("LoadingViewController")]
partial class LoadingViewController
{
void ReleaseDesignerOutlets ()
{
}
}
}
[Register ("LoadingViewController")]
partial class LoadingViewController
{
[Outlet]
[GeneratedCode ("iOS Designer", "1.0")]
UIKit.UILabel DecryptingLabel { get; set; }
void ReleaseDesignerOutlets ()
{
if (DecryptingLabel != null) {
DecryptingLabel.Dispose ();
DecryptingLabel = null;
}
}
}
}

View File

@ -18,13 +18,23 @@
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" id="1713" translatesAutoresizingMaskIntoConstraints="NO" image="logo.png">
<rect key="frame" x="159" y="278" width="282" height="44"/>
<rect key="frame" x="159" y="223" width="282" height="44"/>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Decrypting data..." lineBreakMode="tailTruncation" minimumFontSize="10" id="10537" translatesAutoresizingMaskIntoConstraints="NO" textAlignment="center">
<rect key="frame" x="15" y="287" width="570" height="20.5"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint id="1763" firstItem="1713" firstAttribute="centerY" secondItem="44" secondAttribute="centerY"/>
<constraint id="1763" firstItem="1713" firstAttribute="centerY" secondItem="44" secondAttribute="centerY" constant="-55"/>
<constraint id="1764" firstItem="1713" firstAttribute="centerX" secondItem="44" secondAttribute="centerX"/>
<constraint id="10538" firstItem="10537" firstAttribute="top" secondItem="1713" secondAttribute="bottom" constant="20"/>
<constraint id="10539" firstItem="10537" firstAttribute="leading" secondItem="44" secondAttribute="leading" constant="15"/>
<constraint id="10540" firstItem="44" firstAttribute="trailing" secondItem="10537" secondAttribute="trailing" constant="15"/>
</constraints>
</view>
<connections>
@ -33,6 +43,7 @@
<segue id="8924" destination="6815" kind="presentation" identifier="lockPinSegue"/>
<segue id="9874" destination="6855" kind="presentation" identifier="lockPasswordSegue"/>
<segue id="10498" destination="1845" kind="presentation" identifier="newSiteSegue" modalPresentationStyle="" modalTransitionStyle=""/>
<outlet property="DecryptingLabel" destination="10537" id="name-outlet-10537"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="45" userLabel="First Responder" sceneMemberID="firstResponder"/>

View File

@ -121,7 +121,7 @@ namespace Bit.iOS
var imageView = new UIImageView(new UIImage("logo.png"))
{
Center = view.Center
Center = new CoreGraphics.CGPoint(view.Center.X, view.Center.Y - 40)
};
view.AddSubview(backgroundView);
@ -130,6 +130,7 @@ namespace Bit.iOS
UIApplication.SharedApplication.KeyWindow.AddSubview(view);
UIApplication.SharedApplication.KeyWindow.BringSubviewToFront(view);
UIApplication.SharedApplication.KeyWindow.EndEditing(true);
UIApplication.SharedApplication.SetStatusBarHidden(true, false);
// Log the date/time we last backgrounded
@ -163,6 +164,7 @@ namespace Bit.iOS
if(view != null)
{
view.RemoveFromSuperview();
UIApplication.SharedApplication.SetStatusBarHidden(false, false);
}
}
@ -240,6 +242,7 @@ namespace Bit.iOS
.RegisterType<IPasswordGenerationService, PasswordGenerationService>(new ContainerControlledLifetimeManager())
.RegisterType<IReflectionService, ReflectionService>(new ContainerControlledLifetimeManager())
.RegisterType<ILockService, LockService>(new ContainerControlledLifetimeManager())
.RegisterType<IAppInfoService, AppInfoService>(new ContainerControlledLifetimeManager())
// Repositories
.RegisterType<IFolderRepository, FolderRepository>(new ContainerControlledLifetimeManager())
.RegisterType<IFolderApiRepository, FolderApiRepository>(new ContainerControlledLifetimeManager())

View File

@ -28,7 +28,7 @@
<key>CFBundleIdentifier</key>
<string>com.8bit.bitwarden</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<string>1</string>
<key>CFBundleIconFiles</key>
<array>
<string>Icon-72@2x.png</string>

View File

@ -12,16 +12,16 @@
<viewControllerLayoutGuide type="bottom" id="3"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="6">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" customColorSpace="calibratedWhite" colorSpace="calibratedRGB" red="0.92549019607843142" green="0.94117647058823528" blue="0.96078431372549022" alpha="1"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" id="16" translatesAutoresizingMaskIntoConstraints="NO" image="logo.png" misplaced="YES">
<rect key="frame" x="159" y="278" width="282" height="44"/>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" id="16" translatesAutoresizingMaskIntoConstraints="NO" image="logo.png">
<rect key="frame" x="159" y="238" width="282" height="44"/>
</imageView>
</subviews>
<constraints>
<constraint id="19" firstItem="16" firstAttribute="centerY" secondItem="6" secondAttribute="centerY"/>
<constraint id="19" firstItem="16" firstAttribute="centerY" secondItem="6" secondAttribute="centerY" constant="-40"/>
<constraint id="20" firstItem="6" firstAttribute="centerX" secondItem="16" secondAttribute="centerX"/>
</constraints>
</view>
@ -34,7 +34,6 @@
</scenes>
<resources>
<image name="bg.png" width="400" height="400"/>
<image name="Default-568h.png" width="320" height="568"/>
<image name="Default-Portrait.png" width="768" height="1004"/>
<image name="Default.png" width="320" height="480"/>
<image name="fa-cogs.png" width="22" height="22"/>
@ -65,8 +64,14 @@
<image name="more_selected.png" width="28" height="28"/>
<image name="plus.png" width="18" height="18"/>
<image name="star.png" width="22" height="22"/>
<image name="cloudup.png" width="44" height="44"/>
<image name="envelope.png" width="18" height="18"/>
<image name="globe.png" width="44" height="44"/>
<image name="lightbulb-o.png" width="18" height="18"/>
<image name="lock.png" width="18" height="18"/>
<image name="refresh.png" width="44" height="44"/>
<image name="upload.png" width="44" height="44"/>
<image name="user.png" width="18" height="18"/>
<image name="wrench.png" width="22" height="22"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedScreenMetrics key="destination" type="retina47"/>
</simulatedMetricsContainer>
</document>

View File

@ -0,0 +1,12 @@
using System;
using Bit.App.Abstractions;
using Foundation;
namespace Bit.iOS.Services
{
public class AppInfoService : IAppInfoService
{
public string Build => NSBundle.MainBundle.InfoDictionary["CFBundleVersion"].ToString();
public string Version => NSBundle.MainBundle.InfoDictionary["CFBundleShortVersionString"].ToString();
}
}

View File

@ -113,6 +113,7 @@
<Compile Include="Controls\ExtendedPickerRenderer.cs" />
<Compile Include="Controls\ExtendedEntryRenderer.cs" />
<Compile Include="Controls\ExtendedTabbedPageRenderer.cs" />
<Compile Include="Services\AppInfoService.cs" />
<Compile Include="Services\ClipboardService.cs" />
<Compile Include="Main.cs" />
<Compile Include="AppDelegate.cs" />