Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1fc7629d authored by jackqdyulei's avatar jackqdyulei
Browse files

Add layout for advanced BT detail header

If device supports metadata, then we display advanced UI in Bluetooth
details header. This CL adds layout for this header.

In advanced layout, it will show:
1. Device name
2. Left, right and case icon
3. Left, right and case battery level

Once API is ready, following CL will get metadata from it and set it
to UI.
Bug: 122460277
Test: RunSettingsRoboTests
Change-Id: Ide044cf9705f350b431b2cb3a9ad82cc4425a17e
parent e56df887
Loading
Loading
Loading
Loading
+68 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright (C) 2019 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.
  -->

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/entity_header"
    style="@style/EntityHeader"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/entity_header_title"
        style="@style/TextAppearance.EntityHeaderTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:singleLine="false"
        android:ellipsize="marquee"
        android:textDirection="locale"/>

    <TextView
        android:id="@+id/entity_header_summary"
        style="@style/TextAppearance.EntityHeaderSummary"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="2dp"
        android:singleLine="false"
        android:ellipsize="marquee"
        android:textDirection="locale"
        android:text="test_summary"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:orientation="horizontal">

        <include
            android:id="@+id/layout_left"
            layout="@layout/advanced_bt_entity_sub"/>

        <include
            android:id="@+id/layout_middle"
            layout="@layout/advanced_bt_entity_sub"/>

        <include
            android:id="@+id/layout_right"
            layout="@layout/advanced_bt_entity_sub"/>

    </LinearLayout>

</LinearLayout>
+63 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright (C) 2019 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.
  -->

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/header_icon"
        android:layout_width="72dp"
        android:layout_height="72dp"
        android:scaleType="fitCenter"
        android:layout_gravity="center_horizontal"
        android:antialias="true"/>

    <TextView
        android:id="@+id/header_title"
        style="@style/TextAppearance.EntityHeaderTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:singleLine="false"
        android:ellipsize="marquee"
        android:textDirection="locale"
        android:layout_marginTop="24dp"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="2dp"
        android:layout_gravity="center_horizontal"
        android:orientation="horizontal">
        <ImageView
            android:id="@+id/bt_battery_icon"
            android:layout_width="13dp"
            android:layout_height="20dp"/>
        <TextView
            android:id="@+id/bt_battery_summary"
            style="@style/TextAppearance.EntityHeaderSummary"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:layout_gravity="center_horizontal"/>
    </LinearLayout>

</LinearLayout>
 No newline at end of file
+7 −0
Original line number Diff line number Diff line
@@ -10496,6 +10496,13 @@
    <!-- Title for no bluetooth devices in Bluetooth devices slice. [CHAR LIMIT=NONE] -->
    <string name="no_bluetooth_devices">No Bluetooth devices</string>
    <!-- Title for left bluetooth device. [CHAR LIMIT=NONE] -->
    <string name="bluetooth_left_name">Left</string>
    <!-- Title for right bluetooth device. [CHAR LIMIT=NONE] -->
    <string name="bluetooth_right_name">Right</string>
    <!-- Title for middle bluetooth device. [CHAR LIMIT=NONE] -->
    <string name="bluetooth_middle_name">Case</string>
    <!-- Default title for the settings panel [CHAR LIMIT=NONE] -->
    <string name="settings_panel_title">Settings Panel</string>
+10 −1
Original line number Diff line number Diff line
@@ -23,7 +23,16 @@
        android:key="bluetooth_device_header"
        android:layout="@layout/settings_entity_header"
        android:selectable="false"
        settings:allowDividerBelow="true"/>
        settings:allowDividerBelow="true"
        settings:searchable="false"/>

    <com.android.settingslib.widget.LayoutPreference
        android:key="advanced_bluetooth_device_header"
        android:layout="@layout/advanced_bt_entity_header"
        android:selectable="false"
        settings:allowDividerBelow="true"
        settings:searchable="false"
        settings:controller="com.android.settings.bluetooth.AdvancedBluetoothDetailsHeaderController"/>

    <com.android.settingslib.widget.ActionButtonsPreference
        android:key="action_buttons"
+88 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 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.bluetooth;

import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.widget.TextView;

import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.fuelgauge.BatteryMeterView;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.widget.LayoutPreference;

/**
 * This class adds a header with device name and status (connected/disconnected, etc.).
 */
public class AdvancedBluetoothDetailsHeaderController extends BasePreferenceController {

    private LayoutPreference mLayoutPreference;
    private CachedBluetoothDevice mCachedDevice;

    public AdvancedBluetoothDetailsHeaderController(Context context, String prefKey) {
        super(context, prefKey);
    }

    @Override
    public int getAvailabilityStatus() {
        //TODO(b/122460277): decide whether it is available by {@code bluetoothDevice}
        return CONDITIONALLY_UNAVAILABLE;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        super.displayPreference(screen);
        mLayoutPreference = screen.findPreference(getPreferenceKey());
        mLayoutPreference.setVisible(isAvailable());
        refresh();
    }

    public void init(CachedBluetoothDevice cachedBluetoothDevice) {
        mCachedDevice = cachedBluetoothDevice;
    }

    private void refresh() {
        if (mLayoutPreference != null && mCachedDevice != null) {
            final TextView title = mLayoutPreference.findViewById(R.id.entity_header_title);
            title.setText(mCachedDevice.getName());
            final TextView summary = mLayoutPreference.findViewById(R.id.entity_header_summary);
            summary.setText(mCachedDevice.getConnectionSummary());
        }
    }

    @VisibleForTesting
    Drawable createBtBatteryIcon(Context context, int level) {
        final BatteryMeterView.BatteryMeterDrawable drawable =
                new BatteryMeterView.BatteryMeterDrawable(context,
                        context.getColor(R.color.meter_background_color));
        drawable.setBatteryLevel(level);
        drawable.setShowPercent(false);
        drawable.setBatteryColorFilter(new PorterDuffColorFilter(
                Utils.getColorAttrDefaultColor(context, android.R.attr.colorControlNormal),
                PorterDuff.Mode.SRC_IN));

        return drawable;
    }

}
Loading