Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85b83cc9 authored by jiangmin's avatar jiangmin Committed by Adnan Begovic
Browse files

DeskClock: Add selection for external device

User can choose external audio file as the ringtone for each alarm.

Change-Id: I98fe4f823e29161f4aa45d0bbca6c90d94c689f9
parent d879b654
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -52,4 +52,9 @@
  <string name="alarm_type_ringtone">铃声</string>
  <string name="alarm_type_random">随机</string>
  <string name="warn_silent_alarm_title">闹钟音量为静音</string>
  <string name="alarm_select">选择铃声</string>
  <string name="alarm_select_ringtone">铃声</string>
  <string name="alarm_select_external">音乐</string>
  <string name="alarm_select_ok">确定</string>
  <string name="alarm_select_cancel">取消</string>
</resources>
+11 −0
Original line number Diff line number Diff line
@@ -82,4 +82,15 @@

    <!-- Warn Silent Alarm title -->
    <string name="warn_silent_alarm_title">Alarm volume is silent</string>

    <!-- Select the source of the alarm -->
    <string name="alarm_select">Select Alarm</string>
    <!-- Select the ringtone as alarm -->
    <string name="alarm_select_ringtone">Ringtone</string>
    <!-- Select the alarm from external device -->
    <string name="alarm_select_external">Music</string>
    <!-- Ok for selection -->
    <string name="alarm_select_ok">OK</string>
    <!-- Cancel for selection -->
    <string name="alarm_select_cancel">Cancel</string>
</resources>
+75 −8
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ public class AlarmClockFragment extends DeskClockFragment implements

    private static final int REQUEST_CODE_RINGTONE = 1;
    private static final int REQUEST_CODE_PROFILE = 2;
    private static final int REQUEST_CODE_EXTERN_AUDIO = 3;

    // This extra is used when receiving an intent to create an alarm, but no alarm details
    // have been passed in, so the alarm page should start the process of creating a new alarm.
@@ -144,6 +145,10 @@ public class AlarmClockFragment extends DeskClockFragment implements
    private View mUndoFrame;

    private Alarm mSelectedAlarm;
    private static final String SEL_AUDIO_SRC = "audio/*";
    private static final int SEL_SRC_RINGTONE = 0;
    private static final int SEL_SRC_EXTERNAL = 1;
    private int mSelectSource = SEL_SRC_RINGTONE;
    private long mScrollToAlarmId = -1;

    private Loader mCursorLoader = null;
@@ -698,6 +703,50 @@ public class AlarmClockFragment extends DeskClockFragment implements
        mAdapter.swapCursor(null);
    }

    private void sendPickIntent() {
        if (mSelectSource == SEL_SRC_RINGTONE) {
            Uri oldRingtone = Alarm.NO_RINGTONE_URI.equals(
                AlarmClockFragment.this.mSelectedAlarm.alert) ? null : mSelectedAlarm.alert;
            final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,
                oldRingtone);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,
                RingtoneManager.TYPE_ALARM);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT,
                false);
            AlarmClockFragment.this.startActivityForResult(intent, REQUEST_CODE_RINGTONE);
        } else {
            final Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
            intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI,
                AlarmClockFragment.this.mSelectedAlarm.alert);
            intent.setType(SEL_AUDIO_SRC);
            AlarmClockFragment.this.startActivityForResult(intent, REQUEST_CODE_EXTERN_AUDIO);
        }
    }

    private class RingTonePickerDialogListener implements DialogInterface.OnClickListener {
        private AlarmClockFragment alarm;

        public RingTonePickerDialogListener(AlarmClockFragment clock) {
            alarm = clock;
        }

        public void onClick(DialogInterface dialog, int which) {
            switch (which) {
                case SEL_SRC_RINGTONE:
                case SEL_SRC_EXTERNAL:
                    alarm.mSelectSource = which;
                    break;
                case DialogInterface.BUTTON_POSITIVE:
                    alarm.sendPickIntent();
                case DialogInterface.BUTTON_NEGATIVE:
                default:
                    dialog.dismiss();
                    break;
            }
        }
    }

    private void launchRingTonePicker(final Alarm alarm) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.alarm_picker_title).setItems(
@@ -724,12 +773,18 @@ public class AlarmClockFragment extends DeskClockFragment implements

    private void launchSingleRingTonePicker(Alarm alarm) {
        mSelectedAlarm = alarm;
        Uri oldRingtone = Alarm.NO_RINGTONE_URI.equals(alarm.alert) ? null : alarm.alert;
        final Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, oldRingtone);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
        intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
        startActivityForResult(intent, REQUEST_CODE_RINGTONE);
        RingTonePickerDialogListener listener = new RingTonePickerDialogListener(this);
        new AlertDialog.Builder(getActivity())
                .setTitle(getResources().getString(R.string.alarm_select))
                .setSingleChoiceItems(
                        new String[] {
                                getResources().getString(R.string.alarm_select_ringtone),
                                getResources().getString(R.string.alarm_select_external) },
                        mSelectSource, listener)
                .setPositiveButton(getResources().getString(R.string.alarm_select_ok),listener)
                .setNegativeButton(getResources().getString(
                        R.string.alarm_select_cancel),listener)
                .show();
    }

    private void launchProfilePicker(Alarm alarm) {
@@ -741,11 +796,22 @@ public class AlarmClockFragment extends DeskClockFragment implements
        startActivityForResult(intent, REQUEST_CODE_PROFILE);
    }

    private void saveRingtoneUri(Intent intent) {
        Uri uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
    private Uri getRingtoneUri(Intent intent) {
        Uri uri;
        if (mSelectSource == SEL_SRC_RINGTONE) {
            uri = intent.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
        } else {
            uri = intent.getData();
        }
        if (uri == null) {
            uri = Alarm.NO_RINGTONE_URI;
        }
        return uri;
    }

    private void saveRingtoneUri(Intent intent) {

        Uri uri =  getRingtoneUri(intent);
        mSelectedAlarm.alert = uri;

        // Save the last selected ringtone as the default for new alarms
@@ -798,6 +864,7 @@ public class AlarmClockFragment extends DeskClockFragment implements
        if (resultCode == Activity.RESULT_OK) {
            switch (requestCode) {
                case REQUEST_CODE_RINGTONE:
                case REQUEST_CODE_EXTERN_AUDIO:
                    saveRingtoneUri(data);
                    break;
                case REQUEST_CODE_PROFILE: