Tuesday 13 November 2012

Android horizontal listview | horizontal listview | android listview | android custom horizontal listview

Hello Droid Guys,

In android , there is ListView tag in xml, with the help of this we can show
list view but its apperance is vertically not horizontally and if you want to show
a horizontal listview then you have to make your custom view,


1. Create a new project in Eclipse File New ⇒ Android ⇒ Application Project and fill the required details.
2. Create required files needed to generate a list view. I am using  activity_horizontal_list_view.xml as list view and created a new xml file for single list item named  listview_item.xml

horizontal list view example
Horizontal listView

activity_horizontal_list_view.xml 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"
    android:orientation="vertical" >
    <ImageView
        android:id="@+id/selected_imageview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/gallery_relative_layout"
        android:layout_marginLeft="30dip"
        android:layout_marginRight="30dip"
        android:layout_marginTop="30dip"
        android:background="@drawable/natureimage1" />
    <RelativeLayout
        android:id="@+id/gallery_relative_layout"
        android:layout_width="wrap_content"
        android:layout_height="150dip"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal" >
        <com.mukesh.ui.HorizontalView
            android:id="@+id/gallery"
            android:layout_width="match_parent"
            android:layout_height="75dp"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="15dp"
            android:smoothScrollbar="true"
            android:spacing="20dip" >
        </com.mukesh.ui.HorizontalView>
    </RelativeLayout>
</RelativeLayout>
listview_item.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/icon"
        android:layout_width="72dp"
        android:layout_height="75dp" />

</RelativeLayout>





3. HorizontalView.Java : These class help us to create view. This is my custom 
               view class which help us in showing listview Horizontally.
     

package com.mukesh.ui;

import java.util.LinkedList;
import java.util.Queue;

import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.Scroller;

public class HorizontalView extends AdapterView {

 public boolean mAlwaysOverrideTouch = true;
 protected ListAdapter mAdapter;
 private int mLeftViewIndex = -1;
 private int mRightViewIndex = 0;
 protected int mCurrentX;
 protected int mNextX;
 private int mMaxX = Integer.MAX_VALUE;
 private int mDisplayOffset = 0;
 protected Scroller mScroller;
 private GestureDetector mGesture;
 private Queue mRemovedViewQueue = new LinkedList();
 private OnItemSelectedListener mOnItemSelected;
 private OnItemClickListener mOnItemClicked;
 private OnItemLongClickListener mOnItemLongClicked;
 private boolean mDataChanged = false;

 public HorizontalView(Context context, AttributeSet attrs) {
  super(context, attrs);
  initView();
 }

 private synchronized void initView() {
  mLeftViewIndex = -1;
  mRightViewIndex = 0;
  mDisplayOffset = 0;
  mCurrentX = 0;
  mNextX = 0;
  mMaxX = Integer.MAX_VALUE;
  mScroller = new Scroller(getContext());
  mGesture = new GestureDetector(getContext(), mOnGesture);
 }

 @Override
 public void setOnItemSelectedListener(
   AdapterView.OnItemSelectedListener listener) {
  mOnItemSelected = listener;
 }

 @Override
 public void setOnItemClickListener(AdapterView.OnItemClickListener listener) {
  mOnItemClicked = listener;
 }

 @Override
 public void setOnItemLongClickListener(
   AdapterView.OnItemLongClickListener listener) {
  mOnItemLongClicked = listener;
 }

 private DataSetObserver mDataObserver = new DataSetObserver() {

  @Override
  public void onChanged() {
   synchronized (HorizontalView.this) {
    mDataChanged = true;
   }
   invalidate();
   requestLayout();
  }

  @Override
  public void onInvalidated() {
   reset();
   invalidate();
   requestLayout();
  }

 };

 @Override
 public ListAdapter getAdapter() {
  return mAdapter;
 }

 @Override
 public View getSelectedView() {
  // TODO: implement
  return null;
 }

 @Override
 public void setAdapter(ListAdapter adapter) {
  if (mAdapter != null) {
   mAdapter.unregisterDataSetObserver(mDataObserver);
  }
  mAdapter = adapter;
  mAdapter.registerDataSetObserver(mDataObserver);
  reset();
 }

