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

Commit 5eb6e6dc authored by Stanley Wang's avatar Stanley Wang
Browse files

Modified the PrintJobSettingsFragment

Test: manual
Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.print
Change-Id: Ide889b273be21421753cec99ce391adb756ab05c
parent 71945ff5
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -19,13 +19,16 @@
        android:title="@string/print_print_job">

    <Preference
            android:key="print_job_preference">
            android:key="print_job_preference"
            android:title="@string/print_print_job"
            settings:controller="com.android.settings.print.PrintJobPreferenceController">
    </Preference>

    <Preference
            android:key="print_job_message_preference"
            android:layout="@layout/print_job_summary"
            android:selectable="false">
            android:selectable="false"
            settings:controller="com.android.settings.print.PrintJobMessagePreferenceController">
    </Preference>

</PreferenceScreen>
+47 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 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.print;

import android.content.Context;
import android.print.PrintJob;
import android.print.PrintJobInfo;
import android.text.TextUtils;

public class PrintJobMessagePreferenceController extends PrintJobPreferenceControllerBase {

    public PrintJobMessagePreferenceController(Context context, String key) {
        super(context, key);
    }

    @Override
    protected void updateUi() {
        final PrintJob printJob = getPrintJob();

        if (printJob == null) {
            mFragment.finish();
            return;
        }

        if (printJob.isCancelled() || printJob.isCompleted()) {
            mFragment.finish();
            return;
        }

        final PrintJobInfo info = printJob.getInfo();
        final CharSequence status = info.getStatus(mContext.getPackageManager());
        mPreference.setVisible(!TextUtils.isEmpty(status));
        mPreference.setSummary(status);
    }
}
+115 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 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.print;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.print.PrintJob;
import android.print.PrintJobInfo;
import android.text.format.DateUtils;

import com.android.settings.R;

import java.text.DateFormat;

public class PrintJobPreferenceController extends PrintJobPreferenceControllerBase {

    public PrintJobPreferenceController(Context context, String key) {
        super(context, key);
    }

    @Override
    protected void updateUi() {
        final PrintJob printJob = getPrintJob();

        if (printJob == null) {
            mFragment.finish();
            return;
        }

        if (printJob.isCancelled() || printJob.isCompleted()) {
            mFragment.finish();
            return;
        }

        PrintJobInfo info = printJob.getInfo();

        switch (info.getState()) {
            case PrintJobInfo.STATE_CREATED: {
                mPreference.setTitle(mContext.getString(
                        R.string.print_configuring_state_title_template, info.getLabel()));
            }
            break;
            case PrintJobInfo.STATE_QUEUED:
            case PrintJobInfo.STATE_STARTED: {
                if (!printJob.getInfo().isCancelling()) {
                    mPreference.setTitle(mContext.getString(
                            R.string.print_printing_state_title_template, info.getLabel()));
                } else {
                    mPreference.setTitle(mContext.getString(
                            R.string.print_cancelling_state_title_template, info.getLabel()));
                }
            }
            break;

            case PrintJobInfo.STATE_FAILED: {
                mPreference.setTitle(mContext.getString(
                        R.string.print_failed_state_title_template, info.getLabel()));
            }
            break;

            case PrintJobInfo.STATE_BLOCKED: {
                if (!printJob.getInfo().isCancelling()) {
                    mPreference.setTitle(mContext.getString(
                            R.string.print_blocked_state_title_template, info.getLabel()));
                } else {
                    mPreference.setTitle(mContext.getString(
                            R.string.print_cancelling_state_title_template, info.getLabel()));
                }
            }
            break;
        }

        mPreference.setSummary(mContext.getString(R.string.print_job_summary,
                info.getPrinterName(), DateUtils.formatSameDayTime(
                        info.getCreationTime(), info.getCreationTime(), DateFormat.SHORT,
                        DateFormat.SHORT)));

        TypedArray a = mContext.obtainStyledAttributes(new int[]{
                android.R.attr.colorControlNormal});
        int tintColor = a.getColor(0, 0);
        a.recycle();

        switch (info.getState()) {
            case PrintJobInfo.STATE_QUEUED:
            case PrintJobInfo.STATE_STARTED: {
                Drawable icon = mContext.getDrawable(com.android.internal.R.drawable.ic_print);
                icon.setTint(tintColor);
                mPreference.setIcon(icon);
                break;
            }

            case PrintJobInfo.STATE_FAILED:
            case PrintJobInfo.STATE_BLOCKED: {
                Drawable icon = mContext.getDrawable(
                        com.android.internal.R.drawable.ic_print_error);
                icon.setTint(tintColor);
                mPreference.setIcon(icon);
                break;
            }
        }
    }
}
+99 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2018 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.print;

import android.content.Context;
import android.print.PrintJob;
import android.print.PrintJobId;
import android.print.PrintManager;
import android.util.Log;

