diff --git a/AdvancedImmersiveMode/.google/packaging.yaml b/AdvancedImmersiveMode/.google/packaging.yaml deleted file mode 100644 index c382e737a..000000000 --- a/AdvancedImmersiveMode/.google/packaging.yaml +++ /dev/null @@ -1,17 +0,0 @@ - -# GOOGLE SAMPLE PACKAGING DATA -# -# This file is used by Google as part of our samples packaging process. -# End users may safely ignore this file. It has no relevance to other systems. ---- -status: PUBLISHED -technologies: [Android] -categories: [User Interface] -languages: [Java] -solutions: [Mobile] -github: android/user-interface -level: INTERMEDIATE -icon: screenshots/icon-web.png -apiRefs: - - android:android.view.Window -license: apache2 diff --git a/AdvancedImmersiveMode/Application/build.gradle b/AdvancedImmersiveMode/Application/build.gradle deleted file mode 100644 index 118bff8a2..000000000 --- a/AdvancedImmersiveMode/Application/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ - -buildscript { - repositories { - google() - jcenter() - } - - dependencies { - classpath 'com.android.tools.build:gradle:4.1.2' - } -} - -apply plugin: 'com.android.application' - -repositories { - google() - jcenter() -} - -dependencies { - - - implementation "com.android.support:support-v4:28.0.0" - implementation "com.android.support:support-v13:28.0.0" - implementation "com.android.support:cardview-v7:28.0.0" - implementation "com.android.support:appcompat-v7:28.0.0" - - - - - - -} - -// The sample build uses multiple directories to -// keep boilerplate and common code separate from -// the main sample code. -List dirs = [ - 'main', // main sample code; look here for the interesting stuff. - 'common', // components that are reused by multiple samples - 'template'] // boilerplate code that is generated by the sample template process - -android { - compileSdkVersion 28 - - defaultConfig { - minSdkVersion 19 - targetSdkVersion 28 - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - sourceSets { - main { - dirs.each { dir -> - java.srcDirs "src/${dir}/java" - res.srcDirs "src/${dir}/res" - } - } - androidTest.setRoot('tests') - androidTest.java.srcDirs = ['tests/src'] - - } - -} diff --git a/AdvancedImmersiveMode/Application/src/main/AndroidManifest.xml b/AdvancedImmersiveMode/Application/src/main/AndroidManifest.xml deleted file mode 100644 index 9dec18d69..000000000 --- a/AdvancedImmersiveMode/Application/src/main/AndroidManifest.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/advancedimmersivemode/AdvancedImmersiveModeFragment.java b/AdvancedImmersiveMode/Application/src/main/java/com/example/android/advancedimmersivemode/AdvancedImmersiveModeFragment.java deleted file mode 100644 index d8fb0d4eb..000000000 --- a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/advancedimmersivemode/AdvancedImmersiveModeFragment.java +++ /dev/null @@ -1,263 +0,0 @@ -/* -* Copyright (C) 2012 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.example.android.advancedimmersivemode; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.CheckBox; - -import com.example.android.common.logger.Log; - -/** - * Demonstrates how to update the app's UI by toggling immersive mode. - * Checkboxes are also made available for toggling other UI flags which can - * alter the behavior of immersive mode. - */ -public class AdvancedImmersiveModeFragment extends Fragment { - - public static final String TAG = "AdvancedImmersiveModeFragment"; - public CheckBox mHideNavCheckbox; - public CheckBox mHideStatusBarCheckBox; - public CheckBox mImmersiveModeCheckBox; - public CheckBox mImmersiveModeStickyCheckBox; - public CheckBox mLowProfileCheckBox; - - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setHasOptionsMenu(true); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) { - final View flagsView = inflater.inflate(R.layout.fragment_flags, container, false); - mLowProfileCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_enable_lowprof); - mHideNavCheckbox = (CheckBox) flagsView.findViewById(R.id.flag_hide_navbar); - mHideStatusBarCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_hide_statbar); - mImmersiveModeCheckBox = (CheckBox) flagsView.findViewById(R.id.flag_enable_immersive); - mImmersiveModeStickyCheckBox = - (CheckBox) flagsView.findViewById(R.id.flag_enable_immersive_sticky); - - Button toggleFlagsButton = (Button) flagsView.findViewById(R.id.btn_changeFlags); - toggleFlagsButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - toggleUiFlags(); - } - }); - - Button presetsImmersiveModeButton = (Button) flagsView.findViewById(R.id.btn_immersive); - presetsImmersiveModeButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - // BEGIN_INCLUDE(immersive_presets) - // For immersive mode, the FULLSCREEN, HIDE_HAVIGATION and IMMERSIVE - // flags should be set (you can use IMMERSIVE_STICKY instead of IMMERSIVE - // as appropriate for your app). The LOW_PROFILE flag should be cleared. - - // Immersive mode is primarily for situations where the user will be - // interacting with the screen, like games or reading books. - int uiOptions = flagsView.getSystemUiVisibility(); - uiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; - uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; - uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - uiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE; - uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - flagsView.setSystemUiVisibility(uiOptions); - // END_INCLUDE(immersive_presets) - - dumpFlagStateToLog(uiOptions); - - // The below code just updates the checkboxes to reflect which flags have been set. - mLowProfileCheckBox.setChecked(false); - mHideNavCheckbox.setChecked(true); - mHideStatusBarCheckBox.setChecked(true); - mImmersiveModeCheckBox.setChecked(true); - mImmersiveModeStickyCheckBox.setChecked(false); - } - }); - - - Button presetsLeanbackModeButton = (Button) flagsView.findViewById(R.id.btn_leanback); - presetsLeanbackModeButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - // BEGIN_INCLUDE(leanback_presets) - // For leanback mode, only the HIDE_NAVE and HIDE_STATUSBAR flags - // should be checked. In this case IMMERSIVE should *not* be set, - // since this mode is left as soon as the user touches the screen. - int uiOptions = flagsView.getSystemUiVisibility(); - uiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; - uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; - uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE; - uiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - flagsView.setSystemUiVisibility(uiOptions); - // END_INCLUDE(leanback_presets) - - dumpFlagStateToLog(uiOptions); - - // The below code just updates the checkboxes to reflect which flags have been set. - mLowProfileCheckBox.setChecked(false); - mHideNavCheckbox.setChecked(true); - mHideStatusBarCheckBox.setChecked(true); - mImmersiveModeCheckBox.setChecked(false); - mImmersiveModeStickyCheckBox.setChecked(false); - } - }); - - // Setting these flags makes the content appear under the navigation - // bars, so that showing/hiding the nav bars doesn't resize the content - // window, which can be jarring. - int uiOptions = flagsView.getSystemUiVisibility(); - uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; - uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE; - uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; - flagsView.setSystemUiVisibility(uiOptions); - - return flagsView; - } - - /** - * Helper method to dump flag state to the log. - * @param uiFlags Set of UI flags to inspect - */ - public void dumpFlagStateToLog(int uiFlags) { - if ((uiFlags & View.SYSTEM_UI_FLAG_LOW_PROFILE) != 0) { - Log.i(TAG, "SYSTEM_UI_FLAG_LOW_PROFILE is set"); - } else { - Log.i(TAG, "SYSTEM_UI_FLAG_LOW_PROFILE is unset"); - } - - if ((uiFlags & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0) { - Log.i(TAG, "SYSTEM_UI_FLAG_FULLSCREEN is set"); - } else { - Log.i(TAG, "SYSTEM_UI_FLAG_FULLSCREEN is unset"); - } - - if ((uiFlags & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0) { - Log.i(TAG, "SYSTEM_UI_FLAG_HIDE_NAVIGATION is set"); - } else { - Log.i(TAG, "SYSTEM_UI_FLAG_HIDE_NAVIGATION is unset"); - } - - if ((uiFlags & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0) { - Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE is set"); - } else { - Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE is unset"); - } - - if ((uiFlags & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0) { - Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE_STICKY is set"); - } else { - Log.i(TAG, "SYSTEM_UI_FLAG_IMMERSIVE_STICKY is unset"); - } - } - - /** - * Detects and toggles immersive mode (also known as "hidey bar" mode). - */ - public void toggleUiFlags() { - - // BEGIN_INCLUDE (get_current_ui_flags) - // The "Decor View" is the parent view of the Activity. It's also conveniently the easiest - // one to find from within a fragment, since there's a handy helper method to pull it, and - // we don't have to bother with picking a view somewhere deeper in the hierarchy and calling - // "findViewById" on it. - View decorView = getActivity().getWindow().getDecorView(); - int uiOptions = decorView.getSystemUiVisibility(); - int newUiOptions = uiOptions; - // END_INCLUDE (get_current_ui_flags) - - // BEGIN_INCLUDE (toggle_lowprofile_mode) - // Low profile mode doesn't resize the screen at all, but it covers the nav & status bar - // icons with black so they're less distracting. Unlike "full screen" and "hide nav bar," - // this mode doesn't interact with immersive mode at all, but it's instructive when running - // this sample to observe the differences in behavior. - if (mLowProfileCheckBox.isChecked()) { - newUiOptions |= View.SYSTEM_UI_FLAG_LOW_PROFILE; - } else { - newUiOptions &= ~View.SYSTEM_UI_FLAG_LOW_PROFILE; - } - // END_INCLUDE (toggle_lowprofile_mode) - - // BEGIN_INCLUDE (toggle_fullscreen_mode) - // When enabled, this flag hides non-critical UI, such as the status bar, - // which usually shows notification icons, battery life, etc - // on phone-sized devices. The bar reappears when the user swipes it down. When immersive - // mode is also enabled, the app-drawable area expands, and when the status bar is swiped - // down, it appears semi-transparently and slides in over the app, instead of pushing it - // down. - if (mHideStatusBarCheckBox.isChecked()) { - newUiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN; - } else { - newUiOptions &= ~View.SYSTEM_UI_FLAG_FULLSCREEN; - } - // END_INCLUDE (toggle_fullscreen_mode) - - // BEGIN_INCLUDE (toggle_hidenav_mode) - // When enabled, this flag hides the black nav bar along the bottom, - // where the home/back buttons are. The nav bar normally instantly reappears - // when the user touches the screen. When immersive mode is also enabled, the nav bar - // stays hidden until the user swipes it back. - if (mHideNavCheckbox.isChecked()) { - newUiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - } else { - newUiOptions &= ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - } - // END_INCLUDE (toggle_hidenav_mode) - - // BEGIN_INCLUDE (toggle_immersive_mode) - // Immersive mode doesn't do anything without at least one of the previous flags - // enabled. When enabled, it allows the user to swipe the status and/or nav bars - // off-screen. When the user swipes the bars back onto the screen, the flags are cleared - // and immersive mode is automatically disabled. - if (mImmersiveModeCheckBox.isChecked()) { - newUiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE; - } else { - newUiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE; - } - // END_INCLUDE (toggle_immersive_mode) - - // BEGIN_INCLUDE (toggle_immersive_mode_sticky) - // There's actually two forms of immersive mode, normal and "sticky". Sticky immersive mode - // is different in 2 key ways: - // - // * Uses semi-transparent bars for the nav and status bars - // * This UI flag will *not* be cleared when the user interacts with the UI. - // When the user swipes, the bars will temporarily appear for a few seconds and then - // disappear again. - if (mImmersiveModeStickyCheckBox.isChecked()) { - newUiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - } else { - newUiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; - } - // END_INCLUDE (toggle_immersive_mode_sticky) - - // BEGIN_INCLUDE (set_ui_flags) - //Set the new UI flags. - decorView.setSystemUiVisibility(newUiOptions); - // END_INCLUDE (set_ui_flags) - - dumpFlagStateToLog(uiOptions); - } -} diff --git a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/advancedimmersivemode/MainActivity.java b/AdvancedImmersiveMode/Application/src/main/java/com/example/android/advancedimmersivemode/MainActivity.java deleted file mode 100644 index 476c474f3..000000000 --- a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/advancedimmersivemode/MainActivity.java +++ /dev/null @@ -1,110 +0,0 @@ -/* -* Copyright 2013 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.example.android.advancedimmersivemode; - -import android.os.Bundle; -import android.support.v4.app.FragmentTransaction; -import android.view.Menu; -import android.view.MenuItem; -import android.widget.ViewAnimator; - -import com.example.android.common.activities.SampleActivityBase; -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; - -/** - * A simple launcher activity containing a summary sample description, sample log and a custom - * {@link android.support.v4.app.Fragment} which can display a view. - *

