Friday, 10 September 2021

Find your machine/computer/laptop IP address

To find your machine/computer/laptop IP address follow these steps.

    1. Search for cmd in the search bar

    2. Type ipconfig command and press Enter button

    Watch video



Thursday, 9 September 2021

How to change View/Button/Layout background color in android while maintaining effects and state color ?

 This tutorial will answer following questions:

  1.   Difference between android:background & android:backgroundTint in android
  2.   Why background color is not applying to Views/Buttons in android
  3.   Why android:background is not working in android?
  4.   Why button background color is not changing ?
  5.   Difference between  app: and android: prefix, used in android XML layouts

android:background & android:backgroundTint are two very important and confusing properties. Both are used for background styling of a View/Layout/Button. Here, I am listing some important points  about the functionality these properties/attributes.

    1. Both are used to change background color of a View/Button/Layout.
    2. android:background applies a color or a full drawable resource (PNG image, XML state list description) to the background, while android:backgroundTint is only used for coloring the background    
    3. android:backgroundTint is having high priority than android:background i-e if you set both of these attributes/properties for a view, android:backgroundTint will affect/apply while android:background will not. 
    4. If android:background attribute/property is used for changing background color, the default click effect behavior (view/button rounded corners and default selection states) of the view will be lost.
    5. use android:background for background resource(PNG/XML) setting and android:backgroundTint for color changing
    6. Use backgroundTint instead of background, until unless there is some special need (e-g wanna to change background image for a View).
    7. By default, Views/buttons/layouts usually use custom/support-library values (purple color +some padding) for backgroundTint property so if you wanna to change it by using/setting  android:backgroundTint property, it will not work. It's because app:backgroundTint (default one) have high priority than android:backgroundTint. So to replicate the changes, you will have to do  one of the following:                                           
      • Disable its custom values in the res->values->themes->themes.xml OR          
      • Use app:backgroundTint instead of android:backgroundTint


    Thursday, 26 August 2021

    How to get fresh instance of current user from firebase database in android? Stop disabled/deleted user (in firebase databases) from login/sign-In in firebase Why disabled/deleted user still able to login to firebase databases ? Why after deleting/disabling a user from firebase console, still returning NON-NULL value ? What is the exact functionality of firebase reload() function/method in android ?

    If you have used Email or OTP authentication for your application in android you will have user table  as shown below:

    Sometimes admin wants to disable/delete a user, from firebase console, to stop their login to the application. 

    The problem is that after disabling/deleting a user from server, it is still able to login to the application because the user will have local instance in their device. 

    Following code snippet is used to check user instance for NULL value.

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

    if (user != null){

    // Go to login activity

     }else{

     // Go for authentication

    }

    The above piece of code is checking LOCAL instance of the application and NOT user status/instance on the server side. If an application data is cleared locally from the device (as shown in below snap), in that case user instance will be cleared and the above code will return NULL value for the user variable.


    If a user is disabled/deleted on server side(in firebase databases) it will still be able to login as the device is still having the local instance.

    Usually disabling/deleting a user from firebase console is not clearing/deleting the local instance from user mobile that's why its still returning non-null value which does not stop user from login.

    To resolve the issue you will have to check local instance as well as user status on the server (in firebase user table). For this reload() function/method is used. So following code/check will do the trick.

    if (user != null){

                user.reload();

            }

    user.reload() will load new/fresh instance (user status) from firebase user table. if user does not exist or disabled on server side, it will NOT get a fresh instance and hence its local instance will also become NULL.

    Final code will be:

        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

    if (user != null){

                user.reload();

            }

    if (user != null){     // again check user for fresh instance

    // Go to login activity

            }else{

      // Go for authentication

    }

    Testing:

     Use case1: 

    1. Install your application and login using OTP authentication. 

    2. Go to firebase console and disable the user as shown in the above image. 

    3. Close your application and then open it again (repeat it at least two times).

    4. It will ask again for OTP authentication which indicates that user local instance has been initialized to NULL by reloading it from server(from firebase databases).

    Use case2: 

    1. Install your application and login using OTP. 

    2. Go to firebase console and disable the user.

    3. Disconnect your device from internet

    4. Close your application and then open it again (repeat multiple times). 

    5. This time it will not ask for re-authentication as Internet is disconnected and reload() function is not communicating with server to check user status on server to re-initialize the local instance of the user. It will only check for local instance which is NON-NULL. 

    For practical implementation watch the video










    Wednesday, 24 March 2021

    How to logout/sign out from WhatsApp?

     

    Hello friends, today I am going to explain logout in WhatsApp.  If you open your WhatsApp you will not see logout option anywhere that means you cannot logout, explicitly, from WhatsApp.

    Actually WhatsApp authenticate user by sending OTP to their mobile number. When user enters correct OTP it is authenticated. But the OTP is valid for one time use only. It’s not like a password.

    When a user is authenticated, an instance is created in their mobile memory. In programming terminology it is stored in shared preferences. Now, whenever user opens WhatsApp application, it checks that instance. If it has been created that means user/mobile phone has been authenticated and is allowed to the WhatsApp.

    This instance is not associated with the mobile number instead it is associated with mobile phone. E-g if someone change SIM card in mobile phone and connect to Wi-Fi WhatsApp will work normally as the mobile phone have the instance. Now if user destroys this instance and open WhatsApp. It will be asked for authentication again. So destroying the instance is one type of log out. So, how to destroy this instance?

    Go to mobile setting -> manage apps. Then click on WhatsApp as shown in the following snap.


    In the bottom click “Clear data”. It will clear all data including that instance. So now, when you open WhatsApp it will ask for authentication as now the mobile phone does not have the instance.

    THATS IT. Thank you