From 3ce26dafb296006411390a67a73a26a39c5cd3b2 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Fri, 4 Jul 2014 21:41:03 +0200 Subject: [PATCH] Allow copying node ID to clipboard in Drawer and node settings (closes #53). --- .../gui/LocalNodeInfoFragment.java | 14 ++++++++++ .../gui/NodeSettingsActivity.java | 12 ++++++--- .../syncthingandroid/syncthing/RestApi.java | 26 +++++++++++++++++++ src/main/res/values/strings.xml | 3 +++ src/main/res/xml/node_settings_edit.xml | 6 ++--- 5 files changed, 53 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/nutomic/syncthingandroid/gui/LocalNodeInfoFragment.java b/src/main/java/com/nutomic/syncthingandroid/gui/LocalNodeInfoFragment.java index 56fe65fa..d0727a08 100644 --- a/src/main/java/com/nutomic/syncthingandroid/gui/LocalNodeInfoFragment.java +++ b/src/main/java/com/nutomic/syncthingandroid/gui/LocalNodeInfoFragment.java @@ -1,15 +1,21 @@ package com.nutomic.syncthingandroid.gui; +import android.annotation.TargetApi; import android.app.Activity; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; import android.os.Bundle; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.Fragment; import android.support.v4.widget.DrawerLayout; import android.view.LayoutInflater; import android.view.MenuItem; +import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import android.widget.Toast; import com.nutomic.syncthingandroid.R; import com.nutomic.syncthingandroid.syncthing.RestApi; @@ -136,6 +142,14 @@ public class LocalNodeInfoFragment extends Fragment return; mNodeId.setText(info.myID); + mNodeId.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View view, MotionEvent motionEvent) { + mActivity.getApi().copyNodeId(mNodeId.getText().toString()); + view.performClick(); + return true; + } + }); mCpuUsage.setText(new DecimalFormat("0.00").format(info.cpuPercent) + "%"); mRamUsage.setText(RestApi.readableFileSize(mActivity, info.sys)); if (info.extAnnounceOK) { diff --git a/src/main/java/com/nutomic/syncthingandroid/gui/NodeSettingsActivity.java b/src/main/java/com/nutomic/syncthingandroid/gui/NodeSettingsActivity.java index f2f04bf6..59d54072 100644 --- a/src/main/java/com/nutomic/syncthingandroid/gui/NodeSettingsActivity.java +++ b/src/main/java/com/nutomic/syncthingandroid/gui/NodeSettingsActivity.java @@ -56,7 +56,7 @@ public class NodeSettingsActivity extends PreferenceActivity implements private RestApi.Node mNode; - private EditTextPreference mNodeId; + private Preference mNodeId; private EditTextPreference mName; @@ -70,7 +70,6 @@ public class NodeSettingsActivity extends PreferenceActivity implements @Override @SuppressLint("AppCompatMethod") - @TargetApi(11) protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -85,7 +84,7 @@ public class NodeSettingsActivity extends PreferenceActivity implements addPreferencesFromResource(R.xml.node_settings_edit); } - mNodeId = (EditTextPreference) findPreference("node_id"); + mNodeId = findPreference("node_id"); mNodeId.setOnPreferenceChangeListener(this); mName = (EditTextPreference) findPreference("name"); mName.setOnPreferenceChangeListener(this); @@ -117,6 +116,7 @@ public class NodeSettingsActivity extends PreferenceActivity implements mNode.Name = ""; mNode.NodeID = ""; mNode.Addresses = "dynamic"; + ((EditTextPreference) mNodeId).setText(mNode.NodeID); } else if (getIntent().getAction().equals(ACTION_EDIT)) { setTitle(R.string.edit_node); @@ -127,10 +127,10 @@ public class NodeSettingsActivity extends PreferenceActivity implements break; } } + mNodeId.setOnPreferenceClickListener(this); } mSyncthingService.getApi().getConnections(NodeSettingsActivity.this); - mNodeId.setText(mNode.NodeID); mNodeId.setSummary(mNode.NodeID); mName.setText((mNode.Name)); mName.setSummary(mNode.Name); @@ -224,6 +224,10 @@ public class NodeSettingsActivity extends PreferenceActivity implements .show(); return true; } + else if (preference.equals(mNodeId)) { + mSyncthingService.getApi().copyNodeId(mNode.NodeID); + return true; + } return false; } diff --git a/src/main/java/com/nutomic/syncthingandroid/syncthing/RestApi.java b/src/main/java/com/nutomic/syncthingandroid/syncthing/RestApi.java index 9ae65dda..1b55642f 100644 --- a/src/main/java/com/nutomic/syncthingandroid/syncthing/RestApi.java +++ b/src/main/java/com/nutomic/syncthingandroid/syncthing/RestApi.java @@ -1,15 +1,19 @@ package com.nutomic.syncthingandroid.syncthing; +import android.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; +import android.content.ClipData; +import android.content.ClipboardManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.support.v4.app.NotificationCompat; import android.util.Log; +import android.widget.Toast; import com.nutomic.syncthingandroid.R; @@ -729,4 +733,26 @@ public class RestApi implements SyncthingService.OnWebGuiAvailableListener { shareIntent, activity.getString(R.string.send_node_id_to))); } + /** + * Copies the given node ID to the clipboard (and shows a Toast telling about it). + * + * @param id The node ID to copy. + */ + @TargetApi(11) + public void copyNodeId(String id) { + int sdk = android.os.Build.VERSION.SDK_INT; + if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { + android.text.ClipboardManager clipboard = (android.text.ClipboardManager) + mSyncthingService.getSystemService(Context.CLIPBOARD_SERVICE); + clipboard.setText(id); + } else { + ClipboardManager clipboard = (ClipboardManager) + mSyncthingService.getSystemService(Context.CLIPBOARD_SERVICE); + ClipData clip = ClipData.newPlainText(mSyncthingService.getString(R.string.node_id), id); + clipboard.setPrimaryClip(clip); + } + Toast.makeText(mSyncthingService, R.string.node_id_copied_to_clipboard, Toast.LENGTH_SHORT) + .show(); + } + } diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 76726270..dc3fbcb4 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -223,6 +223,9 @@ Please report any problems you encounter. Restart Later + + Node ID copied to clipboard + B diff --git a/src/main/res/xml/node_settings_edit.xml b/src/main/res/xml/node_settings_edit.xml index 916c149d..430a58c8 100644 --- a/src/main/res/xml/node_settings_edit.xml +++ b/src/main/res/xml/node_settings_edit.xml @@ -2,11 +2,9 @@ - + android:title="@string/node_id"/>