 private synchronized void reset() {
  initView();
  removeAllViewsInLayout();
  requestLayout();
 }

 @Override
 public void setSelection(int position) {
  // TODO: implement
 }

 private void addAndMeasureChild(final View child, int viewPos) {
  LayoutParams params = child.getLayoutParams();
  if (params == null) {
   params = new LayoutParams(LayoutParams.FILL_PARENT,
     LayoutParams.FILL_PARENT);
  }

  addViewInLayout(child, viewPos, params, true);
  child.measure(
    MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST),
    MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST));
 }

 @Override
 protected synchronized void onLayout(boolean changed, int left, int top,
   int right, int bottom) {
  super.onLayout(changed, left, top, right, bottom);

  if (mAdapter == null) {
   return;
  }

  if (mDataChanged) {
   int oldCurrentX = mCurrentX;
   initView();
   removeAllViewsInLayout();
   mNextX = oldCurrentX;
   mDataChanged = false;
  }

  if (mScroller.computeScrollOffset()) {
   int scrollx = mScroller.getCurrX();
   mNextX = scrollx;
  }

  if (mNextX <= 0) {
   mNextX = 0;
   mScroller.forceFinished(true);
  }
  if (mNextX >= mMaxX) {
   mNextX = mMaxX;
   mScroller.forceFinished(true);
  }

  int dx = mCurrentX - mNextX;

  // removeNonVisibleItems(dx);
  fillList(dx);
  positionItems(dx);

  mCurrentX = mNextX;

  if (!mScroller.isFinished()) {
   post(new Runnable() {
    @Override
    public void run() {
     requestLayout();
    }
   });

  }
 }

 private void fillList(final int dx) {
  int edge = 0;
  View child = getChildAt(getChildCount() - 1);
  if (child != null) {
   edge = child.getRight();
  }
  fillListRight(edge, dx);

  edge = 0;
  child = getChildAt(0);
  if (child != null) {
   edge = child.getLeft();
  }
  fillListLeft(edge, dx);

 }

 private void fillListRight(int rightEdge, final int dx) {
  while (rightEdge + dx < getWidth()
    && mRightViewIndex < mAdapter.getCount()) {

   View child = mAdapter.getView(mRightViewIndex,
     mRemovedViewQueue.poll(), this);
   addAndMeasureChild(child, -1);
   rightEdge += child.getMeasuredWidth();

   if (mRightViewIndex == mAdapter.getCount() - 1) {
    mMaxX = mCurrentX + rightEdge - getWidth();
   }

   if (mMaxX < 0) {
    mMaxX = 0;
   }
   mRightViewIndex++;
  }

 }

 private void fillListLeft(int leftEdge, final int dx) {
  while (leftEdge + dx > 0 && mLeftViewIndex >= 0) {
   View child = mAdapter.getView(mLeftViewIndex,
     mRemovedViewQueue.poll(), this);
   addAndMeasureChild(child, 0);
   leftEdge -= child.getMeasuredWidth();
   mLeftViewIndex--;
   mDisplayOffset -= child.getMeasuredWidth();
  }
 }

 /*
  * private void removeNonVisibleItems(final int dx) { View child =
  * getChildAt(0); while(child != null && child.getRight() + dx <= 0) {
  * mDisplayOffset += child.getMeasuredWidth();
  * mRemovedViewQueue.offer(child); removeViewInLayout(child);
  * mLeftViewIndex++; child = getChildAt(0);
  * 
  * }
  * 
  * child = getChildAt(getChildCount()-1); while(child != null &&
  * child.getLeft() + dx >= getWidth()) { mRemovedViewQueue.offer(child);
  * removeViewInLayout(child); mRightViewIndex--; child =
  * getChildAt(getChildCount()-1); } }
  */

 private void positionItems(final int dx) {
  if (getChildCount() > 0) {
   mDisplayOffset += dx;
   int left = mDisplayOffset;
   for (int i = 0; i < getChildCount(); i++) {
    View child = getChildAt(i);
    int childWidth = child.getMeasuredWidth();
    child.layout(left, 0, left + childWidth,
      child.getMeasuredHeight());
    left += childWidth;
   }
  }
 }

 public synchronized void scrollTo(int x) {
  mScroller.startScroll(mNextX, 0, x - mNextX, 0);
  requestLayout();
 }

 @Override
 public boolean dispatchTouchEvent(MotionEvent ev) {
  boolean handled = super.dispatchTouchEvent(ev);
  handled |= mGesture.onTouchEvent(ev);
  return handled;
 }

 protected boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
   float velocityY) {
  synchronized (HorizontalView.this) {
   mScroller.fling(mNextX, 0, (int) -velocityX, 0, 0, mMaxX, 0, 0);
  }
  requestLayout();

  return true;
 }

 protected boolean onDown(MotionEvent e) {
  mScroller.forceFinished(true);
  return true;
 }

 private OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener() {

  @Override
  public boolean onDown(MotionEvent e) {
   return HorizontalView.this.onDown(e);
  }

  @Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
    float velocityY) {
   return HorizontalView.this.onFling(e1, e2, velocityX, velocityY);
  }

  @Override
  public boolean onScroll(MotionEvent e1, MotionEvent e2,
    float distanceX, float distanceY) {

   synchronized (HorizontalView.this) {
    mNextX += (int) distanceX;
   }
   requestLayout();

   return true;
  }

  @Override
  public boolean onSingleTapConfirmed(MotionEvent e) {
   for (int i = 0; i < getChildCount(); i++) {
    View child = getChildAt(i);
    if (isEventWithinView(e, child)) {
     if (mOnItemClicked != null) {
      mOnItemClicked.onItemClick(HorizontalView.this, child,
        mLeftViewIndex + 1 + i,
        mAdapter.getItemId(mLeftViewIndex + 1 + i));
     }
     if (mOnItemSelected != null) {
      mOnItemSelected.onItemSelected(HorizontalView.this,
        child, mLeftViewIndex + 1 + i,
        mAdapter.getItemId(mLeftViewIndex + 1 + i));
     }
     break;
    }

   }
   return true;
  }

  @Override
  public void onLongPress(MotionEvent e) {
   int childCount = getChildCount();
   for (int i = 0; i < childCount; i++) {
    View child = getChildAt(i);
    if (isEventWithinView(e, child)) {
     if (mOnItemLongClicked != null) {
      mOnItemLongClicked.onItemLongClick(HorizontalView.this,
        child, mLeftViewIndex + 1 + i,
        mAdapter.getItemId(mLeftViewIndex + 1 + i));
     }
     break;
    }

   }
  }

  private boolean isEventWithinView(MotionEvent e, View child) {
   Rect viewRect = new Rect();
   int[] childPosition = new int[2];
   child.getLocationOnScreen(childPosition);
   int left = childPosition[0];
   int right = left + child.getWidth();
   int top = childPosition[1];
   int bottom = top + child.getHeight();
   viewRect.set(left, top, right, bottom);
   return viewRect.contains((int) e.getRawX(), (int) e.getRawY());
  }
 };

}




