Our Latest Blog Posts

latest-post

In this digital era, the expectations of customers have changed significantly. The days are gone when they try to contact customer support and wait until their answers. Nowadays, Consumers need rapid satisfaction, and companies have to change to satisfy them. Today I am talking about AI chatbots, the revolutionary Artificial Intelligence that is transforming customer support through the use of AI chatbots.

What are AI ChatBots?

Chatbots are basically computer programs that use text or voice interactions to mimic human communication with the user, using artificial intelligence (AI) techniques to understand user input and generate relevant responses or actions.

Advantages of ChatBots in Customer Support

Chatbots can help customers to quickly engage with website content, and they can help customers to solve problems on demand. A chatbot for customer service can handle multiple customer queries simultaneously, ensuring that no customer is left waiting. AI chatbots for customer service, productivity tools, and customer support automation reduce the load on the organization’s service team so they can focus on other more complex issues.

Chatbots answer customers' questions any time in the day or night, providing real-time responses, but human agents are available only during business hours.

Availability

Anytime Available: Chatbots can answer rapidly and reduce the wait time for customers who face delays when talking with human agents, providing real-time responses at any time, day or night. Human agents, however, are only available during business hours.

Client Comfort: When your customer support is available 24/7, it builds trust and reliability for your business.3

Instant Answers in Real Time

Reduce wait times: Chatbots can provide standardized and accurate information, ensuring the quality of the service remains constant. This reduces the wait time of the customers who are facing delays when talking with human agents. A chatbot is a reliable tool that can efficiently manage customer interactions, taking customer service to the next level.

Handle Multiple Customers: Chatbots can easily handle multiple requests at the same time without losing speed. They can also handle customers during peak hours.

Reliable Response

Accurate Information: Chatbots provide standardized and accurate information, ensuring constant service quality. In the process, you can enhance customer satisfaction by using chatbots to provide rapid, accurate, and personalized responses. This eliminates the differences that occasionally happen between different human agents.

Less Human Error: Businesses can produce fewer human errors and provide more reliable and dependable customer support by implementing chatbots.

Cost Effective

Operational savings: Chatbots can automate routine customer service jobs, such as handling inquiries and providing support, freeing up human agents so they can concentrate on more difficult problems. You can use chatbots to handle a wide range of customer queries, provide visual assistance, and offer technical support. Chatbots boost client satisfaction by personalizing conversations based on customer data, making each one unique and customized for the individual needs of the customer.

Scalability: Chatbots are able to meet increased consumer demands without extra cost, making them perfect for growing business

Better Customer Experience

Personalization: Chatbots boost client satisfaction by providing personalizing conversations based on customer data, making each one unique and customized for the individual.

Customer Experience Improvement: Chatbots increase customer satisfaction by providing rapid, accurate, and personalized responses, leading to repeat customers. Overall, an AI chatbot is changing the world of customer support. They provide accurate information, and also help to boost companies’ sales because of their personalized answers to each customer and helps to solve customers’ queries. Chatbots are the future of customer support. Learn more about how the best chatbots can transform your business.

Discover Our Solutions

If you are looking for AI chatbots for your business, we just made a product for you, InfyGPT, which provides a complete user-friendly solution. InfyGPT offers advanced features such as Customer service automation and easy connection on current systems. Whether you want to increase customer engagement, improve techniques, or improve help desk support, InfyGPT has the solutions you need. Our product is already SaaS ready if you want to launch your own platform.

Explore More on AI Chatbots

How ChatBots are Transforming the HR Industry

How AI Chatbot Works?

Which AI Chatbot Should You Choose for Your Website?

Why You Need Chatbot for Your Business

Maintaining awareness and using modern AI technologies, such as InfyGPT, may put your company at the height of innovation and client pleasure.

July 20, 20244 minutesuserAnkit Kalathiya

Posts

