diff --git a/app/build.gradle b/app/build.gradle index fabd024..e397f3f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,7 @@ android { minSdkVersion 9 targetSdkVersion 20 versionCode 1 - versionName "0.9.5-alpha.3" + versionName "0.9.5-test.2" } buildTypes { release { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ec935e7..e29b7b8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,6 +5,7 @@ + - + + - + diff --git a/app/src/main/java/com/example/yink/amadeus/Alarm.java b/app/src/main/java/com/example/yink/amadeus/Alarm.java new file mode 100644 index 0000000..8c3d36e --- /dev/null +++ b/app/src/main/java/com/example/yink/amadeus/Alarm.java @@ -0,0 +1,104 @@ +package com.example.yink.amadeus; + +import android.app.AlarmManager; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.media.MediaPlayer; +import android.os.PowerManager; +import android.os.Vibrator; +import android.preference.PreferenceManager; +import android.util.Log; + +class Alarm { + + private static MediaPlayer m; + private static SharedPreferences settings; + private static Vibrator v; + + static final int ALARM_ID = 104859; + static final int ALARM_NOTIFICATION_ID = 102434; + + private static final String TAG = "Alarm"; + private static boolean isPlaying = false; + private static PowerManager.WakeLock sCpuWakeLock; + + static void start(Context context, int ringtone) { + + acquireCpuWakeLock(context); + + settings = PreferenceManager.getDefaultSharedPreferences(context); + + if (settings.getBoolean("vibrate", false)) { + v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); + long[] pattern = {500, 2000}; + v.vibrate(pattern, 0); + } + + m = MediaPlayer.create(context, ringtone); + + m.setLooping(true); + m.start(); + + if (m.isPlaying()) { + isPlaying = true; + } + + Log.d(TAG, "Start"); + + } + + static void cancel(Context context) { + + 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); + + if (isPlaying) { + SharedPreferences.Editor editor = settings.edit(); + editor.putBoolean("alarm_toggle", false); + editor.apply(); + m.release(); + notificationManager.cancel(ALARM_NOTIFICATION_ID); + alarmManager.cancel(pendingIntent); + releaseCpuLock(); + isPlaying = false; + if (v != null) { + v.cancel(); + } + } + + Log.d(TAG, "Cancel"); + + } + + static boolean isPlaying() { + return isPlaying; + } + + private static void acquireCpuWakeLock(Context context) { + if (sCpuWakeLock != null) { + return; + } + + PowerManager pm = + (PowerManager) context.getSystemService(Context.POWER_SERVICE); + sCpuWakeLock = pm.newWakeLock( + PowerManager.PARTIAL_WAKE_LOCK | + PowerManager.ACQUIRE_CAUSES_WAKEUP | + PowerManager.ON_AFTER_RELEASE, TAG); + sCpuWakeLock.acquire(); + } + + private static void releaseCpuLock() { + if (sCpuWakeLock != null) { + sCpuWakeLock.release(); + sCpuWakeLock = null; + } + } + +} 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 3bb32a2..a689fbc 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmActivity.java @@ -1,7 +1,6 @@ package com.example.yink.amadeus; import android.annotation.TargetApi; -import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; @@ -9,6 +8,7 @@ import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.TimePicker; @@ -17,21 +17,15 @@ import java.util.Calendar; -public class AlarmActivity extends Activity { +public class AlarmActivity extends AppCompatActivity { - final String TAG = "Amadeus.Alarm"; - AlarmManager alarmManager; - PendingIntent pendingIntent; - TimePicker alarmTimePicker; - ToggleButton alarmToggle; - public static final int alarmCode = 104856; - SharedPreferences settings; - SharedPreferences.Editor editor; + private final String TAG = "AlarmActivity"; - @Override - public void onStart() { - super.onStart(); - } + private AlarmManager alarmManager; + private PendingIntent pendingIntent; + private TimePicker alarmTimePicker; + private ToggleButton alarmToggle; + private SharedPreferences settings; @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,8 +35,9 @@ protected void onCreate(Bundle savedInstanceState) { alarmTimePicker = (TimePicker) findViewById(R.id.alarmTimePicker); alarmToggle = (ToggleButton) findViewById(R.id.alarmToggle); alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); - Intent alarmIntent = new Intent(this, AlarmReceiver.class); - pendingIntent = PendingIntent.getBroadcast(this, alarmCode, alarmIntent, PendingIntent.FLAG_NO_CREATE); + pendingIntent = PendingIntent.getBroadcast(this, Alarm.ALARM_ID, new Intent(this, AlarmReceiver.class), PendingIntent.FLAG_CANCEL_CURRENT); + + alarmTimePicker.setIs24HourView(settings.getBoolean("24-hour_format", true)); if (settings.getBoolean("alarm_toggle", false)) { alarmToggle.setChecked(true); @@ -52,40 +47,55 @@ protected void onCreate(Bundle savedInstanceState) { } public void onToggleClicked(View view) { - editor = settings.edit(); + SharedPreferences.Editor editor = settings.edit(); + if (alarmToggle.isChecked()) { editor.putBoolean("alarm_toggle", true); Calendar calendar = Calendar.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { Log.d(TAG, "Current API functions have been executed"); - setTime(calendar); + setTime(calendar, editor); } else { Log.d(TAG, "Legacy API functions have been executed"); - setTimeLegacy(calendar); + setTimeLegacy(calendar, editor); } + Log.d(TAG, "Alarm On"); } else { - AlarmReceiver.stopRingtone(this); + Alarm.cancel(this); + editor.putBoolean("alarm_toggle", false); - alarmManager.cancel(pendingIntent); Log.d(TAG, "Alarm Off"); } editor.apply(); } @SuppressWarnings("deprecation") - public void setTimeLegacy(Calendar calendar) { + private void setTimeLegacy(Calendar calendar, SharedPreferences.Editor editor) { calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getCurrentHour()); - calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentHour()); + calendar.set(Calendar.MINUTE, alarmTimePicker.getCurrentMinute()); + + if (calendar.before(Calendar.getInstance())) { + calendar.add(Calendar.DATE, 1); + } + alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); - Toast.makeText(this, "Alarm has been set for " + alarmTimePicker.getCurrentHour() + " hour(s) " + alarmTimePicker.getCurrentHour() + " minute(s)", Toast.LENGTH_SHORT).show(); + editor.putLong("alarm_time", calendar.getTimeInMillis()); + Toast.makeText(this, "Alarm has been set for " + alarmTimePicker.getCurrentHour() + " hour(s) " + alarmTimePicker.getCurrentMinute() + " minute(s)", Toast.LENGTH_SHORT).show(); } @TargetApi(Build.VERSION_CODES.M) - public void setTime(Calendar calendar) { + private void setTime(Calendar calendar, SharedPreferences.Editor editor) { calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour()); calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute()); + + if (calendar.before(Calendar.getInstance())) { + calendar.add(Calendar.DATE, 1); + } + alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); + editor.putLong("alarm_time", calendar.getTimeInMillis()); Toast.makeText(this, "Alarm has been set for " + alarmTimePicker.getHour() + " hour(s) " + alarmTimePicker.getMinute() + " minute(s)", Toast.LENGTH_SHORT).show(); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java new file mode 100644 index 0000000..d3d0349 --- /dev/null +++ b/app/src/main/java/com/example/yink/amadeus/AlarmBootReceiver.java @@ -0,0 +1,38 @@ +package com.example.yink.amadeus; + +import android.app.AlarmManager; +import android.app.PendingIntent; +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 { + + final String TAG = "AlarmBootReceiver"; + + @Override + public void onReceive(Context context, Intent intent) { + + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); + + if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction()) + && settings.getBoolean("alarm_toggle", false)) { + AlarmManager alarmManager = (AlarmManager) context.getSystemService( + Context.ALARM_SERVICE); + 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); + } + Log.d(TAG, "Alarm has been recovered"); + } + + } +} 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 6660f28..494c3f9 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmReceiver.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmReceiver.java @@ -1,23 +1,24 @@ package com.example.yink.amadeus; import android.app.Activity; +import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.media.MediaPlayer; import android.preference.PreferenceManager; import android.support.v4.content.WakefulBroadcastReceiver; +import android.util.Log; -public class AlarmReceiver extends WakefulBroadcastReceiver { +public class AlarmReceiver extends BroadcastReceiver { - static MediaPlayer m; - static boolean isPlaying = false; - static SharedPreferences settings; - static SharedPreferences.Editor editor; + private final String TAG = "AlarmReceiver"; @Override public void onReceive(Context context, Intent intent) { + + Log.d(TAG, "Broadcast received!"); + int[] ringtones = { R.raw.ringtone_gate_of_steiner, R.raw.ringtone_village, R.raw.ringtone_beginning_of_fight, R.raw.ringtone_easygoingness, @@ -25,36 +26,16 @@ public void onReceive(Context context, Intent intent) { R.raw.ringtone_over_the_sky }; - settings = PreferenceManager.getDefaultSharedPreferences(context); + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); int index = Integer.parseInt(settings.getString("ringtone", "0")); - m = MediaPlayer.create(context, ringtones[index]); - - m.setLooping(true); - m.start(); + Log.d(TAG, "Starting alarm..."); - if (m.isPlaying()) { - isPlaying = true; - } + Alarm.start(context, ringtones[index]); - ComponentName comp = new ComponentName(context.getPackageName(), - AlarmService.class.getName()); - startWakefulService(context, (intent.setComponent(comp))); + Intent service = new Intent(context, AlarmService.class); + context.startService(service); setResultCode(Activity.RESULT_OK); } - public static void stopRingtone(Context context) { - settings = PreferenceManager.getDefaultSharedPreferences(context); - if (isPlaying) { - editor = settings.edit(); - editor.putBoolean("alarm_toggle", false); - editor.apply(); - m.release(); - isPlaying = false; - } - } - - public static boolean isPlaying() { - return isPlaying; - } } \ No newline at end of file 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 5e61c72..ca5ef4d 100644 --- a/app/src/main/java/com/example/yink/amadeus/AlarmService.java +++ b/app/src/main/java/com/example/yink/amadeus/AlarmService.java @@ -8,22 +8,21 @@ import android.support.v4.app.NotificationCompat; public class AlarmService extends IntentService { - NotificationManager alarmNotificationManager; public AlarmService() { super("AlarmService"); } @Override - public void onHandleIntent(Intent intent) { + protected void onHandleIntent(Intent intent) { sendNotification(getString(R.string.incoming_call)); Intent launch = new Intent(this, LaunchActivity.class); + launch.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(launch); - AlarmReceiver.completeWakefulIntent(intent); } private void sendNotification(String msg) { - alarmNotificationManager = (NotificationManager) this + NotificationManager alarmNotificationManager = (NotificationManager) this .getSystemService(Context.NOTIFICATION_SERVICE); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, @@ -35,6 +34,6 @@ private void sendNotification(String msg) { .setContentText(msg); alarmNotificationBuilder.setContentIntent(contentIntent); - alarmNotificationManager.notify(1, alarmNotificationBuilder.build()); + alarmNotificationManager.notify(Alarm.ALARM_NOTIFICATION_ID, alarmNotificationBuilder.build()); } } \ No newline at end of file diff --git a/app/src/main/java/com/example/yink/amadeus/LangContext.java b/app/src/main/java/com/example/yink/amadeus/LangContext.java index 636dafe..cb37d59 100644 --- a/app/src/main/java/com/example/yink/amadeus/LangContext.java +++ b/app/src/main/java/com/example/yink/amadeus/LangContext.java @@ -19,12 +19,11 @@ public LangContext(Context base) { @SuppressWarnings("deprecation") public static ContextWrapper wrap(Context context) { - SharedPreferences sharedPreferences; Configuration config = context.getResources().getConfiguration(); - sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); - String lang = sharedPreferences.getString("lang", "ja"); + String lang = settings.getString("lang", "en"); Locale locale = new Locale(lang); Locale.setDefault(locale); @@ -34,6 +33,7 @@ public static ContextWrapper wrap(Context context) { } else { setSystemLocaleLegacy(config, locale); } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { context = context.createConfigurationContext(config); } else { @@ -54,6 +54,7 @@ public static Context load(Context context, String lang) { } else { setSystemLocaleLegacy(config, locale); } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { context = context.createConfigurationContext(config); } else { @@ -64,12 +65,12 @@ public static Context load(Context context, String lang) { } @SuppressWarnings("deprecation") - public static void setSystemLocaleLegacy(Configuration config, Locale locale){ + private static void setSystemLocaleLegacy(Configuration config, Locale locale){ config.locale = locale; } @TargetApi(Build.VERSION_CODES.N) - public static void setSystemLocale(Configuration config, Locale locale){ + private static void setSystemLocale(Configuration config, Locale locale){ config.setLocale(locale); } } 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 284c9f2..14c62b1 100644 --- a/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/LaunchActivity.java @@ -1,6 +1,5 @@ package com.example.yink.amadeus; -import android.app.AlarmManager; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; @@ -10,7 +9,6 @@ import android.media.MediaPlayer; import android.os.Bundle; import android.os.Handler; -import android.os.Vibrator; import android.preference.PreferenceManager; import android.support.v4.app.NotificationCompat; import android.support.v4.app.TaskStackBuilder; @@ -23,33 +21,29 @@ import android.widget.TextView; public class LaunchActivity extends AppCompatActivity { - ImageView connect, cancel, imageViewLogo; - TextView status; - Boolean isPressed = false; - SharedPreferences settings; - MediaPlayer m; - Handler aniHandle = new Handler(); - AlarmManager alarmManager; - PendingIntent pendingIntent; - NotificationManager notificationManager; - Vibrator v; - - int i = 0; - int id; - int duration = 20; + + private ImageView connect, cancel, logo; + private TextView status; + private Boolean isPressed = false; + private MediaPlayer m; + private Handler aniHandle = new Handler(); + + private int i = 0; + Runnable aniRunnable = new Runnable() { public void run() { + final int DURATION = 20; if (i < 39) { - i += 1; + i++; String imgName = "logo" + Integer.toString(i); - id = getResources().getIdentifier(imgName, "drawable", getPackageName()); - imageViewLogo.setImageDrawable((ContextCompat.getDrawable(LaunchActivity.this, id))); - aniHandle.postDelayed(this, duration); + int id = getResources().getIdentifier(imgName, "drawable", getPackageName()); + logo.setImageDrawable((ContextCompat.getDrawable(LaunchActivity.this, id))); + aniHandle.postDelayed(this, DURATION); } } }; - private static boolean isAppInstalled(Context context, String packageName) { + private boolean isAppInstalled(Context context, String packageName) { try { context.getPackageManager().getApplicationInfo(packageName, 0); return true; @@ -65,31 +59,22 @@ protected void onCreate(Bundle savedInstanceState) { connect = (ImageView) findViewById(R.id.imageView_connect); cancel = (ImageView) findViewById(R.id.imageView_cancel); status = (TextView) findViewById(R.id.textView_call); - imageViewLogo = (ImageView) findViewById(R.id.imageView_logo); - aniHandle.post(aniRunnable); - alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); - v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); - Intent alarmIntent = new Intent(LaunchActivity.this, AlarmReceiver.class); - pendingIntent = PendingIntent.getBroadcast(LaunchActivity.this, AlarmActivity.alarmCode, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); - notificationManager = (NotificationManager) getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE); - settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + logo = (ImageView) 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")) { status.setText(R.string.google_app_error); } - if (AlarmReceiver.isPlaying()) { + + if (Alarm.isPlaying()) { status.setText(R.string.incoming_call); - if (settings.getBoolean("vibrate", false)) { - long[] pattern = {500, 2000}; - v.vibrate(pattern, 0); - } win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); } - connect.setImageResource(R.drawable.connect_unselect); - cancel.setImageResource(R.drawable.cancel_unselect); - if (settings.getBoolean("show_notification", false)) { showNotification(); } @@ -102,7 +87,7 @@ public void onClick(View view) { connect.setImageResource(R.drawable.connect_select); - if (!AlarmReceiver.isPlaying()) { + if (!Alarm.isPlaying()) { m = MediaPlayer.create(LaunchActivity.this, R.raw.tone); m.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @@ -122,10 +107,7 @@ public void onCompletion(MediaPlayer mp) { } }); } else { - AlarmReceiver.stopRingtone(LaunchActivity.this); - notificationManager.cancel(1); - alarmManager.cancel(pendingIntent); - v.cancel(); + 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); @@ -140,10 +122,7 @@ public void onCompletion(MediaPlayer mp) { @Override public void onClick(View view) { cancel.setImageResource(R.drawable.cancel_select); - AlarmReceiver.stopRingtone(getApplicationContext()); - notificationManager.cancel(1); - alarmManager.cancel(pendingIntent); - v.cancel(); + 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); @@ -154,7 +133,7 @@ public void onClick(View view) { } }); - imageViewLogo.setOnClickListener(new View.OnClickListener() { + logo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent settingIntent = new Intent(LaunchActivity.this, SettingsActivity.class); @@ -171,13 +150,14 @@ protected void attachBaseContext(Context newBase) { @Override protected void onDestroy() { super.onDestroy(); + final Window win = getWindow(); - if (m != null) + if (m != null) { m.release(); - AlarmReceiver.stopRingtone(LaunchActivity.this); - notificationManager.cancel(1); - v.cancel(); + } + + 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); aniHandle.removeCallbacks(aniRunnable); @@ -185,19 +165,21 @@ protected void onDestroy() { @Override protected void onResume() { + super.onResume(); + if (isPressed) { status.setText(R.string.disconnected); } else if (!isAppInstalled(LaunchActivity.this, "com.google.android.googlequicksearchbox")) { status.setText(R.string.google_app_error); - } else if (AlarmReceiver.isPlaying()) { + } else if (Alarm.isPlaying()) { status.setText(R.string.incoming_call); } else { status.setText(R.string.call); } + isPressed = false; connect.setImageResource(R.drawable.connect_unselect); cancel.setImageResource(R.drawable.cancel_unselect); - super.onResume(); } private void showNotification() { 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 3f92f02..1d9d22e 100644 --- a/app/src/main/java/com/example/yink/amadeus/MainActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/MainActivity.java @@ -38,20 +38,21 @@ import java.util.Random; public class MainActivity extends AppCompatActivity { - final String TAG = "Amadeus"; - final int REQUEST_PERMISSION_RECORD_AUDIO = 1; - TextView subtitles; - ImageView kurisu; - Boolean isLoop = false; - Boolean isSpeaking = false; - VoiceLine[] voiceLines = VoiceLine.Line.getLines(); - AnimationDrawable animation; - int shaman_girls = -1; - Random randomgen = new Random(); - SharedPreferences settings; - String lang, recogLang; - MediaPlayer m; - String[] contextLang; + + private final String TAG = "MainActivity"; + + private TextView subtitles; + private ImageView kurisu; + private Boolean isLoop = false; + private Boolean isSpeaking = false; + private VoiceLine[] voiceLines = VoiceLine.Line.getLines(); + private AnimationDrawable animation; + private int shaman_girls = -1; + private Random randomgen = new Random(); + private SharedPreferences settings; + private String recogLang; + private MediaPlayer m; + private String[] contextLang; private SpeechRecognizer sr; @Override @@ -62,21 +63,22 @@ protected void onCreate(Bundle savedInstanceState) { subtitles = (TextView) findViewById(R.id.textView_subtitles); ImageView subtitlesBackground = (ImageView) findViewById(R.id.imageView_subtitles); settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); - lang = settings.getString("lang", "ja"); recogLang = settings.getString("recognition_lang", "ja-JP"); contextLang = recogLang.split("-"); + sr = SpeechRecognizer.createSpeechRecognizer(this); + sr.setRecognitionListener(new listener()); + final Handler handler = new Handler(); + final int REQUEST_PERMISSION_RECORD_AUDIO = 11302; + if (!settings.getBoolean("show_subtitles", false)) { subtitlesBackground.setVisibility(View.INVISIBLE); } - speak(voiceLines[VoiceLine.Line.HELLO]); - - final Handler handler = new Handler(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_PERMISSION_RECORD_AUDIO); } - sr = SpeechRecognizer.createSpeechRecognizer(this); - sr.setRecognitionListener(new listener()); + + speak(voiceLines[VoiceLine.Line.HELLO]); final Runnable loop = new Runnable() { @Override @@ -87,6 +89,7 @@ public void run() { } } }; + kurisu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -192,7 +195,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } } - public void speak(VoiceLine line) { + private void speak(VoiceLine line) { try { m = MediaPlayer.create(getApplicationContext(), line.getId()); final Visualizer v = new Visualizer(m.getAudioSessionId()); @@ -456,7 +459,8 @@ private void answerSpeech(String input, Context context) { } private class listener implements RecognitionListener { - final String TAG = "Amadeus.listener"; + + private final String TAG = "VoiceListener"; public void onReadyForSpeech(Bundle params) { Log.d(TAG, "Speech recognition start"); 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 f3bac3d..17f4490 100644 --- a/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java +++ b/app/src/main/java/com/example/yink/amadeus/SettingsActivity.java @@ -5,10 +5,8 @@ */ import android.content.Context; -import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; -import android.preference.PreferenceManager; import android.support.v4.app.FragmentActivity; public class SettingsActivity extends FragmentActivity { diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 0670e30..3a849b9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -24,6 +24,7 @@ Выберите рингтон для будильника Рингтон будильника Вибрация будильника + 24-часовой формат Привет. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 63cbe43..d79eeac 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -25,6 +25,7 @@ Alarm ringtone Select ringtone for alarm Vibrate on alarm + 24-hour format Hello. diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 7b6bb1b..b320580 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -39,6 +39,10 @@ android:key="ringtone" android:summary="@string/pref_alarm_ringtone_desc" android:title="@string/pref_alarm_ringtone" /> +