4. Now my Activity class(HorizontalListView.java ) and adapter class
   (HorizontalImageAdapter.java )




A.HorizontalListView.java


package com.mukesh.horizontallistview;

import java.util.ArrayList;
import java.util.List;

import com.mukesh.ui.HorizontalView;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;

public class HorizontalListView extends Activity {

 private List drawables;
 private HorizontalImageAdapter imageAdapter;
 private HorizontalView listView;

 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_horizontal_list_view);

  listView = (HorizontalView) findViewById(R.id.gallery);
  getDrawablesList();
  setupUI();
 }

 private void setupUI() {
  imageAdapter = new HorizontalImageAdapter(this, drawables);

  listView.setAdapter(imageAdapter);

 }

 private void getDrawablesList() {

      drawables = new ArrayList();
      drawables.add(getResources().getDrawable(R.drawable.natureimage1));
      drawables.add(getResources().getDrawable(R.drawable.natureimage2));
      drawables.add(getResources().getDrawable(R.drawable.natureimage3));
      drawables.add(getResources().getDrawable(R.drawable.natureimage4));
      drawables.add(getResources().getDrawable(R.drawable.natureimage5));
      drawables.add(getResources().getDrawable(R.drawable.natureimage6));
      drawables.add(getResources().getDrawable(R.drawable.natureimage7));
      drawables.add(getResources().getDrawable(R.drawable.natureimage8));
      drawables.add(getResources().getDrawable(R.drawable.natureimage9));
      drawables.add(getResources().getDrawable(R.drawable.natureimage10));
      drawables.add(getResources().getDrawable(R.drawable.natureimage12));
      drawables.add(getResources().getDrawable(R.drawable.natureimage13));
      drawables.add(getResources().getDrawable(R.drawable.natureimage15));

 }

}




