• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.settings.homepage.contextualcards.deviceinfo;
18 
19 import android.app.PendingIntent;
20 import android.app.settings.SettingsEnums;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.net.Uri;
24 import android.telephony.SubscriptionInfo;
25 import android.telephony.SubscriptionManager;
26 import android.text.BidiFormatter;
27 import android.text.TextDirectionHeuristics;
28 import android.text.TextUtils;
29 
30 import androidx.annotation.VisibleForTesting;
31 import androidx.core.graphics.drawable.IconCompat;
32 import androidx.slice.Slice;
33 import androidx.slice.builders.ListBuilder;
34 import androidx.slice.builders.SliceAction;
35 
36 import com.android.settings.R;
37 import com.android.settings.SubSettings;
38 import com.android.settings.Utils;
39 import com.android.settings.deviceinfo.HardwareInfoPreferenceController;
40 import com.android.settings.deviceinfo.aboutphone.MyDeviceInfoFragment;
41 import com.android.settings.slices.CustomSliceRegistry;
42 import com.android.settings.slices.CustomSliceable;
43 import com.android.settings.slices.SliceBuilderUtils;
44 import com.android.settingslib.DeviceInfoUtils;
45 
46 import java.util.List;
47 
48 public class DeviceInfoSlice implements CustomSliceable {
49     private static final String TAG = "DeviceInfoSlice";
50 
51     private final Context mContext;
52     private final SubscriptionManager mSubscriptionManager;
53 
DeviceInfoSlice(Context context)54     public DeviceInfoSlice(Context context) {
55         mContext = context;
56         mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
57     }
58 
59     @Override
getSlice()60     public Slice getSlice() {
61         final IconCompat icon = IconCompat.createWithResource(mContext,
62                 R.drawable.ic_info_outline_24dp);
63         final String title = mContext.getString(R.string.device_info_label);
64         final SliceAction primaryAction = SliceAction.createDeeplink(getPrimaryAction(), icon,
65                 ListBuilder.ICON_IMAGE, title);
66         return new ListBuilder(mContext, CustomSliceRegistry.DEVICE_INFO_SLICE_URI,
67                 ListBuilder.INFINITY)
68                 .setAccentColor((Utils.getColorAccentDefaultColor(mContext)))
69                 .setHeader(new ListBuilder.HeaderBuilder().setTitle(title))
70                 .addRow(new ListBuilder.RowBuilder()
71                         .setTitle(getPhoneNumber())
72                         .setSubtitle(getDeviceModel())
73                         .setPrimaryAction(primaryAction))
74                 .build();
75     }
76 
77     @Override
getUri()78     public Uri getUri() {
79         return CustomSliceRegistry.DEVICE_INFO_SLICE_URI;
80     }
81 
82     @Override
getIntent()83     public Intent getIntent() {
84         final String screenTitle = mContext.getText(R.string.device_info_label).toString();
85         return SliceBuilderUtils.buildSearchResultPageIntent(mContext,
86                 MyDeviceInfoFragment.class.getName(), "" /* key */, screenTitle,
87                 SettingsEnums.SLICE)
88                 .setClassName(mContext.getPackageName(), SubSettings.class.getName())
89                 .setData(CustomSliceRegistry.DEVICE_INFO_SLICE_URI);
90     }
91 
getPrimaryAction()92     private PendingIntent getPrimaryAction() {
93         final Intent intent = getIntent();
94         return PendingIntent.getActivity(mContext, 0  /* requestCode */, intent, 0  /* flags */);
95     }
96 
97     @VisibleForTesting
getPhoneNumber()98     CharSequence getPhoneNumber() {
99         final SubscriptionInfo subscriptionInfo = getFirstSubscriptionInfo();
100         if (subscriptionInfo == null) {
101             return mContext.getString(R.string.device_info_default);
102         }
103         final String phoneNumber = DeviceInfoUtils.getFormattedPhoneNumber(mContext,
104                 subscriptionInfo);
105         return TextUtils.isEmpty(phoneNumber) ? mContext.getString(R.string.device_info_default)
106                 : BidiFormatter.getInstance().unicodeWrap(phoneNumber, TextDirectionHeuristics.LTR);
107     }
108 
getDeviceModel()109     private CharSequence getDeviceModel() {
110         return HardwareInfoPreferenceController.getDeviceModel();
111     }
112 
113     @VisibleForTesting
getFirstSubscriptionInfo()114     SubscriptionInfo getFirstSubscriptionInfo() {
115         final List<SubscriptionInfo> subscriptionInfoList =
116                 mSubscriptionManager.getActiveSubscriptionInfoList(true);
117         if (subscriptionInfoList == null || subscriptionInfoList.isEmpty()) {
118             return null;
119         }
120         return subscriptionInfoList.get(0);
121     }
122 
123     @Override
onNotifyChange(Intent intent)124     public void onNotifyChange(Intent intent) {
125 
126     }
127 }
128