import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;

public abstract class PrintJobPreferenceControllerBase extends BasePreferenceController implements
        LifecycleObserver, OnStart, OnStop, PrintManager.PrintJobStateChangeListener {
    private static final String TAG = "PrintJobPrefCtrlBase";

    private static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID";

    private final PrintManager mPrintManager;
    protected Preference mPreference;
    protected PrintJobSettingsFragment mFragment;
    protected PrintJobId mPrintJobId;

    public PrintJobPreferenceControllerBase(Context context, String key) {
        super(context, key);
        mPrintManager = ((PrintManager) mContext.getSystemService(
                Context.PRINT_SERVICE)).getGlobalPrintManagerForUser(mContext.getUserId());
    }

    @Override
    public void onStart() {
        mPrintManager.addPrintJobStateChangeListener(this);
        updateUi();
    }

    @Override
    public void onStop() {
        mPrintManager.removePrintJobStateChangeListener(this);
    }

    @Override
    public int getAvailabilityStatus() {
        return AVAILABLE;
    }

    @Override
    public void onPrintJobStateChanged(PrintJobId printJobId) {
        updateUi();
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mPreference = screen.findPreference(getPreferenceKey());
    }

    public void init(PrintJobSettingsFragment fragment) {
        mFragment = fragment;
        processArguments();
    }

    protected PrintJob getPrintJob() {
        return mPrintManager.getPrintJob(mPrintJobId);
    }

    protected abstract void updateUi();

    private void processArguments() {
        String printJobId = mFragment.getArguments().getString(EXTRA_PRINT_JOB_ID);
        if (printJobId == null) {
            printJobId = mFragment.getActivity().getIntent().getStringExtra(EXTRA_PRINT_JOB_ID);

            if (printJobId == null) {
                Log.w(TAG, EXTRA_PRINT_JOB_ID + " not set");
                mFragment.finish();
                return;
            }
        }
        mPrintJobId = PrintJobId.unflattenFromString(printJobId);
    }
}
+18 −182
Original line number Diff line number Diff line
@@ -17,86 +17,46 @@
package com.android.settings.print;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.print.PrintJob;
import android.print.PrintJobId;
import android.print.PrintJobInfo;
import android.print.PrintManager;
import android.print.PrintManager.PrintJobStateChangeListener;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import androidx.preference.Preference;

import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;

import java.text.DateFormat;
import com.android.settings.dashboard.DashboardFragment;

/**
 * Fragment for management of a print job.
 */
public class PrintJobSettingsFragment extends SettingsPreferenceFragment {
    private static final String LOG_TAG = PrintJobSettingsFragment.class.getSimpleName();
public class PrintJobSettingsFragment extends DashboardFragment {
    private static final String TAG = "PrintJobSettingsFragment";

    private static final int MENU_ITEM_ID_CANCEL = 1;
    private static final int MENU_ITEM_ID_RESTART = 2;

    private static final String EXTRA_PRINT_JOB_ID = "EXTRA_PRINT_JOB_ID";

    private static final String PRINT_JOB_PREFERENCE = "print_job_preference";
    private static final String PRINT_JOB_MESSAGE_PREFERENCE = "print_job_message_preference";

