Search in sources :

Example 36 with NetworkPackage

use of org.kde.kdeconnect.NetworkPackage in project kdeconnect-android by KDE.

the class MprisPlugin method setPosition.

public void setPosition(int position) {
    NetworkPackage np = new NetworkPackage(PACKAGE_TYPE_MPRIS_REQUEST);
    np.set("player", player);
    np.set("SetPosition", position);
    device.sendPackage(np);
    this.lastPosition = position;
    this.lastPositionTime = System.currentTimeMillis();
}
Also used : NetworkPackage(org.kde.kdeconnect.NetworkPackage)

Example 37 with NetworkPackage

use of org.kde.kdeconnect.NetworkPackage in project kdeconnect-android by KDE.

the class SftpPlugin method onPackageReceived.

@Override
public boolean onPackageReceived(NetworkPackage np) {
    if (np.getBoolean("startBrowsing")) {
        if (server.start()) {
            NetworkPackage np2 = new NetworkPackage(PACKAGE_TYPE_SFTP);
            np2.set("ip", server.getLocalIpAddress());
            np2.set("port", server.getPort());
            np2.set("user", SimpleSftpServer.USER);
            np2.set("password", server.getPassword());
            //Kept for compatibility, in case "multiPaths" is not possible or the other end does not support it
            np2.set("path", Environment.getExternalStorageDirectory().getAbsolutePath());
            List<StorageHelper.StorageInfo> storageList = StorageHelper.getStorageList();
            ArrayList<String> paths = new ArrayList<>();
            ArrayList<String> pathNames = new ArrayList<>();
            for (StorageHelper.StorageInfo storage : storageList) {
                paths.add(storage.path);
                StringBuilder res = new StringBuilder();
                if (storageList.size() > 1) {
                    if (!storage.removable) {
                        res.append(context.getString(R.string.sftp_internal_storage));
                    } else if (storage.number > 1) {
                        res.append(context.getString(R.string.sftp_sdcard_num, storage.number));
                    } else {
                        res.append(context.getString(R.string.sftp_sdcard));
                    }
                } else {
                    res.append(context.getString(R.string.sftp_all_files));
                }
                String pathName = res.toString();
                if (storage.readonly) {
                    res.append(" ");
                    res.append(context.getString(R.string.sftp_readonly));
                }
                pathNames.add(res.toString());
                //Shortcut for users that only want to browse camera pictures
                String dcim = storage.path + "/DCIM/Camera";
                if (new File(dcim).exists()) {
                    paths.add(dcim);
                    if (storageList.size() > 1) {
                        pathNames.add(context.getString(R.string.sftp_camera) + "(" + pathName + ")");
                    } else {
                        pathNames.add(context.getString(R.string.sftp_camera));
                    }
                }
            }
            if (paths.size() > 0) {
                np2.set("multiPaths", paths);
                np2.set("pathNames", pathNames);
            }
            device.sendPackage(np2);
            return true;
        }
    }
    return false;
}
Also used : NetworkPackage(org.kde.kdeconnect.NetworkPackage) ArrayList(java.util.ArrayList) StorageHelper(org.kde.kdeconnect.Helpers.StorageHelper) File(java.io.File)

Example 38 with NetworkPackage

use of org.kde.kdeconnect.NetworkPackage in project kdeconnect-android by KDE.

the class SharePlugin method uriToNetworkPackage.

//Create the network package from the URI
private static NetworkPackage uriToNetworkPackage(final Context context, final Uri uri) {
    try {
        ContentResolver cr = context.getContentResolver();
        InputStream inputStream = cr.openInputStream(uri);
        NetworkPackage np = new NetworkPackage(PACKAGE_TYPE_SHARE_REQUEST);
        long size = -1;
        if (uri.getScheme().equals("file")) {
            // file:// is a non media uri, so we cannot query the ContentProvider
            np.set("filename", uri.getLastPathSegment());
            try {
                size = new File(uri.getPath()).length();
            } catch (Exception e) {
                Log.e("SendFileActivity", "Could not obtain file size");
                e.printStackTrace();
            }
        } else {
            // Probably a content:// uri, so we query the Media content provider
            Cursor cursor = null;
            try {
                String[] proj = { MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.SIZE, MediaStore.MediaColumns.DISPLAY_NAME };
                cursor = cr.query(uri, proj, null, null, null);
                int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
                cursor.moveToFirst();
                String path = cursor.getString(column_index);
                np.set("filename", Uri.parse(path).getLastPathSegment());
                size = new File(path).length();
            } catch (Exception unused) {
                Log.w("SendFileActivity", "Could not resolve media to a file, trying to get info as media");
                try {
                    int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME);
                    cursor.moveToFirst();
                    String name = cursor.getString(column_index);
                    np.set("filename", name);
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.e("SendFileActivity", "Could not obtain file name");
                }
                try {
                    int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE);
                    cursor.moveToFirst();
                    //For some reason this size can differ from the actual file size!
                    size = cursor.getInt(column_index);
                } catch (Exception e) {
                    Log.e("SendFileActivity", "Could not obtain file size");
                    e.printStackTrace();
                }
            } finally {
                try {
                    cursor.close();
                } catch (Exception e) {
                }
            }
        }
        np.setPayload(inputStream, size);
        return np;
    } catch (Exception e) {
        Log.e("SendFileActivity", "Exception sending files");
        e.printStackTrace();
        return null;
    }
}
Also used : InputStream(java.io.InputStream) NetworkPackage(org.kde.kdeconnect.NetworkPackage) Cursor(android.database.Cursor) File(java.io.File) DocumentFile(android.support.v4.provider.DocumentFile) ContentResolver(android.content.ContentResolver)

