/* * Copyright (C) 2016 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.multiwindowplayground.activities; import com.android.multiwindowplayground.R; import com.example.android.common.logger.Log; import com.example.android.common.logger.LogFragment; import com.example.android.common.logger.LogWrapper; import com.example.android.common.logger.MessageOnlyLogFilter; import android.content.res.Configuration; import android.os.Bundle; import android.os.PersistableBundle; import android.support.annotation.ColorRes; import android.support.annotation.StringRes; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.TextView; /** * Activity that logs all key lifecycle callbacks to {@link Log}. * Output is also logged to the UI into a {@link LogFragment} through {@link #initializeLogging()} * and {@link #stopLogging()}. */ public abstract class LoggingActivity extends AppCompatActivity { protected String mLogTag = getClass().getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(mLogTag, "onCreate"); } @Override public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onPostCreate(savedInstanceState, persistentState); Log.d(mLogTag, "onPostCreate"); } @Override protected void onPause() { super.onPause(); Log.d(mLogTag, "onPause"); } @Override protected void onDestroy() { super.onDestroy(); Log.d(mLogTag, "onDestroy"); } @Override protected void onResume() { super.onResume(); Log.d(mLogTag, "onResume"); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d(mLogTag, "onConfigurationChanged: " + newConfig.toString()); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); Log.d(mLogTag, "onPostCreate"); } @Override protected void onStart() { super.onStart(); // Start logging to UI. initializeLogging(); Log.d(mLogTag, "onStart"); } @Override protected void onStop() { super.onStop(); // Stop logging to UI when this activity is stopped. stopLogging(); Log.d(mLogTag, "onStop"); } @Override public void onMultiWindowModeChanged(boolean isInMultiWindowMode) { super.onMultiWindowModeChanged(isInMultiWindowMode); Log.d(mLogTag, "onMultiWindowModeChanged: " + isInMultiWindowMode); } // Logging and UI methods below. /** Set up targets to receive log data */ public void initializeLogging() { // Using Log, front-end to the logging chain, emulates android.util.log method signatures. // Wraps Android's native log framework LogWrapper logWrapper = new LogWrapper(); Log.setLogNode(logWrapper); // Filter strips out everything except the message text. MessageOnlyLogFilter msgFilter = new MessageOnlyLogFilter(); logWrapper.setNext(msgFilter); // On screen logging via a fragment with a TextView. LogFragment logFragment = (LogFragment) getSupportFragmentManager() .findFragmentById(R.id.log_fragment); msgFilter.setNext(logFragment.getLogView()); } public void stopLogging() { Log.setLogNode(null); } /** * Set the description text if a TextView with the id <code>description</code> is available. */ protected void setDescription(@StringRes int textId) { // Set the text and background color TextView description = (TextView) findViewById(R.id.description); if (description != null) { description.setText(textId); } } /** * Set the background color for the description text. */ protected void setBackgroundColor(@ColorRes int colorId) { View scrollView = findViewById(R.id.scrollview); if (scrollView != null) { scrollView.setBackgroundResource(colorId); } } }