package ustc.sse;
//import android.R;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import android.R;
import android.util.Log;
import android.view.View;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class RemoteMusic extends Activity {
private LinearLayout mLayout;
private ScrollView mScrollView;
private Socket socket = null;
private TableLayout tableLayout;
private String ipAddress;
private int port;
private Bundle bundle;
private String musicNames;
private Button searchReturn;
private TextView searchNumView;
// public String musicName;
private int musicNums = 0;
private int i = 0;
private String musiclist=new String();
private String musicStrs[];
private AlertDialog.Builder popDialog;
private int currentindex = 1;
private int prePage = 0;
private int nextPage = 0;
private ProgressDialog m_Dialog;
private long progress = 0;
private void init(){
tableLayout = new TableLayout(this);
searchNumView =(TextView) this.findViewById(ustc.sse.R.id.musicNum);
searchReturn = (Button)this.findViewById(ustc.sse.R.id.searchReturn);
popDialog = new AlertDialog.Builder(this);
ipAddress = getSharedPreferences("Connect", 0).getString("IPADDRESS",
"");
port = getSharedPreferences("Connect", 0).getInt("PORT", 8899);
bundle = this.getIntent().getExtras();
musicNames = bundle.getString("key");
this.searchMusic(musicNames);
musicStrs = musiclist.split("#");
if ("".equals(musiclist))
musicNums = 0;
else
musicNums = musicStrs.length;
currentindex = musicNums<5? musicNums:5;
prePage = (currentindex-5>0)?(currentindex-5):0;
nextPage = (currentindex+5<musicNums)?(currentindex+5):musicNums;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(ustc.sse.R.layout.remotemusic);
init();
mLayout = (LinearLayout)findViewById(ustc.sse.R.id.remotelinelayout);
mScrollView = (ScrollView)findViewById(ustc.sse.R.id.remoteScrollView);
//
searchNumView.setText("Totol Num:"+musicNums);
searchReturn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(RemoteMusic.this, FileManager.class);
startActivity(intent);
RemoteMusic.this.finish();
}
});
while (musicStrs[i] != null && !(musiclist.equals(""))) {
if(i>10){
break;
}
final String musicName = musicStrs[i];
TableRow tabler = new TableRow(this);
TextView tablev = new TextView(this);
Button downButton = new Button(this);
tablev.setText(musicName);
tablev.setWidth(220);
tabler.addView(tablev);
downButton.setText("Down ");
downButton.setOnClickListener(new Button.OnClickListener() {
public void onClick(View arg0) {
popDialog.setMessage("" + musicName + "?")
.setPositiveButton("", //""
new DialogInterface.OnClickListener() //
{
public void onClick(DialogInterface dialog, int whichButton)
{
//
m_Dialog = ProgressDialog.show
(
RemoteMusic.this,
"...",
","+Long.toString(progress)+"%",
true
);
new Thread()
{
public void run()
{
try
{
downLoadMusic(musicName);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
//m_Dialog
m_Dialog.dismiss();
playActivity();
}
}
}.start();
}
})
.setNegativeButton("",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
});
popDialog.show();
}
});
tabler.addView(downButton);
tableLayout.addView(tabler);
i++;
if (i == musicStrs.length)
break;
}
mLayout.addView(tableLayout);
}
private void downLoadMusic(String musicName) throws IOException {
DataOutputStream fileOut=null;
File f;
BufferedWriter write = null;
DataInputStream inputStream = null;
try{
SocketConnectionManagement.establishLongConnection(ipAddress, 8898);
socket = SocketConnectionManagement.getLongInstance();
inputStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
write= new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream(),"UTF-8"));
write.write("downMusic" + "\n", 0,10);
write.write(musicName + "\n", 0,musicName.length() + 1);
write.flush();
String savePath = "/sdcard/";
int bufferSize = 50 * 1024 ;
byte[] buf = new byte[bufferSize];
int passedlen = 0;
String fileName = new String(inputStream.readUTF().trim().getBytes(),"UTF-8");
savePath += fileName;
f = new File(savePath);
f.createNewFile();
fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(f))));
long len = inputStream.readLong();
System.out.println(":" + len + "\n");
System.out.println("!" + "\n");
while (true) {
int read = 0;
if (inputStream != null) {
read = inputStream.read(buf);
}
passedlen += read;
if (read == -1) {
System.out.println("download is over.");
break;
}
// prograssBar
System.out.println("" + (passedlen * 100/ len) + "%\n");
progress = passedlen * 100/ len;
fileOut.write(buf, 0, read);
}
fileOut.flush();
System.out.println("" + savePath + "\n");
}
catch(IOException e){
e.printStackTrace();
}finally{
fileOut.close();
inputStream.close();
socket.close();
socket = null;
}
}
private void searchMusic(String regEx){
BufferedWriter writer = null;
BufferedReader reader = null;
try {
System.out.println("begin to search");
SocketConnectionManagement.establishLongConnection(ipAddress, 8898);
socket = SocketConnectionManagement.getLongInstance();
writer = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream(),"UTF-8"));
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream(),"UTF-8"));
writer.write("searchMusic" + "\n", 0, 12);
writer.write(regEx + "\n", 0, regEx.length() + 1);
writer.flush();
musiclist = reader.readLine();
System.out.println(" search finish");
}
catch(IOException e){
System.out.println(e.getMessage());
}finally{
try {
socket.close();
socket = null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void playActivity() {
Intent intent = new Intent();
intent.setClass(this, Player.class);
startActivity(intent);
RemoteMusic.this.finish();
}
}
|