blob: 5f62ad8032e7aaa571e7bcfc9ef673fc0711b4a2 [file] [log] [blame]
/**
* Copyright (C) 2014 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy
* of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package com.android.tests.usagestats;
import android.app.ListActivity;
import android.app.usage.UsageEvents;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class UsageLogActivity extends ListActivity implements Runnable {
private static final long USAGE_STATS_PERIOD = 1000 * 60 * 60 * 24 * 14;
private UsageStatsManager mUsageStatsManager;
private Adapter mAdapter;
private Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUsageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
mAdapter = new Adapter();
setListAdapter(mAdapter);
}
@Override
protected void onResume() {
super.onResume();
run();
}
@Override
protected void onPause() {
super.onPause();
mHandler.removeCallbacks(this);
}
@Override
public void run() {
long now = System.currentTimeMillis();
long beginTime = now - USAGE_STATS_PERIOD;
UsageEvents events = mUsageStatsManager.queryEvents(beginTime, now);
mAdapter.update(events);
mHandler.postDelayed(this, 1000 * 5);
}
private class Adapter extends BaseAdapter {
private final ArrayList<UsageEvents.Event> mEvents = new ArrayList<>();
public void update(UsageEvents results) {
mEvents.clear();
while (results.hasNextEvent()) {
UsageEvents.Event event = new UsageEvents.Event();
results.getNextEvent(event);
mEvents.add(event);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return mEvents.size();
}
@Override
public Object getItem(int position) {
return mEvents.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(UsageLogActivity.this)
.inflate(R.layout.row_item, parent, false);
holder = new ViewHolder();
holder.packageName = (TextView) convertView.findViewById(android.R.id.text1);
holder.state = (TextView) convertView.findViewById(android.R.id.text2);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.packageName.setText(mEvents.get(position).getPackageName());
String state;
switch (mEvents.get(position).getEventType()) {
case UsageEvents.Event.MOVE_TO_FOREGROUND:
state = "Foreground";
break;
case UsageEvents.Event.MOVE_TO_BACKGROUND:
state = "Background";
break;
default:
state = "Unknown: " + mEvents.get(position).getEventType();
break;
}
holder.state.setText(state);
return convertView;
}
}
static class ViewHolder {
public TextView packageName;
public TextView state;
}
}