package net.screenfreeze.deskcon;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class ShareActivity extends Activity {
private static String HOST;
private static int PORT;
private DesktopHostsDBHelper dbhelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent intent = getIntent();
dbhelper = new DesktopHostsDBHelper(this);
String current_wifi = getWifiSSID();
Cursor cursor = dbhelper.getHostsOnWifiCursor(current_wifi);
int hostcount = cursor.getCount();
// set Host and the port accordingly
if (hostcount == 0) {
this.finish();
}
else if (hostcount == 1) {
HOST = cursor.getString(2);
PORT = cursor.getInt(3);
cursor.close();
startAHandler(intent);
}
else if (hostcount > 1) {
setContentView(R.layout.share_desktop_hosts);
ListView hostslistview = (ListView) findViewById(R.id.sharehostslistView);
final HostsAdapter hostadapter = new HostsAdapter(this, cursor);
hostslistview.setAdapter(hostadapter);
hostslistview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int pos, long id) {
Cursor itemcursor = (Cursor) parent.getItemAtPosition(pos);
HOST = itemcursor.getString(2);
PORT = itemcursor.getInt(3);
itemcursor.close();
startAHandler(intent);
}
});
}
dbhelper.close();
}
private void startAHandler(Intent intent) {
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
handleSendText(intent); // Handle text being sent
} else {
handleSendFile(intent); // Handle single file being sent
}
}
else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
handleSendMultipleFiles(intent); // Handle multiple images being sent
}
this.finish();
}
private void handleSendText(Intent intent) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
Intent i = new Intent(this, StatusUpdateService.class);
//Test if it is a URL
if (testIsURL(sharedText)) {
i.putExtra("commandtype", "URL");
i.putExtra("message", sharedText);
i.putExtra("host", HOST);
i.putExtra("port", PORT);
}
else {
i.putExtra("commandtype", "CLPBRD");
i.putExtra("message", sharedText);
i.putExtra("host", HOST);
i.putExtra("port", PORT);
}
startService(i);
}
}
private void handleSendFile(Intent intent) {
Uri fileUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (fileUri != null) {
Log.d("FileUp: ", fileUri.toString());
String[] filepaths = new String[1];
filepaths[0] = fileUri.toString();
Intent i = new Intent(this, SendFilesService.class);
i.putExtra("filepaths", filepaths);
i.putExtra("host", HOST);
i.putExtra("port", PORT);
startService(i);
}
}
private void handleSendMultipleFiles(Intent intent) {
ArrayList<Uri> fileUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
Toast FileNotFoundError = Toast.makeText(getApplicationContext(),
"File not found", Toast.LENGTH_SHORT);
if (fileUris != null) {
String[] filepaths = new String[fileUris.size()];
int i = 0;
for (Uri fileUri : fileUris) {
String uristring = fileUri.toString();
Log.d("FileUp: ", fileUri.toString());
if (uristring == null) {
FileNotFoundError.show();
return;
}
filepaths[i] = uristring;
i++;
}
Intent j = new Intent(this, SendFilesService.class);
j.putExtra("filepaths", filepaths);
j.putExtra("host", HOST);
j.putExtra("port", PORT);
startService(j);
}
}
public boolean testIsURL(String str) {
boolean res = false;
try {
new URL(str);
res = true;
} catch (MalformedURLException e) {
res = false;
}
return res;
}
// Error when picasa content!!!!!!!!!!!!!!!!!!!!!!!!!!
public String getRealPathFromURI(Uri contentUri) {
// is file Uri
if (contentUri.getScheme().equals("file")){
return contentUri.getPath();
}
// is content Uri
String [] proj={MediaStore.Images.Media.DATA};
Cursor cursor =getContentResolver().query( contentUri,
proj, // Which columns to return
null, // WHERE clause; which rows to return (all rows)
null, // WHERE clause selection arguments (none)
null); // Order-by clause (ascending by name)
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String path = cursor.getString(column_index);
return path;
}
private String getWifiSSID() {
String ssid = null;
WifiManager wifiManager = (WifiManager) getApplicationContext()
.getSystemService(Context.WIFI_SERVICE);
try {
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
ssid = wifiInfo.getSSID();
} catch (Exception a) {
}
if (ssid == null) {ssid = "";}
return ssid;
}
public class HostsAdapter extends CursorAdapter {
@SuppressWarnings("deprecation")
public HostsAdapter(Context context, Cursor c) {
super(context, c);
}
@Override
public void bindView(View view, final Context context, Cursor cursor) {
TextView idtv = (TextView) view.findViewById(R.id.hostidtextView);
TextView nametv = (TextView) view.findViewById(R.id.hostnametextView);
TextView iptv = (TextView) view.findViewById(R.id.hostiptextView);
TextView wifitv = (TextView) view.findViewById(R.id.wifitextView);
nametv.setText(cursor.getString(1));
idtv.setText(String.valueOf(cursor.getLong(4)));
iptv.setText(cursor.getString(2));
wifitv.setText(cursor.getString(6));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.host_list_row_share, parent, false);
return v;
}
}
}