xebia-functional / nine-cards-v2 Goto Github PK
View Code? Open in Web Editor NEWAn Open Source Android Launcher built with Scala on Android
Home Page: http://www.9cards.io/
License: Other
An Open Source Android Launcher built with Scala on Android
Home Page: http://www.9cards.io/
License: Other
We have to create a Spray endpoint that allow to the 9Cards user publish and share a collection with other users. The url of the endpoint should be POST /collections
.
The request should contain the info about the collection that the user wants to share.
The response should be:
401
HTTP status code if Google Play authentication is not provided in the headers of the request400
HTTP status code if the author field is missing400
HTTP status code if the JSON is malformed200
HTTP status code with the info of the new shared collection created if the process finished successfullyWe need to create a generic persistence class so that the interpreters which do persistence operations can delegate the task in this class.
To do that, we should use doobie
, a pure functional JDBC layer for Scala.
With the new VectorDrawable in Lollipop, you can create a drawable based on an XML vector graphic.
We should investigate about this new way for work with animations and we look for a option for its integrate with Macroid if it's possible
We should replace the addDockApp and updateDockApp methods in PersistenceServices for a new createOrUpdateDockApp method that will create a new register in the database if the app on a position doesn't exists or that will update a existing one.
Using scope https://www.googleapis.com/auth/plus.login
we can access to basic profile information in Google Plus like:
We need a new service called PlusLoginServices
where we can get basic profile info and a new process called UserProfileProcess
where return the information using PlusLoginServices
More info about scopes for use with Google Play services here
We have to create a Spray endpoint that returns the public collections of a user. The url of the endpoint should be GET /collections
.
The request body doesn't contain any info.
The response should be:
401
HTTP status code if Google Play authentication is not provided in the headers of the request
200
HTTP status code with the info of the shared collections that belong to the user specified in the request headers.
Once defined the process to get a shared collection by id based on free monads, we should indicate the way to run it by means of the interpreters of the algebras involved in the process.
The user should be able to sort the cards from Edit Collection
screen. We have to implement a drag and swipe of cards in order to sort the cards
The information should be stored in database automatically
This article can help us for this ticket
We should create a new Service called GoogleDriveServces
where we can store and download files in Google Drive. Also, we need to create a new Process called SyncProcess
where we can store the content of case classes or images, and listing and getting information from different kind of data (for example: user config, wallpapers, etc)
This service and process will be inside app
module because because it's necessary Google Services Library. For this ticket is not necessary to ask Google Drive permission in wizard
The new concept of header in App Drawer has several behaviours:
The next image shows the new concept
We have to verify to all calls to API V2 works fine for User Installations.
These calls are:
POST /installations
PUT /installations/{installationId}
We use these calls in the wizard of application when we select a user configured in cell phone for registering the user in 9Cards and when we receive a new device token from push notification service
TODO
From menu in the detail of collections the user can click in Make Public
and will start a wizard with 3 screens asking information about the collection that you want to share. The information is related to name, category, icon, so on.
When your collection have been published, you can the share link to other users from the last screen
Notes: We should consider to use the new EditText Floating Labels
in Android Support Library
called TextInputLayout
Once defined the process to register a new user on NineCards based on free monads, we should indicate the way to run it by means of the interpreters of the algebras involved in the process.
Account
tab in Profile Screen
contains the differents devices that you have connected with your current Google Account. This screen contains a list of all devices connected and the last time that you synced the current device. If you click in this your device, you'll sync again your device in this moment
In Collection's Detail the user can move between different collections horizontally. The menu should be updated so that the user only can publish the collection if it isn't a public collection
Once defined the process to fetch an existing NineCards user based on free monads, we should indicate the way to run it by means of the interpreters of the algebras involved in the process.
Once defined the process to update an existing device that belongs to a specific NineCards account based on free monads, we should indicate the way to run it by means of the interpreters of the algebras involved in the process.
The process should define all the tasks required to get all the shared collections that belong to a specific user.
As part of this job, we should add the necessary methods to the algebras that define the application and, combine them in the processes layer, keeping in mind the business logic.
When the user drop collection in edit action we can change the icon and color using IconDialogFragment
and ColorDialogFragment
respectively
From the EditText
we can change the name of collection
The information should be stored in database automatically
When the wizard is finished, we should synchronize the new configuration in our servers
We should use getIterableAppsByKeyWord
in DeviceProcess
to show only the apps that you are looking for in search box
The FastScroller
must be disabled while the user is searching
We should define a strategy to migrate all the info about the shared collections from NineCards v1 to v2. We should keep in mind that the info about shared collections is stored in a MongoDB database in the v1, while we'll use PostgreSQL to persist data in v2.
There are 2 ways to reach to edit a collection:
Edit
item in menuEdit Collection
screen with the card selectedIn this ticket we don't have to implement the actions, only should create a new activity with the diferent areas:
EditText
where we ca change the name of collectionIn this ticket we should create the structure of screen
We have to create a Spray endpoint that allow to subscribe to a share a collection. The url of the endpoint should be PUT /collections/{sharedCollectionId}/subscribe
.
The request body doesn't contain any info.
The response should be:
401
HTTP status code if Google Play authentication is not provided in the headers of the request
404
HTTP status code if the shared collection is not found
200
HTTP status code with the info of the shared collection if the process finished successfully
We should be able to sync the collections to Google Drive when the user adds, edits or removes collections in his cell phone.
We have to create an observer in database, when Collection
or Card
table are changed, we have to launch a background service for collections are syncronized
To improve this background service, we have to fire the service 10 minutes after changes using AlarmManager
in Android
We have to create a Spray endpoint that returns a existing shared collection by id. The url of the endpoint should be GET /sharedcollections/{sharedCollectionId}
.
The request body doesn't contain any info.
The response should be:
401
HTTP status code if Google Play authentication is not provided in the headers of the request
404
HTTP status code if the shared collection is not found.
200
HTTP status code with the info of the shared collection.
We have to create a Spray endpoint that allow to unsubscribe from a share a collection. The url of the endpoint should be DELETE /collections/{sharedCollectionId}/subscribe
.
The request body doesn't contain any info.
The response should be:
401 HTTP status code if Google Play authentication is not provided in the headers of the request
404 HTTP status code if the shared collection is not found
200 HTTP status code if the process finished successfully
We have to create the header of the profile screen and the tabs for access to different areas in profile screen (not implement the content in every tab)
We shoudl consider the new AppBarLayout and CollapsingToolbarLayout which implements many of the features of material designs app bar concept. This widget is in new Android Design Library
Maybe this article can help us for this ticket
Once defined the process to create a new installation for a NineCards user based on free monads, we should indicate the way to run it by means of the interpreters of the algebras involved in the process.
Apps list in App Drawer have 3 tabs: Alphabetic, By Category and By Date.
We have to sort the apps using the new PullToTabsView
. The FastScrollerView
must to show content only in Alphabetic mode and disable fast scroll in other modes
We should use getIterableContactsByKeyWord
in DeviceProcess
to show only the contacts that you are looking for in search box
The FastScroller
must be disabled while the user is searching
We should create an animation for adding new collection from New Collection
, My Collections
and Public Collections
dialog. The choreography will be:
In API V2 we have new ways to categorize applications and prioritize applications according to their importance.
The new endpoints are:
POST /apps/categorize
POST /apps/prioritize
We have to do the necessary changes in API and Service module to create the new calls and generate tests
In the other hand, we have to use the new methods in services layer for categorizing the applications in process module when it's necessary. Also, when we create a new collection for the new configuration, we have to sort the applications using the new Prioritize Endpoint, so the user will have the better applications in their collections
Once defined the process to get the shared collections of a user based on free monads, we should indicate the way to run it by means of the interpreters of the algebras involved in the process.
We should create a new class that handle all the persist tasks related to the shared collections. This class will be called by the SharedCollections processes.
We have to create a Spray endpoint that returns a list of existing shared collection by category. The url of the endpoint should be GET /sharedcollections/{top/latest}/{category}
.
The request body doesn't contain any info.
The keywords top
and latest
indicates if the shared collections have to be ordered by the number of installations
and views
or by date of publishing
The response should be:
401
HTTP status code if Google Play authentication is not provided in the headers of the request
200
HTTP status code with a list of shared collection info.
Once defined the process to share a collection based on free monads, we should indicate the way to run it by means of the interpreters of the algebras involved in the process.
The process should define all the tasks required to allow a user to subscribe or unsubscribe to a existing shared collection.
As part of this job, we should add the necessary methods to the algebras that define the application and, combine them in the processes layer, keeping in mind the business logic.
According to research in 162 issue, we have to create every animation for the every step of wizard
The animation guide is in the next image
We have the same names in a lot of case classes in differents layers. For resolver this problem we use rename imports in every layer for conversions
We should use the same way to naming the alias in all imports.
This ticket has 2 works:
During the wizard, when the user selects his account, we have to show the previous devices that the user synced in Google Drive. If the user selects a device loaded previously, we have to store the information in the local database
We have to consider for a time we must load devices from 9Cards Backend 1.0
If the user doesn't have devices in Google Drive, we should look for previous devices in 9Cards Backend 1.0 and copy all configurations in his Google Drive.
We should research about how we should manage the changes in the schema of the relational database.
Once defined the process to allow to subscribe or unsubscribe from a shared collection based on free monads, we should indicate the way to run it by means of the interpreters of the algebras involved in the process.
When you start to select several cards the apparience of Toolbar
will be changed with the new actions for these cards. The actions are:
The main action of Toolbar
will change too with the number of the cards selected and you can clear clicking of them.
When you click in a card will be selected/unselected. When there are no selected cards, the Toolbar
will change to the default toolbar
The process should define all the tasks required to get a shared collection by id.
As part of this job, we should add the necessary methods to the algebras that define the application and, combine them in the processes layer, keeping in mind the business logic.
Once defined the process to update an existing NineCards user based on free monads, we should indicate the way to run it by means of the interpreters of the algebras involved in the process.
The process should define all the required tasks to be able to publish a collection and so, other users can use it.
As part of this job, we should add the necessary methods to the algebras that define the application and, combine them in the processes layer, keeping in mind the business logic.
Contacts list in App Drawer have 3 tabs: Alphabetic, Favorites and Last Calls
We have to sort the apps using the new PullToTabsView. The FastScrollerView must to show content related to used tab. In this ticket we have to create a new adapter for Last Calls
list
We have to verify to all calls to API V2 works fine for Register Users.
These calls are:
POST
/users
GET
/users/{userId}
We use these calls in the wizard of application when we select a user configured in cell phone for register the user in 9Cards
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.