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"/>