package com.alibaba.genie.panel;
import static com.alibaba.genie.panel.AppConfig.ACCESS_KEY_ID;
import static com.alibaba.genie.panel.AppConfig.ACCESS_KEY_SECRET;
import static com.alibaba.genie.panel.AppConfig.ENCODE_KEY;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Application;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Process;
import android.os.RemoteException;
import android.view.WindowManager;
import com.alibaba.ailabs.genie.density.GenieDensityInstaller;
import com.alibaba.ailabs.genie.density.MetaBean;
import com.alibaba.ailabs.genie.density.MetaUtils;
import com.alibaba.ailabs.geniesdk.AguiCtx;
import com.alibaba.ailabs.geniesdk.AiLabsCore;
import com.alibaba.genie.agcs.openapi.client.OpenAPIMgr;
import com.alibaba.genie.panel.agui.genieball.GenieEvent;
import com.alibaba.genie.panel.agui.genieball.GenieUiController;
import com.alibaba.genie.panel.agui.genieball.config.AnimationConfigManager;
import com.alibaba.genie.panel.basic.AbsApplication;
import com.alibaba.genie.panel.basic.manager.NetworkStateManager;
import com.alibaba.genie.panel.basic.utils.WakeTask;
import com.alibaba.genie.panel.basic.utils.network.AppNetManager;
import com.alibaba.genie.panel.denpendence.Dependency;
import com.alibaba.genie.panel.denpendence.VolumeDialogController;
import com.alibaba.genie.panel.network.NetWorkListener;
import com.alibaba.genie.panel.quickcontrol.adapter.refresh.DeviceRefreshUi;
import com.alibaba.genie.panel.repository.AppRepository;
import com.alibaba.genie.panel.repository.greendao.GreenDao;
import com.alibaba.genie.panel.setting.ui.SystemController;
import com.alibaba.genie.panel.utils.AguiUtils;
import com.alibaba.genie.panel.utils.ContextUtils;
import com.alibaba.genie.panel.utils.GlobalState;
import com.alibaba.genie.panel.utils.SharedPreferenceManager;
import com.alibaba.genie.panel.basic.utils.SystemPropertiesUtils;
import com.alibaba.genie.panel.basic.utils.weather.WeatherParseManager;
import com.alibaba.genie.panel.volume.VolumeControllerImpl;
import com.alibaba.smarthome.sdk.SmartHomeInterface;
import com.aliyun.alink.linksdk.ccp.system.ControlCallback;
import com.aliyun.alink.linksdk.tools.ALog;
import com.dnake.product.ProductTestManager;
import com.dnake.tinycap.Capture;
import com.dnake.v700.DNKSender;
import com.youku.kubus.Event;
import com.youku.kubus.EventBus;
import java.util.ArrayList;
import java.util.List;
public class App extends AbsApplication implements Application.ActivityLifecycleCallbacks {
private final static String TAG = App.class.getSimpleName();
private static App mApplication;
public static App getApplication() {
return mApplication;
}
private Handler uiHandler;
private Handler workHandler;
private Event mEvent1;
private GenieEvent mEvent;
private DeviceRefreshUi.DeviceNotifyObserver deviceNotifyObserver;
private boolean mIsMusicActivityInForeground = false;
@Override
public void onCreate() {
super.onCreate();
mApplication = this;
WakeTask.onCreate(this);
registerActivityLifecycleCallbacks(this);
SystemController.getInstance().init(this);
GenieDensityInstaller.getInstance().installIfNeed(this, beans);
AguiUtils.getInstance().initAgui(this);
OpenAPIMgr.getInstance().init(this, ENCODE_KEY, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
ProductConstant.init(this);
ALog.setLevel(ALog.LEVEL_DEBUG);
GenieUiController.getInstance().onBind();
ProductTestManager.getInstance().init(this);
try {
Dependency.put(VolumeDialogController.class, new VolumeControllerImpl(this));
} catch (Throwable throwable) {
ALog.e(TAG,throwable.getLocalizedMessage());
}
startSystemUI();
getUiHandler().postDelayed(() -> NetWorkListener.getInstance().register(App.this), 15000);
getUiHandler().postDelayed(() -> {
SystemController.getInstance().getController().systemControl(null, "dhcp", "1", new ControlCallback() {
@Override
public void onSuccess(String s) {
ALog.d(TAG,"open dhcp");
}
@Override
public void onFailure(int i, String s) {
ALog.d(TAG,"dhcp open failure");
}
});
}, 500);
ContextUtils.init(mApplication);
AnimationConfigManager.getInstance().init(() -> {
});
mEvent = new GenieEvent();
mEvent1 = new Event(GenieEvent.MSG_EVENT_GENIE_BALL);
listenerIotCoreNotifyMessage();
new AppRepository().loadDeviceId();
ProductTestManager.getInstance().setOnBroadcastListener(new ProductTestManager.OnBroadcastListener() {
@Override
public void onReceiveIntent(Context context, Intent intent) {
String stringExtra = intent.getStringExtra(ProductTestManager.KEY_TYPE);
if (ProductTestManager.TYPE_PRODUCT_MODE.equalsIgnoreCase(stringExtra)) {
boolean isProductMode = intent.getBooleanExtra(ProductTestManager.KEY_BOOLEAN, false);
ALog.d(TAG,"isProductMode: " + isProductMode);
GlobalState.hasProvision = !isProductMode;
} else if (ProductTestManager.TYPE_SPEECH.equalsIgnoreCase(stringExtra)) {
ALog.d(TAG,"TYPE_SPEECH: " + stringExtra);
boolean isOpen = intent.getBooleanExtra(ProductTestManager.KEY_BOOLEAN, false);
AguiCtx.getInstance().setWakeupForbidden(!isOpen);
if (isOpen) {
ALog.d(TAG,"VoiceModeChangeEvent 打开语音");
Capture.getInstance().startRecordByCaptureFrame();
} else {
ALog.d(TAG,"VoiceModeChangeEvent 关闭语音");
Capture.getInstance().stopRecordByCaptureFrame();
}
}
}
@Override
public void onReceive(String url, String body) {
DNKSender.send(url, body);
}
});
AppNetManager.getInstance().init(this);
NetworkStateManager.getInstance().init(this);
GreenDao.getInstance().init(this);
SharedPreferenceManager.getInstance().init(this);
WeatherParseManager.getInstance().init();
}
@Override
public void onTrimMemory(int level) {
super.onTrimMemory(level);
ALog.i(TAG, "onTrimMemory: level = " + level);
if (level == TRIM_MEMORY_RUNNING_CRITICAL) {
clean();
}
}
@Override
public void onTerminate() {
super.onTerminate();
ALog.i(TAG, "onTerminate");
clean();
}
private void clean() {
try {
SmartHomeInterface.getInstance().closeGattServer();
} catch (RemoteException e) {
throw new RuntimeException(e);
}
}
private void startSystemUI() {
if (BuildConfig.BETA) { return; }
getUiHandler().postDelayed(() -> StatusBar.getInstance().start(), 10000);
}
public Handler getUiHandler() {
if (uiHandler == null) {
uiHandler = new Handler(Looper.getMainLooper());
}
return uiHandler;
}
public void setIsMusicActivityInForeground(boolean isInForeground) {
mIsMusicActivityInForeground = isInForeground;
}
public boolean isMusicActivityInForeground() {
return mIsMusicActivityInForeground;
}
private void initWorkThread() {
HandlerThread mWorkerThread = new HandlerThread("SysUiBg", Process.THREAD_PRIORITY_BACKGROUND);
mWorkerThread.start();
workHandler = new Handler(mWorkerThread.getLooper());
}
public Handler getWorkHandler() {
if (workHandler == null) {
initWorkThread();
}
return workHandler;
}
public static List<MetaBean> beans = new ArrayList<MetaBean>() {{
add(new MetaBean("com.alibaba.genie.panel.activity.HomeActivity", MetaUtils.AUTO_SIZE_10, MetaUtils.ORIENTATION_HORIZONTAL));
add(new MetaBean("com.alibaba.genie.panel.activity.QSettingActivity", MetaUtils.AUTO_SIZE_10, MetaUtils.ORIENTATION_HORIZONTAL));
add(new MetaBean("com.alibaba.genie.panel.activity.HomeMusicFragment", MetaUtils.AUTO_SIZE_7, MetaUtils.ORIENTATION_HORIZONTAL));
add(new MetaBean("com.alibaba.genie.panel.activity.HomeSettingFragment", MetaUtils.AUTO_SIZE_7, MetaUtils.ORIENTATION_HORIZONTAL));
add(new MetaBean("com.alibaba.genie.panel.activity.HomePageFragment", MetaUtils.AUTO_SIZE_7, MetaUtils.ORIENTATION_HORIZONTAL));
add(new MetaBean("com.alibaba.genie.panel.activity.HomeControlFragment", MetaUtils.AUTO_SIZE_7, MetaUtils.ORIENTATION_HORIZONTAL));
add(new MetaBean("com.alibaba.genie.panel.debug.OtherFragment", MetaUtils.AUTO_SIZE_7, MetaUtils.ORIENTATION_HORIZONTAL));
add(new MetaBean("com.alibaba.genie.panel.view.fragment.TabAllFragment", MetaUtils.AUTO_SIZE_7, MetaUtils.ORIENTATION_HORIZONTAL));
add(new MetaBean("com.alibaba.genie.panel.controlpanel.DeviceControlPanelContainerActivity", MetaUtils.AUTO_SIZE_7, MetaUtils.ORIENTATION_HORIZONTAL));
}};
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
super.onActivityCreated(activity, savedInstanceState);
if (SystemPropertiesUtils.isUserLogined()) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
String packageName = activity.getPackageName();
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTasks = activityManager.getRunningTasks(1);
if (!runningTasks.isEmpty()) {
ActivityManager.RunningTaskInfo taskInfo = runningTasks.get(0);
ComponentName topActivity = taskInfo.topActivity;
GlobalState.topActivityName = topActivity.getClassName();
mEvent.setBackground(!topActivity.getPackageName().equals(packageName) || !topActivity.getClassName().equals("com.alibaba.genie.panel.activity.HomeActivity"));
mEvent1.data = mEvent;
EventBus.getDefault().post(mEvent1);
}
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
public void listenerIotCoreNotifyMessage() {
if (deviceNotifyObserver == null) {
deviceNotifyObserver = new DeviceRefreshUi.DeviceNotifyObserver() {
@Override
public void onNotify(String msgType, Object msg) {
ALog.d(TAG,"onNotify() called with: msgType = [" + msgType + "], msg = [" + msg + "]");
// unbind ccp device
if (Constants.GATEWAY_BIND_STATUS.UNBIND_STATUS.equalsIgnoreCase(msgType)) {
ALog.i(TAG," user unbind ccp device, logout agui.");
AiLabsCore.getInstance().logoutUser();
return;
}
}
};
}
DeviceRefreshUi.getInstance().addDeviceNotifyChangeObserver(deviceNotifyObserver);
}
}