All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.leancloud.im.AndroidInitializer Maven / Gradle / Ivy

package cn.leancloud.im;

import android.content.Context;
import android.os.Build;

import cn.leancloud.AVLogger;
import cn.leancloud.AVOSCloud;
import cn.leancloud.internal.ThreadModel.MainThreadChecker;
import cn.leancloud.internal.ThreadModel.ThreadShuttle;
import cn.leancloud.livequery.AVLiveQueryEventHandler;
import cn.leancloud.push.AVPushMessageListener;
import cn.leancloud.push.AndroidNotificationManager;
import cn.leancloud.util.AndroidUtil;
import cn.leancloud.utils.LogUtil;

/**
 * Created by fengjunwen on 2018/8/11.
 */

public class AndroidInitializer {
  private static AVLogger LOGGER = LogUtil.getLogger(AndroidInitializer.class);

  private static class AndroidSystemReporter implements SystemReporter {
    public AndroidSystemReporter() {
    }
    public SystemInfo getInfo() {
      boolean isProbablyAnEmulator = Build.FINGERPRINT.startsWith("generic")
          || Build.FINGERPRINT.startsWith("unknown")
          || Build.MODEL.contains("google_sdk")
          || Build.MODEL.contains("Emulator")
          || Build.MODEL.contains("Android SDK built for x86")
          || Build.BOARD == "QC_Reference_Phone" //bluestacks
          || Build.MANUFACTURER.contains("Genymotion")
          || Build.HOST.startsWith("Build") //MSI App Player
          || (Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic"))
          || "google_sdk" == Build.PRODUCT;
      SystemInfo result = new SystemInfo();
      result.setBrand(Build.BRAND);
      result.setManufacturer(Build.MANUFACTURER);
      result.setModel(Build.MODEL);
      result.setOsAPILevel(Build.VERSION.SDK_INT);
      result.setOsCodeName(Build.VERSION.CODENAME);
      result.setRunOnEmulator(isProbablyAnEmulator);
      return result;
    }
  }

  private static void init() {
    MainThreadChecker checker = new MainThreadChecker() {
      @Override
      public boolean isMainThread() {
        return AndroidUtil.isMainThread();
      }
    };
    ThreadShuttle shuttle = new ThreadShuttle() {
      @Override
      public void launch(Runnable runnable) {
        AVOSCloud.getHandler().post(runnable);
      }
    };
    LOGGER.i("[LeanCloud] initialize mainThreadChecker and threadShuttle within AVIMEventHandler.");
    AVIMEventHandler.setMainThreadChecker(checker, shuttle);
    LOGGER.i("[LeanCloud] initialize mainThreadChecker and threadShuttle within AVLiveQueryEventHandler.");
    AVLiveQueryEventHandler.setMainThreadChecker(checker, shuttle);
    AVPushMessageListener.getInstance().setNotificationManager(AndroidNotificationManager.getInstance());
    LOGGER.i("[LeanCloud] initialize Android System Reporter.");
    AVIMOptions.getGlobalOptions().setSystemReporter(new AndroidSystemReporter());
  }

  public static void init(Context context) {
    if (InternalConfiguration.getDatabaseDelegateFactory() != null) {
      LOGGER.i("[LeanCloud] re-initialize InternalConfiguration.");
      return;
    }

    init();

    LOGGER.i("[LeanCloud] initialize InternalConfiguration within AVIMEventHandler.");
    AVIMOptions.getGlobalOptions().setMessageQueryCacheEnabled(true);
    InternalConfiguration.setFileMetaAccessor(new AndroidFileMetaAccessor());
    InternalConfiguration.setOperationTube(new AndroidOperationTube());
    InternalConfiguration.setDatabaseDelegateFactory(new AndroidDatabaseDelegateFactory(context));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy