Language switch improvement. Small fixes.

This commit is contained in:
RIP95 2017-03-07 02:38:18 +03:00
parent bb96db7093
commit 4dc64b4952
6 changed files with 117 additions and 25 deletions

View File

@ -10,7 +10,9 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<activity
android:name=".MainActivity"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>

View File

@ -0,0 +1,59 @@
package com.example.yink.amadeus;
/* Solution: http://stackoverflow.com/a/40704077 */
import android.annotation.TargetApi;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Build;
import android.preference.PreferenceManager;
import android.util.DisplayMetrics;
import java.util.Locale;
public class LangContextWrapper extends ContextWrapper {
public LangContextWrapper(Context base) {
super(base);
}
@SuppressWarnings("deprecation")
public static ContextWrapper wrap(Context context) {
SharedPreferences sharedPreferences;
Configuration config = context.getResources().getConfiguration();
String lang = "en";
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
if (sharedPreferences.getBoolean("lang", true)) {
lang = "ja";
}
Locale locale = new Locale(lang);
Locale.setDefault(locale);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
setSystemLocale(config, locale);
} else {
setSystemLocaleLegacy(config, locale);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
context = context.createConfigurationContext(config);
} else {
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
}
return new LangContextWrapper(context);
}
@SuppressWarnings("deprecation")
public static void setSystemLocaleLegacy(Configuration config, Locale locale){
config.locale = locale;
}
@TargetApi(Build.VERSION_CODES.N)
public static void setSystemLocale(Configuration config, Locale locale){
config.setLocale(locale);
}
}

View File

@ -8,6 +8,7 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.AnimationDrawable;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
@ -76,11 +77,6 @@ public class LaunchActivity extends AppCompatActivity {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
if (sharedPreferences.getBoolean("lang", true)) {
setLocale("ja");
} else {
setLocale("en");
}
Intent intent = new Intent(LaunchActivity.this,MainActivity.class);
startActivity(intent);
}
@ -113,6 +109,11 @@ public class LaunchActivity extends AppCompatActivity {
});
}
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LangContextWrapper.wrap(newBase));
}
@Override
protected void onResume() {
if (isPressed) {
@ -128,14 +129,22 @@ public class LaunchActivity extends AppCompatActivity {
super.onResume();
}
private void setLocale(String lang) {
@SuppressWarnings("deprecation")
private void setLocale(Context context, String lang) {
Configuration config = getBaseContext().getResources().getConfiguration();
Locale myLocale = new Locale(lang);
if (lang.equals("en"))
myLocale = Locale.getDefault();
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
config.setLocale(myLocale);
} else {
config.locale = myLocale;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
context = context.createConfigurationContext(config);
} else {
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
}
}
}

View File

@ -5,6 +5,7 @@ package com.example.yink.amadeus;
*/
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
@ -116,6 +117,11 @@ public class MainActivity extends AppCompatActivity {
});
}
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(LangContextWrapper.wrap(newBase));
}
@Override
protected void onDestroy() {
if (sr != null)
@ -143,7 +149,7 @@ public class MainActivity extends AppCompatActivity {
if (sharedPreferences.getBoolean("lang", true)) {
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ja-JP");
} else {
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-EN");
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
}
sr.startListening(intent);
@ -254,7 +260,7 @@ public class MainActivity extends AppCompatActivity {
speak(voiceLines.get(9));
break;
case 1:
speak(voiceLines.get(42));
speak(voiceLines.get(43));
break;
}
} else {
@ -277,17 +283,28 @@ public class MainActivity extends AppCompatActivity {
break;
}
}
} else if (input.contains(getString(R.string.the_zombie)) || input.contains(getString(R.string.celeb17))) {
} else if (input.contains(getString(R.string.the_zombie))
|| input.contains(getString(R.string.celeb17))) {
speak(voiceLines.get(32));
} else if (input.contains(getString(R.string.atchannel)) || input.contains(getString(R.string.kurigohan)) || input.contains(getString(R.string.kamehameha))) {
} else if (input.contains(getString(R.string.atchannel))
|| input.contains(getString(R.string.kurigohan))
|| input.contains(getString(R.string.kamehameha))) {
speak(voiceLines.get(30 + randomGen.nextInt(2)));
} else if (input.contains(getString(R.string.salieri)) || input.contains(getString(R.string.maho)) || input.contains(getString(R.string.hiyajo))) {
} else if (input.contains(getString(R.string.salieri))
|| input.contains(getString(R.string.maho))
|| input.contains(getString(R.string.hiyajo))) {
speak(voiceLines.get(26 + randomGen.nextInt(4)));
} else if (input.contains(getString(R.string.time_machine)) || input.contains(getString(R.string.cern)) || input.contains(getString(R.string.time_travel))) {
} else if (input.contains(getString(R.string.time_machine))
|| input.contains(getString(R.string.cern))
|| input.contains(getString(R.string.time_travel))) {
speak(voiceLines.get(33 + randomGen.nextInt(5)));
} else if (input.contains(getString(R.string.memory)) || input.contains(getString(R.string.amadeus)) || input.contains(getString(R.string.science))) {
} else if (input.contains(getString(R.string.memory))
|| input.contains(getString(R.string.amadeus))
|| input.contains(getString(R.string.science))) {
speak(voiceLines.get(38 + randomGen.nextInt(5)));
} else if (input.contains(getString(R.string.hello)) || input.contains(getString(R.string.good_morning)) || input.contains(getString(R.string.konnichiwa))
} else if (input.contains(getString(R.string.hello))
|| input.contains(getString(R.string.good_morning))
|| input.contains(getString(R.string.konnichiwa))
|| input.contains(getString(R.string.good_evening))) {
switch (randomGen.nextInt(4)) {
case 0:
@ -300,10 +317,14 @@ public class MainActivity extends AppCompatActivity {
speak(voiceLines.get(25));
break;
case 3:
speak(voiceLines.get(43));
speak(voiceLines.get(1));
break;
}
} else if (input.contains(getString(R.string.nice_body)) || input.contains(getString(R.string.hot)) || input.contains(getString(R.string.sexy)) || input.contains(getString(R.string.boobies)) || input.contains(getString(R.string.oppai))) {
} else if (input.contains(getString(R.string.nice_body))
|| input.contains(getString(R.string.hot))
|| input.contains(getString(R.string.sexy))
|| input.contains(getString(R.string.boobies))
|| input.contains(getString(R.string.oppai))) {
switch (randomGen.nextInt(3)) {
case 0:
speak(voiceLines.get(2));

View File

@ -3,6 +3,7 @@
<string name="call">Connect to Kurisu?</string>
<string name="connecting">Connecting…</string>
<string name="disconnected">Disconnected.</string>
<string name="google_app_error">Google App wasn\'t detected.</string>
<integer name="duration">40</integer>
<string name="line_hello">Hello.</string>

View File

@ -74,7 +74,7 @@
<string name="science">science</string>
<string name="hello">hello</string>
<string name="good_morning">good morning</string>
<string name="konnichiwa">konnichiwa</string>
<string name="konnichiwa">good afternoon</string>
<string name="good_evening">good evening</string>
<string name="nice_body">nice body</string>
<string name="hot">hot</string>