B. HorizontalImageAdapter.java 
package com.mukesh.horizontallistview; import java.util.List; import android.app.Activity; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; public class HorizontalImageAdapter extends BaseAdapter { private Activity context; private static ImageView imageView; private List plotsImages; private static ViewHolder holder; private LayoutInflater l_Inflater; public HorizontalImageAdapter(Activity context, List plotsImages) { this.context = context; this.plotsImages = plotsImages; l_Inflater = LayoutInflater.from(context); } @Override public int getCount() { return plotsImages.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { holder = new ViewHolder(); convertView = l_Inflater.inflate(R.layout.listview_item, null); holder = new ViewHolder(); holder.imageView = (ImageView) convertView.findViewById(R.id.icon); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.imageView.setImageDrawable(plotsImages.get(position)); return convertView; } private static class ViewHolder { ImageView imageView; } }


This is what I am doing to show Horizontal listviw in android.


Cheers :)
Enjoy Coding....

Thursday 8 November 2012

turn on or off the wifi connection in android Programatically



Hello Android Guys,

This is a simple tutorial which covers following parts:
     1. Programatically  turn on or turn off the wifi connection without going to setting option
         in android. For this you have to do two things

     A. Passing Permission inside your AndroidManifest.xml file:
   <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

     B. Inside your Activity
              I. For turning off the wifi

       WifiManager wifiManager = (WifiManager)context.getSystemService
                                                                                          (Context.WIFI_SERVICE);
       wifiManager.setWifiEnabled(false); 

             II. For turning on the wifi   

        WifiManager wifiManager = (WifiManager)context.getSystemService
                                                                                                  (Context.WIFI_SERVICE);
        wifiManager.setWifiEnabled(true); 


Hope , this will Help some one.
Cheers :)
Happy Coding :)


Can't create handler inside thread that has not called Looper.prepare()


Hello Friend ,

Today, I Stuck with a Weird issue. Calling a thread inside ui thread handler. I am facing
"Can't create handler inside thread that has not called Looper.prepare()" error.

After spending lots of time finally , my problem is fixed. Here is my approach.
     1. Calling the Looper.prepare() just next run
     2. Calling Looper.loop()
     3. Finally you need to destroy or kill your looper using- Looper.getMyLooper().quit().


Here is my Code,

Note: Please declare this variable in your class private volatile Looper mMyLooper;


private Handler handler = new Handler() {
 @Override
 public void handleMessage(Message msg) {

 final SyncRequestManager test = new SyncRequestManager(Test.this);
 try {
            message = message.replaceAll("\n", "");
            progressDialog= ProgressDialog.show(Test.this,
                   "", "Shairing please wait....",true);

        new Thread() {
                  public void run() {
                         try{
                             Looper.prepare();
                             JSONObject jsonObject = test.postOnFacebookWall(mess                      age,byteArray);

                                 JSONObject response = jsonObject.getJSONObject("response");
                                 final String iconUrl = response.getString("icon");
                                 Log.i(" Response" , ""+response);
                                 Log.i(" Icon" , ""+iconUrl);

                                      final FacebookUtil fbUtil = new FacebookUtil(ShareMotekon.this);
       fbUtil.postMessageOnWall(message, iconUrl,byteArray);
       sleep(8000);
      } catch (Exception e) {
          Log.d("Exception", e.getMessage());
      }
           progressDialog.dismiss();                       
           mhandler.sendEmptyMessage(0);
     }
   }.start();
 } catch (Exception e) {
 e.printStackTrace();

   }
  }
};


