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

Commit 5dc70b10 authored by Jason Monk's avatar Jason Monk
Browse files

Add running services screen to developer options

This used to live under manage apps, but does no longer.

Bug: 19926589
Change-Id: I2554f14205286cc38fc87779873c37a5a1f80c4e
parent becc984a
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -60,6 +60,12 @@
            android:fragment="com.android.settings.applications.ProcessStatsUi">
    </PreferenceScreen>

    <PreferenceScreen
        android:key="running_apps"
        android:title="@string/runningservices_settings_title"
        android:summary="@string/runningservices_settings_summary"
        android:fragment="com.android.settings.applications.RunningServices" />

    <PreferenceCategory android:key="debug_debugging_category"
            android:title="@string/debug_debugging_category">

+1 −1
Original line number Diff line number Diff line
@@ -431,7 +431,7 @@ public class RunningProcessesView extends FrameLayout
        mMyUserId = UserHandle.myUserId();
    }
    
    public void doCreate(Bundle savedInstanceState) {
    public void doCreate() {
        mAm = (ActivityManager)getContext().getSystemService(Context.ACTIVITY_SERVICE);
        mState = RunningState.getInstance(getContext());
        LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(
+129 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 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.applications;

import android.app.Fragment;
import android.os.Bundle;
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 android.view.animation.AnimationUtils;

import com.android.settings.R;

public class RunningServices extends Fragment {

    private static final int SHOW_RUNNING_SERVICES = 1;
    private static final int SHOW_BACKGROUND_PROCESSES = 2;

    private RunningProcessesView mRunningProcessesView;
    private Menu mOptionsMenu;
    private View mLoadingContainer;

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

        setHasOptionsMenu(true);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.manage_applications_running, null);
        mRunningProcessesView = (RunningProcessesView) rootView.findViewById(
                R.id.running_processes);
        mRunningProcessesView.doCreate();
        mLoadingContainer = rootView.findViewById(R.id.loading_container);

        return rootView;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        mOptionsMenu = menu;
        menu.add(0, SHOW_RUNNING_SERVICES, 1, R.string.show_running_services)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        menu.add(0, SHOW_BACKGROUND_PROCESSES, 2, R.string.show_background_processes)
                .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
        updateOptionsMenu();
    }

    @Override
    public void onResume() {
        super.onResume();
        boolean haveData = mRunningProcessesView.doResume(this, mRunningProcessesAvail);
        if (haveData) {
            mRunningProcessesView.setVisibility(View.VISIBLE);
            mLoadingContainer.setVisibility(View.INVISIBLE);
        } else {
            mLoadingContainer.setVisibility(View.VISIBLE);
        }
    }

    @Override
    public void onPause() {
        super.onPause();
        mRunningProcessesView.doPause();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case SHOW_RUNNING_SERVICES:
                mRunningProcessesView.mAdapter.setShowBackground(false);
                break;
            case SHOW_BACKGROUND_PROCESSES:
                mRunningProcessesView.mAdapter.setShowBackground(true);
                break;
            default:
                return false;
        }
        updateOptionsMenu();
        return true;
    }

    @Override
    public void onPrepareOptionsMenu(Menu menu) {
        updateOptionsMenu();
    }

    private void updateOptionsMenu() {
        boolean showingBackground = mRunningProcessesView.mAdapter.getShowBackground();
        mOptionsMenu.findItem(SHOW_RUNNING_SERVICES).setVisible(showingBackground);
        mOptionsMenu.findItem(SHOW_BACKGROUND_PROCESSES).setVisible(!showingBackground);
    }

    private void handleRunningProcessesAvail() {
        mLoadingContainer.startAnimation(AnimationUtils.loadAnimation(getActivity(),
                android.R.anim.fade_out));
        mRunningProcessesView.startAnimation(AnimationUtils.loadAnimation(getActivity(),
                android.R.anim.fade_in));
        mRunningProcessesView.setVisibility(View.VISIBLE);
        mLoadingContainer.setVisibility(View.GONE);
    }

    private final Runnable mRunningProcessesAvail = new Runnable() {
        @Override
        public void run() {
            handleRunningProcessesAvail();
        }
    };

}