Mercurial > 510Connectbot
diff src/com/five_ten_sg/connectbot/util/TransferThread.java @ 0:0ce5cc452d02
initial version
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Thu, 22 May 2014 10:41:19 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/com/five_ten_sg/connectbot/util/TransferThread.java Thu May 22 10:41:19 2014 -0700 @@ -0,0 +1,150 @@ +/* + * TransferThread Class for VX ConnectBot + * Copyright 2012 Martin Matuska + * + * Licensed 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.five_ten_sg.connectbot.util; + +import java.util.StringTokenizer; + +import com.five_ten_sg.connectbot.R; +import com.five_ten_sg.connectbot.service.TerminalBridge; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.SharedPreferences; +import android.content.res.Resources; +import android.os.Handler; +import android.preference.PreferenceManager; +import android.util.Log; +import android.widget.Toast; + +public class TransferThread extends Thread { + public final static String TAG = "ConnectBot.TransferThread"; + private final Activity activity; + private final SharedPreferences prefs; + private String dialogMessage = null; + private Handler handler = new Handler(); + private TerminalBridge bridge; + private String files, destName, destFolder; + private ProgressDialog progress = null; + private boolean upload; + private Toast progressToast = null; + + public TransferThread(Activity activity, Handler handler) { + this.activity = activity; +// this.handler = handler; + this.prefs = PreferenceManager.getDefaultSharedPreferences(this.activity); + } + + public void setProgressDialogMessage(String message) { + this.dialogMessage = message; + } + + public void download(TerminalBridge bridge, String files, String destName, String destFolder) { + this.bridge = bridge; + this.files = files; + this.destName = destName; + this.destFolder = destFolder; + this.upload = false; + this.configureProgressDialog(); + this.start(); + } + + public void upload(TerminalBridge bridge, String files, String destName, String destFolder) { + this.bridge = bridge; + this.files = files; + this.destName = destName; + this.destFolder = destFolder; + this.upload = true; + this.configureProgressDialog(); + this.start(); + } + + @Override + public void run() { + if (this.activity == null || this.handler == null || this.bridge == null) + return; + + Log.d(TAG, "Requested " + (upload ? "upload" : "download") + " of [" + files + "]"); + Resources res = activity.getResources(); + String fail = ""; + + try { + StringTokenizer fileSet = new StringTokenizer(files, "\n"); + + while (fileSet.hasMoreTokens()) { + String file = fileSet.nextToken(); + final String newMessage = res.getString(upload ? R.string.transfer_uploading_file : R.string.transfer_downloading_file, file); + handler.post(new Runnable() { + public void run() { + if (prefs.getBoolean(PreferenceConstants.BACKGROUND_FILE_TRANSFER, true)) { + if (progressToast == null) + progressToast = Toast.makeText(activity, newMessage, Toast.LENGTH_LONG); + else + progressToast.setText(newMessage); + + progressToast.show(); + } + else if (progress != null) { + progress.setMessage(newMessage); + } + } + }); + boolean success = (upload ? bridge.uploadFile(file, destName, destFolder, null) : bridge.downloadFile(file, destFolder)); + + if (! success) + fail += " " + file; + } + } + finally { + final String failMessage = (fail.length() == 0 ? null : res.getString(upload ? R.string.transfer_upload_failed : R.string.transfer_download_failed, fail)); + final String sucMessage = (res.getString(upload ? R.string.transfer_upload_complete : R.string.transfer_download_complete)); + handler.post(new Runnable() { + public void run() { + if (progress != null) + progress.dismiss(); + + if (prefs.getBoolean(PreferenceConstants.BACKGROUND_FILE_TRANSFER, true)) { + Toast.makeText(activity, + failMessage != null ? failMessage : sucMessage, + Toast.LENGTH_LONG) + .show(); + } + else if (failMessage != null) { + new AlertDialog.Builder(activity) + .setMessage(failMessage) + .setNegativeButton(android.R.string.ok, null).create().show(); + } + } + }); + } + } + + private void configureProgressDialog() { + if (dialogMessage != null) + progress = fileProgressDialog(activity, this.dialogMessage); + else + progress = null; + } + + private ProgressDialog fileProgressDialog(Activity activity, String message) { + ProgressDialog progress = new ProgressDialog(activity); + progress.setIndeterminate(true); + progress.setMessage(message); + progress.setCancelable(false); + progress.show(); + return progress; + } +} \ No newline at end of file