From 3a9c4fef92a40a52aabdd5a9f60b3a053a91411a Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Tue, 1 Dec 2015 11:59:58 -0500
Subject: [PATCH] remove analytics support

---
 AndroidManifest.xml                                |  26 --
 res/values/cm_strings.xml                          |  22 --
 res/xml/anonymous_stats.xml                        |  32 ---
 res/xml/device_info_settings.xml                   |   8 -
 res/xml/preview_data.xml                           |  53 ----
 res/xml/privacy_settings_cyanogenmod.xml           |   8 -
 .../android/settings/cmstats/AnonymousStats.java   | 105 --------
 src/com/android/settings/cmstats/PreviewData.java  |  55 ----
 .../android/settings/cmstats/ReportingService.java | 106 --------
 .../settings/cmstats/ReportingServiceManager.java  | 123 ---------
 .../settings/cmstats/StatsUploadJobService.java    | 292 ---------------------
 src/com/android/settings/cmstats/Utilities.java    | 102 -------
 12 files changed, 932 deletions(-)
 delete mode 100644 res/xml/anonymous_stats.xml
 delete mode 100644 res/xml/preview_data.xml
 delete mode 100644 src/com/android/settings/cmstats/AnonymousStats.java
 delete mode 100644 src/com/android/settings/cmstats/PreviewData.java
 delete mode 100644 src/com/android/settings/cmstats/ReportingService.java
 delete mode 100644 src/com/android/settings/cmstats/ReportingServiceManager.java
 delete mode 100644 src/com/android/settings/cmstats/StatsUploadJobService.java
 delete mode 100644 src/com/android/settings/cmstats/Utilities.java

diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 75065cf..63648fc 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1530,12 +1530,6 @@
 
         <activity android:name=".EncryptionInterstitial"/>
 
-        <service android:label="ReportingService"
-            android:enabled="true"
-            android:exported="false"
-            android:name=".cmstats.ReportingService">
-        </service>
-
         <!-- Runs in the phone process since it needs access to the Phone object -->
         <activity android:name=".deviceinfo.Status"
                 android:label="@string/device_status_activity_title"
@@ -2611,26 +2605,6 @@
             </intent-filter>$
         </receiver>
 
-        <!-- Anonymous Statistics -->
-        <receiver android:name=".cmstats.ReportingServiceManager"
-            android:enabled="true"
-            android:exported="false"
-            android:label="ReportingServiceManager">
-            <intent-filter>
-                <action android:name="android.intent.action.BOOT_COMPLETED" />
-                <action android:name="com.android.settings.action.TRIGGER_REPORT_METRICS" />
-            </intent-filter>
-        </receiver>
-
-        <service android:label="ReportingService"
-            android:enabled="true"
-            android:exported="false"
-            android:name=".cmstats.ReportingService">
-        </service>
-
-        <service android:name=".cmstats.StatsUploadJobService"
-                 android:permission="android.permission.BIND_JOB_SERVICE" />
-
         <!-- Watch for ContactsContract.Profile changes and update the user's photo.  -->
         <receiver android:name=".users.ProfileUpdateReceiver">
             <intent-filter>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 853281b..97963a4 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -817,28 +817,6 @@
     <string name="no_filters_title">No filters set</string>
     <string name="app_ops_ignored_count">Denied <xliff:g id="count" example="2 times">%s</xliff:g></string>
 
-    <!-- Anonymous Statistics #CM -->
-    <!-- About device screen, list item title. Takes the user to the screen about opting in or out of anonymous statistics. -->
-    <string name="anonymous_statistics_title">CyanogenMod statistics</string>
-    <string name="anonymous_statistics_summary">Help make CyanogenMod better by opting into anonymous statistics reporting</string>
-    <string name="anonymous_statistics_warning_title">About</string>
-    <string name="anonymous_statistics_warning">Opting into CyanogenMod Statistics will allow non-personal data to be submitted to the
-        developers of CyanogenMod 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.</string>
-    <string name="enable_reporting_title">Enable reporting</string>
-    <string name="preview_data_title">Preview data</string>
-    <string name="view_stats_title">View stats</string>
-    <string name="anonymous_learn_more">Learn more</string>
-
-    <!-- Anonymous Statistics - Preview -->
-    <string name="preview_id_title">Unique ID</string>
-    <string name="preview_device_title">Device</string>
-    <string name="preview_version_title">Version</string>
-    <string name="preview_country_title">Country</string>
-    <string name="preview_carrier_title">Carrier</string>
-    <string name="stats_collection_title">Stats collection</string>
-    <string name="stats_collection_summary">When enabled, allows metrics collection.</string>
-
     <!-- Protected apps lockpattern reset button -->
     <string name="lockpattern_reset_button">Reset pattern</string>
     <string name="lockpattern_settings_reset_summary">Enter primary email account and associated password to reset pattern lock</string>
