Skip to content

Commit ff13a3b

Browse files
committed
Added vibration when opening assistant (optional)
1 parent 850143b commit ff13a3b

File tree

14 files changed

+84
-24
lines changed

14 files changed

+84
-24
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
<uses-permission android:name="android.permission.INTERNET" />
66
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
77

8+
<uses-permission android:name="android.permission.VIBRATE" />
9+
810
<application
911
android:name=".activity.AppActivity"
1012
android:allowBackup="false"

app/src/main/java/com/wstxda/switchai/fragment/SettingsFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import com.wstxda.switchai.fragment.preferences.DigitalAssistantPreference
1919
import com.wstxda.switchai.ui.TileManager
2020
import com.wstxda.switchai.ui.component.AssistantManagerDialog
2121
import com.wstxda.switchai.ui.component.DigitalAssistantSetupDialog
22-
import com.wstxda.switchai.utils.AssistantResourcesManager
22+
import com.wstxda.switchai.ui.utils.AssistantResourcesManager
2323
import com.wstxda.switchai.ui.WidgetManager
2424
import com.wstxda.switchai.utils.Constants
2525
import com.wstxda.switchai.viewmodel.SettingsViewModel
@@ -84,7 +84,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
8484

8585
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
8686
setPreferencesFromResource(R.xml.main_preferences, rootKey)
87-
assistantResourcesManager = AssistantResourcesManager(requireContext()) // Initialize here
87+
assistantResourcesManager = AssistantResourcesManager(requireContext())
8888
setupInitialVisibility()
8989
setupPreferences()
9090
observeViewModel()

app/src/main/java/com/wstxda/switchai/logic/AssistantLauncher.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.content.Context
55
import android.content.Intent
66
import android.widget.Toast
77
import androidx.core.net.toUri
8+
import com.wstxda.switchai.ui.utils.VibrationService.openAssistantVibration
89

