Skip to content

Commit 34d8774

Browse files
codedsuniamareebjamal
authored andcommitted
fix: App crash on opening settings activity (#1684)
1 parent 4c26c17 commit 34d8774

File tree

17 files changed

+106
-50
lines changed

17 files changed

+106
-50
lines changed

app/src/main/java/org/fossasia/susi/ai/chat/ChatActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class ChatActivity : AppCompatActivity(), IChatView {
6565
private var example: String = ""
6666
private var isConfigurationChanged = false
6767
private val enterAsSend: Boolean by lazy {
68-
PrefManager.getBoolean(Constant.ENTER_SEND, false)
68+
PrefManager.getBoolean(R.string.settings_enterPreference_key, false)
6969
}
7070

7171
private val afChangeListener = AudioManager.OnAudioFocusChangeListener { focusChange ->

app/src/main/java/org/fossasia/susi/ai/chat/ChatPresenter.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ class ChatPresenter(chatActivity: ChatActivity) : IChatPresenter, IChatModel.OnR
7575
}
7676

7777
override fun checkPreferences() {
78-
micCheck = utilModel.getBooleanPref(Constant.MIC_INPUT, true)
79-
chatView?.checkMicPref(utilModel.getBooleanPref(Constant.MIC_INPUT, true))
80-
chatView?.checkEnterKeyPref(utilModel.getBooleanPref(Constant.ENTER_SEND, false))
78+
micCheck = PrefManager.getBoolean(R.string.setting_mic_key, true)
79+
chatView?.checkMicPref(PrefManager.getBoolean(R.string.setting_mic_key, true))
80+
chatView?.checkEnterKeyPref(PrefManager.getBoolean(R.string.settings_enterPreference_key, false))
8181
}
8282

8383
override fun micCheck(): Boolean {
@@ -103,10 +103,10 @@ class ChatPresenter(chatActivity: ChatActivity) : IChatPresenter, IChatModel.OnR
103103
chatView?.initHotword()
104104
startHotwordDetection()
105105
} else {
106-
utilModel.putBooleanPref(Constant.HOTWORD_DETECTION, false)
107-
if (utilModel.getBooleanPref(Constant.NOTIFY_USER, true)) {
106+
utilModel.putBooleanPref(R.string.hotword_detection_key, false)
107+
if (utilModel.getBooleanPref(R.string.notify_user_key, true)) {
108108
chatView?.showToast(utilModel.getString(R.string.error_hotword))
109-
utilModel.putBooleanPref(Constant.NOTIFY_USER, false)
109+
utilModel.putBooleanPref(R.string.notify_user_key, false)
110110
}
111111
}
112112
}
@@ -117,7 +117,7 @@ class ChatPresenter(chatActivity: ChatActivity) : IChatPresenter, IChatModel.OnR
117117
}
118118

119119
override fun startHotwordDetection() {
120-
if (!isDetectionOn && utilModel.getBooleanPref(Constant.HOTWORD_DETECTION, false)) {
120+
if (!isDetectionOn && utilModel.getBooleanPref(R.string.hotword_detection_key, false)) {
121121
chatView?.startRecording()
122122
isDetectionOn = true
123123
}
@@ -138,10 +138,10 @@ class ChatPresenter(chatActivity: ChatActivity) : IChatPresenter, IChatModel.OnR
138138
override fun disableMicInput(boolean: Boolean) {
139139
if (boolean) {
140140
micCheck = false
141-
PrefManager.putBoolean(Constant.MIC_INPUT, false)
141+
PrefManager.putBoolean(R.string.setting_mic_key, false)
142142
} else {
143143
micCheck = utilModel.checkMicInput()
144-
PrefManager.putBoolean(Constant.MIC_INPUT, utilModel.checkMicInput())
144+
PrefManager.putBoolean(R.string.setting_mic_key, utilModel.checkMicInput())
145145
chatView?.checkMicPref(micCheck)
146146
}
147147
}
@@ -543,7 +543,7 @@ class ChatPresenter(chatActivity: ChatActivity) : IChatPresenter, IChatModel.OnR
543543
}
544544

545545
if (!(chatView?.checkPermission(permissionsRequired[1]) as Boolean)) {
546-
PrefManager.putBoolean(Constant.MIC_INPUT, utilModel.checkMicInput())
546+
PrefManager.putBoolean(R.string.setting_mic_key, utilModel.checkMicInput())
547547
}
548548
}
549549

app/src/main/java/org/fossasia/susi/ai/chat/adapters/viewholders/LinkPreviewViewHolder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,7 @@ private ResponseListener getResponseListener() {
310310
return new ResponseListener() {
311311
@Override
312312
public void onData(MetaData data) {
313-
if (!PrefManager.hasTokenExpired() || PrefManager.getBoolean(Constant.ANONYMOUS_LOGGED_IN, false)) {
313+
if (!PrefManager.hasTokenExpired() || PrefManager.getBoolean(R.string.anonymous_logged_in_key, false)) {
314314
realm.beginTransaction();
315315
Realm realm = Realm.getDefaultInstance();
316316
WebLink link = realm.createObject(WebLink.class);

app/src/main/java/org/fossasia/susi/ai/data/UtilModel.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.Manifest
44
import ai.kitt.snowboy.AppResCopy
55
import android.content.Context
66
import android.os.Build
7+
import org.fossasia.susi.ai.R
78
import org.fossasia.susi.ai.data.contract.IUtilModel
89
import org.fossasia.susi.ai.helper.*
910
import org.fossasia.susi.ai.rest.responses.susi.LoginResponse
@@ -24,11 +25,11 @@ class UtilModel(val context: Context) : IUtilModel {
2425
}
2526

2627
override fun saveAnonymity(isAnonymous: Boolean) {
27-
PrefManager.putBoolean(Constant.ANONYMOUS_LOGGED_IN, isAnonymous)
28+
PrefManager.putBoolean(R.string.anonymous_logged_in_key, isAnonymous)
2829
}
2930

3031
override fun getAnonymity(): Boolean {
31-
return PrefManager.getBoolean(Constant.ANONYMOUS_LOGGED_IN, false)
32+
return PrefManager.getBoolean(R.string.anonymous_logged_in_key, false)
3233
}
3334

3435
override fun saveEmail(email: String) {
@@ -53,7 +54,7 @@ class UtilModel(val context: Context) : IUtilModel {
5354
}
5455

5556
override fun setServer(isSusiServer: Boolean) {
56-
PrefManager.putBoolean(Constant.SUSI_SERVER, isSusiServer)
57+
PrefManager.putBoolean(R.string.susi_server_selected_key, isSusiServer)
5758
}
5859

5960
override fun setCustomURL(url: String) {
@@ -64,11 +65,11 @@ class UtilModel(val context: Context) : IUtilModel {
6465
return context.getString(id)
6566
}
6667

67-
override fun getBooleanPref(prefName: String, defaultValue: Boolean): Boolean {
68+
override fun getBooleanPref(prefName: Int, defaultValue: Boolean): Boolean {
6869
return PrefManager.getBoolean(prefName, defaultValue)
6970
}
7071

71-
override fun putBooleanPref(prefName: String, value: Boolean) {
72+
override fun putBooleanPref(prefName: Int, value: Boolean) {
7273
PrefManager.putBoolean(prefName, value)
7374
}
7475

@@ -98,4 +99,10 @@ class UtilModel(val context: Context) : IUtilModel {
9899
PrefManager.clearPrefs()
99100
}
100101

102+
override fun putBooleanPref(prefName: String, value: Boolean) {
103+
}
104+
105+
override fun getBooleanPref(prefName: String, defaultValue: Boolean): Boolean {
106+
return false
107+
}
101108
}

app/src/main/java/org/fossasia/susi/ai/data/contract/IUtilModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@ interface IUtilModel {
2020
fun setServer(isSusiServer: Boolean)
2121
fun setCustomURL(url: String)
2222
fun getString(id: Int): String
23+
fun getBooleanPref(prefName: Int, defaultValue: Boolean): Boolean
2324
fun getBooleanPref(prefName: String, defaultValue: Boolean): Boolean
2425
fun putBooleanPref(prefName: String, value: Boolean)
26+
fun putBooleanPref(prefName: Int, value: Boolean)
2527
fun checkMicInput(): Boolean
2628
fun copyAssetstoSD()
2729
fun permissionsToGet(): Array<String>

app/src/main/java/org/fossasia/susi/ai/helper/PrefManager.java

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.google.gson.Gson;
88

99
import org.fossasia.susi.ai.MainApplication;
10+
import org.fossasia.susi.ai.R;
1011
import org.fossasia.susi.ai.rest.clients.BaseUrl;
1112
import org.fossasia.susi.ai.rest.responses.susi.SusiBaseUrls;
1213

@@ -25,8 +26,7 @@ public class PrefManager {
2526
private static Gson gson = new Gson();
2627

2728
private static SharedPreferences getPreferences() {
28-
return PreferenceManager.getDefaultSharedPreferences(MainApplication.getInstance()
29-
.getApplicationContext());
29+
return PreferenceManager.getDefaultSharedPreferences(getContext());
3030
}
3131

3232
/**
@@ -107,8 +107,8 @@ public static void putFloat(String preferenceKey, float preferenceValue) {
107107
* @param preferenceDefaultValue the preference default value
108108
* @return the boolean
109109
*/
110-
public static boolean getBoolean(String preferenceKey, boolean preferenceDefaultValue) {
111-
return getPreferences().getBoolean(preferenceKey, preferenceDefaultValue);
110+
public static boolean getBoolean(int preferenceKey, boolean preferenceDefaultValue) {
111+
return getPreferences().getBoolean(getContext().getString(preferenceKey), preferenceDefaultValue);
112112
}
113113

114114
/**
@@ -117,8 +117,8 @@ public static boolean getBoolean(String preferenceKey, boolean preferenceDefault
117117
* @param preferenceKey the preference key
118118
* @param preferenceValue the preference value
119119
*/
120-
public static void putBoolean(String preferenceKey, boolean preferenceValue) {
121-
getPreferences().edit().putBoolean(preferenceKey, preferenceValue).apply();
120+
public static void putBoolean(int preferenceKey, boolean preferenceValue) {
121+
getPreferences().edit().putBoolean(getContext().getString(preferenceKey), preferenceValue).apply();
122122
}
123123

124124
/**
@@ -169,7 +169,7 @@ public static Set<String> getStringSet(String preferencesKey) {
169169
*/
170170
public static String getSusiRunningBaseUrl() {
171171

172-
if (getBoolean("is_susi_server_selected", true)) {
172+
if (getBoolean(R.string.susi_server_selected_key, true)) {
173173
return getString(SUSI_RUNNING_BASE_URL, BaseUrl.SUSI_DEFAULT_BASE_URL);
174174
}
175175
return getString("custom_server", "null");
@@ -238,7 +238,7 @@ public static void clearToken() {
238238
* @return the boolean
239239
*/
240240
public static boolean checkSpeechOutputPref() {
241-
return PrefManager.getBoolean(Constant.SPEECH_OUTPUT, true);
241+
return PrefManager.getBoolean(R.string.settings_speechPreference_key, true);
242242
}
243243

244244
/**
@@ -247,7 +247,7 @@ public static boolean checkSpeechOutputPref() {
247247
* @return the boolean
248248
*/
249249
public static boolean checkSpeechAlwaysPref() {
250-
return PrefManager.getBoolean(Constant.SPEECH_ALWAYS, false);
250+
return PrefManager.getBoolean(R.string.settings_speechAlways_key, false);
251251
}
252252

253253
/**
@@ -256,7 +256,7 @@ public static boolean checkSpeechAlwaysPref() {
256256
* @return the boolean
257257
*/
258258
public static boolean checkHotwordPref() {
259-
return PrefManager.getBoolean(Constant.HOTWORD_DETECTION, false);
259+
return PrefManager.getBoolean(R.string.hotword_detection_key, false);
260260
}
261261

262262
/**
@@ -267,6 +267,10 @@ public static boolean checkHotwordPref() {
267267
public static boolean checkMicInput(Context context) {
268268
return MediaUtil.INSTANCE.isAvailableForVoiceInput(context);
269269
}
270+
271+
private static Context getContext() {
272+
return MainApplication.getInstance().getApplicationContext();
273+
}
270274
}
271275

272276

app/src/main/java/org/fossasia/susi/ai/login/LoginActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class LoginActivity : AppCompatActivity(), ILoginView {
3737
super.onCreate(savedInstanceState)
3838
setContentView(R.layout.activity_login)
3939

40-
PrefManager.putBoolean("activity_executed", true)
40+
PrefManager.putBoolean(R.string.activity_executed_key, true)
4141

4242
if (savedInstanceState != null) {
4343
email.editText?.setText(savedInstanceState.getCharSequenceArray(Constant.SAVED_STATES)[0].toString())

app/src/main/java/org/fossasia/susi/ai/login/LoginPresenter.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,9 @@ class LoginPresenter(loginActivity: LoginActivity) : ILoginPresenter, ILoginMode
154154
val settings: Settings? = response.body().settings
155155

156156
if (settings != null) {
157-
utilModel.putBooleanPref(Constant.ENTER_SEND, settings.enterSend)
158-
utilModel.putBooleanPref(Constant.SPEECH_ALWAYS, settings.speechAlways)
159-
utilModel.putBooleanPref(Constant.SPEECH_OUTPUT, settings.speechOutput)
157+
utilModel.putBooleanPref(R.string.settings_enterPreference_key, settings.enterSend)
158+
utilModel.putBooleanPref(R.string.settings_speechAlways_key, settings.speechAlways)
159+
utilModel.putBooleanPref(R.string.settings_speechPreference_key, settings.speechOutput)
160160
if (settings.language == "default") {
161161
utilModel.setLanguage("en")
162162
} else {

app/src/main/java/org/fossasia/susi/ai/login/WelcomeActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class WelcomeActivity extends AppCompatActivity {
3131
protected void onCreate(Bundle savedInstanceState) {
3232
super.onCreate(savedInstanceState);
3333

34-
if (PrefManager.getBoolean("activity_executed", false)) {
34+
if (PrefManager.getBoolean(R.string.activity_executed_key, false)) {
3535
Intent intent = new Intent(this, LoginActivity.class);
3636
startActivity(intent);
3737
finish();

app/src/main/java/org/fossasia/susi/ai/skills/settings/ChatSettingsFragment.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,14 @@ class ChatSettingsFragment : PreferenceFragmentCompat(), ISettingsView {
7777

7878
rate = preferenceManager.findPreference(Constant.RATE)
7979
server = preferenceManager.findPreference(Constant.SELECT_SERVER)
80-
micSettings = preferenceManager.findPreference(Constant.MIC_INPUT)
80+
micSettings = preferenceManager.findPreference(getString(R.string.setting_mic_key))
8181
hotwordSettings = preferenceManager.findPreference(Constant.HOTWORD_DETECTION)
8282
share = preferenceManager.findPreference(Constant.SHARE)
8383
loginLogout = preferenceManager.findPreference(Constant.LOGIN_LOGOUT)
8484
resetPassword = preferenceManager.findPreference(Constant.RESET_PASSWORD)
85-
enterSend = preferenceManager.findPreference(Constant.ENTER_SEND)
86-
speechOutput = preferenceManager.findPreference(Constant.SPEECH_OUTPUT)
87-
speechAlways = preferenceManager.findPreference(Constant.SPEECH_ALWAYS)
85+
enterSend = preferenceManager.findPreference(getString(R.string.settings_enterPreference_key))
86+
speechOutput = preferenceManager.findPreference(getString(R.string.settings_speechPreference_key))
87+
speechAlways = preferenceManager.findPreference(getString(R.string.settings_speechAlways_key))
8888
displayEmail = preferenceManager.findPreference("display_email")
8989
querylanguage = preferenceManager.findPreference(Constant.LANG_SELECT) as ListPreference
9090
deviceName = preferenceManager.findPreference(Constant.DEVICE)
@@ -199,22 +199,22 @@ class ChatSettingsFragment : PreferenceFragmentCompat(), ISettingsView {
199199

200200
if (!settingsPresenter.getAnonymity()) {
201201
micSettings.setOnPreferenceClickListener {
202-
settingsPresenter.sendSetting(Constant.MIC_INPUT, (PrefManager.getBoolean(Constant.MIC_INPUT, false)).toString(), 1)
202+
settingsPresenter.sendSetting(getString(R.string.setting_mic_key), (PrefManager.getBoolean(R.string.setting_mic_key, false)).toString(), 1)
203203
true
204204
}
205205

206206
enterSend.setOnPreferenceChangeListener { _, newValue ->
207-
settingsPresenter.sendSetting(Constant.ENTER_SEND, newValue.toString(), 1)
207+
settingsPresenter.sendSetting(getString(R.string.settings_enterPreference_key), newValue.toString(), 1)
208208
true
209209
}
210210

211211
speechAlways.setOnPreferenceChangeListener { _, newValue ->
212-
settingsPresenter.sendSetting(Constant.SPEECH_ALWAYS, newValue.toString(), 1)
212+
settingsPresenter.sendSetting(getString(R.string.settings_speechAlways_key), newValue.toString(), 1)
213213
true
214214
}
215215

216216
speechOutput.setOnPreferenceChangeListener { _, newValue ->
217-
settingsPresenter.sendSetting(Constant.SPEECH_OUTPUT, newValue.toString(), 1)
217+
settingsPresenter.sendSetting(getString(R.string.settings_speechPreference_key), newValue.toString(), 1)
218218
true
219219
}
220220
}
@@ -251,7 +251,7 @@ class ChatSettingsFragment : PreferenceFragmentCompat(), ISettingsView {
251251
inputUrl = promptsView?.findViewById(R.id.input_url) as TextInputLayout
252252
val inputUrlText = promptsView.findViewById(R.id.input_url_text) as TextInputEditText
253253
val customerServer = promptsView.findViewById(R.id.customer_server) as AppCompatCheckBox
254-
if (PrefManager.getBoolean(Constant.SUSI_SERVER, true)) {
254+
if (PrefManager.getBoolean(R.string.susi_server_selected_key, true)) {
255255
inputUrl.visibility = View.GONE
256256
flag = false
257257
} else {

app/src/main/java/org/fossasia/susi/ai/skills/settings/SettingsPresenter.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.fossasia.susi.ai.skills.settings
22

3+
import org.fossasia.susi.ai.R
34
import org.fossasia.susi.ai.data.SettingModel
45
import org.fossasia.susi.ai.data.UtilModel
56
import org.fossasia.susi.ai.data.contract.ISettingModel
@@ -35,10 +36,10 @@ class SettingsPresenter(skillsActivity: SkillsActivity) : ISettingsPresenter, IS
3536
override fun enableMic(): Boolean {
3637
return if ((settingView?.micPermission()) as Boolean) {
3738
if (!utilModel.checkMicInput())
38-
utilModel.putBooleanPref(Constant.MIC_INPUT, false)
39+
utilModel.putBooleanPref(R.string.setting_mic_key, false)
3940
utilModel.checkMicInput()
4041
} else {
41-
utilModel.putBooleanPref(Constant.MIC_INPUT, false)
42+
utilModel.putBooleanPref(R.string.setting_mic_key, false)
4243
false
4344
}
4445
}
@@ -48,11 +49,11 @@ class SettingsPresenter(skillsActivity: SkillsActivity) : ISettingsPresenter, IS
4849
return if (utilModel.checkMicInput() && utilModel.isArmDevice()) {
4950
true
5051
} else {
51-
utilModel.putBooleanPref(Constant.HOTWORD_DETECTION, false)
52+
utilModel.putBooleanPref(R.string.hotword_detection_key, false)
5253
false
5354
}
5455
} else {
55-
utilModel.putBooleanPref(Constant.HOTWORD_DETECTION, false)
56+
utilModel.putBooleanPref(R.string.hotword_detection_key, false)
5657
false
5758
}
5859
}
@@ -140,7 +141,7 @@ class SettingsPresenter(skillsActivity: SkillsActivity) : ISettingsPresenter, IS
140141
return
141142
}
142143
} else {
143-
utilModel.putBooleanPref(Constant.SUSI_SERVER, true)
144+
utilModel.putBooleanPref(R.string.susi_server_selected_key, true)
144145
}
145146
settingView?.setServerSuccessful()
146147
}

app/src/main/res/values-de/strings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@
3636
<string name="password_invalid">Das angegebene Passwort ist nicht korrek. Bitte versuche es erneut.</string>
3737
<string name="forgot_password_mail_sent">E-Mail gesendet</string>
3838

39+
<string name="activity_executed_key" translatable="false">activity_executed</string>
40+
<string name="anonymous_logged_in_key" translatable="false">anonymous_logged_in</string>
41+
<string name="susi_server_selected_key" translatable="false">is_susi_server_selected</string>
42+
<string name="hotword_detection_key" translatable="false">hotword_detection</string>
43+
<string name="notify_user_key" translatable="false">notify_user</string>
44+
3945
<string name="websearchnull">Keine Ergebnisse gefunden</string>
4046
<string name="error_email">Diese E-Mail Adresse ist bereits vergeben</string>
4147
<string name="error_msg">Bitte verwenden Sie die vergessen Passwort, wenn Sie sich nicht an Ihr Passwort erinnern</string>

app/src/main/res/values-es/strings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@
2727
<string name="hotword_success">Hotword detectado</string>
2828
<string name="custom_server">servidor personalizado</string>
2929

30+
<string name="activity_executed_key" translatable="false">activity_executed</string>
31+
<string name="anonymous_logged_in_key" translatable="false">anonymous_logged_in</string>
32+
<string name="susi_server_selected_key" translatable="false">is_susi_server_selected</string>
33+
<string name="hotword_detection_key" translatable="false">hotword_detection</string>
34+
<string name="notify_user_key" translatable="false">notify_user</string>
35+
3036
<string name="signup">Gracias por registrarte</string>
3137
<string name="signup_msg">Hemos enviado un correo electrónico a la dirección que proporcionó. Por favor, utilice el
3238
Enlace de confirmación para activar su cuenta e iniciar sesión en susi.</string>

0 commit comments

Comments
 (0)