From 506bc8d2c24c9dac5b9152f7c2a5725cba543b11 Mon Sep 17 00:00:00 2001 From: Albert Vaca Date: Tue, 8 Sep 2015 01:13:39 -0700 Subject: [PATCH] Started implementing the Send SMS plugin --- AndroidManifest.xml | 13 +- res/values/strings.xml | 3 + .../kde/kdeconnect/Plugins/PluginFactory.java | 2 + .../TelepathyPlugin/TelepathyPlugin.java | 172 ++++++++++++++++++ .../TelephonyPlugin/TelephonyPlugin.java | 8 +- 5 files changed, 186 insertions(+), 12 deletions(-) create mode 100644 src/org/kde/kdeconnect/Plugins/TelepathyPlugin/TelepathyPlugin.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d3045aad..0755a24a 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -14,21 +14,16 @@ android:smallScreens="true" android:xlargeScreens="true" /> - + - - + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 4afde49b..20f7ff65 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -153,5 +153,8 @@ Refresh This paired device is not reachable. Make sure it is connected to your same network. There are no file browsers installed. + Send SMS + Send text messages from your desktop + diff --git a/src/org/kde/kdeconnect/Plugins/PluginFactory.java b/src/org/kde/kdeconnect/Plugins/PluginFactory.java index 0226f61a..8979093b 100644 --- a/src/org/kde/kdeconnect/Plugins/PluginFactory.java +++ b/src/org/kde/kdeconnect/Plugins/PluginFactory.java @@ -33,6 +33,7 @@ import org.kde.kdeconnect.Plugins.MprisPlugin.MprisPlugin; import org.kde.kdeconnect.Plugins.NotificationsPlugin.NotificationsPlugin; import org.kde.kdeconnect.Plugins.PingPlugin.PingPlugin; import org.kde.kdeconnect.Plugins.SharePlugin.SharePlugin; +import org.kde.kdeconnect.Plugins.TelepathyPlugin.TelepathyPlugin; import org.kde.kdeconnect.Plugins.TelephonyPlugin.TelephonyPlugin; import java.util.Map; @@ -98,6 +99,7 @@ public class PluginFactory { PluginFactory.registerPlugin(NotificationsPlugin.class); PluginFactory.registerPlugin(MousePadPlugin.class); PluginFactory.registerPlugin(SharePlugin.class); + PluginFactory.registerPlugin(TelepathyPlugin.class); } public static PluginInfo getPluginInfo(Context context, String pluginKey) { diff --git a/src/org/kde/kdeconnect/Plugins/TelepathyPlugin/TelepathyPlugin.java b/src/org/kde/kdeconnect/Plugins/TelepathyPlugin/TelepathyPlugin.java new file mode 100644 index 00000000..9a2128a8 --- /dev/null +++ b/src/org/kde/kdeconnect/Plugins/TelepathyPlugin/TelepathyPlugin.java @@ -0,0 +1,172 @@ +/* + * Copyright 2014 Albert Vaca Cintora + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License or (at your option) version 3 or any later version + * accepted by the membership of KDE e.V. (or its successor approved + * by the membership of KDE e.V.), which shall act as a proxy + * defined in Section 14 of version 3 of the license. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . +*/ + +package org.kde.kdeconnect.Plugins.TelepathyPlugin; + +import android.database.Cursor; +import android.telephony.SmsManager; +import android.util.Log; +import android.widget.Toast; + +import org.kde.kdeconnect.NetworkPackage; +import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect_tp.R; + +import java.util.ArrayList; + +import static android.provider.ContactsContract.CommonDataKinds; +import static android.provider.ContactsContract.Contacts; + +public class TelepathyPlugin extends Plugin { + + @Override + public String getDisplayName() { + return context.getResources().getString(R.string.pref_plugin_telepathy); + } + + @Override + public String getDescription() { + return context.getResources().getString(R.string.pref_plugin_telepathy_desc); + } + + @Override + public boolean onCreate() { + return true; + } + + @Override + public void onDestroy() { + } + + @Override + public boolean onPackageReceived(NetworkPackage np) { + + if (!np.getType().equals(NetworkPackage.PACKAGE_TYPE_TELEPHONY)) { + return false; + } + + if (np.getBoolean("sendSms")) { + String phoneNo = np.getString("phoneNumber"); + String sms = np.getString("messageBody"); + try { + SmsManager smsManager = SmsManager.getDefault(); + smsManager.sendTextMessage(phoneNo, null, sms, null, null); + //TODO: Notify other end + } catch (Exception e) { + //TODO: Notify other end + Log.e("TelepathyPlugin", e.getMessage()); + e.printStackTrace(); + } + } + +/* + if (np.getBoolean("requestContacts")) { + + ArrayList vCards = new ArrayList(); + + Cursor cursor = context.getContentResolver().query( + Contacts.CONTENT_URI, + null, + Contacts.HAS_PHONE_NUMBER + " > 0 ", + null, + null + ); + + if (cursor != null && cursor.moveToFirst()) { + try { + do { + String lookupKey = cursor.getString(cursor.getColumnIndex(Contacts.LOOKUP_KEY)); + Uri uri = Uri.withAppendedPath(Contacts.CONTENT_VCARD_URI, lookupKey); + AssetFileDescriptor fd = null; + try { + fd = context.getContentResolver() + .openAssetFileDescriptor(uri, "r"); + FileInputStream fis = fd.createInputStream(); + byte[] b = new byte[(int) fd.getDeclaredLength()]; + fis.read(b); + String vCard = new String(b); + vCards.add(vCard); + } catch (FileNotFoundException e) { + e.printStackTrace(); + Log.e("RequestContacts", e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + Log.e("RequestContacts", e.getMessage()); + } finally { + if (fd != null) fd.close(); + } + } while (cursor.moveToNext()); + Log.e("Contacts","Size: "+vCards.size()); + } catch (Exception e) { + e.printStackTrace(); + Log.e("RequestContacts", e.getMessage()); + } finally { + cursor.close(); + } + } + + NetworkPackage answer = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_TELEPHONY); + answer.set("contacts",vCards); + device.sendPackage(answer); + + } +*/ +/* + if (np.getBoolean("requestNumbers")) { + + ArrayList numbers = new ArrayList(); + + Cursor cursor = context.getContentResolver().query( + CommonDataKinds.Phone.CONTENT_URI, + new String[]{ + CommonDataKinds.Phone.DISPLAY_NAME, + CommonDataKinds.Phone.NUMBER + }, + Contacts.HAS_PHONE_NUMBER + " > 0 ", + null, + null + ); + + if (cursor != null && cursor.moveToFirst()) { + try { + do { + String number = cursor.getString(cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER)); + String name = cursor.getString(cursor.getColumnIndex(CommonDataKinds.Phone.DISPLAY_NAME)); + numbers.add(number); + } while (cursor.moveToNext()); + Log.e("Numbers","Size: "+numbers.size()); + } catch (Exception e) { + e.printStackTrace(); + Log.e("RequestContacts", e.getMessage()); + } finally { + cursor.close(); + } + } + + NetworkPackage answer = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_TELEPHONY); + answer.set("numbers",numbers); + device.sendPackage(answer); + } +*/ + + return true; + } + +} diff --git a/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java b/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java index 997f5a4c..f5a7e548 100644 --- a/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java @@ -28,6 +28,7 @@ import android.media.AudioManager; import android.os.Bundle; import android.telephony.SmsMessage; import android.telephony.TelephonyManager; +import android.util.Log; import org.kde.kdeconnect.Helpers.ContactsHelper; import org.kde.kdeconnect.NetworkPackage; @@ -98,8 +99,8 @@ public class TelephonyPlugin extends Plugin { NetworkPackage np = new NetworkPackage(NetworkPackage.PACKAGE_TYPE_TELEPHONY); if (phoneNumber != null) { - phoneNumber = ContactsHelper.phoneNumberLookup(context,phoneNumber); np.set("phoneNumber", phoneNumber); + np.set("contactName", ContactsHelper.phoneNumberLookup(context, phoneNumber)); } switch (state) { @@ -144,6 +145,7 @@ public class TelephonyPlugin extends Plugin { if (lastState == TelephonyManager.CALL_STATE_RINGING) { np.set("event","missedCall"); np.set("phoneNumber", lastPackage.getString("phoneNumber",null)); + np.set("contactName", lastPackage.getString("contactName",null)); device.sendPackage(np); } @@ -172,8 +174,8 @@ public class TelephonyPlugin extends Plugin { String phoneNumber = message.getOriginatingAddress(); if (phoneNumber != null) { - phoneNumber = ContactsHelper.phoneNumberLookup(context, phoneNumber); - np.set("phoneNumber",phoneNumber); + np.set("phoneNumber", phoneNumber); + np.set("contactName", ContactsHelper.phoneNumberLookup(context, phoneNumber)); } device.sendPackage(np);