private Handler mhandler = new Handler() {

  @Override
    public void handleMessage(Message msg) {
   btnNext.setEnabled(true);
   Toast.makeText(ShareMotekon.this,
                       "Message Shared Successfully!", Toast.LENGTH_LONG).show();

    Log.d("INSIDE HANDLER","FB SHARE");

    myLooper = Looper.myLooper();
            Looper.loop();
                         myLooper.quit();  
             }
    };


May , this will help some one.
Enjoy Coding :)

Tuesday 23 October 2012

Android Search Functionality with ListView same as Google search functionality


Hello Friends,

Hello Friends , have you searching for Google like search functionality in your Android
application ??

custom listview search
Search bar in android
custom listview search in android
search icon inside edit text



1. Create a new project in Eclipse File New ⇒ Android ⇒ Application Project and fill the required details.
2. Create required files needed to generate a listview. I am using my default activity_main.xml as listview and created a new xml file for single listitem named listview.xml
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/EditText01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:drawableLeft="@android:drawable/ic_menu_search"
        android:hint="Search" >
    </EditText>

    <ListView
        android:id="@+id/ListView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>



listview.xml




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/background_dark"
    android:gravity="left|center"
    android:paddingBottom="5px"
    android:paddingLeft="5px"
    android:paddingTop="5px" >

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10px"
        android:textColor="#0099CC"
        android:textSize="20px"
        android:textStyle="bold" >
    </TextView>

</LinearLayout>


MainActivity.java


package com.mukesh.customsearch;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

        EditText edittext;
        ListView listview;

        String[] text = { "One", "HTC One X", "Samsung Galaxy S3", "Samsung 
         Galaxy Note 800", "HTC Sense", "HTC Sensation XE", "HTC Wildfire S",
                        "HTC Wildfire", "Wildfire S", "HTC" };

        int textlength = 0;

        ArrayList<String> text_sort = new ArrayList<String>();
        ArrayList<Integer> image_sort = new ArrayList<Integer>();

        public void onCreate(Bundle savedInstanceState) {

                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);

                edittext = (EditText) findViewById(R.id.EditText01);
                listview = (ListView) findViewById(R.id.ListView01);
                listview.setAdapter(new CustomAdapter(text));

                edittext.addTextChangedListener(new TextWatcher() {

                        public void afterTextChanged(Editable s) {

                        }

                        public void beforeTextChanged(CharSequence s, int start,                                 int count,
                                        int after) {

                        }

                        public void onTextChanged(CharSequence s, int start, int                                       before,
                                        int count) {

                                textlength = edittext.getText().length();
                                text_sort.clear();
                                image_sort.clear();

                                for (int i = 0; i < text.length; i++) {
                                        String name = text[i];
                                        String searchtext = edittext.getText()
                                                        .toString();
                                        if (textlength <= text[i].length()) {
                                                if (name.toLowerCase().indexOf
                                             (searchtext.toLowerCase())!= -1) {
                                                        text_sort.add(text[i]);
                                                }
                                        }
                                }

                        listview.setAdapter(new CustomAdapter(text_sort));

                        }
                });
        }

        class CustomAdapter extends BaseAdapter {

                String[] data_text;

                CustomAdapter() {

                }

                CustomAdapter(String[] text) {
                        data_text = text;
                }

                CustomAdapter(ArrayList<String> text) {

                        data_text = new String[text.size()];

                        for (int i = 0; i < text.size(); i++) {
                                data_text[i] = text.get(i);
                        }

                }

                public int getCount() {
                        return data_text.length;
                }

                public String getItem(int position) {
                        return null;
                }

                public long getItemId(int position) {
                        return position;
                }

                public View getView(int position, View convertView,
                                         ViewGroup parent) {

                        LayoutInflater inflater = getLayoutInflater();
                        View row;

                        row = inflater.inflate(R.layout.listview, parent, false);

                        TextView textview = (TextView) row.findViewById(R.id.Text                                               View01);

                        textview.setText(data_text[position]);

                        return (row);

                }
        }

}




Enjoy Coding :)





Search in Custom Listview in Android | Android Custom Search | Custom Listview


Hello Friends ,

