Thursday 13 April 2017


Marshmallow Permissions 

Now we have to check marshmallow permissions in our application, I have developed one PermissionUtils class for it, 
We have just called one method and pass which permission you wants to check. You would implement in 10 mins only.

PermissionUtils : 

public class PermissionUtils implements ActivityCompat.OnRequestPermissionsResultCallback {


    public final static String PERMISSION_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE;
    private Context context;
    private PermissionGranted permissionGranted;

    public PermissionUtils(final Context context) {
        this.context = context;
    }


    /**
     * Check the permission
     * Only pass the permission which you wants to check
     *
     *
@param
permission  Permission Name
     *
@param
requestCode Call Back for permission granted or not.
     *
@return is permission granted or not.
     */
   
public boolean checkPermission(final String permission, final int requestCode) {
        final int readPermissionCheck = ContextCompat.checkSelfPermission(context, permission);
        if (readPermissionCheck != PackageManager.PERMISSION_GRANTED) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                ActivityCompat.requestPermissions((Activity) context, new String[]{permission},
                        requestCode);
                return true;
            }
            return true;
        } else {
            return false;
        }
    }

    /**
     * Add Multiple Permission in list and pass in the multi check permission dialog
     *
     *
@param
permissionList list of permission
     */
   
private String[] checkPermissions(final ArrayList<String> permissionList) {
        List<String> arrPermission = new ArrayList<>();
        for (int i = 0; i < permissionList.size(); i++) {
            final String permission = permissionList.get(i);
            if (ContextCompat.checkSelfPermission(context,
                    permission) != android.content.pm.PackageManager.PERMISSION_GRANTED) {
                arrPermission.add(permission);
            }
        }
        String[] permissions = new String[arrPermission.size()];
        permissions = arrPermission.toArray(permissions);
        return permissions;
    }


    /**
     * Call where multiple permission require and only pass arraylist of permission.
     *
     *
@param
permissionList list of permission
     *
@param
requestCode    Call Back for permission granted or not.
     *
@return is permission granted or not.
     */
   
public boolean checkMultiplePermissions(final ArrayList<String> permissionList, final int requestCode) {
        String[] arrPermission = checkPermissions(permissionList);
        if (arrPermission.length > 0) {
            ActivityCompat.requestPermissions((Activity) context,
                    arrPermission,
                    requestCode);
            return true;
        }
        return false;
    }


    @Override
   
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode) {
            case Constants.REQUEST_CODE_ASK_PERMISSIONS:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    if (permissionGranted != null) {
                        permissionGranted.onPermissionGranted();
                    }
                } else {
                    DialogUtils.showSnackBar(context, "You are not able to pick photo from gallery");
                }
                break;

        }
    }


    /**
     * Set the interface where callback require.
     *
     *
@param
permissionGranted This is callback interface.
     */
   
public void setPermissionGranted(final PermissionGranted permissionGranted) {
        this.permissionGranted = permissionGranted;
    }

    /**
     * This is callback interface.
     */
   
public interface PermissionGranted {
        void onPermissionGranted();
    }

}

How to use PermissionUtils class 

public class OneFragment extends Fragment implements View.OnClickListener, PermissionUtils.PermissionGranted {

    @Nullable
    @Override
   
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_1, container, false);
    }


@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    initializeComponent(view);
}


    @Override
   
public void initializeComponent(View view) {
        imageView = (ImageView) view.findViewById(R.id.fragment_1_iv_profile);
    }

   

    @Override
   
public void onClick(View v) {
        super.onClick(v);
        switch (v.getId()) {
        case R.id.fragment_1_iv_profile:
final PermissionUtils permissionUtils = new PermissionUtils();
        permissionUtils.setPermissionGranted(this);
        if (!(permissionUtils.checkPermission(PermissionUtils.PERMISSION_STORAGE, Constants.REQUEST_CODE_ASK_PERMISSIONS)) {
           //Code for if already permission granted.
        }
        break;
  }
 
    
    @Override
   
public void onPermissionGranted() {
         //While we have allowed the permission this interface method will call.
    }
}

Friday 13 January 2017

Spinner in ListView : 

Adapter Class : 
/** * Created on 05/01/17. */public class WorkListAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<WorkModel> workModelArrayList;

    public WorkListAdapter(final Context context, final ArrayList<WorkModel> workModelArrayList) {
        this.context = context;
        this.workModelArrayList = workModelArrayList;
    }

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

    @Override    public WorkModel getItem(int i) {
        return workModelArrayList.get(i);
    }

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

    @Override    public View getView(final int i, View view, ViewGroup viewGroup) {
        final ViewHolder viewHolder;
        if (view == null) {
            final LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            view = inflater.inflate(R.layout.row_worker, viewGroup, false);
            viewHolder = new ViewHolder(view);
            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }
        final WorkModel workModel = workModelArrayList.get(i);

//        removeTextChangedListener(viewHolder);//        viewHolder.edtName.setText(workModel.getWorkerName());//        addTextChangedListener(viewHolder, i);

        final ArrayAdapter<String> adapter = new ArrayAdapter<>(context, android.R.layout.simple_list_item_1, workModel.getTypes());
        viewHolder.edtName.setAdapter(adapter);
        viewHolder.edtName.setOnItemSelectedListener(null);
        viewHolder.edtName.setSelection(workModel.getPosition());
        viewHolder.edtName.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                workModel.setPosition(i);
            }

            @Override            public void onNothingSelected(AdapterView<?> adapterView) {

            }
        });


        return view;
    }

    private class ViewHolder {
        private Spinner edtName;

        ViewHolder(final View view) {
            edtName = (Spinner) view.findViewById(R.id.row_worker_edit_name);
        }


    }


}
 
 
Model Class : 
 
