diff --git a/play-services-base/core/src/main/kotlin/org/microg/gms/settings/SettingsContract.kt b/play-services-base/core/src/main/kotlin/org/microg/gms/settings/SettingsContract.kt index 69fdb357c4..eea4efcbbf 100644 --- a/play-services-base/core/src/main/kotlin/org/microg/gms/settings/SettingsContract.kt +++ b/play-services-base/core/src/main/kotlin/org/microg/gms/settings/SettingsContract.kt @@ -34,6 +34,7 @@ object SettingsContract { const val SECURITY_TOKEN = "securityToken" const val VERSION_INFO = "versionInfo" const val DEVICE_DATA_VERSION_INFO = "deviceDataVersionInfo" + const val HIDE_APP_ICON = "hideAppIcon" val PROJECTION = arrayOf( ENABLED, @@ -43,6 +44,7 @@ object SettingsContract { SECURITY_TOKEN, VERSION_INFO, DEVICE_DATA_VERSION_INFO, + HIDE_APP_ICON, ) const val PREFERENCES_NAME = "checkin" const val INITIAL_DIGEST = "1-929a0dca0eee55513280171a8585da7dcd3700f8" diff --git a/play-services-base/core/src/main/kotlin/org/microg/gms/settings/SettingsProvider.kt b/play-services-base/core/src/main/kotlin/org/microg/gms/settings/SettingsProvider.kt index ea8fe5417f..629f2e70ca 100644 --- a/play-services-base/core/src/main/kotlin/org/microg/gms/settings/SettingsProvider.kt +++ b/play-services-base/core/src/main/kotlin/org/microg/gms/settings/SettingsProvider.kt @@ -117,6 +117,7 @@ class SettingsProvider : ContentProvider() { CheckIn.SECURITY_TOKEN -> checkInPrefs.getLong(key, 0) CheckIn.VERSION_INFO -> checkInPrefs.getString(key, "") ?: "" CheckIn.DEVICE_DATA_VERSION_INFO -> checkInPrefs.getString(key, "") ?: "" + CheckIn.HIDE_APP_ICON -> getSettingsBoolean(key, false) else -> throw IllegalArgumentException() } } @@ -134,6 +135,10 @@ class SettingsProvider : ContentProvider() { // special case: not saved in checkInPrefs updateCheckInEnabled(value as Boolean) } + if (key == CheckIn.HIDE_APP_ICON) { + // special case: not saved in checkInPrefs + updateHideAppIcon(value as Boolean) + } when (key) { CheckIn.ANDROID_ID -> editor.putLong(key, value as Long) CheckIn.DIGEST -> editor.putString(key, value as String?) @@ -152,6 +157,12 @@ class SettingsProvider : ContentProvider() { .apply() } + private fun updateHideAppIcon(hide: Boolean) { + preferences.edit() + .putBoolean(CheckIn.HIDE_APP_ICON, hide) + .apply() + } + private fun queryGcm(p: Array): Cursor = MatrixCursor(p).addRow(p) { key -> when (key) { Gcm.ENABLE_GCM -> getSettingsBoolean(key, false) diff --git a/play-services-base/core/src/main/kotlin/org/microg/gms/ui/Utils.kt b/play-services-base/core/src/main/kotlin/org/microg/gms/ui/Utils.kt index d97e233f26..974963b54e 100644 --- a/play-services-base/core/src/main/kotlin/org/microg/gms/ui/Utils.kt +++ b/play-services-base/core/src/main/kotlin/org/microg/gms/ui/Utils.kt @@ -5,6 +5,7 @@ package org.microg.gms.ui +import android.content.ComponentName import android.content.Context import android.content.pm.ApplicationInfo import android.content.pm.PackageManager @@ -45,6 +46,18 @@ fun NavController.navigate(context: Context, @IdRes resId: Int, args: Bundle? = } else null) } +fun Context.hideAppIcon(hide: Boolean) { + val componentName = ComponentName("org.microg.gms.ui", "org.microg.gms.ui.SettingsActivity") + packageManager.setComponentEnabledSetting( + componentName, + when (hide) { + true -> PackageManager.COMPONENT_ENABLED_STATE_DISABLED + false -> PackageManager.COMPONENT_ENABLED_STATE_ENABLED + }, + PackageManager.DONT_KILL_APP + ) +} + val Context.systemAnimationsEnabled: Boolean get() { val duration: Float diff --git a/play-services-base/core/src/main/res/drawable/ic_hide_app_icon.xml b/play-services-base/core/src/main/res/drawable/ic_hide_app_icon.xml new file mode 100644 index 0000000000..87e132f89b --- /dev/null +++ b/play-services-base/core/src/main/res/drawable/ic_hide_app_icon.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml index 2ccf69c711..d36bf2eb1e 100644 --- a/play-services-core/src/main/AndroidManifest.xml +++ b/play-services-core/src/main/AndroidManifest.xml @@ -629,7 +629,9 @@ android:roundIcon="@mipmap/ic_app_settings" android:process=":ui" android:targetActivity="org.microg.gms.ui.MainSettingsActivity" - android:taskAffinity="org.microg.gms.settings"> + android:taskAffinity="org.microg.gms.settings" + android:enabled="true" + android:exported="true"> diff --git a/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java b/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java index dd9a1be6ac..81c34340d3 100644 --- a/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java +++ b/play-services-core/src/main/java/org/microg/gms/auth/login/LoginActivity.java @@ -58,6 +58,7 @@ import org.microg.gms.people.PeopleManager; import org.microg.gms.profile.Build; import org.microg.gms.profile.ProfileManager; +import org.microg.gms.ui.UtilsKt; import java.io.IOException; import java.security.MessageDigest; diff --git a/play-services-core/src/main/kotlin/org/microg/gms/checkin/CheckinPreferences.kt b/play-services-core/src/main/kotlin/org/microg/gms/checkin/CheckinPreferences.kt index 0323466548..1d3a0c9b01 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/checkin/CheckinPreferences.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/checkin/CheckinPreferences.kt @@ -28,5 +28,11 @@ object CheckinPreferences { context.sendOrderedBroadcast(Intent(context, TriggerReceiver::class.java), null) } } + @JvmStatic + fun hideAppIcon(context: Context, hide: Boolean) { + SettingsContract.setSettings(context, CheckIn.getContentUri(context)) { + put(CheckIn.HIDE_APP_ICON, hide) + } + } } diff --git a/play-services-core/src/main/kotlin/org/microg/gms/ui/SettingsFragment.kt b/play-services-core/src/main/kotlin/org/microg/gms/ui/SettingsFragment.kt index 529e10371b..17c74d0cf8 100644 --- a/play-services-core/src/main/kotlin/org/microg/gms/ui/SettingsFragment.kt +++ b/play-services-core/src/main/kotlin/org/microg/gms/ui/SettingsFragment.kt @@ -11,14 +11,16 @@ import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController import androidx.preference.Preference import androidx.preference.PreferenceCategory +import androidx.preference.SwitchPreferenceCompat import com.google.android.gms.R import org.microg.gms.checkin.CheckinPreferences import org.microg.gms.gcm.GcmDatabase import org.microg.gms.gcm.GcmPrefs -import org.microg.gms.vending.VendingPreferences import org.microg.gms.safetynet.SafetyNetPreferences +import org.microg.gms.settings.SettingsContract import org.microg.gms.ui.settings.SettingsProvider import org.microg.gms.ui.settings.getAllSettingsProviders +import org.microg.gms.vending.VendingPreferences import org.microg.tools.ui.ResourceSettingsFragment class SettingsFragment : ResourceSettingsFragment() { @@ -60,6 +62,14 @@ class SettingsFragment : ResourceSettingsFragment() { summary = getString(org.microg.tools.ui.R.string.about_version_str, AboutFragment.getSelfVersion(context)) } + findPreference(SettingsContract.CheckIn.HIDE_APP_ICON)!!.apply { + setOnPreferenceChangeListener { _, newValue -> + requireActivity().hideAppIcon(newValue as Boolean) + true + } + + } + for (entry in getAllSettingsProviders(requireContext()).flatMap { it.getEntriesStatic(requireContext()) }) { entry.createPreference() } diff --git a/play-services-core/src/main/res/values/strings.xml b/play-services-core/src/main/res/values/strings.xml index bbe47e70a9..e08e8d1c89 100644 --- a/play-services-core/src/main/res/values/strings.xml +++ b/play-services-core/src/main/res/values/strings.xml @@ -169,6 +169,8 @@ This can take a couple of minutes." Ask before registering a new app to receive push notifications Ping interval: %1$s + Hide app icon + Hides app icon from the launcher About microG Services Version information and used libraries diff --git a/play-services-core/src/main/res/xml/preferences_start.xml b/play-services-core/src/main/res/xml/preferences_start.xml index 8f71c018f9..88f25a82e6 100644 --- a/play-services-core/src/main/res/xml/preferences_start.xml +++ b/play-services-core/src/main/res/xml/preferences_start.xml @@ -65,9 +65,15 @@ android:title="@string/service_name_location"/> + - + \ No newline at end of file