Friday, December 9, 2011

PhoneGap and Gigya API Implementation

I was stuck regarding facebook implementation through PhoneGap. Though Phonagap provides a plug-in but you need to have facebook application installed on your device and that created a question for me. So here is it with the implementation of childBrowser PhoneGap plugin and the GIGYA API.
Initial Steps
1. Do have a registered Gigya account. you will get a API KEY and the site which you are adding needs to be a valid server as you will be hosting a small html page.
2. Create a new phonegap project.
3. Implement the childBrowser Plug-I. This post helped me as I was implementing it for the first time
http://simonmacdonald.blogspot.com/2011/09/phonegap-android-childbrowser-revamp.html

4.  Here is the code....

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=320; user-scalable=no" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Child Browser Example</title>
    <link rel="stylesheet" href="master.css" type="text/css" media="screen" title="no title" charset="utf-8">
    <script type="text/javascript" charset="utf-8" src="phonegap-1.2.0.js"></script>
    <script type="text/javascript" charset="utf-8" src="childbrowser.js"></script>
    <script src="jquery-1.4.3.min.js"></script>
    <script src="jquery.min.js"></script>
    <script src="jquery.mobile-1.0a1.min.js"></script>
    <script type="text/javascript" charset="utf-8">


    function init(){
        document.addEventListener("deviceready", onDeviceReady, false);
        gigya.services.socialize.addEventHandlers({}, {  
            onLogin:DisplayEventMessage, 
            onConnectionAdded:DisplayEventMessage, 
            onConnectionRemoved:DisplayEventMessage 
           } 
        ); 
    }
    
    function DisplayEventMessage(eventObj) { 
        alert(eventObj.eventName + " event happened"); 
    } 
   
    function onDeviceReady() {
        alert("PhoneGap is ready");
    }
   
    function locationChanged(newurl)
    {
        //alert("The JS got this url = " + newurl);
        console.log(newurl);
       var access=newurl.split("#");
       var token=access[1].split("=");
       //alert(token[0]);
       if(token[0]=="access_token")
       {
//Status URL...Through which status on facebook will be set
var statusurl="https://socialize.gigya.com/socialize.setStatus?status=welcome&oauth_token="+token[1];
            //window.open(statusurl);
            localStorage.accessToken=token[1];
            window.plugins.childBrowser.close();
            window.location="Messages.html";
            console.log(statusurl);
       }
    }
   
    function openNew(statusurl)
    {
        alert(statusurl);
         window.plugins.childBrowser.openExternal(statusurl);
    }
    function closed() {
        alert("The JS got a close event");
    }
   
    function showPage(locbar) {
        window.plugins.childBrowser.onLocationChange = locationChanged;
        window.plugins.childBrowser.onClose = closed;
        var url="https://socialize.gigya.com/socialize.login?client_id=yourGigyaAPIKEY&redirect_uri=http:yourSite/yourPage.html&x_provider=facebook&response_type=token";
        showBrowser(url,locbar);
    }
   
    function showBrowser(url,locbar)
    {
        window.plugins.childBrowser.showWebPage(url, {showLocationBar: locbar});
       
    }
    </script>
  </head>
  <body onload="init()" id="stage" class="theme">
    <a href="#" class="btn large" onclick="showPage(true); return false;">Login to Facebook</a></p>


  </body>
</html>

So, thats it.. you don't need to have a facebook app installed on your device..
Will come up with more things on this.
Any suggestions gracefully accepted....




Thursday, July 21, 2011

PhoneGap

It has been a long time......and a month and half after leaving APIIT....
This post is regarding the recent and still growing technology i.e. 
PhoneGap


Basically again a mobile technology but not specifically for a 
particular mobile OS. Open source, simple and easy to use..
Approx all the native features of any smartphone are accessible..
currently it is serving 6 mobile OS including Nokia, iPhone, 
Android, Blackberry...


The technology basically uses the features of HTML5, Javascript and CSS3...
HTML5 has some awesome features to go through...
APIITians you have a nice oppurtunity around....




Good Luck



Saturday, May 28, 2011

Android-"Tic-Roid": A post worth my life..