Example 39 with NetworkPackage

use of org.kde.kdeconnect.NetworkPackage in project kdeconnect-android by KDE.

the class ShareActivity method updateComputerList.

private void updateComputerList() {
    final Intent intent = getIntent();
    String action = intent.getAction();
    if (!Intent.ACTION_SEND.equals(action) && !Intent.ACTION_SEND_MULTIPLE.equals(action)) {
        finish();
        return;
    }
    BackgroundService.RunCommand(this, new BackgroundService.InstanceCallback() {

        @Override
        public void onServiceStart(final BackgroundService service) {
            Collection<Device> devices = service.getDevices().values();
            final ArrayList<Device> devicesList = new ArrayList<>();
            final ArrayList<ListAdapter.Item> items = new ArrayList<>();
            items.add(new SectionItem(getString(R.string.share_to)));
            for (Device d : devices) {
                if (d.isReachable() && d.isPaired()) {
                    devicesList.add(d);
                    items.add(new EntryItem(d.getName()));
                }
            }
            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    ListView list = (ListView) findViewById(R.id.listView1);
                    list.setAdapter(new ListAdapter(ShareActivity.this, items));
                    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                            //NOTE: -1 because of the title!
                            Device device = devicesList.get(i - 1);
                            Bundle extras = intent.getExtras();
                            if (extras != null) {
                                if (extras.containsKey(Intent.EXTRA_STREAM)) {
                                    try {
                                        ArrayList<Uri> uriList;
                                        if (!Intent.ACTION_SEND.equals(intent.getAction())) {
                                            uriList = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
                                        } else {
                                            Uri uri = extras.getParcelable(Intent.EXTRA_STREAM);
                                            uriList = new ArrayList<>();
                                            uriList.add(uri);
                                        }
                                        SharePlugin.queuedSendUriList(getApplicationContext(), device, uriList);
                                    } catch (Exception e) {
                                        Log.e("ShareActivity", "Exception");
                                        e.printStackTrace();
                                    }
                                } else if (extras.containsKey(Intent.EXTRA_TEXT)) {
                                    String text = extras.getString(Intent.EXTRA_TEXT);
                                    String subject = extras.getString(Intent.EXTRA_SUBJECT);
                                    //Hack: Detect shared youtube videos, so we can open them in the browser instead of as text
                                    if (subject != null && subject.endsWith("YouTube")) {
                                        int index = text.indexOf(": http://youtu.be/");
                                        if (index > 0) {
                                            //Skip ": "
                                            text = text.substring(index + 2);
                                        }
                                    }
                                    boolean isUrl;
                                    try {
                                        new URL(text);
                                        isUrl = true;
                                    } catch (Exception e) {
                                        isUrl = false;
                                    }
                                    NetworkPackage np = new NetworkPackage(SharePlugin.PACKAGE_TYPE_SHARE_REQUEST);
                                    if (isUrl) {
                                        np.set("url", text);
                                    } else {
                                        np.set("text", text);
                                    }
                                    device.sendPackage(np);
                                }
                            }
                            finish();
                        }
                    });
                }
            });
        }
    });
}
Also used : BackgroundService(org.kde.kdeconnect.BackgroundService) ArrayList(java.util.ArrayList) Uri(android.net.Uri) URL(java.net.URL) SectionItem(org.kde.kdeconnect.UserInterface.List.SectionItem) ListView(android.widget.ListView) ListAdapter(org.kde.kdeconnect.UserInterface.List.ListAdapter) EntryItem(org.kde.kdeconnect.UserInterface.List.EntryItem) Device(org.kde.kdeconnect.Device) Bundle(android.os.Bundle) Intent(android.content.Intent) View(android.view.View) AdapterView(android.widget.AdapterView) ListView(android.widget.ListView) NetworkPackage(org.kde.kdeconnect.NetworkPackage) Collection(java.util.Collection) AdapterView(android.widget.AdapterView)

Example 40 with NetworkPackage

use of org.kde.kdeconnect.NetworkPackage in project kdeconnect-android by KDE.

the class RunCommandPlugin method requestCommandList.

private void requestCommandList() {
    NetworkPackage np = new NetworkPackage(PACKAGE_TYPE_RUNCOMMAND_REQUEST);
    np.set("requestCommandList", true);
    device.sendPackage(np);
}
Also used : NetworkPackage(org.kde.kdeconnect.NetworkPackage)

Aggregations

NetworkPackage (org.kde.kdeconnect.NetworkPackage)41 IOException (java.io.IOException)4 ArrayList (java.util.ArrayList)4 SocketException (java.net.SocketException)3 Uri (android.net.Uri)2 BufferedReader (java.io.BufferedReader)2 File (java.io.File)2 InputStreamReader (java.io.InputStreamReader)2 DatagramSocket (java.net.DatagramSocket)2 InetAddress (java.net.InetAddress)2 ServerSocket (java.net.ServerSocket)2 Socket (java.net.Socket)2 Timer (java.util.Timer)2 TimerTask (java.util.TimerTask)2 Cipher (javax.crypto.Cipher)2 SSLSocket (javax.net.ssl.SSLSocket)2 JSONArray (org.json.JSONArray)2 Notification (android.app.Notification)1 ContentResolver (android.content.ContentResolver)1 Intent (android.content.Intent)1