Today , I am Sharing my code my code with the help of which we can easily implements the
search functionality on listview or on a custom list view.

android search
android search bar

android search
Search  icon inside edit text 




1. Create a new project in Eclipse File New ⇒ Android ⇒ Application Project and fill the required details.
2. Create required files needed to generate a list view. I am using my default activity_main.xml as list view and created a new xml file for single list item named listview.xml
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    <EditText

        android:id="@+id/EditText01"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"
         
        android:drawableLeft="@android:drawable/ic_menu_search"      

        android:hint="Search" >

    </EditText>

    <ListView

        android:id="@+id/ListView01"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

    </ListView>

</LinearLayout>



listview.xml




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/background_dark"
    android:gravity="left|center"
    android:paddingBottom="5px"
    android:paddingLeft="5px"
    android:paddingTop="5px" >

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10px"
        android:textColor="#0099CC"
        android:textSize="20px"
        android:textStyle="bold" >
    </TextView>

</LinearLayout>


MainActivity.java


package com.mukesh.customsearch;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

 EditText edittext;
 ListView listview;

 String[] text = { "One", "HTC One X", "Samsung Galaxy S3", "Samsung 
         Galaxy Note 800", "HTC Sense", "HTC Sensation XE", "HTC Wildfire S",
   "HTC Wildfire", "Wildfire S", "HTC" };

 int textlength = 0;

 ArrayList<String> text_sort = new ArrayList<String>();
 ArrayList<Integer> image_sort = new ArrayList<Integer>();

 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  edittext = (EditText) findViewById(R.id.EditText01);
  listview = (ListView) findViewById(R.id.ListView01);
  listview.setAdapter(new CustomAdapter(text));

  edittext.addTextChangedListener(new TextWatcher() {

   public void afterTextChanged(Editable s) {

   }

   public void beforeTextChanged(CharSequence s, int start,                                 int count,
     int after) {

   }

   public void onTextChanged(CharSequence s, int start, int                                       before,
     int count) {

    textlength = edittext.getText().length();
    text_sort.clear();
    image_sort.clear();

    for (int i = 0; i < text.length; i++) {
     if (textlength <= text[i].length()) {
      if (edittext
        .getText()
        .toString()
        .equalsIgnoreCase                                                                    (
          (                                                                  String) text[i]                                     .subSequence(0,textlength))) {
       text_sort.add(text[i]);
      }
     }
    }

    listview.setAdapter(new CustomAdapter(text_sort));

   }
  });
 }

 class CustomAdapter extends BaseAdapter {

  String[] data_text;

  CustomAdapter() {

  }

  CustomAdapter(String[] text) {
   data_text = text;
  }

  CustomAdapter(ArrayList<String> text) {

   data_text = new String[text.size()];

   for (int i = 0; i < text.size(); i++) {
    data_text[i] = text.get(i);
   }

  }

  public int getCount() {
   return data_text.length;
  }

  public String getItem(int position) {
   return null;
  }

  public long getItemId(int position) {
   return position;
  }

  public View getView(int position, View convertView,
                                         ViewGroup parent) {

   LayoutInflater inflater = getLayoutInflater();
   View row;

   row = inflater.inflate(R.layout.listview, parent, false);

   TextView textview = (TextView) row.findViewById(R.id.Text                                               View01);

   textview.setText(data_text[position]);

   return (row);

  }
 }

}




Enjoy Coding :)


Blog Related to this :
1. Horizontal ListView


Monday 8 October 2012

Multipart image upload in android

Hello Friends,

I'm trying to upload image to my server in Android..???

After spending a lots of time , I came across Multipart image Upload.Using this 
we can easily upload image as well as file on our server.
Note: The method upload the image using http multipart form data.
           In my condition , My web web service method(upload_image) requires
           three parameter .
            1. A text message
            2. Image or Template Id
            3. Icon or Image in byte array format with filename.
   Also , I have to pass user token which i am saving into share preference,
   when user successfully logged in. Also the API Version which is nothing
   but a string(e.g 1.1) which will be saved in my Config Class.
   Please , Change the above parameter and post url as per your requirement. 
           
