From 526dadc1170fb3deea60fd3d2e93ab62e54a00ab Mon Sep 17 00:00:00 2001 From: Tad Date: Tue, 17 Jan 2017 18:04:09 -0500 Subject: [PATCH] Remove stats Change-Id: If22fca4b2b641f8b68247ece20441b5cc7724709 --- AndroidManifest.xml | 25 --- proguard.flags | 1 - res/values/config.xml | 3 - res/values/strings.xml | 22 --- res/xml/anonymous_stats.xml | 32 ---- res/xml/parts_catalog.xml | 5 - res/xml/preview_data.xml | 52 ------ res/xml/privacy_settings.xml | 8 - .../cmparts/cmstats/AnonymousStats.java | 73 -------- .../cyanogenmod/cmparts/cmstats/PreviewData.java | 49 ----- .../cmparts/cmstats/ReportingService.java | 82 --------- .../cmparts/cmstats/ReportingServiceManager.java | 109 ----------- .../cmparts/cmstats/StatsUploadJobService.java | 205 --------------------- src/org/cyanogenmod/cmparts/cmstats/Utilities.java | 102 ---------- 14 files changed, 768 deletions(-) delete mode 100644 res/xml/anonymous_stats.xml delete mode 100644 res/xml/preview_data.xml delete mode 100644 src/org/cyanogenmod/cmparts/cmstats/AnonymousStats.java delete mode 100644 src/org/cyanogenmod/cmparts/cmstats/PreviewData.java delete mode 100644 src/org/cyanogenmod/cmparts/cmstats/ReportingService.java delete mode 100644 src/org/cyanogenmod/cmparts/cmstats/ReportingServiceManager.java delete mode 100644 src/org/cyanogenmod/cmparts/cmstats/StatsUploadJobService.java delete mode 100644 src/org/cyanogenmod/cmparts/cmstats/Utilities.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index d4f37a2..a574d98 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -180,31 +180,6 @@ android:value="status_bar_settings" /> - - - - - - - - - - - - - - - - - https://stats.lineageos.org/api/v1/stats - true diff --git a/res/values/strings.xml b/res/values/strings.xml index 3037cdd..79988d6 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -483,28 +483,6 @@ Total commits: %2$s

