Skip to main content

How to add Base Activity in a Project in Android







To add Base Activity in a project we have to follow this code which is depected below:-



import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;


import com.areteit.fettle.Admin.Utils.ConnectionDetector;
import com.areteit.fettle.Admin.Utils.Constants;
import com.areteit.fettle.Admin.Utils.LoadingBox;
import com.areteit.fettle.Admin.Utils.RequestPermissions;
import com.areteit.fettle.R;

import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;

abstract public class BaseActivity extends AppCompatActivity {
  private RequestPermissions requestPermissions;
//  private GPSTracker gpsTracker;
  private ConnectionDetector connectionDetector;

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  }

//  protected GPSTracker getGpsTracker(Activity activity, boolean isHome) {
//    if (gpsTracker == null) {
//      gpsTracker = new GPSTracker(activity, isHome);
//    }
//    return gpsTracker;
//  }

  protected ConnectionDetector getConnectionDetector() {
    if (connectionDetector == null) {
      connectionDetector = new ConnectionDetector(this);
    }
    return connectionDetector;
  }

//  public RequestPermissions getRequestPermissions(Activity activity) {
//    if (requestPermissions == null) {
//      requestPermissions = new RequestPermissions(activity);
//    }
//    return requestPermissions;
//  }

  @Override
  public void startActivity(Intent intent) {
    super.startActivity(intent);
    overridePendingTransition(R.anim.parallax_right_in, R.anim.parallax_left_out);
  }

  public void showProgress() {
    if (!LoadingBox.isDialogShowing()) {
      LoadingBox.showLoadingDialog(this, "");
    }
  }

  public void dismissProgress() {
    if (LoadingBox.isDialogShowing()) {
      LoadingBox.dismissLoadingDialog();
    }
  }

  @Override
  public void startActivityForResult(Intent intent, int requestCode) {
    super.startActivityForResult(intent, requestCode);
    overridePendingTransition(R.anim.parallax_right_in, R.anim.parallax_left_out);
  }

//    @Override
//    public void finish() {
//        super.finish();
//        overridePendingTransition(R.anim.parallax_left_in, R.anim.parallax_right_out);
//    }

  @Override
  public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.parallax_left_in, R.anim.parallax_right_out);
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
       /* if (gpsTracker != null) {
            gpsTracker.onDestroy();
        }*/
  }

//  @Override
//  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//    super.onActivityResult(requestCode, resultCode, data);
//    if (requestCode == Constants.REQUEST_CHECK_SETTINGS) {
//      if (resultCode == Activity.RESULT_OK) {
//        getGpsTracker(this, false).displayLocationSettingsRequest();
//        // gpsTracker.displayLocationSettingsRequest();
//      } else {
//        LoadingBox.dismissLoadingDialog();
//      }
//    }
//  }

/*
    public static Locale getLocale(Context context) {
        String lang = PrefsManager.with(context).getString(Constants.PREF_LANGUAGE, Constants.ARABIC);

        switch (lang) {
            case Constants.ENGLISH:
                lang = "en";
                break;
            case Constants.ARABIC:
                lang = "ar";
                break;
        }
        return new Locale(lang);
    }
*/

  @Override
  protected void attachBaseContext(Context base) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(base));

  }

  @Override
  @Nullable
  public boolean dispatchTouchEvent(final MotionEvent ev) {
    // all touch events close the keyboard before they are processed except EditText instances.
    // if focus is an EditText we need to check, if the touchevent was inside the focus editTexts
    final View currentFocus = getCurrentFocus();
    if (currentFocus != null){
      if (!(currentFocus instanceof EditText) || !isTouchInsideView(ev, currentFocus)) {
        ((InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE))
                .hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
      }
    }

    return super.dispatchTouchEvent(ev);
  }

  /**
   * determine if the given motionevent is inside the given view.
   *
   * @param ev
   *            the given view
   * @param  currentFocus
   *            the motion event.
   * @return if the given motionevent is inside the given view
   */
  private boolean isTouchInsideView(final MotionEvent ev, final View currentFocus) {
    final int[] loc = new int[2];
    currentFocus.getLocationOnScreen(loc);
    return ev.getRawX() > loc[0] && ev.getRawY() > loc[1] && ev.getRawX() < (loc[0] + currentFocus.getWidth())
            && ev.getRawY() < (loc[1] + currentFocus.getHeight());
  }
}


Add Appcontroller in manifest.xml file:

<application
    android:name="AppController"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

In AppController.java add this code:

public class AppController extends Application {
    public static final String TAG = AppController.class.getSimpleName();

    private static AppController mInstance;



    @Override
    public void onCreate() {
        super.onCreate();
        Fabric.with(this, new Crashlytics());

        mInstance = this;


        CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                .setDefaultFontPath("fonts/Poppins-Regular.ttf")
                .setFontAttrId(R.attr.fontPath)
                .build());


    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);

    }


}










Comments

Popular posts from this blog

Why Ethereum Smart Contracts Make It Hard to Get Payments

  The Unique Role of Smart Contracts in Ethereum One of Ethereum’s standout features is its ability to host diverse applications on its blockchain using smart contracts. However, these smart contracts, while powerful, sometimes complicate simple tasks. For instance, determining the amount of ETH deposited into a specific Ethereum address can be surprisingly complex. This is because you cannot understand the actions of a smart contract without executing it. Synchronizing Blockchain Internals and Externals Smart contracts operate exclusively within the blockchain's data, reading and writing information stored on-chain. This limitation does not prevent the creation of valuable applications, such as multi-signature wallets or tokens like ERC-20 and ERC-721, which rely solely on on-chain data. However, most practical applications also require interaction with off-chain systems. Take cryptocurrency exchanges, for example. Exchanges facilitate converting ETH into fiat currency or vice ver...

Room + ViewModel + LiveData + RecyclerView (MVVM)

Part 1 - Introduction Part 2 – Entity Part 3 – DAO & RoomDatabase Part 4 – Repository Part 5 – ViewModel Part 6 – RecyclerView + Adapter Part 7 – Add Note Activity Part 8 – Swipe to Delete Part 9 – OnItemClickListener & Update Functionality Part 10 – ListAdapter                     Part 1 - Introduction In this tutorial we will build a note taking app, using the Android Architecture Component libraries (Room, ViewModel, LiveData and LifeCycle), a RecyclerView and Java. The data will be stored in an SQLite database and supports insert, read, update and delete operations. For this we will follow the official recommendations from the “Guide to App Architecture” (link below). In part 1 we will learn what the Architecture Components are, how they work and why we need them. We will learn about the problems that arise from the Activity and Fragment lifecycle, configuration changes and bloated, tightly coupled cl...

DodgeInsetEdges

The layout_dodgeInsetEdges together with the layout_insetEdge attribute, to move views within a CoordinatorLayout out of the way of other views. This behavior is the default behavior for FloatingActionButtons and Snackbars , but we will also apply it to views like normal buttons and bottom sheets. In Mainactivity.java add the code below stated:- import android.support.design.widget.BottomSheetBehavior; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity {     private BottomSheetBehavior bottomSheetBehavior;     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activ...