Note: Here , Instead of using android default HTTP client , I am using the 
          Apache Http client. Download it from  Here


     And placed it inside your project lib folder.


      /**
  * Method uploads the image using HTTP Multipart form data.
  * 
  * @param imageData
  * @param filename
         * @param icon   
  * @return
  * @throws Exception
  */



public static boolean uploadImage(final byte[] imageData, String filename ,String message) throws Exception{

        String responseString = null;       

        PostMethod method;

        String auth_token = Preference.getAuthToken(mContext);


        method = new PostMethod("http://10.0.2.20/"+ "upload_image/" +Config.getApiVersion()
               + "/"     +auth_token); 

                org.apache.commons.httpclient.HttpClient client = new              
                                            org.apache.commons.httpclient.HttpClient();

                client.getHttpConnectionManager().getParams().setConnectionTimeout(

                                100000);

                FilePart photo = new FilePart("icon", 
                                                      new ByteArrayPartSource( filename, imageData));

                photo.setContentType("image/png");
                photo.setCharSet(null);
                String s    =   new String(imageData);
               Part[] parts = {
                                new StringPart("message_text", message),
                                new StringPart("template_id","1"),
                                photo
                                };

                method.setRequestEntity(new 
                                              MultipartRequestEntity(parts, method.getParams()));
                client.executeMethod(method);
                responseString = method.getResponseBodyAsString();
                method.releaseConnection();

                Log.e("httpPost", "Response status: " + responseString);

        if (responseString.equals("SUCCESS")) {
                return true;
        } else {
                return false;
        }
    } 


Hope This Will Helps Some one.
Cheers :)
Enjoy Coding... :)

Tuesday 25 September 2012

FourSquare Integration in android

Hello All,

Here are the steps to integrate foursquare in your android application.

1. Creation of application and getting the client secret key for testing.
     https://developer.foursquare.com/


four square

foursquare sdk


android foursquare sdk

android foursquare sdk

2. Now import the below source code into your workspace and run
    the application.


 


1. MainActivity


package com.mukesh.foursquare.android;

/**
 * Encapsulation of a MainActivity: a demo for using api
 *
 * @author Mukesh Yadav
 */
import java.io.IOException;
import java.net.MalformedURLException;
import com.jiramot.foursquare.android.R;
import com.mukesh.foursquare.android.Foursquare.DialogListener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class Main extends Activity {

Foursquare foursquare;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
foursquare = new Foursquare("Client Id","Client Secret","Redirect Url");

foursquare.authorize(this, new FoursquareAuthenDialogListener());

private class FoursquareAuthenDialogListener implements DialogListener {

@Override
public void onComplete(Bundle values) {

 try {
     String aa = null;
     aa = foursquare.request("users/self");
     Log.d("Foursquare-Main", aa);
 } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
}
}

@Override
public void onFoursquareError(FoursquareError e) {
   // TODO Auto-generated method stub
}

@Override
public void onError(DialogError e) {
   // TODO Auto-generated method stub
}

@Override
public void onCancel() {
  // TODO Auto-generated method stub
}
}
}


2. Foursquare


package com.mukesh.foursquare.android;

/**
 * Encapsulation of Foursquare.
 *
 * @author Mukesh Yadav
 */

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.webkit.CookieSyncManager;

public class Foursquare {

 private static final String LOGIN = "oauth";
 public static final String API_END_POING_BASE_URL = "https://api.foursquare.com/v2/";
 public static String REDIRECT_URI;
 public static final String API_URL = "https://foursquare.com/oauth2/";
 //public static final String CANCEL_URI = "";
 public static final String TOKEN = "access_token";
 public static final String EXPIRES = "expires_in";
 public static final String SINGLE_SIGN_ON_DISABLED = "service_disabled";
 public static String AUTHENTICATE_URL = "https://foursquare.com/oauth2/authenticate";// +

 private String mClientId;
 private String mClientSecret;
 private String mAccessToken = null;

 private DialogListener mAuthDialogListener;
 
 public Foursquare(String clientId, String clientSecret, String redirectUrl) {
  if (clientId == null || clientSecret == null) {
   throw new IllegalArgumentException(
     "You must specify your application ID when instantiating "
       + "a Foursquare object. See README for details.");
  }
  mClientId = clientId;
  mClientSecret = clientSecret;
  REDIRECT_URI = redirectUrl;
 }

