diff --git a/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/activities/MainActivity.java b/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/activities/MainActivity.java
index 5acf396..d981bdd 100644
--- a/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/activities/MainActivity.java
+++ b/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/activities/MainActivity.java
@@ -13,11 +13,13 @@
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
+import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
+import android.widget.LinearLayout;
import android.widget.Toast;
import com.sonelli.juicessh.performancemonitor.R;
@@ -28,6 +30,7 @@
import com.sonelli.juicessh.performancemonitor.controllers.FreeRamController;
import com.sonelli.juicessh.performancemonitor.controllers.LoadAverageController;
import com.sonelli.juicessh.performancemonitor.controllers.NetworkUsageController;
+import com.sonelli.juicessh.performancemonitor.controllers.TemperatureController;
import com.sonelli.juicessh.performancemonitor.helpers.PreferenceHelper;
import com.sonelli.juicessh.performancemonitor.loaders.ConnectionListLoader;
import com.sonelli.juicessh.performancemonitor.views.AutoResizeTextView;
@@ -55,6 +58,8 @@ public class MainActivity extends AppCompatActivity implements ActionBar.OnNavig
private Button connectButton;
private Button disconnectButton;
+ private LinearLayout temperatureLayout;
+
private ConnectionSpinnerAdapter spinnerAdapter;
// Controllers
@@ -63,6 +68,7 @@ public class MainActivity extends AppCompatActivity implements ActionBar.OnNavig
private BaseController cpuUsageController;
private BaseController diskUsageController;
private BaseController networkUsageController;
+ private BaseController temperatureController;
// Text displays
private AutoResizeTextView loadAverageTextView;
@@ -70,6 +76,7 @@ public class MainActivity extends AppCompatActivity implements ActionBar.OnNavig
private AutoResizeTextView cpuUsageTextView;
private AutoResizeTextView networkUsageTextView;
private AutoResizeTextView diskUsageTextView;
+ private AutoResizeTextView temperatureTextView;
// State
private volatile int sessionId;
@@ -101,6 +108,7 @@ protected void onCreate(Bundle savedInstanceState) {
this.cpuUsageTextView = (AutoResizeTextView) findViewById(R.id.cpu_usage);
this.networkUsageTextView = (AutoResizeTextView) findViewById(R.id.network_usage);
this.diskUsageTextView = (AutoResizeTextView) findViewById(R.id.disk_usage);
+ this.temperatureTextView = (AutoResizeTextView) findViewById(R.id.temperature);
this.connectButton = (Button) findViewById(R.id.connect_button);
Drawable drawable = getDrawable(R.drawable.login);
@@ -108,6 +116,9 @@ protected void onCreate(Bundle savedInstanceState) {
drawable.setBounds(0, 0, (int)(drawable.getIntrinsicWidth()*0.2),
(int)(drawable.getIntrinsicHeight()*0.2));
}
+
+ this.temperatureLayout = (LinearLayout) findViewById(R.id.temperatureLayout);
+
connectButton.setCompoundDrawables(drawable, null, null, null);
connectButton.setOnClickListener(new View.OnClickListener() {
@Override
@@ -170,6 +181,14 @@ public void run() {
}
});
+ if (preferenceHelper.getShowTemperatureFlag()) {
+ loadAverageTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,36);
+ temperatureLayout.setVisibility(View.VISIBLE);
+ } else {
+ loadAverageTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,55);
+ temperatureLayout.setVisibility(View.GONE);
+ }
+
}
@Override
@@ -239,6 +258,7 @@ public boolean onCreateOptionsMenu(Menu menu) {
// assigning the keep screen on menu the value of its saved status
PreferenceHelper preferenceHelper = new PreferenceHelper(this);
menu.findItem(R.id.keep_screen_on).setChecked(preferenceHelper.getKeepScreenOnFlag());
+ menu.findItem(R.id.show_temperature).setChecked(preferenceHelper.getShowTemperatureFlag());
return true;
}
@@ -308,6 +328,13 @@ public void onSessionStarted(final int sessionId, final String sessionKey) {
.setTextview(networkUsageTextView)
.start();
+ this.temperatureController = new TemperatureController(this)
+ .setSessionId(sessionId)
+ .setSessionKey(sessionKey)
+ .setPluginClient(client)
+ .setTextview(temperatureTextView)
+ .start();
+
}
@Override
@@ -343,11 +370,16 @@ public void onSessionFinished() {
networkUsageController.stop();
}
+ if(temperatureController != null){
+ temperatureController.stop();
+ }
+
loadAverageTextView.setText("-");
freeRamTextView.setText("-");
cpuUsageTextView.setText("-");
networkUsageTextView.setText("-");
diskUsageTextView.setText("-");
+ temperatureTextView.setText("-");
disconnectButton.setVisibility(View.GONE);
disconnectButton.setEnabled(false);
@@ -386,6 +418,19 @@ public boolean onOptionsItemSelected(MenuItem item) {
}
return true;
+ case R.id.show_temperature:
+ item.setChecked(!item.isChecked());
+ PreferenceHelper preferenceHelper1 = new PreferenceHelper(this);
+ preferenceHelper1.setShowTemperatureFlag(item.isChecked());
+ if (item.isChecked()) {
+ loadAverageTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,36);
+ temperatureLayout.setVisibility(View.VISIBLE);
+ } else {
+ loadAverageTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,55);
+ temperatureLayout.setVisibility(View.GONE);
+ }
+ return true;
+
case R.id.rate_plugin:
String packageName = getResources().getString(R.string.app_package);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName));
diff --git a/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/controllers/TemperatureController.java b/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/controllers/TemperatureController.java
new file mode 100644
index 0000000..c3349a4
--- /dev/null
+++ b/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/controllers/TemperatureController.java
@@ -0,0 +1,76 @@
+package com.sonelli.juicessh.performancemonitor.controllers;
+
+import android.content.Context;
+import android.os.Handler;
+import android.util.Log;
+
+import com.sonelli.juicessh.performancemonitor.R;
+import com.sonelli.juicessh.pluginlibrary.exceptions.ServiceNotConnectedException;
+import com.sonelli.juicessh.pluginlibrary.listeners.OnSessionExecuteListener;
+
+public class TemperatureController extends BaseController {
+
+ public static final String TAG = "TemperatureController";
+
+ public TemperatureController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public BaseController start() {
+ super.start();
+
+ final Handler handler = new Handler();
+ handler.post(new Runnable() {
+
+ private int numOfLines;
+ private double sumOfTemps;
+
+ @Override
+ public void run() {
+ numOfLines = 0;
+ sumOfTemps = 0;
+ try {
+ getPluginClient().executeCommandOnSession(getSessionId(),getSessionKey(), "cat /sys/class/thermal/thermal_zone*/temp", new OnSessionExecuteListener() {
+ @Override
+ public void onCompleted(int exitCode) {
+ Log.d(TAG, "Exit code: " + exitCode);
+ switch(exitCode){
+ case 0:
+ sumOfTemps/=numOfLines; //calc avarage
+ sumOfTemps = (double)Math.round(sumOfTemps*10)/10; //one decimal place
+ setText(Double.toString(sumOfTemps) + "°C");
+ break;
+ case 127:
+ setText(getString(R.string.error));
+ Log.d(TAG, "Tried to run a command but the command was not found on the server");
+ break;
+ }
+ }
+
+ @Override
+ public void onOutputLine(String line) {
+ Log.d(TAG, "Line: " + line);
+ //input is in millidegrees C
+ double temp = Double.parseDouble(line)/1000;
+ sumOfTemps+=temp;
+ numOfLines++;
+ }
+
+ @Override
+ public void onError(int error, String reason) {
+ toast(reason);
+ }
+ });
+ } catch (ServiceNotConnectedException e) {
+ Log.d(TAG, "Tried to execute a command but could not connect to JuiceSSH plugin service");
+ }
+ if(isRunning()){
+ handler.postDelayed(this, INTERVAL_SECONDS * 1000L);
+ }
+ }
+ });
+
+ return this;
+ }
+}
diff --git a/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/helpers/PreferenceHelper.java b/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/helpers/PreferenceHelper.java
index 7129b0d..45937c0 100644
--- a/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/helpers/PreferenceHelper.java
+++ b/Plugin/src/main/java/com/sonelli/juicessh/performancemonitor/helpers/PreferenceHelper.java
@@ -7,6 +7,7 @@
public class PreferenceHelper {
private static final String KEEP_SCREEN_ON_KEY = "keep_screen_on_key";
+ private static final String SHOW_TEMPERATURE= "show_temperature_key";
private Context context;
public PreferenceHelper(Context context){
@@ -26,4 +27,18 @@ public boolean getKeepScreenOnFlag() {
PreferenceManager.getDefaultSharedPreferences(context);
return sharedPreferences.getBoolean(KEEP_SCREEN_ON_KEY, false);
}
+
+ public boolean getShowTemperatureFlag(){
+ SharedPreferences sharedPreferences =
+ PreferenceManager.getDefaultSharedPreferences(context);
+ return sharedPreferences.getBoolean(SHOW_TEMPERATURE, false);
+ }
+
+ public void setShowTemperatureFlag(boolean flag) {
+ SharedPreferences sharedPreferences = PreferenceManager
+ .getDefaultSharedPreferences(context);
+ SharedPreferences.Editor editor = sharedPreferences.edit();
+ editor.putBoolean(SHOW_TEMPERATURE, flag);
+ editor.apply();
+ }
}
diff --git a/Plugin/src/main/res/drawable/ripple_temperature.xml b/Plugin/src/main/res/drawable/ripple_temperature.xml
new file mode 100644
index 0000000..903c863
--- /dev/null
+++ b/Plugin/src/main/res/drawable/ripple_temperature.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/Plugin/src/main/res/drawable/shape_temperature.xml b/Plugin/src/main/res/drawable/shape_temperature.xml
new file mode 100644
index 0000000..fc9e200
--- /dev/null
+++ b/Plugin/src/main/res/drawable/shape_temperature.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Plugin/src/main/res/drawable/temperature.png b/Plugin/src/main/res/drawable/temperature.png
new file mode 100644
index 0000000..03d8ed2
Binary files /dev/null and b/Plugin/src/main/res/drawable/temperature.png differ
diff --git a/Plugin/src/main/res/layout/activity_main.xml b/Plugin/src/main/res/layout/activity_main.xml
index 89d65bc..39f6eac 100644
--- a/Plugin/src/main/res/layout/activity_main.xml
+++ b/Plugin/src/main/res/layout/activity_main.xml
@@ -1,4 +1,5 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Plugin/src/main/res/menu/menu_main.xml b/Plugin/src/main/res/menu/menu_main.xml
index ef46036..d06a698 100644
--- a/Plugin/src/main/res/menu/menu_main.xml
+++ b/Plugin/src/main/res/menu/menu_main.xml
@@ -8,6 +8,12 @@
android:checkable="true"
compat:showAsAction="never" />
+
+
-
#ce432c
+ #e64a19
#FF37BAB3
#FF04B1C5
#FFF2663D
diff --git a/Plugin/src/main/res/values/strings.xml b/Plugin/src/main/res/values/strings.xml
index 9dd8fc0..23f4042 100644
--- a/Plugin/src/main/res/values/strings.xml
+++ b/Plugin/src/main/res/values/strings.xml
@@ -32,5 +32,7 @@
Dark Theme
Bytes
This plugin requires access to list JuiceSSH connections, and to connect to them.
+ Temperature
+ Show temperature