From 5c2178ab049d7294f1ac7b352babe1c7ca0d2c4c Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 14:39:44 +0800 Subject: [PATCH 01/21] ignore .idea dir --- .gitignore | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index 7cbf4f1..04c4bdb 100644 --- a/.gitignore +++ b/.gitignore @@ -15,19 +15,7 @@ local.properties .signing/ # User-specific configurations -.idea/gradle.xml -.idea/runConfigurations.xml -.idea/libraries/ -.idea/workspace.xml -.idea/tasks.xml -.idea/.name -.idea/compiler.xml -.idea/copyright/profiles_settings.xml -.idea/encodings.xml -.idea/misc.xml -.idea/modules.xml -.idea/scopes/scope_settings.xml -.idea/vcs.xml +.idea *.iml # OS-specific files @@ -37,4 +25,4 @@ local.properties .Spotlight-V100 .Trashes ehthumbs.db -Thumbs.db \ No newline at end of file +Thumbs.db From 1b2c74bad7c681823d8c422ad62b3bbeaa6448ca Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 14:44:12 +0800 Subject: [PATCH 02/21] android studio 3.1.2 --- app/build.gradle | 12 ++++++------ build.gradle | 3 ++- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0ce9595..dabc505 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 - buildToolsVersion '26.0.2' + compileSdkVersion 27 + buildToolsVersion '27.0.3' defaultConfig { applicationId "com.example.yink.amadeus.kurisutina" - minSdkVersion 9 - targetSdkVersion 20 + minSdkVersion 14 + targetSdkVersion 27 versionCode 1 versionName "0.9.6-alpha.5" } @@ -21,6 +21,6 @@ android { } dependencies { - compile fileTree(include: ['*.jar'], dir: 'libs') - compile 'com.android.support:appcompat-v7:25.3.0' + implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:appcompat-v7:27.1.1' } diff --git a/build.gradle b/build.gradle index f209f27..ec95872 100644 --- a/build.gradle +++ b/build.gradle @@ -7,9 +7,10 @@ buildscript { url 'https://maven.google.com/' name 'Google' } + google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.1.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2ee8382..c2c8121 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Nov 02 16:31:21 CET 2017 +#Thu May 03 14:41:59 CST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip From f53a387ed95a663b92e8d863186bb47cb061e284 Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 15:01:45 +0800 Subject: [PATCH 03/21] update code style --- .../java/com/example/yink/amadeus/Alarm.java | 11 ++++++++--- .../com/example/yink/amadeus/AlarmActivity.java | 4 ++-- .../example/yink/amadeus/AlarmBootReceiver.java | 11 +++++++---- .../java/com/example/yink/amadeus/Amadeus.java | 8 +++++--- .../com/example/yink/amadeus/LaunchActivity.java | 16 +++++++++------- .../com/example/yink/amadeus/MainActivity.java | 13 ++++++++----- .../example/yink/amadeus/SettingsActivity.java | 4 +--- 7 files changed, 40 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/example/yink/amadeus/Alarm.java b/app/src/main/java/com/example/yink/amadeus/Alarm.java index 9af4804..459fb8a 100644 --- a/app/src/main/java/com/example/yink/amadeus/Alarm.java +++ b/app/src/main/java/com/example/yink/amadeus/Alarm.java @@ -33,8 +33,10 @@ static void start(Context context, int ringtone) { if (settings.getBoolean("vibrate", false)) { v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); - long[] pattern = {500, 2000}; - v.vibrate(pattern, 0); + if (v != null) { + long[] pattern = {500, 2000}; + v.vibrate(pattern, 0); + } } m = MediaPlayer.create(context, ringtone); @@ -86,11 +88,14 @@ private static void acquireCpuWakeLock(Context context) { PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + if (pm == null) { + return; + } sCpuWakeLock = pm.newWakeLock( PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, TAG); - sCpuWakeLock.acquire(); + sCpuWakeLock.acquire(10*60*1000L /*10 minutes*/); } private static void releaseCpuLock() { diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java b/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java index 1555893..e790b08 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java @@ -32,8 +32,8 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_alarm); settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); - alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker); - alarmToggle = (ToggleButton) findViewById(R.id.alarmToggle); + alarmTimePicker = findViewById(R.id.alarmTimePicker); + alarmToggle = findViewById(R.id.alarmToggle); alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); pendingIntent = PendingIntent.getBroadcast(this, Alarm.ALARM_ID, new Intent(this, AlarmReceiver.class), PendingIntent.FLAG_CANCEL_CURRENT); diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java index d3d0349..f602852 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java @@ -26,11 +26,14 @@ public void onReceive(Context context, Intent intent) { PendingIntent pendingIntent = PendingIntent.getBroadcast(context, Alarm.ALARM_ID, new Intent(context, AlarmReceiver.class), 0); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, settings.getLong("alarm_time", 0), pendingIntent); - } else { - alarmManager.set(AlarmManager.RTC_WAKEUP, settings.getLong("alarm_time", 0), pendingIntent); + if (alarmManager != null) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, settings.getLong("alarm_time", 0), pendingIntent); + } else { + alarmManager.set(AlarmManager.RTC_WAKEUP, settings.getLong("alarm_time", 0), pendingIntent); + } } + Log.d(TAG, "Alarm has been recovered"); } diff --git a/app/src/main/java/com/example/yink/amadeus/Amadeus.java b/app/src/main/java/com/example/yink/amadeus/Amadeus.java index 2d52bcc..dc9a9bc 100644 --- a/app/src/main/java/com/example/yink/amadeus/Amadeus.java +++ b/app/src/main/java/com/example/yink/amadeus/Amadeus.java @@ -338,18 +338,20 @@ private static class Bundle implements Iterable { private T[] list; - public Bundle(T... list) { + @SafeVarargs + private Bundle(T... list) { this.list = list; } - public T[] toArray() { + private T[] toArray() { return list; } @NonNull @Override public Iterator iterator() { - Iterator iterator = new Iterator() { + Iterator iterator; + iterator = new Iterator() { int index = 0; @Override diff --git a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java index 14c62b1..7006af5 100644 --- a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java @@ -22,6 +22,8 @@ public class LaunchActivity extends AppCompatActivity { + private static final String GOOGLE_PACKAGE_NAME = "com.google.android.googlequicksearchbox"; + private ImageView connect, cancel, logo; private TextView status; private Boolean isPressed = false; @@ -56,16 +58,16 @@ private boolean isAppInstalled(Context context, String packageName) { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_launch); - connect = (ImageView) findViewById(R.id.imageView_connect); - cancel = (ImageView) findViewById(R.id.imageView_cancel); - status = (TextView) findViewById(R.id.textView_call); - logo = (ImageView) findViewById(R.id.imageView_logo); + connect = findViewById(R.id.imageView_connect); + cancel = findViewById(R.id.imageView_cancel); + status = findViewById(R.id.textView_call); + logo = findViewById(R.id.imageView_logo); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); final Window win = getWindow(); aniHandle.post(aniRunnable); - if (!isAppInstalled(LaunchActivity.this, "com.google.android.googlequicksearchbox")) { + if (!isAppInstalled(LaunchActivity.this, GOOGLE_PACKAGE_NAME)) { status.setText(R.string.google_app_error); } @@ -82,7 +84,7 @@ protected void onCreate(Bundle savedInstanceState) { connect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - if (!isPressed && isAppInstalled(LaunchActivity.this, "com.google.android.googlequicksearchbox")) { + if (!isPressed && isAppInstalled(LaunchActivity.this, GOOGLE_PACKAGE_NAME)) { isPressed = true; connect.setImageResource(R.drawable.connect_select); @@ -169,7 +171,7 @@ protected void onResume() { if (isPressed) { status.setText(R.string.disconnected); - } else if (!isAppInstalled(LaunchActivity.this, "com.google.android.googlequicksearchbox")) { + } else if (!isAppInstalled(LaunchActivity.this, GOOGLE_PACKAGE_NAME)) { status.setText(R.string.google_app_error); } else if (Alarm.isPlaying()) { status.setText(R.string.incoming_call); diff --git a/app/src/main/java/com/example/yink/amadeus/MainActivity.java b/app/src/main/java/com/example/yink/amadeus/MainActivity.java index 8f35b5e..1894950 100644 --- a/app/src/main/java/com/example/yink/amadeus/MainActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/MainActivity.java @@ -43,8 +43,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); - ImageView kurisu = (ImageView) findViewById(R.id.imageView_kurisu); - ImageView subtitlesBackground = (ImageView) findViewById(R.id.imageView_subtitles); + ImageView kurisu = findViewById(R.id.imageView_kurisu); + ImageView subtitlesBackground = findViewById(R.id.imageView_subtitles); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); recogLang = settings.getString("recognition_lang", "ja-JP"); contextLang = recogLang.split("-"); @@ -203,14 +203,17 @@ public void onError(int error) { } public void onResults(Bundle results) { String input = ""; - String debug = ""; + StringBuilder debug = new StringBuilder(); Log.d(TAG, "Received results"); ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); + if (data == null) { + return; + } for (Object word: data) { - debug += word + "\n"; + debug.append(word).append("\n"); } - Log.d(TAG, debug); + Log.d(TAG, debug.toString()); input += data.get(0); /* TODO: Japanese doesn't split the words. Sigh. */ diff --git a/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java b/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java index 17f4490..60f86e4 100644 --- a/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java @@ -13,9 +13,7 @@ public class SettingsActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); - } + getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); } @Override From 26fdfd9eb999058850ed82e1bc9a5ee31a8fd28b Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 15:42:01 +0800 Subject: [PATCH 04/21] fix notification issue for Oreo --- .../java/com/example/yink/amadeus/Alarm.java | 20 ++++++++++++------- .../example/yink/amadeus/AlarmService.java | 18 ++++++++++++++--- .../example/yink/amadeus/LaunchActivity.java | 16 ++++++++++++--- app/src/main/res/layout/activity_alarm.xml | 2 +- app/src/main/res/values/strings.xml | 2 ++ 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/example/yink/amadeus/Alarm.java b/app/src/main/java/com/example/yink/amadeus/Alarm.java index 459fb8a..f1e654f 100644 --- a/app/src/main/java/com/example/yink/amadeus/Alarm.java +++ b/app/src/main/java/com/example/yink/amadeus/Alarm.java @@ -56,17 +56,23 @@ static void cancel(Context context) { if (isPlaying) { settings = PreferenceManager.getDefaultSharedPreferences(context); - AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - Intent alarmIntent = new Intent(context, AlarmReceiver.class); - final PendingIntent pendingIntent = PendingIntent.getBroadcast(context, ALARM_ID, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); - NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); - SharedPreferences.Editor editor = settings.edit(); editor.putBoolean("alarm_toggle", false); editor.apply(); + + Intent alarmIntent = new Intent(context, AlarmReceiver.class); + final PendingIntent pendingIntent = + PendingIntent.getBroadcast(context, ALARM_ID, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); + + AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); + if (alarmManager != null) { + alarmManager.cancel(pendingIntent); + } + NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + if (notificationManager != null) { + notificationManager.cancel(ALARM_NOTIFICATION_ID); + } m.release(); - notificationManager.cancel(ALARM_NOTIFICATION_ID); - alarmManager.cancel(pendingIntent); releaseCpuLock(); isPlaying = false; if (v != null) { diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmService.java b/app/src/main/java/com/example/yink/amadeus/AlarmService.java index ca5ef4d..47eba60 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmService.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmService.java @@ -1,14 +1,18 @@ package com.example.yink.amadeus; import android.app.IntentService; +import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.support.v4.app.NotificationCompat; public class AlarmService extends IntentService { + private static final String CHANNEL_ID = "amadeus_channel_alarm"; + public AlarmService() { super("AlarmService"); } @@ -25,13 +29,21 @@ private void sendNotification(String msg) { NotificationManager alarmNotificationManager = (NotificationManager) this .getSystemService(Context.NOTIFICATION_SERVICE); + if (alarmNotificationManager == null) { + return; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + alarmNotificationManager.createNotificationChannel(new NotificationChannel(CHANNEL_ID, getString(R.string.pref_alarm), NotificationManager.IMPORTANCE_LOW)); + } + PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, LaunchActivity.class), 0); - NotificationCompat.Builder alarmNotificationBuilder = new NotificationCompat.Builder( - this).setContentTitle(getString(R.string.app_name)).setSmallIcon(R.drawable.incoming_call) + NotificationCompat.Builder alarmNotificationBuilder = new NotificationCompat.Builder(this, CHANNEL_ID) + .setContentTitle(getString(R.string.app_name)).setSmallIcon(R.drawable.incoming_call) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) - .setContentText(msg); + .setContentText(msg) + .setChannelId(CHANNEL_ID); alarmNotificationBuilder.setContentIntent(contentIntent); alarmNotificationManager.notify(Alarm.ALARM_NOTIFICATION_ID, alarmNotificationBuilder.build()); diff --git a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java index 7006af5..4c26ae7 100644 --- a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java @@ -1,5 +1,6 @@ package com.example.yink.amadeus; +import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; @@ -7,6 +8,7 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.media.MediaPlayer; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; @@ -23,6 +25,7 @@ public class LaunchActivity extends AppCompatActivity { private static final String GOOGLE_PACKAGE_NAME = "com.google.android.googlequicksearchbox"; + private static final String CHANNEL_ID = "amadeus_channel_icon"; private ImageView connect, cancel, logo; private TextView status; @@ -185,17 +188,24 @@ protected void onResume() { } private void showNotification() { - NotificationCompat.Builder builder = new NotificationCompat.Builder(LaunchActivity.this) + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + if (notificationManager == null) { + return; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + notificationManager.createNotificationChannel(new NotificationChannel(CHANNEL_ID, getString(R.string.pref_notification), NotificationManager.IMPORTANCE_LOW)); + } + NotificationCompat.Builder builder = new NotificationCompat.Builder(LaunchActivity.this, CHANNEL_ID) .setSmallIcon(R.drawable.xp2) .setContentTitle(getString(R.string.app_name)) - .setContentText(getString(R.string.notification_text)); + .setContentText(getString(R.string.notification_text)) + .setChannelId(CHANNEL_ID); Intent resultIntent = new Intent(LaunchActivity.this, MainActivity.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(LaunchActivity.this); stackBuilder.addParentStack(MainActivity.class); stackBuilder.addNextIntent(resultIntent); PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(resultPendingIntent); - NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, builder.build()); } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_alarm.xml b/app/src/main/res/layout/activity_alarm.xml index 46ee3dd..07e7938 100644 --- a/app/src/main/res/layout/activity_alarm.xml +++ b/app/src/main/res/layout/activity_alarm.xml @@ -14,7 +14,7 @@ Shows subtitles for Amadeus\' answers Show "XP"-Icon Shows Icon in the notification bar (app restart required) + Alarm Alarm settings Alarm setup Alarm ringtone @@ -111,4 +112,5 @@ antimatter assistant open + Alarm On/Off \ No newline at end of file From 7b3d20dbbcf1d98db6733f1b0bd6ec50afd48195 Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 15:47:16 +0800 Subject: [PATCH 05/21] update Chinese --- app/src/main/res/values-zh-rCN/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 3bf0178..1eafca3 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -18,8 +18,8 @@ 选择界面语言 (需重启应用) 显示字幕 显示Amadeus说的话 - 在状态栏显示 - 在状态栏显示提示 (需重启应用) + 显示 “XP” 图标 + 在状态栏显示 “XP” 图标 (需重启应用) 闹钟设置 设置时间 闹钟铃声 From eb11eea5caaff43da7459325e875090ab5a7c1d5 Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 16:43:00 +0800 Subject: [PATCH 06/21] clean and fix code --- app/src/main/AndroidManifest.xml | 13 +++++++++---- .../com/example/yink/amadeus/AlarmActivity.java | 2 +- .../example/yink/amadeus/AlarmBootReceiver.java | 2 +- .../com/example/yink/amadeus/AlarmReceiver.java | 2 +- .../java/com/example/yink/amadeus/Amadeus.java | 12 ++++++------ .../com/example/yink/amadeus/LaunchActivity.java | 4 ++-- .../com/example/yink/amadeus/MainActivity.java | 6 +++--- .../example/yink/amadeus/SettingsActivity.java | 9 ++++----- .../example/yink/amadeus/SettingsFragment.java | 5 ----- .../java/com/example/yink/amadeus/VoiceLine.java | 2 +- app/src/main/res/layout/activity_launch.xml | 13 +++++++++---- app/src/main/res/layout/activity_main.xml | 16 +++++++++++----- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-v14/styles.xml | 10 ---------- app/src/main/res/values-zh-rCN/strings.xml | 6 +++--- app/src/main/res/values/styles.xml | 1 - 16 files changed, 52 insertions(+), 53 deletions(-) delete mode 100644 app/src/main/res/values-v14/styles.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55d074b..aca0af9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ @@ -8,15 +9,18 @@ + android:theme="@style/AppTheme" + android:allowBackup="true" + android:fullBackupContent="true" + tools:ignore="GoogleAppIndexingWarning"> + android:screenOrientation="portrait" + tools:ignore="UnusedAttribute"> @@ -37,7 +41,8 @@ android:name=".SettingsActivity" android:label="Preferences" android:parentActivityName=".LaunchActivity" - android:theme="@style/PreferenceTheme"> + android:theme="@style/PreferenceTheme" + tools:ignore="UnusedAttribute"> diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java b/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java index e790b08..f0dcb9b 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java @@ -19,7 +19,7 @@ public class AlarmActivity extends AppCompatActivity { - private final String TAG = "AlarmActivity"; + private static final String TAG = "AlarmActivity"; private AlarmManager alarmManager; private PendingIntent pendingIntent; diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java index f602852..c1e499c 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java @@ -12,7 +12,7 @@ public class AlarmBootReceiver extends WakefulBroadcastReceiver { - final String TAG = "AlarmBootReceiver"; + private static final String TAG = "AlarmBootReceiver"; @Override public void onReceive(Context context, Intent intent) { diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmReceiver.java b/app/src/main/java/com/example/yink/amadeus/AlarmReceiver.java index 0a995c1..97d4584 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmReceiver.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmReceiver.java @@ -10,7 +10,7 @@ public class AlarmReceiver extends BroadcastReceiver { - private final String TAG = "AlarmReceiver"; + private static final String TAG = "AlarmReceiver"; @Override public void onReceive(Context context, Intent intent) { diff --git a/app/src/main/java/com/example/yink/amadeus/Amadeus.java b/app/src/main/java/com/example/yink/amadeus/Amadeus.java index dc9a9bc..1e81702 100644 --- a/app/src/main/java/com/example/yink/amadeus/Amadeus.java +++ b/app/src/main/java/com/example/yink/amadeus/Amadeus.java @@ -28,10 +28,10 @@ class Amadeus { static Boolean isSpeaking = false; static Boolean isLoop = false; static MediaPlayer m; - private static String TAG = "Amadeus"; + private static final String TAG = "Amadeus"; private static int shaman_girls = -1; - private static VoiceLine[] voiceLines = VoiceLine.Line.getLines(); - private static HashMap, Bundle> responseInputMap = new HashMap<>(); + private static final VoiceLine[] voiceLines = VoiceLine.Line.getLines(); + private static final HashMap, Bundle> responseInputMap = new HashMap<>(); static { responseInputMap.put(new Bundle<>( @@ -120,8 +120,8 @@ class Amadeus { static void speak(VoiceLine line, final Activity activity) { final AnimationDrawable animation; - final TextView subtitles = (TextView) activity.findViewById(R.id.textView_subtitles); - final ImageView kurisu = (ImageView) activity.findViewById(R.id.imageView_kurisu); + final TextView subtitles = activity.findViewById(R.id.textView_subtitles); + final ImageView kurisu = activity.findViewById(R.id.imageView_kurisu); SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); try { @@ -336,7 +336,7 @@ static void openApp(String[] input, Activity activity) { private static class Bundle implements Iterable { - private T[] list; + private final T[] list; @SafeVarargs private Bundle(T... list) { diff --git a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java index 4c26ae7..7533d28 100644 --- a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java @@ -31,11 +31,11 @@ public class LaunchActivity extends AppCompatActivity { private TextView status; private Boolean isPressed = false; private MediaPlayer m; - private Handler aniHandle = new Handler(); + private final Handler aniHandle = new Handler(); private int i = 0; - Runnable aniRunnable = new Runnable() { + private final Runnable aniRunnable = new Runnable() { public void run() { final int DURATION = 20; if (i < 39) { diff --git a/app/src/main/java/com/example/yink/amadeus/MainActivity.java b/app/src/main/java/com/example/yink/amadeus/MainActivity.java index 1894950..ed0fd3b 100644 --- a/app/src/main/java/com/example/yink/amadeus/MainActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/MainActivity.java @@ -29,10 +29,10 @@ public class MainActivity extends AppCompatActivity { - private final String TAG = "MainActivity"; + private static final String TAG = "MainActivity"; - private VoiceLine[] voiceLines = VoiceLine.Line.getLines(); - private Random randomgen = new Random(); + private final VoiceLine[] voiceLines = VoiceLine.Line.getLines(); + private final Random randomgen = new Random(); private String recogLang; private String[] contextLang; private SpeechRecognizer sr; diff --git a/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java b/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java index 60f86e4..b7504d8 100644 --- a/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java @@ -1,14 +1,13 @@ package com.example.yink.amadeus; -/** - * Created by Yink on 05.03.2017. - */ - import android.content.Context; -import android.os.Build; import android.os.Bundle; import android.support.v4.app.FragmentActivity; +/** + * Created by Yink on 05.03.2017. + */ + public class SettingsActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { diff --git a/app/src/main/java/com/example/yink/amadeus/SettingsFragment.java b/app/src/main/java/com/example/yink/amadeus/SettingsFragment.java index 84e4790..15f6074 100644 --- a/app/src/main/java/com/example/yink/amadeus/SettingsFragment.java +++ b/app/src/main/java/com/example/yink/amadeus/SettingsFragment.java @@ -1,18 +1,13 @@ package com.example.yink.amadeus; -import android.content.SharedPreferences; -import android.os.Build; import android.os.Bundle; import android.preference.PreferenceFragment; -import android.support.annotation.RequiresApi; /** * Created by Yink on 05.03.2017. */ -@RequiresApi(api = Build.VERSION_CODES.HONEYCOMB) public class SettingsFragment extends PreferenceFragment { - SharedPreferences sharedPreferences; @Override public void onCreate(Bundle savedInstanceState) { diff --git a/app/src/main/java/com/example/yink/amadeus/VoiceLine.java b/app/src/main/java/com/example/yink/amadeus/VoiceLine.java index eb87f1e..48d0d62 100644 --- a/app/src/main/java/com/example/yink/amadeus/VoiceLine.java +++ b/app/src/main/java/com/example/yink/amadeus/VoiceLine.java @@ -46,7 +46,7 @@ static class Mood { } static class Line { - static VoiceLine[] voiceLines = new VoiceLine[45]; + static final VoiceLine[] voiceLines = new VoiceLine[45]; static final int HELLO = 0; static final int DAGA_KOTOWARU = 1; diff --git a/app/src/main/res/layout/activity_launch.xml b/app/src/main/res/layout/activity_launch.xml index 8ac2a49..e505c4b 100644 --- a/app/src/main/res/layout/activity_launch.xml +++ b/app/src/main/res/layout/activity_launch.xml @@ -1,5 +1,6 @@ + android:src="@drawable/logo39" + android:contentDescription="@string/app_name" /> + android:layout_alignParentStart="true" + tools:ignore="UnusedAttribute" /> + android:src="@drawable/connect_unselect" + tools:ignore="ContentDescription" /> + android:src="@drawable/cancel_unselect" + tools:ignore="ContentDescription" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 112acaf..4567c65 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,5 +1,6 @@ @@ -9,13 +10,15 @@ android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="centerCrop" - android:src="@drawable/bg1" /> + android:src="@drawable/bg1" + tools:ignore="ContentDescription" /> + android:src="@drawable/kurisu_happy1" + tools:ignore="ContentDescription" /> + android:layout_alignParentEnd="true" + android:contentDescription="@string/app_name" /> + android:src="@drawable/subtitle_frame_big" + tools:ignore="ContentDescription" /> + android:typeface="monospace" + tools:ignore="RelativeOverlap,UnusedAttribute" /> \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4e65bbe..19ef37e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -61,7 +61,7 @@ Senpai, s\'il vous plaît, ne le dites pas aux autres… Cela ne me satisfait toujours pas. Cela ne fait aucun sens. - Voyons voir... Ma conclusion est que cela n\'est pas possible. + Voyons voir… Ma conclusion est que cela n\'est pas possible. C\'est probablement car les scientifiques n\'ont encore rien découvert d\'important. Mais on ne sait pas si c\'est réellement impossible, je suppose. Une machine à voyager dans le temps, dites-vous ? diff --git a/app/src/main/res/values-v14/styles.xml b/app/src/main/res/values-v14/styles.xml deleted file mode 100644 index a6e791f..0000000 --- a/app/src/main/res/values-v14/styles.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 1eafca3..36fce1c 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -2,7 +2,7 @@ Amadeus 连接到助手 - 连接中... + 连接中… 断开连接 zh-rCN en-US @@ -56,7 +56,7 @@ 请多指教。 那么前辈,我能再问一个问题吗? 前辈? - 呐,前辈。关于刚才那件事... + 呐,前辈。关于刚才那件事… 嗯,前辈,那边的那个人是? 前辈,拜托请不要告诉其他人。 我对这件事不是很满意。 @@ -70,7 +70,7 @@ 也就是说,是秘密日记。 修改我的记忆? 理论上是可行的。 举例来说,可以做到让我认为自己的名字是克莉斯缇娜。 - 咔、啊、嗯嗯嗯... + 咔、啊、嗯嗯嗯… 太棒了,他真的可以。 太棒了! 天呐! diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 779ff51..250528c 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -6,7 +6,6 @@ @color/colorPrimaryDark @color/colorAccent - From 4e5c27dfc1c064968d82ebf9b170e66c7a3c9d21 Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 17:02:49 +0800 Subject: [PATCH 07/21] replace deprecated API --- app/src/main/AndroidManifest.xml | 2 ++ .../main/java/com/example/yink/amadeus/AlarmBootReceiver.java | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aca0af9..9da1ebf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -69,6 +69,8 @@ android:label="AlarmBootReceiver"> + + diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java index c1e499c..c68463f 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java @@ -2,15 +2,15 @@ import android.app.AlarmManager; import android.app.PendingIntent; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.preference.PreferenceManager; -import android.support.v4.content.WakefulBroadcastReceiver; import android.util.Log; -public class AlarmBootReceiver extends WakefulBroadcastReceiver { +public class AlarmBootReceiver extends BroadcastReceiver { private static final String TAG = "AlarmBootReceiver"; From c684f4cbfbecaef1c638b02c943046789d94b716 Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 17:07:30 +0800 Subject: [PATCH 08/21] add QUICKBOOT action --- .../main/java/com/example/yink/amadeus/AlarmBootReceiver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java index c68463f..78df1b5 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java @@ -19,7 +19,7 @@ public void onReceive(Context context, Intent intent) { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); - if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction()) + if (("android.intent.action.BOOT_COMPLETED".equals(intent.getAction()) || "android.intent.action.QUICKBOOT_POWERON".equals(intent.getAction())) && settings.getBoolean("alarm_toggle", false)) { AlarmManager alarmManager = (AlarmManager) context.getSystemService( Context.ALARM_SERVICE); From a05028189b184239e58de0c2393d8499b5f3262f Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 17:19:59 +0800 Subject: [PATCH 09/21] update Chinese --- app/src/main/res/values-zh-rCN/strings.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 36fce1c..91c8f56 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -8,7 +8,7 @@ en-US 没有检测到Google App 来自助手的电话 - 你的老婆想你了 + 你的纸片人老婆想你了 设置 @@ -17,7 +17,7 @@ 界面语言 选择界面语言 (需重启应用) 显示字幕 - 显示Amadeus说的话 + 显示 Amadeus 说的话 显示 “XP” 图标 在状态栏显示 “XP” 图标 (需重启应用) 闹钟设置 @@ -25,15 +25,15 @@ 闹钟铃声 选择闹钟铃声 响铃时震动 - 24小时制 + 24 小时制 - 你好。 + 你好! 别 那 样 叫 我。 但是我拒绝。 没想到你竟然这么变态,我看错你了。 也对呢。 - 干得漂亮。 + 干得漂亮! 变 态 确 定。 抱歉。 很幸苦呢。 From a5273fd65e774f2449058f286fdfc89df1055df6 Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 17:27:05 +0800 Subject: [PATCH 10/21] remove untranslated languages --- app/src/main/res/values/arrays.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 900ef5a..9fd15e6 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -9,8 +9,7 @@ Française Deutsch 日本語 - 简体中文 - 繁體中文 + 中文(大陆) @@ -23,7 +22,6 @@ de ja zh-rCN - zh-rTW From cff22bc1752eda9f1d56286f38de8a511a5ed67b Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 23:02:40 +0800 Subject: [PATCH 11/21] java 8 --- app/build.gradle | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index dabc505..20a6f63 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,6 +18,10 @@ android { } productFlavors { } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } } dependencies { From 08034511241d1905b16b4b02f7612c31b21f79ea Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 23:05:08 +0800 Subject: [PATCH 12/21] judge default assistant app --- .../example/yink/amadeus/LaunchActivity.java | 125 ++++++++++-------- 1 file changed, 69 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java index 7533d28..8f54d2f 100644 --- a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java @@ -12,19 +12,21 @@ import android.os.Bundle; import android.os.Handler; import android.preference.PreferenceManager; +import android.provider.Settings; import android.support.v4.app.NotificationCompat; import android.support.v4.app.TaskStackBuilder; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; -import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; public class LaunchActivity extends AppCompatActivity { private static final String GOOGLE_PACKAGE_NAME = "com.google.android.googlequicksearchbox"; + private static final String DEFAULT_ASSAIST = "com.google.android.googlequicksearchbox/com.google.android.voiceinteraction.GsaVoiceInteractionService"; private static final String CHANNEL_ID = "amadeus_channel_icon"; private ImageView connect, cancel, logo; @@ -57,6 +59,19 @@ private boolean isAppInstalled(Context context, String packageName) { } } + private boolean isDefaultAssistApp(Context context, String app){ + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + return true; + } + final String assistant = Settings.Secure.getString(context.getContentResolver(), "assistant"); + if (assistant.equals(app)) { + return true; + } + Toast.makeText(context, getString(R.string.assist_app_error), Toast.LENGTH_LONG).show(); + startActivity(new Intent(Settings.ACTION_VOICE_INPUT_SETTINGS)); + return false; + } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -74,6 +89,10 @@ protected void onCreate(Bundle savedInstanceState) { status.setText(R.string.google_app_error); } + if (!isDefaultAssistApp(LaunchActivity.this, DEFAULT_ASSAIST)){ + status.setText(R.string.assist_app_error); + } + if (Alarm.isPlaying()) { status.setText(R.string.incoming_call); win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); @@ -84,72 +103,64 @@ protected void onCreate(Bundle savedInstanceState) { showNotification(); } - connect.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (!isPressed && isAppInstalled(LaunchActivity.this, GOOGLE_PACKAGE_NAME)) { - isPressed = true; - - connect.setImageResource(R.drawable.connect_select); - - if (!Alarm.isPlaying()) { - m = MediaPlayer.create(LaunchActivity.this, R.raw.tone); - - m.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { - @Override - public void onPrepared(MediaPlayer mp) { - mp.start(); - status.setText(R.string.connecting); - } - }); - - m.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { - @Override - public void onCompletion(MediaPlayer mp) { - mp.release(); - Intent intent = new Intent(LaunchActivity.this, MainActivity.class); - startActivity(intent); - } - }); - } else { - Alarm.cancel(LaunchActivity.this); - win.clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); - win.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); - - Intent intent = new Intent(LaunchActivity.this, MainActivity.class); - startActivity(intent); - } + connect.setOnClickListener(view -> { + if (!isPressed && isAppInstalled(LaunchActivity.this, GOOGLE_PACKAGE_NAME) + && isDefaultAssistApp(LaunchActivity.this, DEFAULT_ASSAIST)) { + isPressed = true; + + connect.setImageResource(R.drawable.connect_select); + + if (!Alarm.isPlaying()) { + m = MediaPlayer.create(LaunchActivity.this, R.raw.tone); + + m.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + mp.start(); + status.setText(R.string.connecting); + } + }); + + m.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + mp.release(); + Intent intent = new Intent(LaunchActivity.this, MainActivity.class); + startActivity(intent); + } + }); + } else { + Alarm.cancel(LaunchActivity.this); + win.clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); + win.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); + + Intent intent = new Intent(LaunchActivity.this, MainActivity.class); + startActivity(intent); } } }); - cancel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - cancel.setImageResource(R.drawable.cancel_select); - Alarm.cancel(getApplicationContext()); - win.clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); - win.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); - - Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_HOME); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - } + cancel.setOnClickListener(view -> { + cancel.setImageResource(R.drawable.cancel_select); + Alarm.cancel(getApplicationContext()); + win.clearFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); + win.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); + + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_HOME); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); }); - logo.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - Intent settingIntent = new Intent(LaunchActivity.this, SettingsActivity.class); - startActivity(settingIntent); - } + logo.setOnClickListener(view -> { + Intent settingIntent = new Intent(LaunchActivity.this, SettingsActivity.class); + startActivity(settingIntent); }); } @Override protected void attachBaseContext(Context newBase) { - super.attachBaseContext(LangContext.wrap(newBase)); + super.attachBaseContext(ContextLocalWrapper.wrap(newBase)); } @Override @@ -176,6 +187,8 @@ protected void onResume() { status.setText(R.string.disconnected); } else if (!isAppInstalled(LaunchActivity.this, GOOGLE_PACKAGE_NAME)) { status.setText(R.string.google_app_error); + } else if (!isDefaultAssistApp(LaunchActivity.this, DEFAULT_ASSAIST)){ + status.setText(R.string.assist_app_error); } else if (Alarm.isPlaying()) { status.setText(R.string.incoming_call); } else { From c6ea53d8800c0db26af6033a08e3e410b1abc920 Mon Sep 17 00:00:00 2001 From: onlymash Date: Thu, 3 May 2018 23:08:27 +0800 Subject: [PATCH 13/21] use lambda and update settings --- .../yink/amadeus/ContextLocalWrapper.java | 96 +++++++++++++++++++ .../com/example/yink/amadeus/LangContext.java | 92 ------------------ .../yink/amadeus/SettingsActivity.java | 4 +- .../yink/amadeus/SettingsFragment.java | 12 ++- app/src/main/res/values-de/strings.xml | 3 +- app/src/main/res/values-es/strings.xml | 3 +- app/src/main/res/values-fr/strings.xml | 3 +- app/src/main/res/values-it/strings.xml | 3 +- app/src/main/res/values-ja/strings.xml | 21 +++- app/src/main/res/values-pt/strings.xml | 21 +++- app/src/main/res/values-ru/strings.xml | 3 +- app/src/main/res/values-zh-rCN/strings.xml | 11 ++- app/src/main/res/values/arrays.xml | 46 ++++----- app/src/main/res/values/strings.xml | 24 ++++- app/src/main/res/values/styles.xml | 1 + app/src/main/res/xml/preferences.xml | 7 +- 16 files changed, 217 insertions(+), 133 deletions(-) create mode 100644 app/src/main/java/com/example/yink/amadeus/ContextLocalWrapper.java delete mode 100644 app/src/main/java/com/example/yink/amadeus/LangContext.java diff --git a/app/src/main/java/com/example/yink/amadeus/ContextLocalWrapper.java b/app/src/main/java/com/example/yink/amadeus/ContextLocalWrapper.java new file mode 100644 index 0000000..0ac6b6f --- /dev/null +++ b/app/src/main/java/com/example/yink/amadeus/ContextLocalWrapper.java @@ -0,0 +1,96 @@ +package com.example.yink.amadeus; + +/* Solution: http://stackoverflow.com/a/40704077 */ + +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.os.LocaleList; +import android.preference.PreferenceManager; + +import java.util.Locale; + +public class ContextLocalWrapper extends ContextWrapper { + + public ContextLocalWrapper(Context base) { + super(base); + } + + private static Locale getLocale(Context context) { + + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); + String lang = settings.getString("lang", "system"); + Locale locale = null; + if (!lang.equals("system")) { + String[] langArr = lang.split("-"); + switch(langArr.length){ + case 3: + locale = new Locale(langArr[0],langArr[1], langArr[2]); + break; + case 2: + locale = new Locale(langArr[0],langArr[1]); + break; + case 1: + locale = new Locale(langArr[0]); + break; + } + } + + if (locale == null) { + locale = Resources.getSystem().getConfiguration().locale; + } + + return locale; + + } + + public static ContextLocalWrapper wrap(Context context) { + Resources res = context.getResources(); + Configuration configuration = res.getConfiguration(); + + Locale locale = getLocale(context); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + configuration.setLocale(locale); + LocaleList localeList = new LocaleList(locale); + LocaleList.setDefault(localeList); + configuration.setLocales(localeList); + context = context.createConfigurationContext(configuration); + + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + configuration.setLocale(locale); + context = context.createConfigurationContext(configuration); + } else { + configuration.locale = locale; + res.updateConfiguration(configuration, res.getDisplayMetrics()); + } + + return new ContextLocalWrapper(context); + } + + public static Context load(Context context, String lang) { + Configuration config = context.getResources().getConfiguration(); + + Locale locale = new Locale(lang); + Locale.setDefault(locale); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + config.setLocale(locale); + } else { + config.locale = 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 context; + } + + +} diff --git a/app/src/main/java/com/example/yink/amadeus/LangContext.java b/app/src/main/java/com/example/yink/amadeus/LangContext.java deleted file mode 100644 index 88f6730..0000000 --- a/app/src/main/java/com/example/yink/amadeus/LangContext.java +++ /dev/null @@ -1,92 +0,0 @@ -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.os.Build; -import android.preference.PreferenceManager; - -import java.util.Locale; - -public class LangContext extends ContextWrapper { - public LangContext(Context base) { - super(base); - } - - @SuppressWarnings("deprecation") - public static ContextWrapper wrap(Context context) { - Configuration config = context.getResources().getConfiguration(); - - SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); - - String lang = settings.getString("lang", "en"); - String[] langArr = lang.split("-"); - Locale locale; - switch(langArr.length){ - case 3: - locale = new Locale(langArr[0],langArr[1], langArr[2]); - break; - case 2: - locale = new Locale(langArr[0],langArr[1]); - break; - default: - locale = new Locale(langArr[0]); - break; - } - - if (lang.equals("zh-rTW")) - locale = Locale.TAIWAN; - else if (lang.equals("zh-rCN")) - locale = Locale.CHINA; - - 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 LangContext(context); - } - - @SuppressWarnings("deprecation") - public static Context load(Context context, String lang) { - Configuration config = context.getResources().getConfiguration(); - - 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 context; - } - - @SuppressWarnings("deprecation") - private static void setSystemLocaleLegacy(Configuration config, Locale locale){ - config.locale = locale; - } - - @TargetApi(Build.VERSION_CODES.N) - private static void setSystemLocale(Configuration config, Locale locale){ - config.setLocale(locale); - } -} diff --git a/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java b/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java index b7504d8..bffdf60 100644 --- a/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java @@ -8,7 +8,7 @@ * Created by Yink on 05.03.2017. */ -public class SettingsActivity extends FragmentActivity { +public class SettingsActivity extends FragmentActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -17,6 +17,6 @@ protected void onCreate(Bundle savedInstanceState) { @Override protected void attachBaseContext(Context newBase) { - super.attachBaseContext(LangContext.wrap(newBase)); + super.attachBaseContext(ContextLocalWrapper.wrap(newBase)); } } diff --git a/app/src/main/java/com/example/yink/amadeus/SettingsFragment.java b/app/src/main/java/com/example/yink/amadeus/SettingsFragment.java index 15f6074..705ff04 100644 --- a/app/src/main/java/com/example/yink/amadeus/SettingsFragment.java +++ b/app/src/main/java/com/example/yink/amadeus/SettingsFragment.java @@ -1,17 +1,27 @@ package com.example.yink.amadeus; +import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceFragment; +import android.widget.Toast; /** * Created by Yink on 05.03.2017. */ -public class SettingsFragment extends PreferenceFragment { +public class SettingsFragment extends PreferenceFragment + implements SharedPreferences.OnSharedPreferenceChangeListener { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if (key.equals("lang")) { + Toast.makeText(getActivity(), getString(R.string.pref_app_restart_required), Toast.LENGTH_SHORT).show(); + } + } } diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 28727b9..b6b4322 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -4,7 +4,6 @@ Verbindung mit Kurisu herstellen? Verbindung wird hergestellt… Verbindung unterbrochen. - de de-DE Google App wurde nicht erkannt. Eingehender Anruf von Kurisu. @@ -12,10 +11,12 @@ App Einstellungen + App restart required Spracherkennung Wähle Sprache zur Spracherkennung Sprache Wähle App Sprache (App Neustart erforderlich) + System Language (Default) Untertitel anzeigen Untertitel für Amadeus Antworten anzeigen Show "XP"-Icon diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 44469a3..7254483 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -3,16 +3,17 @@ ¿Conectar a Kurisu? Conectando… Desconectado. - es es-ES Google App no fue detectado. Ajustes de la aplicación + App restart required Idioma de reconocimiento de voz Elegir el idioma de reconocimiento de voz Idiomas Elegir el idioma de la aplicación (requiere reiniciar la aplicación) + System Language (Default) Mostrar subtítulos Mostrar subtítulos para las respuestas de Amadeus Mostrar icono "XP" diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 19ef37e..b434e45 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -4,7 +4,6 @@ Se connecter à Kurisu ? Connexion… Déconnecté. - fr fr-FR Application Google non détectée. Appel de Kurisu. @@ -12,10 +11,12 @@ Paramètres de l\'application + App restart required Langue de reconnaissance vocale Sélectionnez la langue pour la reconnaissance vocale Langue Sélectionnez la langue de l\'application (redémarrage requis) + System Language (Default) Afficher les sous-titres Affiche les sous-titres pour les réponses d\'Amadeus Afficher Icône-"XP" diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 32963cf..a4b603c 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -4,7 +4,6 @@ Connettere a Kurisu? Collegamento… Disconnesso. - it en-US App Google non rilevata. Chiamata da Kurisu. @@ -12,10 +11,12 @@ Impostazioni applicazione + App restart required Lingua di riconoscimento Seleziona lingua di riconoscimento vocale Lingua Seleziona lingua app (riavvio app richiesto) + System Language (Default) Mostra sottotitoli Mostra sottotitoli per le risposte di Amadeus Mostra "XP"-Icon diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 7af6460..b467f52 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -3,10 +3,29 @@ Connect to Kurisu? Connecting… Disconnected. - ja ja-JP Google App wasn\'t detected. + + Application settings + App restart required + Recognition language + Select voice recognition language + Language + Select app language (app restart required) + System Language (Default) + Show subtitles + Shows subtitles for Amadeus\' answers + Show "XP"-Icon + Shows Icon in the notification bar (app restart required) + Alarm + Alarm settings + Alarm setup + Alarm ringtone + Select ringtone for alarm + Vibrate on alarm + 24-hour format + Hello. Don\'t call me like that! But I refuse. diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index bc358a6..22b464d 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -3,10 +3,29 @@ Conectar a Kurisu? Conectando… Desconectado. - pt ja-JP Google App wasn\'t detected. + + Application settings + App restart required + Recognition language + Select voice recognition language + Language + Select app language (app restart required) + System Language (Default) + Show subtitles + Shows subtitles for Amadeus\' answers + Show "XP"-Icon + Shows Icon in the notification bar (app restart required) + Alarm + Alarm settings + Alarm setup + Alarm ringtone + Select ringtone for alarm + Vibrate on alarm + 24-hour format + Olá. Não me chames assim! Mas eu recuso. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 45d4d7b..2926030 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -3,7 +3,6 @@ Подключиться к Курису? Подключение… Отключено. - ru ru-RU Google App не найден. Звонок от Курису. @@ -11,10 +10,12 @@ Настройки приложения + App restart required Язык распознавания Выберите язык распознавания голоса Язык Выберите язык приложения (требуется перезапуск) + System Language (Default) Показывать субтитры Показывает субтитры с ответами Амадеуса Показывать иконку "XP" diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 91c8f56..5cbbfe0 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -3,23 +3,24 @@ Amadeus 连接到助手 连接中… - 断开连接 - zh-rCN + 已断开连接 en-US 没有检测到Google App 来自助手的电话 - 你的纸片人老婆想你了 + 你的纸片人老婆想你了。 设置 + 重启 App 后生效 语音识别 选择语种 界面语言 - 选择界面语言 (需重启应用) + 选择界面语言(重启生效) + 系统语言(默认) 显示字幕 显示 Amadeus 说的话 显示 “XP” 图标 - 在状态栏显示 “XP” 图标 (需重启应用) + 在状态栏显示 “XP” 图标(重启生效) 闹钟设置 设置时间 闹钟铃声 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 9fd15e6..d71a792 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -1,18 +1,20 @@ - English - Русский - Português - Español - Italiano - Française - Deutsch - 日本語 - 中文(大陆) + @string/pref_lang_system + @string/pref_lang_en + @string/pref_lang_ru + @string/pref_lang_pt + @string/pref_lang_es + @string/pref_lang_it + @string/pref_lang_fr + @string/pref_lang_de + @string/pref_lang_ja + @string/pref_lang_zh_cn + system en ru pt @@ -25,12 +27,12 @@ - English - 日本語 - Русский - Español - Deutsch - Française + @string/pref_lang_en + @string/pref_lang_ja + @string/pref_lang_pt + @string/pref_lang_es + @string/pref_lang_de + @string/pref_lang_fr @@ -43,13 +45,13 @@ - Gate Of Steiner - Village - Beginning Of Fight - Easygoingness - Reunion - Precaution - Over The Sky + @string/pref_alarm_ringtone_gate_of_steiner + @string/pref_alarm_ringtone_village + @string/pref_alarm_ringtone_beginning_of_fight + @string/pref_alarm_ringtone_easygoingness + @string/pref_alarm_ringtone_reunion + @string/pref_alarm_ringtone_precaution + @string/pref_alarm_ringtone_over_the_sky diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 415367c..617ff13 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4,18 +4,32 @@ Connect to Kurisu? Connecting… Disconnected. - en + system en-US Google App wasn\'t detected. + Google App is\'t default Assist & voice input app. Call from Kurisu. Your waifu misses you. Application settings + App restart required Recognition language Select voice recognition language Language Select app language (app restart required) + + System Language (Default) + English + Русский + Português + Español + Italiano + Française + Deutsch + 日本語 + 中文(大陆) + Show subtitles Shows subtitles for Amadeus\' answers Show "XP"-Icon @@ -28,6 +42,14 @@ Vibrate on alarm 24-hour format + Gate Of Steiner + Village + Beginning Of Fight + Easygoingness + Reunion + Precaution + Over The Sky + Hello. Don\'t call me like that! diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 250528c..779ff51 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -6,6 +6,7 @@ @color/colorPrimaryDark @color/colorAccent + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 69e9306..27b77ec 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -16,14 +16,14 @@ android:entries="@array/languagesRecogArray" android:entryValues="@array/languagesRecogValues" android:key="recognition_lang" - android:summary="@string/pref_recog_lang_desc" + android:summary="%s" android:title="@string/pref_recog_lang" /> @@ -33,10 +33,11 @@ android:targetClass="com.example.yink.amadeus.AlarmActivity" />--> Date: Thu, 3 May 2018 23:08:48 +0800 Subject: [PATCH 14/21] use lambda --- .../com/example/yink/amadeus/Amadeus.java | 51 +++++++-------- .../example/yink/amadeus/MainActivity.java | 63 +++++++++---------- 2 files changed, 50 insertions(+), 64 deletions(-) diff --git a/app/src/main/java/com/example/yink/amadeus/Amadeus.java b/app/src/main/java/com/example/yink/amadeus/Amadeus.java index 1e81702..274b84f 100644 --- a/app/src/main/java/com/example/yink/amadeus/Amadeus.java +++ b/app/src/main/java/com/example/yink/amadeus/Amadeus.java @@ -142,29 +142,23 @@ static void speak(VoiceLine line, final Activity activity) { m = new MediaPlayer(); } - m.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { - @Override - public void onPrepared(MediaPlayer mp) { - isSpeaking = true; - mp.start(); - v.setEnabled(true); - } + m.setOnPreparedListener(mp -> { + isSpeaking = true; + mp.start(); + v.setEnabled(true); }); - m.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { - @Override - public void onCompletion(MediaPlayer mp) { - isSpeaking = false; - mp.release(); - v.setEnabled(false); - - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - kurisu.setImageDrawable(animation.getFrame(0)); - } - }); - } + m.setOnCompletionListener(mp -> { + isSpeaking = false; + mp.release(); + v.setEnabled(false); + + activity.runOnUiThread(new Runnable() { + @Override + public void run() { + kurisu.setImageDrawable(animation.getFrame(0)); + } + }); }); @@ -180,15 +174,12 @@ public void onWaveFormDataCapture(Visualizer visualizer, byte[] bytes, int sampl // The normalized volume final float normalized = sum / (float) bytes.length; - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - if (normalized > 50) { - // Todo: Maybe choose sprite based on previous choice and volume instead of random - kurisu.setImageDrawable(animation.getFrame((int) Math.ceil(Math.random() * 2))); - } else { - kurisu.setImageDrawable(animation.getFrame(0)); - } + activity.runOnUiThread(() -> { + if (normalized > 50) { + // Todo: Maybe choose sprite based on previous choice and volume instead of random + kurisu.setImageDrawable(animation.getFrame((int) Math.ceil(Math.random() * 2))); + } else { + kurisu.setImageDrawable(animation.getFrame(0)); } }); } diff --git a/app/src/main/java/com/example/yink/amadeus/MainActivity.java b/app/src/main/java/com/example/yink/amadeus/MainActivity.java index ed0fd3b..1442baa 100644 --- a/app/src/main/java/com/example/yink/amadeus/MainActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/MainActivity.java @@ -73,48 +73,43 @@ public void run() { } }; - kurisu.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - MainActivity host = (MainActivity) view.getContext(); - - int permissionCheck = ContextCompat.checkSelfPermission(host, - Manifest.permission.RECORD_AUDIO); - - /* Input during loop produces bugs and mixes with output */ - if (!Amadeus.isLoop && !Amadeus.isSpeaking) { - if (permissionCheck == PackageManager.PERMISSION_GRANTED) { - promptSpeechInput(); - } else { - Amadeus.speak(voiceLines[VoiceLine.Line.DAGA_KOTOWARU], MainActivity.this); - } - } - - } else if (!Amadeus.isLoop && !Amadeus.isSpeaking) { - promptSpeechInput(); - } - }}); + kurisu.setOnClickListener(view -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + MainActivity host = (MainActivity) view.getContext(); + int permissionCheck = ContextCompat.checkSelfPermission(host, + Manifest.permission.RECORD_AUDIO); - kurisu.setOnLongClickListener(new View.OnLongClickListener() { - @Override - public boolean onLongClick(View view) { + /* Input during loop produces bugs and mixes with output */ if (!Amadeus.isLoop && !Amadeus.isSpeaking) { - handler.post(loop); - Amadeus.isLoop = true; - } else { - handler.removeCallbacks(loop); - Amadeus.isLoop = false; + if (permissionCheck == PackageManager.PERMISSION_GRANTED) { + promptSpeechInput(); + } else { + Amadeus.speak(voiceLines[VoiceLine.Line.DAGA_KOTOWARU], MainActivity.this); + } } - return true; + + } else if (!Amadeus.isLoop && !Amadeus.isSpeaking) { + promptSpeechInput(); + } + }); + + + kurisu.setOnLongClickListener(view -> { + if (!Amadeus.isLoop && !Amadeus.isSpeaking) { + handler.post(loop); + Amadeus.isLoop = true; + } else { + handler.removeCallbacks(loop); + Amadeus.isLoop = false; } + return true; }); } @Override protected void attachBaseContext(Context newBase) { - super.attachBaseContext(LangContext.wrap(newBase)); + super.attachBaseContext(ContextLocalWrapper.wrap(newBase)); } @Override @@ -165,7 +160,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK && null != data) { /* Switch language within current context for voice recognition */ - Context context = LangContext.load(getApplicationContext(), contextLang[0]); + Context context = ContextLocalWrapper.load(getApplicationContext(), contextLang[0]); ArrayList input = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); @@ -225,7 +220,7 @@ public void onResults(Bundle results) { } /* Switch language within current context for voice recognition */ - Context context = LangContext.load(getApplicationContext(), contextLang[0]); + Context context = ContextLocalWrapper.load(getApplicationContext(), contextLang[0]); if (splitInput.length > 2 && splitInput[0].equalsIgnoreCase(context.getString(R.string.assistant))) { String cmd = splitInput[1].toLowerCase(); From 16abf98cdc7107c873c40047ff8cdb90ab161601 Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 4 May 2018 11:04:51 +0800 Subject: [PATCH 15/21] add lintOptions --- app/build.gradle | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index 20a6f63..2f26a08 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,6 +18,11 @@ android { } productFlavors { } + + lintOptions { + checkReleaseBuilds false + abortOnError false + } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 From 88a0ef3e7e68acf30f166e0ac846e8b6d8e632e1 Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 4 May 2018 11:07:28 +0800 Subject: [PATCH 16/21] ignore release dir --- app/.gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/.gitignore b/app/.gitignore index c9e26d9..7f0f2be 100644 --- a/app/.gitignore +++ b/app/.gitignore @@ -1,2 +1,3 @@ /build -/app.iml \ No newline at end of file +/app.iml +/release From ad5a4d7114c2b71c7006fbe75cd038be9fb9873d Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 4 May 2018 11:09:48 +0800 Subject: [PATCH 17/21] check Google App before show notification --- .../java/com/example/yink/amadeus/LaunchActivity.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java index 8f54d2f..41c1c46 100644 --- a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java @@ -87,11 +87,9 @@ protected void onCreate(Bundle savedInstanceState) { if (!isAppInstalled(LaunchActivity.this, GOOGLE_PACKAGE_NAME)) { status.setText(R.string.google_app_error); - } - - if (!isDefaultAssistApp(LaunchActivity.this, DEFAULT_ASSAIST)){ + } else if (!isDefaultAssistApp(LaunchActivity.this, DEFAULT_ASSAIST)){ status.setText(R.string.assist_app_error); - } + } if (Alarm.isPlaying()) { status.setText(R.string.incoming_call); @@ -99,7 +97,9 @@ protected void onCreate(Bundle savedInstanceState) { win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); } - if (settings.getBoolean("show_notification", false)) { + if (settings.getBoolean("show_notification", false) + && isAppInstalled(this, GOOGLE_PACKAGE_NAME) + && isDefaultAssistApp(this, DEFAULT_ASSAIST)) { showNotification(); } From ff645ad8293bbd33764ec21f4a6c8db95a0fd751 Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 4 May 2018 11:14:09 +0800 Subject: [PATCH 18/21] replace anomymous type with lambda --- .../com/example/yink/amadeus/Amadeus.java | 7 +------ .../example/yink/amadeus/LaunchActivity.java | 20 +++++++------------ 2 files changed, 8 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/example/yink/amadeus/Amadeus.java b/app/src/main/java/com/example/yink/amadeus/Amadeus.java index 274b84f..3abe0e4 100644 --- a/app/src/main/java/com/example/yink/amadeus/Amadeus.java +++ b/app/src/main/java/com/example/yink/amadeus/Amadeus.java @@ -153,12 +153,7 @@ static void speak(VoiceLine line, final Activity activity) { mp.release(); v.setEnabled(false); - activity.runOnUiThread(new Runnable() { - @Override - public void run() { - kurisu.setImageDrawable(animation.getFrame(0)); - } - }); + activity.runOnUiThread(() -> kurisu.setImageDrawable(animation.getFrame(0))); }); diff --git a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java index 41c1c46..00cf51b 100644 --- a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java @@ -113,21 +113,15 @@ && isDefaultAssistApp(LaunchActivity.this, DEFAULT_ASSAIST)) { if (!Alarm.isPlaying()) { m = MediaPlayer.create(LaunchActivity.this, R.raw.tone); - m.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { - @Override - public void onPrepared(MediaPlayer mp) { - mp.start(); - status.setText(R.string.connecting); - } + m.setOnPreparedListener(mp -> { + mp.start(); + status.setText(R.string.connecting); }); - m.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { - @Override - public void onCompletion(MediaPlayer mp) { - mp.release(); - Intent intent = new Intent(LaunchActivity.this, MainActivity.class); - startActivity(intent); - } + m.setOnCompletionListener(mp -> { + mp.release(); + Intent intent = new Intent(LaunchActivity.this, MainActivity.class); + startActivity(intent); }); } else { Alarm.cancel(LaunchActivity.this); From faf365fed74d9a8beb154e7f056f65df0a53b027 Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 4 May 2018 11:17:54 +0800 Subject: [PATCH 19/21] change alarm notification level to high --- app/src/main/java/com/example/yink/amadeus/AlarmService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmService.java b/app/src/main/java/com/example/yink/amadeus/AlarmService.java index 47eba60..e863a9a 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmService.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmService.java @@ -33,7 +33,7 @@ private void sendNotification(String msg) { return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - alarmNotificationManager.createNotificationChannel(new NotificationChannel(CHANNEL_ID, getString(R.string.pref_alarm), NotificationManager.IMPORTANCE_LOW)); + alarmNotificationManager.createNotificationChannel(new NotificationChannel(CHANNEL_ID, getString(R.string.pref_alarm), NotificationManager.IMPORTANCE_HIGH)); } PendingIntent contentIntent = PendingIntent.getActivity(this, 0, From 4ebca724bf7922fc811dfc6cc0daa3382ac222a2 Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 4 May 2018 14:33:46 +0800 Subject: [PATCH 20/21] update string --- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 3 +-- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-it/strings.xml | 2 +- app/src/main/res/values-ja/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 10 +++++----- app/src/main/res/values/strings.xml | 2 +- 9 files changed, 13 insertions(+), 14 deletions(-) diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b6b4322..45bcbec 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -4,8 +4,8 @@ Verbindung mit Kurisu herstellen? Verbindung wird hergestellt… Verbindung unterbrochen. - de-DE Google App wurde nicht erkannt. + Google App is\'t default Assist & voice input app. Eingehender Anruf von Kurisu. Deine Waifu vermisst dich. diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 7254483..ce38c0c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -3,9 +3,8 @@ ¿Conectar a Kurisu? Conectando… Desconectado. - es-ES Google App no fue detectado. - + Google App is\'t default Assist & voice input app. Ajustes de la aplicación App restart required diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index b434e45..6cb2d2b 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -4,8 +4,8 @@ Se connecter à Kurisu ? Connexion… Déconnecté. - fr-FR Application Google non détectée. + Google App is\'t default Assist & voice input app. Appel de Kurisu. Vous manquez à votre waifu. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index a4b603c..5828035 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -4,8 +4,8 @@ Connettere a Kurisu? Collegamento… Disconnesso. - en-US App Google non rilevata. + Google App is\'t default Assist & voice input app. Chiamata da Kurisu. Manchi alla tua waifu. diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index b467f52..4fd118b 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -3,8 +3,8 @@ Connect to Kurisu? Connecting… Disconnected. - ja-JP Google App wasn\'t detected. + Google App is\'t default Assist & voice input app. Application settings diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 22b464d..7098e42 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -3,8 +3,8 @@ Conectar a Kurisu? Conectando… Desconectado. - ja-JP Google App wasn\'t detected. + Google App is\'t default Assist & voice input app. Application settings diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 2926030..46d44f9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -3,8 +3,8 @@ Подключиться к Курису? Подключение… Отключено. - ru-RU Google App не найден. + Google App is\'t default Assist & voice input app. Звонок от Курису. Твоя вайфу скучает по тебе. diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5cbbfe0..699ae00 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -4,8 +4,8 @@ 连接到助手 连接中… 已断开连接 - en-US - 没有检测到Google App + Google App 未安装 + Google App 不是默认的辅助或语音输入应用 来自助手的电话 你的纸片人老婆想你了。 @@ -19,8 +19,8 @@ 系统语言(默认) 显示字幕 显示 Amadeus 说的话 - 显示 “XP” 图标 - 在状态栏显示 “XP” 图标(重启生效) + 显示“XP”图标 + 在状态栏显示“XP”图标(重启生效) 闹钟设置 设置时间 闹钟铃声 @@ -41,7 +41,7 @@ 这家伙没救了,必须要做点什么。 咔。 缇娜 禁止!! - 你个变态! 你是笨蛋? 想死吗?! + 你个变态!你是笨蛋?想死吗?! 说起来,还没正式自我介绍过。我叫牧瀬红莉栖,初次见面,请多关照。 谁是克莉斯缇娜啊?我可没说过。 我很好奇为什么我叫克莉斯缇娜? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 617ff13..24fd8da 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -5,7 +5,7 @@ Connecting… Disconnected. system - en-US + en-US Google App wasn\'t detected. Google App is\'t default Assist & voice input app. Call from Kurisu. From bf21cd702b569451247826eabafb7dde02816a2a Mon Sep 17 00:00:00 2001 From: onlymash Date: Fri, 4 May 2018 14:34:27 +0800 Subject: [PATCH 21/21] update launcher activity --- .../java/com/example/yink/amadeus/LaunchActivity.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java index 00cf51b..1fb497b 100644 --- a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java @@ -89,6 +89,8 @@ protected void onCreate(Bundle savedInstanceState) { status.setText(R.string.google_app_error); } else if (!isDefaultAssistApp(LaunchActivity.this, DEFAULT_ASSAIST)){ status.setText(R.string.assist_app_error); + } else if (settings.getBoolean("show_notification", false)) { + showNotification(); } if (Alarm.isPlaying()) { @@ -97,12 +99,6 @@ protected void onCreate(Bundle savedInstanceState) { win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); } - if (settings.getBoolean("show_notification", false) - && isAppInstalled(this, GOOGLE_PACKAGE_NAME) - && isDefaultAssistApp(this, DEFAULT_ASSAIST)) { - showNotification(); - } - connect.setOnClickListener(view -> { if (!isPressed && isAppInstalled(LaunchActivity.this, GOOGLE_PACKAGE_NAME) && isDefaultAssistApp(LaunchActivity.this, DEFAULT_ASSAIST)) {