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

Commit 6daa13b4 authored by Stanley Wang's avatar Stanley Wang Committed by Android (Google) Code Review
Browse files

Merge "Modified the PrintJobSettingsFragment"

parents c32de1a2 5eb6e6dc
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