165d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos/*
265d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * Copyright (C) 2014 The Android Open Source Project
365d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos *
465d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * Licensed under the Apache License, Version 2.0 (the "License");
565d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * you may not use this file except in compliance with the License.
665d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * You may obtain a copy of the License at
765d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos *
865d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos *      http://www.apache.org/licenses/LICENSE-2.0
965d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos *
1065d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * Unless required by applicable law or agreed to in writing, software
1165d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * distributed under the License is distributed on an "AS IS" BASIS,
1265d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * See the License for the specific language governing permissions and
1465d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * limitations under the License
1565d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos */
1665d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
1765d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roospackage com.android.launcher3;
1865d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
1965d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roosimport android.os.Handler;
2065d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roosimport android.os.Looper;
2165d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
2265d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roosimport java.util.List;
2365d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roosimport java.util.concurrent.AbstractExecutorService;
2465d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roosimport java.util.concurrent.TimeUnit;
2565d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
2665d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos/**
2765d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * An executor service that executes its tasks on the main thread.
2865d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos *
2965d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos * Shutting down this executor is not supported.
3065d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos */
3165d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roospublic class MainThreadExecutor extends AbstractExecutorService {
3265d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
3365d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    private Handler mHandler = new Handler(Looper.getMainLooper());
3465d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
3565d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    @Override
3665d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    public void execute(Runnable runnable) {
3765d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos        if (Looper.getMainLooper() == Looper.myLooper()) {
3865d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos            runnable.run();
3965d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos        } else {
4065d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos            mHandler.post(runnable);
4165d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos        }
4265d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    }
4365d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
4465d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    /**
4565d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos     * Not supported and throws an exception when used.
4665d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos     */
4765d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    @Override
4865d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    @Deprecated
4965d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    public void shutdown() {
5065d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos        throw new UnsupportedOperationException();
5165d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    }
5265d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
5365d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    /**
5465d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos     * Not supported and throws an exception when used.
5565d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos     */
5665d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    @Override
5765d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    @Deprecated
5865d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    public List<Runnable> shutdownNow() {
5965d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos        throw new UnsupportedOperationException();
6065d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    }
6165d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
6265d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    @Override
6365d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    public boolean isShutdown() {
6465d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos        return false;
6565d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    }
6665d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
6765d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    @Override
6865d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    public boolean isTerminated() {
6965d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos        return false;
7065d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    }
7165d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos
7265d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    /**
7365d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos     * Not supported and throws an exception when used.
7465d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos     */
7565d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    @Override
7665d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    @Deprecated
7765d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    public boolean awaitTermination(long l, TimeUnit timeUnit) throws InterruptedException {
7865d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos        throw new UnsupportedOperationException();
7965d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos    }
8065d60e21ec22e3bf03ba39f7a0be24df2cc914a2Adrian Roos}
81