 public void authorize(Activity activity, final DialogListener listener) {
  mAuthDialogListener = listener;
  startDialogAuth(activity);
 }

 private void startDialogAuth(Activity activity) {
  CookieSyncManager.createInstance(activity);
  Bundle params = new Bundle();
  dialog(activity, LOGIN, params, new DialogListener() {

   public void onComplete(Bundle values) {
    // ensure any cookies set by the dialog are saved
    CookieSyncManager.getInstance().sync();
    String _token = values.getString(TOKEN);
    setAccessToken(_token);
    // setAccessExpiresIn(values.getString(EXPIRES));
    if (isSessionValid()) {
     Log.d("Foursquare-authorize",
       "Login Success! access_token=" + getAccessToken());
     mAuthDialogListener.onComplete(values);
    } else {
     mAuthDialogListener.onFoursquareError(new FoursquareError(
       "Failed to receive access token."));
    }
   }

   public void onError(DialogError error) {
    Log.d("Foursquare-authorize", "Login failed: " + error);
    mAuthDialogListener.onError(error);
   }

   public void onFoursquareError(FoursquareError error) {
    Log.d("Foursquare-authorize", "Login failed: " + error);
    mAuthDialogListener.onFoursquareError(error);
   }

   public void onCancel() {
    Log.d("Foursquare-authorize", "Login canceled");
    mAuthDialogListener.onCancel();
   }
  });
 }

 public void dialog(Context context, String action, Bundle parameters,
   final DialogListener listener) {

  String endpoint = "";

  parameters.putString("client_id", mClientId);
  parameters.putString("display", "touch");
  if (action.equals(LOGIN)) {
   endpoint = AUTHENTICATE_URL;
   parameters.putString("client_secret", mClientSecret);
   parameters.putString("response_type", "token");
   parameters.putString("redirect_uri", REDIRECT_URI);
  }

//  if (isSessionValid()) {
//   parameters.putString(TOKEN, getAccessToken());
//  }
  String url = endpoint + "?" + Util.encodeUrl(parameters);
  if (context.checkCallingOrSelfPermission(Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {
   Util.showAlert(context, "Error",
     "Application requires permission to access the Internet");
  } else {
   new FoursquareDialog(context, url, listener).show();
  }
 }

 public boolean isSessionValid() {
  if (getAccessToken() != null) {
   return true;
  }
  return false;
 }

 public void setAccessToken(String token) {
  mAccessToken = token;
 }

 public String getAccessToken() {
  return mAccessToken;
 }

 public String request(String graphPath) throws MalformedURLException,
   IOException {
  return request(graphPath, new Bundle(), "GET");
 }

 public String request(String graphPath, Bundle parameters)
   throws MalformedURLException, IOException {
  return request(graphPath, parameters, "GET");
 }

 public String request(String graphPath, Bundle params, String httpMethod)
   throws FileNotFoundException, MalformedURLException, IOException {
  params.putString("format", "json");
  if (isSessionValid()) {
   params.putString("oauth_token", getAccessToken());
  }
  String url = API_END_POING_BASE_URL + graphPath;
  return Util.openUrl(url, httpMethod, params);
 }

 public static interface DialogListener {

  /**
   * Called when a dialog completes.
   * 
   * Executed by the thread that initiated the dialog.
   * 
   * @param values
   *            Key-value string pairs extracted from the response.
   */
  public void onComplete(Bundle values);

  /**
   * Called when a Foursquare responds to a dialog with an error.
   * 
   * Executed by the thread that initiated the dialog.
   * 
   */
  public void onFoursquareError(FoursquareError e);

  /**
   * Called when a dialog has an error.
   * 
   * Executed by the thread that initiated the dialog.
   * 
   */
  public void onError(DialogError e);

  /**
   * Called when a dialog is canceled by the user.
   * 
   * Executed by the thread that initiated the dialog.
   * 
   */
  public void onCancel();

 }
}


Download the Source Code
FourSquare.zip


Enjioy Coding

 

Copyright @ 2013 Android Developers Blog.