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

Commit 18752568 authored by Jeff Davidson's avatar Jeff Davidson
Browse files

Support ACTION_CHANGE_ACTIVE for network scorers.

Bug: 13785473
Change-Id: Ida54d4620f95c773c4c4239e9f29c1b987fd6ba2
parent 1502fba4
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1670,6 +1670,16 @@
            </intent-filter>
        </activity>

        <activity android:name=".ActiveNetworkScorerDialog"
                  android:label="@string/network_scorer_application"
                  android:excludeFromRecents="true"
                  android:theme="@*android:style/Theme.Holo.Light.Dialog.Alert">
            <intent-filter>
                <action android:name="android.net.scoring.CHANGE_ACTIVE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

       <activity android:name=".PairNfcDevice"
                android:taskAffinity="com.android.settings"
                android:parentActivityName="Settings$SecuritySettingsActivity"
+7 −0
Original line number Diff line number Diff line
@@ -2410,6 +2410,13 @@
    <string name="sms_change_default_dialog_text" translatable="true">Use <xliff:g id="new_app">%1$s</xliff:g> instead of <xliff:g id="current_app">%2$s</xliff:g> as your SMS app?</string>
    <string name="sms_change_default_no_previous_dialog_text" translatable="true">Use <xliff:g id="new_app">%s</xliff:g> as your SMS app?</string>

    <!-- Network Scorer Application -->
    <!-- TODO: Final UX and strings, then mark these as translatable. -->
    <string name="network_scorer_application" translatable="false">Active network scorer</string>
    <string name="network_scorer_change_active_dialog_title" translatable="false">Change network scorer?</string>
    <string name="network_scorer_change_active_dialog_text" translatable="false">Use <xliff:g id="new_app">%1$s</xliff:g> instead of <xliff:g id="current_app">%2$s</xliff:g> as your network scorer?</string>
    <string name="network_scorer_change_active_no_previous_dialog_text" translatable="false">Use <xliff:g id="new_app">%s</xliff:g> as your network scorer?</string>

    <!-- The SIM operator is not known [CHAR_ LIMIT=50]-->
    <string name="mobile_unknown_sim_operator" translatable="true">Uknown SIM operator</string>

+118 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2014 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.android.settings;

import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.NetworkScoreManager;
import android.net.NetworkScorerAppManager;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;

import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
import com.android.settings.R;

/**
 * Dialog to allow a user to select a new network scorer.
 *
 * <p>Finishes with {@link #RESULT_CANCELED} in all circumstances unless the scorer is successfully
 * changed or was already set to the new value (in which case it finishes with {@link #RESULT_OK}).
 */
public final class ActiveNetworkScorerDialog extends AlertActivity implements
        DialogInterface.OnClickListener {
    private static final String TAG = "ActiveNetworkScorerDialog";

    private String mNewPackageName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = getIntent();
        mNewPackageName = intent.getStringExtra(NetworkScoreManager.EXTRA_PACKAGE_NAME);

        if (!buildDialog()) {
            finish();
        }
    }

    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
            case BUTTON_POSITIVE:
                NetworkScoreManager nsm =
                    (NetworkScoreManager) getSystemService(Context.NETWORK_SCORE_SERVICE);
                if (nsm.setActiveScorer(mNewPackageName)) {
                    setResult(RESULT_OK);
                }
                break;
            case BUTTON_NEGATIVE:
                break;
        }
    }

    private boolean buildDialog() {
        if (!NetworkScorerAppManager.isPackageValidScorer(this, mNewPackageName)) {
            Log.e(TAG, "New package " + mNewPackageName + " is not a valid scorer.");
            return false;
        }

        String oldPackageName = NetworkScorerAppManager.getActiveScorer(this);
        if (TextUtils.equals(oldPackageName, mNewPackageName)) {
            Log.i(TAG, "New package " + mNewPackageName + " is already the active scorer.");
            // Set RESULT_OK to indicate to the caller that the "switch" was successful.
            setResult(RESULT_OK);
            return false;
        }

        // Compose dialog.
        PackageManager pm = getPackageManager();
        CharSequence oldName = null;
        CharSequence newName;
        try {
            if (oldPackageName != null) {
                oldName = pm.getApplicationInfo(oldPackageName, 0).loadLabel(pm);
            }
            newName = pm.getApplicationInfo(mNewPackageName, 0).loadLabel(pm);
        } catch (NameNotFoundException e) {
            Log.e(TAG, "Unable to look up package info for scorers", e);
            return false;
        }

        final AlertController.AlertParams p = mAlertParams;
        p.mTitle = getString(R.string.network_scorer_change_active_dialog_title);
        if (oldPackageName != null) {
            p.mMessage = getString(R.string.network_scorer_change_active_dialog_text, newName,
                    oldName);
        } else {
            p.mMessage = getString(R.string.network_scorer_change_active_no_previous_dialog_text,
                    newName);
        }
        p.mPositiveButtonText = getString(R.string.yes);
        p.mNegativeButtonText = getString(R.string.no);
        p.mPositiveButtonListener = this;
        p.mNegativeButtonListener = this;
        setupAlert();

        return true;
    }
}