blob: 2f0f97139f35dbfd75ddad8a9a7c9a6daaeaf3e7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.alibaba.weex;
import android.Manifest;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.alibaba.weex.commons.AbstractWeexActivity;
import com.alibaba.weex.update.CheckForUpdateUtil;
import com.google.zxing.client.android.CaptureActivity;
import com.taobao.weex.WXSDKEngine;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.common.WXErrorCode;
import com.taobao.weex.utils.WXFileUtils;
import com.taobao.weex.utils.WXSoInstallMgrSdk;
public class IndexActivity extends AbstractWeexActivity {
private static final String TAG = "IndexActivity";
private static final int CAMERA_PERMISSION_REQUEST_CODE = 0x1;
private static final int WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 0x2;
private static final String DEFAULT_IP = "your_current_IP";
private static String sCurrentIp = DEFAULT_IP; // your_current_IP
private ProgressBar mProgressBar;
private TextView mTipView;
private BroadcastReceiver mReloadReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
setContainer((ViewGroup) findViewById(R.id.index_container));
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
mProgressBar = (ProgressBar) findViewById(R.id.index_progressBar);
mTipView = (TextView) findViewById(R.id.index_tip);
mProgressBar.setVisibility(View.VISIBLE);
mTipView.setVisibility(View.VISIBLE);
if (!WXSoInstallMgrSdk.isCPUSupport()) {
mProgressBar.setVisibility(View.INVISIBLE);
mTipView.setText(R.string.cpu_not_support_tip);
return;
}
if (TextUtils.equals(sCurrentIp, DEFAULT_IP)) {
renderPage(WXFileUtils.loadAsset("landing.weex.js", this), getIndexUrl());
// renderPageByURL("http://dotwe.org/raw/dist/2bbe1860da4669a68595c1aed01d7fd2.bundle.wx");
} else {
renderPageByURL(getIndexUrl());
}
mReloadReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
createWeexInstance();
if (TextUtils.equals(sCurrentIp, DEFAULT_IP)) {
renderPage(WXFileUtils.loadAsset("landing.weex.js", getApplicationContext()), getIndexUrl());
} else {
renderPageByURL(getIndexUrl());
}
mProgressBar.setVisibility(View.VISIBLE);
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(mReloadReceiver, new IntentFilter(WXSDKEngine.JS_FRAMEWORK_RELOAD));
CheckForUpdateUtil.checkForUpdate(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (TextUtils.equals(sCurrentIp, DEFAULT_IP)) {
getMenuInflater().inflate(R.menu.main_scan, menu);
} else {
getMenuInflater().inflate(R.menu.main, menu);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_refresh:
if (!TextUtils.equals(sCurrentIp, DEFAULT_IP)) {
createWeexInstance();
renderPageByURL(getIndexUrl());
mProgressBar.setVisibility(View.VISIBLE);
}
break;
case R.id.action_scan:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
Toast.makeText(this, "please give me the permission", Toast.LENGTH_SHORT).show();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQUEST_CODE);
}
} else {
startActivity(new Intent(this, CaptureActivity.class));
}
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == CAMERA_PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startActivity(new Intent(this, CaptureActivity.class));
} else {
Toast.makeText(this, "request camara permission fail!", Toast.LENGTH_SHORT).show();
}
} else if (requestCode == WRITE_EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE
&& grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
}
}
@Override
public void onRenderSuccess(WXSDKInstance wxsdkInstance, int i, int i1) {
super.onRenderSuccess(wxsdkInstance,i,i1);
mProgressBar.setVisibility(View.GONE);
mTipView.setVisibility(View.GONE);
}
@Override
public void onException(WXSDKInstance wxsdkInstance, String s, String s1) {
super.onException(wxsdkInstance,s,s1);
mProgressBar.setVisibility(View.GONE);
mTipView.setVisibility(View.VISIBLE);
if (TextUtils.equals(s, WXErrorCode.WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED.getErrorCode())) {
mTipView.setText(R.string.index_tip);
} else {
mTipView.setText("network render error:" + s1);
}
}
@Override
public void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReloadReceiver);
}
@Override
public void onPause() {
super.onPause();
// WXSDKManager.getInstance().takeJSHeapSnapshot("/sdcard/weex/");
}
private static String getIndexUrl() {
return "http://" + sCurrentIp + ":12580/examples/build/index.js";
}
}