Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.bmc08gt.testkodifetch;
- import android.app.Activity;
- import android.app.DownloadManager;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.database.Cursor;
- import android.net.Uri;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.os.Environment;
- import android.util.Log;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.View;
- import android.widget.Button;
- import android.widget.Toast;
- import org.apache.http.HttpResponse;
- import org.apache.http.client.ClientProtocolException;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.util.EntityUtils;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.URL;
- import java.net.URLConnection;
- public class MyActivity extends Activity {
- public String currentSha;
- private long enqueue;
- private DownloadManager dm;
- private static final String VERSION_CHECK_JSON = "http://matriserver.com/firmware/xbmc/source/helix/version";
- private static final String KODI_URL = "http://matriserver.com/firmware/xbmc/source/helix/";
- private static final String KODI_PREFIX = "kodi-";
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_my);
- Button mButton = (Button) findViewById(R.id.button);
- mButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- new RetrieveCurrentShaTask().execute("");
- Toast.makeText(MyActivity.this, "currentSha=" + currentSha, Toast.LENGTH_SHORT).show();
- Log.d("FETCH", "Current sha is " + currentSha);
- if (currentSha != null && !currentSha.isEmpty()) {
- String apkUrl = KODI_URL + KODI_PREFIX + currentSha + ".apk";
- new DownloadApkTask(apkUrl).execute();
- } else {
- Log.d("DOWNLOAD", "sha is null or empty");
- }
- }
- });
- registerReceiver(handleDownloadReceiver, new IntentFilter(
- DownloadManager.ACTION_DOWNLOAD_COMPLETE));
- }
- private String fetchDownloadPartialPath(long id) {
- DownloadManager.Query query = new DownloadManager.Query();
- query.setFilterById(id);
- Cursor c = dm.query(query);
- try {
- if (c.moveToFirst()) {
- return c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
- }
- } finally {
- c.close();
- }
- return null;
- }
- public class DownloadApkTask extends AsyncTask<String, Void, Void> {
- public String url;
- public DownloadApkTask(String apkUrl) {
- this.url = apkUrl;
- }
- @Override
- protected Void doInBackground(String... strings) {
- dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
- DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
- String fullFilePath = "file://" +
- Environment.getExternalStorageDirectory().getAbsolutePath()
- + "/" + KODI_PREFIX + currentSha + ".apk";
- request.setTitle(getString(R.string.app_name));
- request.setDestinationUri(Uri.parse(fullFilePath));
- request.setAllowedOverRoaming(false);
- request.setVisibleInDownloadsUi(false);
- request.setAllowedOverMetered(true);
- enqueue = dm.enqueue(request);
- return null;
- }
- }
- BroadcastReceiver handleDownloadReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
- long downloadId = intent.getLongExtra(
- DownloadManager.EXTRA_DOWNLOAD_ID, 0);
- DownloadManager.Query query = new DownloadManager.Query();
- query.setFilterById(enqueue);
- Cursor c = dm.query(query);
- if (c.moveToFirst()) {
- int columnIndex = c
- .getColumnIndex(DownloadManager.COLUMN_STATUS);
- if (DownloadManager.STATUS_SUCCESSFUL == c
- .getInt(columnIndex)) {
- String partialFileFullPath = fetchDownloadPartialPath(downloadId);
- if (partialFileFullPath != null) {
- String completedFileFullPath = partialFileFullPath.replace(".partial", "");
- File partialFile = new File(partialFileFullPath);
- File updateFile = new File(completedFileFullPath);
- partialFile.renameTo(updateFile);
- Log.d("RECEIVER", "downloaded file is at" + updateFile.getAbsolutePath());
- }
- }
- }
- }
- }
- };
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.my, menu);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- // Handle action bar item clicks here. The action bar will
- // automatically handle clicks on the Home/Up button, so long
- // as you specify a parent activity in AndroidManifest.xml.
- int id = item.getItemId();
- if (id == R.id.action_settings) {
- return true;
- }
- return super.onOptionsItemSelected(item);
- }
- public class RetrieveCurrentShaTask extends AsyncTask<String, Void, String> {
- @Override
- protected String doInBackground(String... strings) {
- JSONObject json = null;
- String str = "";
- HttpResponse response;
- HttpClient myClient = new DefaultHttpClient();
- HttpPost myConnection = new HttpPost(VERSION_CHECK_JSON);
- try {
- response = myClient.execute(myConnection);
- str = EntityUtils.toString(response.getEntity(), "UTF-8");
- } catch (ClientProtocolException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- try{
- JSONArray jArray = new JSONArray(str);
- json = jArray.getJSONObject(0);
- return json.getString("sha");
- } catch ( JSONException e) {
- e.printStackTrace();
- }
- return null;
- }
- @Override
- protected void onPostExecute(String sha) {
- currentSha = sha;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement