/* * Copyright (C) 2013 - 2014 Alexander "Evisceration" Martinz * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.namelessrom.devicecontrol.modules.info; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.SystemClock; import android.support.annotation.NonNull; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import org.namelessrom.devicecontrol.App; import org.namelessrom.devicecontrol.R; import at.amartinz.hardware.Emmc; import org.namelessrom.devicecontrol.preferences.CustomPreferenceCategoryMaterial; import at.amartinz.execution.RootShell; import at.amartinz.hardware.device.Device; import at.amartinz.hardware.device.KernelInfo; import at.amartinz.hardware.device.MemoryInfo; import alexander.martinz.libs.materialpreferences.MaterialPreference; import alexander.martinz.libs.materialpreferences.MaterialSupportPreferenceFragment; public class DeviceInfoGeneralFragment extends MaterialSupportPreferenceFragment implements MaterialPreference.MaterialPreferenceClickListener { private long[] mHits = new long[3]; private boolean mEasterEggStarted = false; @Override protected int getLayoutResourceId() { return R.layout.pref_info_dev_general; } public DeviceInfoGeneralFragment() { } @Override public void onResume() { super.onResume(); mEasterEggStarted = false; } @NonNull @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View v = super.onCreateView(inflater, container, savedInstanceState); final CustomPreferenceCategoryMaterial kernelCategory = (CustomPreferenceCategoryMaterial) v.findViewById(R.id.cat_kernel); KernelInfo.feedWithInformation(new Device.KernelInfoListener() { @Override public void onKernelInfoAvailable(@NonNull final KernelInfo kernelInfo) { kernelCategory.post(new Runnable() { @Override public void run() { addPreference(kernelCategory, "kernel_version", R.string.version, String.format("%s %s", kernelInfo.version, kernelInfo.revision)); addPreference(kernelCategory, "kernel_extras", R.string.extras, kernelInfo.extras); addPreference(kernelCategory, "kernel_gcc", R.string.toolchain, kernelInfo.toolchain); addPreference(kernelCategory, "kernel_date", R.string.build_date, kernelInfo.date); addPreference(kernelCategory, "kernel_host", R.string.host, kernelInfo.host); } }); } }); final CustomPreferenceCategoryMaterial deviceCategory = (CustomPreferenceCategoryMaterial) v.findViewById(R.id.cat_device_information); MemoryInfo.feedWithInformation(MemoryInfo.TYPE_MB, new Device.MemoryInfoListener() { @Override public void onMemoryInfoAvailable(@NonNull final MemoryInfo memInfo) { final Device device = Device.get(getActivity()); deviceCategory.post(new Runnable() { @Override public void run() { // TODO: save / restore / check --> ANDROID ID addPreference(deviceCategory, "android_id", R.string.android_id, device.androidId); addPreference(deviceCategory, "device_manufacturer", R.string.manufacturer, device.manufacturer); addPreference(deviceCategory, "device_device", R.string.device, device.device); addPreference(deviceCategory, "device_model", R.string.model, device.model); addPreference(deviceCategory, "device_product", R.string.product, device.product); addPreference(deviceCategory, "device_board", R.string.board, device.board); addPreference(deviceCategory, "device_bootloader", R.string.bootloader, device.bootloader); addPreference(deviceCategory, "device_radio_version", R.string.radio_version, device.radio); addPreference(deviceCategory, "device_selinux", R.string.selinux, device.isSELinuxEnforcing ? getString(R.string.selinux_enforcing) : getString(R.string.selinux_permissive)); addPreference(deviceCategory, "memory_total", R.string.memory_total, MemoryInfo.getAsMb(memInfo.total)); } }); } }); return v; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); final Device device = Device.get(getActivity()); // Platform CustomPreferenceCategoryMaterial category = (CustomPreferenceCategoryMaterial) view.findViewById(R.id.cat_platform); addPreference(category, "platform_version", R.string.version, device.platformVersion).setOnPreferenceClickListener(this); addPreference(category, "platform_id", R.string.build_id, device.platformId); addPreference(category, "platform_type", R.string.type, device.platformType); addPreference(category, "platform_tags", R.string.tags, device.platformTags); addPreference(category, "platform_build_date", R.string.build_date, device.platformBuildType); // Runtime category = (CustomPreferenceCategoryMaterial) view.findViewById(R.id.cat_runtime); addPreference(category, "vm_library", R.string.type, device.vmLibrary); addPreference(category, "vm_version", R.string.version, device.vmVersion); // eMMC category = (CustomPreferenceCategoryMaterial) view.findViewById(R.id.cat_emmc); addPreference(category, "emmc_name", R.string.name, Emmc.get().getName()); addPreference(category, "emmc_cid", R.string.emmc_cid, Emmc.get().getCid()); addPreference(category, "emmc_mid", R.string.emmc_mid, Emmc.get().getMid()); addPreference(category, "emmc_rev", R.string.emmc_rev, Emmc.get().getRev()); addPreference(category, "emmc_date", R.string.emmc_date, Emmc.get().getDate()); String tmp = Emmc.get().canBrick() ? getString(R.string.emmc_can_brick_true) : getString(R.string.emmc_can_brick_false); tmp = tmp + '\n' + getString(R.string.press_learn_more); addPreference(category, "emmc_can_brick", R.string.emmc_can_brick, tmp).setOnPreferenceClickListener(this); } private MaterialPreference addPreference(final CustomPreferenceCategoryMaterial category, final String key, final int titleResId, final String summary) { return addPreference(category, key, getString(titleResId), summary); } private MaterialPreference addPreference(final CustomPreferenceCategoryMaterial category, final String key, final String title, final String summary) { final Context context = getActivity(); final MaterialPreference preference = new MaterialPreference(context); preference.init(context); preference.setKey(key); preference.setTitle(title); preference.setSummary(TextUtils.isEmpty(summary) ? getString(R.string.unknown) : summary); category.addPreference(preference); return preference; } @Override public boolean onPreferenceClicked(MaterialPreference materialPreference) { final String key = materialPreference.getKey(); if (!mEasterEggStarted && "platform_version".equals(key)) { System.arraycopy(mHits, 1, mHits, 0, mHits.length - 1); mHits[mHits.length - 1] = SystemClock.uptimeMillis(); if (mHits[0] >= (SystemClock.uptimeMillis() - 500)) { RootShell.fireAndForget("am start android/com.android.internal.app.PlatLogoActivity"); mEasterEggStarted = true; } return true; } else if ("emmc_can_brick".equals(key)) { final Activity activity = getActivity(); ((App) activity.getApplicationContext()).getCustomTabsHelper().launchUrl(activity, Emmc.BRICK_INFO_URL); return true; } return false; } }