public class WorkModel {

    private int workerId;
    private String workerName;
    private String[] types = {"Android", "iPhone", "Window"};
    private int position;

    public int getWorkerId() {
        return workerId;
    }

    public void setWorkerId(int workerId) {
        this.workerId = workerId;
    }

    public String getWorkerName() {
        return workerName;
    }

    public void setWorkerName(String workerName) {
        this.workerName = workerName;
    }

    public String[] getTypes() {
        return types;
    }

    public void setTypes(String[] types) {
        this.types = types;
    }

    public int getPosition() {
        return position;
    }

    public void setPosition(int position) {
        this.position = position;
    }
}
 
Activity Class: 
 
public class MainActivity extends AppCompatActivity {

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ListView lv = (ListView) findViewById(R.id.activity_main_lv);
        final ArrayList<WorkModel> workModelList = new ArrayList<>();

        for(int i = 0 ; i < 1000; i++){
            workModelList.add(new WorkModel());
        }

        final WorkListAdapter workListAdapter = new WorkListAdapter(this, workModelList);
        lv.setAdapter(workListAdapter);

    }
}
 
 

Thursday 12 January 2017

EditText With ListView.

When we are using EditText in ListView that time we have to implement TextWatcher because you have to add text in your Model/Pojo class after text is entered.

Adapter Class.
I have created one custom baseadapter class for it. In this adapter class i have created one class for TextWatcher because we have to update arraylist after text changed.

package mavya.edittextinlistview;

import android.app.Activity;
import android.content.Context;
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 java.util.ArrayList;


/** * Created on 05/01/17. */public class WorkListAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<WorkModel> workModelArrayList;

    public WorkListAdapter(final Context context, final ArrayList<WorkModel> workModelArrayList) {
        this.context = context;
        this.workModelArrayList = workModelArrayList;
    }

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

    @Override    public WorkModel getItem(int i) {
        return workModelArrayList.get(i);
    }

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

    @Override    public View getView(final int i, View view, ViewGroup viewGroup) {
        final ViewHolder viewHolder;
        if (view == null) {
            final LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            view = inflater.inflate(R.layout.row_worker, viewGroup, false);
            viewHolder = new ViewHolder(view);
            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }
        final WorkModel workModel = workModelArrayList.get(i);

        removeTextChangedListener(viewHolder);
        viewHolder.edtName.setText(workModel.getWorkerName());
        addTextChangedListener(viewHolder, i);

        return view;
    }

    private class ViewHolder {
        private EditText edtName;
        private MyTextWatcher myTextWatcher;

        ViewHolder(final View view) {
            edtName = (EditText) view.findViewById(R.id.row_worker_edit_name);
        }

        public EditText getProductQuantity() {
            return edtName;
        }

        public MyTextWatcher getTextChangedListener() {
            return myTextWatcher;
        }

        public void setTextChangedListener(MyTextWatcher textChangedListener) {
            this.myTextWatcher = textChangedListener;
        }

    }

    private class MyTextWatcher implements TextWatcher {
        private int pos;

        public MyTextWatcher(final int pos) {
            this.pos = pos;
        }

        @Override        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override        public void afterTextChanged(Editable editable) {
            workModelArrayList.get(pos).setWorkerName(editable.toString());
        }
    }

    private void removeTextChangedListener(ViewHolder viewHolder) {
        final MyTextWatcher textChangedListener = viewHolder.getTextChangedListener();
        final EditText edtValue = viewHolder.getProductQuantity();
        edtValue.removeTextChangedListener(textChangedListener);
    }

    private void addTextChangedListener(ViewHolder viewHolder, int position) {
        final MyTextWatcher textChangedListener = new MyTextWatcher(position);
        final EditText edtValue = viewHolder.getProductQuantity();
        edtValue.addTextChangedListener(textChangedListener);
        viewHolder.setTextChangedListener(textChangedListener);
    }

}
 
Model Class : 
 
public class WorkModel {

    private int workerId;
    private String workerName;

    public int getWorkerId() {
        return workerId;
    }

    public void setWorkerId(int workerId) {
        this.workerId = workerId;
    }

    public String getWorkerName() {
        return workerName;
    }

    public void setWorkerName(String workerName) {
        this.workerName = workerName;
    }
}
 
Activity Class :  
 
public class MainActivity extends AppCompatActivity {

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ListView lv = (ListView) findViewById(R.id.activity_main_lv);
        final ArrayList<WorkModel> workModelList = new ArrayList<>();

        for(int i = 0 ; i < 1000; i++){
            workModelList.add(new WorkModel());
        }

        final WorkListAdapter workListAdapter = new WorkListAdapter(this, workModelList);
        lv.setAdapter(workListAdapter);

    }
}