13b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa/*
23b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * Copyright (C) 2015 The Android Open Source Project
33b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa *
43b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * Licensed under the Apache License, Version 2.0 (the "License");
53b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * you may not use this file except in compliance with the License.
63b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * You may obtain a copy of the License at
73b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa *
83b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa *      http://www.apache.org/licenses/LICENSE-2.0
93b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa *
103b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * Unless required by applicable law or agreed to in writing, software
113b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * distributed under the License is distributed on an "AS IS" BASIS,
123b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * See the License for the specific language governing permissions and
143b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * limitations under the License.
153b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa */
163b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
173b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwapackage com.android.documentsui;
183b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
193b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.annotation.Nullable;
203b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.app.Fragment;
213b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.app.FragmentManager;
223b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.app.FragmentTransaction;
233b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.os.Bundle;
243b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.view.LayoutInflater;
253b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.view.View;
263b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.view.ViewGroup;
273b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.widget.Button;
283b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.widget.ImageView;
293b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwaimport android.widget.TextView;
303b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
313b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa/**
323b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa * A message bar displaying some info/error messages and a Dismiss button.
333b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa */
343b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwapublic class MessageBar extends Fragment {
353b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    private View mView;
363b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    private ViewGroup mContainer;
373b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
383b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    /**
393b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa     * Creates an instance of a MessageBar. Note that the new MessagBar is not visible by default,
403b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa     * and has to be shown by calling MessageBar.show.
413b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa     */
423b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    public static MessageBar create(FragmentManager fm) {
433b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        final MessageBar fragment = new MessageBar();
443b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
453b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        final FragmentTransaction ft = fm.beginTransaction();
463b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        ft.replace(R.id.container_message_bar, fragment);
473b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        ft.commitAllowingStateLoss();
483b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
493b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        return fragment;
503b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    }
513b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
523b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    /**
533b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa     * Sets the info message. Can be null, in which case no info message will be displayed. The
543b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa     * message bar layout will be adjusted accordingly.
553b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa     */
563b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    public void setInfo(@Nullable String info) {
573b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        View infoContainer = mView.findViewById(R.id.container_info);
583b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        if (info != null) {
593b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            TextView infoText = (TextView) mView.findViewById(R.id.textview_info);
603b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            infoText.setText(info);
613b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            infoContainer.setVisibility(View.VISIBLE);
623b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        } else {
633b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            infoContainer.setVisibility(View.GONE);
643b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        }
653b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    }
663b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
673b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    /**
683b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa     * Sets the error message. Can be null, in which case no error message will be displayed. The
693b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa     * message bar layout will be adjusted accordingly.
703b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa     */
713b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    public void setError(@Nullable String error) {
7291caed80b178e5f9cda84a2535d27d67710a5647Ben Kwa        View errorView = mView.findViewById(R.id.container_error);
733b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        if (error != null) {
743b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            TextView errorText = (TextView) mView.findViewById(R.id.textview_error);
753b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            errorText.setText(error);
763b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            errorView.setVisibility(View.VISIBLE);
773b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        } else {
783b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            errorView.setVisibility(View.GONE);
793b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        }
803b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    }
813b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
823b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    @Override
833b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    public View onCreateView(
843b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
853b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
863b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        mView = inflater.inflate(R.layout.fragment_message_bar, container, false);
873b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
883b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        ImageView infoIcon = (ImageView) mView.findViewById(R.id.icon_info);
893b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        infoIcon.setImageResource(R.drawable.ic_dialog_info);
903b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
913b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        ImageView errorIcon = (ImageView) mView.findViewById(R.id.icon_error);
923b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        errorIcon.setImageResource(R.drawable.ic_dialog_alert);
933b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
943b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        Button dismiss = (Button) mView.findViewById(R.id.button_dismiss);
953b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        dismiss.setOnClickListener(
963b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa                new View.OnClickListener() {
973b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa                    @Override
983b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa                    public void onClick(View v) {
993b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa                        hide();
1003b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa                    }
1013b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa                });
1023b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
1033b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        mContainer = container;
1043b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
1053b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        return mView;
1063b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    }
1073b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
108f862155e3476f8d9644d57072a6d92375bde628eSteve McKay    public void hide() {
1093b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        // The container view is used to show/hide the error bar. If a container is not provided,
1103b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        // fall back to showing/hiding the error bar View, which also works, but does not provide
1113b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        // the same animated transition.
1123b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        if (mContainer != null) {
1133b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            mContainer.setVisibility(View.GONE);
1143b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        } else {
1153b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            mView.setVisibility(View.GONE);
1163b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        }
1173b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    }
1183b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa
119f862155e3476f8d9644d57072a6d92375bde628eSteve McKay    public void show() {
1203b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        // The container view is used to show/hide the error bar. If a container is not provided,
1213b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        // fall back to showing/hiding the error bar View, which also works, but does not provide
1223b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        // the same animated transition.
1233b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        if (mContainer != null) {
1243b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            mContainer.setVisibility(View.VISIBLE);
1253b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        } else {
1263b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa            mView.setVisibility(View.VISIBLE);
1273b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa        }
1283b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa    }
1293b19e31e18ab89acb22eefa8925f90ce6d63f7f7Ben Kwa}
130