diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml index 71351c4e55f..5f4e666b5cf 100644 --- a/res/xml/development_prefs.xml +++ b/res/xml/development_prefs.xml @@ -60,6 +60,12 @@ android:fragment="com.android.settings.applications.ProcessStatsUi"> + + diff --git a/src/com/android/settings/applications/RunningProcessesView.java b/src/com/android/settings/applications/RunningProcessesView.java index b71262ed0ad..d33acd9ed2c 100644 --- a/src/com/android/settings/applications/RunningProcessesView.java +++ b/src/com/android/settings/applications/RunningProcessesView.java @@ -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( diff --git a/src/com/android/settings/applications/RunningServices.java b/src/com/android/settings/applications/RunningServices.java new file mode 100644 index 00000000000..a4cd4a7635e --- /dev/null +++ b/src/com/android/settings/applications/RunningServices.java @@ -0,0 +1,129 @@ +/* + * 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(); + } + }; + +}