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

Commit 371404c4 authored by Victor Chang's avatar Victor Chang Committed by Android (Google) Code Review
Browse files

Merge changes from topic "picker-analytics" into pi-dev

* changes:
  Fix UX problems in time zone pickers
  Add tron metric logging
parents 9fc80c50 ca529d9e
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Objects;

/**
 * Render a list of {@class TimeZoneInfo} into the list view in {@class BaseTimeZonePicker}
@@ -135,8 +136,11 @@ public abstract class BaseTimeZoneInfoPicker extends BaseTimeZonePicker {
                    name = mTimeZoneInfo.getStandardName();
                }
            }
            if (name == null) {
                return mTimeZoneInfo.getGmtOffset();

            // Ignore name / GMT offset if the title shows the same information
            if (name == null || name.equals(mTitle)) {
                CharSequence gmtOffset = mTimeZoneInfo.getGmtOffset();
                return gmtOffset == null || gmtOffset.toString().equals(mTitle) ? "" : gmtOffset;
            } else {
                return SpannableUtil.getResourcesText(mResources,
                        R.string.zone_info_offset_and_name, mTimeZoneInfo.getGmtOffset(), name);
+0 −6
Original line number Diff line number Diff line
@@ -146,12 +146,6 @@ public abstract class BaseTimeZonePicker extends InstrumentedFragment
        return false;
    }

    @Override
    public int getMetricsCategory() {
        // TODO: use a new metrics id?
        return MetricsEvent.ZONE_PICKER;
    }

    public interface OnListItemClickListener {
        void onListItemClick(int position);
    }
+6 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.datetime.timezone;

import android.icu.util.TimeZone;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.datetime.timezone.model.TimeZoneData;

@@ -42,6 +43,11 @@ public class FixedOffsetPicker extends BaseTimeZoneInfoPicker {
                R.string.search_settings, false, false);
    }

    @Override
    public int getMetricsCategory() {
        return MetricsProto.MetricsEvent.SETTINGS_ZONE_PICKER_FIXED_OFFSET;
    }

    @Override
    public List<TimeZoneInfo> getAllTimeZoneInfos(TimeZoneData timeZoneData) {
        return loadFixedOffsets();
+9 −34
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.icu.text.LocaleDisplayNames;
import android.os.Bundle;
import android.util.Log;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.datetime.timezone.model.FilteredCountryTimeZones;
@@ -49,6 +50,11 @@ public class RegionSearchPicker extends BaseTimeZonePicker {
        super(R.string.date_time_select_region, R.string.search_settings, true, true);
    }

    @Override
    public int getMetricsCategory() {
        return MetricsProto.MetricsEvent.SETTINGS_ZONE_PICKER_REGION;
    }

    @Override
    protected BaseTimeZoneAdapter createAdapter(TimeZoneData timeZoneData) {
        mTimeZoneData = timeZoneData;
@@ -104,56 +110,25 @@ public class RegionSearchPicker extends BaseTimeZonePicker {
    private List<RegionItem> createAdapterItem(Set<String> regionIds) {
        final Collator collator = Collator.getInstance(getLocale());
        final TreeSet<RegionItem> items = new TreeSet<>(new RegionInfoComparator(collator));
        final Paint paint = new Paint();
        final LocaleDisplayNames localeDisplayNames = LocaleDisplayNames.getInstance(getLocale());
        long i = 0;
        for (String regionId : regionIds) {
            String name = localeDisplayNames.regionDisplayName(regionId);
            String regionalIndicator = createRegionalIndicator(regionId, paint);
            items.add(new RegionItem(i++, regionId, name, regionalIndicator));
            items.add(new RegionItem(i++, regionId, name));
        }
        return new ArrayList<>(items);
    }

    /**
     * Create a Unicode Region Indicator Symbol for a given region id (a.k.a flag emoji). If the
     * system can't render a flag for this region or the input is not a region id, this returns
     * {@code null}.
     *
     * @param id the two-character region id.
     * @param paint Paint contains the glyph
     * @return a String representing the flag of the region or {@code null}.
     */
    private static String createRegionalIndicator(String id, Paint paint) {
        if (id.length() != 2) {
            return null;
        }
        final char c1 = id.charAt(0);
        final char c2 = id.charAt(1);
        if ('A' > c1 || c1 > 'Z' || 'A' > c2 || c2 > 'Z') {
            return null;
        }
        // Regional Indicator A is U+1F1E6 which is 0xD83C 0xDDE6 in UTF-16.
        final String regionalIndicator = new String(
            new char[]{0xd83c, (char) (0xdde6 - 'A' + c1), 0xd83c, (char) (0xdde6 - 'A' + c2)});
        if (!paint.hasGlyph(regionalIndicator)) {
            return null;
        }
        return regionalIndicator;
    }

    private static class RegionItem implements BaseTimeZoneAdapter.AdapterItem {

        private final String mId;
        private final String mName;
        private final String mRegionalIndicator;
        private final long mItemId;
        private final String[] mSearchKeys;

        RegionItem(long itemId, String id, String name, String regionalIndicator) {
        RegionItem(long itemId, String id, String name) {
            mId = id;
            mName = name;
            mRegionalIndicator = regionalIndicator;
            mItemId = itemId;
            // Allow to search with ISO_3166-1 alpha-2 code. It's handy for english users in some
            // countries, e.g. US for United States. It's not best search keys for users, but
@@ -177,7 +152,7 @@ public class RegionSearchPicker extends BaseTimeZonePicker {

        @Override
        public String getIconText() {
            return mRegionalIndicator;
            return null;
        }

        @Override
+6 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.icu.util.TimeZone;
import android.support.annotation.VisibleForTesting;
import android.util.Log;

import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.datetime.timezone.model.FilteredCountryTimeZones;
import com.android.settings.datetime.timezone.model.TimeZoneData;
@@ -46,6 +47,11 @@ public class RegionZonePicker extends BaseTimeZoneInfoPicker {
        super(R.string.date_time_select_zone, R.string.search_settings, true, false);
    }

    @Override
    public int getMetricsCategory() {
        return MetricsProto.MetricsEvent.SETTINGS_ZONE_PICKER_TIME_ZONE;
    }

    /**
     * Add the extra region id into the result.
     */
Loading