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

Commit fd3e0175 authored by Ulas Kirazci's avatar Ulas Kirazci
Browse files

DO NOT MERGE. Do not access metadatadb from main thread.

Also fix Refresh button replicating itself on orientation change.

Bug: 19786650
Change-Id: I19a964d69d9141ba6515bbe19a120d4685628fe3
parent 60835872
Loading
Loading
Loading
Loading
+44 −20
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
@@ -106,17 +107,28 @@ public final class DictionarySettingsFragment extends PreferenceFragment

    @Override
    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
        final String metadataUri =
                MetadataDbHelper.getMetadataUriAsString(getActivity(), mClientId);
        // We only add the "Refresh" button if we have a non-empty URL to refresh from. If the
        // URL is empty, of course we can't refresh so it makes no sense to display this.
        new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... params) {
                return MetadataDbHelper.getMetadataUriAsString(getActivity(), mClientId);
            }

            @Override
            protected void onPostExecute(String metadataUri) {
                // We only add the "Refresh" button if we have a non-empty URL to refresh from. If
                // the URL is empty, of course we can't refresh so it makes no sense to display
                // this.
                if (!TextUtils.isEmpty(metadataUri)) {
            mUpdateNowMenu =
                    menu.add(Menu.NONE, MENU_UPDATE_NOW, 0, R.string.check_for_updates_now);
                    if (mUpdateNowMenu == null) {
                        mUpdateNowMenu = menu.add(Menu.NONE, MENU_UPDATE_NOW, 0,
                                        R.string.check_for_updates_now);
                        mUpdateNowMenu.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
                    }
                    refreshNetworkState();
                }
            }
        }.execute();
    }

    @Override
    public void onResume() {
@@ -124,18 +136,25 @@ public final class DictionarySettingsFragment extends PreferenceFragment
        mChangedSettings = false;
        UpdateHandler.registerUpdateEventListener(this);
        final Activity activity = getActivity();
        final IntentFilter filter = new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        getActivity().registerReceiver(mConnectivityChangedReceiver, filter);
        refreshNetworkState();

        new Thread("onResume") {
            @Override
            public void run() {
                if (!MetadataDbHelper.isClientKnown(activity, mClientId)) {
            Log.i(TAG, "Unknown dictionary pack client: " + mClientId + ". Requesting info.");
                    Log.i(TAG, "Unknown dictionary pack client: " + mClientId
                            + ". Requesting info.");
                    final Intent unknownClientBroadcast =
                            new Intent(DictionaryPackConstants.UNKNOWN_DICTIONARY_PROVIDER_CLIENT);
                    unknownClientBroadcast.putExtra(
                            DictionaryPackConstants.DICTIONARY_PROVIDER_CLIENT_EXTRA, mClientId);
                    activity.sendBroadcast(unknownClientBroadcast);
                }
        final IntentFilter filter = new IntentFilter();
        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        getActivity().registerReceiver(mConnectivityChangedReceiver, filter);
        refreshNetworkState();
            }
        }.start();
    }

    @Override
@@ -375,9 +394,14 @@ public final class DictionarySettingsFragment extends PreferenceFragment
    private void cancelRefresh() {
        UpdateHandler.unregisterUpdateEventListener(this);
        final Context context = getActivity();
        new Thread("cancelByHand") {
            @Override
            public void run() {
                UpdateHandler.cancelUpdate(context, mClientId);
                stopLoadingAnimation();
            }
        }.start();
    }

    private void startLoadingAnimation() {
        mLoadingView.setVisibility(View.VISIBLE);