srctree

Robin Linden parent ecd8d15f 9c22eb87
Allow starting aTox at boot

inlinesplit
atox/src/main/AndroidManifest.xml added: 91, removed: 16, total 75
@@ -6,6 +6,7 @@
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
 
<uses-feature android:name="android.hardware.camera" android:required="false"/>
 
@@ -17,8 +18,13 @@
android:roundIcon="@mipmap/launcher_icon_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service android:name=".ToxService"
android:exported="false"/>
<service android:name=".ToxService" android:exported="false"/>
 
<receiver android:name=".BootReceiver" android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
 
<activity android:name=".MainActivity">
<nav-graph android:value="@navigation/nav_graph"/>
 
filename was Deleted added: 91, removed: 16, total 75
@@ -0,0 +1,19 @@
package ltd.evilcorp.atox
 
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import ltd.evilcorp.atox.tox.ToxStarter
import javax.inject.Inject
 
class BootReceiver : BroadcastReceiver() {
@Inject
lateinit var toxStarter: ToxStarter
 
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == Intent.ACTION_BOOT_COMPLETED) {
(context.applicationContext as App).component.inject(this)
toxStarter.tryLoadTox()
}
}
}
 
atox/src/main/kotlin/di/AppComponent.kt added: 91, removed: 16, total 75
@@ -3,6 +3,7 @@ package ltd.evilcorp.atox.di
import android.content.Context
import dagger.BindsInstance
import dagger.Component
import ltd.evilcorp.atox.BootReceiver
import ltd.evilcorp.atox.MainActivity
import ltd.evilcorp.atox.ToxService
import ltd.evilcorp.core.di.DaoModule
@@ -18,5 +19,6 @@ interface AppComponent {
}
 
fun inject(activity: MainActivity)
fun inject(activity: ToxService)
fun inject(service: ToxService)
fun inject(receiver: BootReceiver)
}
 
atox/src/main/kotlin/ui/settings/SettingsFragment.kt added: 91, removed: 16, total 75
@@ -75,6 +75,11 @@ class SettingsFragment : Fragment() {
}
}
 
setting_run_at_startup.isChecked = vm.getRunAtStartup()
setting_run_at_startup.setOnClickListener {
vm.setRunAtStartup(setting_run_at_startup.isChecked)
}
 
settings_udp_enabled.isChecked = vm.getUdpEnabled()
settings_udp_enabled.setOnClickListener {
vm.setUdpEnabled(settings_udp_enabled.isChecked)
 
atox/src/main/kotlin/ui/settings/SettingsViewModel.kt added: 91, removed: 16, total 75
@@ -1,12 +1,15 @@
package ltd.evilcorp.atox.ui.settings
 
import android.content.ComponentName
import android.content.Context
import android.content.pm.PackageManager
import android.util.Log
import androidx.lifecycle.ViewModel
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import ltd.evilcorp.atox.BootReceiver
import ltd.evilcorp.atox.getPreferences
import ltd.evilcorp.atox.tox.ToxStarter
import ltd.evilcorp.domain.tox.Tox
@@ -25,6 +28,24 @@ class SettingsViewModel @Inject constructor(
restartNeeded = true
}
 
fun getRunAtStartup(): Boolean = context.packageManager.getComponentEnabledSetting(
ComponentName(context, BootReceiver::class.java)
) == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
 
fun setRunAtStartup(enabled: Boolean) {
val state = if (enabled) {
PackageManager.COMPONENT_ENABLED_STATE_ENABLED
} else {
PackageManager.COMPONENT_ENABLED_STATE_DISABLED
}
 
context.packageManager.setComponentEnabledSetting(
ComponentName(context, BootReceiver::class.java),
state,
PackageManager.DONT_KILL_APP
)
}
 
fun commit() {
if (!restartNeeded) return
toxStarter.stopTox()
 
atox/src/main/res/layout/fragment_settings.xml added: 91, removed: 16, total 75
@@ -15,7 +15,7 @@
app:title="@string/settings"/>
 
<androidx.cardview.widget.CardView
android:id="@+id/appearance_settings"
android:id="@+id/general_settings"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
@@ -30,7 +30,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/pref_heading_appearance"
android:text="@string/pref_heading_general"
android:textSize="16sp"/>
<View
android:layout_width="match_parent"
@@ -55,6 +55,28 @@
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"/>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/dividerColor"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="56dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
style="@style/OptionItemText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pref_run_at_startup"/>
<Switch
android:id="@+id/setting_run_at_startup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
 
@@ -64,7 +86,7 @@
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:elevation="4dp"
app:layout_constraintTop_toBottomOf="@id/appearance_settings"
app:layout_constraintTop_toBottomOf="@id/general_settings"
tools:targetApi="21">
<LinearLayout
android:layout_width="match_parent"
 
atox/src/main/res/values-es/strings.xml added: 91, removed: 16, total 75
@@ -56,7 +56,6 @@
<string name="atox_connected_with_tcp">Conectado (TCP)</string>
<string name="atox_connected_with_udp">Conectado (UDP)</string>
<string name="read_qr">QR</string>
<string name="pref_heading_appearance">Apariencia</string>
<string name="pref_heading_theme">Tema</string>
<string-array name="pref_theme_options">
<item>Seguir al sistema</item>
 
atox/src/main/res/values/strings.xml added: 91, removed: 16, total 75
@@ -61,7 +61,6 @@
<string name="atox_connected_with_tcp">Connected (TCP)</string>
<string name="atox_connected_with_udp">Connected (UDP)</string>
<string name="read_qr">QR</string>
<string name="pref_heading_appearance">Appearance</string>
<string name="pref_heading_theme">Theme</string>
<string-array name="pref_theme_options">
<item>Follow system</item>
@@ -82,6 +81,8 @@
<string name="tox_service_running">aTox is running</string>
<string name="pref_heading_network">Network</string>
<string name="pref_udp_enabled">UDP enabled</string>
<string name="pref_heading_general">General</string>
<string name="pref_run_at_startup">Run at boot</string>
<string-array name="user_statuses">
<item>Available</item>
<item>Away</item>