mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-12-19 21:04:26 -05:00
2565 lines
100 KiB
Diff
2565 lines
100 KiB
Diff
From 11df11ec7fe9f43798cf5fa33b65acbb45dc52b4 Mon Sep 17 00:00:00 2001
|
|
From: Tad <tad@spotco.us>
|
|
Date: Thu, 5 May 2016 02:53:50 -0400
|
|
Subject: [PATCH 1/5] Revert "Trebuchet Statistics:"
|
|
|
|
This reverts commit a20b046db71039ee581bb80274cf1fc450b3fd99.
|
|
|
|
Change-Id: I4c71ccdc40151d5d3f98b776f2ce215027009978
|
|
---
|
|
Android.mk | 2 +-
|
|
AndroidManifest.xml | 10 --
|
|
src/com/android/launcher3/Launcher.java | 32 -----
|
|
src/com/android/launcher3/LauncherModel.java | 37 +----
|
|
.../launcher3/WallpaperChangedReceiver.java | 15 --
|
|
.../launcher3/stats/external/StatsUtil.java | 117 ---------------
|
|
.../launcher3/stats/external/TrackingBundle.java | 67 ---------
|
|
.../stats/internal/db/DatabaseHelper.java | 159 ---------------------
|
|
.../stats/internal/db/TrackingEventContract.java | 31 ----
|
|
.../stats/internal/model/CountAction.java | 73 ----------
|
|
.../internal/model/CountOriginByPackageAction.java | 91 ------------
|
|
.../stats/internal/model/ITrackingAction.java | 45 ------
|
|
src/com/android/launcher3/stats/util/Logger.java | 55 -------
|
|
13 files changed, 4 insertions(+), 730 deletions(-)
|
|
delete mode 100644 src/com/android/launcher3/stats/external/StatsUtil.java
|
|
delete mode 100644 src/com/android/launcher3/stats/external/TrackingBundle.java
|
|
delete mode 100644 src/com/android/launcher3/stats/internal/db/DatabaseHelper.java
|
|
delete mode 100644 src/com/android/launcher3/stats/internal/db/TrackingEventContract.java
|
|
delete mode 100644 src/com/android/launcher3/stats/internal/model/CountAction.java
|
|
delete mode 100644 src/com/android/launcher3/stats/internal/model/CountOriginByPackageAction.java
|
|
delete mode 100644 src/com/android/launcher3/stats/internal/model/ITrackingAction.java
|
|
delete mode 100644 src/com/android/launcher3/stats/util/Logger.java
|
|
|
|
diff --git a/Android.mk b/Android.mk
|
|
index 5ef85b4..9915fc5 100644
|
|
--- a/Android.mk
|
|
+++ b/Android.mk
|
|
@@ -45,7 +45,7 @@ LOCAL_AAPT_FLAGS := \
|
|
--auto-add-overlay \
|
|
--extra-packages android.support.v7.recyclerview
|
|
|
|
-#LOCAL_SDK_VERSION := current
|
|
+LOCAL_SDK_VERSION := current
|
|
LOCAL_PACKAGE_NAME := Trebuchet
|
|
LOCAL_PRIVILEGED_MODULE := true
|
|
|
|
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
|
|
index dbdabfa..ee80841 100644
|
|
--- a/AndroidManifest.xml
|
|
+++ b/AndroidManifest.xml
|
|
@@ -69,10 +69,8 @@
|
|
<uses-permission android:name="com.android.launcher3.permission.RECEIVE_LAUNCH_BROADCASTS" />
|
|
<uses-permission android:name="com.android.launcher3.permission.RECEIVE_FIRST_LOAD_BROADCAST" />
|
|
<uses-permission android:name="cyanogenmod.permission.PROTECTED_APP" />
|
|
- <uses-permission android:name="com.cyngn.stats.SEND_ANALYTICS" />
|
|
|
|
<application
|
|
- android:name="com.android.launcher3.LauncherApplication"
|
|
android:allowBackup="@bool/enable_backup"
|
|
android:backupAgent="com.android.launcher3.LauncherBackupAgentHelper"
|
|
android:hardwareAccelerated="true"
|
|
@@ -184,14 +182,6 @@
|
|
>
|
|
</service>
|
|
|
|
- <service
|
|
- android:name="com.android.launcher3.stats.internal.service.AggregationIntentService"
|
|
- android:exported="false">
|
|
- <intent-filter>
|
|
- <action android:name="com.cyanogenmod.trebuchet.AGGREGATE_AND_TRACK" />
|
|
- </intent-filter>
|
|
- </service>
|
|
-
|
|
<receiver
|
|
android:name="com.android.launcher3.WallpaperChangedReceiver">
|
|
<intent-filter>
|
|
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
|
|
index 8161d38..37f3931 100644
|
|
--- a/src/com/android/launcher3/Launcher.java
|
|
+++ b/src/com/android/launcher3/Launcher.java
|
|
@@ -111,7 +111,6 @@ import com.android.launcher3.compat.UserManagerCompat;
|
|
import com.android.launcher3.list.SettingsPinnedHeaderAdapter;
|
|
import com.android.launcher3.model.WidgetsModel;
|
|
import com.android.launcher3.settings.SettingsProvider;
|
|
-import com.android.launcher3.stats.LauncherStats;
|
|
import com.android.launcher3.util.ComponentKey;
|
|
import com.android.launcher3.util.LongArrayMap;
|
|
import com.android.launcher3.util.Thunk;
|
|
@@ -170,10 +169,6 @@ public class Launcher extends Activity
|
|
|
|
private static final float BOUNCE_ANIMATION_TENSION = 1.3f;
|
|
|
|
-
|
|
- public static final String LONGPRESS_CHANGE = "wallpaper_changed_by_longpress";
|
|
-
|
|
-
|
|
/**
|
|
* IntentStarter uses request codes starting with this. This must be greater than all activity
|
|
* request codes used internally.
|
|
@@ -2136,9 +2131,6 @@ public class Launcher extends Activity
|
|
public void removeAppWidget(LauncherAppWidgetInfo launcherInfo) {
|
|
removeWidgetToAutoAdvance(launcherInfo.hostView);
|
|
launcherInfo.hostView = null;
|
|
- AppWidgetProviderInfo info = mAppWidgetManager.getAppWidgetInfo(launcherInfo.appWidgetId);
|
|
- String packageName = info.providerInfo.packageName;
|
|
- LauncherApplication.getLauncherStats().sendWidgetRemoveEvent(packageName);
|
|
}
|
|
|
|
public void showOutOfSpaceMessage(boolean isHotseatLayout) {
|
|
@@ -2632,8 +2624,6 @@ public class Launcher extends Activity
|
|
completeAddAppWidget(appWidgetId, info.container, info.screenId, boundWidget,
|
|
appWidgetInfo);
|
|
mWorkspace.removeExtraEmptyScreenDelayed(true, onComplete, delay, false);
|
|
- String packageName = appWidgetInfo.providerInfo.packageName;
|
|
- LauncherApplication.getLauncherStats().sendWidgetAddEvent(packageName);
|
|
}
|
|
}
|
|
|
|
@@ -2893,13 +2883,6 @@ public class Launcher extends Activity
|
|
} else if (tag instanceof AppInfo) {
|
|
AppInfo info = (AppInfo) tag;
|
|
startAppShortcutOrInfoActivity(v);
|
|
- LauncherApplication.getLauncherStats().sendAppLaunchEvent(
|
|
- LauncherStats.ORIGIN_APPDRAWER, info.componentName.getPackageName());
|
|
- String packageName = info.getIntent().getComponent().getPackageName();
|
|
- if (LauncherStats.SETTINGS_PACKAGE_NAME.equals(packageName)) {
|
|
- LauncherApplication.getLauncherStats()
|
|
- .sendSettingsOpenedEvent(LauncherStats.ORIGIN_APPDRAWER);
|
|
- }
|
|
} else if (tag instanceof LauncherAppWidgetInfo) {
|
|
if (v instanceof PendingAppWidgetHostView) {
|
|
onClickPendingWidget((PendingAppWidgetHostView) v);
|
|
@@ -3048,17 +3031,6 @@ public class Launcher extends Activity
|
|
|
|
// Start activities
|
|
startAppShortcutOrInfoActivity(v);
|
|
- ComponentName componentName = intent.getComponent();
|
|
- if (componentName != null) {
|
|
- String packageName = intent.getComponent().getPackageName();
|
|
- LauncherApplication.getLauncherStats()
|
|
- .sendAppLaunchEvent(LauncherStats.ORIGIN_HOMESCREEN,
|
|
- packageName);
|
|
- if (LauncherStats.SETTINGS_PACKAGE_NAME.equals(packageName)) {
|
|
- LauncherApplication.getLauncherStats().sendSettingsOpenedEvent(
|
|
- LauncherStats.ORIGIN_HOMESCREEN);
|
|
- }
|
|
- }
|
|
|
|
if (mLauncherCallbacks != null) {
|
|
mLauncherCallbacks.onClickAppShortcut(v);
|
|
@@ -4173,10 +4145,6 @@ public class Launcher extends Activity
|
|
mWorkspace.createCustomContentContainer();
|
|
populateCustomContentContainer();
|
|
}
|
|
-
|
|
- LauncherModel.saveWidgetCount(this);
|
|
- LauncherModel.savePageCount(this);
|
|
-
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
|
|
index 687e565..e758817 100644
|
|
--- a/src/com/android/launcher3/LauncherModel.java
|
|
+++ b/src/com/android/launcher3/LauncherModel.java
|
|
@@ -28,7 +28,6 @@ import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.Intent.ShortcutIconResource;
|
|
import android.content.IntentFilter;
|
|
-import android.content.SharedPreferences;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.pm.ProviderInfo;
|
|
import android.content.pm.ResolveInfo;
|
|
@@ -65,9 +64,6 @@ import com.android.launcher3.util.ManagedProfileHeuristic;
|
|
import com.android.launcher3.util.Thunk;
|
|
import cyanogenmod.providers.CMSettings;
|
|
|
|
-import com.android.launcher3.settings.SettingsProvider;
|
|
-import com.android.launcher3.stats.internal.service.AggregationIntentService;
|
|
-
|
|
import java.lang.ref.WeakReference;
|
|
import java.net.URISyntaxException;
|
|
import java.security.InvalidParameterException;
|
|
@@ -1055,22 +1051,10 @@ public class LauncherModel extends BroadcastReceiver
|
|
}
|
|
|
|
/**
|
|
- * Saves the total widget count to a shared preference
|
|
- *
|
|
- * @param context {@link Context}
|
|
- */
|
|
- /* package */ static void saveWidgetCount(Context context) {
|
|
- int widgetCount = LauncherModel.sBgAppWidgets.size();
|
|
- SharedPreferences prefs = context.getSharedPreferences(LauncherAppState
|
|
- .getSharedPreferencesKey(), Context.MODE_PRIVATE);
|
|
- prefs.edit().putInt(AggregationIntentService.PREF_KEY_WIDGET_COUNT, widgetCount).apply();
|
|
- }
|
|
-
|
|
- /**
|
|
* Add an item to the database in a specified container. Sets the container, screen, cellX and
|
|
* cellY fields of the item. Also assigns an ID to the item.
|
|
*/
|
|
- public static void addItemToDatabase(final Context context, final ItemInfo item, final long container,
|
|
+ public static void addItemToDatabase(Context context, final ItemInfo item, final long container,
|
|
final long screenId, final int cellX, final int cellY) {
|
|
item.container = container;
|
|
item.cellX = cellX;
|
|
@@ -1120,7 +1104,6 @@ public class LauncherModel extends BroadcastReceiver
|
|
break;
|
|
case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
|
|
sBgAppWidgets.add((LauncherAppWidgetInfo) item);
|
|
- saveWidgetCount(context);
|
|
break;
|
|
}
|
|
}
|
|
@@ -1173,7 +1156,7 @@ public class LauncherModel extends BroadcastReceiver
|
|
* @param context
|
|
* @param items
|
|
*/
|
|
- static void deleteItemsFromDatabase(final Context context, final ArrayList<? extends ItemInfo> items) {
|
|
+ static void deleteItemsFromDatabase(Context context, final ArrayList<? extends ItemInfo> items) {
|
|
final ContentResolver cr = context.getContentResolver();
|
|
Runnable r = new Runnable() {
|
|
public void run() {
|
|
@@ -1203,7 +1186,6 @@ public class LauncherModel extends BroadcastReceiver
|
|
break;
|
|
case LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET:
|
|
sBgAppWidgets.remove((LauncherAppWidgetInfo) item);
|
|
- saveWidgetCount(context);
|
|
break;
|
|
}
|
|
sBgItemsIdMap.remove(item.id);
|
|
@@ -1215,22 +1197,10 @@ public class LauncherModel extends BroadcastReceiver
|
|
}
|
|
|
|
/**
|
|
- * Saves the count of workspace pages
|
|
- *
|
|
- * @param context {@link Context}
|
|
- */
|
|
- /* package */ static void savePageCount(Context context) {
|
|
- int pageCount = LauncherModel.sBgWorkspaceScreens.size();
|
|
- SharedPreferences prefs = context.getSharedPreferences(LauncherAppState
|
|
- .getSharedPreferencesKey(), Context.MODE_PRIVATE);
|
|
- prefs.edit().putInt(AggregationIntentService.PREF_KEY_PAGE_COUNT, pageCount).apply();
|
|
- }
|
|
-
|
|
- /**
|
|
* Update the order of the workspace screens in the database. The array list contains
|
|
* a list of screen ids in the order that they should appear.
|
|
*/
|
|
- public void updateWorkspaceScreenOrder(final Context context, final ArrayList<Long> screens) {
|
|
+ public void updateWorkspaceScreenOrder(Context context, final ArrayList<Long> screens) {
|
|
final ArrayList<Long> screensCopy = new ArrayList<Long>(screens);
|
|
final ContentResolver cr = context.getContentResolver();
|
|
final Uri uri = LauncherSettings.WorkspaceScreens.CONTENT_URI;
|
|
@@ -1268,7 +1238,6 @@ public class LauncherModel extends BroadcastReceiver
|
|
synchronized (sBgLock) {
|
|
sBgWorkspaceScreens.clear();
|
|
sBgWorkspaceScreens.addAll(screensCopy);
|
|
- savePageCount(context);
|
|
}
|
|
}
|
|
};
|
|
diff --git a/src/com/android/launcher3/WallpaperChangedReceiver.java b/src/com/android/launcher3/WallpaperChangedReceiver.java
|
|
index 0a6a7ef..2d5612f 100644
|
|
--- a/src/com/android/launcher3/WallpaperChangedReceiver.java
|
|
+++ b/src/com/android/launcher3/WallpaperChangedReceiver.java
|
|
@@ -20,25 +20,10 @@ import android.content.BroadcastReceiver;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
|
|
-import android.content.SharedPreferences;
|
|
-import com.android.launcher3.stats.LauncherStats;
|
|
-
|
|
public class WallpaperChangedReceiver extends BroadcastReceiver {
|
|
public void onReceive(Context context, Intent data) {
|
|
LauncherAppState.setApplicationContext(context.getApplicationContext());
|
|
LauncherAppState appState = LauncherAppState.getInstance();
|
|
appState.onWallpaperChanged();
|
|
- SharedPreferences prefs = context.getSharedPreferences(LauncherAppState
|
|
- .getSharedPreferencesKey(), Context.MODE_PRIVATE);
|
|
- boolean fromSelf = prefs.getBoolean(Launcher.LONGPRESS_CHANGE, false);
|
|
- if (fromSelf) {
|
|
- prefs.edit().putBoolean(Launcher.LONGPRESS_CHANGE, false).apply();
|
|
- LauncherApplication.getLauncherStats().sendWallpaperChangedEvent(
|
|
- LauncherStats.ORIGIN_TREB_LONGPRESS);
|
|
- } else {
|
|
- LauncherApplication.getLauncherStats().sendWallpaperChangedEvent(
|
|
- LauncherStats.ORIGIN_CHOOSER);
|
|
- }
|
|
-
|
|
}
|
|
}
|
|
diff --git a/src/com/android/launcher3/stats/external/StatsUtil.java b/src/com/android/launcher3/stats/external/StatsUtil.java
|
|
deleted file mode 100644
|
|
index 697df54..0000000
|
|
--- a/src/com/android/launcher3/stats/external/StatsUtil.java
|
|
+++ /dev/null
|
|
@@ -1,117 +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.launcher3.stats.external;
|
|
-
|
|
-import android.content.ComponentName;
|
|
-import android.content.Context;
|
|
-import android.content.Intent;
|
|
-import android.content.pm.ApplicationInfo;
|
|
-import android.content.pm.PackageInfo;
|
|
-import android.content.pm.PackageManager;
|
|
-import android.os.Bundle;
|
|
-import android.util.Log;
|
|
-import com.android.launcher3.stats.util.Logger;
|
|
-
|
|
-/**
|
|
- * StatsUtil
|
|
- * <pre>
|
|
- * Utility for interfacing with CyanogenStats
|
|
- * </pre>
|
|
- */
|
|
-public class StatsUtil {
|
|
-
|
|
- // Tag and logging
|
|
- private static final String TAG = StatsUtil.class.getSimpleName();
|
|
-
|
|
- // Constants
|
|
- private static final String KEY_TRACKING_ID = "tracking_id";
|
|
- private static final String ANALYTIC_INTENT = "com.cyngn.stats.action.SEND_ANALYTIC_EVENT";
|
|
- private static final String STATS_PACKAGE = "com.cyngn.stats";
|
|
-
|
|
- /**
|
|
- * Checks if stats collection is enabled
|
|
- *
|
|
- * @param context {@link android.content.Context}
|
|
- * @return {@link java.lang.Boolean}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public static boolean isStatsCollectionEnabled(Context context)
|
|
- throws IllegalArgumentException {
|
|
- return isStatsPackageInstalledAndSystemApp(context);
|
|
- }
|
|
-
|
|
- /**
|
|
- * Checks if the stats package is installed
|
|
- *
|
|
- * @param context {@link android.content.Context}
|
|
- * @return {@link Boolean {@link Boolean {@link Boolean {@link Boolean}}}}
|
|
- */
|
|
- private static boolean isStatsPackageInstalledAndSystemApp(Context context)
|
|
- throws IllegalArgumentException {
|
|
- if (context == null) {
|
|
- throw new IllegalArgumentException("'context' cannot be null!");
|
|
- }
|
|
- try {
|
|
- PackageInfo pi = context.getPackageManager().getPackageInfo(STATS_PACKAGE, 0);
|
|
- boolean isSystemApp = (pi.applicationInfo.flags &
|
|
- (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0;
|
|
- return pi.applicationInfo.enabled && isSystemApp;
|
|
- } catch (PackageManager.NameNotFoundException e) {
|
|
- Log.e(TAG, "stats not found!");
|
|
- return false;
|
|
- }
|
|
- }
|
|
-
|
|
- /**
|
|
- * Send an event to CyangenStats
|
|
- *
|
|
- * @param context {@link Context} not null
|
|
- * @param trackingBundle {@link Bundle}
|
|
- * @throws IllegalArgumentException
|
|
- */
|
|
- public static void sendEvent(Context context, Bundle trackingBundle)
|
|
- throws IllegalArgumentException {
|
|
- if (context == null) {
|
|
- throw new IllegalArgumentException("'context' cannot be null!");
|
|
- }
|
|
- if (trackingBundle == null) {
|
|
- throw new IllegalArgumentException("'trackingBundle' cannot be null!");
|
|
- }
|
|
- if (!isStatsCollectionEnabled(context)) {
|
|
- Logger.logd(TAG, "Stats collection: DISABLED!");
|
|
- return;
|
|
- }
|
|
- Logger.logd(TAG, "Stats collection: ENABLED!");
|
|
-
|
|
- Intent newIntent = new Intent(ANALYTIC_INTENT);
|
|
-
|
|
- if (!trackingBundle.containsKey(KEY_TRACKING_ID)) {
|
|
- Logger.logd(TAG, "No tracking id in bundle");
|
|
- return;
|
|
- } else {
|
|
- if (trackingBundle.containsKey(TrackingBundle.KEY_EVENT_CATEGORY)
|
|
- && trackingBundle.containsKey(TrackingBundle.KEY_EVENT_ACTION)) {
|
|
- Logger.logd(TAG, trackingBundle.toString());
|
|
- newIntent.putExtras(trackingBundle);
|
|
- context.sendBroadcast(newIntent);
|
|
- } else {
|
|
- Logger.logd(TAG, "Not a valid tracking bundle");
|
|
- }
|
|
- }
|
|
- }
|
|
-
|
|
-}
|
|
diff --git a/src/com/android/launcher3/stats/external/TrackingBundle.java b/src/com/android/launcher3/stats/external/TrackingBundle.java
|
|
deleted file mode 100644
|
|
index 6ca5d97..0000000
|
|
--- a/src/com/android/launcher3/stats/external/TrackingBundle.java
|
|
+++ /dev/null
|
|
@@ -1,67 +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.launcher3.stats.external;
|
|
-
|
|
-import android.os.Bundle;
|
|
-import android.text.TextUtils;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * Extension of a {@link Bundle} to provider streamline interfaces for
|
|
- * the specific task of sending events
|
|
- * </pre>
|
|
- *
|
|
- * @see {@link Bundle}
|
|
- */
|
|
-public class TrackingBundle {
|
|
-
|
|
- // Constants
|
|
- public static final String KEY_TRACKING_ID = "tracking_id";
|
|
- public static final String KEY_EVENT_CATEGORY = "category";
|
|
- public static final String KEY_EVENT_ACTION = "action";
|
|
- public static final String KEY_METADATA_VALUE = "value";
|
|
- public static final String KEY_METADATA_ORIGIN = "origin";
|
|
- public static final String KEY_METADATA_PACKAGE = "package";
|
|
-
|
|
-
|
|
- /**
|
|
- * Constructor
|
|
- *
|
|
- * @param trackingId {@link String}
|
|
- * @param category {@link String}
|
|
- * @param action {@link String}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public static Bundle createTrackingBundle(String trackingId, String category, String action)
|
|
- throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(trackingId)) {
|
|
- throw new IllegalArgumentException("'trackingId' cannot be null or empty!");
|
|
- }
|
|
- if (TextUtils.isEmpty(category)) {
|
|
- throw new IllegalArgumentException("'category' cannot be null or empty!");
|
|
- }
|
|
- if (TextUtils.isEmpty(action)) {
|
|
- throw new IllegalArgumentException("'action' cannot be null or empty!");
|
|
- }
|
|
- Bundle bundle = new Bundle();
|
|
- bundle.putString(KEY_EVENT_CATEGORY, category);
|
|
- bundle.putString(KEY_EVENT_ACTION, action);
|
|
- bundle.putString(KEY_TRACKING_ID, trackingId);
|
|
- return bundle;
|
|
- }
|
|
-
|
|
-}
|
|
\ No newline at end of file
|
|
diff --git a/src/com/android/launcher3/stats/internal/db/DatabaseHelper.java b/src/com/android/launcher3/stats/internal/db/DatabaseHelper.java
|
|
deleted file mode 100644
|
|
index 7ffd509..0000000
|
|
--- a/src/com/android/launcher3/stats/internal/db/DatabaseHelper.java
|
|
+++ /dev/null
|
|
@@ -1,159 +0,0 @@
|
|
-package com.android.launcher3.stats.internal.db;
|
|
-
|
|
-import android.content.ContentValues;
|
|
-import android.content.Context;
|
|
-import android.database.Cursor;
|
|
-import android.database.sqlite.SQLiteDatabase;
|
|
-import android.database.sqlite.SQLiteOpenHelper;
|
|
-import com.android.launcher3.stats.internal.model.TrackingEvent;
|
|
-import com.android.launcher3.stats.util.Logger;
|
|
-
|
|
-import java.util.ArrayList;
|
|
-import java.util.List;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * Helper for accessing the database
|
|
- * </pre>
|
|
- *
|
|
- * @see {@link SQLiteOpenHelper}
|
|
- */
|
|
-public class DatabaseHelper extends SQLiteOpenHelper {
|
|
-
|
|
- // Constants
|
|
- private static final String TAG = DatabaseHelper.class.getSimpleName();
|
|
- private static final String DATABASE_NAME = "events";
|
|
- private static final int DATABASE_VERSION = 1;
|
|
-
|
|
- // Instance
|
|
- private static DatabaseHelper sInstance = null;
|
|
-
|
|
- /**
|
|
- * Constructor
|
|
- *
|
|
- * @param context {@link Context}
|
|
- * @return {@link DatabaseHelper}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public static DatabaseHelper createInstance(Context context) throws IllegalArgumentException {
|
|
- if (sInstance == null) {
|
|
- sInstance = new DatabaseHelper(context);
|
|
- }
|
|
- return sInstance;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Constructor
|
|
- *
|
|
- * @param context {@link Context}
|
|
- */
|
|
- public DatabaseHelper(Context context) {
|
|
- super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
|
- }
|
|
-
|
|
- /**
|
|
- * Write an event to the database
|
|
- *
|
|
- * @param trackingEvent {@link TrackingEvent}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public void writeEvent(TrackingEvent trackingEvent)
|
|
- throws IllegalArgumentException {
|
|
- if (trackingEvent == null) {
|
|
- throw new IllegalArgumentException("'trackingEvent' cannot be null!");
|
|
- }
|
|
- Logger.logd(TAG, "Event written to database: " + trackingEvent);
|
|
- SQLiteDatabase db = getWritableDatabase();
|
|
- ContentValues contentValues = trackingEvent.toContentValues();
|
|
- db.insert(TrackingEventContract.EVENT_TABLE_NAME, null, contentValues);
|
|
- db.close();
|
|
- }
|
|
-
|
|
- /**
|
|
- * Get a list of tracking events
|
|
- *
|
|
- * @param instanceId {@link Integer}
|
|
- * @return {@link List}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public List<TrackingEvent> getTrackingEventsByCategory(int instanceId,
|
|
- TrackingEvent.Category category) throws IllegalArgumentException {
|
|
- if (category == null) {
|
|
- throw new IllegalArgumentException("'category' cannot be null!");
|
|
- }
|
|
-
|
|
- List<TrackingEvent> eventList = new ArrayList<TrackingEvent>();
|
|
-
|
|
- // Get a writable database
|
|
- SQLiteDatabase db = getWritableDatabase();
|
|
-
|
|
- // Update unclaimed items for this instance
|
|
- ContentValues contentValues = new ContentValues();
|
|
- contentValues.put(TrackingEventContract.EVENT_COLUMN_INSTANCE, instanceId);
|
|
- String whereClause = TrackingEventContract.EVENT_COLUMN_INSTANCE + " IS NULL AND "
|
|
- + TrackingEventContract.EVENT_COLUMN_CATEGORY + " = ? ";
|
|
- String[] whereArgs = new String[] {
|
|
- category.name(),
|
|
- };
|
|
- int cnt = db.update(TrackingEventContract.EVENT_TABLE_NAME, contentValues, whereClause,
|
|
- whereArgs);
|
|
-
|
|
- // Short circuit empty update
|
|
- if (cnt < 1) {
|
|
- return eventList;
|
|
- }
|
|
-
|
|
- // Select all tagged items
|
|
- String selection = TrackingEventContract.EVENT_COLUMN_CATEGORY + " = ? AND "
|
|
- + TrackingEventContract.EVENT_COLUMN_INSTANCE + " = ? ";
|
|
- String[] selectionArgs = new String[]{
|
|
- category.name(),
|
|
- String.valueOf(instanceId),
|
|
- };
|
|
- Cursor c = db.query(TrackingEventContract.EVENT_TABLE_NAME, null, selection, selectionArgs,
|
|
- null, null, null);
|
|
-
|
|
- // Build return list
|
|
- while (c != null && c.getCount() > 0 && c.moveToNext()) {
|
|
- eventList.add(new TrackingEvent(c));
|
|
- }
|
|
-
|
|
- db.close();
|
|
-
|
|
- return eventList;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Deletes events related to the instance
|
|
- *
|
|
- * @param instanceId {@link Integer}
|
|
- * @return {@link Integer}
|
|
- */
|
|
- public int deleteEventsByInstanceId(int instanceId) {
|
|
- SQLiteDatabase db = getWritableDatabase();
|
|
- String whereClause = TrackingEventContract.EVENT_COLUMN_INSTANCE + " = ?";
|
|
- String[] whereArgs = new String[]{
|
|
- String.valueOf(instanceId),
|
|
- };
|
|
- int cnt = db.delete(TrackingEventContract.EVENT_TABLE_NAME, whereClause, whereArgs);
|
|
- db.close();
|
|
- return cnt;
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void onCreate(SQLiteDatabase db) {
|
|
- db.execSQL(TrackingEventContract.CREATE_EVENT_TABLE);
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
|
-
|
|
- // [NOTE][MSB]: This will lose data, need to make sure this is handled if/when database
|
|
- // schema changes
|
|
-
|
|
- // db.execSQL("DROP TABLE IF EXISTS " + TrackingEventContract.EVENT_TABLE_NAME);
|
|
- // onCreate(db);
|
|
-
|
|
- }
|
|
-
|
|
-}
|
|
diff --git a/src/com/android/launcher3/stats/internal/db/TrackingEventContract.java b/src/com/android/launcher3/stats/internal/db/TrackingEventContract.java
|
|
deleted file mode 100644
|
|
index 481a431..0000000
|
|
--- a/src/com/android/launcher3/stats/internal/db/TrackingEventContract.java
|
|
+++ /dev/null
|
|
@@ -1,31 +0,0 @@
|
|
-package com.android.launcher3.stats.internal.db;
|
|
-
|
|
-import android.provider.BaseColumns;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * Table contract definition
|
|
- * </pre>
|
|
- *
|
|
- * @see {@link BaseColumns}
|
|
- */
|
|
-public class TrackingEventContract implements BaseColumns {
|
|
-
|
|
- // Constants
|
|
- public static final String EVENT_TABLE_NAME = "event";
|
|
-
|
|
- // Columns
|
|
- public static final String EVENT_COLUMN_CATEGORY = "category";
|
|
- public static final String EVENT_COLUMN_METADATA = "metadata";
|
|
- public static final String EVENT_COLUMN_INSTANCE = "instance";
|
|
-
|
|
- // SQL
|
|
- public static final String CREATE_EVENT_TABLE = "CREATE TABLE " + EVENT_TABLE_NAME
|
|
- + " ( "
|
|
- + " `" + _ID + "` INTEGER PRIMARY KEY AUTOINCREMENT, "
|
|
- + " `" + EVENT_COLUMN_CATEGORY + "` TEXT, "
|
|
- + " `" + EVENT_COLUMN_METADATA + "` TEXT, "
|
|
- + " `" + EVENT_COLUMN_INSTANCE + "` INTEGER "
|
|
- + ");";
|
|
-
|
|
-}
|
|
diff --git a/src/com/android/launcher3/stats/internal/model/CountAction.java b/src/com/android/launcher3/stats/internal/model/CountAction.java
|
|
deleted file mode 100644
|
|
index d509d4d..0000000
|
|
--- a/src/com/android/launcher3/stats/internal/model/CountAction.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 com.android.launcher3.stats.internal.model;
|
|
-
|
|
-import android.os.Bundle;
|
|
-import android.text.TextUtils;
|
|
-import com.android.launcher3.stats.external.TrackingBundle;
|
|
-
|
|
-import java.util.ArrayList;
|
|
-import java.util.HashMap;
|
|
-import java.util.List;
|
|
-import java.util.Map;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * Handles the specific for sending a tracking event
|
|
- * </pre>
|
|
- *
|
|
- * @see {@link ITrackingAction}
|
|
- */
|
|
-public class CountAction implements ITrackingAction {
|
|
-
|
|
- public static final String TRACKING_ACTION = "count";
|
|
-
|
|
- @Override
|
|
- public String toString() {
|
|
- return TRACKING_ACTION;
|
|
- }
|
|
-
|
|
- @Override
|
|
- public List<Bundle> createTrackingBundles(String trackingId, TrackingEvent.Category category,
|
|
- List<TrackingEvent> eventList) {
|
|
-
|
|
- Map<String, List<TrackingEvent>> eventPackageMap =
|
|
- new HashMap<String, List<TrackingEvent>>();
|
|
-
|
|
- for (TrackingEvent event : eventList) {
|
|
- String pkg = event.getMetaData(TrackingEvent.KEY_PACKAGE);
|
|
- pkg = (TextUtils.isEmpty(pkg)) ? trackingId : pkg;
|
|
- if (!eventPackageMap.containsKey(pkg)) {
|
|
- eventPackageMap.put(pkg, new ArrayList<TrackingEvent>());
|
|
- }
|
|
- eventPackageMap.get(pkg).add(event);
|
|
- }
|
|
-
|
|
- List<Bundle> bundleList = new ArrayList<Bundle>();
|
|
- for (Map.Entry<String, List<TrackingEvent>> entry : eventPackageMap.entrySet()) {
|
|
- Bundle bundle = TrackingBundle.createTrackingBundle(trackingId, category.name(),
|
|
- TRACKING_ACTION);
|
|
- bundle.putInt(TrackingBundle.KEY_METADATA_VALUE, entry.getValue().size());
|
|
- String pkg = entry.getKey();
|
|
- if (!pkg.equals(trackingId)) {
|
|
- bundle.putString(TrackingBundle.KEY_METADATA_PACKAGE, pkg);
|
|
- }
|
|
- bundleList.add(bundle);
|
|
- }
|
|
- return bundleList;
|
|
- }
|
|
-}
|
|
diff --git a/src/com/android/launcher3/stats/internal/model/CountOriginByPackageAction.java b/src/com/android/launcher3/stats/internal/model/CountOriginByPackageAction.java
|
|
deleted file mode 100644
|
|
index fc04ca0..0000000
|
|
--- a/src/com/android/launcher3/stats/internal/model/CountOriginByPackageAction.java
|
|
+++ /dev/null
|
|
@@ -1,91 +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.launcher3.stats.internal.model;
|
|
-
|
|
-import android.os.Bundle;
|
|
-import android.text.TextUtils;
|
|
-import com.android.launcher3.stats.external.TrackingBundle;
|
|
-
|
|
-import java.util.ArrayList;
|
|
-import java.util.HashMap;
|
|
-import java.util.List;
|
|
-import java.util.Map;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * This is an action to send a count of events with common origins
|
|
- * </pre>
|
|
- */
|
|
-public class CountOriginByPackageAction implements ITrackingAction {
|
|
-
|
|
- public static final String TRACKING_ACTION = "count_by_origin";
|
|
-
|
|
- @Override
|
|
- public String toString() {
|
|
- return TRACKING_ACTION;
|
|
- }
|
|
-
|
|
- @Override
|
|
- public List<Bundle> createTrackingBundles(String trackingId, TrackingEvent.Category category,
|
|
- List<TrackingEvent> eventList) {
|
|
- // Make an origin mapper
|
|
- Map<String, Map<String, List<TrackingEvent>>> originEventMap =
|
|
- new HashMap<String, Map<String, List<TrackingEvent>>>();
|
|
-
|
|
- // Parse the event list and categorize by origin
|
|
- for (TrackingEvent event : eventList) {
|
|
- // We are parsing for things with origin, if no origin is set, discard it!
|
|
- if (TextUtils.isEmpty(event.getMetaData(TrackingEvent.KEY_ORIGIN))) {
|
|
- continue;
|
|
- }
|
|
- String originKey = event.getMetaData(TrackingEvent.KEY_ORIGIN);
|
|
- if (!originEventMap.containsKey(originKey)) {
|
|
- HashMap<String, List<TrackingEvent>> newMap =
|
|
- new HashMap<String, List<TrackingEvent>>();
|
|
- originEventMap.put(originKey, newMap);
|
|
- }
|
|
- String packageName = event.getMetaData(TrackingEvent.KEY_PACKAGE);
|
|
- // Set a default so our iteration picks it up and just discard package metadata
|
|
- packageName = (TextUtils.isEmpty(packageName)) ? trackingId : packageName;
|
|
- if (!originEventMap.get(originKey).containsKey(packageName)) {
|
|
- originEventMap.get(originKey).put(packageName, new ArrayList<TrackingEvent>());
|
|
- }
|
|
- originEventMap.get(originKey).get(packageName).add(event);
|
|
- }
|
|
-
|
|
- // Start building result tracking bundles
|
|
- List<Bundle> bundleList = new ArrayList<Bundle>();
|
|
- for (Map.Entry<String, Map<String, List<TrackingEvent>>> entry :
|
|
- originEventMap.entrySet()) {
|
|
- String origin = entry.getKey();
|
|
- for (Map.Entry<String, List<TrackingEvent>> entry2 : entry.getValue().entrySet()) {
|
|
- String pkg = entry2.getKey();
|
|
- List<TrackingEvent> events = entry2.getValue();
|
|
- Bundle bundle = TrackingBundle.createTrackingBundle(trackingId, category.name(),
|
|
- TRACKING_ACTION);
|
|
- bundle.putString(TrackingBundle.KEY_METADATA_ORIGIN, origin);
|
|
- bundle.putInt(TrackingBundle.KEY_METADATA_VALUE, events.size());
|
|
- if (!trackingId.equals(pkg)) {
|
|
- bundle.putString(TrackingBundle.KEY_METADATA_PACKAGE, pkg);
|
|
- }
|
|
- bundleList.add(bundle);
|
|
- }
|
|
- }
|
|
- return bundleList;
|
|
- }
|
|
-
|
|
-}
|
|
diff --git a/src/com/android/launcher3/stats/internal/model/ITrackingAction.java b/src/com/android/launcher3/stats/internal/model/ITrackingAction.java
|
|
deleted file mode 100644
|
|
index b577ed2..0000000
|
|
--- a/src/com/android/launcher3/stats/internal/model/ITrackingAction.java
|
|
+++ /dev/null
|
|
@@ -1,45 +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.launcher3.stats.internal.model;
|
|
-
|
|
-import android.os.Bundle;
|
|
-
|
|
-import java.util.List;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * This is an action we want to perfrom from a report.
|
|
- *
|
|
- * e.g.
|
|
- * 1. I want to get the COUNT of widgets added
|
|
- * 2. I want to get the origin of app launches
|
|
- * </pre>
|
|
- */
|
|
-public interface ITrackingAction {
|
|
-
|
|
- /**
|
|
- * Creates a new bundle used to tracking events
|
|
- *
|
|
- * @param trackingId {@link String}
|
|
- * @param category {@link com.android.launcher3.stats.internal.model.TrackingEvent.Category}
|
|
- * @param eventList {@link List}
|
|
- * @return {@link List}
|
|
- */
|
|
- List<Bundle> createTrackingBundles(String trackingId, TrackingEvent.Category category,
|
|
- List<TrackingEvent> eventList);
|
|
-
|
|
-}
|
|
diff --git a/src/com/android/launcher3/stats/util/Logger.java b/src/com/android/launcher3/stats/util/Logger.java
|
|
deleted file mode 100644
|
|
index 8d73f54..0000000
|
|
--- a/src/com/android/launcher3/stats/util/Logger.java
|
|
+++ /dev/null
|
|
@@ -1,55 +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.launcher3.stats.util;
|
|
-
|
|
-import android.os.Build;
|
|
-import android.text.TextUtils;
|
|
-import android.util.Log;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * Metrics debug logging
|
|
- * </pre>
|
|
- */
|
|
-public class Logger {
|
|
-
|
|
- private static final String TAG = "TrebuchetStats";
|
|
-
|
|
- /**
|
|
- * Log a debug message
|
|
- *
|
|
- * @param tag {@link String}
|
|
- * @param msg {@link String }
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public static void logd(String tag, String msg) throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(tag)) {
|
|
- throw new IllegalArgumentException("'tag' cannot be empty!");
|
|
- }
|
|
- if (TextUtils.isEmpty(msg)) {
|
|
- throw new IllegalArgumentException("'msg' cannot be empty!");
|
|
- }
|
|
- if (isDebugging()) {
|
|
- Log.d(TAG, tag + " [ " + msg + " ]");
|
|
- }
|
|
- }
|
|
-
|
|
- private static boolean isDebugging() {
|
|
- return Log.isLoggable(TAG, Log.DEBUG);
|
|
- }
|
|
-
|
|
-}
|
|
--
|
|
2.8.2
|
|
|
|
|
|
From 2514dc636747cc8f9f13709877e152d28eeefd95 Mon Sep 17 00:00:00 2001
|
|
From: Tad <tad@spotco.us>
|
|
Date: Thu, 5 May 2016 09:48:16 -0400
|
|
Subject: [PATCH 2/5] Nuke analytics
|
|
|
|
Change-Id: Iced69b10508f8a5a1926ae475272982ee41ffb17
|
|
---
|
|
src/com/android/launcher3/Launcher.java | 3 -
|
|
src/com/android/launcher3/LauncherApplication.java | 15 --
|
|
src/com/android/launcher3/stats/LauncherStats.java | 246 ---------------------
|
|
.../stats/internal/model/TrackingEvent.java | 206 -----------------
|
|
.../internal/service/AggregationIntentService.java | 238 --------------------
|
|
5 files changed, 708 deletions(-)
|
|
delete mode 100644 src/com/android/launcher3/stats/LauncherStats.java
|
|
delete mode 100644 src/com/android/launcher3/stats/internal/model/TrackingEvent.java
|
|
delete mode 100644 src/com/android/launcher3/stats/internal/service/AggregationIntentService.java
|
|
|
|
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
|
|
index 37f3931..f5744dd 100644
|
|
--- a/src/com/android/launcher3/Launcher.java
|
|
+++ b/src/com/android/launcher3/Launcher.java
|
|
@@ -5297,9 +5297,6 @@ public class Launcher extends Activity
|
|
|
|
AnimationDrawable frameAnimation = (AnimationDrawable) mAnimatedArrow.getBackground();
|
|
frameAnimation.start();
|
|
-
|
|
- LauncherApplication.getLauncherStats().sendSettingsOpenedEvent(
|
|
- LauncherStats.ORIGIN_TREB_LONGPRESS);
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/com/android/launcher3/LauncherApplication.java b/src/com/android/launcher3/LauncherApplication.java
|
|
index 4bbcec0..a921128 100644
|
|
--- a/src/com/android/launcher3/LauncherApplication.java
|
|
+++ b/src/com/android/launcher3/LauncherApplication.java
|
|
@@ -18,27 +18,12 @@ package com.android.launcher3;
|
|
|
|
import android.app.Application;
|
|
|
|
-import com.android.launcher3.stats.LauncherStats;
|
|
-import com.android.launcher3.stats.internal.service.AggregationIntentService;
|
|
|
|
public class LauncherApplication extends Application {
|
|
|
|
- private static LauncherStats sLauncherStats = null;
|
|
-
|
|
- /**
|
|
- * Get the reference handle for LauncherStats commands
|
|
- *
|
|
- * @return {@link LauncherStats}
|
|
- */
|
|
- public static LauncherStats getLauncherStats() {
|
|
- return sLauncherStats;
|
|
- }
|
|
-
|
|
@Override
|
|
public void onCreate() {
|
|
super.onCreate();
|
|
- sLauncherStats = LauncherStats.getInstance(this);
|
|
- AggregationIntentService.scheduleService(this);
|
|
}
|
|
|
|
}
|
|
diff --git a/src/com/android/launcher3/stats/LauncherStats.java b/src/com/android/launcher3/stats/LauncherStats.java
|
|
deleted file mode 100644
|
|
index 5e8cb83..0000000
|
|
--- a/src/com/android/launcher3/stats/LauncherStats.java
|
|
+++ /dev/null
|
|
@@ -1,246 +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.launcher3.stats;
|
|
-
|
|
-import android.content.Context;
|
|
-import android.os.Handler;
|
|
-import android.os.HandlerThread;
|
|
-import android.os.Message;
|
|
-import android.text.TextUtils;
|
|
-import android.util.Log;
|
|
-import com.android.launcher3.stats.internal.db.DatabaseHelper;
|
|
-import com.android.launcher3.stats.internal.model.TrackingEvent;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * Utility class made specifically for Launcher related events
|
|
- * </pre>
|
|
- */
|
|
-public class LauncherStats {
|
|
-
|
|
- // Constants
|
|
- private static final String TAG = LauncherStats.class.getSimpleName();
|
|
- private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
|
- private static final int MSG_STORE_EVENT = 1000;
|
|
- public static final String SETTINGS_PACKAGE_NAME = "com.android.settings";
|
|
- public static final String ORIGIN_HOMESCREEN = "homescreen";
|
|
- public static final String ORIGIN_APPDRAWER = "appdrawer";
|
|
- public static final String ORIGIN_TREB_LONGPRESS = "trebuchet_longpress";
|
|
- public static final String ORIGIN_CHOOSER = "theme_chooser";
|
|
- public static final String ORIGIN_SETTINGS = "settings";
|
|
- public static final String ORIGIN_DRAG_DROP = "drag_drop";
|
|
- public static final String ORIGIN_FOLDER = "folder";
|
|
-
|
|
- private static void log(String msg) throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(msg)) {
|
|
- throw new IllegalArgumentException("'msg' cannot be null or empty!");
|
|
- }
|
|
- if (DEBUG) {
|
|
- Log.d(TAG, msg);
|
|
- }
|
|
- }
|
|
-
|
|
- private static void loge(String msg) throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(msg)) {
|
|
- throw new IllegalArgumentException("'msg' cannot be null or empty!");
|
|
- }
|
|
- Log.e(TAG, msg);
|
|
- }
|
|
-
|
|
- /**
|
|
- * <pre>
|
|
- * This is a thread responsible for writing events to a database
|
|
- * </pre>
|
|
- *
|
|
- * @see {@link HandlerThread}
|
|
- */
|
|
- private static class WriteHandlerThread extends HandlerThread {
|
|
- public WriteHandlerThread() {
|
|
- super(WriteHandlerThread.class.getSimpleName());
|
|
- }
|
|
- }
|
|
-
|
|
- /**
|
|
- * <pre>
|
|
- * Handler for issuing db writes
|
|
- * </pre>
|
|
- *
|
|
- * @see {@link Handler}
|
|
- */
|
|
- private static class WriteHandler extends Handler {
|
|
-
|
|
- public WriteHandler() {
|
|
- super(sHandlerThread.getLooper());
|
|
- }
|
|
-
|
|
- @Override
|
|
- public void handleMessage(Message msg) {
|
|
- log("Handling message: " + msg.what);
|
|
- switch (msg.what) {
|
|
- case MSG_STORE_EVENT:
|
|
- handleStoreEvent((TrackingEvent) msg.obj);
|
|
- break;
|
|
- default:
|
|
- super.handleMessage(msg);
|
|
- }
|
|
- }
|
|
- }
|
|
-
|
|
- // Instance
|
|
- private static LauncherStats sInstance = null;
|
|
-
|
|
- // Members
|
|
- private static WriteHandlerThread sHandlerThread;
|
|
- private static WriteHandler sWriteHandler;
|
|
- private static DatabaseHelper sDatabaseHelper;
|
|
-
|
|
- /**
|
|
- * Send a message to the handler to store event data
|
|
- *
|
|
- * @param trackingEvent {@link TrackingEvent}
|
|
- */
|
|
- protected void sendStoreEventMessage(TrackingEvent trackingEvent) {
|
|
- log("Sending tracking event to handler: " + trackingEvent);
|
|
- Message msg = new Message();
|
|
- msg.what = MSG_STORE_EVENT;
|
|
- msg.obj = trackingEvent;
|
|
- sWriteHandler.sendMessage(msg);
|
|
- }
|
|
-
|
|
- /**
|
|
- * Handle the storing work
|
|
- *
|
|
- * @param trackingEvent {@link TrackingEvent}
|
|
- */
|
|
- private static void handleStoreEvent(TrackingEvent trackingEvent) {
|
|
- log("Handling store event: " + trackingEvent);
|
|
- if (trackingEvent != null) {
|
|
- sDatabaseHelper.writeEvent(trackingEvent);
|
|
- } else {
|
|
- loge("Tracking event was null!");
|
|
- }
|
|
- }
|
|
-
|
|
- /**
|
|
- * Used only for overlay extensions
|
|
- */
|
|
- protected LauncherStats() { }
|
|
-
|
|
- /**
|
|
- * Constructor
|
|
- *
|
|
- * @param context {@link Context} not null!
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- private LauncherStats(Context context) throws IllegalArgumentException {
|
|
- if (context == null) {
|
|
- throw new IllegalArgumentException("'context' cannot be null!");
|
|
- }
|
|
- sDatabaseHelper = new DatabaseHelper(context);
|
|
- sHandlerThread = new WriteHandlerThread();
|
|
- sHandlerThread.start();
|
|
- sWriteHandler = new WriteHandler();
|
|
- }
|
|
-
|
|
- /**
|
|
- * Gets a singleton instance of the stats utility
|
|
- *
|
|
- * @param context {@link Context} not null!
|
|
- * @return {@link LauncherStats}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public static LauncherStats getInstance(Context context)
|
|
- throws IllegalArgumentException {
|
|
- if (sInstance == null) {
|
|
- sInstance = new LauncherStats(context);
|
|
- }
|
|
- return sInstance;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Interface for posting a new widget add event
|
|
- *
|
|
- * @param pkg {@link String} package name of widget
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public void sendWidgetAddEvent(String pkg) throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(pkg)) {
|
|
- throw new IllegalArgumentException("'pkg' cannot be null!");
|
|
- }
|
|
- TrackingEvent trackingEvent = new TrackingEvent(TrackingEvent.Category.WIDGET_ADD);
|
|
- trackingEvent.setMetaData(TrackingEvent.KEY_PACKAGE, pkg);
|
|
- sendStoreEventMessage(trackingEvent);
|
|
- }
|
|
-
|
|
- /**
|
|
- * Interface for posting a new widget removal event
|
|
- *
|
|
- * @param pkg {@link String} package name of widget
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public void sendWidgetRemoveEvent(String pkg) throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(pkg)) {
|
|
- throw new IllegalArgumentException("'pkg' cannot be null!");
|
|
- }
|
|
- TrackingEvent trackingEvent = new TrackingEvent(TrackingEvent.Category.WIDGET_REMOVE);
|
|
- trackingEvent.setMetaData(TrackingEvent.KEY_PACKAGE, pkg);
|
|
- sendStoreEventMessage(trackingEvent);
|
|
- }
|
|
-
|
|
- /**
|
|
- * Interface for posting an app launch event
|
|
- *
|
|
- * @param origin {@link String} origin of application launch
|
|
- * @param pkg {@link String} package of app launched
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public void sendAppLaunchEvent(String origin, String pkg) throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(origin)) {
|
|
- throw new IllegalArgumentException("'origin' cannot be null!");
|
|
- }
|
|
- if (TextUtils.isEmpty(pkg)) {
|
|
- throw new IllegalArgumentException("'pkg' cannot be null!");
|
|
- }
|
|
- TrackingEvent trackingEvent = new TrackingEvent(TrackingEvent.Category.APP_LAUNCH);
|
|
- trackingEvent.setMetaData(TrackingEvent.KEY_ORIGIN, origin);
|
|
- trackingEvent.setMetaData(TrackingEvent.KEY_PACKAGE, pkg);
|
|
- sendStoreEventMessage(trackingEvent);
|
|
- }
|
|
-
|
|
- /**
|
|
- * Interface for sending a "settings opened" event
|
|
- *
|
|
- * @param origin {@link String} origin of the event
|
|
- */
|
|
- public void sendSettingsOpenedEvent(String origin) {
|
|
- TrackingEvent trackingEvent = new TrackingEvent(TrackingEvent.Category.SETTINGS_OPEN);
|
|
- trackingEvent.setMetaData(TrackingEvent.KEY_ORIGIN, origin);
|
|
- sendStoreEventMessage(trackingEvent);
|
|
- }
|
|
-
|
|
- /**
|
|
- * Interface for sending a "wallpaper changed" event
|
|
- *
|
|
- * @param origin {@link String} origin of the event
|
|
- */
|
|
- public void sendWallpaperChangedEvent(String origin) {
|
|
- TrackingEvent trackingEvent = new TrackingEvent(TrackingEvent.Category.WALLPAPER_CHANGE);
|
|
- trackingEvent.setMetaData(TrackingEvent.KEY_ORIGIN, origin);
|
|
- sendStoreEventMessage(trackingEvent);
|
|
- }
|
|
-
|
|
-}
|
|
diff --git a/src/com/android/launcher3/stats/internal/model/TrackingEvent.java b/src/com/android/launcher3/stats/internal/model/TrackingEvent.java
|
|
deleted file mode 100644
|
|
index 44aaeb3..0000000
|
|
--- a/src/com/android/launcher3/stats/internal/model/TrackingEvent.java
|
|
+++ /dev/null
|
|
@@ -1,206 +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.launcher3.stats.internal.model;
|
|
-
|
|
-import android.content.ContentValues;
|
|
-import android.database.Cursor;
|
|
-import android.os.Bundle;
|
|
-import android.text.TextUtils;
|
|
-import android.util.Log;
|
|
-import com.android.launcher3.stats.external.TrackingBundle;
|
|
-import com.android.launcher3.stats.internal.db.TrackingEventContract;
|
|
-import com.android.launcher3.stats.util.Logger;
|
|
-
|
|
-import java.util.HashMap;
|
|
-import java.util.Map;
|
|
-import java.util.Set;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * Model of an event to track
|
|
- * </pre>
|
|
- */
|
|
-public class TrackingEvent {
|
|
-
|
|
- // Constants
|
|
- private static final String TAG = TrackingEvent.class.getSimpleName();
|
|
-
|
|
- // Members
|
|
- private Category mCategory;
|
|
- private final Map<String, String> mMetaData = new HashMap<String, String>();
|
|
-
|
|
- public enum Category {
|
|
- APP_LAUNCH,
|
|
- WIDGET_ADD,
|
|
- WIDGET_REMOVE,
|
|
- SETTINGS_OPEN,
|
|
- WALLPAPER_CHANGE,
|
|
- HOMESCREEN_PAGE,
|
|
- WIDGET,
|
|
- REMOTE_FOLDER
|
|
- }
|
|
-
|
|
- public static final String KEY_ORIGIN = TrackingBundle.KEY_METADATA_ORIGIN;
|
|
- public static final String KEY_VALUE = TrackingBundle.KEY_METADATA_VALUE;
|
|
- public static final String KEY_PACKAGE = TrackingBundle.KEY_METADATA_PACKAGE;
|
|
- public static final String KEY_ACTION = TrackingBundle.KEY_EVENT_ACTION;
|
|
-
|
|
- /**
|
|
- * Constructor
|
|
- *
|
|
- * @param category {@link TrackingEvent.Category}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public TrackingEvent(Category category) throws IllegalArgumentException {
|
|
- if (category == null) {
|
|
- throw new IllegalArgumentException("'category' cannot be null or empty!");
|
|
- }
|
|
- mCategory = category;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Constructor
|
|
- *
|
|
- * @param cursor {@link Cursor}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public TrackingEvent(Cursor cursor) throws IllegalArgumentException {
|
|
- if (cursor == null) {
|
|
- throw new IllegalArgumentException("'cursor' cannot be null!");
|
|
- }
|
|
- mCategory = Category.valueOf(cursor.getString(cursor.getColumnIndex(
|
|
- TrackingEventContract.EVENT_COLUMN_CATEGORY)));
|
|
- String metadata = cursor.getString(cursor.getColumnIndex(
|
|
- TrackingEventContract.EVENT_COLUMN_METADATA));
|
|
- if (!TextUtils.isEmpty(metadata)) {
|
|
- String[] parts = metadata.split(",");
|
|
- for (String part : parts) {
|
|
- try {
|
|
- String key = part.split("=")[0];
|
|
- String val = part.split("=")[1];
|
|
- mMetaData.put(key, val);
|
|
- } catch (IndexOutOfBoundsException e) {
|
|
- Log.w(TAG, e.getMessage(), e);
|
|
- }
|
|
- }
|
|
- }
|
|
- }
|
|
-
|
|
- /**
|
|
- * Get the category
|
|
- *
|
|
- * @return {@link TrackingEvent.Category}
|
|
- */
|
|
- public Category getCategory() {
|
|
- return mCategory;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Get the set of meta data keys
|
|
- *
|
|
- * @return {@link Set}
|
|
- */
|
|
- public Set<String> getMetaDataKeySet() {
|
|
- return mMetaData.keySet();
|
|
- }
|
|
-
|
|
- /**
|
|
- * Set some meta data
|
|
- *
|
|
- * @param key {@link String}
|
|
- * @param value {@link String}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public void setMetaData(String key, String value) throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(key)) {
|
|
- throw new IllegalArgumentException("'key' cannot be null or empty!");
|
|
- }
|
|
- if (TextUtils.isEmpty(value)) {
|
|
- throw new IllegalArgumentException("'value' cannot be null or empty!");
|
|
- }
|
|
- mMetaData.put(key, value);
|
|
- }
|
|
-
|
|
- /**
|
|
- * Get some meta data value
|
|
- *
|
|
- * @param key {@link String}
|
|
- * @return {@link String}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public String getMetaData(String key) throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(key)) {
|
|
- throw new IllegalArgumentException("'key' cannot be null or empty!");
|
|
- }
|
|
- if (mMetaData.containsKey(key)) {
|
|
- return mMetaData.get(key);
|
|
- }
|
|
- return null;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Remove some meta data
|
|
- *
|
|
- * @param key {@link String}
|
|
- * @return {@link String} or null
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public String removeMetaData(String key) throws IllegalArgumentException {
|
|
- if (TextUtils.isEmpty(key)) {
|
|
- throw new IllegalArgumentException("'key' cannot be null or empty!");
|
|
- }
|
|
- if (mMetaData.containsKey(key)) {
|
|
- return mMetaData.remove(key);
|
|
- }
|
|
- return null;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Converts this object into content values for use with sqlite
|
|
- *
|
|
- * @return {@link ContentValues}
|
|
- */
|
|
- public ContentValues toContentValues() {
|
|
- ContentValues contentValues = new ContentValues();
|
|
- contentValues.put(TrackingEventContract.EVENT_COLUMN_CATEGORY, mCategory.name());
|
|
- StringBuilder sb = new StringBuilder();
|
|
- for (String key : mMetaData.keySet()) {
|
|
- sb.append(key).append("=").append(mMetaData.get(key)).append(",");
|
|
- }
|
|
- if (sb.length() > 0) {
|
|
- String metadata = sb.toString();
|
|
- metadata = metadata.substring(0, metadata.length() - 1);
|
|
- Logger.logd(TAG, "MetaData: " + metadata);
|
|
- contentValues.put(TrackingEventContract.EVENT_COLUMN_METADATA, metadata);
|
|
- }
|
|
- return contentValues;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Convert this object into a tracking bundle
|
|
- *
|
|
- * @param trackingId {@link String}
|
|
- * @param action {@link ITrackingAction}
|
|
- * @return {@link Bundle}
|
|
- */
|
|
- public Bundle toTrackingBundle(String trackingId, ITrackingAction action) {
|
|
- Bundle bundle = TrackingBundle.createTrackingBundle(trackingId, mCategory.name(),
|
|
- action.toString());
|
|
- return bundle;
|
|
- }
|
|
-
|
|
-}
|
|
diff --git a/src/com/android/launcher3/stats/internal/service/AggregationIntentService.java b/src/com/android/launcher3/stats/internal/service/AggregationIntentService.java
|
|
deleted file mode 100644
|
|
index b32d79b..0000000
|
|
--- a/src/com/android/launcher3/stats/internal/service/AggregationIntentService.java
|
|
+++ /dev/null
|
|
@@ -1,238 +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.launcher3.stats.internal.service;
|
|
-
|
|
-import android.app.AlarmManager;
|
|
-import android.app.IntentService;
|
|
-import android.app.PendingIntent;
|
|
-import android.content.ComponentName;
|
|
-import android.content.Context;
|
|
-import android.content.Intent;
|
|
-import android.content.IntentFilter;
|
|
-import android.content.SharedPreferences;
|
|
-import android.content.pm.PackageManager;
|
|
-import android.os.Bundle;
|
|
-import android.preference.PreferenceManager;
|
|
-import android.util.Log;
|
|
-
|
|
-import com.android.launcher3.LauncherAppState;
|
|
-import com.android.launcher3.stats.external.StatsUtil;
|
|
-import com.android.launcher3.stats.external.TrackingBundle;
|
|
-import com.android.launcher3.stats.internal.db.DatabaseHelper;
|
|
-import com.android.launcher3.stats.internal.model.CountAction;
|
|
-import com.android.launcher3.stats.internal.model.CountOriginByPackageAction;
|
|
-import com.android.launcher3.stats.internal.model.ITrackingAction;
|
|
-import com.android.launcher3.stats.internal.model.RemoteFolderAction;
|
|
-import com.android.launcher3.stats.internal.model.TrackingEvent;
|
|
-import com.android.launcher3.stats.util.Logger;
|
|
-
|
|
-import java.util.ArrayList;
|
|
-import java.util.List;
|
|
-
|
|
-/**
|
|
- * <pre>
|
|
- * Service that starts on a timer and handles aggregating events and sending them to
|
|
- * CyanogenStats
|
|
- * </pre>
|
|
- *
|
|
- * @see {@link IntentService}
|
|
- */
|
|
-public class AggregationIntentService extends IntentService {
|
|
-
|
|
- // Constants
|
|
- private static final String TAG = AggregationIntentService.class.getSimpleName();
|
|
- private static final String TRACKING_ID = "com.cyanogenmod.trebuchet";
|
|
- public static final String ACTION_AGGREGATE_AND_TRACK =
|
|
- "com.cyanogenmod.trebuchet.AGGREGATE_AND_TRACK";
|
|
- private static final List<ITrackingAction> TRACKED_ACTIONS = new ArrayList<ITrackingAction>() {
|
|
- {
|
|
- add(new CountAction());
|
|
- add(new CountOriginByPackageAction());
|
|
- }
|
|
- };
|
|
- private static final int INVALID_COUNT = -1;
|
|
- private static final String KEY_LAST_TIME_RAN = "last_time_stats_ran";
|
|
- public static final String PREF_KEY_PAGE_COUNT = "page_count";
|
|
- public static final String PREF_KEY_WIDGET_COUNT = "widget_count";
|
|
-
|
|
- // Members
|
|
- private DatabaseHelper mDatabaseHelper = null;
|
|
- private int mInstanceId = -1;
|
|
- private SharedPreferences mPrefs = null;
|
|
-
|
|
- /**
|
|
- * Creates an IntentService. Invoked by your subclass's constructor.
|
|
- */
|
|
- public AggregationIntentService() {
|
|
- super(AggregationIntentService.class.getSimpleName());
|
|
- }
|
|
-
|
|
- @Override
|
|
- protected void onHandleIntent(Intent intent) {
|
|
- if (!isTrebuchetDefaultLauncher()) {
|
|
- // Cancel repeating schedule
|
|
- unscheduleService();
|
|
- // don't return b/c we still want to upload whatever metrics are left.
|
|
- }
|
|
- String action = intent.getAction();
|
|
- if (ACTION_AGGREGATE_AND_TRACK.equals(action)) {
|
|
- mPrefs = getSharedPreferences(LauncherAppState.getSharedPreferencesKey(),
|
|
- Context.MODE_PRIVATE);
|
|
- mPrefs.edit().putLong(KEY_LAST_TIME_RAN, System.currentTimeMillis()).apply();
|
|
- mInstanceId = (int) System.currentTimeMillis();
|
|
- mDatabaseHelper = DatabaseHelper.createInstance(this);
|
|
- performAggregation();
|
|
- deleteTrackingEventsForInstance();
|
|
- handleNonEventMetrics();
|
|
- }
|
|
- }
|
|
-
|
|
- private void performAggregation() {
|
|
-
|
|
- // Iterate available categories
|
|
- for (TrackingEvent.Category category : TrackingEvent.Category.values()) {
|
|
-
|
|
- // Fetch the events from the database based on the category
|
|
- List<TrackingEvent> eventList =
|
|
- mDatabaseHelper.getTrackingEventsByCategory(mInstanceId, category);
|
|
-
|
|
- Logger.logd(TAG, "Event list size: " + eventList.size());
|
|
- // Short circuit if no events for the category
|
|
- if (eventList.size() < 1) {
|
|
- continue;
|
|
- }
|
|
-
|
|
- // Now crunch the data into actionable events for the server.
|
|
- // Remote Folder data will process itself separately.
|
|
- if (category == TrackingEvent.Category.REMOTE_FOLDER) {
|
|
- performTrackingCall(new RemoteFolderAction(), category, eventList);
|
|
- } else {
|
|
- for (ITrackingAction action : TRACKED_ACTIONS) {
|
|
- performTrackingCall(action, category, eventList);
|
|
- }
|
|
- }
|
|
- }
|
|
- }
|
|
-
|
|
- private void deleteTrackingEventsForInstance() {
|
|
- mDatabaseHelper.deleteEventsByInstanceId(mInstanceId);
|
|
- }
|
|
-
|
|
- /**
|
|
- * These are metrics that are not event based and need a snapshot every INTERVAL
|
|
- */
|
|
- private void handleNonEventMetrics() {
|
|
- sendPageCountStats();
|
|
- sendWidgetCountStats();
|
|
-
|
|
- }
|
|
-
|
|
- private void sendPageCountStats() {
|
|
- int pageCount = mPrefs.getInt(PREF_KEY_PAGE_COUNT, INVALID_COUNT);
|
|
- if (pageCount == INVALID_COUNT) {
|
|
- return;
|
|
- }
|
|
- Bundle bundle = TrackingBundle
|
|
- .createTrackingBundle(TRACKING_ID, TrackingEvent.Category.HOMESCREEN_PAGE.name(),
|
|
- "count");
|
|
- bundle.putString(TrackingEvent.KEY_VALUE, String.valueOf(pageCount));
|
|
- StatsUtil.sendEvent(this, bundle);
|
|
- }
|
|
-
|
|
- private void sendWidgetCountStats() {
|
|
- int widgetCount = mPrefs.getInt(PREF_KEY_WIDGET_COUNT, INVALID_COUNT);
|
|
- if (widgetCount == INVALID_COUNT) {
|
|
- return;
|
|
- }
|
|
- Bundle bundle = TrackingBundle
|
|
- .createTrackingBundle(TRACKING_ID, TrackingEvent.Category.WIDGET.name(), "count");
|
|
- bundle.putString(TrackingEvent.KEY_VALUE, String.valueOf(widgetCount));
|
|
- StatsUtil.sendEvent(this, bundle);
|
|
- }
|
|
-
|
|
- private void performTrackingCall(ITrackingAction action, TrackingEvent.Category category,
|
|
- List<TrackingEvent> eventList)
|
|
- throws IllegalArgumentException {
|
|
- try {
|
|
- for (Bundle bundle : action.createTrackingBundles(TRACKING_ID, category, eventList)) {
|
|
- StatsUtil.sendEvent(this, bundle);
|
|
- }
|
|
- } catch (NullPointerException e) {
|
|
- Log.e(TAG, "NPE fetching bundle list!", e);
|
|
- } catch (IllegalArgumentException e) {
|
|
- Log.e(TAG, "Illegal argument!", e);
|
|
- }
|
|
- }
|
|
-
|
|
- private void unscheduleService() {
|
|
- Intent intent = new Intent(this, AggregationIntentService.class);
|
|
- intent.setAction(ACTION_AGGREGATE_AND_TRACK);
|
|
- PendingIntent pi = PendingIntent.getService(this, 0, intent,
|
|
- PendingIntent.FLAG_UPDATE_CURRENT);
|
|
- AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
|
|
- alarmManager.cancel(pi);
|
|
- }
|
|
-
|
|
- private boolean isTrebuchetDefaultLauncher() {
|
|
- final IntentFilter filter = new IntentFilter(Intent.ACTION_MAIN);
|
|
- filter.addCategory(Intent.CATEGORY_HOME);
|
|
-
|
|
- List<IntentFilter> filters = new ArrayList<IntentFilter>();
|
|
- filters.add(filter);
|
|
-
|
|
- final String myPackageName = getPackageName();
|
|
- List<ComponentName> activities = new ArrayList<ComponentName>();
|
|
- final PackageManager packageManager = getPackageManager();
|
|
-
|
|
- // You can use name of your package here as third argument
|
|
- packageManager.getPreferredActivities(filters, activities, null);
|
|
-
|
|
- for (ComponentName activity : activities) {
|
|
- if (myPackageName.equals(activity.getPackageName())) {
|
|
- Logger.logd(TAG, "Trebuchet IS default launcher!");
|
|
- return true;
|
|
- }
|
|
- }
|
|
- Logger.logd(TAG, "Trebuchet IS NOT default launcher!");
|
|
- return false;
|
|
- }
|
|
-
|
|
- private static final long ALARM_INTERVAL = 86400000; // 1 day
|
|
-
|
|
- /**
|
|
- * Schedule an alarm service, will cancel existing
|
|
- *
|
|
- * @param context {@link Context}
|
|
- * @throws IllegalArgumentException {@link IllegalArgumentException}
|
|
- */
|
|
- public static void scheduleService(Context context) throws IllegalArgumentException {
|
|
- if (context == null) {
|
|
- throw new IllegalArgumentException("'context' cannot be null!");
|
|
- }
|
|
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
- long lastTimeRan = prefs.getLong(KEY_LAST_TIME_RAN, 0);
|
|
- Intent intent = new Intent(context, AggregationIntentService.class);
|
|
- intent.setAction(ACTION_AGGREGATE_AND_TRACK);
|
|
- PendingIntent pi = PendingIntent.getService(context, 0, intent,
|
|
- PendingIntent.FLAG_UPDATE_CURRENT);
|
|
- AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
|
- alarmManager.cancel(pi);
|
|
- alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, lastTimeRan + ALARM_INTERVAL,
|
|
- ALARM_INTERVAL, pi);
|
|
- }
|
|
-
|
|
-}
|
|
--
|
|
2.8.2
|
|
|
|
|
|
From 3a182fd5cd65ca8ee85fddd458cbe32c562a58eb Mon Sep 17 00:00:00 2001
|
|
From: Tad <tad@spotco.us>
|
|
Date: Thu, 5 May 2016 10:05:20 -0400
|
|
Subject: [PATCH 3/5] Nuke remotefolder
|
|
|
|
Change-Id: Ie56aa15051c66a3957c9dfd3b2b20639e27512cc
|
|
---
|
|
RemoteFolder/Android-prebuilt-libs.mk | 1 -
|
|
RemoteFolder/Android.mk | 1 -
|
|
.../com/android/launcher3/RemoteFolderManager.java | 151 ---------------------
|
|
.../stats/internal/model/RemoteFolderAction.java | 30 ----
|
|
res/layout/user_folder.xml | 4 -
|
|
res/values/preferences_defaults.xml | 2 -
|
|
src/com/android/launcher3/FolderInfo.java | 20 ---
|
|
src/com/android/launcher3/Launcher.java | 37 +----
|
|
src/com/android/launcher3/LauncherModel.java | 7 +-
|
|
.../list/SettingsPinnedHeaderAdapter.java | 26 ----
|
|
.../launcher3/settings/SettingsProvider.java | 2 -
|
|
11 files changed, 7 insertions(+), 274 deletions(-)
|
|
delete mode 100644 RemoteFolder/Android-prebuilt-libs.mk
|
|
delete mode 100644 RemoteFolder/Android.mk
|
|
delete mode 100644 RemoteFolder/src/com/android/launcher3/RemoteFolderManager.java
|
|
delete mode 100644 RemoteFolder/src/com/android/launcher3/stats/internal/model/RemoteFolderAction.java
|
|
|
|
diff --git a/RemoteFolder/Android-prebuilt-libs.mk b/RemoteFolder/Android-prebuilt-libs.mk
|
|
deleted file mode 100644
|
|
index 65357a8..0000000
|
|
--- a/RemoteFolder/Android-prebuilt-libs.mk
|
|
+++ /dev/null
|
|
@@ -1 +0,0 @@
|
|
-# Empty file needed to mirror lib makefile in overlay
|
|
\ No newline at end of file
|
|
diff --git a/RemoteFolder/Android.mk b/RemoteFolder/Android.mk
|
|
deleted file mode 100644
|
|
index 2a74413..0000000
|
|
--- a/RemoteFolder/Android.mk
|
|
+++ /dev/null
|
|
@@ -1 +0,0 @@
|
|
-LOCAL_SRC_FILES += $(call all-java-files-under, RemoteFolder/src)
|
|
diff --git a/RemoteFolder/src/com/android/launcher3/RemoteFolderManager.java b/RemoteFolder/src/com/android/launcher3/RemoteFolderManager.java
|
|
deleted file mode 100644
|
|
index 142a4d1..0000000
|
|
--- a/RemoteFolder/src/com/android/launcher3/RemoteFolderManager.java
|
|
+++ /dev/null
|
|
@@ -1,151 +0,0 @@
|
|
-package com.android.launcher3;
|
|
-
|
|
-import android.content.Context;
|
|
-import android.graphics.drawable.Drawable;
|
|
-import android.os.Bundle;
|
|
-import android.view.View;
|
|
-import android.view.ViewGroup;
|
|
-import com.android.launcher3.allapps.AllAppsGridAdapter;
|
|
-import com.android.launcher3.allapps.AlphabeticalAppsList;
|
|
-
|
|
-import java.util.ArrayList;
|
|
-import java.util.List;
|
|
-
|
|
-/**
|
|
- * Manages adding and removing the remote folder from the workspace.
|
|
- */
|
|
-public class RemoteFolderManager {
|
|
-
|
|
- public RemoteFolderManager(final Launcher launcher) { }
|
|
-
|
|
- /**
|
|
- * Called when launcher receives a non-initial {@link Launcher#onCreate(Bundle)} call.
|
|
- * @param launcher new launcher activity.
|
|
- */
|
|
- public void onRecreateLauncher(final Launcher launcher) { }
|
|
-
|
|
- /**
|
|
- * Called when Launcher's views are loaded and ready.
|
|
- */
|
|
- public void onSetupViews() { }
|
|
-
|
|
- /**
|
|
- * Create a remote folder view.
|
|
- * @param icon folder icon view on the workspace.
|
|
- * @return a view for the remote folder.
|
|
- */
|
|
- public Folder createRemoteFolder(final FolderIcon icon, ViewGroup root) { return null; }
|
|
-
|
|
- /**
|
|
- * Get a drawable for the supplied item in the folder icon preview.
|
|
- * @param items list of views in the folder.
|
|
- * @param position index of icon to retreive.
|
|
- * @return an icon to draw in the folder preview.
|
|
- */
|
|
- public Drawable getFolderIconDrawable(final ArrayList<View> items,
|
|
- final int position) { return null; }
|
|
-
|
|
- /**
|
|
- * Called when Launcher finishes binding items from the model.
|
|
- */
|
|
- public void bindFinished() { }
|
|
-
|
|
- /**
|
|
- * Called when a setting for remote folder is updated.
|
|
- */
|
|
- public void onSettingChanged() { }
|
|
-
|
|
- /**
|
|
- * Called when the remote folder is dropped into the delete area on the workspace.
|
|
- */
|
|
- public void onFolderDeleted() { }
|
|
-
|
|
- /**
|
|
- * Called when the app drawer is opened.
|
|
- */
|
|
- public void onAppDrawerOpened() { }
|
|
-
|
|
- /**
|
|
- * Called when the app drawer is reloaded.
|
|
- */
|
|
- public void onReloadAppDrawer() { }
|
|
-
|
|
- /**
|
|
- * Called when the app drawer is measured.
|
|
- * @param numAppsPerRow the number of apps the drawer will show in a row.
|
|
- */
|
|
- public void onMeasureDrawer(int numAppsPerRow) { }
|
|
-
|
|
- /**
|
|
- * Called when new apps are added to launcher.
|
|
- * @param apps list of added apps.
|
|
- */
|
|
- public void onBindAddApps(ArrayList<AppInfo> apps) { }
|
|
-
|
|
- /**
|
|
- * Called when the info icon is clicked
|
|
- */
|
|
- public void onInfoIconClicked() { }
|
|
-
|
|
- /**
|
|
- * Called when the grid size for launcher is updated.
|
|
- */
|
|
- public void onGridSizeChanged() { }
|
|
-
|
|
- /**
|
|
- * Change the appearance of FolderIcon for our RemoteFolder by adding a badge
|
|
- * @param icon the FolderIcon to update
|
|
- * @return a FolderIcon with an added ImageView
|
|
- */
|
|
- public static FolderIcon addBadgeToFolderIcon(FolderIcon icon) {
|
|
- return icon;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Called when adapter items for predicted apps are updated.
|
|
- * @param items current list of built adapter items.
|
|
- * @param fastScrollInfo fast scroller info for this section.
|
|
- * @param sectionInfo info about apps in this section.
|
|
- * @param position current position of item to be built into the adapter.
|
|
- * @return the new position to start from for next adapter items.
|
|
- */
|
|
- public int onUpdateAdapterItems(final List<AlphabeticalAppsList.AdapterItem> items,
|
|
- final AlphabeticalAppsList.FastScrollSectionInfo fastScrollInfo,
|
|
- final AlphabeticalAppsList.SectionInfo sectionInfo,
|
|
- int position) { return position; }
|
|
-
|
|
- /**
|
|
- * Called when a view holder is created for a remote app.
|
|
- * @param holder remote view holder.
|
|
- * @param viewType specific type of view holder.
|
|
- */
|
|
- public void onCreateViewHolder(final AllAppsGridAdapter.ViewHolder holder, final int viewType) { }
|
|
-
|
|
- /**
|
|
- * Called when a view holder is bound for a remote app.
|
|
- * @param holder remote view holder.
|
|
- * @param item info for this app.
|
|
- */
|
|
- public void onBindViewHolder(final AllAppsGridAdapter.ViewHolder holder, final AppInfo item) { }
|
|
-
|
|
- /**
|
|
- * Populate home settings list with additional values as needed.
|
|
- * @param values list of settings strings.
|
|
- * @param context application context.
|
|
- */
|
|
- public static void onInitializeHomeSettings(final ArrayList<String> values,
|
|
- final Context context) { }
|
|
-
|
|
- /**
|
|
- * Populate drawer settings list with additional values as needed.
|
|
- * @param values list of settings strings.
|
|
- * @param context application context.
|
|
- */
|
|
- public static void onInitializeDrawerSettings(final ArrayList<String> values,
|
|
- final Context context) { }
|
|
-
|
|
- /**
|
|
- * Apply icon pack when the theme changes.
|
|
- */
|
|
- public synchronized void onThemeChanged() { }
|
|
-}
|
|
diff --git a/RemoteFolder/src/com/android/launcher3/stats/internal/model/RemoteFolderAction.java b/RemoteFolder/src/com/android/launcher3/stats/internal/model/RemoteFolderAction.java
|
|
deleted file mode 100644
|
|
index dc36332..0000000
|
|
--- a/RemoteFolder/src/com/android/launcher3/stats/internal/model/RemoteFolderAction.java
|
|
+++ /dev/null
|
|
@@ -1,30 +0,0 @@
|
|
-/*
|
|
- * Copyright (c) 2016. 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.launcher3.stats.internal.model;
|
|
-
|
|
-import android.os.Bundle;
|
|
-
|
|
-import java.util.ArrayList;
|
|
-import java.util.List;
|
|
-
|
|
-public class RemoteFolderAction implements ITrackingAction {
|
|
- @Override
|
|
- public List<Bundle> createTrackingBundles(String trackingId, TrackingEvent.Category category,
|
|
- List<TrackingEvent> eventList) {
|
|
- return new ArrayList<Bundle>();
|
|
- }
|
|
-}
|
|
diff --git a/res/layout/user_folder.xml b/res/layout/user_folder.xml
|
|
index 516da30..c2712ff 100644
|
|
--- a/res/layout/user_folder.xml
|
|
+++ b/res/layout/user_folder.xml
|
|
@@ -24,10 +24,6 @@
|
|
android:layout_margin="@dimen/folder_margin"
|
|
android:layout_gravity="bottom|center_horizontal">
|
|
|
|
- <include layout="@layout/remote_folder"
|
|
- android:layout_width="wrap_content"
|
|
- android:layout_height="wrap_content" />
|
|
-
|
|
<FrameLayout
|
|
android:id="@+id/folder_content_wrapper"
|
|
android:layout_width="wrap_content"
|
|
diff --git a/res/values/preferences_defaults.xml b/res/values/preferences_defaults.xml
|
|
index 63c5e9c..556f4f8 100644
|
|
--- a/res/values/preferences_defaults.xml
|
|
+++ b/res/values/preferences_defaults.xml
|
|
@@ -11,7 +11,5 @@
|
|
<bool name="preferences_interface_use_horizontal_scrubber_default">true</bool>
|
|
<bool name="preferences_interface_drawer_search_default">true</bool>
|
|
<bool name="preferences_interface_allow_rotation">false</bool>
|
|
- <bool name="preferences_interface_homescreen_remote_folder_default">false</bool>
|
|
- <bool name="preferences_interface_drawer_remote_apps_default">false</bool>
|
|
<integer name="preferences_interface_homescreen_id_default">1</integer>
|
|
</resources>
|
|
diff --git a/src/com/android/launcher3/FolderInfo.java b/src/com/android/launcher3/FolderInfo.java
|
|
index 7969d62..2fa3dbc 100644
|
|
--- a/src/com/android/launcher3/FolderInfo.java
|
|
+++ b/src/com/android/launcher3/FolderInfo.java
|
|
@@ -28,7 +28,6 @@ import java.util.Arrays;
|
|
* Represents a folder containing shortcuts or apps.
|
|
*/
|
|
public class FolderInfo extends ItemInfo {
|
|
- public static final int REMOTE_SUBTYPE = 1;
|
|
|
|
public static final int NO_FLAGS = 0x00000000;
|
|
|
|
@@ -123,25 +122,6 @@ public class FolderInfo extends ItemInfo {
|
|
itemsChanged();
|
|
}
|
|
|
|
- /**
|
|
- * @return true if this info represents a remote folder, false otherwise
|
|
- */
|
|
- public boolean isRemote() {
|
|
- return (subType & REMOTE_SUBTYPE) != 0;
|
|
- }
|
|
-
|
|
- /**
|
|
- * Set flag indicating whether this folder is remote
|
|
- * @param remote true if folder is remote, false otherwise
|
|
- */
|
|
- public void setRemote(final boolean remote) {
|
|
- if (remote) {
|
|
- subType |= REMOTE_SUBTYPE;
|
|
- } else {
|
|
- subType &= ~REMOTE_SUBTYPE;
|
|
- }
|
|
- }
|
|
-
|
|
public void setTitle(CharSequence title) {
|
|
this.title = title;
|
|
for (int i = 0; i < listeners.size(); i++) {
|
|
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
|
|
index f5744dd..77f7db6 100644
|
|
--- a/src/com/android/launcher3/Launcher.java
|
|
+++ b/src/com/android/launcher3/Launcher.java
|
|
@@ -264,8 +264,6 @@ public class Launcher extends Activity
|
|
private View mWeightWatcher;
|
|
private DynamicGridSizeFragment mDynamicGridSizeFragment;
|
|
|
|
- protected static RemoteFolderManager sRemoteFolderManager;
|
|
-
|
|
private AppWidgetManagerCompat mAppWidgetManager;
|
|
private LauncherAppWidgetHost mAppWidgetHost;
|
|
|
|
@@ -519,12 +517,6 @@ public class Launcher extends Activity
|
|
|
|
mAppWidgetHost = new LauncherAppWidgetHost(this, APPWIDGET_HOST_ID);
|
|
|
|
- if (sRemoteFolderManager == null) {
|
|
- sRemoteFolderManager = new RemoteFolderManager(this);
|
|
- } else {
|
|
- sRemoteFolderManager.onRecreateLauncher(this);
|
|
- }
|
|
-
|
|
// If we are getting an onCreate, we can actually preempt onResume and unset mPaused here,
|
|
// this also ensures that any synchronous binding below doesn't re-trigger another
|
|
// LauncherModel load.
|
|
@@ -1629,7 +1621,6 @@ public class Launcher extends Activity
|
|
mWeightWatcher.setVisibility(show ? View.VISIBLE : View.GONE);
|
|
}
|
|
|
|
- sRemoteFolderManager.onSetupViews();
|
|
}
|
|
|
|
/**
|
|
@@ -1887,7 +1878,6 @@ public class Launcher extends Activity
|
|
mAppsView.addApps(addedApps);
|
|
tryAndUpdatePredictedApps();
|
|
mAppsView.onReloadAppDrawer();
|
|
- sRemoteFolderManager.onReloadAppDrawer();
|
|
}
|
|
|
|
public void reloadWidgetView() {
|
|
@@ -1945,9 +1935,6 @@ public class Launcher extends Activity
|
|
reloadLauncher(false, true);
|
|
}
|
|
|
|
- // Must be called after reload and before settings invalidation.
|
|
- sRemoteFolderManager.onGridSizeChanged();
|
|
-
|
|
mOverviewSettingsPanel.notifyDataSetInvalidated();
|
|
|
|
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
|
|
@@ -2154,10 +2141,6 @@ public class Launcher extends Activity
|
|
return mWorkspace;
|
|
}
|
|
|
|
- public RemoteFolderManager getRemoteFolderManager() {
|
|
- return sRemoteFolderManager;
|
|
- }
|
|
-
|
|
public Hotseat getHotseat() {
|
|
return mHotseat;
|
|
}
|
|
@@ -3797,8 +3780,6 @@ public class Launcher extends Activity
|
|
tryAndUpdatePredictedApps();
|
|
}
|
|
showAppsOrWidgets(State.APPS, animated, focusSearchBar);
|
|
-
|
|
- sRemoteFolderManager.onAppDrawerOpened();
|
|
}
|
|
|
|
/**
|
|
@@ -3918,18 +3899,13 @@ public class Launcher extends Activity
|
|
* resumed.
|
|
*/
|
|
private void tryAndUpdatePredictedApps() {
|
|
- boolean mRemoteDrawerEnabled = SettingsProvider.getBoolean(this,
|
|
- SettingsProvider.SETTINGS_UI_DRAWER_REMOTE_APPS,
|
|
- R.bool.preferences_interface_drawer_remote_apps_default);
|
|
- if (!mRemoteDrawerEnabled) {
|
|
- if (mLauncherCallbacks != null) {
|
|
- List<ComponentKey> apps = mLauncherCallbacks.getPredictedApps();
|
|
- if (apps != null) {
|
|
- mAppsView.setPredictedAppComponents(apps);
|
|
- }
|
|
- }
|
|
+ if (mLauncherCallbacks != null) {
|
|
+ List<ComponentKey> apps = mLauncherCallbacks.getPredictedApps();
|
|
+ if (apps != null) {
|
|
+ mAppsView.setPredictedAppComponents(apps);
|
|
}
|
|
}
|
|
+ }
|
|
|
|
void lockAllApps() {
|
|
// TODO
|
|
@@ -4213,7 +4189,6 @@ public class Launcher extends Activity
|
|
|
|
if (addedApps != null && mAppsView != null) {
|
|
mAppsView.addApps(addedApps);
|
|
- sRemoteFolderManager.onBindAddApps(addedApps);
|
|
}
|
|
}
|
|
|
|
@@ -4539,8 +4514,6 @@ public class Launcher extends Activity
|
|
}
|
|
|
|
mWorkspace.stripEmptyScreens();
|
|
-
|
|
- sRemoteFolderManager.bindFinished();
|
|
}
|
|
|
|
private void sendLoadingCompleteBroadcastIfNecessary() {
|
|
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
|
|
index e758817..beabeaa 100644
|
|
--- a/src/com/android/launcher3/LauncherModel.java
|
|
+++ b/src/com/android/launcher3/LauncherModel.java
|
|
@@ -2707,9 +2707,7 @@ public class LauncherModel extends BroadcastReceiver
|
|
finalItem.container = folder.container;
|
|
LauncherModel.deleteItemFromDatabase(mContext, folder);
|
|
// only replace this item back on the workspace if it's not protected
|
|
- // and not a remote folder.
|
|
- if (!mHiddenApps.contains(finalItem.intent.getComponent()) &&
|
|
- !folder.isRemote()) {
|
|
+ if (!mHiddenApps.contains(finalItem.intent.getComponent())) {
|
|
LauncherModel.addOrMoveItemInDatabase(mContext, finalItem,
|
|
folder.container, folder.screenId, folder.cellX, folder.cellY);
|
|
workspaceItems.add(finalItem);
|
|
@@ -2717,8 +2715,7 @@ public class LauncherModel extends BroadcastReceiver
|
|
workspaceItems.remove(i);
|
|
folders.remove(Long.valueOf(item.id));
|
|
|
|
- // Remote folders are always empty on bind.
|
|
- } else if (folder.contents.size() == 0 && !folder.isRemote()) {
|
|
+ } else if (folder.contents.size() == 0) {
|
|
LauncherModel.deleteFolderContentsFromDatabase(mContext, folder);
|
|
workspaceItems.remove(i);
|
|
folders.remove(Long.valueOf(item.id));
|
|
diff --git a/src/com/android/launcher3/list/SettingsPinnedHeaderAdapter.java b/src/com/android/launcher3/list/SettingsPinnedHeaderAdapter.java
|
|
index 1ccd2da..d1dbbf7 100644
|
|
--- a/src/com/android/launcher3/list/SettingsPinnedHeaderAdapter.java
|
|
+++ b/src/com/android/launcher3/list/SettingsPinnedHeaderAdapter.java
|
|
@@ -125,13 +125,6 @@ public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
|
|
SettingsProvider.SETTINGS_UI_ALLOW_ROTATION,
|
|
R.bool.preferences_interface_allow_rotation);
|
|
setSettingSwitch(stateView, settingSwitch, current);
|
|
- break;
|
|
- case 5:
|
|
- current = SettingsProvider.getBoolean(mContext,
|
|
- SettingsProvider.SETTINGS_UI_HOMESCREEN_REMOTE_FOLDER,
|
|
- R.bool.preferences_interface_homescreen_remote_folder_default);
|
|
- setSettingSwitch(stateView, settingSwitch, current);
|
|
- break;
|
|
default:
|
|
hideStates(stateView, settingSwitch);
|
|
}
|
|
@@ -181,12 +174,6 @@ public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
|
|
R.bool.preferences_interface_drawer_search_default);
|
|
setSettingSwitch(stateView, settingSwitch, current);
|
|
break;
|
|
- case 6:
|
|
- current = SettingsProvider.getBoolean(mContext,
|
|
- SettingsProvider.SETTINGS_UI_DRAWER_REMOTE_APPS,
|
|
- R.bool.preferences_interface_drawer_remote_apps_default);
|
|
- setSettingSwitch(stateView, settingSwitch, current);
|
|
- break;
|
|
default:
|
|
hideStates(stateView, settingSwitch);
|
|
}
|
|
@@ -295,13 +282,6 @@ public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
|
|
key, extras);
|
|
|
|
break;
|
|
- case 5:
|
|
- onSettingsBooleanChanged(v,
|
|
- SettingsProvider.SETTINGS_UI_HOMESCREEN_REMOTE_FOLDER,
|
|
- R.bool.preferences_interface_homescreen_remote_folder_default,
|
|
- false);
|
|
- mLauncher.getRemoteFolderManager().onSettingChanged();
|
|
- break;
|
|
}
|
|
break;
|
|
case OverviewSettingsPanel.DRAWER_SETTINGS_POSITION:
|
|
@@ -351,12 +331,6 @@ public class SettingsPinnedHeaderAdapter extends PinnedHeaderListAdapter {
|
|
R.bool.preferences_interface_drawer_search_default, false);
|
|
mLauncher.reloadAppDrawer();
|
|
break;
|
|
- case 6:
|
|
- onSettingsBooleanChanged(v,
|
|
- SettingsProvider.SETTINGS_UI_DRAWER_REMOTE_APPS,
|
|
- R.bool.preferences_interface_drawer_remote_apps_default, false);
|
|
- mLauncher.getRemoteFolderManager().onSettingChanged();
|
|
- break;
|
|
}
|
|
break;
|
|
case OverviewSettingsPanel.APP_SETTINGS_POSITION:
|
|
diff --git a/src/com/android/launcher3/settings/SettingsProvider.java b/src/com/android/launcher3/settings/SettingsProvider.java
|
|
index e809a8a..a0e18cb 100644
|
|
--- a/src/com/android/launcher3/settings/SettingsProvider.java
|
|
+++ b/src/com/android/launcher3/settings/SettingsProvider.java
|
|
@@ -26,8 +26,6 @@ public final class SettingsProvider {
|
|
public static final String SETTINGS_UI_HOMESCREEN_SEARCH = "ui_homescreen_search";
|
|
public static final String SETTINGS_UI_HOMESCREEN_HIDE_ICON_LABELS = "ui_homescreen_general_hide_icon_labels";
|
|
public static final String SETTINGS_UI_HOMESCREEN_SCROLLING_WALLPAPER_SCROLL = "ui_homescreen_scrolling_wallpaper_scroll";
|
|
- public static final String SETTINGS_UI_HOMESCREEN_REMOTE_FOLDER = "ui_homescreen_remote_folder";
|
|
- public static final String SETTINGS_UI_DRAWER_REMOTE_APPS = "ui_drawer_remote_apps";
|
|
public static final String SETTINGS_UI_DYNAMIC_GRID_SIZE = "ui_dynamic_grid_size";
|
|
public static final String SETTINGS_UI_HOMESCREEN_ROWS = "ui_homescreen_rows";
|
|
public static final String SETTINGS_UI_HOMESCREEN_COLUMNS = "ui_homescreen_columns";
|
|
--
|
|
2.8.2
|
|
|
|
|
|
From 10d5ba7b72cf47eec82dee12ba8cf0b8b77ae8b5 Mon Sep 17 00:00:00 2001
|
|
From: Tad <tad@spotco.us>
|
|
Date: Thu, 5 May 2016 10:17:17 -0400
|
|
Subject: [PATCH 4/5] Nuke remote folder some more
|
|
|
|
Change-Id: I55d1c6a995fe009b91eb94d3c961389a78da768c
|
|
---
|
|
Android.mk | 6 ----
|
|
src/com/android/launcher3/DeleteDropTarget.java | 9 ++----
|
|
src/com/android/launcher3/FolderIcon.java | 34 ++++------------------
|
|
.../android/launcher3/OverviewSettingsPanel.java | 6 ----
|
|
.../android/launcher3/ThemeChangedReceiver.java | 4 ---
|
|
.../launcher3/allapps/AllAppsContainerView.java | 2 --
|
|
.../launcher3/allapps/AllAppsGridAdapter.java | 10 -------
|
|
.../launcher3/allapps/AlphabeticalAppsList.java | 5 ----
|
|
8 files changed, 8 insertions(+), 68 deletions(-)
|
|
|
|
diff --git a/Android.mk b/Android.mk
|
|
index 9915fc5..3ef528d 100644
|
|
--- a/Android.mk
|
|
+++ b/Android.mk
|
|
@@ -61,16 +61,10 @@ LOCAL_OVERRIDES_PACKAGES := Launcher3
|
|
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
|
|
LOCAL_PROGUARD_ENABLED := full
|
|
|
|
-REMOTE_FOLDER_UPDATER ?= $(LOCAL_PATH)/RemoteFolder
|
|
-include $(REMOTE_FOLDER_UPDATER)/Android.mk
|
|
-
|
|
include $(BUILD_PACKAGE)
|
|
|
|
include $(CLEAR_VARS)
|
|
|
|
-REMOTE_FOLDER_UPDATER ?= $(LOCAL_PATH)/RemoteFolder
|
|
-include $(REMOTE_FOLDER_UPDATER)/Android-prebuilt-libs.mk
|
|
-
|
|
include $(BUILD_MULTI_PREBUILT)
|
|
|
|
include $(CLEAR_VARS)
|
|
diff --git a/src/com/android/launcher3/DeleteDropTarget.java b/src/com/android/launcher3/DeleteDropTarget.java
|
|
index f51a43a..a442442 100644
|
|
--- a/src/com/android/launcher3/DeleteDropTarget.java
|
|
+++ b/src/com/android/launcher3/DeleteDropTarget.java
|
|
@@ -75,13 +75,8 @@ public class DeleteDropTarget extends ButtonDropTarget {
|
|
} else if (item instanceof FolderInfo) {
|
|
FolderInfo folder = (FolderInfo) item;
|
|
|
|
- // Remote folder should not really be deleted. Let the manager handle it.
|
|
- if (folder.isRemote()) {
|
|
- launcher.getRemoteFolderManager().onFolderDeleted();
|
|
- } else {
|
|
- launcher.removeFolder(folder);
|
|
- LauncherModel.deleteFolderContentsFromDatabase(launcher, folder);
|
|
- }
|
|
+ launcher.removeFolder(folder);
|
|
+ LauncherModel.deleteFolderContentsFromDatabase(launcher, folder);
|
|
} else if (item instanceof LauncherAppWidgetInfo) {
|
|
final LauncherAppWidgetInfo widget = (LauncherAppWidgetInfo) item;
|
|
|
|
diff --git a/src/com/android/launcher3/FolderIcon.java b/src/com/android/launcher3/FolderIcon.java
|
|
index 356c275..c43f120 100644
|
|
--- a/src/com/android/launcher3/FolderIcon.java
|
|
+++ b/src/com/android/launcher3/FolderIcon.java
|
|
@@ -174,16 +174,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
|
icon.mLauncher = launcher;
|
|
icon.setContentDescription(String.format(launcher.getString(R.string.folder_name_format),
|
|
folderInfo.title));
|
|
- Folder folder;
|
|
- if (folderInfo.isRemote()) {
|
|
- folder = launcher.getRemoteFolderManager().createRemoteFolder(icon, launcher.getDragLayer());
|
|
- if (folder == null) {
|
|
- LauncherModel.deleteItemFromDatabase(launcher, folderInfo);
|
|
- return null;
|
|
- }
|
|
- } else {
|
|
- folder = Folder.fromXml(launcher, launcher.getDragLayer());
|
|
- }
|
|
+ Folder folder = Folder.fromXml(launcher, launcher.getDragLayer());
|
|
folder.setDragController(launcher.getDragController());
|
|
folder.setFolderIcon(icon);
|
|
folder.bind(folderInfo);
|
|
@@ -245,11 +236,6 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
|
}
|
|
}
|
|
|
|
- // Create an overlay badge if this FolderIcon is for a RemoteFolder
|
|
- if (folderInfo.isRemote()) {
|
|
- icon = RemoteFolderManager.addBadgeToFolderIcon(icon);
|
|
- }
|
|
-
|
|
return icon;
|
|
}
|
|
|
|
@@ -391,14 +377,10 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
|
}
|
|
|
|
private boolean willAcceptItem(ItemInfo item) {
|
|
- if (mInfo.isRemote()) return false;
|
|
-
|
|
final int itemType = item.itemType;
|
|
|
|
boolean hidden = false;
|
|
if (item instanceof FolderInfo){
|
|
- if (((FolderInfo) item).isRemote()) return false;
|
|
-
|
|
hidden = ((FolderInfo) item).hidden;
|
|
}
|
|
return ((itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION ||
|
|
@@ -704,7 +686,7 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
|
super.dispatchDraw(canvas);
|
|
|
|
if (mFolder == null) return;
|
|
- if (mFolder.getItemCount() == 0 && !mAnimating && !mInfo.isRemote()) return;
|
|
+ if (mFolder.getItemCount() == 0 && !mAnimating) return;
|
|
|
|
ArrayList<View> items = mFolder.getItemsInReadingOrder();
|
|
Drawable d;
|
|
@@ -740,14 +722,10 @@ public class FolderIcon extends FrameLayout implements FolderListener {
|
|
if (!mAnimating) {
|
|
for (int i = 0; i < NUM_ITEMS_IN_PREVIEW; i++) {
|
|
d = null;
|
|
- if (mInfo.isRemote()) {
|
|
- d = mLauncher.getRemoteFolderManager().getFolderIconDrawable(items, i);
|
|
- } else if (i < items.size()) {
|
|
- v = (TextView) items.get(i);
|
|
- if (!mHiddenItems.contains(v.getTag())) {
|
|
- d = getTopDrawable(v);
|
|
- }
|
|
- }
|
|
+ v = (TextView) items.get(i);
|
|
+ if (!mHiddenItems.contains(v.getTag())) {
|
|
+ d = getTopDrawable(v);
|
|
+ }
|
|
|
|
if (d != null) {
|
|
mParams = computePreviewItemDrawingParams(i, mParams);
|
|
diff --git a/src/com/android/launcher3/OverviewSettingsPanel.java b/src/com/android/launcher3/OverviewSettingsPanel.java
|
|
index 8f1b435..3fbb65a 100644
|
|
--- a/src/com/android/launcher3/OverviewSettingsPanel.java
|
|
+++ b/src/com/android/launcher3/OverviewSettingsPanel.java
|
|
@@ -75,9 +75,6 @@ public class OverviewSettingsPanel {
|
|
res.getString(R.string.grid_size_text),
|
|
res.getString(R.string.allow_rotation_title)}));
|
|
|
|
- // Add additional external settings.
|
|
- RemoteFolderManager.onInitializeHomeSettings(values, mLauncher);
|
|
-
|
|
String[] valuesArr = new String[values.size()];
|
|
values.toArray(valuesArr);
|
|
return valuesArr;
|
|
@@ -93,9 +90,6 @@ public class OverviewSettingsPanel {
|
|
res.getString(R.string.fast_scroller_type),
|
|
res.getString(R.string.home_screen_search_text)}));
|
|
|
|
- // Add additional external settings.
|
|
- RemoteFolderManager.onInitializeDrawerSettings(values, mLauncher);
|
|
-
|
|
String[] valuesArr = new String[values.size()];
|
|
values.toArray(valuesArr);
|
|
return valuesArr;
|
|
diff --git a/src/com/android/launcher3/ThemeChangedReceiver.java b/src/com/android/launcher3/ThemeChangedReceiver.java
|
|
index 3f4f3af..6dac0be 100644
|
|
--- a/src/com/android/launcher3/ThemeChangedReceiver.java
|
|
+++ b/src/com/android/launcher3/ThemeChangedReceiver.java
|
|
@@ -43,10 +43,6 @@ public class ThemeChangedReceiver extends BroadcastReceiver {
|
|
app.recreateWidgetPreviewDb();
|
|
app.getIconCache().flush();
|
|
app.getModel().forceReload();
|
|
-
|
|
- if (Launcher.sRemoteFolderManager != null) {
|
|
- Launcher.sRemoteFolderManager.onThemeChanged();
|
|
- }
|
|
}
|
|
}
|
|
|
|
diff --git a/src/com/android/launcher3/allapps/AllAppsContainerView.java b/src/com/android/launcher3/allapps/AllAppsContainerView.java
|
|
index 989148f..23f4f70 100644
|
|
--- a/src/com/android/launcher3/allapps/AllAppsContainerView.java
|
|
+++ b/src/com/android/launcher3/allapps/AllAppsContainerView.java
|
|
@@ -377,8 +377,6 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
|
|
|
|
boolean mergeSections = mSectionStrategy == SECTION_STRATEGY_GRID;
|
|
mApps.setNumAppsPerRow(mNumAppsPerRow, mNumPredictedAppsPerRow, mergeSections);
|
|
-
|
|
- mLauncher.getRemoteFolderManager().onMeasureDrawer(mNumPredictedAppsPerRow);
|
|
}
|
|
|
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
|
diff --git a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
|
|
index 6431825..56ce38d 100644
|
|
--- a/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
|
|
+++ b/src/com/android/launcher3/allapps/AllAppsGridAdapter.java
|
|
@@ -42,7 +42,6 @@ import com.android.launcher3.BaseRecyclerViewFastScrollBar.FastScrollFocusable;
|
|
import com.android.launcher3.BubbleTextView;
|
|
import com.android.launcher3.Launcher;
|
|
import com.android.launcher3.R;
|
|
-import com.android.launcher3.RemoteFolderManager;
|
|
import com.android.launcher3.Utilities;
|
|
import com.android.launcher3.settings.SettingsProvider;
|
|
import com.android.launcher3.util.Thunk;
|
|
@@ -329,8 +328,6 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.
|
|
}
|
|
}
|
|
|
|
- private final RemoteFolderManager mRemoteFolderManager;
|
|
-
|
|
private Launcher mLauncher;
|
|
private LayoutInflater mLayoutInflater;
|
|
@Thunk AlphabeticalAppsList mApps;
|
|
@@ -419,8 +416,6 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.
|
|
if (marketInfo != null) {
|
|
mMarketAppName = marketInfo.loadLabel(pm).toString();
|
|
}
|
|
-
|
|
- mRemoteFolderManager = launcher.getRemoteFolderManager();
|
|
}
|
|
|
|
/**
|
|
@@ -529,7 +524,6 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.
|
|
FastScrollFocusable.FAST_SCROLL_FOCUS_SCALABLE);
|
|
|
|
ViewHolder holder = new ViewHolder(icon);
|
|
- mRemoteFolderManager.onCreateViewHolder(holder, viewType);
|
|
|
|
return holder;
|
|
}
|
|
@@ -555,14 +549,12 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.
|
|
FastScrollFocusApplicator.createApplicator(v,
|
|
FastScrollFocusable.FAST_SCROLL_FOCUS_DIMMABLE);
|
|
ViewHolder holder = new ViewHolder(v);
|
|
- mRemoteFolderManager.onCreateViewHolder(holder, viewType);
|
|
return holder;
|
|
}
|
|
case CUSTOM_PREDICTED_APPS_FOOTER_VIEW_TYPE: {
|
|
View v = mLayoutInflater.inflate(R.layout.custom_predicted_apps_footer,
|
|
parent, false);
|
|
ViewHolder holder = new ViewHolder(v);
|
|
- mRemoteFolderManager.onCreateViewHolder(holder, viewType);
|
|
return holder;
|
|
}
|
|
default:
|
|
@@ -602,8 +594,6 @@ public class AllAppsGridAdapter extends RecyclerView.Adapter<AllAppsGridAdapter.
|
|
FastScrollFocusApplicator.setFastScrollDimmed(icon, shouldDimPosition(position),
|
|
!mIconsDimmed);
|
|
FastScrollFocusApplicator.setFastScrollFocused(icon, false, !mIconsDimmed);
|
|
-
|
|
- mRemoteFolderManager.onBindViewHolder(holder, info);
|
|
break;
|
|
}
|
|
case EMPTY_SEARCH_VIEW_TYPE:
|
|
diff --git a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
|
|
index 9d30f81..4ad2626 100644
|
|
--- a/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
|
|
+++ b/src/com/android/launcher3/allapps/AlphabeticalAppsList.java
|
|
@@ -509,11 +509,6 @@ public class AlphabeticalAppsList {
|
|
mAdapterItems.add(appItem);
|
|
mFilteredApps.add(info);
|
|
}
|
|
-
|
|
- if (mCustomPredictedAppsEnabled) {
|
|
- position = mLauncher.getRemoteFolderManager().onUpdateAdapterItems(
|
|
- mAdapterItems, lastFastScrollerSectionInfo, lastSectionInfo, position);
|
|
- }
|
|
}
|
|
}
|
|
|
|
--
|
|
2.8.2
|
|
|
|
|
|
From af55242a51ee25ff5732af26b375a098069316e8 Mon Sep 17 00:00:00 2001
|
|
From: Tad <tad@spotco.us>
|
|
Date: Thu, 5 May 2016 15:20:44 -0400
|
|
Subject: [PATCH 5/5] Fix build breakage
|
|
|
|
Change-Id: I82319301b59da5d04fe3c0b68791999f04717579
|
|
---
|
|
src/com/android/launcher3/LauncherModel.java | 2 +-
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
|
|
index beabeaa..c6d5e21 100644
|
|
--- a/src/com/android/launcher3/LauncherModel.java
|
|
+++ b/src/com/android/launcher3/LauncherModel.java
|
|
@@ -47,7 +47,7 @@ import android.text.TextUtils;
|
|
import android.util.Log;
|
|
import android.util.LongSparseArray;
|
|
import android.util.Pair;
|
|
-
|
|
+import com.android.launcher3.settings.SettingsProvider;
|
|
import com.android.launcher3.compat.AppWidgetManagerCompat;
|
|
import com.android.launcher3.compat.LauncherActivityInfoCompat;
|
|
import com.android.launcher3.compat.LauncherAppsCompat;
|
|
--
|
|
2.8.2
|
|
|