java fragment_MainFragment.java

MainFragment.java

package net.wequick.example.small.app.home;

import android.app.ProgressDialog;

import android.content.Context;

import android.databinding.DataBindingUtil;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.support.annotation.Keep;

import android.support.v4.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.Toast;

import net.wequick.example.small.app.home.databinding.FragmentMainBinding;

import net.wequick.small.Small;

import net.wequick.example.small.lib.utils.UIUtils;

import org.json.JSONArray;

import org.json.JSONObject;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

/**

* Created by galen on 15/11/16.

*/

@Keep

public class MainFragment extends Fragment {

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

// View rootView = inflater.inflate(R.layout.fragment_main, container, false);

FragmentMainBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container, false);

binding.setHandlers(new MyHandler());

View rootView = binding.getRoot();

// Button button = (Button) rootView.findViewById(R.id.btnDetail);

// button.setOnClickListener(new View.OnClickListener() {

// @Override

// public void onClick(View v) {

// Small.openUri("detail?from=app.home", getContext());

// }

// });

Button button = (Button) rootView.findViewById(R.id.btnSubDetail);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Small.openUri("detail/sub", getContext());

}

});

button = (Button) rootView.findViewById(R.id.btnAbout);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Small.openUri("about", getContext());

}

});

button = (Button) rootView.findViewById(R.id.btnLib);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

UIUtils.showToast(getContext(), "Hello World!");

}

});

button = (Button) rootView.findViewById(R.id.btnUpgrade);

button.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

checkUpgrade();

}

});

return rootView;

}

private void checkUpgrade() {

new UpgradeManager(getContext()).checkUpgrade();

}

private static class UpgradeManager {

private static class UpdateInfo {

public String packageName;

public String downloadUrl;

}

private static class UpgradeInfo {

public JSONObject manifest;

public List

updates;

}

private interface OnResponseListener {

void onResponse(UpgradeInfo info);

}

private interface OnUpgradeListener {

void onUpgrade(boolean succeed);

}

private static class ResponseHandler extends Handler {

private OnResponseListener mListener;

public ResponseHandler(OnResponseListener listener) {

mListener = listener;

}

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

mListener.onResponse((UpgradeInfo) msg.obj);

break;

}

}

}

private ResponseHandler mResponseHandler;

private Context mContext;

private ProgressDialog mProgressDlg;

public UpgradeManager(Context context) {

mContext = context;

}

public void checkUpgrade() {

mProgressDlg = ProgressDialog.show(mContext, "Small", "Checking for updates...");

requestUpgradeInfo(Small.getBundleVersions(), new OnResponseListener() {

@Override

public void onResponse(UpgradeInfo info) {

mProgressDlg.setMessage("Upgrading...");

upgradeBundles(info,

new OnUpgradeListener() {

@Override

public void onUpgrade(boolean succeed) {

mProgressDlg.dismiss();

mProgressDlg = null;

String text = succeed ?

"Upgrade Success! Switch to background and back to foreground to see changes."

: "Upgrade Failed!";

Toast.makeText(mContext, text, Toast.LENGTH_SHORT).show();

}

});

}

});

}

/**

*

* @param versions

* @param listener

*/

private void requestUpgradeInfo(Map versions, OnResponseListener listener) {

System.out.println(versions); // this should be passed as HTTP parameters

mResponseHandler = new ResponseHandler(listener);

new Thread() {

@Override

public void run() {

try {

// Example HTTP request to get the upgrade bundles information.

// Json format see http://wequick.github.io/small/upgrade/bundles.json

URL url = new URL("http://wequick.github.io/small/upgrade/bundles.json");

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

StringBuilder sb = new StringBuilder();

InputStream is = conn.getInputStream();

byte[] buffer = new byte[1024];

int length;

while ((length = is.read(buffer)) != -1) {

sb.append(new String(buffer, 0, length));

}

// Parse json

JSONObject jo = new JSONObject(sb.toString());

JSONObject mf = jo.has("manifest") ? jo.getJSONObject("manifest") : null;

JSONArray updates = jo.getJSONArray("updates");

int N = updates.length();

List

infos = new ArrayList

(N); for (int i = 0; i < N; i++) { JSONObject o = updates.getJSONObject(i); UpdateInfo info = new UpdateInfo(); info.packageName = o.getString("pkg"); info.downloadUrl = o.getString("url"); infos.add(info); } // Post message UpgradeInfo ui = new UpgradeInfo(); ui.manifest = mf; ui.updates = infos; Message.obtain(mResponseHandler, 1, ui).sendToTarget(); } catch (Exception e) { e.printStackTrace(); } } }.start(); } private static class DownloadHandler extends Handler { private OnUpgradeListener mListener; public DownloadHandler(OnUpgradeListener listener) { mListener = listener; } @Override public void handleMessage(Message msg) { switch (msg.what) { case 1: mListener.onUpgrade((Boolean) msg.obj); break; } } } private DownloadHandler mHandler; private void upgradeBundles(final UpgradeInfo info, final OnUpgradeListener listener) { // Just for example, you can do this by OkHttp or something. mHandler = new DownloadHandler(listener); new Thread() { @Override public void run() { try { // Update manifest if (info.manifest != null) { if (!Small.updateManifest(info.manifest, false)) { Message.obtain(mHandler, 1, false).sendToTarget(); return; } } // Download bundles List

updates = info.updates; for (UpdateInfo u : updates) { // Get the patch file for downloading net.wequick.small.Bundle bundle = Small.getBundle(u.packageName); File file = bundle.getPatchFile(); // Download URL url = new URL(u.downloadUrl); HttpURLConnection urlConn = (HttpURLConnection) url.openConnection(); InputStream is = urlConn.getInputStream(); OutputStream os = new FileOutputStream(file); byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) != -1) { os.write(buffer, 0, length); } os.flush(); os.close(); is.close(); // Upgrade bundle.upgrade(); } Message.obtain(mHandler, 1, true).sendToTarget(); } catch (IOException e) { e.printStackTrace(); Message.obtain(mHandler, 1, false).sendToTarget(); } } }.start(); } } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值