From 59a4572513c330efacf6db36f25638c28a938829 Mon Sep 17 00:00:00 2001 From: Phillip Hsu Date: Tue, 20 Sep 2016 20:27:31 -0700 Subject: [PATCH] Extend from RingtonePreference --- .../settings/ThemedRingtonePreference.java | 216 ++---------------- 1 file changed, 15 insertions(+), 201 deletions(-) diff --git a/app/src/main/java/com/philliphsu/clock2/settings/ThemedRingtonePreference.java b/app/src/main/java/com/philliphsu/clock2/settings/ThemedRingtonePreference.java index 46aa4f8..bec1087 100644 --- a/app/src/main/java/com/philliphsu/clock2/settings/ThemedRingtonePreference.java +++ b/app/src/main/java/com/philliphsu/clock2/settings/ThemedRingtonePreference.java @@ -1,32 +1,12 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package com.philliphsu.clock2.settings; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; -import android.content.res.TypedArray; -import android.media.RingtoneManager; import android.net.Uri; import android.os.Parcelable; -import android.preference.Preference; -import android.preference.PreferenceManager; +import android.preference.RingtonePreference; import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; import android.util.AttributeSet; import com.philliphsu.clock2.RingtonePickerDialog; @@ -35,19 +15,11 @@ import com.philliphsu.clock2.RingtonePickerDialog; * Created by Phillip Hsu on 9/20/2016. * *

A modified version of the framework's {@link android.preference.RingtonePreference} that - * uses our {@link RingtonePickerDialog} instead of the system's ringtone picker.

Because - * of this difference, we cannot just extend from RingtonePreference and make - * our modifications. + * uses our {@link RingtonePickerDialog} instead of the system's ringtone picker.

*/ -public class ThemedRingtonePreference extends Preference implements RingtonePickerDialog.OnRingtoneSelectedListener { - +public class ThemedRingtonePreference extends RingtonePreference + implements RingtonePickerDialog.OnRingtoneSelectedListener { private static final String TAG = "ThemedRingtonePreference"; - - private int mRingtoneType; - private boolean mShowDefault; - private boolean mShowSilent; - - private int mRequestCode; private RingtonePickerDialogController mController; @@ -68,68 +40,8 @@ public class ThemedRingtonePreference extends Preference implements RingtonePick super(context); } - /** - * Returns the sound type(s) that are shown in the picker. - * - * @return The sound type(s) that are shown in the picker. - * @see #setRingtoneType(int) - */ - public int getRingtoneType() { - return mRingtoneType; - } - - /** - * Sets the sound type(s) that are shown in the picker. - * - * @param type The sound type(s) that are shown in the picker. - * @see RingtoneManager#EXTRA_RINGTONE_TYPE - */ - public void setRingtoneType(int type) { - mRingtoneType = type; - } - - /** - * Returns whether to a show an item for the default sound/ringtone. - * - * @return Whether to show an item for the default sound/ringtone. - */ - public boolean getShowDefault() { - return mShowDefault; - } - - /** - * Sets whether to show an item for the default sound/ringtone. The default - * to use will be deduced from the sound type(s) being shown. - * - * @param showDefault Whether to show the default or not. - * @see RingtoneManager#EXTRA_RINGTONE_SHOW_DEFAULT - */ - public void setShowDefault(boolean showDefault) { - mShowDefault = showDefault; - } - - /** - * Returns whether to a show an item for 'Silent'. - * - * @return Whether to show an item for 'Silent'. - */ - public boolean getShowSilent() { - return mShowSilent; - } - - /** - * Sets whether to show an item for 'Silent'. - * - * @param showSilent Whether to show 'Silent'. - * @see RingtoneManager#EXTRA_RINGTONE_SHOW_SILENT - */ - public void setShowSilent(boolean showSilent) { - mShowSilent = showSilent; - } - @Override protected void onClick() { - // Launch the ringtone picker if (mController == null) { mController = newController(); } @@ -145,119 +57,21 @@ public class ThemedRingtonePreference extends Preference implements RingtonePick mController.tryRestoreCallback(TAG); } - private RingtonePickerDialogController newController() { - // TODO: BAD! - AppCompatActivity a = (AppCompatActivity) getContext(); - return new RingtonePickerDialogController(a.getSupportFragmentManager(), this); - } - - /** - * Prepares the intent to launch the ringtone picker. This can be modified - * to adjust the parameters of the ringtone picker. - * - * @param ringtonePickerIntent The ringtone picker intent that can be - * modified by putting extras. - */ - protected void onPrepareRingtonePickerIntent(Intent ringtonePickerIntent) { - - ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, - onRestoreRingtone()); - - ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, mShowDefault); - if (mShowDefault) { - ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_DEFAULT_URI, - RingtoneManager.getDefaultUri(getRingtoneType())); - } - - ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, mShowSilent); - ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, mRingtoneType); - ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getTitle()); -// ringtonePickerIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_AUDIO_ATTRIBUTES_FLAGS, -// AudioAttributes.FLAG_BYPASS_INTERRUPTION_POLICY); - } - - /** - * Called when a ringtone is chosen. - *

- * By default, this saves the ringtone URI to the persistent storage as a - * string. - * - * @param ringtoneUri The chosen ringtone's {@link Uri}. Can be null. - */ - protected void onSaveRingtone(Uri ringtoneUri) { - persistString(ringtoneUri != null ? ringtoneUri.toString() : ""); - } - - /** - * Called when the chooser is about to be shown and the current ringtone - * should be marked. Can return null to not mark any ringtone. - *

- * By default, this restores the previous ringtone URI from the persistent - * storage. - * - * @return The ringtone to be marked as the current ringtone. - */ - protected Uri onRestoreRingtone() { - final String uriString = getPersistedString(null); - return !TextUtils.isEmpty(uriString) ? Uri.parse(uriString) : null; - } - - @Override - protected Object onGetDefaultValue(TypedArray a, int index) { - return a.getString(index); - } - - @Override - protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValueObj) { - String defaultValue = (String) defaultValueObj; - - /* - * This method is normally to make sure the internal state and UI - * matches either the persisted value or the default value. Since we - * don't show the current value in the UI (until the dialog is opened) - * and we don't keep local state, if we are restoring the persisted - * value we don't need to do anything. - */ - if (restorePersistedValue) { - return; - } - - // If we are setting to the default value, we should persist it. - if (!TextUtils.isEmpty(defaultValue)) { - onSaveRingtone(Uri.parse(defaultValue)); - } - } - - @Override - protected void onAttachedToHierarchy(PreferenceManager preferenceManager) { - super.onAttachedToHierarchy(preferenceManager); - -// preferenceManager.registerOnActivityResultListener(this); -// mRequestCode = preferenceManager.getNextRequestCode(); - } - - public boolean onActivityResult(int requestCode, int resultCode, Intent data) { - - if (requestCode == mRequestCode) { - - if (data != null) { - Uri uri = data.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI); - - if (callChangeListener(uri != null ? uri.toString() : "")) { - onSaveRingtone(uri); - } - } - - return true; - } - - return false; - } - @Override public void onRingtoneSelected(Uri uri) { if (callChangeListener(uri != null ? uri.toString() : "")) { onSaveRingtone(uri); } } + + @Override + public boolean onActivityResult(int requestCode, int resultCode, Intent data) { + return false; + } + + private RingtonePickerDialogController newController() { + // TODO: BAD! + AppCompatActivity a = (AppCompatActivity) getContext(); + return new RingtonePickerDialogController(a.getSupportFragmentManager(), this); + } }