playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
package com.alibaba.weex;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.alibaba.weex.commons.AbsWeexActivity;
import com.alibaba.weex.constants.Constants;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.ui.component.NestedContainer;
import java.io.File;
import java.util.HashMap;
public class WXPageActivity extends AbsWeexActivity implements
WXSDKInstance.NestedInstanceInterceptor {
private static final String TAG = "WXPageActivity";
public static Activity wxPageActivityInstance;
private ProgressBar mProgressBar;
private Handler mWXHandler;
private HashMap mConfigMap = new HashMap<String, Object>();
public static Activity getCurrentWxPageActivity() {
return wxPageActivityInstance;
}
public static void setCurrentWxPageActivity(Activity activity) {
wxPageActivityInstance = activity;
}
@Override
public void onCreateNestInstance(WXSDKInstance instance, NestedContainer container) {
Log.d(TAG, "Nested Instance created.");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxpage);
setCurrentWxPageActivity(this);
mUri = getIntent().getData();
Bundle bundle = getIntent().getExtras();
if (mUri == null && bundle == null) {
mUri = Uri.parse(Constants.BUNDLE_URL + Constants.WEEX_SAMPLES_KEY);
}
if (bundle != null) {
String bundleUrl = bundle.getString("bundleUrl");
Log.i(TAG, "bundleUrl==" + bundleUrl);
if (bundleUrl != null) {
mConfigMap.put("bundleUrl", bundleUrl + Constants.WEEX_SAMPLES_KEY);
mUri = Uri.parse(bundleUrl + Constants.WEEX_SAMPLES_KEY);
}
} else {
mConfigMap.put("bundleUrl", mUri.toString() + Constants.WEEX_SAMPLES_KEY);
// mUri = Uri.parse(mUri.toString() + Constants.WEEX_SAMPLES_KEY)
}
if (mUri == null) {
Toast.makeText(this, "the uri is empty!", Toast.LENGTH_SHORT).show();
finish();
return;
}
Log.e("TestScript_Guide mUri==", mUri.toString());
initUIAndData();
loadUrl(getUrl(mUri));
}
private String getUrl(Uri uri) {
String url = uri.toString();
String scheme = uri.getScheme();
if (uri.isHierarchical()) {
if (TextUtils.equals(scheme, "http") || TextUtils.equals(scheme, "https")) {
String weexTpl = uri.getQueryParameter(Constants.WEEX_TPL_KEY);
if (!TextUtils.isEmpty(weexTpl)) {
url = weexTpl;
}
}
}
return url;
}
private void initUIAndData() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(mUri.toString().substring(mUri.toString().lastIndexOf(File.separator) + 1));
mContainer = (ViewGroup) findViewById(R.id.container);
mProgressBar = (ProgressBar) findViewById(R.id.progress);
}
protected void preRenderPage() {
mProgressBar.setVisibility(View.VISIBLE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Intent intent = new Intent("requestPermission");
intent.putExtra("REQUEST_PERMISSION_CODE", requestCode);
intent.putExtra("permissions", permissions);
intent.putExtra("grantResults", grantResults);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
@Override
public void onRenderSuccess(WXSDKInstance instance, int width, int height) {
mProgressBar.setVisibility(View.GONE);
}
@Override
public void onException(WXSDKInstance instance, String errCode, String msg) {
mProgressBar.setVisibility(View.GONE);
if (!TextUtils.isEmpty(errCode) && errCode.contains("|")) {
String[] errCodeList = errCode.split("\\|");
String code = errCodeList[1];
String codeType = errCode.substring(0, errCode.indexOf("|"));
if (TextUtils.equals("1", codeType)) {
String errMsg = "codeType:" + codeType + "\n" + " errCode:" + code + "\n" + " ErrorInfo:" + msg;
degradeAlert(errMsg);
return;
} else {
Toast.makeText(getApplicationContext(), "errCode:" + errCode + " Render ERROR:" + msg, Toast.LENGTH_SHORT).show();
}
}
}
private void degradeAlert(String errMsg) {
new AlertDialog.Builder(this)
.setTitle("Downgrade success")
.setMessage(errMsg)
.setPositiveButton("OK", null)
.show();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!TextUtils.equals("file", mUri.getScheme())) {
getMenuInflater().inflate(R.menu.refresh, menu);
}
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
} else if (id == R.id.action_refresh) {
createWeexInstance();
renderPage();
}
return super.onOptionsItemSelected(item);
}
}