package io.virtualapp.home; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.RemoteException; import android.widget.ImageView; import android.widget.TextView; import com.lody.virtual.client.core.VirtualCore; import com.lody.virtual.client.ipc.VActivityManager; import java.util.Locale; import io.virtualapp.R; import io.virtualapp.abs.ui.VActivity; import io.virtualapp.abs.ui.VUiKit; import io.virtualapp.home.models.PackageAppData; import io.virtualapp.home.repo.PackageAppDataStorage; import io.virtualapp.widgets.EatBeansView; /** * @author Lody */ public class LoadingActivity extends VActivity { private static final String PKG_NAME_ARGUMENT = "MODEL_ARGUMENT"; private static final String KEY_INTENT = "KEY_INTENT"; private static final String KEY_USER = "KEY_USER"; private PackageAppData appModel; private EatBeansView loadingView; public static void launch(Context context, String packageName, int userId) { Intent intent = VirtualCore.get().getLaunchIntent(packageName, userId); if (intent != null) { Intent loadingPageIntent = new Intent(context, LoadingActivity.class); loadingPageIntent.putExtra(PKG_NAME_ARGUMENT, packageName); loadingPageIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); loadingPageIntent.putExtra(KEY_INTENT, intent); loadingPageIntent.putExtra(KEY_USER, userId); context.startActivity(loadingPageIntent); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_loading); loadingView = (EatBeansView) findViewById(R.id.loading_anim); int userId = getIntent().getIntExtra(KEY_USER, -1); String pkg = getIntent().getStringExtra(PKG_NAME_ARGUMENT); appModel = PackageAppDataStorage.get().acquire(pkg); ImageView iconView = (ImageView) findViewById(R.id.app_icon); iconView.setImageDrawable(appModel.icon); TextView nameView = (TextView) findViewById(R.id.app_name); nameView.setText(String.format(Locale.ENGLISH, "Opening %s...", appModel.name)); Intent intent = getIntent().getParcelableExtra(KEY_INTENT); if (intent == null) { return; } VirtualCore.get().setUiCallback(intent, mUiCallback); VUiKit.defer().when(() -> { long startTime = System.currentTimeMillis(); if (!appModel.fastOpen) { try { VirtualCore.get().preOpt(appModel.packageName); } catch (Exception e) { e.printStackTrace(); } } long spend = System.currentTimeMillis() - startTime; if (spend < 500) { try { Thread.sleep(500 - spend); } catch (InterruptedException e) { e.printStackTrace(); } } }).done((res) -> VActivityManager.get().startActivity(intent, userId)); } private final VirtualCore.UiCallback mUiCallback = new VirtualCore.UiCallback() { @Override public void onAppOpened(String packageName, int userId) throws RemoteException { finish(); } }; @Override protected void onResume() { super.onResume(); loadingView.startAnim(); } @Override protected void onPause() { super.onPause(); loadingView.stopAnim(); } }