Files
app_Settings/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
Fan Zhang ac9d87695d Use preference for about phone page instead of injection.
It's faster than tile injection. The fragment comes from Settings
itself, we don't have to use to injection.

Bug: 118168552
Test: robotest
Change-Id: If6a79dd73f8a51dbb21338a40f22dc8b8f8c8cb8
2018-11-08 14:30:20 -08:00

99 lines
3.1 KiB
Java

/*
* Copyright (C) 2017 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.deviceinfo;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;
import android.util.Log;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.DeviceInfoUtils;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class DeviceModelPreferenceController extends BasePreferenceController {
private static final String TAG = "DeviceModelPrefCtrl";
private Fragment mHost;
public DeviceModelPreferenceController(Context context, String key) {
super(context, key);
}
public void setHost(Fragment fragment) {
mHost = fragment;
}
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
}
@Override
public int getAvailabilityStatus() {
return mContext.getResources().getBoolean(R.bool.config_show_device_model)
? AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
@Override
public CharSequence getSummary() {
return mContext.getResources().getString(R.string.model_summary, getDeviceModel());
}
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
return false;
}
final HardwareInfoDialogFragment fragment = HardwareInfoDialogFragment.newInstance();
fragment.show(mHost.getFragmentManager(), HardwareInfoDialogFragment.TAG);
return true;
}
@Override
public boolean isSliceable() {
return true;
}
public static String getDeviceModel() {
FutureTask<String> msvSuffixTask = new FutureTask<>(() -> DeviceInfoUtils.getMsvSuffix());
msvSuffixTask.run();
try {
// Wait for msv suffix value.
final String msvSuffix = msvSuffixTask.get();
return Build.MODEL + msvSuffix;
} catch (ExecutionException e) {
Log.e(TAG, "Execution error, so we only show model name");
} catch (InterruptedException e) {
Log.e(TAG, "Interruption error, so we only show model name");
}
// If we can't get an msv suffix value successfully,
// it's better to return model name.
return Build.MODEL;
}
}