    private final PrintJobStateChangeListener mPrintJobStateChangeListener =
            new PrintJobStateChangeListener() {
    @Override
        public void onPrintJobStateChanged(PrintJobId printJobId) {
            updateUi();
    protected int getPreferenceScreenResId() {
        return R.xml.print_job_settings;
    }
    };

    private PrintManager mPrintManager;

    private Preference mPrintJobPreference;
    private Preference mMessagePreference;

    private PrintJobId mPrintJobId;

    @Override
    public int getMetricsCategory() {
        return MetricsEvent.PRINT_JOB_SETTINGS;
    protected String getLogTag() {
        return TAG;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view = super.onCreateView(inflater, container, savedInstanceState);

        addPreferencesFromResource(R.xml.print_job_settings);
        mPrintJobPreference = findPreference(PRINT_JOB_PREFERENCE);
        mMessagePreference = findPreference(PRINT_JOB_MESSAGE_PREFERENCE);

        mPrintManager = ((PrintManager) getActivity().getSystemService(
                Context.PRINT_SERVICE)).getGlobalPrintManagerForUser(
                        getActivity().getUserId());

        getActivity().getActionBar().setTitle(R.string.print_print_job);

        processArguments();

        setHasOptionsMenu(true);
    public void onAttach(Context context) {
        super.onAttach(context);
        use(PrintJobPreferenceController.class).init(this);
        use(PrintJobMessagePreferenceController.class).init(this);
    }

        return  view;
    @Override
    public int getMetricsCategory() {
        return MetricsEvent.PRINT_JOB_SETTINGS;
    }

    @Override
@@ -105,26 +65,11 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment {
        getListView().setEnabled(false);
    }

    @Override
    public void onStart() {
        super.onStart();
        mPrintManager.addPrintJobStateChangeListener(
                mPrintJobStateChangeListener);
        updateUi();
    }

    @Override
    public void onStop() {
        super.onStop();
        mPrintManager.removePrintJobStateChangeListener(
                mPrintJobStateChangeListener);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);

        PrintJob printJob = getPrintJob();
        final PrintJob printJob = use(PrintJobPreferenceController.class).getPrintJob();
        if (printJob == null) {
            return;
        }
@@ -144,7 +89,7 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment {

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        PrintJob printJob = getPrintJob();
        final PrintJob printJob = use(PrintJobPreferenceController.class).getPrintJob();

        if (printJob != null) {
            switch (item.getItemId()) {
@@ -164,113 +109,4 @@ public class PrintJobSettingsFragment extends SettingsPreferenceFragment {

        return super.onOptionsItemSelected(item);
    }

    private void processArguments() {
        String printJobId = getArguments().getString(EXTRA_PRINT_JOB_ID);
        if (printJobId == null) {
            printJobId = getIntent().getStringExtra(EXTRA_PRINT_JOB_ID);

            if (printJobId == null) {
                Log.w(LOG_TAG, EXTRA_PRINT_JOB_ID + " not set");
                finish();
                return;
            }
        }


        mPrintJobId = PrintJobId.unflattenFromString(printJobId);
    }

    private PrintJob getPrintJob() {
        return mPrintManager.getPrintJob(mPrintJobId);
    }

    private void updateUi() {
        PrintJob printJob = getPrintJob();

        if (printJob == null) {
            finish();
            return;
        }

        if (printJob.isCancelled() || printJob.isCompleted()) {
            finish();
            return;
        }

        PrintJobInfo info = printJob.getInfo();

        switch (info.getState()) {
            case PrintJobInfo.STATE_CREATED: {
                mPrintJobPreference.setTitle(getString(
                        R.string.print_configuring_state_title_template, info.getLabel()));
            } break;
            case PrintJobInfo.STATE_QUEUED:
            case PrintJobInfo.STATE_STARTED: {
                if (!printJob.getInfo().isCancelling()) {
                    mPrintJobPreference.setTitle(getString(
                            R.string.print_printing_state_title_template, info.getLabel()));
                } else {
                    mPrintJobPreference.setTitle(getString(
                            R.string.print_cancelling_state_title_template, info.getLabel()));
                }
            } break;

            case PrintJobInfo.STATE_FAILED: {
                mPrintJobPreference.setTitle(getString(
                        R.string.print_failed_state_title_template, info.getLabel()));
            } break;

            case PrintJobInfo.STATE_BLOCKED: {
                if (!printJob.getInfo().isCancelling()) {
                    mPrintJobPreference.setTitle(getString(
                            R.string.print_blocked_state_title_template, info.getLabel()));
                } else {
                    mPrintJobPreference.setTitle(getString(
                            R.string.print_cancelling_state_title_template, info.getLabel()));
                }
            } break;
        }

        mPrintJobPreference.setSummary(getString(R.string.print_job_summary,
                info.getPrinterName(), DateUtils.formatSameDayTime(
                        info.getCreationTime(), info.getCreationTime(), DateFormat.SHORT,
                        DateFormat.SHORT)));

        TypedArray a = getActivity().obtainStyledAttributes(new int[]{
                android.R.attr.colorControlNormal});
        int tintColor = a.getColor(0, 0);
        a.recycle();

        switch (info.getState()) {
            case PrintJobInfo.STATE_QUEUED:
            case PrintJobInfo.STATE_STARTED: {
                Drawable icon = getActivity().getDrawable(com.android.internal.R.drawable.ic_print);
                icon.setTint(tintColor);
                mPrintJobPreference.setIcon(icon);
                break;
            }

            case PrintJobInfo.STATE_FAILED:
            case PrintJobInfo.STATE_BLOCKED: {
                Drawable icon = getActivity().getDrawable(
                        com.android.internal.R.drawable.ic_print_error);
                icon.setTint(tintColor);
                mPrintJobPreference.setIcon(icon);
                break;
            }
        }

        CharSequence status = info.getStatus(getPackageManager());
        if (!TextUtils.isEmpty(status)) {
            if (getPreferenceScreen().findPreference(PRINT_JOB_MESSAGE_PREFERENCE) == null) {
                getPreferenceScreen().addPreference(mMessagePreference);
            }
            mMessagePreference.setSummary(status);
        } else {
            getPreferenceScreen().removePreference(mMessagePreference);
        }

        getActivity().invalidateOptionsMenu();
    }
}
Loading