Settings: Fabulous "Add rule" button.

Bug: 20064962
Change-Id: If7ff9d6cdfc61e5dd9e0d3bc4e2228c5fdaf9fa9
This commit is contained in:
John Spurlock
2015-04-15 21:15:55 -04:00
parent 4e53ac6dc8
commit b8e02b8bd0
9 changed files with 137 additions and 27 deletions

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_pressed="true">
<set>
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueTo="@dimen/fab_press_translation_z"
android:valueType="floatType" />
</set>
</item>
<item>
<set>
<objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueTo="0"
android:valueType="floatType" />
</set>
</item>
</selector>

View File

@@ -13,12 +13,11 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/add"
android:title="@string/zen_mode_time_add_rule"
android:icon="@drawable/ic_menu_add_white"
android:visible="true"
android:showAsAction="collapseActionView|ifRoom" />
</menu>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/fab_ripple">
<item>
<shape>
<solid android:color="@color/fab_shape" />
</shape>
</item>
</ripple>

View File

@@ -49,6 +49,18 @@
<include layout="@layout/loading_container" />
<com.android.settings.widget.FloatingActionButton
android:id="@+id/fab"
android:visibility="gone"
android:clickable="true"
android:layout_width="@dimen/fab_size"
android:layout_height="@dimen/fab_size"
android:layout_gravity="bottom|end"
android:layout_marginEnd="@dimen/fab_margin"
android:layout_marginBottom="@dimen/fab_margin"
android:elevation="@dimen/fab_elevation"
android:background="@drawable/fab_background" />
</FrameLayout>
<TextView android:id="@android:id/empty"

View File

@@ -89,4 +89,5 @@
<dimen name="wifi_assistant_text_padding">24dp</dimen>
<dimen name="confirm_credentials_security_method_margin">72dp</dimen>
<dimen name="fab_margin">24dp</dimen>
</resources>

View File

@@ -81,4 +81,6 @@
<color name="warning">#ff5621</color>
<color name="confirm_device_credential_dark_background">#263238</color>
<color name="fab_ripple">#1fffffff</color><!-- 12% white -->
<color name="fab_shape">#ff009688</color><!-- Teal 500 -->
</resources>

View File

@@ -239,4 +239,8 @@
<dimen name="fingerprint_ring_thickness">4dip</dimen>
<dimen name="confirm_credentials_security_method_margin">48dp</dimen>
<dimen name="fab_size">56dp</dimen>
<dimen name="fab_margin">16dp</dimen>
<dimen name="fab_elevation">12dp</dimen>
<dimen name="fab_press_translation_z">9dp</dimen>
</resources>

View File

@@ -42,6 +42,8 @@ import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import com.android.settings.widget.FloatingActionButton;
/**
* Base class for Settings fragments, with some helper functions and dialog management.
*/
@@ -80,6 +82,7 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
};
private ViewGroup mPinnedHeaderFrameLayout;
private FloatingActionButton mFloatingActionButton;
@Override
public void onCreate(Bundle icicle) {
@@ -101,9 +104,14 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF
Bundle savedInstanceState) {
final View root = super.onCreateView(inflater, container, savedInstanceState);
mPinnedHeaderFrameLayout = (ViewGroup) root.findViewById(R.id.pinned_header);
mFloatingActionButton = (FloatingActionButton) root.findViewById(R.id.fab);
return root;
}
public FloatingActionButton getFloatingActionButton() {
return mFloatingActionButton;
}
public void setPinnedHeaderView(View pinnedHeader) {
mPinnedHeaderFrameLayout.addView(pinnedHeader);
mPinnedHeaderFrameLayout.setVisibility(View.VISIBLE);

View File

@@ -33,14 +33,14 @@ import android.service.notification.ZenModeConfig.ScheduleInfo;
import android.service.notification.ZenModeConfig.ZenRule;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import com.android.internal.logging.MetricsLogger;
import com.android.settings.R;
import com.android.settings.notification.ManagedServiceSettings.Config;
import com.android.settings.notification.ZenRuleNameDialog.RuleInfo;
import com.android.settings.widget.FloatingActionButton;
import java.text.SimpleDateFormat;
import java.util.Calendar;
@@ -59,7 +59,6 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase {
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setHasOptionsMenu(true);
addPreferencesFromResource(R.xml.zen_mode_automation_settings);
mServiceListing = new ServiceListing(mContext, CONFIG);
mServiceListing.addCallback(mServiceListingCallback);
@@ -67,6 +66,21 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase {
mServiceListing.setListening(true);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
final FloatingActionButton fab = getFloatingActionButton();
fab.setVisibility(View.VISIBLE);
fab.setImageResource(R.drawable.ic_menu_add_white);
fab.setContentDescription(getString(R.string.zen_mode_time_add_rule));
fab.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showAddRuleDialog();
}
});
}
@Override
public void onDestroy() {
super.onDestroy();
@@ -74,20 +88,6 @@ public class ZenModeAutomationSettings extends ZenModeSettingsBase {
mServiceListing.removeCallback(mServiceListingCallback);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.zen_mode_automation, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.add) {
showAddRuleDialog();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onZenModeChanged() {
// don't care

View File

@@ -0,0 +1,49 @@
/*
* 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.widget;
import android.animation.AnimatorInflater;
import android.content.Context;
import android.graphics.Outline;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewOutlineProvider;
import android.widget.ImageView;
import com.android.settings.R;
public class FloatingActionButton extends ImageView {
public FloatingActionButton(Context context, AttributeSet attrs) {
super(context, attrs);
setScaleType(ScaleType.CENTER);
setStateListAnimator(AnimatorInflater.loadStateListAnimator(context, R.anim.fab_elevation));
setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setOval(0, 0, getWidth(), getHeight());
}
});
setClipToOutline(true);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
invalidateOutline();
}
}