How to Create Custom CardView in Android
Cardview is a widget provided by Android to create a new look and functional UI. You can build your app with the following examples to make it look more professional. Cardview is a wonderful concept that makes your user experience better than the Android UI. Cardview is an Android Lollipop released with Android 5.0.

Customized CardView

First, add a CardView dependency to the application-level build.gradle file.

dependencies {     
implementation
‘androidx.cardview:cardview:1.0.0’
}
Then create a drawable background for the cards. For that, create a new drawable resource file inside the drawable folder.
res > drawable > New > Drawable Resource File.

background1.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android">
Select2

background2.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android">

Select2

background3.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android">
Select2
Now create a card view in the main XML file. Here I used LinearLayout as the root widget, after using the card view. Below the codes that give you an idea of how to customize the card.
You can change it according to your needs.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"     
android:layout_height="match_parent"     
android:orientation="vertical">
    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="173dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="20dp"
        app:cardCornerRadius="8dp">

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/bg1"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="30dp"
                android:layout_marginTop="20dp"
                android:layout_marginEnd="30dp"
                android:orientation="horizontal">

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Assam"
                        android:textColor="#000000"
                        android:textSize="22sp" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Current Location"
                        android:textColor="#000000"
                        android:textSize="14sp" />
                </LinearLayout>

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginStart="30dp"
                android:layout_marginTop="20dp"
                android:layout_marginEnd="30dp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="25"
                    android:textColor="#000000"
                    android:textSize="28sp" />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="6dp"
                        android:text="o"
                        android:textColor="#000000"
                        android:textSize="13sp" />

                </LinearLayout>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="18 %"
                    android:textColor="#000000"
                    android:textSize="14sp" />

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentEnd="true"
                        android:layout_marginStart="6dp"
                        android:text="11.25 AM"
                        android:textColor="#000000"
                        android:textSize="14sp" />
                </RelativeLayout>
            </LinearLayout>
        </LinearLayout>
    </androidx.cardview.widget.CardView>

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="173dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="20dp"
        app:cardCornerRadius="8dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/bg2"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="30dp"
                android:layout_marginTop="20dp"
                android:layout_marginEnd="30dp"
                android:orientation="horizontal">

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Delhi"
                        android:textColor="@color/white"
                        android:textSize="22sp" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="2 days ago"
                        android:textColor="@color/white"
                        android:textSize="14sp" />
                </LinearLayout>

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginStart="30dp"
                android:layout_marginTop="20dp"
                android:layout_marginEnd="30dp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="39"
                    android:textColor="@color/white"
                    android:textSize="28sp" />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="6dp"
                        android:text="o"
                        android:textColor="@color/white"
                        android:textSize="13sp" />

                </LinearLayout>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="35 %"
                    android:textColor="@color/white"
                    android:textSize="14sp" />

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentEnd="true"
                        android:layout_marginStart="6dp"
                        android:text="01.05 PM"
                        android:textColor="#D6D6D6"
                        android:textSize="14sp" />
                </RelativeLayout>
            </LinearLayout>
        </LinearLayout>
    </androidx.cardview.widget.CardView>

    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="173dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="20dp"
        android:layout_marginEnd="20dp"
        app:cardCornerRadius="8dp">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/bg3"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="30dp"
                android:layout_marginTop="20dp"
                android:layout_marginEnd="30dp"
                android:orientation="horizontal">

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Darjeeling"
                        android:textColor="#000000"
                        android:textSize="22sp" />

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="2 weeks ago"
                        android:textColor="#000000"
                        android:textSize="14sp" />
                </LinearLayout>

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginStart="30dp"
                android:layout_marginTop="20dp"
                android:layout_marginEnd="30dp"
                android:orientation="horizontal">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="12"
                    android:textColor="#000000"
                    android:textSize="28sp" />

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginStart="6dp"
                        android:text="o"
                        android:textColor="#000000"
                        android:textSize="13sp" />

                </LinearLayout>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="9 %"
                    android:textColor="#000000"
                    android:textSize="14sp" />

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_alignParentEnd="true"
                        android:layout_marginStart="6dp"
                        android:text="05.00 AM"
                        android:textColor="#000000"
                        android:textSize="14sp" />
                </RelativeLayout>
            </LinearLayout>
        </LinearLayout>
    </androidx.cardview.widget.CardView>
