diff options
author | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2022-09-28 20:15:37 +0300 |
---|---|---|
committer | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2022-09-28 20:15:37 +0300 |
commit | e8f38fb08649ebb6069818de0ebfa605d566912a (patch) | |
tree | 38d65c0ae004f1286136334b8fa42229260f36d5 | |
parent | 9972246d71a3d0aeb4dfb9423c64befbabff3a83 (diff) |
Restart after reboot
5 files changed, 87 insertions, 17 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3dc5fa2..9c80c86 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="com.clusterrr.usbserialtelnetserver" > + package="com.clusterrr.usbserialtelnetserver"> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> @@ -12,17 +12,17 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.USBSerialTelnetServer" > + android:theme="@style/Theme.USBSerialTelnetServer"> <service android:name=".UsbSerialTelnetService" android:enabled="true" - android:exported="true"/> + android:exported="true" /> <activity android:name=".MainActivity" android:exported="true" - android:launchMode="singleTop" > + android:launchMode="singleTop"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> @@ -30,8 +30,17 @@ <intent-filter> <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> </intent-filter> - <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/usb_device_filter"/> + + <meta-data + android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" + android:resource="@xml/usb_device_filter" /> </activity> + + <receiver android:name=".BootCompletedReceiver" android:exported="true"> + <intent-filter> + <action android:name="android.intent.action.BOOT_COMPLETED" /> + </intent-filter> + </receiver> </application> </manifest>
\ No newline at end of file diff --git a/app/src/main/java/com/clusterrr/usbserialtelnetserver/BootCompletedReceiver.java b/app/src/main/java/com/clusterrr/usbserialtelnetserver/BootCompletedReceiver.java new file mode 100644 index 0000000..aa2268b --- /dev/null +++ b/app/src/main/java/com/clusterrr/usbserialtelnetserver/BootCompletedReceiver.java @@ -0,0 +1,23 @@ +package com.clusterrr.usbserialtelnetserver; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Build; + +import com.hoho.android.usbserial.driver.UsbSerialPort; + +public class BootCompletedReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + // App was started before shutdown + SharedPreferences prefs = context.getApplicationContext().getSharedPreferences(context.getString(R.string.app_name), Context.MODE_PRIVATE); + boolean needToStart = prefs.getBoolean(UsbSerialTelnetService.KEY_LAST_STATE, false); + if (needToStart) { + Intent mainActivityStartIntent = new Intent(context, MainActivity.class); + mainActivityStartIntent.setAction(UsbSerialTelnetService.ACTION_NEED_TO_START); + } + } +}
\ No newline at end of file diff --git a/app/src/main/java/com/clusterrr/usbserialtelnetserver/MainActivity.java b/app/src/main/java/com/clusterrr/usbserialtelnetserver/MainActivity.java index 9290e6f..cdb8454 100644 --- a/app/src/main/java/com/clusterrr/usbserialtelnetserver/MainActivity.java +++ b/app/src/main/java/com/clusterrr/usbserialtelnetserver/MainActivity.java @@ -15,7 +15,9 @@ import android.hardware.usb.UsbManager; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.os.Handler; import android.os.IBinder; +import android.os.Looper; import android.os.PowerManager; import android.provider.Settings; import android.util.Log; @@ -41,22 +43,26 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe final static String SETTING_NO_LOCAL_ECHO = "no_local_echo"; final static String SETTING_REMOVE_LF = "remove_lf"; - UsbSerialTelnetService.ServiceBinder mServiceBinder = null; - Button mStartButton; - Button mStopButton; - EditText mTcpPort; - EditText mBaudRate; - Spinner mDataBits; - Spinner mStopBits; - Spinner mParity; - TextView mStatus; - Switch mNoLocalEcho; - Switch mRemoveLF; + private UsbSerialTelnetService.ServiceBinder mServiceBinder = null; + private Handler mHandler; + private Button mStartButton; + private Button mStopButton; + private EditText mTcpPort; + private EditText mBaudRate; + private Spinner mDataBits; + private Spinner mStopBits; + private Spinner mParity; + private TextView mStatus; + private Switch mNoLocalEcho; + private Switch mRemoveLF; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + + mHandler = new Handler(Looper.getMainLooper()); + mStartButton = findViewById(R.id.buttonStart); mStopButton = findViewById(R.id.buttonStop); mTcpPort = findViewById(R.id.editTextTcpPort); @@ -75,6 +81,13 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe bindService(serviceIntent, serviceConnection, 0); // in case it's service already started updateSettings(); + + boolean started = mServiceBinder != null && mServiceBinder.isStarted(); + if (!started) { + SharedPreferences prefs = getApplicationContext().getSharedPreferences(getString(R.string.app_name), Context.MODE_PRIVATE); + boolean needToStart = prefs.getBoolean(UsbSerialTelnetService.KEY_LAST_STATE, false); + if (needToStart) start(); + } } @Override @@ -154,6 +167,10 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe Intent serviceIntent = new Intent(this, UsbSerialTelnetService.class); stopService(serviceIntent); mServiceBinder = null; + mHandler.postDelayed(() -> { + SharedPreferences prefs = getApplicationContext().getSharedPreferences(getString(R.string.app_name), Context.MODE_PRIVATE); + prefs.edit().putBoolean(UsbSerialTelnetService.KEY_LAST_STATE, false).commit(); + }, 50); updateSettings(); } @@ -164,6 +181,11 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe mServiceBinder = (UsbSerialTelnetService.ServiceBinder) service; mServiceBinder.setOnStopListener(MainActivity.this); updateSettings(); + mHandler.postDelayed(() -> { + boolean started = mServiceBinder != null && mServiceBinder.isStarted(); + SharedPreferences prefs = getApplicationContext().getSharedPreferences(getString(R.string.app_name), Context.MODE_PRIVATE); + prefs.edit().putBoolean(UsbSerialTelnetService.KEY_LAST_STATE, started).commit(); + }, 50); Log.d(UsbSerialTelnetService.TAG, "Service connected"); } @@ -225,7 +247,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe mNoLocalEcho.setChecked(prefs.getBoolean(SETTING_NO_LOCAL_ECHO, true)); mRemoveLF.setChecked(prefs.getBoolean(SETTING_REMOVE_LF, true)); if (started) - mStatus.setText(getString(R.string.started_please_connect) + " telnet://" + UsbSerialTelnetService.getIPAddress() + ":"+ mTcpPort.getText()); + mStatus.setText(getString(R.string.started_please_connect) + " telnet://" + UsbSerialTelnetService.getIPAddress() + ":"+ mTcpPort.getText()); else mStatus.setText(R.string.not_started); } diff --git a/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialTelnetService.java b/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialTelnetService.java index 6b9f38a..409027c 100644 --- a/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialTelnetService.java +++ b/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialTelnetService.java @@ -7,6 +7,7 @@ import android.app.PendingIntent; import android.app.Service; import android.content.Context; import android.content.Intent; +import android.content.SharedPreferences; import android.graphics.BitmapFactory; import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; @@ -42,6 +43,7 @@ public class UsbSerialTelnetService extends Service { final static String KEY_PARITY = "parity"; final static String KEY_NO_LOCAL_ECHO = "no_local_echo"; final static String KEY_REMOVE_LF = "remove_lf"; + final static String KEY_LAST_STATE = "last_state"; boolean mStarted = false; //UsbSerialPort mSerialPort = null; diff --git a/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialThread.java b/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialThread.java index 1e03796..c2a0adf 100644 --- a/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialThread.java +++ b/app/src/main/java/com/clusterrr/usbserialtelnetserver/UsbSerialThread.java @@ -1,5 +1,9 @@ package com.clusterrr.usbserialtelnetserver; +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Handler; +import android.os.Looper; import android.util.Log; import com.hoho.android.usbserial.driver.UsbSerialPort; @@ -13,10 +17,12 @@ public class UsbSerialThread extends Thread { private UsbSerialTelnetService mUsbSerialTelnetService; private UsbSerialPort mSerialPort; + private Handler mHandler; public UsbSerialThread(UsbSerialTelnetService usbSerialTelnetService, UsbSerialPort serialPort) { mUsbSerialTelnetService = usbSerialTelnetService; mSerialPort = serialPort; + mHandler = new Handler(Looper.getMainLooper()); } @Override @@ -35,9 +41,11 @@ public class UsbSerialThread extends Thread { } catch (IOException e) { Log.i(UsbSerialTelnetService.TAG, "Serial port: " + e.getMessage()); + markStopped(); } catch (Exception e) { e.printStackTrace(); + markStopped(); } close(); Log.i(UsbSerialTelnetService.TAG, "Serial port closed"); @@ -58,4 +66,10 @@ public class UsbSerialThread extends Thread { } mSerialPort = null; } + + private void markStopped() + { + SharedPreferences prefs = mUsbSerialTelnetService.getApplicationContext().getSharedPreferences(mUsbSerialTelnetService.getString(R.string.app_name), Context.MODE_PRIVATE); + prefs.edit().putBoolean(UsbSerialTelnetService.KEY_LAST_STATE, false).commit(); + } } |