I had thought of writing this post after the application will be fully developed.though its not completed yet....Hence I owe my thanks to the precious suggestions and efforts by anyone for the development of this application....I will try to include all the people whom I would like to thank in this post..n I hope I don't miss anyone..

The most thankful my parents....My father knew I needed an Android device..and hence he gifted me one on his Birthday 6/04/2011...There are many instances. I have only mentioned the recent one..

1) Next my room-ies....ahh.. Shoaib Ahmed (Bauna) & Akshat Goyal (akki)....Shoaib mark my words...either you will be hired as a tester one day..or I will be hiring you for the same purpose...The moment I made some changes I used to let shoaib use the application ...and in a small duration of 5 minutes he had some faults which he told me to remove...you made my app efficient brother.. :)

Akshat Goyal..No one except u nd shoaib can bear me in hard situations.... without you today's assignment was nothing....thanx fr everything ... :)

2) Naveen Malik: We have worked tgether at many instances...but the most I will remember is the midpoint one....u really helped me...and I knw u will get a job near by Delhi..."fir Army Canteen mein khana khana beithke" :)

3) Tushar Sahni: "zero kaante mein level kaise banayega" these lines on the first day my topic was accepted inspired me to make the levels more tougher...

4) Jagrat Singh: You are also the lucky one amongst us......you have a bright future...stay as you are.. :)

5) Anish Nikhil & Ankit Ojha (Baba): @Anish sale nigro would have thought abt my suggestion starting mein..situation would have been different..neways still everything is fine..I knw u will manage it..
 @Baba..The day u came to my rum nd said..."1 android ka program run karne mein 2 din lag gaya bc"..That was the day I started learning android..thanx fr that

6)Mohit Awasthi: The day you came to my room...the day went cool...thats it....thanx fr that..

7) Manoj Chauhan & Santosh Kumar : I knw WE three together can do many things..but what I feel is that over confodence beats us smetimes.......else Constructors will shine some day...just remember what we had thought in the recent talks...

8) Narendra Anand: Try to be happy...sale jo hota hai na sahi k liye hota hai..."panauti" fat kam karle thoda...
    Arvind Mahto (Bundu): I will always remember you as you came nd met me on the very frst day in the    
    college

9)  Sandeep Gupta, Rohit Mishra, Saurav Shekhar, Sreejith M.V, Puneet Akhouri: Thanx fr showing trust in me.....@Sandeep..I will always remember those lines you said when I was trying that Bluetooth one// "are try karta reh ho jayega...".....The words inspired me that day...nd will inspire me in future....@ Rohit Mishra use your truthfulness as a weapon...u will go far...@Saurav...finally everything normal brother...I hope I met your expectations..@Sreejith: I knw u were ryt in the recent thing..I would suggest to concenterate on other things which would be beneficial enough to u nd your career...@Puneet...this is the third time I am saying this...I m sorry I could not meet your expectations at IBM ...but one day I will....

10) Sir Aagrah Mandloi: Simply thanks for teaching me...Sir..

11) Seema Sharma: I didn't wanted the way it is going on.....yup I manipulate things smetimes...bt nt to harm you..and this is what u gotta understand...neways its all upto you...gud luck..

12) Milky Jain: "Tu taunt bahut maarti hai"  :) I think thats enough..hpe u understand.

13) Shweta Roy: "kisike haath na aayegi ye ladki.." n sahi mein aisa hi hai..1 hi hai abhi to..

14) Simanta Chakrabarty, Nitesh Choyal, Nandan Dutta, Manish Malviya, Bhupendra Singh, Sajal Garg, Sonal Saket, Amit kumar, Rajeev and the whole CMT branch....will miss you all....




Wednesday, March 2, 2011

Android: Capture the best moments

I was expecting to write a new post on lambu's birthday...but it didn't happened..So here is another android application through which you can capture an image an view it as and when you capture it as a thumbnail....

My Activity

