Skip to content

Commit

Permalink
Release/1.2.0 (#170)
Browse files Browse the repository at this point in the history
* Full screen image of the speaker is shown by tap on the speaker page … (#119)

Full screen image of the speaker is shown by tap on the speaker page

* Add information about target branch (#128)

* Update README.md
* Add information about gitflow

* Net Standard (#130)

* Removed obsolete & now deprecated Components

* Updating to .NET Standard part I

* Updating to .NET standard part II

* Updating to .NET Standard part III

* Update to .NET standard part 4

* Removed obsolete BCL packages

* Temporarily disabling tweets; project now compiles successfully

* Fixed getting tweets, now app is fully functional

* Removed Obsolete packages, minor improvements

* iOS improvements

* Removed obsolete UWP solution

* Added UWP project

* iOS fixes

* UWP: removed obsolete files

* UWP: more fixes

* UWP: now project compiles successfully

* UWP: added splash screen

* Updated several NuGet packages

* Updated ALL packages; UWP fixes

* Added comment about CircleTransformation & linker issue

* displays twitter account full name in news page, closes #121 (#133)

* Meetups list (#135)

* meetups list on friends page, closes #58

* Speakers grouping and fast navigation by speakers list (index list - … (#136)

* Speakers grouping and fast navigation by speakers list (index list - iOS, fast scroll - Android) were added.
* Post-review commit: style changes + ordering by FirstName
* Post-review commit: indentation was fixed

* Improving app size & startup time (#134)

* Removed unneeded icons
* Removed obsolete Android 4.4 styles
* Removed obsolete files, enabled ProGuard
* Futher Android optimizations: getting rid of unused packages & permissions
* AppSize: removing obsolete code
* Android: removed unneeded Support Library
* iOS size improvements
* iOS: increased app version
* Android: enabled AOT & LLVM to improve start up time
* iOS fixed info.plist
* iOS: added ARMv7s to support iPhone 5C
* Android: enabled native HttpHandler & TLS to improve performance & appsize. Enabled experimental GC
* Android: drop x86 support to reduce app size
* iOS: fixed issue with iPhone 5, 5c support
* iOS: changed ARMv7s to ARMv7 as Apple doesn't support ARMv7s anymore
* iOS: project configuration fixes

* Create CODE_OF_CONDUCT.md (#138)

* Performance improvements (#140)

* Enabled XAML compilation for all XAML files
* Updated Resharper settings
* Android: optimized PNG images
* Android: removed unneeded references
* Got rid of Newtonsoft.Json reference
* Updated DotNetRu.BottomTabbedPage package - now all packages support .NET Standard 2.0

* Release1.0.1 (#143)

* Fixed zooming of speaker photo
Updated technology used page

* Added original version of BottomTabbedPage package

* Removed App Analytics from Debug builds

* LivePlayer fixes & Language improvements

* Added Kazan

* Updated Audit

* Changed upcoming meetups color

* Fixed layout on Friends page

* Create CONTRIBUTING.md (#139)

* Create CONTRIBUTING.md
* Update CONTRIBUTING.md

* Fixed twitter feed (#146)

* Realm backend (#148)

* Removed no longer needed Audit files - will be replaced by single Realm file
* Added Realm file

* Replaced services to get data from Realm database

* Updated NuGet packages

* Display speaker basic info

* Added fix for netstandard/android. See dotnet/android#1162 (comment)

* Display meetups, backend fixes

* Fix build in App Center

* Display speaker details

* Simplified getting talks for speaker by leveraging Realm backlink property

* Replaced all manual queries with backlinking

* Added friend logos

* Now app displays all Audit information based on Realm database

* Replaced all entity service with realm service using automapper

* Attempt to fix App Center build

* Cleaning up, bugfixes

* Updated .gitignore

* Added missing Realm file, part I

* Removed obsolete directories

* Attempt to fix Android build in App Center

* Attempt to fix App Center build #3

* Attempt to fix iOS build

* Cleaning up, increased app version to 1.1.0

* Attempt to fix iOS build #2

* Attempt to fix iOS build #3

* Rolled back to Android SDK 8.0 due to App Center issues

* Cleaning up - added TwitterService & LanguageService

* Android: rolled back Target Framework to Android 8.0 to fix App Center build

* Fixed images on speakers page

* Fixed displaying speaker avatars on Meetup page

* Fixed displaying Friends logos

* Removed small speaker avatar

* Release 1.1.0 (#156)

* Fixed displaying of speaker avatar
* Fixed credits on about app page
* Fix issue with duplicate AutoMapper initialization

* Push notifications for Android (#165)

* add xml parsing

* add converting from xml model to realm

* Implemented app autoupdate (without images)

* Fixed issue with Rate limiting
Added loading images for new speakers/friends

* Improved updating speaker photos

* Slightly improved updating Realm - now it's done in one transaction

* Improved speed of Audit update - now 3x times faster

* Set up push notifications for Android. Now app is capable of autoupdating itself on push

* Set up Push Notifications for iOS

* Push Notifications improvemtns: enhanced logging, background update (not working yet)

* Fixed error with background update, enhanced logging for Android (logcat).
Now app successfully updates Audit on background (but there's still an issue with silent pushes)

* Added updating current audit version after successful update (using new table w/ commit hash)

* Added Firebase SDK

* Improved logging for troubleshooting Firebase issues

* Push Notifications improvements
- [Android] Added displaying local notification after successful update
- Added Realm overwrite after each app update (actual for release builds)
- Fixed build & run issues due to outdated Firebase package

* Fixed AppCenter build issue

* Fixed incorrect AppCenter.Crashes reference

* Updated ALL nuget packages

* [Android] Added support for Notification channels

* [Android] Added Firebase specific notification handler

* [Android] Rolled back to Android 8.0 due to App Center issues

* - Fixed issues with threading & Realm due to lack of synchronization context
- Improved AutoMapper configuration to avoid issues with multiple updates
- Now pushes on Android work just fine independing of app state (background or foreground)

* [Android] Removed App Center Push as Firebase is used now

* iOS: increased version to 1.2.0

* [Android] Fixed App Center issue with targetSDK not being set

* [iOS] Attempt to fix issue with notification handling - Missing type DateTimeOffsetConverter

* [Android] Fixed issue with notification on Android < 8.0
[iOS] Added initial Firebase SDK

* [Android] moved notification related logic to one place

* Changing Settings page to TableView

* [iOS] Removed Firebase package. APNS will be used instead

* Updating Settings page

* [Android] Fixed build in version of Visual Studio (15.7.1)

* Replacing ListView in Settings page with custom viewcells

* Replaced listview with custom cells in Settings page

* Fixed translation for communities items

* Added background color for text cells

* Removed XfGloss due to bugs

* Fixed opening Friends
Added WhitetextCell control

* Renamed Android channelID to new meetup

* Android. Improved Settings page

* [Android] Add notification icon, changed text, add auto-cancel

* Updated Audt

* Added missing localization

* Removed hack realted to .NET standard as new version of Xamarin handles .NET Standard properly

* Added pre-build script to change App Center key

* Moved pre-build script to Android project

* Attempt to fix pre-build file path issue

* Attempt to fix issues with pre-build script

* Dummy build to test App Center

* Changed enconing to UTF-8

* pre-build script: added part to replace App Center configs

* pre-build script: removed unneeded option

* Attempt to fix pre-build script in AppCenter

* Attempt to fix pre-build script

* Changed pre-build script to only master branch & production config
  • Loading branch information
pfedotovsky authored Jun 12, 2018
1 parent 6467cd0 commit a79676a
Show file tree
Hide file tree
Showing 68 changed files with 4,397 additions and 3,980 deletions.
57 changes: 42 additions & 15 deletions DotNetRu.Android/DotNetRu.Android.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<AndroidResgenFile>Resources\Resource.designer.cs</AndroidResgenFile>
<AndroidApplication>True</AndroidApplication>
<AndroidUseLatestPlatformSdk>false</AndroidUseLatestPlatformSdk>
<TargetFrameworkVersion>v8.0</TargetFrameworkVersion>
<TargetFrameworkVersion>v8.1</TargetFrameworkVersion>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
Expand Down Expand Up @@ -90,13 +90,13 @@
<PackageReference Include="Microsoft.AppCenter.Analytics" Version="1.5.0" />
<PackageReference Include="Microsoft.AppCenter.Crashes" Version="1.5.0" />
<PackageReference Include="Naxam.BottomTabbedPage">
<Version>0.2.0.1</Version>
<Version>0.2.0.2</Version>
</PackageReference>
<PackageReference Include="Naxam.Ittianyu.BottomNavExtension" Version="1.2.4" />
<PackageReference Include="Plugin.Permissions" Version="2.2.1" />
<PackageReference Include="Plugin.Share" Version="7.1.1" />
<PackageReference Include="Realm.Database">
<Version>2.1.0</Version>
<Version>2.2.0</Version>
</PackageReference>
<PackageReference Include="Refractored.MvvmHelpers" Version="1.3.0" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe">
Expand All @@ -105,18 +105,42 @@
<PackageReference Include="Xam.Plugin.Connectivity" Version="3.1.1" />
<PackageReference Include="Xam.Plugins.Forms.ImageCircle" Version="2.0.2" />
<PackageReference Include="Xam.Plugins.Settings" Version="3.1.1" />
<PackageReference Include="Xamarin.Android.Support.Annotations">
<Version>26.1.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Compat">
<Version>26.1.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Core.UI">
<Version>26.1.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Core.Utils">
<Version>26.1.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Design" Version="26.1.0.1" />
<PackageReference Include="Xamarin.Android.Support.Fragment">
<Version>26.1.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.Media.Compat">
<Version>26.1.0.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Android.Support.v4" Version="26.1.0.1" />
<PackageReference Include="Xamarin.Android.Support.v7.AppCompat" Version="26.1.0.1" />
<PackageReference Include="Xamarin.Android.Support.v7.CardView" Version="26.1.0.1" />
<PackageReference Include="Xamarin.Android.Support.v7.MediaRouter" Version="26.1.0.1" />
<PackageReference Include="Xamarin.FFImageLoading" Version="2.3.4" />
<PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.3.4" />
<PackageReference Include="Xamarin.FFImageLoading.Transformations" Version="2.3.4" />
<PackageReference Include="Xamarin.Forms" Version="2.5.0.280555" />
<PackageReference Include="Xamarin.FFImageLoading" Version="2.3.6" />
<PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.3.6" />
<PackageReference Include="Xamarin.FFImageLoading.Transformations" Version="2.3.6" />
<PackageReference Include="Xamarin.Firebase.Messaging">
<Version>60.1142.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.Forms" Version="2.5.1.444934" />
<PackageReference Include="Xamarin.GooglePlayServices.Base">
<Version>60.1142.1</Version>
</PackageReference>
<PackageReference Include="Xamarin.GooglePlayServices.Basement">
<Version>60.1142.1</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<Reference Include="System" />
Expand All @@ -125,10 +149,14 @@
<Reference Include="System.Net" />
</ItemGroup>
<ItemGroup>
<Compile Include="Notifications\DotNetRuFirebaseIIDService.cs" />
<Compile Include="Notifications\DotNetRuFirebaseMessagingService.cs" />
<Compile Include="Notifications\DotNetRuPushReceiver.cs" />
<Compile Include="Effects\ImageShadowEffect.cs" />
<Compile Include="Helpers\LocaleUtils.cs" />
<Compile Include="Localize.cs" />
<Compile Include="MainActivity.cs" />
<Compile Include="Notifications\NotificationHelper.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Renderers\BottomTabbedPageRenderer.cs" />
<Compile Include="Resources\Resource.designer.cs" />
Expand All @@ -137,7 +165,6 @@
<Compile Include="Renderers\ImageCellEx.cs" />
<Compile Include="Renderers\SwitchCellEx.cs" />
<Compile Include="Helpers\Toaster.cs" />
<Compile Include="Renderers\EvolveSearchBarRenderer.cs" />
<Compile Include="Helpers\ListViewSelectionOnTopEffect.cs" />
<Compile Include="Helpers\AppVersionProvider.cs" />
</ItemGroup>
Expand All @@ -148,6 +175,8 @@
<ProguardConfiguration Include="proguard.cfg">
<SubType>Designer</SubType>
</ProguardConfiguration>
<GoogleServicesJson Include="google-services.json" />
<None Include="appcenter-pre-build.sh" />
<None Include="Properties\AndroidManifest.xml" />
<AndroidResource Include="Resources\drawable\Splash.axml">
<SubType>Designer</SubType>
Expand Down Expand Up @@ -263,6 +292,10 @@
<Project>{CD2623BD-3609-4BE9-80EF-0974F3A1A27D}</Project>
<Name>DotNetRu.Clients.UI</Name>
</ProjectReference>
<ProjectReference Include="..\DotNetRu.DataStore.Audit\DotNetRu.DataStore.Audit.csproj">
<Project>{7B4C73DF-8A4A-4AD1-92D9-A064065CDD71}</Project>
<Name>DotNetRu.DataStore.Audit</Name>
</ProjectReference>
<ProjectReference Include="..\DotNetRu.Utils\DotNetRu.Utils.csproj">
<Project>{dfa0f0f6-c396-412e-86a9-e9095f71cc36}</Project>
<Name>DotNetRu.Utils</Name>
Expand Down Expand Up @@ -323,15 +356,9 @@
<AndroidResource Include="Resources\drawable-xxxhdpi\icon_retweet.png" />
<AndroidResource Include="Resources\drawable\loading_apple.gif" />
</ItemGroup>
<ItemGroup>
<Folder Include="Notifications\" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<None Include="FodyWeavers.xml" />
</ItemGroup>
<ItemGroup>
<Content Include="android-netstandard-fix.xml" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
<Import Project="android-netstandard-fix.xml" />
</Project>
47 changes: 15 additions & 32 deletions DotNetRu.Android/Helpers/Settings.cs
Original file line number Diff line number Diff line change
@@ -1,41 +1,24 @@

// Helpers/Settings.cs This file was automatically added when you installed the Settings Plugin. If you are not using a PCL then comment this file back in to use it.
using Plugin.Settings;
using Plugin.Settings.Abstractions;

namespace XamarinEvolve.Droid.Helpers
namespace DotNetRu.Droid.Helpers
{
/// <summary>
/// This is the Settings static class that can be used in your Core solution or in any
/// of your client applications. All settings are laid out the same exact way with getters
/// and setters.
/// </summary>
public static class Settings
{
static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
using Plugin.Settings;
using Plugin.Settings.Abstractions;

const string NotificationIdKey = "notification_id";
static readonly int NotificationIdDefault = 0;
internal static class Settings
{
private static readonly int NotificationIdDefault = 0;

public static int NotificationId
internal static ISettings AppSettings => CrossSettings.Current;

internal static int NotificationID
{
get { return AppSettings.GetValueOrDefault(NotificationIdKey, NotificationIdDefault); }
set
{
AppSettings.AddOrUpdateValue(NotificationIdKey, value);
}
get => AppSettings.GetValueOrDefault(nameof(NotificationID), NotificationIdDefault);

set => AppSettings.AddOrUpdateValue(nameof(NotificationID), value);
}

public static int GetUniqueNotificationId()
internal static int GetUniqueNotificationID()
{
return NotificationId++;
return NotificationID++;
}

}
}
}
6 changes: 3 additions & 3 deletions DotNetRu.Android/MainActivity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Android.OS;

using DotNetRu.Droid.Helpers;
using DotNetRu.Droid.Notifications;
using DotNetRu.Utils.Helpers;

using FFImageLoading.Forms.Droid;
Expand Down Expand Up @@ -103,13 +104,12 @@ protected override void OnCreate(Bundle savedInstanceState)
// AndroidAppLinks.Init(this);
Toolkit.Init();

typeof(Color).GetProperty("Accent", BindingFlags.Public | BindingFlags.Static)
?.SetValue(null, Color.FromHex("#757575"));

ImageCircleRenderer.Init();

CachedImageRenderer.Init(enableFastRenderer: true);

NotificationHelper.InitializePushNotifications();

this.LoadApplication(new Clients.UI.App());
this.OnNewIntent(this.Intent);
}
Expand Down
20 changes: 20 additions & 0 deletions DotNetRu.Android/Notifications/DotNetRuFirebaseIIDService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
namespace DotNetRu.Droid.Notifications
{
using Android.App;
using Android.Util;

using Firebase.Iid;

[Service]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
public class DotNetRuFirebaseIIDService : FirebaseInstanceIdService
{
private const string Tag = "AuditUpdate";

public override void OnTokenRefresh()
{
var refreshedToken = FirebaseInstanceId.Instance.Token;
Log.Debug(Tag, "Refreshed token: " + refreshedToken);
}
}
}
28 changes: 28 additions & 0 deletions DotNetRu.Android/Notifications/DotNetRuFirebaseMessagingService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
namespace DotNetRu.Droid.Notifications
{
using System.Threading.Tasks;

using Android.App;
using Android.Util;

using DotNetRu.DataStore.Audit.Services;

using Firebase.Messaging;

[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class DotNetRuFirebaseMessagingService : FirebaseMessagingService
{
public override async void OnMessageReceived(RemoteMessage message)
{
Log.Debug("Push", "AuditUpdate. Push Notification receviced!");

await UpdateService.UpdateAudit().ContinueWith(
t => NotificationHelper.SendNotification(
Application.Context,
"New meetup",
"New meetup announced!"),
TaskContinuationOptions.OnlyOnRanToCompletion);
}
}
}
17 changes: 17 additions & 0 deletions DotNetRu.Android/Notifications/DotNetRuPushReceiver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
namespace DotNetRu.Droid.Notifications
{
using Android.App;
using Android.Content;
using Android.Runtime;

[Preserve]
[BroadcastReceiver(Permission = "com.google.android.c2dm.permission.SEND")]
[IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" }, Categories = new[] { "${applicationId}" })]
public class DotNetRuPushReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
// TODO use once AppCenter supports silent pushes
}
}
}
78 changes: 78 additions & 0 deletions DotNetRu.Android/Notifications/NotificationHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
namespace DotNetRu.Droid.Notifications
{
using Android.App;
using Android.Content;
using Android.Util;

using DotNetRu.Droid.Helpers;

using Firebase;
using Firebase.Iid;
using Firebase.Messaging;

internal sealed class NotificationHelper
{
internal const string NewMeetupChannelID = "NewMeetup";
internal const string NewMeetupChannelName = "New meetup information";

internal static void CreateNotificationChannel()
{
NotificationChannel notificationChannel = new NotificationChannel(
NewMeetupChannelID,
NewMeetupChannelName,
NotificationImportance.High);

notificationChannel.EnableVibration(vibration: true);
notificationChannel.LockscreenVisibility = NotificationVisibility.Public;

NotificationManager notificationManager =
(NotificationManager)Application.Context.GetSystemService(Context.NotificationService);

notificationManager.CreateNotificationChannel(notificationChannel);
}

internal static void InitializePushNotifications()
{
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
{
CreateNotificationChannel();
}

FirebaseApp.InitializeApp(Application.Context);
Log.Debug("AuditUpdate", "Firebase token: " + FirebaseInstanceId.Instance.Token);

FirebaseMessaging.Instance.SubscribeToTopic(NewMeetupChannelID);
}

internal static void SendNotification(Context context, string title, string body)
{
// Set up an intent so that tapping the notifications returns to this app:
Intent intent = new Intent(context, typeof(MainActivity));

// Create a PendingIntent; we're only using one PendingIntent (ID = 0):
const int PendingIntentID = 0;
PendingIntent pendingIntent = PendingIntent.GetActivity(
context,
PendingIntentID,
intent,
PendingIntentFlags.OneShot);

Notification.Builder notificationBuilder = new Notification.Builder(context)
.SetSmallIcon(Resource.Drawable.menu_events)
.SetContentTitle(title)
.SetContentText(body)
.SetContentIntent(pendingIntent)
.SetAutoCancel(autoCancel: true);

NotificationManager notificationManager =
(NotificationManager)context.GetSystemService(Context.NotificationService);

if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
{
notificationBuilder.SetChannelId(NewMeetupChannelID);
}

notificationManager.Notify(Settings.GetUniqueNotificationID(), notificationBuilder.Build());
}
}
}
15 changes: 13 additions & 2 deletions DotNetRu.Android/Properties/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.1.0" package="com.dotnetru.droid" android:versionCode="1" android:installLocation="auto">
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="1.2.0" package="com.dotnetru.droid" android:versionCode="1" android:installLocation="auto">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="26" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application android:icon="@drawable/ic_launcher" android:theme="@style/MyTheme" android:label="DotNetRu"></application>
<permission android:protectionLevel="signature" android:name="${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<application android:icon="@drawable/ic_launcher" android:theme="@style/MyTheme" android:label="DotNetRu">
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
</application>
</manifest>
Loading

0 comments on commit a79676a

Please sign in to comment.