- * For devices with displays with a width of 720dp or greater, the sample log is always visible, - * on other devices it's visibility is controlled by an item on the Action Bar. - */ -public class MainActivity extends SampleActivityBase { - - public static final String TAG = "MainActivity"; - - // Whether the Log Fragment is currently shown - private boolean mLogShown; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - if (savedInstanceState == null) { - FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); - AdvancedImmersiveModeFragment fragment = new AdvancedImmersiveModeFragment(); - transaction.replace(R.id.sample_content_fragment, fragment); - transaction.commit(); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.main, menu); - return true; - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - MenuItem logToggle = menu.findItem(R.id.menu_toggle_log); - logToggle.setVisible(findViewById(R.id.sample_output) instanceof ViewAnimator); - logToggle.setTitle(mLogShown ? R.string.sample_hide_log : R.string.sample_show_log); - - return super.onPrepareOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch(item.getItemId()) { - case R.id.menu_toggle_log: - mLogShown = !mLogShown; - ViewAnimator output = (ViewAnimator) findViewById(R.id.sample_output); - if (mLogShown) { - output.setDisplayedChild(1); - } else { - output.setDisplayedChild(0); - } - supportInvalidateOptionsMenu(); - return true; - } - return super.onOptionsItemSelected(item); - } - - /** Create a chain of targets that will receive log data */ - @Override - public void initializeLogging() { - // Wraps Android's native log framework. - LogWrapper logWrapper = new LogWrapper(); - // Using Log, front-end to the logging chain, emulates android.util.log method signatures. - 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()); - - Log.i(TAG, "Ready"); - } -} diff --git a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/activities/SampleActivityBase.java b/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/activities/SampleActivityBase.java deleted file mode 100644 index 3228927b7..000000000 --- a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/activities/SampleActivityBase.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -* Copyright 2013 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.example.android.common.activities; - -import android.os.Bundle; -import android.support.v4.app.FragmentActivity; - -import com.example.android.common.logger.Log; -import com.example.android.common.logger.LogWrapper; - -/** - * Base launcher activity, to handle most of the common plumbing for samples. - */ -public class SampleActivityBase extends FragmentActivity { - - public static final String TAG = "SampleActivityBase"; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - } - - @Override - protected void onStart() { - super.onStart(); - initializeLogging(); - } - - /** 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); - - Log.i(TAG, "Ready"); - } -} diff --git a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/Log.java b/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/Log.java deleted file mode 100644 index 17503c568..000000000 --- a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/Log.java +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright (C) 2013 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.example.android.common.logger; - -/** - * Helper class for a list (or tree) of LoggerNodes. - * - *

