Show Floating action button to request manage credentials
Background * This is part of the work to support a credential management app on unmanaged devices. Changes * Show FAB for detailed/long manage credentials authentication policy. * Hide FAB for short manage credentials authentication policy. * Unexpand FAB once the user start starts scrolling. * Hide FAB once the user has scrolled to the bottom. Manual Testing * Verify FAB is shown for a detailed/long policy: https://screenshot.googleplex.com/BUb4LGz3GD6AozS * Verify FAB is hidden for a short policy * Verify FAB is hidden when user has scrolled to the bottom: https://screenshot.googleplex.com/6FQRqto3r3jzfXH * Verify FAB is unexpanded (text hidden) when the users start scrolling: https://screenshot.googleplex.com/4FfAt5MsCfrAwQK Bug: 165641221 Test: Manual Testing make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.security.RequestManageCredentialsTest Change-Id: Ied2ef726ad4dcc3f92c20249f80294f0a3071a8a
This commit is contained in:
25
res/drawable/ic_arrow_downward.xml
Normal file
25
res/drawable/ic_arrow_downward.xml
Normal file
@@ -0,0 +1,25 @@
|
||||
<!--
|
||||
~ Copyright (C) 2020 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.
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?android:attr/colorAccent">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M20,12l-1.41,-1.41L13,16.17V4h-2v12.17l-5.58,-5.59L4,12l8,8 8,-8z"/>
|
||||
</vector>
|
@@ -59,4 +59,17 @@
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||
android:id="@+id/extended_fab"
|
||||
style="@style/RequestManageCredentialsFab"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/request_manage_credentials_more"
|
||||
app:layout_anchor="@id/apps_list"
|
||||
app:layout_anchorGravity="bottom|center"
|
||||
app:elevation="3dp"
|
||||
app:icon="@drawable/ic_arrow_downward"
|
||||
app:iconTint="?android:attr/colorAccent"
|
||||
app:backgroundTint="?android:attr/colorPrimary"/>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
@@ -805,6 +805,13 @@
|
||||
<item name="android:textColor">?android:attr/colorAccent</item>
|
||||
</style>
|
||||
|
||||
<style name="RequestManageCredentialsFab">
|
||||
<item name="android:textSize">14sp</item>
|
||||
<item name="android:textAllCaps">false</item>
|
||||
<item name="android:textColor">?android:attr/colorAccent</item>
|
||||
<item name="android:layout_marginBottom">12dp</item>
|
||||
</style>
|
||||
|
||||
<style name="RequestManageCredentialsHeader">
|
||||
<item name="android:paddingStart">40dp</item>
|
||||
<item name="android:paddingEnd">24dp</item>
|
||||
|
@@ -35,6 +35,8 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.android.settings.R;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton;
|
||||
|
||||
/**
|
||||
* Displays a full screen to the user asking whether the calling app can manage the user's
|
||||
* KeyChain credentials. This screen includes the authentication policy highlighting what apps and
|
||||
@@ -62,6 +64,7 @@ public class RequestManageCredentials extends Activity {
|
||||
private RecyclerView mRecyclerView;
|
||||
private LinearLayoutManager mLayoutManager;
|
||||
private LinearLayout mButtonPanel;
|
||||
private ExtendedFloatingActionButton mExtendedFab;
|
||||
|
||||
private boolean mDisplayingButtonPanel = false;
|
||||
|
||||
@@ -79,6 +82,7 @@ public class RequestManageCredentials extends Activity {
|
||||
|
||||
loadRecyclerView();
|
||||
loadButtons();
|
||||
loadExtendedFloatingActionButton();
|
||||
addOnScrollListener();
|
||||
} else {
|
||||
Log.e(TAG, "Unable to start activity because intent action is not "
|
||||
@@ -106,6 +110,15 @@ public class RequestManageCredentials extends Activity {
|
||||
allowButton.setOnClickListener(setCredentialManagementApp());
|
||||
}
|
||||
|
||||
private void loadExtendedFloatingActionButton() {
|
||||
mExtendedFab = findViewById(R.id.extended_fab);
|
||||
mExtendedFab.setOnClickListener(v -> {
|
||||
mRecyclerView.scrollToPosition(mAuthenticationPolicy.getAppAndUriMappings().size());
|
||||
mExtendedFab.hide();
|
||||
showButtonPanel();
|
||||
});
|
||||
}
|
||||
|
||||
private View.OnClickListener finishRequestManageCredentials() {
|
||||
return v -> {
|
||||
Toast.makeText(this, R.string.request_manage_credentials_dont_allow,
|
||||
@@ -130,9 +143,16 @@ public class RequestManageCredentials extends Activity {
|
||||
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
|
||||
super.onScrolled(recyclerView, dx, dy);
|
||||
if (!mDisplayingButtonPanel) {
|
||||
// On down scroll, hide text in floating action button by setting
|
||||
// extended to false.
|
||||
if (dy > 0 && mExtendedFab.getVisibility() == View.VISIBLE) {
|
||||
mExtendedFab.setExtended(false);
|
||||
}
|
||||
if (isRecyclerScrollable()) {
|
||||
mExtendedFab.show();
|
||||
hideButtonPanel();
|
||||
} else {
|
||||
mExtendedFab.hide();
|
||||
showButtonPanel();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user