package com.apiit.TryCamera;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.hardware.Camera.ShutterCallback;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class TryCamera extends Activity implements SurfaceHolder.Callback{
private Camera camera;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SurfaceView surface=(SurfaceView)findViewById(R.id.surface);
final SurfaceHolder holder=surface.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.setFixedSize(150, 150);
Button tke=(Button)findViewById(R.id.take_btn);
tke.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View v) {
takePicture();
}

});
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {

try{
camera = camera.open();
camera.setPreviewDisplay(holder);
camera.startPreview();
}
catch(IOException e)
{

}
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
}

private void takePicture(){
camera.takePicture(shutterCallback, rawCallback, jpegCallback);
}
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
// TODO Do something when the shutter closes.
}
};
PictureCallback rawCallback = new PictureCallback() {

public void onPictureTaken(byte[] data, Camera camera) {
// TODO Do something with the image RAW data.

}
};
PictureCallback jpegCallback = new PictureCallback() {

public void onPictureTaken(byte[] data, Camera camera) {
// Save the image JPEG data to the SD card
FileOutputStream outStream=null;

FileInputStream fstream = null;
Bitmap bmp;
try {
File root=Environment.getExternalStorageDirectory();
File jpgfile=new File(root,"vinsol.jpg");
outStream=new FileOutputStream(jpgfile);
outStream.write(data);
outStream.flush();
outStream.close();
fstream = new FileInputStream(Environment.getExternalStorageDirectory() + "/" + "vinsol.jpg");
bmp = BitmapFactory.decodeStream(fstream);
ImageView iv=(ImageView)findViewById(R.id.image);
iv.setImageBitmap(bmp);

} catch (FileNotFoundException e) {
Log.d("CAMERAIO", e.getMessage());
} catch (IOException e) {
Log.d("CAMERAIO", e.getMessage());
}
camera.startPreview();
}
};
}





Layout


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<SurfaceView
android:layout_width="fill_parent"
android:layout_height="300dip"
android:id="@+id/surface"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<Button
android:layout_width="70dip"
android:layout_height="wrap_content"
android:text="Take Picture"
android:id="@+id/take_btn"/>
<ImageView
android:layout_marginTop="10dip"
android:layout_marginLeft="-5dip"
android:layout_width="wrap_content"
android:layout_height="100dip"
android:id="@+id/image"/>

</LinearLayout>
</LinearLayout>





Important Points

You must be able to see a <SurfaceView> tag in my layout..
When you need to update the content of the view rapidly you need to use the SurfaceView..
as is the case of the camera (Updated frequently)

                                                                     A) Initial Screen

B) Captured Image Thumbnail


As I could not run the application on a device...the screenshot is not showing the proper preview...


Enjoy...Suggestions required.. 
 




Friday, February 18, 2011

A Tribute!!!

Paying a tribute to Pratik Dehane (B.M.S). You are in our hearts brother and we miss you often.
I still remember the charm and sharpness you had but GOD had some different plans for you..
Miss you always brother


Thursday, February 17, 2011

Android Animation

Hello Fellows!!!
First of all, as per the previous post I will be showing the way I did all that stuff.

Note: You must have android-sdk installed and it should be updated and run successfully in eclipse.
          Google and even I prefer eclipse GYNAMEDE to develop Android Applications

In eclipse New--->Android Project--->Name your project with a proper package name.
Now you will be having a activity class generated just copy and the paste the code mentioned below:

My Activity

public class DeveloperAnimate extends Activity {
    /** Called when the activity is first created. */
View me,me1,me2,me3=null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        me=(View)findViewById(R.id.View01);
        me1=(View)findViewById(R.id.View02);
        me2=(View)findViewById(R.id.View03);
        me3=(View)findViewById(R.id.View04);
        Animation a = AnimationUtils.loadAnimation(this, R.anim.try1);
a.reset();
Animation b=AnimationUtils.loadAnimation(this, R.anim.try2);
b.reset();
Animation c=AnimationUtils.loadAnimation(this, R.anim.try3);
c.reset();
Animation d=AnimationUtils.loadAnimation(this, R.anim.try4);
d.reset();
me=(View)findViewById(R.id.View01);
   me1=(View)findViewById(R.id.View02);
   me2=(View)findViewById(R.id.View03);
   me3=(View)findViewById(R.id.View04);
   me.clearAnimation();
   me1.clearAnimation();
   me2.clearAnimation();
   me3.clearAnimation();
   me.startAnimation(a);
   me1.startAnimation(b);
   me2.startAnimation(c);
   me3.startAnimation(d);
   final int display=6000;
   Thread splash=new Thread()
   {
      int wait=0;
      public void run()
      {
      try{
      super.run();
      while(wait<display)
      {
      sleep(100);
      wait+=100;
      }
        }catch(Exception e)
        {
       
        }finally
        {
        startActivity(new Intent(DeveloperAnimate.this,MenuScreen.class));
        finish();
        }
        }
       
       };
       splash.start();
   
      }



