Mobile

KinoCards - QR Code Business Card Creator for Synerzip

KinoCards is a QR Code Business Card Creator. As an Minimal Viable Product, it only supports Synerzip Business Card. Also it does not supports any storage or login functionality in its version 1.

Front Side of Business Card
Inline image 3
QR Codes on Business Card are really helpful. If you ever get a Business Card with a QR Code, take your Smart Phone, start any popular QRCode Scanner App (e.g QR Droid for Android, QR Reader for iPhone, QR Code Reader for Windows Phone). Scan the Business Card (as shown below) and it will import the contact details as a VCard.
Back Side of Business Card
Inline image 4
On the back side of the Business Card is another QR Code, which takes you to a page with entire Social Profile.
How to use from Android Phone (and similarly any other Smart Phone)
 
Step 1
 
Install QR Droid on Android
Step 2
 
Inline image 2
Step 3 
Fill in your details and see the Business cards being created. Download the images for printing.
Step 4
User QR Droid on Android to point to the front of Business Card and see it will prompt you to add the contact in your Address Book
Inline image 9
Inline image 5
Step 5
User QR Droid on Android to point to the back of Business Card and see it will prompt you and open a web page with details about your twitter,linkedin, github pages
 Inline image 10
Inline image 6
Inline image 7
Features in Future
The UI is not yet polished, it will be made polished in next couple of days using Twitter BootStrap. Also we will add the functionality to Login with Synerzip Google Apps, where you can store your profile and browse other people's profile (and scan their business card to import contact directly to your address book).
This MVP (Minimal Viable Product) was done in 6 hours using NodeJs and KnockoutJS and QR Code and HTML5 Canvas APIs.

Android Reference Implementation - Droid Twit

In order to learn Android, we have created an Android application. This android application will help us get actual hands on experience in all the aspects of Android Development. The way we have developed this application is to thing of the design first, implement and keep refactoring the design, until the application gets better. Ofcourse we try to use the best practices mentioned on the Android.

We call this application as Droid Twit application, which is the reference implementation of Twitter on Android.
The application is developed in two parts
1. Small samples to understand a particular android feature or api
2. Integration of the feature or api in the Droid Twit application
The above approach helps developers to learn android
We have created an OpenSource Project

Please note this application is still under development, so please bear with us

Introduction

This is an Implement of Android Twitter client. This is a reference implementation showcasing how to use all the components of Android to create a Twitter client.

Rohit Ghatol and Saurabh Gangarde are the lead developers of this project. Both of them work for QuickOffice and Synerzip Softech.

This Reference Implementation is build to train developers in Pune for one of the TechNext Technical Talks.

Tutorial

The tutorial on how to build a twitter client is available at DroidTwitTutorial

Hello World Tutorial

Source Code

http://code.google.com/p/droidtwit/source/browse/#svn%2Ftrunk%2Ftutorials%2FHelloWorld

Video Tutorial

Part 1

Part 2

List Activity and Async Task Tutorial

Tutorial for List Activity and Async Task

Features

The Android Client uses

  • Alarm Manager to repeatedly fetch tweets from Twitter
  • There is a back ground service for fetching twits and storing it in database
  • There is use of OAuth for authentication
  • Notification Manager is used for notifying users about newer twits
  • Battery Drain is monitored and Twitter Service is closed to help save battery, and when battery is charged then again Twitter Service is started. (Yet to be implemented- Coming soon)
  • In UI side we use shapes and drawable states for background and button images

Download Demo APK

Disclaimer: Since the application is under development and not gone through entire QA cycle, there could be some crashes in the application. We are striving hard to get you a stable version soon. Meanwhile please focus on the application architecture.

Please Download our apk from http://droidtwit.googlecode.com/files/DroidTwit.apk and try it.

Demo Video

Screenshots

Architectural Diagrams

Proposed Architecture


Screen Flow


Overall Architecture

Note Phone Boot Receiver, Low Battery Receiver and Alarm Receiver are all Android BroadCast? Receiver.


OAuth Authentication


First Time Launch


Activity Asking Service to fetch tweets


Alarm Manager Triggering Service every n minutes


When Phone Boots, Broadcast Receiver registers Alarm Manager and Battery BroadCast? Receiver


Battery BroadCast? Receiver controls Alarm Manager


Keyboard mapping for Android Emulator (on Windows)

Its easier to work with keyboard than mouse and hence every software provides keyboard short cuts for doing same action which is possible using pointing device. Android emulators also provides these short cuts. I gathered this information, here is the list

td p { margin-bottom: 0cm; }p { margin-bottom: 0.21cm; }

Emulator Action

Keyboard (Windows Platform)

Home

HOME key

Menu

Page Up, F2

Lock

F4, F7

Launch browser

F5

Trackball mode

F6, DELETE

Back

ESCAPE

Changing selection

Arrow keys

Select

ENTER key

Activate 3G

F8

Increase Ringer volume

Ctrl F5

Decrease Ringer volume

Ctrl F6

Change orientation

Ctrl F11, Ctrl F12

Run emulator in full screen

Alt + ENTER

Adding Aspect to Android

Programming AspectJ with Android

AspectJ is the defacto choice for AOP program. So far I did not see any one trying AOP concept in Android. However, I did read one blog mentioning, it should be possible, hence I tried it.
AspectJ puts in pointcut across code and can execute advices around those pointcuts. The beautify of this is once you compile your java source, you add these pointcuts and advices to your program by injecting them in the byte code (of already generated class files).
Knowing this I knew aspectJ can be used in Android, as dex relies on .class files.
Stage 1- Let Java compile java to .class files
Stage 2- Let AspectJ compiler inject point cuts and advices to the .class files
Stage 3- Let Dex take these new class files and create .dex file.
There you should have AspectJ working for Android applications.
Case Study: Inject Tracing code to existing Android source.
Given the case that we have an existing android project, we want to trace the call graph of each thread (showing depth) and we also want to show the cumulative time for each method.
Step 1: Create an HelloWorld Android Project
Step 2: Add some code, so we can show some call graph
Run the program and you will see this on your android emulator
Also on the DDMS Log you will see
What we want to achieve?
We want to show the call graph for this flow. We know that the flow is this way
At the same time we would like to print the commutative time each method took
We would like to print this call graph by using AOP concepts. We would like to define pointcuts around all methods of all classes in package "com.test" and print these statements there.
Step 3: Add aspectjrt.jar to classpath of android
Step 4: Add Aspect file - Trace.aj
Following is the cut down version of the same Trace.aj file. See the inline comments
Step 5 - Compile using AspectJ
As we mentioned above we want to
1. Compile java to .class files using javac
2. Inject pointcuts and advices in .class files using aspectj compile
3. Compile these injected .class files into .dex file
For this we will use ant.
Here is the ant build.xml which I used to put aspectj compilation step between compile->dex target
Here is a snippet of my build.xml around compile and dex targets
Here is the complete build.xml for your reference
Run on command prompt or through eclipse
$> ant install
You should see following output for ant
Step 6 - Run the APK which has aspectj integrated into it (after ant install)
The log looks like as follows, just as we wanted.
Source Code
Cheers,
Rohit Ghatol