diff --git a/res/xml/anonymous_stats.xml b/res/xml/anonymous_stats.xml
deleted file mode 100644
index 7cc5875..0000000
--- a/res/xml/anonymous_stats.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:title="@string/anonymous_statistics_title"
-    xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
-
-    <com.android.settings.cyanogenmod.SecureSettingSwitchPreference
-            android:key="stats_collection"
-            android:title="@string/stats_collection_title"
-            android:summary="@string/stats_collection_summary"
-            android:defaultValue="true" />
-
-    <PreferenceScreen
-        android:title="@string/preview_data_title"
-        android:fragment="com.android.settings.cmstats.PreviewData" />
-
-</PreferenceScreen>
diff --git a/res/xml/device_info_settings.xml b/res/xml/device_info_settings.xml
index 6cda1ed..4abb4d9 100644
--- a/res/xml/device_info_settings.xml
+++ b/res/xml/device_info_settings.xml
@@ -58,14 +58,6 @@
             <intent android:action="android.settings.SHOW_MANUAL" />
         </PreferenceScreen>
 
-        <!-- Anonymous statistics - (CMStats) -->
-        <PreferenceScreen
-            android:key="cmstats"
-            android:title="@string/anonymous_statistics_title"
-            android:summary="@string/anonymous_statistics_summary"
-            android:fragment="com.android.settings.cmstats.AnonymousStats" >
-        </PreferenceScreen>
-
         <!-- Legal Information -->
         <PreferenceScreen
                 android:key="container"
diff --git a/res/xml/preview_data.xml b/res/xml/preview_data.xml
deleted file mode 100644
index 966e501..0000000
--- a/res/xml/preview_data.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<PreferenceScreen
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:title="@string/preview_data_title"
-    xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
-
-    <Preference
-        android:key="preview_id"
-        style="?android:preferenceInformationStyle"
-        android:title="@string/preview_id_title"
-        android:summary="%s" />
-
-    <Preference
-        android:key="preview_device"
-        style="?android:preferenceInformationStyle"
-        android:title="@string/preview_device_title"
-        android:summary="%s" />
-
-    <Preference
-        android:key="preview_version"
-        style="?android:preferenceInformationStyle"
-        android:title="@string/preview_version_title"
-        android:summary="%s" />
-
-    <Preference
-        android:key="preview_country"
-        style="?android:preferenceInformationStyle"
-        android:title="@string/preview_country_title"
-        android:summary="%s" />
-
-    <Preference
-        android:key="preview_carrier"
-        style="?android:preferenceInformationStyle"
-        android:title="@string/preview_carrier_title"
-        android:summary="%s" />
-
-</PreferenceScreen>
-
diff --git a/res/xml/privacy_settings_cyanogenmod.xml b/res/xml/privacy_settings_cyanogenmod.xml
index 65e8198..6cf695b 100644
--- a/res/xml/privacy_settings_cyanogenmod.xml
+++ b/res/xml/privacy_settings_cyanogenmod.xml
@@ -28,12 +28,4 @@
             android:title="@string/blacklist_title"
             android:summary="@string/blacklist_summary"
             android:fragment="com.android.settings.blacklist.BlacklistSettings" />
-
-        <!-- Anonymous statistics - (CMStats) -->
-        <PreferenceScreen
-            android:key="cmstats"
-            android:title="@string/anonymous_statistics_title"
-            android:summary="@string/anonymous_statistics_summary"
-            android:fragment="com.android.settings.cmstats.AnonymousStats" >
-        </PreferenceScreen>
 </PreferenceScreen>
