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

Commit 82e7bc11 authored by Amith Yamasani's avatar Amith Yamasani
Browse files

Fix for Ringtones not being saved when using Preference fragments.

Bug: 2988732

RingtonePreference was calling startActivityForResult on Activity instead
of on Fragment, so the result was not being delivered to the fragment.

Setting a fragment owner on the PreferenceManager instance so that it can
be used instead of getActivity() for launching the intent.

Not exposing any new public APIs at this time.
parent 00ec8694
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -144,6 +144,7 @@ public abstract class PreferenceFragment extends Fragment implements
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mPreferenceManager = new PreferenceManager(getActivity(), FIRST_REQUEST_CODE);
        mPreferenceManager.setFragment(this);
        mPreferenceManager.setOnPreferenceTreeClickListener(this);
    }

+24 −6
Original line number Diff line number Diff line
@@ -16,12 +16,7 @@

package android.preference;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -34,6 +29,10 @@ import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.util.Log;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;

/**
 * Used to help create {@link Preference} hierarchies
 * from activities or XML.
@@ -60,6 +59,11 @@ public class PreferenceManager {
     */
    private Activity mActivity;

    /**
     * Fragment that owns this instance.
     */
    private PreferenceFragment mFragment;

    /**
     * The context to use. This should always be set.
     * 
@@ -159,6 +163,20 @@ public class PreferenceManager {
        setSharedPreferencesName(getDefaultSharedPreferencesName(context));
    }

    /**
     * Sets the owning preference fragment
     */
    void setFragment(PreferenceFragment fragment) {
        mFragment = fragment;
    }

    /**
     * Returns the owning preference fragment, if any.
     */
    PreferenceFragment getFragment() {
        return mFragment;
    }

    /**
     * Returns a list of {@link Activity} (indirectly) that match a given
     * {@link Intent}.
+6 −2
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.net.Uri;
import android.provider.Settings.System;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;

/**
 * A {@link Preference} that allows the user to choose a ringtone from those on the device. 
@@ -137,8 +136,13 @@ public class RingtonePreference extends Preference implements
        // Launch the ringtone picker
        Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
        onPrepareRingtonePickerIntent(intent);
        PreferenceFragment owningFragment = getPreferenceManager().getFragment();
        if (owningFragment != null) {
            owningFragment.startActivityForResult(intent, mRequestCode);
        } else {
            getPreferenceManager().getActivity().startActivityForResult(intent, mRequestCode);
        }
    }

    /**
     * Prepares the intent to launch the ringtone picker. This can be modified