content: package io.agora.openlive;
  
  import android.app.Application;
  import android.content.SharedPreferences;
  
  import io.agora.openlive.rtc.EngineConfig;
  import io.agora.openlive.rtc.AgoraEventHandler;
  import io.agora.openlive.rtc.EventHandler;
  import io.agora.openlive.stats.StatsManager;
  import io.agora.openlive.utils.FileUtil;
  import io.agora.openlive.utils.PrefManager;
  import io.agora.rtc.RtcEngine;
  
  public class AgoraApplication extends Application {
      private RtcEngine mRtcEngine;
      private EngineConfig mGlobalConfig = new EngineConfig();
      private AgoraEventHandler mHandler = new AgoraEventHandler();
      private StatsManager mStatsManager = new StatsManager();
  
      @Override
      public void onCreate() {
          super.onCreate();
          try {
              mRtcEngine = RtcEngine.create(getApplicationContext(), getString(R.string.private_app_id), mHandler);            
              mRtcEngine.setLogFile(FileUtil.initializeLogFile(this));
          } catch (Exception e) {
              e.printStackTrace();
          }
  
          initConfig();
      }
  
      private void initConfig() {
          SharedPreferences pref = PrefManager.getPreferences(getApplicationContext());
          mGlobalConfig.setVideoDimenIndex(pref.getInt(
                  Constants.PREF_RESOLUTION_IDX, Constants.DEFAULT_PROFILE_IDX));
  
          boolean showStats = pref.getBoolean(Constants.PREF_ENABLE_STATS, false);
          mGlobalConfig.setIfShowVideoStats(showStats);
          mStatsManager.enableStats(showStats);
  
          mGlobalConfig.setMirrorLocalIndex(pref.getInt(Constants.PREF_MIRROR_LOCAL, 0));
          mGlobalConfig.setMirrorRemoteIndex(pref.getInt(Constants.PREF_MIRROR_REMOTE, 0));
          mGlobalConfig.setMirrorEncodeIndex(pref.getInt(Constants.PREF_MIRROR_ENCODE, 0));
      }
  
      public EngineConfig engineConfig() {
          return mGlobalConfig;
      }
  
      public RtcEngine rtcEngine() {
          return mRtcEngine;
      }
  
      public StatsManager statsManager() {
          return mStatsManager;
      }
  
      public void registerEventHandler(EventHandler handler) {
          mHandler.addHandler(handler);
      }
  
      public void removeEventHandler(EventHandler handler) {
          mHandler.removeHandler(handler);
      }
  
      @Override
      public void onTerminate() {
          super.onTerminate();
          RtcEngine.destroy();
      }
  }
  