Now the layout i.e. main.xml



<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">
<ImageView  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:id="@+id/image"
android:src="@drawable/tryfinal"
    />
</LinearLayout>   




<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<View 
android:id="@+id/View02" 
android:layout_width="2dip"     
android:layout_height="400dip" 
android:background="#2B497B"
android:visibility="invisible"
android:paddingLeft="250dip"
android:layout_marginLeft="230dip">
  </View>
</LinearLayout>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<View 
android:id="@+id/View01" 
android:layout_width="2dip"     
android:layout_height="325dip" 
android:visibility="invisible"
android:background="#2B497B"
android:paddingLeft="50dip"
android:layout_marginLeft="85dip">
  </View>
 </LinearLayout>


 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<View 
android:id="@+id/View03" 
android:layout_width="300dip"     
android:layout_height="3dip" 
android:visibility="invisible"
android:background="#2B497B"
android:paddingLeft="50dip"
android:layout_marginTop="90dip">
  </View>
 </LinearLayout>


  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
<View 
android:id="@+id/View04" 
android:layout_width="300dip"     
android:layout_height="3dip" 
android:visibility="invisible"
android:background="#2B497B"
android:paddingLeft="50dip"
android:layout_marginTop="195dip"
>
  </View>
 </LinearLayout>
</FrameLayout>


Now the animation files i.e. try1.xml,try2.xml,try3.xml,try4.xml i.e. 4 lines which I have animated I will be posting one of them because others are quite similar.
Note: These are the animation files. Therefore there is a different way of creating the animation XML
New-->Android XML-->select Animation from the appeared dialog box 



<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/accelerate_interpolator">
 <translate 
    android:fromXDelta="-600" 
    android:toXDelta="50" 
    android:duration="900" />
       <alpha    
xmlns:android="http://schemas.android.com/apk/res/android"    
android:fromAlpha="1.0"    
android:toAlpha="0.0"    
android:duration="3000" /> 
</set>


Define the Animation i.e. four files and run the project you will see the result.
Again need suggestions guys....

Wednesday, February 16, 2011

Secret Revealed

So, day to day before yesterday I was thinking regarding how should my application look like as it is a Game i.e. my FYP (Tic-Roid). It is an Bluetooth based multiplayer game for Android devices.
Previously I was thinking to name it as "Tic-Tac-Troid", Thanx to Suresh Sir as he suggested me this name "Tic-Roid". Though I was in favour of naming it as "Tic-Roid", superstitious Suresh Sir was another reason for being in favour of his suggestion.
Seriously, things are going well after renaming my application. I am also posting some screenshots of my application as I need reviews.

Animated Screen

Splash Screen

So guys kindly provide your reviews regarding the look and feel of the Splash screen. Though I have developed some of my application I will be sharing it in future posts. That's it for this post. :)

Tuesday, February 15, 2011

Greetings Fellows......
With a time span of around 100 days remaining at APIIT, a thought appeared in my mind
i.e. to start a blog with a purpose which you all will come to know after going through the blog.
Frankly speaking, someone ideally inspired me to write this blog.

At present this blog is about something which I have been working on since three months i.e. "Android".
Ahhhhh!!! I am speechless. The features I see while working on it are awesome.

Multimedia being my graduation specialization has made me hear about Flash, 3Ds MAX, Maya etc. and some of among them I have worked on even. Three days before while working on Android I was visiting some of the blogs "Android & Amir" & "SaiGeetha" etc. and once again Android surprised me.
I will be sharing it with you all as soon as possible.....