When this is set as the head of the list, - * an instance of it can function as a drop-in replacement for {@link android.util.Log}. - * Most of the methods in this class server only to map a method call in Log to its equivalent - * in LogNode.

- */ -public class Log { - // Grabbing the native values from Android's native logging facilities, - // to make for easy migration and interop. - public static final int NONE = -1; - public static final int VERBOSE = android.util.Log.VERBOSE; - public static final int DEBUG = android.util.Log.DEBUG; - public static final int INFO = android.util.Log.INFO; - public static final int WARN = android.util.Log.WARN; - public static final int ERROR = android.util.Log.ERROR; - public static final int ASSERT = android.util.Log.ASSERT; - - // Stores the beginning of the LogNode topology. - private static LogNode mLogNode; - - /** - * Returns the next LogNode in the linked list. - */ - public static LogNode getLogNode() { - return mLogNode; - } - - /** - * Sets the LogNode data will be sent to. - */ - public static void setLogNode(LogNode node) { - mLogNode = node; - } - - /** - * Instructs the LogNode to print the log data provided. Other LogNodes can - * be chained to the end of the LogNode as desired. - * - * @param priority Log level of the data being logged. Verbose, Error, etc. - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public static void println(int priority, String tag, String msg, Throwable tr) { - if (mLogNode != null) { - mLogNode.println(priority, tag, msg, tr); - } - } - - /** - * Instructs the LogNode to print the log data provided. Other LogNodes can - * be chained to the end of the LogNode as desired. - * - * @param priority Log level of the data being logged. Verbose, Error, etc. - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. The actual message to be logged. - */ - public static void println(int priority, String tag, String msg) { - println(priority, tag, msg, null); - } - - /** - * Prints a message at VERBOSE priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public static void v(String tag, String msg, Throwable tr) { - println(VERBOSE, tag, msg, tr); - } - - /** - * Prints a message at VERBOSE priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - */ - public static void v(String tag, String msg) { - v(tag, msg, null); - } - - - /** - * Prints a message at DEBUG priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public static void d(String tag, String msg, Throwable tr) { - println(DEBUG, tag, msg, tr); - } - - /** - * Prints a message at DEBUG priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - */ - public static void d(String tag, String msg) { - d(tag, msg, null); - } - - /** - * Prints a message at INFO priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public static void i(String tag, String msg, Throwable tr) { - println(INFO, tag, msg, tr); - } - - /** - * Prints a message at INFO priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - */ - public static void i(String tag, String msg) { - i(tag, msg, null); - } - - /** - * Prints a message at WARN priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public static void w(String tag, String msg, Throwable tr) { - println(WARN, tag, msg, tr); - } - - /** - * Prints a message at WARN priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - */ - public static void w(String tag, String msg) { - w(tag, msg, null); - } - - /** - * Prints a message at WARN priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public static void w(String tag, Throwable tr) { - w(tag, null, tr); - } - - /** - * Prints a message at ERROR priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public static void e(String tag, String msg, Throwable tr) { - println(ERROR, tag, msg, tr); - } - - /** - * Prints a message at ERROR priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - */ - public static void e(String tag, String msg) { - e(tag, msg, null); - } - - /** - * Prints a message at ASSERT priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public static void wtf(String tag, String msg, Throwable tr) { - println(ASSERT, tag, msg, tr); - } - - /** - * Prints a message at ASSERT priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. - */ - public static void wtf(String tag, String msg) { - wtf(tag, msg, null); - } - - /** - * Prints a message at ASSERT priority. - * - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public static void wtf(String tag, Throwable tr) { - wtf(tag, null, tr); - } -} diff --git a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogFragment.java b/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogFragment.java deleted file mode 100644 index b302acd4b..000000000 --- a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogFragment.java +++ /dev/null @@ -1,109 +0,0 @@ -/* -* Copyright 2013 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. -*/ -/* - * Copyright 2013 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.example.android.common.logger; - -import android.graphics.Typeface; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.text.Editable; -import android.text.TextWatcher; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ScrollView; - -/** - * Simple fraggment which contains a LogView and uses is to output log data it receives - * through the LogNode interface. - */ -public class LogFragment extends Fragment { - - private LogView mLogView; - private ScrollView mScrollView; - - public LogFragment() {} - - public View inflateViews() { - mScrollView = new ScrollView(getActivity()); - ViewGroup.LayoutParams scrollParams = new ViewGroup.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT); - mScrollView.setLayoutParams(scrollParams); - - mLogView = new LogView(getActivity()); - ViewGroup.LayoutParams logParams = new ViewGroup.LayoutParams(scrollParams); - logParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; - mLogView.setLayoutParams(logParams); - mLogView.setClickable(true); - mLogView.setFocusable(true); - mLogView.setTypeface(Typeface.MONOSPACE); - - // Want to set padding as 16 dips, setPadding takes pixels. Hooray math! - int paddingDips = 16; - double scale = getResources().getDisplayMetrics().density; - int paddingPixels = (int) ((paddingDips * (scale)) + .5); - mLogView.setPadding(paddingPixels, paddingPixels, paddingPixels, paddingPixels); - mLogView.setCompoundDrawablePadding(paddingPixels); - - mLogView.setGravity(Gravity.BOTTOM); - mLogView.setTextAppearance(getActivity(), android.R.style.TextAppearance_Holo_Medium); - - mScrollView.addView(mLogView); - return mScrollView; - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - - View result = inflateViews(); - - mLogView.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) {} - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) {} - - @Override - public void afterTextChanged(Editable s) { - mScrollView.fullScroll(ScrollView.FOCUS_DOWN); - } - }); - return result; - } - - public LogView getLogView() { - return mLogView; - } -} \ No newline at end of file diff --git a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogNode.java b/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogNode.java deleted file mode 100644 index bc37cabc0..000000000 --- a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogNode.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2012 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.example.android.common.logger; - -/** - * Basic interface for a logging system that can output to one or more targets. - * Note that in addition to classes that will output these logs in some format, - * one can also implement this interface over a filter and insert that in the chain, - * such that no targets further down see certain data, or see manipulated forms of the data. - * You could, for instance, write a "ToHtmlLoggerNode" that just converted all the log data - * it received to HTML and sent it along to the next node in the chain, without printing it - * anywhere. - */ -public interface LogNode { - - /** - * Instructs first LogNode in the list to print the log data provided. - * @param priority Log level of the data being logged. Verbose, Error, etc. - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - public void println(int priority, String tag, String msg, Throwable tr); - -} diff --git a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogView.java b/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogView.java deleted file mode 100644 index c01542b91..000000000 --- a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogView.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2013 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.example.android.common.logger; - -import android.app.Activity; -import android.content.Context; -import android.util.*; -import android.widget.TextView; - -/** Simple TextView which is used to output log data received through the LogNode interface. -*/ -public class LogView extends TextView implements LogNode { - - public LogView(Context context) { - super(context); - } - - public LogView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public LogView(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - } - - /** - * Formats the log data and prints it out to the LogView. - * @param priority Log level of the data being logged. Verbose, Error, etc. - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - @Override - public void println(int priority, String tag, String msg, Throwable tr) { - - - String priorityStr = null; - - // For the purposes of this View, we want to print the priority as readable text. - switch(priority) { - case android.util.Log.VERBOSE: - priorityStr = "VERBOSE"; - break; - case android.util.Log.DEBUG: - priorityStr = "DEBUG"; - break; - case android.util.Log.INFO: - priorityStr = "INFO"; - break; - case android.util.Log.WARN: - priorityStr = "WARN"; - break; - case android.util.Log.ERROR: - priorityStr = "ERROR"; - break; - case android.util.Log.ASSERT: - priorityStr = "ASSERT"; - break; - default: - break; - } - - // Handily, the Log class has a facility for converting a stack trace into a usable string. - String exceptionStr = null; - if (tr != null) { - exceptionStr = android.util.Log.getStackTraceString(tr); - } - - // Take the priority, tag, message, and exception, and concatenate as necessary - // into one usable line of text. - final StringBuilder outputBuilder = new StringBuilder(); - - String delimiter = "\t"; - appendIfNotNull(outputBuilder, priorityStr, delimiter); - appendIfNotNull(outputBuilder, tag, delimiter); - appendIfNotNull(outputBuilder, msg, delimiter); - appendIfNotNull(outputBuilder, exceptionStr, delimiter); - - // In case this was originally called from an AsyncTask or some other off-UI thread, - // make sure the update occurs within the UI thread. - ((Activity) getContext()).runOnUiThread( (new Thread(new Runnable() { - @Override - public void run() { - // Display the text we just generated within the LogView. - appendToLog(outputBuilder.toString()); - } - }))); - - if (mNext != null) { - mNext.println(priority, tag, msg, tr); - } - } - - public LogNode getNext() { - return mNext; - } - - public void setNext(LogNode node) { - mNext = node; - } - - /** Takes a string and adds to it, with a separator, if the bit to be added isn't null. Since - * the logger takes so many arguments that might be null, this method helps cut out some of the - * agonizing tedium of writing the same 3 lines over and over. - * @param source StringBuilder containing the text to append to. - * @param addStr The String to append - * @param delimiter The String to separate the source and appended strings. A tab or comma, - * for instance. - * @return The fully concatenated String as a StringBuilder - */ - private StringBuilder appendIfNotNull(StringBuilder source, String addStr, String delimiter) { - if (addStr != null) { - if (addStr.length() == 0) { - delimiter = ""; - } - - return source.append(addStr).append(delimiter); - } - return source; - } - - // The next LogNode in the chain. - LogNode mNext; - - /** Outputs the string as a new line of log data in the LogView. */ - public void appendToLog(String s) { - append("\n" + s); - } - - -} diff --git a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogWrapper.java b/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogWrapper.java deleted file mode 100644 index 16a9e7ba2..000000000 --- a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/LogWrapper.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2012 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.example.android.common.logger; - -import android.util.Log; - -/** - * Helper class which wraps Android's native Log utility in the Logger interface. This way - * normal DDMS output can be one of the many targets receiving and outputting logs simultaneously. - */ -public class LogWrapper implements LogNode { - - // For piping: The next node to receive Log data after this one has done its work. - private LogNode mNext; - - /** - * Returns the next LogNode in the linked list. - */ - public LogNode getNext() { - return mNext; - } - - /** - * Sets the LogNode data will be sent to.. - */ - public void setNext(LogNode node) { - mNext = node; - } - - /** - * Prints data out to the console using Android's native log mechanism. - * @param priority Log level of the data being logged. Verbose, Error, etc. - * @param tag Tag for for the log data. Can be used to organize log statements. - * @param msg The actual message to be logged. The actual message to be logged. - * @param tr If an exception was thrown, this can be sent along for the logging facilities - * to extract and print useful information. - */ - @Override - public void println(int priority, String tag, String msg, Throwable tr) { - // There actually are log methods that don't take a msg parameter. For now, - // if that's the case, just convert null to the empty string and move on. - String useMsg = msg; - if (useMsg == null) { - useMsg = ""; - } - - // If an exeption was provided, convert that exception to a usable string and attach - // it to the end of the msg method. - if (tr != null) { - msg += "\n" + Log.getStackTraceString(tr); - } - - // This is functionally identical to Log.x(tag, useMsg); - // For instance, if priority were Log.VERBOSE, this would be the same as Log.v(tag, useMsg) - Log.println(priority, tag, useMsg); - - // If this isn't the last node in the chain, move things along. - if (mNext != null) { - mNext.println(priority, tag, msg, tr); - } - } -} diff --git a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java b/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java deleted file mode 100644 index 19967dcd4..000000000 --- a/AdvancedImmersiveMode/Application/src/main/java/com/example/android/common/logger/MessageOnlyLogFilter.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2013 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.example.android.common.logger; - -/** - * Simple {@link LogNode} filter, removes everything except the message. - * Useful for situations like on-screen log output where you don't want a lot of metadata displayed, - * just easy-to-read message updates as they're happening. - */ -public class MessageOnlyLogFilter implements LogNode { - - LogNode mNext; - - /** - * Takes the "next" LogNode as a parameter, to simplify chaining. - * - * @param next The next LogNode in the pipeline. - */ - public MessageOnlyLogFilter(LogNode next) { - mNext = next; - } - - public MessageOnlyLogFilter() { - } - - @Override - public void println(int priority, String tag, String msg, Throwable tr) { - if (mNext != null) { - getNext().println(Log.NONE, null, msg, null); - } - } - - /** - * Returns the next LogNode in the chain. - */ - public LogNode getNext() { - return mNext; - } - - /** - * Sets the LogNode data will be sent to.. - */ - public void setNext(LogNode node) { - mNext = node; - } - -} diff --git a/AdvancedImmersiveMode/Application/src/main/res/drawable-hdpi/ic_launcher.png b/AdvancedImmersiveMode/Application/src/main/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index b96e6a546..000000000 Binary files a/AdvancedImmersiveMode/Application/src/main/res/drawable-hdpi/ic_launcher.png and /dev/null differ diff --git a/AdvancedImmersiveMode/Application/src/main/res/drawable-hdpi/tile.9.png b/AdvancedImmersiveMode/Application/src/main/res/drawable-hdpi/tile.9.png deleted file mode 100644 index 135862883..000000000 Binary files a/AdvancedImmersiveMode/Application/src/main/res/drawable-hdpi/tile.9.png and /dev/null differ diff --git a/AdvancedImmersiveMode/Application/src/main/res/drawable-mdpi/ic_launcher.png b/AdvancedImmersiveMode/Application/src/main/res/drawable-mdpi/ic_launcher.png deleted file mode 100644 index 1294d5b7b..000000000 Binary files a/AdvancedImmersiveMode/Application/src/main/res/drawable-mdpi/ic_launcher.png and /dev/null differ diff --git a/AdvancedImmersiveMode/Application/src/main/res/drawable-xhdpi/ic_launcher.png b/AdvancedImmersiveMode/Application/src/main/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index 9f101ffaf..000000000 Binary files a/AdvancedImmersiveMode/Application/src/main/res/drawable-xhdpi/ic_launcher.png and /dev/null differ diff --git a/AdvancedImmersiveMode/Application/src/main/res/drawable-xxhdpi/ic_launcher.png b/AdvancedImmersiveMode/Application/src/main/res/drawable-xxhdpi/ic_launcher.png deleted file mode 100644 index 7a195a128..000000000 Binary files a/AdvancedImmersiveMode/Application/src/main/res/drawable-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/AdvancedImmersiveMode/Application/src/main/res/layout-w720dp/activity_main.xml b/AdvancedImmersiveMode/Application/src/main/res/layout-w720dp/activity_main.xml deleted file mode 100755 index c9a52f621..000000000 --- a/AdvancedImmersiveMode/Application/src/main/res/layout-w720dp/activity_main.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AdvancedImmersiveMode/Application/src/main/res/layout/activity_main.xml b/AdvancedImmersiveMode/Application/src/main/res/layout/activity_main.xml deleted file mode 100755 index 1ae4f981e..000000000 --- a/AdvancedImmersiveMode/Application/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/AdvancedImmersiveMode/Application/src/main/res/layout/fragment_flags.xml b/AdvancedImmersiveMode/Application/src/main/res/layout/fragment_flags.xml deleted file mode 100644 index c59b3b393..000000000 --- a/AdvancedImmersiveMode/Application/src/main/res/layout/fragment_flags.xml +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - -