Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.joythis.android.mycaller;
- import android.Manifest;
- import android.app.Activity;
- import android.content.Intent;
- import android.content.pm.PackageManager;
- import android.net.Uri;
- import android.util.Log;
- import android.widget.Toast;
- import androidx.annotation.StringDef;
- import androidx.core.app.ActivityCompat;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Map;
- public class AmUtil {
- Activity mActivity;
- public AmUtil(Activity pA){
- this.mActivity = pA;
- }//AmUtil
- public void fb(String pMsg){
- Toast t = Toast.makeText(
- this.mActivity,
- pMsg,
- Toast.LENGTH_LONG
- );
- t.show();
- }//fb
- public void phoneTo(
- String pStrPhoneNumber
- ){
- String strUriForThePhoneNumber = "tel:"+pStrPhoneNumber;
- try{
- Uri uriForThePhoneNumber =
- Uri.parse(strUriForThePhoneNumber);
- if(uriForThePhoneNumber!=null){
- Intent intentForPhoneCallingTheNumber =
- new Intent(Intent.ACTION_CALL);
- intentForPhoneCallingTheNumber.setData(uriForThePhoneNumber);
- /*
- some Intents can NOT be simply called because
- they demand explicit verification of the permission necessary
- */
- boolean bPermissionToCallPhoneIsGranted =
- ActivityCompat.checkSelfPermission(
- this.mActivity,
- Manifest.permission.CALL_PHONE
- )==PackageManager.PERMISSION_GRANTED;
- if (bPermissionToCallPhoneIsGranted) {
- this.mActivity.startActivity(intentForPhoneCallingTheNumber);
- }//if the permission is granted
- else{
- //what is the permission is denied?
- boolean bUserIsReceptiveToRationaleOfNeedToHavePermission =
- this.mActivity.shouldShowRequestPermissionRationale(
- Manifest.permission.CALL_PHONE
- );
- if (bUserIsReceptiveToRationaleOfNeedToHavePermission){
- this.fb(
- "Without the permission to call phone, you will NOT be able to make phone calls from this app."
- );
- }//if
- }//else
- }//if got an Uri
- }//try
- catch (Exception e){
- Log.e(
- this.getClass().getName(),
- e.toString()
- );
- }//catch
- }//phoneTo
- public Map<Integer, ArrayList<String>>
- getListsOfGrantedAndDeniedPermissions(
- String[] paNecessaryPermissions
- ){
- Map<Integer, ArrayList<String>> mapRet = new HashMap<>();
- ArrayList<String> alGranted = new ArrayList<>();
- ArrayList<String> alDenied = new ArrayList<>();
- for(String strCurrentPerm : paNecessaryPermissions){
- boolean bGranted =
- ActivityCompat.checkSelfPermission(
- this.mActivity,
- strCurrentPerm
- ) == PackageManager.PERMISSION_GRANTED;
- boolean bDenied =
- ActivityCompat.checkSelfPermission(
- this.mActivity,
- strCurrentPerm
- ) == PackageManager.PERMISSION_DENIED;
- if (bGranted) alGranted.add(strCurrentPerm);
- if (bDenied) alDenied.add(strCurrentPerm);
- }//for
- mapRet.put(
- PackageManager.PERMISSION_GRANTED,
- alGranted
- );
- mapRet.put(
- PackageManager.PERMISSION_DENIED,
- alDenied
- );
- return mapRet;
- }//getListsOfGrantedAndDeniedPermissions
- public String getPermissionStatus(
- String[] paNecessaryPermissions
- ){
- String strRet = "";
- Map<Integer, ArrayList<String>> mapOfGrantedAndDeniedPerms =
- getListsOfGrantedAndDeniedPermissions(
- paNecessaryPermissions
- );
- ArrayList<String> alGranted =
- mapOfGrantedAndDeniedPerms.get
- (PackageManager.PERMISSION_GRANTED);
- ArrayList<String> alDenied =
- mapOfGrantedAndDeniedPerms.get
- (PackageManager.PERMISSION_DENIED);
- String strGranted = "";
- for (String strGrantedPerm : alGranted){
- strGranted+=strGrantedPerm+"\n";
- }//for
- String strDenied = "";
- for (String strDeniedPerm : alDenied){
- strDenied+=strDeniedPerm+"\n";
- }//for
- strRet = String.format(
- "GRANTED permission(s):\n%s\n"+
- "DENIED permission(s):\n%s\n",
- strGranted,
- strDenied
- );
- return strRet;
- }//getPermissionStatus
- }//AmUtil
- //**
- package com.joythis.android.mycaller;
- import androidx.annotation.NonNull;
- import androidx.appcompat.app.AppCompatActivity;
- import android.Manifest;
- import android.content.Context;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuInflater;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ListView;
- import java.util.ArrayList;
- public class MainActivity extends AppCompatActivity {
- //1
- String[] NECESSARY_PERMISSIONS = {
- Manifest.permission.CALL_PHONE
- };
- ListView.OnItemLongClickListener
- mLvItemLongClickHandler = new ListView.OnItemLongClickListener() {
- @Override
- public boolean onItemLongClick(
- AdapterView<?> parent,
- View view, //is the view in the ListView on which I long-clicked
- int position, //the index of the corresponding contact in mAlContacts
- long id)
- {
- Contact c = mAlContacts.get(position);
- String strName = c.getmName();
- String strNumber = c.getmNumber();
- mUtil.fb("will call to "+strNumber);
- mUtil.phoneTo(strNumber);
- //return false; //false - the event was NOT fully processed
- return true; //true - the event was fully processed (a click listener would NOT happen)
- }//onItemLongClick
- };
- Button.OnClickListener mBtnClickHandler = new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- switch(v.getId()){
- case R.id.idBtnInsertContact:
- actionInsertContact();
- break;
- }//switch
- }//onClick
- };//mBtnClickHandler
- void actionInsertContact(){
- String strContactName = mEtContactName.getText().toString();
- String strContactNumber = mEtContactNumber.getText().toString();
- Contact c = new Contact(
- strContactName,
- strContactNumber
- );
- long iWhereItWasInserted = mContactDB.insertContact(c);
- /*
- Toast t = Toast.makeText(
- this,
- String.valueOf(iWhereItWasInserted),
- Toast.LENGTH_LONG
- );
- t.show();
- */
- mUtil.fb(
- String.valueOf(iWhereItWasInserted)
- );
- syncLvContactsWithDB();
- }//actionInsertContact
- //data member to enable access to database operations
- //such as insert and select
- ContactDB mContactDB;
- Context mContext;
- AmUtil mUtil;
- EditText mEtContactName, mEtContactNumber;
- Button mBtnInsertContact;
- ListView mLvContacts;
- ArrayList<Contact> mAlContacts;
- ArrayAdapter<Contact> mAd;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.insert_contact_rl);
- init();
- }//onCreate
- void init(){
- mContext = this;
- mUtil = new AmUtil(this);
- mEtContactName = findViewById(R.id.idEtContactName);
- mEtContactNumber = findViewById(R.id.idEtContactNumber);
- mBtnInsertContact = findViewById(R.id.idBtnInsertContact);
- mBtnInsertContact.setOnClickListener(
- mBtnClickHandler //data abstraction
- );
- mLvContacts = findViewById(R.id.idLvContacts);
- mLvContacts.setOnItemLongClickListener(
- mLvItemLongClickHandler
- );
- mAlContacts = new ArrayList<>();
- mContactDB = new ContactDB(mContext);
- mAd = new ArrayAdapter<>(
- mContext,
- android.R.layout.simple_list_item_1,
- mAlContacts
- );
- mLvContacts.setAdapter(mAd);
- syncLvContactsWithDB();
- /*
- mContactDB.insertContact
- (new Contact("Artur", "123"));
- ArrayList<Contact> all = mContactDB.selectAll();
- */
- }//init
- void syncLvContactsWithDB(){
- ArrayList<Contact> alTemp =
- mContactDB.selectAllByInsertDateDESC();
- if (alTemp!=null && alTemp.size()>0){
- mAlContacts.clear();
- for (Contact c : alTemp){
- mAlContacts.add(c);
- }//for
- mAd.notifyDataSetChanged();
- }//if
- }//syncLvContactsWithDB
- void syncLvContactsWithDB(
- ArrayList<Contact> pContacts
- ){
- if (pContacts!=null && pContacts.size()>0){
- mAlContacts.clear();
- for (Contact c : pContacts){
- mAlContacts.add(c);
- }//for
- mAd.notifyDataSetChanged();
- }//if
- }//syncLvContactsWithDB
- //attaches the menu to the Activity
- @Override
- public boolean onCreateOptionsMenu(Menu pMenu) {
- MenuInflater minf = new MenuInflater(mContext);
- if (minf!=null){
- minf.inflate(
- R.menu.menu_sort_options,
- pMenu
- );
- }
- return super.onCreateOptionsMenu(pMenu);
- }//onCreateOptionsMenu
- //this sets the menu's behavior
- @Override
- public boolean onOptionsItemSelected(@NonNull MenuItem item) {
- switch(item.getItemId()){
- case R.id.idMenuItemSortIdAsc:
- syncLvContactsWithDB(
- mContactDB.selectAllByInsertDateASC()
- );
- break;
- case R.id.idMenuItemSortIdDesc:
- syncLvContactsWithDB(
- mContactDB.selectAllByInsertDateDESC()
- );
- break;
- case R.id.idMenuItemSortNameAsc:
- syncLvContactsWithDB(
- mContactDB.selectAllByNameASC()
- );
- break;
- case R.id.idMenuItemSortNameDesc:
- syncLvContactsWithDB(
- mContactDB.selectAllByNameDESC()
- );
- break;
- case R.id.idMenuItemSortNumberAsc:
- syncLvContactsWithDB(
- mContactDB.selectAllByNumberASC()
- );
- break;
- case R.id.idMenuItemSortNumberDesc:
- syncLvContactsWithDB(
- mContactDB.selectAllByNumberDESC()
- );
- break;
- case R.id.idMenuItemSeeGrantedAndDenied:
- String strGrantedAndDenied =
- mUtil.getPermissionStatus(
- NECESSARY_PERMISSIONS
- );
- mUtil.fb(strGrantedAndDenied);
- break;
- }//switch
- return super.onOptionsItemSelected(item);
- }
- }//MainActivity
- //**
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:id="@+id/idMenuItemSortNameAsc"
- android:title="@string/strMenuItemSortNameAsc"/>
- <item
- android:id="@+id/idMenuItemSortNameDesc"
- android:title="@string/strMenuItemSortNameDesc"/>
- <item
- android:id="@+id/idMenuItemSortNumberAsc"
- android:title="@string/strMenuItemSortNumberAsc"/>
- <item
- android:id="@+id/idMenuItemSortNumberDesc"
- android:title="@string/strMenuItemSortNumberDesc"/>
- <item
- android:id="@+id/idMenuItemSortIdAsc"
- android:title="@string/strMenuItemSortIdAsc"/>
- <item
- android:id="@+id/idMenuItemSortIdDesc"
- android:title="@string/strMenuItemSortIdDesc"/>
- <item
- android:id="@+id/idMenuItemSeeGrantedAndDenied"
- android:title="@string/strMenuItemSeeGranted"/>
- </menu>
Advertisement
Add Comment
Please, Sign In to add comment