1c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu/*
2c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu * Copyright (C) 2011 The Android Open Source Project
3c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu *
4c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu * Licensed under the Apache License, Version 2.0 (the "License");
5c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu * you may not use this file except in compliance with the License.
6c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu * You may obtain a copy of the License at
7c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu *
8c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu *      http://www.apache.org/licenses/LICENSE-2.0
9c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu *
10c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu * Unless required by applicable law or agreed to in writing, software
11c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu * distributed under the License is distributed on an "AS IS" BASIS,
12c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu * See the License for the specific language governing permissions and
14c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu * limitations under the License.
15c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu */
16c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
17c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liupackage com.android.settingslib.net;
18c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
19c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liuimport android.content.AsyncTaskLoader;
20c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liuimport android.content.Context;
21c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liuimport android.net.INetworkStatsSession;
22c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liuimport android.net.NetworkStats;
23c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liuimport android.net.NetworkTemplate;
24c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liuimport android.os.Bundle;
25c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liuimport android.os.RemoteException;
26c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
27c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liupublic class SummaryForAllUidLoader extends AsyncTaskLoader<NetworkStats> {
28c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    private static final String KEY_TEMPLATE = "template";
29c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    private static final String KEY_START = "start";
30c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    private static final String KEY_END = "end";
31c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
32c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    private final INetworkStatsSession mSession;
33c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    private final Bundle mArgs;
34c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
35c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    public static Bundle buildArgs(NetworkTemplate template, long start, long end) {
36c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        final Bundle args = new Bundle();
37c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        args.putParcelable(KEY_TEMPLATE, template);
38c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        args.putLong(KEY_START, start);
39c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        args.putLong(KEY_END, end);
40c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        return args;
41c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    }
42c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
43c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    public SummaryForAllUidLoader(Context context, INetworkStatsSession session, Bundle args) {
44c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        super(context);
45c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        mSession = session;
46c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        mArgs = args;
47c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    }
48c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
49c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    @Override
50c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    protected void onStartLoading() {
51c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        super.onStartLoading();
52c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        forceLoad();
53c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    }
54c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
55c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    @Override
56c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    public NetworkStats loadInBackground() {
57c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        final NetworkTemplate template = mArgs.getParcelable(KEY_TEMPLATE);
58c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        final long start = mArgs.getLong(KEY_START);
59c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        final long end = mArgs.getLong(KEY_END);
60c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
61c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        try {
62c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu            return mSession.getSummaryForAllUid(template, start, end, false);
63c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        } catch (RemoteException e) {
64c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu            return null;
65c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        }
66c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    }
67c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
68c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    @Override
69c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    protected void onStopLoading() {
70c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        super.onStopLoading();
71c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        cancelLoad();
72c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    }
73c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu
74c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    @Override
75c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    protected void onReset() {
76c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        super.onReset();
77c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu        cancelLoad();
78c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu    }
79c0b99c9a248ed2e3e86688465df15690f65d0d4aWei Liu}
80