diff --git a/src/com/android/settings/cmstats/AnonymousStats.java b/src/com/android/settings/cmstats/AnonymousStats.java
deleted file mode 100644
index 1534ccf..0000000
--- a/src/com/android/settings/cmstats/AnonymousStats.java
+++ /dev/null
@@ -1,105 +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 com.android.settings.cmstats;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.Bundle;
-
-import android.os.UserHandle;
-import android.preference.Preference;
-import android.preference.PreferenceScreen;
-import android.preference.SwitchPreference;
-import com.android.internal.logging.MetricsLogger;
-import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-import cyanogenmod.providers.CMSettings;
-
-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 final String KEY_STATS = "stats_collection";
-
-    SwitchPreference mStatsSwitch;
-
-    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);
-        mStatsSwitch = (SwitchPreference) findPreference(KEY_STATS);
-    }
-
-    @Override
-    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
-        if (preference == mStatsSwitch) {
-            boolean checked = mStatsSwitch.isChecked();
-            if (checked) {
-                // clear opt out flags
-                CMSettings.Secure.putIntForUser(getContentResolver(),
-                        CMSettings.Secure.STATS_COLLECTION_REPORTED, 0, UserHandle.USER_OWNER);
-            }
-            // will initiate opt out sequence if necessary
-            ReportingServiceManager.setAlarm(getActivity());
-            return true;
-        }
-        return super.onPreferenceTreeClick(preferenceScreen, preference);
-    }
-
-    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;
-    }
-
-    @Override
-    protected int getMetricsCategory() {
-        return MetricsLogger.DONT_TRACK_ME_BRO;
-    }
-}
diff --git a/src/com/android/settings/cmstats/PreviewData.java b/src/com/android/settings/cmstats/PreviewData.java
deleted file mode 100644
index 014f0e5..0000000
--- a/src/com/android/settings/cmstats/PreviewData.java
+++ /dev/null
@@ -1,55 +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 com.android.settings.cmstats;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.PreferenceScreen;
-
-import com.android.internal.logging.MetricsLogger;
-import com.android.settings.R;
-import com.android.settings.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));
-    }
-
-    @Override
-    protected int getMetricsCategory() {
-        return MetricsLogger.DONT_TRACK_ME_BRO;
-    }
-}
diff --git a/src/com/android/settings/cmstats/ReportingService.java b/src/com/android/settings/cmstats/ReportingService.java
deleted file mode 100644
index 8410143..0000000
--- a/src/com/android/settings/cmstats/ReportingService.java
+++ /dev/null
@@ -1,106 +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 com.android.settings.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 static final String EXTRA_OPTING_OUT = "cmstats::opt_out";
-
-    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());
-        boolean optOut = intent.getBooleanExtra(EXTRA_OPTING_OUT, false);
-
-        final int cyanogenJobId = AnonymousStats.getNextJobId(getApplicationContext());
-        final int cmOrgJobId = AnonymousStats.getNextJobId(getApplicationContext());
-
-        if (DEBUG) Log.d(TAG, "scheduling jobs id: " + cyanogenJobId + ", " + cmOrgJobId);
-
-        PersistableBundle cyanogenBundle = new PersistableBundle();
-        cyanogenBundle.putBoolean(StatsUploadJobService.KEY_OPT_OUT, optOut);
-        cyanogenBundle.putString(StatsUploadJobService.KEY_DEVICE_NAME, deviceName);
-        cyanogenBundle.putString(StatsUploadJobService.KEY_UNIQUE_ID, deviceId);
-        cyanogenBundle.putString(StatsUploadJobService.KEY_VERSION, deviceVersion);
-        cyanogenBundle.putString(StatsUploadJobService.KEY_COUNTRY, deviceCountry);
-        cyanogenBundle.putString(StatsUploadJobService.KEY_CARRIER, deviceCarrier);
-        cyanogenBundle.putString(StatsUploadJobService.KEY_CARRIER_ID, deviceCarrierId);
-        cyanogenBundle.putLong(StatsUploadJobService.KEY_TIMESTAMP, System.currentTimeMillis());
-
-        // get snapshot and persist it
-        PersistableBundle cmBundle = new PersistableBundle(cyanogenBundle);
-
-        // set job types
-        cyanogenBundle.putInt(StatsUploadJobService.KEY_JOB_TYPE,
-                StatsUploadJobService.JOB_TYPE_CYANOGEN);
-        cmBundle.putInt(StatsUploadJobService.KEY_JOB_TYPE,
-                StatsUploadJobService.JOB_TYPE_CMORG);
-
-        // schedule cyanogen stats upload
-        js.schedule(new JobInfo.Builder(cyanogenJobId, new ComponentName(getPackageName(),
-                StatsUploadJobService.class.getName()))
-                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
-                .setMinimumLatency(1000)
-                .setExtras(cyanogenBundle)
-                .setPersisted(true)
-                .build());
-
-        // 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());
-
-        if (optOut) {
-            // we've successfully scheduled the opt out.
-            CMSettings.Secure.putIntForUser(getContentResolver(),
-                    CMSettings.Secure.STATS_COLLECTION_REPORTED, 1, UserHandle.USER_OWNER);
-        }
-
-        // reschedule
-        AnonymousStats.updateLastSynced(this);
-        ReportingServiceManager.setAlarm(this);
-    }
-}
diff --git a/src/com/android/settings/cmstats/ReportingServiceManager.java b/src/com/android/settings/cmstats/ReportingServiceManager.java
deleted file mode 100644
index bce1372..0000000
--- a/src/com/android/settings/cmstats/ReportingServiceManager.java
+++ /dev/null
@@ -1,123 +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 com.android.settings.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 =
-            "com.android.settings.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));
-        }
-    }
-
-    /**
-     * opt out if we haven't yet
-     */
-    public static void initiateOptOut(Context context) {
-        final boolean optOutReported = CMSettings.Secure.getIntForUser(context.getContentResolver(),
-                CMSettings.Secure.STATS_COLLECTION_REPORTED, 0, UserHandle.USER_OWNER) == 1;
-        if (!optOutReported) {
-            Intent intent = new Intent();
-            intent.setClass(context, ReportingService.class);
-            intent.putExtra(ReportingService.EXTRA_OPTING_OUT, true);
-            context.startServiceAsUser(intent, UserHandle.OWNER);
-        }
-    }
-
-    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)) {
-            initiateOptOut(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/com/android/settings/cmstats/StatsUploadJobService.java b/src/com/android/settings/cmstats/StatsUploadJobService.java
deleted file mode 100644
index 77b26e6..0000000
--- a/src/com/android/settings/cmstats/StatsUploadJobService.java
+++ /dev/null
@@ -1,292 +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 com.android.settings.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 com.android.settings.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_CYANOGEN = 1;
-    public static final int JOB_TYPE_CMORG = 2;
-
-    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";
-    public static final String KEY_OPT_OUT = "optOut";
-
-    private final Map<JobParameters, StatsUploadTask> mCurrentJobs
-            = Collections.synchronizedMap(new ArrayMap<JobParameters, StatsUploadTask>());
-
-    @Override
-    public boolean onStartJob(JobParameters jobParameters) {
-        if (DEBUG)
-            Log.d(TAG, "onStartJob() called with " + "jobParameters = [" + jobParameters + "]");
-        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<Void, Void, Void> {
-
-        private JobParameters mJobParams;
-
-        public StatsUploadTask(JobParameters jobParams) {
-            this.mJobParams = jobParams;
-        }
-
-        @Override
-        protected Void 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 optOut = extras.getBoolean(KEY_OPT_OUT);
-
-            boolean success = false;
-            int jobType = extras.getInt(KEY_JOB_TYPE, -1);
-            if (!isCancelled()) {
-                switch (jobType) {
-                    case JOB_TYPE_CYANOGEN:
-                        try {
-                            JSONObject json = new JSONObject();
-                            json.put("optOut", optOut);
-                            json.put("uniqueId", deviceId);
-                            json.put("deviceName", deviceName);
-                            json.put("version", deviceVersion);
-                            json.put("country", deviceCountry);
-                            json.put("carrier", deviceCarrier);
-                            json.put("carrierId", deviceCarrierId);
-                            json.put("timestamp", timeStamp);
-
-                            success = uploadToCyanogen(json);
-                        } catch (IOException | JSONException e) {
-                            Log.e(TAG, "Could not upload stats checkin to cyanogen server", e);
-                            success = false;
-                        }
-                        break;
-
-                    case JOB_TYPE_CMORG:
-                        try {
-                            success = uploadToCM(deviceId, deviceName, deviceVersion, deviceCountry,
-                                    deviceCarrier, deviceCarrierId, optOut);
-                        } catch (IOException e) {
-                            Log.e(TAG, "Could not upload stats checkin to commnity server", e);
-                            success = false;
-                        }
-                        break;
-                }
-            }
-
-            if (success) {
-                // we hit the server, succeed either which way.
-                mCurrentJobs.remove(mJobParams);
-            }
-
-            if (DEBUG)
-                Log.d(TAG, "job id " + mJobParams.getJobId() + ", has finished with success="
-                        + success);
-            jobFinished(mJobParams, !success);
-            return null;
-        }
-    }
-
-
-    private boolean uploadToCM(String deviceId, String deviceName, String deviceVersion,
-                               String deviceCountry, String deviceCarrier, String deviceCarrierId,
-                               boolean optOut)
-            throws IOException {
-
-        final Uri uri = Uri.parse(getString(R.string.stats_cm_url)).buildUpon()
-                .appendQueryParameter("opt_out", optOut ? "1" : "0")
-                .appendQueryParameter("device_hash", deviceId)
-                .appendQueryParameter("device_name", deviceName)
-                .appendQueryParameter("device_version", deviceVersion)
-                .appendQueryParameter("device_country", deviceCountry)
-                .appendQueryParameter("device_carrier", deviceCarrier)
-                .appendQueryParameter("device_carrier_id", deviceCarrierId).build();
-        URL url = new URL(uri.toString());
-        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
-        try {
-            urlConnection.setInstanceFollowRedirects(true);
-            urlConnection.setDoOutput(true);
-            urlConnection.connect();
-
-            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 boolean uploadToCyanogen(JSONObject json)
-            throws IOException, JSONException {
-        String authToken = getAuthToken();
-
-        if (authToken.isEmpty()) {
-            Log.w(TAG, "no auth token!");
-        }
-
-        URL url = new URL(getString(R.string.stats_cyanogen_url));
-        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
-        try {
-            urlConnection.setInstanceFollowRedirects(true);
-            urlConnection.setDoInput(true);
-            urlConnection.setDoOutput(true);
-
-            urlConnection.setRequestProperty("Accept-Encoding", "identity");
-            urlConnection.setRequestProperty("Authorization", authToken);
-            urlConnection.setRequestProperty("Content-Type", "application/json");
-
-            OutputStream os = urlConnection.getOutputStream();
-            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
-            writer.write(json.toString());
-            writer.flush();
-            writer.close();
-            os.close();
-
-            urlConnection.connect();
-
-            final int responseCode = urlConnection.getResponseCode();
-            final boolean success = responseCode == HttpURLConnection.HTTP_OK;
-
-            final String response = getResponse(urlConnection, !success);
-            if (DEBUG)
-                Log.d(TAG, "server responseCode: " + responseCode +", response=" + response);
-
-            if (!success) {
-                Log.w(TAG, "failed sending, server returned: " + response);
-            }
-            return success;
-        } finally {
-            urlConnection.disconnect();
-        }
-    }
-
-    private String getAuthToken() {
-        HttpURLConnection urlConnection = null;
-        try {
-            URL url = new URL(getString(R.string.stats_cyanogen_token_url));
-            urlConnection = (HttpURLConnection) url.openConnection();
-            urlConnection.setInstanceFollowRedirects(true);
-            urlConnection.setDoInput(true);
-
-            urlConnection.setRequestProperty("Accept-Encoding", "identity");
-            urlConnection.setRequestProperty("Content-Type", "text/plain");
-
-            urlConnection.connect();
-
-            final int responseCode = urlConnection.getResponseCode();
-            final boolean success = responseCode == HttpURLConnection.HTTP_OK;
-            if (DEBUG) Log.d(TAG, "server auth response code=" + responseCode);
-            final String response = getResponse(urlConnection, !success);
-            if (DEBUG)
-                Log.d(TAG, "server auth response=" + response);
-
-            if (success) {
-                return response;
-            }
-        } catch (IOException e) {
-            Log.e(TAG, "error getting auth token", e);
-        } finally {
-            if (urlConnection != null) {
-                urlConnection.disconnect();
-            }
-        }
-        return "";
-    }
-
-    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/com/android/settings/cmstats/Utilities.java b/src/com/android/settings/cmstats/Utilities.java
deleted file mode 100644
index 1e98888..0000000
--- a/src/com/android/settings/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 com.android.settings.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("MD5");
-            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);
-    }
-}
