Search This Blog

Support my cause by downloading

Thursday, 28 May 2015

Android M Developer Preview are here, Whats new in Android M for developer?

Obviously Android M Developer Preview comes with more improvement to Android L. Along with new features and capabilities, the M Developer Preview includes a variety of system changes and API behavior changes.

Runtime Permissions

This preview introduces a new runtime permissions model, where users can now directly manage their app permissions at runtime. To determine if your app has been granted a permission, call the new Context.checkSelfPermission() method. To request for a permission, call the new Activity.requestPermission() method.

Power-Saving Optimizations


If a device is unplugged and left stationary with the screen off for a period of time, it goes into Doze mode where it attempts to keep the system in a sleep state. In this mode, devices periodically resume normal operations for brief periods of time so that app syncing can occur and the system can perform any pending operations.

App standby

With this preview, the system may determine that apps are idle when they are not in active use. Your app is considered idle after a period of time, unless the system detects any of these signals:
The app is explicitly launched by the user.
  • The app has a process currently in the foreground (either as an activity or foreground service, or in use by another activity or foreground service).
  • The app generates a notification that users see on the lock screen or in the notification tray.
  • The user explicitly asks for the app to be exempt from optimizations, via Settings.

Adoptable Storage Devices

With this preview, users can adopt external storage devices such as SD cards.

Apache HTTP Client Removal

This preview removes support for the Apache HTTP client. If your app is using this client and targets Android 2.3 (API level 9) or higher, use the HttpURLConnection class instead.

AudioManager Changes

Setting the volume directly or muting specific streams via the AudioManager class is no longer supported. The setStreamSolo() method is deprecated, and you should call the AudioManager.requestAudioFocus() method instead.

Text Selection

Text Selection

Android Keystore Changes

With this preview, the Android Keystore provider no longer supports DSA. ECDSA is still supported.

Wi-Fi and Networking Changes

  • Your apps can now change the state of WifiConfiguration objects only if you created these objects. You are not permitted to modify or delete WifiConfiguration objects created by the user or by other apps.
  • Previously, if an app forced the device to connect to a specific Wi-Fi network by using enableNetwork() with the disableAllOthers=true setting, the device disconnected from other networks such as cellular data. In this preview, the device no longer disconnects from such other networks. If your app’s targetSdkVersion is “20” or lower, it is pinned to the selected Wi-Fi network. If your app’s targetSdkVersion is “21” or higher, use the multinetwork APIs (such as openConnection(), bindSocket(), and the new ConnectivityManager.bindProcessToNetwork() method) to ensure that its network traffic is sent on the selected network.

Camera Service Changes

ART Runtime

The ART runtime now properly implements access rules for the newInstance() method. This change fixes a problem where Dalvik was checking access rules incorrectly in previous versions.

APK Validation

The platform now performs stricter validation of APKs. An APK is considered corrupt if a file is declared in the manifest but not present in the APK itself. An APK must be re-signed if any of the contents are removed.

Tuesday, 31 March 2015

RecyclerView example, Source code with onItemClickListener 

What is RecyclerView?

Android official site states “The RecyclerView widget is a more advanced and flexible version of ListView. This widget is a container for displaying large data sets that can be scrolled very efficiently by maintaining a limited number of views ”

RecyclerView is generally used when elements changes at run time on user action or network events

You will need android-support-v7-recyclerview.jar for RecyclerView to integrate in your projects. This article will explain you a way to implement onItemClickListener in RecyclerView.

Lets implement RecyclerView steps by steps. Source code  is here in case you may want to skip theory or unable to find android-support-v7-recyclerview.jar

Steps 1- Create android xml layouts

 < xmlns:android=""  
   tools:context="com.recyclerview.MainActivity" >  

Steps 2- Create Activity and RecyclerView.Adapter

 package com.recyclerview;  
 import android.os.Bundle;  
 import android.widget.Toast;  
 public class MainActivity extends ActionBarActivity implements OnItemRecycleViewClickListener {  
      RecyclerView mRecyclerView;  
      private String[] mData = { "Tofeeq AHmad", "Recycler View", "Layout managers for positioning items", "Default animations for common", "Tofeeq AHmad", "Recycler View",  
                "Layout managers for positioning items", "Default animations for common", "Tofeeq AHmad", "Recycler View", "Layout managers for positioning items",  
                "Default animations for common" };  
      protected void onCreate(Bundle savedInstanceState) {  
           mRecyclerView = (RecyclerView) findViewById(;  
           LinearLayoutManager mLinearManager = new LinearLayoutManager(this);  
           //          StaggeredGridLayoutManager mStaggeredGridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL);  
           //          mRecyclerView.setLayoutManager(mStaggeredGridLayoutManager);  
           //          GridLayoutManager mGridLayoutManager = new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false);  
           //          mRecyclerView.setLayoutManager(mGridLayoutManager);  
           mRecyclerView.setAdapter(new RecyclerAdapter(mData, this));  
      public void onItemClicked(int position, RecyclerAdapter mAdapter) {  
           Toast.makeText(this, String.valueOf(position), Toast.LENGTH_LONG).show();  
 package com.recyclerview;  
 import android.view.LayoutInflater;  
 import android.view.View;  
 import android.view.View.OnClickListener;  
 import android.view.ViewGroup;  
 import android.widget.ImageView;  
 import android.widget.TextView;  
 public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {  
      private String[] mDataset;  
      OnItemRecycleViewClickListener mOnItemRecycleViewClickListener;  
      public RecyclerAdapter(String[] myDataset, OnItemRecycleViewClickListener mOnItemRecycleViewClickListener) {  
           mDataset = myDataset;  
           this.mOnItemRecycleViewClickListener = mOnItemRecycleViewClickListener;  
      public static class ViewHolder extends RecyclerView.ViewHolder {  
           public TextView mTextView;  
           public ImageView mImageView;  
           public ViewHolder(View v) {  
                mTextView = (TextView) v.findViewById(;  
                mImageView = (ImageView) v.findViewById(;  
      public int getItemCount() {  
           return mDataset.length;  
      public void onBindViewHolder(ViewHolder arg0, int arg1) {  
           arg0.itemView.setOnClickListener(new OnClickListener() {  
                public void onClick(View v) {  
                     mOnItemRecycleViewClickListener.onItemClicked(Integer.parseInt(v.getTag().toString()), RecyclerAdapter.this);  
      public ViewHolder onCreateViewHolder(ViewGroup parent, int arg1) {  
           View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list, parent, false);  
           ViewHolder vh = new ViewHolder(v);  
           return vh;  

Steps 3- To Implment onItemClickListener create one interface and attach it with adapter. RecyclerAdapter adapter already have this attach with it in step 2.

 package com.recyclerview;  
 public interface OnItemRecycleViewClickListener {  
      public void onItemClicked(int position, RecyclerAdapter mAdapter);  

Android News and source code