15dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk/*
25dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk * Copyright (C) 2015 The Android Open Source Project
35dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk *
45dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk * Licensed under the Apache License, Version 2.0 (the "License");
55dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk * you may not use this file except in compliance with the License.
65dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk * You may obtain a copy of the License at
75dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk *
85dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk *      http://www.apache.org/licenses/LICENSE-2.0
95dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk *
105dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk * Unless required by applicable law or agreed to in writing, software
115dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk * distributed under the License is distributed on an "AS IS" BASIS,
125dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk * See the License for the specific language governing permissions and
145dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk * limitations under the License.
155dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk */
165dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkpackage com.android.settings.applications;
175dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
185dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkimport android.app.Fragment;
195dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkimport android.os.Bundle;
205dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkimport android.view.LayoutInflater;
215dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkimport android.view.Menu;
225dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkimport android.view.MenuInflater;
235dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkimport android.view.MenuItem;
245dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkimport android.view.View;
255dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkimport android.view.ViewGroup;
265dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
275dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkimport com.android.settings.R;
28b5aa73f46f812ba03518a6d1ac218e3af5975236Jason Monkimport com.android.settings.Utils;
295dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
305dc70b10851656487f8ac6e503fd9daab745aad5Jason Monkpublic class RunningServices extends Fragment {
315dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
325dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    private static final int SHOW_RUNNING_SERVICES = 1;
335dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    private static final int SHOW_BACKGROUND_PROCESSES = 2;
345dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
355dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    private RunningProcessesView mRunningProcessesView;
365dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    private Menu mOptionsMenu;
375dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    private View mLoadingContainer;
385dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
395dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    @Override
405dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    public void onCreate(Bundle savedInstanceState) {
415dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        super.onCreate(savedInstanceState);
425dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
435dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        setHasOptionsMenu(true);
445dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    }
455dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
465dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    @Override
475dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    public View onCreateView(LayoutInflater inflater, ViewGroup container,
485dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk                Bundle savedInstanceState) {
495dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        View rootView = inflater.inflate(R.layout.manage_applications_running, null);
505dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        mRunningProcessesView = (RunningProcessesView) rootView.findViewById(
515dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk                R.id.running_processes);
525dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        mRunningProcessesView.doCreate();
535dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        mLoadingContainer = rootView.findViewById(R.id.loading_container);
545dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
555dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        return rootView;
565dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    }
575dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
585dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    @Override
595dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
605dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        mOptionsMenu = menu;
615dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        menu.add(0, SHOW_RUNNING_SERVICES, 1, R.string.show_running_services)
625dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
635dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        menu.add(0, SHOW_BACKGROUND_PROCESSES, 2, R.string.show_background_processes)
645dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
655dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        updateOptionsMenu();
665dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    }
675dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
685dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    @Override
695dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    public void onResume() {
705dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        super.onResume();
715dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        boolean haveData = mRunningProcessesView.doResume(this, mRunningProcessesAvail);
72b5aa73f46f812ba03518a6d1ac218e3af5975236Jason Monk        Utils.handleLoadingContainer(mLoadingContainer, mRunningProcessesView, haveData, false);
735dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    }
745dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
755dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    @Override
765dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    public void onPause() {
775dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        super.onPause();
785dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        mRunningProcessesView.doPause();
795dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    }
805dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
815dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    @Override
825dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    public boolean onOptionsItemSelected(MenuItem item) {
835dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        switch (item.getItemId()) {
845dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk            case SHOW_RUNNING_SERVICES:
855dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk                mRunningProcessesView.mAdapter.setShowBackground(false);
865dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk                break;
875dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk            case SHOW_BACKGROUND_PROCESSES:
885dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk                mRunningProcessesView.mAdapter.setShowBackground(true);
895dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk                break;
905dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk            default:
915dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk                return false;
925dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        }
935dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        updateOptionsMenu();
945dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        return true;
955dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    }
965dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
975dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    @Override
985dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    public void onPrepareOptionsMenu(Menu menu) {
995dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        updateOptionsMenu();
1005dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    }
1015dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
1025dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    private void updateOptionsMenu() {
1035dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        boolean showingBackground = mRunningProcessesView.mAdapter.getShowBackground();
1045dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        mOptionsMenu.findItem(SHOW_RUNNING_SERVICES).setVisible(showingBackground);
1055dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        mOptionsMenu.findItem(SHOW_BACKGROUND_PROCESSES).setVisible(!showingBackground);
1065dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    }
1075dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
1085dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    private final Runnable mRunningProcessesAvail = new Runnable() {
1095dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        @Override
1105dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        public void run() {
111b5aa73f46f812ba03518a6d1ac218e3af5975236Jason Monk            Utils.handleLoadingContainer(mLoadingContainer, mRunningProcessesView, true, true);
1125dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk        }
1135dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk    };
1145dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk
1155dc70b10851656487f8ac6e503fd9daab745aad5Jason Monk}
116