Showing posts with label application. Show all posts
Showing posts with label application. Show all posts

Monday, 7 November 2016

EcomSample - Sample e-commerce Online Shopping App like flipkart, snapdeal, amazon

When ever I used to open any online shopping app, I wanted to know the the mechanism behind loading items, images, data which are not in some limited size. As an Android developer I can understand that many beginners would be thinking to make android app like flipkart, snapdeal or amazon etc. So here is the EcomSample app with complete source code available in github. Sample app is available on PlayStore. 

Download Source Code

Install App 


This app has below features:
1. Loading and caching images with RecyclerView and CardView.
2. Add to Cart and Wishlist, manage cart and wishlist.
3. Category wise items/products loading and caching in list.
4. Detailed item description.
5. All other options available in side Navigation Drawer.
6. Introslider at starting of application.
6. Material design based app.

Screen shots:




  











































































Note: Please consider the below points

1. The images are downloading from this site: https://www.pexels.com, But you can provide your own server urls to load the image.
2. Item description I have just hard coded only for showcase.

Please feel free to comment for any clarification or suggestion.
***

Monday, 4 July 2016

Android get the list of all installed apps with icons

We can get the list of all installed apps by Using PackageManager class. We can get the application name, package name, version no, icon etc using this class. In below example i have checked ApplicationInfo.FLAG_SYSTEM=0 which will exclude system apps. I you want to keep system app also in your list then disable this check. 



Steps to get installed application in Android

1. Create PackageInformation class.
2. Create Custom Adapter to handle list.
3. Design XML layout for list.
4. Access PackageInformation from MainActivity.

1. Create PackageInformation class.
This class has method getInstalledApps, this method is using PackageManager to get all the installed apps excluding system apps.

PackageInformation.java
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by mukeshk on 6/15/2016.
 */
public class PackageInformation {
    private Context mContext;

    public PackageInformation(Context context) {
        mContext = context;
    }

    /*
    * Get all the installed app excluding system apps
    * */
    public ArrayList<InfoObject> getInstalledApps() {
        ArrayList<InfoObject> listObj = new ArrayList<InfoObject>();
        final PackageManager packageManager = mContext.getPackageManager();
        List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
        for (ApplicationInfo applicationInfo : packages) {
            if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
                InfoObject newInfo = new InfoObject();
                newInfo.appname = applicationInfo.loadLabel(packageManager).toString();
                newInfo.packagename = applicationInfo.packageName;
                newInfo.icon = applicationInfo.loadIcon(packageManager);
                newInfo.launchactivity = packageManager.getLaunchIntentForPackage(applicationInfo.packageName);
                listObj.add(newInfo);
            }
        }
        return listObj;
    }

 
    class InfoObject {
        public String appname = "";
        public String packagename = "";
        public Intent launchactivity;
        public Drawable icon;
    }
}

2. Create Custom Adapter to handle list.
CustomAdapterAppList.java

import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.provider.Settings;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by mukeshk on 6/15/2016.
 */
public class CustomAdapterAppList extends BaseAdapter {
    private ArrayList<PackageInformation.InfoObject> mObjectApps;
    private Context mContext;

    public CustomAdapterAppList(Context context, ArrayList<PackageInformation.InfoObject> apps) {
        this.mContext = context;
        this.mObjectApps = apps;
    }

    @Override
    public int getCount() {
        return mObjectApps.size();
    }

    @Override
    public Object getItem(int position) {
        return mObjectApps.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
        convertView = inflater.inflate(R.layout.layout_adapter_custom_app_list, parent, false);
        holder = new ViewHolder();
        holder.appName = (TextView) convertView.findViewById(R.id.text_app_name);
        holder.appIcon = (ImageView) convertView.findViewById(R.id.image_app_icon);
        holder.appOption = (ImageView) convertView.findViewById(R.id.image_option);
        //Set values
        final PackageInformation.InfoObject infoObject = mObjectApps.get(position);
        holder.appName.setText(infoObject.appname);
        holder.appIcon.setImageDrawable(infoObject.icon);
        //Click action for app
        holder.appOption.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Open the specific App Info page:
                String packageName = infoObject.packagename;
                try {
                    Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    intent.setData(Uri.parse("package:" + packageName));
                    mContext.startActivity(intent);
                } catch (ActivityNotFoundException e) {
                    //Open the generic Apps manager
                    Intent intent = new Intent(Settings.ACTION_SETTINGS);
                    mContext.startActivity(intent);
                }
            }
        });
        return convertView;
    }

    private class ViewHolder {
        TextView appName;
        TextView appVersion;
        ImageView appIcon;
        ImageView appOption;
    }
}

3. Design XML layout for list.
layout_adapter_custom_app_list.xml

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:fitsSystemWindows="true"
              tools:context=".MainActivity">

    <!-- list row   -->

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="3"
            android:padding="10dp">

                <ImageView
                    android:id="@+id/image_app_icon"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center|left"
                    android:layout_weight=".5"
                    tools:ignore="ContentDescription"/>

                    <TextView
                    android:id="@+id/text_app_name"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="2"
                    android:layout_marginLeft="10dp"
                    android:text="App name" />
                    <ImageView
                        android:id="@+id/image_option"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center|left"
                        android:layout_weight=".5"
                        tools:ignore="ContentDescription"/>

            </LinearLayout>
        </LinearLayout>
4. Access PackageInformation from MainActivity.
MainActivity.java
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;
import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listViewApps=(ListView)findViewById(R.id.list_app);

        //Get the information of all the installed application in device
        PackageInformation packageInformation=new PackageInformation(MainActivity.this);
        ArrayList<PackageInformation.InfoObject> apps= packageInformation.getMovableApps();

        CustomAdapterAppList adapterAppList=new CustomAdapterAppList(MainActivity.this,apps);
        adapterAppList.notifyDataSetChanged();
        listViewApps.setAdapter(adapterAppList);

    }
 }

Run the application and you can see the list of applications. 

Please feel free to comment for any clarification or suggestion.
***