910
fun Context.launchAssistant(
1011
intents: List<Intent>,
@@ -24,6 +25,7 @@ fun Context.launchAssistant(
2425

2526
fun Context.launchAssistant(intent: Intent): Boolean = runCatching {
2627
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
28+
openAssistantVibration()
2729
startActivity(intent)
2830
true
2931
}.getOrElse { false }
@@ -32,7 +34,7 @@ fun Context.launchAssistantRoot(
3234
intents: List<Intent>,
3335
rootAccessMessageResId: Int,
3436
errorMessageResId: Int,
35-
packageName: String? = null
37+
packageName: String? = null,
3638
): Boolean {
3739
val hasRoot = runCatching {
3840
RootChecker.isRootAvailable()
@@ -46,12 +48,12 @@ fun Context.launchAssistantRoot(
4648
intents.forEach { intent ->
4749
val success = runCatching {
4850
RootChecker.launchRootActivity(
49-
intent.component!!.packageName,
50-
intent.component!!.className
51+
intent.component!!.packageName, intent.component!!.className
5152
)
5253
}.getOrElse { false }
5354

5455
if (success) return true
56+
openAssistantVibration()
5557
}
5658

5759
val handled = !packageName.isNullOrEmpty() && launchOnStore(packageName)

app/src/main/java/com/wstxda/switchai/services/DigitalAssistantService.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ class DigitalAssistantService : AssistantActivity() {
1212
val preferenceHelper = PreferenceHelper(this)
1313
val showSelector =
1414
preferenceHelper.getBoolean(Constants.ASSISTANT_SELECTOR_DIALOG_PREF_KEY, true)
15-
1615
if (showSelector) {
1716
val intent = Intent(this, AssistantSelectorActivity::class.java)
1817
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)

app/src/main/java/com/wstxda/switchai/utils/AssistantResourcesManager.kt renamed to app/src/main/java/com/wstxda/switchai/ui/utils/AssistantResourcesManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
package com.wstxda.switchai.utils
1+
package com.wstxda.switchai.ui.utils
22

33
import android.annotation.SuppressLint
44
import android.content.Context
5-
import androidx.preference.ListPreference
65
import androidx.core.content.ContextCompat
6+
import androidx.preference.ListPreference
77
import com.wstxda.switchai.R
88
import java.util.Locale
99

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.wstxda.switchai.ui.utils
2+
3+
import android.content.Context
4+
import android.os.Build
5+
import android.os.VibrationAttributes
6+
import android.os.VibrationEffect
7+
import android.os.Vibrator
8+
import androidx.preference.PreferenceManager
9+
import com.wstxda.switchai.utils.Constants
10+
11+
object VibrationService {
12+
13+
fun performVibration(context: Context) {
14+
if (!isVibrationEnabled(context)) return
15+
16+
val vibrator = context.getSystemService(Vibrator::class.java) ?: return
17+
18+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
19+
val effect = VibrationEffect.createPredefined(VibrationEffect.EFFECT_CLICK)
20+
21+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
22+
val attrs =
23+
VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_TOUCH).build()
24+
vibrator.vibrate(effect, attrs)
25+
} else {
26+
vibrator.vibrate(effect)
27+
}
28+
29+
} else {
30+
val effect = VibrationEffect.createOneShot(
31+
40, VibrationEffect.DEFAULT_AMPLITUDE
32+
)
33+
vibrator.vibrate(effect)
34+
}
35+
}
36+
37+
private fun isVibrationEnabled(context: Context): Boolean {
38+
val prefs = PreferenceManager.getDefaultSharedPreferences(context)
39+
return prefs.getBoolean(Constants.ASSISTANT_VIBRATION_PREF_KEY, true)
40+
}
41+
42+
fun Context.openAssistantVibration() {
43+
performVibration(this)
44+
}
45+
}

app/src/main/java/com/wstxda/switchai/ui/viewholder/AssistantSelectorItemViewHolder.kt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import androidx.recyclerview.widget.RecyclerView
66
import com.wstxda.switchai.R
77
import com.wstxda.switchai.utils.DigitalAssistantMap
88
import com.wstxda.switchai.databinding.ListItemAssistantViewBinding
9-
import com.wstxda.switchai.logic.launchAssistant
109
import com.wstxda.switchai.ui.adapter.AssistantSelectorRecyclerView
1110

1211
class AssistantSelectorItemViewHolder(
@@ -31,14 +30,11 @@ class AssistantSelectorItemViewHolder(
3130
itemView.setOnClickListener {
3231
val context = it.context
3332
DigitalAssistantMap.assistantsMap[item.key]?.let { cls ->
34-
Intent(context, cls).also { intent ->
35-
if (context.launchAssistant(intent)) {
36-
onAssistantLaunched(item.key)
37-
} else {
38-
Toast.makeText(context, R.string.assistant_open_error, Toast.LENGTH_SHORT)
39-
.show()
40-
}
33+
val intent = Intent(context, cls).apply {
34+
flags = Intent.FLAG_ACTIVITY_NEW_TASK
4135
}
36+
context.startActivity(intent)
37+
onAssistantLaunched(item.key)
4238
} ?: Toast.makeText(context, R.string.assistant_open_error, Toast.LENGTH_SHORT).show()
4339
}
4440
}

app/src/main/java/com/wstxda/switchai/utils/Constants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ object Constants {
1010
const val ASSISTANT_MANAGER_DIALOG_PREF_KEY = "assistant_selector_manager"
1111
const val OPEN_ASSISTANT_TILE_PREF_KEY = "open_assistant_tile"
1212
const val OPEN_ASSISTANT_WIDGET_PREF_KEY = "open_assistant_widget"
13+
const val ASSISTANT_VIBRATION_PREF_KEY = "assistant_vibration"
1314
const val ASSISTANT_ROOT_PREF_KEY = "assistant_root"
1415
const val LIBRARY_PREF_KEY = "library"
1516
const val THEME_PREF_KEY = "select_theme"

app/src/main/java/com/wstxda/switchai/utils/DigitalAssistantMap.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import android.content.Context
44
import android.content.Intent
55
import com.wstxda.switchai.assistant.*
66
import com.wstxda.switchai.logic.PreferenceHelper
7-
import com.wstxda.switchai.logic.launchAssistant
87

98
object DigitalAssistantMap {
109
internal val assistantsMap = mapOf(
@@ -34,7 +33,9 @@ object DigitalAssistantMap {
3433
val selectedShortcut =
3534
preferenceHelper.getString(Constants.DIGITAL_ASSISTANT_SELECT_PREF_KEY, null) ?: return
3635
val activityClass = assistantsMap[selectedShortcut] ?: return
37-
val intent = Intent(context, activityClass)
38-
context.launchAssistant(intent)
36+
val intent = Intent(context, activityClass).apply {
37+
flags = Intent.FLAG_ACTIVITY_NEW_TASK
38+
}
39+
context.startActivity(intent)
3940
}
4041
}

app/src/main/java/com/wstxda/switchai/viewmodel/AssistantSelectorViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import com.wstxda.switchai.utils.Constants.CAT_PINNED_ASSISTANTS_KEY
1818
import com.wstxda.switchai.utils.Constants.CAT_RECENTLY_USED_ASSISTANTS_KEY
1919
import com.wstxda.switchai.utils.Constants.CAT_MAX_RECENTLY_USED
2020
import com.wstxda.switchai.utils.Constants.PREFS_NAME
21-
import com.wstxda.switchai.utils.AssistantResourcesManager
21+
import com.wstxda.switchai.ui.utils.AssistantResourcesManager
2222

2323
class AssistantSelectorViewModel(application: Application) : AndroidViewModel(application),
2424
SharedPreferences.OnSharedPreferenceChangeListener {

0 commit comments

Comments
 (0)