Last update: %3$s]]> - - - LineageOS statistics - Help make LineageOS better by opting into anonymous statistics reporting - About - Opting into LineageOS Statistics will allow non-personal data to be submitted to the - developers of LineageOS to track unique installations across devices. The information submitted includes an unique identifier, - which does not compromise your privacy or personal data. The data is submitted during each boot.\n\nFor an example of the data that is submitted, tap on Preview Data. - Enable reporting - Preview data - View stats - Learn more - - - Unique ID - Device - Version - Country - Carrier - Stats collection - When enabled, allows metrics collection - Auto-rotate screen Rotation settings diff --git a/res/xml/anonymous_stats.xml b/res/xml/anonymous_stats.xml deleted file mode 100644 index b29885c..0000000 --- a/res/xml/anonymous_stats.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - diff --git a/res/xml/parts_catalog.xml b/res/xml/parts_catalog.xml index 07329d9..649e808 100644 --- a/res/xml/parts_catalog.xml +++ b/res/xml/parts_catalog.xml @@ -73,11 +73,6 @@ android:fragment="org.cyanogenmod.cmparts.statusbar.StatusBarSettings" cm:xmlRes="@xml/status_bar_settings" /> - - - - - - - - - - - - - - - - - - diff --git a/res/xml/privacy_settings.xml b/res/xml/privacy_settings.xml index 5ae923a..45df2a1 100644 --- a/res/xml/privacy_settings.xml +++ b/res/xml/privacy_settings.xml @@ -36,12 +36,4 @@ android:targetClass="com.android.settings.applications.ProtectedAppsActivity" /> - - - - diff --git a/src/org/cyanogenmod/cmparts/cmstats/AnonymousStats.java b/src/org/cyanogenmod/cmparts/cmstats/AnonymousStats.java deleted file mode 100644 index 3a6669d..0000000 --- a/src/org/cyanogenmod/cmparts/cmstats/AnonymousStats.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (C) 2015 The CyanogenMod 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 org.cyanogenmod.cmparts.cmstats; - -import android.content.Context; -import android.content.SharedPreferences; -import android.os.Bundle; - -import org.cyanogenmod.cmparts.R; -import org.cyanogenmod.cmparts.SettingsPreferenceFragment; - -public class AnonymousStats extends SettingsPreferenceFragment { - - private static final String PREF_FILE_NAME = "CMStats"; - /* package */ static final String ANONYMOUS_OPT_IN = "pref_anonymous_opt_in"; - /* package */ static final String ANONYMOUS_LAST_CHECKED = "pref_anonymous_checked_in"; - - /* package */ static final String KEY_LAST_JOB_ID = "last_job_id"; - /* package */ static final int QUEUE_MAX_THRESHOLD = 1000; - - public static SharedPreferences getPreferences(Context context) { - return context.getSharedPreferences(PREF_FILE_NAME, 0); - } - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - addPreferencesFromResource(R.xml.anonymous_stats); - } - - public static void updateLastSynced(Context context) { - getPreferences(context) - .edit() - .putLong(ANONYMOUS_LAST_CHECKED,System.currentTimeMillis()) - .commit(); - } - - private static int getLastJobId(Context context) { - return getPreferences(context).getInt(KEY_LAST_JOB_ID, 0); - } - - private static void setLastJobId(Context context, int id) { - getPreferences(context) - .edit() - .putInt(KEY_LAST_JOB_ID, id) - .commit(); - } - - public static int getNextJobId(Context context) { - int lastId = getLastJobId(context); - if (lastId >= QUEUE_MAX_THRESHOLD) { - lastId = 1; - } else { - lastId += 1; - } - setLastJobId(context, lastId); - return lastId; - } -} diff --git a/src/org/cyanogenmod/cmparts/cmstats/PreviewData.java b/src/org/cyanogenmod/cmparts/cmstats/PreviewData.java deleted file mode 100644 index a14f76b..0000000 --- a/src/org/cyanogenmod/cmparts/cmstats/PreviewData.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2012 The CyanogenMod 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 org.cyanogenmod.cmparts.cmstats; - -import android.content.Context; -import android.os.Bundle; -import android.support.v7.preference.Preference; -import android.support.v7.preference.PreferenceScreen; - -import org.cyanogenmod.cmparts.R; -import org.cyanogenmod.cmparts.SettingsPreferenceFragment; - -public class PreviewData extends SettingsPreferenceFragment { - private static final String UNIQUE_ID = "preview_id"; - private static final String DEVICE = "preview_device"; - private static final String VERSION = "preview_version"; - private static final String COUNTRY = "preview_country"; - private static final String CARRIER = "preview_carrier"; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - addPreferencesFromResource(R.xml.preview_data); - - final PreferenceScreen prefSet = getPreferenceScreen(); - final Context context = getActivity(); - - prefSet.findPreference(UNIQUE_ID).setSummary(Utilities.getUniqueID(context)); - prefSet.findPreference(DEVICE).setSummary(Utilities.getDevice()); - prefSet.findPreference(VERSION).setSummary(Utilities.getModVersion()); - prefSet.findPreference(COUNTRY).setSummary(Utilities.getCountryCode(context)); - prefSet.findPreference(CARRIER).setSummary(Utilities.getCarrier(context)); - } -} diff --git a/src/org/cyanogenmod/cmparts/cmstats/ReportingService.java b/src/org/cyanogenmod/cmparts/cmstats/ReportingService.java deleted file mode 100644 index d1cd8e6..0000000 --- a/src/org/cyanogenmod/cmparts/cmstats/ReportingService.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (C) 2015 The CyanogenMod Project - * (C) 2017 The LineageOS 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 org.cyanogenmod.cmparts.cmstats; - -import android.app.IntentService; -import android.app.job.JobInfo; -import android.app.job.JobScheduler; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.os.PersistableBundle; -import android.os.UserHandle; -import android.util.Log; -import cyanogenmod.providers.CMSettings; - -import java.util.List; - -public class ReportingService extends IntentService { - /* package */ static final String TAG = "CMStats"; - private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - - public ReportingService() { - super(ReportingService.class.getSimpleName()); - } - - @Override - protected void onHandleIntent(Intent intent) { - JobScheduler js = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); - - String deviceId = Utilities.getUniqueID(getApplicationContext()); - String deviceName = Utilities.getDevice(); - String deviceVersion = Utilities.getModVersion(); - String deviceCountry = Utilities.getCountryCode(getApplicationContext()); - String deviceCarrier = Utilities.getCarrier(getApplicationContext()); - String deviceCarrierId = Utilities.getCarrierId(getApplicationContext()); - - final int cmOrgJobId = AnonymousStats.getNextJobId(getApplicationContext()); - - if (DEBUG) Log.d(TAG, "scheduling job id: " + cmOrgJobId); - - PersistableBundle cmBundle = new PersistableBundle(); - cmBundle.putString(StatsUploadJobService.KEY_DEVICE_NAME, deviceName); - cmBundle.putString(StatsUploadJobService.KEY_UNIQUE_ID, deviceId); - cmBundle.putString(StatsUploadJobService.KEY_VERSION, deviceVersion); - cmBundle.putString(StatsUploadJobService.KEY_COUNTRY, deviceCountry); - cmBundle.putString(StatsUploadJobService.KEY_CARRIER, deviceCarrier); - cmBundle.putString(StatsUploadJobService.KEY_CARRIER_ID, deviceCarrierId); - cmBundle.putLong(StatsUploadJobService.KEY_TIMESTAMP, System.currentTimeMillis()); - - // set job types - cmBundle.putInt(StatsUploadJobService.KEY_JOB_TYPE, - StatsUploadJobService.JOB_TYPE_CMORG); - - // schedule cmorg stats upload - js.schedule(new JobInfo.Builder(cmOrgJobId, new ComponentName(getPackageName(), - StatsUploadJobService.class.getName())) - .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY) - .setMinimumLatency(1000) - .setExtras(cmBundle) - .setPersisted(true) - .build()); - - // reschedule - AnonymousStats.updateLastSynced(this); - ReportingServiceManager.setAlarm(this); - } -} diff --git a/src/org/cyanogenmod/cmparts/cmstats/ReportingServiceManager.java b/src/org/cyanogenmod/cmparts/cmstats/ReportingServiceManager.java deleted file mode 100644 index ef53a0a..0000000 --- a/src/org/cyanogenmod/cmparts/cmstats/ReportingServiceManager.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (C) 2012 The CyanogenMod Project - * (C) 2017 The LineageOS 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 org.cyanogenmod.cmparts.cmstats; - -import android.app.AlarmManager; -import android.app.PendingIntent; -import android.app.job.JobScheduler; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.UserHandle; -import android.util.Log; -import cyanogenmod.providers.CMSettings; - -public class ReportingServiceManager extends BroadcastReceiver { - private static final long MILLIS_PER_HOUR = 60L * 60L * 1000L; - private static final long MILLIS_PER_DAY = 24L * MILLIS_PER_HOUR; - private static final long UPDATE_INTERVAL = 1L * MILLIS_PER_DAY; - - private static final String TAG = ReportingServiceManager.class.getSimpleName(); - - public static final String ACTION_LAUNCH_SERVICE = - "org.cyanogenmod.cmparts.action.TRIGGER_REPORT_METRICS"; - public static final String EXTRA_FORCE = "force"; - - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { - setAlarm(context); - } else if (intent.getAction().equals(ACTION_LAUNCH_SERVICE)){ - launchService(context, intent.getBooleanExtra(EXTRA_FORCE, false)); - } - } - - public static void setAlarm(Context context) { - SharedPreferences prefs = AnonymousStats.getPreferences(context); - if (prefs.contains(AnonymousStats.ANONYMOUS_OPT_IN)) { - migrate(context, prefs); - } - if (!Utilities.isStatsCollectionEnabled(context)) { - return; - } - long lastSynced = prefs.getLong(AnonymousStats.ANONYMOUS_LAST_CHECKED, 0); - if (lastSynced == 0) { - launchService(context, true); // service will reschedule the next alarm - return; - } - long millisFromNow = (lastSynced + UPDATE_INTERVAL) - System.currentTimeMillis(); - - Intent intent = new Intent(ACTION_LAUNCH_SERVICE); - intent.setClass(context, ReportingServiceManager.class); - - AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); - alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + millisFromNow, - PendingIntent.getBroadcast(context, 0, intent, 0)); - Log.d(TAG, "Next sync attempt in : " - + (millisFromNow / MILLIS_PER_HOUR) + " hours"); - } - - public static void launchService(Context context, boolean force) { - SharedPreferences prefs = AnonymousStats.getPreferences(context); - - if (!Utilities.isStatsCollectionEnabled(context)) { - return; - } - - if (!force) { - long lastSynced = prefs.getLong(AnonymousStats.ANONYMOUS_LAST_CHECKED, 0); - if (lastSynced == 0) { - setAlarm(context); - return; - } - long timeElapsed = System.currentTimeMillis() - lastSynced; - if (timeElapsed < UPDATE_INTERVAL) { - long timeLeft = UPDATE_INTERVAL - timeElapsed; - Log.d(TAG, "Waiting for next sync : " - + timeLeft / MILLIS_PER_HOUR + " hours"); - return; - } - } - - Intent intent = new Intent(); - intent.setClass(context, ReportingService.class); - context.startServiceAsUser(intent, UserHandle.OWNER); - } - - private static void migrate(Context context, SharedPreferences prefs) { - Utilities.setStatsCollectionEnabled(context, - prefs.getBoolean(AnonymousStats.ANONYMOUS_OPT_IN, true)); - prefs.edit().remove(AnonymousStats.ANONYMOUS_OPT_IN).commit(); - } - -} diff --git a/src/org/cyanogenmod/cmparts/cmstats/StatsUploadJobService.java b/src/org/cyanogenmod/cmparts/cmstats/StatsUploadJobService.java deleted file mode 100644 index 16f918b..0000000 --- a/src/org/cyanogenmod/cmparts/cmstats/StatsUploadJobService.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (C) 2015 The CyanogenMod Project - * (C) 2017 The LineageOS 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 org.cyanogenmod.cmparts.cmstats; - -import android.app.job.JobParameters; -import android.app.job.JobService; -import android.net.Uri; -import android.os.AsyncTask; -import android.os.PersistableBundle; -import android.util.ArrayMap; -import android.util.Log; -import org.cyanogenmod.cmparts.R; -import org.json.JSONException; -import org.json.JSONObject; - -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Collections; -import java.util.Map; - -public class StatsUploadJobService extends JobService { - - private static final String TAG = StatsUploadJobService.class.getSimpleName(); - private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); - - public static final String KEY_JOB_TYPE = "job_type"; - public static final int JOB_TYPE_CMORG = 1; - - public static final String KEY_UNIQUE_ID = "uniqueId"; - public static final String KEY_DEVICE_NAME = "deviceName"; - public static final String KEY_VERSION = "version"; - public static final String KEY_COUNTRY = "country"; - public static final String KEY_CARRIER = "carrier"; - public static final String KEY_CARRIER_ID = "carrierId"; - public static final String KEY_TIMESTAMP = "timeStamp"; - - private final Map mCurrentJobs - = Collections.synchronizedMap(new ArrayMap()); - - @Override - public boolean onStartJob(JobParameters jobParameters) { - if (DEBUG) - Log.d(TAG, "onStartJob() called with " + "jobParameters = [" + jobParameters + "]"); - - if (!Utilities.isStatsCollectionEnabled(this)) { - return false; - } - - final StatsUploadTask uploadTask = new StatsUploadTask(jobParameters); - mCurrentJobs.put(jobParameters, uploadTask); - uploadTask.execute((Void) null); - return true; - } - - @Override - public boolean onStopJob(JobParameters jobParameters) { - if (DEBUG) - Log.d(TAG, "onStopJob() called with " + "jobParameters = [" + jobParameters + "]"); - - final StatsUploadTask cancelledJob; - cancelledJob = mCurrentJobs.remove(jobParameters); - - if (cancelledJob != null) { - // cancel the ongoing background task - cancelledJob.cancel(true); - return true; // reschedule - } - - return false; - } - - private class StatsUploadTask extends AsyncTask { - - private JobParameters mJobParams; - - public StatsUploadTask(JobParameters jobParams) { - this.mJobParams = jobParams; - } - - @Override - protected Boolean doInBackground(Void... params) { - - PersistableBundle extras = mJobParams.getExtras(); - - String deviceId = extras.getString(KEY_UNIQUE_ID); - String deviceName = extras.getString(KEY_DEVICE_NAME); - String deviceVersion = extras.getString(KEY_VERSION); - String deviceCountry = extras.getString(KEY_COUNTRY); - String deviceCarrier = extras.getString(KEY_CARRIER); - String deviceCarrierId = extras.getString(KEY_CARRIER_ID); - long timeStamp = extras.getLong(KEY_TIMESTAMP); - - boolean success = false; - int jobType = extras.getInt(KEY_JOB_TYPE, -1); - if (!isCancelled()) { - switch (jobType) { - case JOB_TYPE_CMORG: - try { - JSONObject json = buildStatsRequest(deviceId, deviceName, - deviceVersion, deviceCountry, deviceCarrier, deviceCarrierId); - success = uploadToCM(json); - } catch (IOException | JSONException e) { - Log.e(TAG, "Could not upload stats checkin to community server", e); - success = false; - } - break; - } - } - if (DEBUG) - Log.d(TAG, "job id " + mJobParams.getJobId() + ", has finished with success=" - + success); - return success; - } - - @Override - protected void onPostExecute(Boolean success) { - mCurrentJobs.remove(mJobParams); - jobFinished(mJobParams, !success); - } - } - - private JSONObject buildStatsRequest(String deviceId, String deviceName, String deviceVersion, - String deviceCountry, String deviceCarrier, - String deviceCarrierId) throws JSONException { - JSONObject request = new JSONObject(); - request.put("device_hash", deviceId); - request.put("device_name", deviceName); - request.put("device_version", deviceVersion); - request.put("device_country", deviceCountry); - request.put("device_carrier", deviceCarrier); - request.put("device_carrier_id", deviceCarrierId); - return request; - } - - private boolean uploadToCM(JSONObject json) throws IOException { - final Uri uri = Uri.parse(getString(R.string.stats_cm_url)); - URL url = new URL(uri.toString()); - HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); - try { - urlConnection.setInstanceFollowRedirects(true); - urlConnection.setDoOutput(true); - urlConnection.setDoInput(true); - urlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); - - OutputStream os = urlConnection.getOutputStream(); - os.write(json.toString().getBytes("UTF-8")); - os.close(); - - final int responseCode = urlConnection.getResponseCode(); - if (DEBUG) Log.d(TAG, "cm server response code=" + responseCode); - final boolean success = responseCode == HttpURLConnection.HTTP_OK; - if (!success) { - Log.w(TAG, "failed sending, server returned: " + getResponse(urlConnection, - !success)); - } - return success; - } finally { - urlConnection.disconnect(); - } - - } - - private String getResponse(HttpURLConnection httpUrlConnection, boolean errorStream) - throws IOException { - InputStream responseStream = new BufferedInputStream(errorStream - ? httpUrlConnection.getErrorStream() - : httpUrlConnection.getInputStream()); - - BufferedReader responseStreamReader = new BufferedReader( - new InputStreamReader(responseStream)); - String line = ""; - StringBuilder stringBuilder = new StringBuilder(); - while ((line = responseStreamReader.readLine()) != null) { - stringBuilder.append(line).append("\n"); - } - responseStreamReader.close(); - responseStream.close(); - - return stringBuilder.toString(); - } - -} diff --git a/src/org/cyanogenmod/cmparts/cmstats/Utilities.java b/src/org/cyanogenmod/cmparts/cmstats/Utilities.java deleted file mode 100644 index efb7379..0000000 --- a/src/org/cyanogenmod/cmparts/cmstats/Utilities.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2012 The CyanogenMod 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 org.cyanogenmod.cmparts.cmstats; - -import android.content.Context; -import android.os.Build; -import android.os.SystemProperties; -import android.provider.Settings; -import android.telephony.TelephonyManager; -import android.text.TextUtils; - -import cyanogenmod.providers.CMSettings; - -import java.math.BigInteger; -import java.net.NetworkInterface; -import java.security.MessageDigest; - -public class Utilities { - public static String getUniqueID(Context context) { - final String id = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); - return digest(context.getPackageName() + id); - } - - public static String getCarrier(Context context) { - TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - String carrier = tm.getNetworkOperatorName(); - if (TextUtils.isEmpty(carrier)) { - carrier = "Unknown"; - } - return carrier; - } - - public static String getCarrierId(Context context) { - TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - String carrierId = tm.getNetworkOperator(); - if (TextUtils.isEmpty(carrierId)) { - carrierId = "0"; - } - return carrierId; - } - - public static String getCountryCode(Context context) { - TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); - String countryCode = tm.getNetworkCountryIso(); - if (TextUtils.isEmpty(countryCode)) { - countryCode = "Unknown"; - } - return countryCode; - } - - public static String getDevice() { - return SystemProperties.get("ro.cm.device", Build.PRODUCT); - } - - public static String getModVersion() { - return SystemProperties.get("ro.cm.version", Build.DISPLAY); - } - - public static String digest(String input) { - try { - MessageDigest md = MessageDigest.getInstance("SHA-256"); - return new BigInteger(1, md.digest(input.getBytes())).toString(16).toUpperCase(); - } catch (Exception e) { - return null; - } - } - - /** - * Check to see if global stats are enabled. - * @param context - * @return Whether or not stats collection is enabled. - */ - public static boolean isStatsCollectionEnabled(Context context) { - return CMSettings.Secure.getInt(context.getContentResolver(), - CMSettings.Secure.STATS_COLLECTION, 1) != 0; - } - - /** - * Enabled or disable stats collection - * @param context - * @param enabled Boolean that sets collection being enabled. - */ - public static void setStatsCollectionEnabled(Context context, boolean enabled) { - int enable = (enabled) ? 1 : 0; - CMSettings.Secure.putInt(context.getContentResolver(), - CMSettings.Secure.STATS_COLLECTION, enable); - } -} -- 2.9.3