</LinearLayout>
Output :-


Select2
October 25, 20201 minuteauthorVivek Beladiya
Make fully configurable livewire searching component

Nowadays, laravel livewire is becoming more trendy for geeks. as most developers are using it, more and more issues are facing while developing the products. one of them is searching the records.

Recently we have developed the livewire common searchable component which makes your searching easier, as you can specify which fields you want to search by just giving the field name into the component.

What you have to do is just create a SearchableComponent class into your App\Http\Livewire directory. just copy the following class on the given namespace.

<?php
namespace App\Http\Livewire;

use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Livewire\Component;
use Livewire\WithPagination;
use Str;

abstract class SearchableComponent extends Component
{
    use WithPagination;

    /**
      @var string
     /
    public $search = '';

    /**
      @var int
     /
    protected $paginate = 12;

    /* @var Builder /
    private $query;

    /**
      SearchableComponent constructor.

      @param $id
     /
    public function construct($id)
    {
        parent::construct($id);

        $this->prepareModelQuery();
    }

    /
       Prepare query
     /
    private function prepareModelQuery()
    {
        / @var Model $model */
        $model = app($this->model());

        $this->query = $model->newQuery();
    }

    /**
      @return mixed
     /
    abstract function model();

    /**
      Reset model query
     /
    protected function resetQuery()
    {
        $this->prepareModelQuery();
    }

    /**
      @return Builder
     /
    protected function getQuery()
    {
        return $this->query;
    }

    /**
      @param  Builder  $query
     /
    protected function setQuery(Builder $query)
    {
        $this->query = $query;
    }

    /**
      @param  bool  $search
      @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
     */
    protected function paginate($search = true)
    {
        if ($search) {
            $this->filterResults();
        }

        $all = $this->query->paginate($this->paginate);
        $currentPage = $all->currentPage();
        $lastPage = $all->lastPage();
        if ($currentPage > $lastPage) {
            $this->page = $lastPage;
        }

        return $this->query->paginate($this->paginate);
    }

    /**
      @return Builder
     /
    protected function filterResults()
    {
        $searchableFields = $this->searchableFields();
        $search = $this->search;

        $this->query->when(! empty($search), function (Builder $q) use ($search, $searchableFields) {
            $searchString = '%'.$search.'%';
            foreach ($searchableFields as $field) {
                if (Str::contains($field, '.')) {
                    $field = explode('.', $field);
                    $q->orWhereHas($field[0], function (Builder $query) use ($field, $searchString) {
                        $query->whereRaw("lower($field[1]) like ?", $searchString);
                    });
                } else {
                    $q->orWhereRaw("lower($field) like ?", $searchString);
                }
            }
        });

        return $this->query;
    }

    /**
      @return mixed
     /
    abstract function searchableFields();
}

Now you have to extend your existing Laravel component by SearchableComponent. Let's say we already have the Tags livewire component. and it looks like the following.

App\Http\Livewire;

use App\Models\Tag;
use Illuminate\Contracts\Pagination\LengthAwarePaginator;

class Tags extends SearchableComponent
{
    public function render()
    {
        $tags = $this->searchTags();

        return view('livewire.tags', [undefined])->with("search");
    }

    /**
      @return LengthAwarePaginator
     /
    public function searchTags()
    {
        $this->setQuery($this->getQuery());

        return $this->paginate();
    }

    function model()
    {
        return Tag::class;
    }

    function searchableFields()
    {
        return [
];
    }
}

So here we have extended our existing Tags component by SearchingComponent.

In searchable fields, you can specify the field name that you want to search. and replace the Model with your records Modal.

That's it. Now you don't need to write search queries again and again. just extend your livewire component by a searchable component.

Here are some Interesting livewire tutorials that you need to check :

October 22, 20201 minuteauthorVishal Ribdiya
What are some important qualities of graphic designers?

The technical skills outlined above are necessary for graphic designers to execute the actual tasks assigned to them. But there are several transferable skills needed in order to successfully bring an idea from concept to creation.

Our analysis helped us identify five important qualities employers are seeking in graphic design candidates. Here's what we found

Creativity:

This one probably goes without saying, but graphic designers are tasked with identifying creative solutions to deliver a message or solve a problem. This requires an innate ability to think outside the box and bring forth innovative ideas on a regular basis.

Analytical:

A graphic designer should be able to step outside their own mind and view the product or service analytically and from different perspectives. That way they can help anticipate how the audience will receive it.

Communication:

Graphic designers must possess strong written and oral communication skills in order to effectively work with team members and clients alike. Asking inquisitive questions helps them understand expectations so their designs will align with their client's vision.

Time management:

Designers are often faced with the challenge of working on several projects with various deadlines at the same time. Being able to juggle multiple projects and meet stringent deadlines is essential to a successful design career.

Research:

Graphic design techniques and trends are constantly evolving, which means learning is never done for designers. In order to ensure their designs are meeting client objectives, they need to be willing to dig up insights about their audience and explore new strategies.

October 19, 20201 minuteauthorKishan Savaliya
How to explain the tricks to close your next deal

Introduction

Persuasion is a method of communication aimed at influencing the attitudes, beliefs, or behaviors of others. In terms of sales, understanding usually occurs when a sales representative tries to convince a prospect that their product or service is the best solution to their problem.
Let's review the persuasion strategy you can implement today to close your next deal.

1. Personalize your message

If you want to explain the possibility of considering your product, resist the request to follow the general sales script. When you make excessive rehearsal noise or don’t share messages or information that seems to suit your prospect, your efforts go to one ear and go to the other.
This doesn't mean you need to fully wing your sales calls, it does mean you need to be prepared to adjust your message based on what interests you in the potential.

2. Focus on problem-solving

Instead of telling the prospect all the reasons why they should buy your product (which may feel pressure and emotion), focus on sharing all the reasons why your product can help them solve their problem. By focusing on their concerns and locating your offer as a solution, you are showing the value of your product without excessive pressure.

3. Give social proof

Letting your past customers sell to you - knowing when to take advantage of social proof can be a powerful persuasive trick.
While buyers may take your point as a sales representative with a grain of salt because they know you want to sell, they are more likely to trust a testimonial or story from a previous customer who was looking for a similar solution.

4. Assume goals

Picture: You feel ready to call your sales call. You think you have a solid understanding of who the prospects are and what they are looking for. Your notes have been typed and you are ready to close the deal.
Then during a call, potentially throws out several turns, asking you questions and mentioning objections that you weren’t prepared to account for - the dream of every sales rip. But don't go too far. This is a valuable learning experience.

5. Empower empowerment decision making

After all, you want your customers to buy from you because they really want to, not because they feel pressured. And let’s be realistic - including your prospects, don’t like to tell anyone what to do, so you’ll avoid being too direct in your approach. As a sales representative, it is your job to provide the context and information that makes your product a thought-provoking product.

6. Make personal connections

It's a basic rule of human interaction - we're all ready to trust and engage with people we really love on a deeper level. While buyers can choose your product or brand as a sales representative, you are the main source of human engagement representing your company.

7. Don’t rush into the process

Last but not least, don't rush your prospect through the sales process. We get it - you have goals on a regular basis. However, effective persuasion should seem natural to the prospect. They do not feel pressured or rushed to sign the dotted line. This doesn’t mean you can’t implement a sense of urgency or be on time - in fact making a little sense of urgency (such as paying a special price for a limited time) can be an effective trick.
October 16, 20203 minutesauthorAnkit Kalathiya
Bug Life Cycle in Software Testing

Introduction to Bug Life Cycle

The fault life cycle or defect life cycle is the specific set of states that a fault goes through before it is closed or resolved. When a fault is detected - by a tester or someone else on the team - the life cycle provides a tangible way to track the progress of a bug fix, and during the fault's life, multiple individuals touch it - directly or indirectly. Troubleshooting is not necessarily the responsibility of a single individual. At different stages of the life cycle, several members of the project team will be responsible for the error. This blog will help you understand how many cases the error goes through vary from project to project. The life cycle diagram covers all possible situations.

What’s The Difference Between Bug, Defect, Failure, Or Error?

Bug: If testers find any mismatch in the application/system in the testing phase then they call it a Bug.

As I mentioned earlier, there is a contradiction in the usage of Bug and Defect. People widely say the bug is an informal name for the defect.

Defect: The variation between the actual results and expected results is known as a defect.

If a developer finds an issue and corrects it by himself in the development phase then it’s called a defect.

Failure: Once the product is deployed and customers find any issues then they call the product a failure product. After release, if an end-user finds an issue then that particular issue is called a failure

Error: We can’t compile or run a program due to coding mistakes in a program. If a developer is unable to successfully compile or run a program then they call it an error.

Software Defects Are Basically Classified According To Two Types:

Severity

Bug Severity or Defect Severity in testing is a degree of impact a bug or a Defect has on the software application under test. A higher effect of bug/defect on system functionality will lead to a higher severity level. A Quality Assurance engineer usually determines the severity level of a bug/defect.

Types of Severity

In Software Testing, Types of Severity of bug/defect can be categorized into four parts:

Critical: This defect indicates complete shut-down of the process, nothing can proceed further

Major: It is a highly severe defect and collapses the system. However, certain parts of the system remain functional

Medium:/ It causes some undesirable behavior, but the system is still functional

Low: It won't cause any major break-down of the system

Priority

Priority is defined as the order in which a defect should be fixed. The higher the priority the sooner the defect should be resolved.

Priority Types

Types of Priority of bug/defect can be categorized into three parts:

Low: The Defect is an irritant but a repair can be done once the more serious Defect has been fixed

Medium: During the normal course of the development activities, defects should be resolved. It can wait until a new version is created

High: The defect must be resolved as soon as possible as it affects the system severely and cannot be used until it is fixed

(A) High Priority, High Severity

An error occurs on the basic functionality of the application and will not allow the user to use the system. (E.g. A site maintaining the student details, on saving record if it doesn't allow saving the record then this is a high priority and high severity bug.)

(B) High Priority, Low Severity

High Priority and low severity status indicate defects have to be fixed on an immediate basis but do not affect the application while High Severity and low priority status indicate defects have to be fixed but not on an immediate basis.

(C) Low Priority Low Severity

A minor low severity bug occurs when there is almost no impact on the functionality, but it is still a valid defect that should be corrected. Examples of this could include spelling mistakes in error messages printed to users or defects to enhance the look and feel of a feature.

(D) Low Priority High Severity

This is a high severity error, but it can be prioritized at a low priority as it can be resolved with the next release as a change request. On the user experience. This type of defect can be classified in the category of High severity but Low priority.

Bug Life Cycle

2020-12-18-5fdca76589590

New: When a new defect is logged and posted for the first time. It is assigned a status as NEW.

Assigned: Once the bug is posted by the tester, the lead of the tester approves the bug and assigns the bug to the developer team

Open: The developer starts analyzing and works on the defect fix

Fixed: When a developer makes a necessary code change and verifies the change, he or she can make bug status as "Fixed."

Pending retest: Once the defect is fixed the developer gives a particular code for retesting the code to the tester. Since the software testing remains pending from the tester's end, the status assigned is "pending retest."

Retest: Tester does the retesting of the code at this stage to check whether the defect is fixed by the developer or not and changes the status to "Re-test."

Verified: The tester re-tests the bug after it got fixed by the developer. If there is no bug detected in the software, then the bug is fixed and the status assigned is "verified."

Reopen: If the bug persists even after the developer has fixed the bug, the tester changes the status to "reopened". Once again the bug goes through the life cycle.

Closed: If the bug no longer exists then the tester assigns the status "Closed."

Duplicate: If the defect is repeated twice or the defect corresponds to the same concept of the bug, the status is changed to "duplicate."

Rejected: If the developer feels the defect is not a genuine defect then it changes the defect to "rejected."

Deferred: If the present bug is not of a prime priority and if it is expected to get fixed in the next release, then the status "Deferred" is assigned to such bugs

Not a bug: If it does not affect the functionality of the application then the status assigned to a bug is "Not a bug".

Defect Life Cycle Explained

2020-12-18-5fdca75fd9a1a

  1. The tester finds the defective status assigned to the defect.

  2. A defect is forwarded to the project manager for analysis.

  3. The project manager decides whether a defect is valid.

  4. Here the defect is invalid. The status is "Rejected".

  5. The project manager assigns a rejected status.

  6. If the bug is not resolved, the next step is to check that it is in scope.

Suppose we have another function - email functionality for the same application, and you find a problem with it. However, it is not part of the current version if such errors are assigned as a deferred or deferred status.

  1. Next, the manager checks to see if a similar error has occurred earlier. If so, a duplicate status is assigned to the error.

  2. If not, the bug is assigned to the developer, who starts correcting the code.

  3. During this phase, the defect is assigned a status in the process,

  4. Once the code is fixed. A defect is assigned a status fixed.

  5. Next, the tester tests the code again. If the test case is passed, the defect is closed. If the test cases fail again, the bug is reopened and assigned to the developer.

  6. Consider a situation where, during the first release of the flight reservation, an error was detected in the fax order, which has been fixed and the status of closed has been assigned. The same error occurred again during the second upgrade version.

In such cases, a closed defect is opened again.

"That's all to Bug Life Cycle"

October 13, 20206 minutesauthorBhumi Khimani
Export annotations of PDFTron using jquery

Here we will learn how to export annotations drawn using PDFTron.

Events for export annotation

When we draw any annotation "annotationChanged" event will be fired, then we cache that event and we can export that annotation using "exportAnnotations".

When we draw annotations we'll save them in the database and when we reload the same document we can retrieve saved annotations from the database and can again show them, we will learn that in my next blog post.

Here is an example of how to save an annotation in a database.

Example

WebViewer
   (
     { path: 'path_to_the_PDFTron_'lib'_folder_on_your_server',     
      css: 'webviewer_css',     
      licenseKey: 'YOUR_PDF_TRON_LICENSE_KEY',     
      initialDoc: 'YOUR_FILE URL' //url of a file to load 
     }, 
    document.getElementById('viewer')
   )     
  .then(function (instance) {        
       let docViewer = instance.docViewer;        
       let annotManager = instance.annotManager;                 
       annotManager.on('annotationChanged', 
       (annots, action, e) => {             
            if (e.imported) return;
            annotManager.exportAnnotations({
                links: false,
                widgets: false,
                annotList: annots
            }).then(function (xfdfStrings) {

                annots.forEach(function (annot) {
                    if (action === "delete") {
                        deleteAnnotation(annot.mu);
                    } else {
                        saveAnnotation(annot.mu, xfdfStrings);
                    }
                });

                if (action === "add") {
                    annotManager.selectAnnotation(annots[0]);

                    if (annots[0] !== 'Comment') {
                        // to open comment box

document.getElementById('viewer').childNodes[0].contentWindow.document.querySelector
('div[data element="annotationCommentButton"]').click();
                    }
                }
            });
        });
    });

let saveAnnotation = function (annotationId, annotationXfdf) {
    let saveAnnotationUrl = '';
    if (fromExtension) {
        saveAnnotationUrl = YOUR_PROJECT_URL/annotations/${annotationId};
    } else {
        saveAnnotationUrl = YOUR_PROJECT_URL/annotations/${annotationId};
    }

    $.ajax({
        url: saveAnnotationUrl,
        type: 'POST',
        data: {annotation: annotationXfdf},
        success: function (result) {
            console.log(result);
        },
        error: function (result) {
            console.log(result);
        }
    });
};

let deleteAnnotation = function (annotationId) {

    let deleteAnnotationUrl = '';
    if (fromExtension) {
        deleteAnnotationUrl = YOUR_PROJECT_URL/annotations/${annotationId};
    } else {
        deleteAnnotationUrl = YOUR_PROJECT_URL/annotations/${annotationId};
    }

    $.ajax({
        url: deleteAnnotationUrl,
        type: 'DELETE',
        success: function (result) {
            console.log(result);
        },
        error: function (result) {
            console.log(result);
        }
    });
};
October 10, 20201 minuteauthorMonika Vaghasiya
How to create different type shape in android java

Hello, wonderful friends today in this blog on learning in android XML files creating different types of shape creating. A shape is an XML file that defines a geometric shape, including strokes, colors, and gradients

First Creating .xml file:

  1. Open android studio
  2. Go to drawable
  3. Right-click drawable menu

Follow below image steps:

2020-12-18-5fdc731fe3b6a

Now friend starts coding:

  • Creating a capsule shape flow below code:
<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
<corners
android:bottomLeftRadius="30dp"
android:bottomRightRadius="30dp"
android:radius="60dp"
android:topLeftRadius="30dp"
android:topRightRadius="30dp"/>

Corners:

The below image is showing the shape corner radius

Solid:

Solid means shape inner color “#CFCFCF”

Padding:

There is always developer confusion between padding and margin. Both provide extra space/gap inside or outside the container. In simple words, margin means to push outside, whereas padding means to push inside.

Size:

It's very simple shape width - height

October 07, 20201 minuteauthorPankaj Valani
How To Integrate onesignal push notification in Android

Step: 1 Create a new Project in Android Studio

First, create a new Android Studio project and add the dependencies and plugin. First set up OneSignal in your project.
Add OneSignal dependency and plugin to your build.Gradle app-level.

apply plugin: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
dependencies {
    implementation 'com.onesignal:OneSignal:3.12.6'
}
end add OneSignal dependency to your build.Gradle project-level.

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.4, 0.99.99]'
    }
}

Step: 2 Create a new OneSignal Project

  • login your OneSignal Account than create an app

    alt


  • Enter Your Android Application Name & Select platform Google Android(FCM)

    alt


  • Generate a Firebase Server Key Read the documentation.
  • Enter your Firebase Server Key & Firebase Sender ID.

alt


alt


alt

Step: 3 Add Your Created Onesignal App ID

Add OneSignl default config to your build.Gradle app-level.
android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.myapplication.app"
        minSdkVersion 17
        targetSdkVersion 30
        versionCode 1
        versionName "1.0.0"
        multiDexEnabled true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        manifestPlaceholders = [onesignal_app_id: "Enter Your App ID",]
    }

    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

The next step is to create the class MyApplication & Declare the class MyApplication in AndroidManifest.xml.

import android.app.Application;
import android.content.Context;
import androidx.multidex.MultiDex;
import com.onesignal.OneSignal;

public class MyApplication extends Application {
    public static Context context;
    @Override

    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        context = this;         
        OneSignal.startInit(this) .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
                .unsubscribeWhenNotificationsAreDisabled(true)
                .init();
    }

    public static Context getContext() {
        return context;
    }
}
Declare the class MyApplication in AndroidManifest.xml.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myapplication.app">
<uses-permission android:name="android.permission.INTERNET"/
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:name="com.myapplication.app.MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:requestLegacyExternalStorage="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity
    android:name="com.myapplication.app.activity.SplashActivity"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

alt

October 01, 20201 minuteauthorVivek Beladiya